1つのansibleスクリプトで異なるプレイブックに異なるホストを指定する方法


9

私が理解しているように、各プレイブックは1つのホストエントリを取ります。他のプレイブックを含むコンテナプレイブックを作成する場合、各プレイブックインクルードのホストをパラメータ化できることを知りたいです。だから何か

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

すべての異なるプレイブックを1つのスクリプトに入れて呼び出すことができますが、この方法では、1つのプレイブックから別のプレイブックにset_factを再利用できないため、多くのタスクの重複があります。

質問の別の結果として、私はec2をAmazonで起動できますか?

hosts: localhost

起動されたec2の構成。基本的にはからインベントリを構成し-i ec2.py、ホストは次のように指定されます。

hosts: tag_<some_tag>

同じプレイブックまたは含まれている一連のプレイブック(異なる役割)で発生しますか?


hosts:yamlに複数のセクションを含めることができ、本質的に、インベントリ内の異なるホストグループを使用する複数のプレイブックがあることを知っていますか?
Yonsy Solis

回答:


4

実際には、プレイブックごとに1つ以上のホストを持つことができます。ホストのようです:新しいプレーを開始します。たとえば、http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/を参照してください

このようなものは私にとってはうまくいきます(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'

したがって、含まれる各.ymlの先頭にhosts:を配置します。include:の後には配置しません。


4

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

...変数が発生する可能性のある場所は他にもありますが、これらはユーザーが設定するのではなく、検出される変数のタイプです。

ファクトは、リモートシステムとの会話から得られる情報です...

事実は、リモートホストから取得されます。これが、通常、*。ymlファイルに複数のプレイブックがある場合に、異なるホスト間でファクトを共有できる理由です。

これで、プレイブックの別の部分で次のようにした場合、他のホストからファクトにアクセスできます。

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

しかし、この場合は、これを使用するに事実を入手する必要があることを覚えておく必要があります。次に、すべてのホストのすべてのファクトを取得するプレイブックの最初の部分を設定するか、これにファクトキャッシングを使用できます(http://docs.ansible.com/ansible/playbooks_variables.html#fact-cachingを参照)

さて、プレイブックでオプションを共有したい場合は、情報を再考して変数に入れることをお勧めします。これにより、同じinclude命令で変数を「共有」できます。次を見てください。

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


2
私の質問はホストに非常に固有であり、一般的な変数ではありませんでした。私の必要性は、ホストを持たないマスタープレイブックを作成できるようにすることですが、含まれる各プレイブックにはホストが含まれているか、パラメーターとして指定できます。私はいつでもそれらを別々のプレイブックとして実行できますが、1つで取得したファクトは次のプレイブックに引き継がれないため、多くの冗長性があります
Pankaj Lal

上記をもう一度お読みください:「これで、プレイブックの別の部分でこのようなことを行うと、他のホストからファクトにアクセスできるようになります。これ」なので、はい、マスタープレイブックに含まれているプレイブック間で事実を共有できます。
Yonsy Solis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.