web-dev-qa-db-ja.com

Ansible-インベントリホストと変数をgroup_vars / allファイルに読み取ります

長い間立ち往生しているダミーの疑いがあります。ホストと変数を含む非常に平凡なインベントリファイルがあります。

[lb]
10.112.84.122

[Tomcat]
10.112.84.124

[jboss5]
10.112.84.122

...

[tests:children]
lb
Tomcat
jboss5

[default:children]
tests

[tests:vars]
data_base_user=NETWIN-4.3
data_base_password=NETWIN
data_base_encrypted_password=
data_base_Host=10.112.69.48
data_base_port=1521
data_base_service=ssdenwdb
data_base_url=jdbc:Oracle:thin:@10.112.69.48:1521/ssdenwdb

問題は、group_vars/allファイルから、インベントリファイル内のこれらすべてのホストと変数にアクセスする必要があることです。

ホストIPにアクセスするために次の方法を試しました。

{{ lb }}
"{{ hostvars[lb] }}"
"{{ hostvars['lb'] }}"
{{ hostvars[lb] }}

私が試したホスト変数にアクセスするには:

"{{ hostvars[tests].['data_base_Host'] }}"

それらはすべて間違っています!!!プレイブックではなく変数ファイルからホストと変数にアクセスするためのベストプラクティスを見つけるのを手伝ってくれる人はいますか?

編集:

OK。明確にしましょう。

問題:変数ファイルのインベントリファイルで宣言されたホストを使用します。たとえば、group_vars/allです。

例:IP:10.112.83.37のDBホストがあります。

インベントリファイル:

[db]
10.112.83.37

Group:vars/allファイルで、そのIPを使用して変数を作成します。

group_vars/allファイル:

data_base_url=jdbc:Oracle:thin:@{{ db }}:1521/ssdenwdb

テンプレートでは、group_vars/allファイルに組み込まれた変数を使用します。

テンプレートファイル:

Oracle_url = {{ data_base_url }}

問題は、group_vars/allファイルの{{ db }}変数がDBホストIPに置き換えられないことです。ユーザーはインベントリファイルのみを編集できます。

25
Tiago Sousa
- name: Host
   debug: msg="{{ item }}" 
   with_items:
    - "{{ groups['tests'] }}"

このコードは次のメッセージを表示します。

'10.112.84.122'
'10.112.84.124'

なので groups['tests']基本的に一意のIPアドレスのリストを返します['10.112.84.122','10.112.84.124']に対してgroups['Tomcat'][0] 返却値 10.112.84.124

27
eldos

プログラムでインベントリエントリにアクセスして、たとえばタスクに含める場合。次のように参照できます。

{{ hostvars.Tomcat }}

これにより、そのホストに関連するすべての変数を含む構造体が返されます。 IPアドレス(またはホスト名)だけが必要な場合は、次のように参照できます。

{{ hostvars.jboss5.ansible_ssh_Host }}

参照できる変数のリストは次のとおりです。 click 。さらに、変数を宣言して、たとえば、プレイブックのいくつかのステップの結果で変数を設定できます。

- name: Change owner and group of some file
  file: path=/tmp/my-file owner=new-owner group=new-group
  register: chown_result

次に、このステップをTomcatで再生すると、jboss5 このような:

- name: Print out the result of chown
  debug: msg="{{ hostvars.Tomcat.chown_result }}"
20
wpodgorski

念のため、問題がまだある場合は、‘hostvars’‘group_names’、および‘groups’可能な変数。

例:

グループ「mygroup」内のすべてのサーバーのIPアドレスを取得できるようにするには、以下の構成を使用します。

- debug: msg="{{ hostvars[item]['ansible_eth0']['ipv4']['address'] }}" 
  with_items:
     - "{{ groups['mygroup'] }}"
14
odzhu

はい、nixlikeの例は非常にうまく機能します。

在庫:

[docker-Host]
myhost1 user=barbara
myhost2 user=heather

プレイブック:

---

- hosts: localhost
  connection: local         

     tasks:    
        - name: loop debug inventory hostnames
          debug: 
            msg: "the docker Host is {{ item }}"
          with_inventory_hostnames: docker-Host
        - name: loop debug items
          debug: 
            msg: "the docker Host is {{ hostvars[item]['user'] }}"
          with_items: "{{ groups['docker-Host'] }}"

出力:

ansible-playbook ansible/tests/vars-test-local.yml

PLAY [localhost]


タスク[セットアップ] ************************************************* ********************* OK:[localhost]

タスク[ループデバッグインベントリのホスト名] ****************************************** ok :[localhost] =>(item = myhost2)=> {"item": "myhost2"、 "msg": "ドッカーホストはmyhost2"} ok:[localhost] =>(item = myhost1)=> {" item ":" myhost1 "、" msg ":"ドッカーホストはmyhost1 "}

タスク[ループデバッグ項目] *********************************************** ************ ok:[localhost] =>(item = myhost1)=> {"item": "myhost1"、 "msg": "ドッカーホストはbarbara"} ok:[ localhost] =>(item = myhost2)=> {"item": "myhost2"、 "msg": "ドッカーホストはヒース"}

PLAY RECAP *************************************************** ********************* localhost:ok = 3 changed = 0 unreachable = 0
failed = 0

ありがとう!

3
nettie

前の例を考えてみましょう:

インベントリファイル:

[db]
10.112.83.37

group_vars/all

data_base_url=jdbc:Oracle:thin:@{{ db }}:1521/ssdenwdb

テンプレートファイル:

Oracle_url = {{ data_base_url }}

Group_vars/allを次のように置き換えることができます。

data_base_url="jdbc:Oracle:thin:@{{ groups['db'][0] }}:1521/ssdenwdb"
2
Antonio Pérez