ansible runグローバル変数


8

ansibleを使用して、サーバーのクラスターを作成したいと思います。

1つのメインプレイブックに、いくつかのサブプレイブックを含めています。

- include: playbook_commandserver.yml
- include: playbook_agent.yml

playbook_commandserver.ymlで、コマンドサーバー(aws上)を作成します。次に、set_factモジュールを使用してコマンドサーバーのDNS名を記憶するロールをトリガーします。

- name: Get hostname of command server
  shell: /usr/bin/host $(/usr/bin/curl -s http://ipecho.net/plain) | /usr/bin/awk '{print $5}' | /usr/bin/awk -F 'aws.com' '{print $1"aws.com"}'
  register: cs
- name: Set hostname of command server as fact
  set_fact: commandserver="{{ cs.stdout }}"

commandserver実際には、同じプレーではなく、同じ脚本で..おろかで提供されplaybook_agent.yml、その後、含まれ得ることを、。そして、それはまさにそこにあり、そこでcommandserver-factにアクセスする必要があります。

では、完全なansible-runに有効な変数をどのように設定/保存するのでしょうか。

私はこれを見つけました:https : //stackoverflow.com/questions/26732241/ansible-save-registered-variable-to-file しかし、私にはこれは醜いハックのように見えます。

この問題に対するより良い解決策はありませんか?変数を設定する方法はありません、それはansible-run全体に有効ですか?

回答:


12

はい、可能です。set_factモジュールでファクトを設定すると、このファクトには「hostvars」からアクセスできます。したがって、変数commandserverを次のように定義すると、

  - name: Set hostname of command server as fact
    set_fact: commandserver="{{ cs.stdout }}"

その後、同じ方法で含まれる他のプレイブックでこの方法でこの変数にアクセスできます(デバッグモジュールは単なる例です)。

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.