Você pode registrar a saída de qualquer tarefa como uma variável da seguinte forma:
- name: Create Linode Machine
linode:
api_key: 'blablabla'
...
register: result
Agora você tem o resultado das tarefas armazenado na variável result
e deve poder acessar o IP via result['instance']['ipv4']
.
Se não, o módulo de depuração é seu amigo e você pode inspecionar o conteúdo da variável:
- debug: var=result
Se você quiser realmente disponibilizá-lo para outro livro de estratégias que não faça parte da execução atual, fato -caching pode ser uma opção para você. Com o cache de fatos ativado, você pode usar set_fact
:
- set_fact:
myInstanceIp: "{{ result['instance']['ipv4'] }}"
Outra complicação é que variáveis / fatos são armazenados por host. No caso acima você armazenou a variável para localhost. Por isso, estará disponível apenas diretamente em tarefas executadas no contexto do host local.
No entanto, a seção de hosts do playbook não é avaliada no contexto de nenhum host, portanto, você não pode acessar diretamente essa variável.
Eu vejo três opções possíveis:
1) Execute a segunda peça também no host local e depois delegue as tarefas para outro host. Desde agora a tarefa é executada no contexto do localhost você deve ser capaz de acessar o result
registrado.
- hosts: localhost
delegate_to: "{{ result['instance']['ipv4'] }}"
remote_user: root
tasks:
...
De acordo com os documentos delegate_to
funcionarão em tarefas, mas eu acho que isso deve funcionar nível de jogo, bem como, em seguida, passá-lo para todas as tarefas contidas. Caso contrário, você precisará adicioná-lo a todas as tarefas.
- hosts: localhost
remote_user: root
tasks:
- name: "test"
command: ls -la
delegate_to: "{{ result['instance']['ipv4'] }}"
- apt: upgrade=dist update_cache=yes
delegate_to: "{{ result['instance']['ipv4'] }}"
2) Mesmo que não executado no contexto do localhost, você deve ser capaz de acessar os vars relacionados através do hostvars dict :
- hosts: "{{ hostvars['localhost']['result']['instance']['ipv4'] }}"
remote_user: root
...
3) Crie dinamicamente um novo grupo com o módulo add_host :
- add_host:
name: "{{ result['instance']['ipv4'] }}"
groups: just_created
E, em seguida, use o grupo just_created
na próxima reprodução:
- hosts: just_created
tasks: ...