Ansible : Wie man eine Rolle in einem spezifischen host

Ich habe ein playbook , das aufrufen von mehreren Rollen, und führen Sie Sie in mehrere hosts:

Mein playbook:

---
- hosts: all
  gather_facts: true
  vars:
    - selected_APIS: "{{ RCD_APIS.split(',') }}"
  pre_tasks:
    - name : Display selected micro-services
      run_once: true
      debug:
        msg: "{{selected_APIS}}"
  roles:
    - { role: pullDockerImages , when: '"PULL" in DEPL_MODE'}
    - { role: stopDockerContainers , when: '"STOP" in DEPL_MODE'}
    - { role: pullDockerConFiles , when: '"START" in DEPL_MODE'}  //THIS ROLE
    - { role: prepareDirectoriesTree , when: '"START" in DEPL_MODE'}  
    - { role: startDockerContainers , when: '"START" in DEPL_MODE'}

Mein Ziel ist, dass :

will ich ausführen die Dritte Rolle nur auf localhost /oder einem bestimmten host

wie kann ich es machen???

Ich ve versucht, um "hosts: localhost" zu meinen Aufgaben in dieser Rolle , aber das nicht , ich hab auch versucht delegate_to: localhost und local_action , aber alle gescheitert.

Vorschläge ?

  • Was ist der Anwendungsfall? Scheint, wie und XY-problem
  • Ich versuchte es gerade jetzt, und es funktioniert perfekt. Was ist dein genaues problem? Sie erhalten ein permission denied? Wenn dem so ist, bitte aktualisieren Sie die Frage, und ich könnte in der Lage sein zu helfen.
  • was genau geht gut mit u ?
  • mit localhost als parameter für hosts: im playbook. Sie können (im code oben gepostet) ändern hosts: all zu hosts: localhost
InformationsquelleAutor firasKoubaa | 2018-01-26



One Reply
  1. 1

    Müssen Sie, um eine Liste aller hosts in der Inventar-Datei, auch localhost, zum Beispiel

    [sandbox]
    localhost    ansible_connection=local
    other1.example.com    ansible_connection=ssh
    other2.example.com    ansible_connection=ssh
    

    Dann in Ihre playbook, müssen Sie den Verweis auf „localhost“ durch den index, in meinem Fall localhost hat einen index 0, deshalb können wir schreiben, wie diese

    ---
    - hosts: all
      gather_facts: true
      vars:
        - selected_APIS: "{{ RCD_APIS.split(',') }}"
      pre_tasks:
        - name : Display selected micro-services
          run_once: true
          debug:
            msg: "{{selected_APIS}}"
      roles:
        - { role: pullDockerImages , when: '"PULL" in DEPL_MODE and inventory_hostname != play_hosts[0]'}
        - { role: stopDockerContainers , when: '"STOP" in DEPL_MODE and inventory_hostname != play_hosts[0]'}
        - { role: pullDockerConFiles , when: '"START" in DEPL_MODE and inventory_hostname == play_hosts[0]'}  //THIS ROLE
        - { role: prepareDirectoriesTree , when: '"START" in DEPL_MODE and inventory_hostname != play_hosts[0]'}  
        - { role: startDockerContainers , when: '"START" in DEPL_MODE and inventory_hostname != play_hosts[0]'}
    

    Als Ergebnis 3. Rolle wird nur ausgeführt, auf dem localhost, nicht von anderen Rollen nicht ausgeführt werden, auf localhost.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.