web-dev-qa-db-fra.com

Ansible - actions AVANT de rassembler des faits

Est-ce que quelqu'un sait comment faire quelque chose (comme attendre le port/démarrage du nœud géré) AVANT rassembler les faits? Je sais que je peux désactiver la collecte de faits

gather_facts: no

et PUIS attendre le port mais que se passe-t-il si j'ai besoin des faits tout en devant encore attendre que le nœud démarre?

44
silverdr

La collecte de faits équivaut à exécuter le module setup . Vous pouvez collecter manuellement des faits en l'exécutant. Ce n'est pas documenté, mais ajoutez simplement une tâche comme celle-ci:

- name: Gathering facts
  setup:

En combinaison avec gather_facts: no au niveau du playbook, les faits ne seront récupérés que lorsque la tâche ci-dessus est exécutée.

Les deux dans un exemple de playbook:

- hosts: all
  gather_facts: no
  tasks:

    - name: Some task executed before gathering facts
      # whatever task you want to run

    - name: Gathering facts
      setup:
56
udondan

Quelque chose comme ça devrait fonctionner:

- hosts: my_hosts
  gather_facts: no

  tasks:
      - name: wait for SSH to respond on all hosts
        local_action: wait_for port=22

      - name: gather facts
        setup:

      - continue with my tasks...

Le wait_for s'exécutera localement sur votre hôte ansible, en attendant que les serveurs répondent sur le port 22, puis le module de configuration effectuera la collecte des faits, après quoi vous pourrez faire tout ce que vous devez faire.

21
Bruce P

J'essayais de comprendre comment provisionner un hôte à partir d'ec2, attendre que ssh apparaisse, puis exécuter mon playbook contre. C'est fondamentalement le même cas d'utilisation que vous. Je me suis retrouvé avec ce qui suit:

- name: Provision App Server from Amazon
  hosts: localhost
  gather_facts: False
  tasks:  
    # ####  call ec2 provisioning tasks here  ####
    - name: Add new instance to Host group
      add_Host: hostname="{{item.private_ip}}" groupname="appServer"
      with_items: ec2.instances

- name: Configure App Server
  hosts: appServer
  remote_user: ubuntu
  gather_facts: True
  tasks:  ----configuration tasks here----

Je pense que la terminologie ansible est que j'ai deux jeux dans un playbook, chacun fonctionnant sur un groupe d'hôtes différent (localhost et le groupe appServer)

1
Daniel Bower