it-swarm.com.de

So geben Sie verschiedene Hosts für verschiedene Playbooks in einem ansible Skript an

Soweit ich weiß, benötigt jedes Playbook einen Host-Eintrag. Ich möchte wissen, dass ich beim Erstellen eines Container-Playbooks, das andere Playbooks enthält, die Hosts für jedes Playbook-Include parametrisieren kann. Also so etwas wie

---
- include playbook_1.yml
    hosts: tag_postgres
- include: playbook_2.yml
    hosts: tag_rabbitmq

Ich kann alle verschiedenen Playbooks in ein Skript einfügen und aufrufen, aber auf diese Weise kann ich set_fact nicht von einem Playbook in ein anderes wiederverwenden, und daher gibt es viele Aufgabenüberschneidungen.

Eine weitere Folge der Frage ist, kann ich ec2s auf Amazon starten, was hätte

hosts: localhost

und Konfiguration der gestarteten ec2s, die im Grunde das Inventar von -i ec2.py und haben Hosts angegeben als

hosts: tag_<some_tag>

passiert durch dasselbe Spielbuch oder eine Reihe von enthaltenen Spielbüchern (verschiedene Rollen)?

9
Pankaj Lal

http://docs.ansible.com/ansible/playbooks_variables.html#information-discovered-from-systems-facts

... Es gibt andere Stellen, von denen Variablen stammen können, aber dies sind Variablentypen, die erkannt und nicht vom Benutzer festgelegt werden.

Fakten sind Informationen, die aus dem Sprechen mit Ihren Remote-Systemen stammen ...

Die Fakten werden von Ihren Remote-Hosts abgeleitet. Dies ist der Grund, warum Sie normalerweise Fakten zwischen Ihren verschiedenen Hosts teilen können, wenn Ihre *. Yml Datei haben mehrere Playbooks .

Jetzt können Sie auf Fakten von anderen Hosts zugreifen, wenn Sie in einem anderen Teil Ihres Spielbuchs so etwas tun:

{{ hostvars['server01.example.com']['ansible_eth0']['ipv4']['address'] }}
...
...
{{ hostvars[groups['servers'][0]]['ansible_eth0']['ipv4']['address'] }}

in diesem Fall müssen Sie sich jedoch daran erinnern, dass Sie die Fakten abrufen müssen, bevor Sie dies verwenden. Anschließend können Sie einen ersten Teil in Ihrem Playbook einrichten, der alle Fakten für alle Hosts abruft, oder dafür das Fakten-Caching verwenden (siehe: http://docs.ansible.com/ansible/playbooks_variables.html#fact-) Caching )

Wenn Sie Optionen in Ihren Playbooks freigeben möchten, ist es möglicherweise besser, die Informationen zum Einfügen von Variablen zu überdenken. Auf diese Weise können Sie Ihre Variablen mit derselben include -Anweisung "freigeben". Sehen Sie sich Folgendes an:

http://docs.ansible.com/ansible/playbooks_variables.html#variables-defined-from-included-files-and-roles

4
Yonsy Solis

Tatsächlich können Sie mehr als einen Host haben: Abschnitt pro Spielbuch. Es scheint, dass ein Host: ein neues Spiel startet. Siehe beispielsweise http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/ .

So etwas funktioniert bei mir (ansible 2.2):

---
- hosts: localhost 
  connection: local
  roles:
    - { role: ec2,
        tag: 'master',
        instance_type: t2.2xlarge,
        count: 1
      }
  tasks:
  - Shell: hostname # reports localhost

- hosts: tag_master
  tasks:
  - Shell: hostname # reports instance(s) with tag 'master'

Setzen Sie also Hosts: oben in jedes enthaltene .yml, nicht nach dem include:.

4
Bill Welch