Executar incluído tarefa ansible como tarefa autônoma

7

Eu tenho muitos playbooks Ansible que serão incluídos em playbooks muito maiores. Por exemplo:

---
- name: Add user me
  user: name=me comment="Me" uid=9999 groups=somegroup
- name: Add my ssh public key
  authorized_key: user=me key="{{ lookup('file', 'id_rsa.pub') }}"

Existe uma maneira de passar um nome de host e executá-lo como uma tarefa autônoma a partir da linha de comando, ou eu preciso criar outro playbook para executar essas duas tarefas sozinhos?

    
por Pyzo 05.02.2014 / 23:46

4 respostas

5

Existem dois requisitos para conseguir isso: -

  1. o host que você está tentando segmentar deve estar em um arquivo de inventário
  2. você precisa marcar as tarefas na função que deseja executar

    - name: Add user me
      user: name=me comment="Me" uid=9999 groups=somegroup
      tags: this_role
    - name: Add my ssh public key
      authorized_key: user=me key="{{ lookup('file', 'id_rsa.pub') }}"
      tags: this_role
    

Então você pode: -

ansible-playbook foo.yml -i hosts -t this_role --limit host.example.com

Não que isso ainda esteja executando o manual que contém a reprodução completa, mas está limitando as tarefas executadas apenas àquelas que correspondem à tag. As tarefas restantes serão ignoradas.

    
por 07.02.2014 / 17:41
1

Ambos os usuário e authorized_key são módulos. Então você pode chamar isso com ansible -m de qualquer script

ansible all -i host.example.com, -m user -a 'name=me comment="Me" uid=9999 groups=somegroup'
ansible all -i host.example.com, -m authorized_key -a "user=me key=\"{{ lookup('file', 'id_rsa.pub') }}\""

Observe a vírgula final após o nome do host.

    
por 17.04.2017 / 01:12
0

Claro, você deve ser capaz de fazer algo como:

$ ansible-playbook foo.yml -i hosts -u user --limit host.example.com
    
por 05.02.2014 / 23:50
0

Eu me deparei com esse problema também.

Eu trabalhei em torno do problema, criando um pequeno playbook runner, que eu então chamo com um parâmetro.

> tree
.
├── ansible.cfg
├── inventory
├── taskrunner.yml
├── tasks
└── hello.yml

> cat taskrunner.yml:
  ---
  - hosts: all
    tasks:
    - name: "Runner will try to run task: {{ task }}"
      include: "{{ task }}"

> cat tasks/hello
  - name: print hello
    shell: echo hello world

> ansible-playbook taskrunner.yml -e task=tasks/hello.yml
    
por 06.09.2018 / 19:53

Tags