2017-07-06 6 views
1

私は2つのMySQLデータベースの特権を、異なるIPからAnitectを使ってユーザーに与えます。私は今持っている: バール:リストと変数をループで返す

#users 
root_user: 'root' 
root_password: 'root' 
prosody_user: 'prosody' 
prosody_password: 'prosody' 

#databases 
oauth_db: "oauth" 

#hosts 
prosody_hosts: ['10.0.1.4', '10.0.1.5'] 

タスク:

- name: add or update mysql user prosody 
    mysql_user: 
    name: "{{ prosody_user }}" 
    host: "{{ item.host }}" 
    password: "{{ prosody_password }}" 
    login_user: "{{ root_user }}" 
    login_password: "{{ root_password }}" 
    check_implicit_admin: yes 
    append_privs: yes 
    priv: "{{ item.database }}.*:ALL,GRANT" 
    with_items: 
    - { host: "{{ prosody_hosts[0] }}", database: "{{ oauth_db }}" } 
    - { host: "{{ prosody_hosts[1] }}", database: "{{ oauth_db }}" } 
    - { host: "{{ prosody_hosts[0] }}", database: "{{ prosody_db }}" } 
    - { host: "{{ prosody_hosts[1] }}", database: "{{ prosody_db }}" } 

配列要素の直接の呼び出しは非常に見栄えしませんが。私はちょうどループがprosody_hostsの配列with_itemの指示で、それはデータベースの配列ではない配列をしたいです。

目標は、このような何かを得るためにすることです:事前に

... 
with_items 
- { host: "{{ prosody_hosts }}", database: "{{ oauth_db }}" } 
- { host: "{{ prosody_hosts }}", database: "{{ prosody_db }}" } 

ありがとう!

答えて

0

ネストされたループが必要です。 これを参照してくださいAnsible documentation

基本的には、このようなものになります。ホストと同じようにデータベースを「データベース」というリストに入れてください。これにより、すべてのホストとすべてのデータベースのタスクが実行されます。
私はこれをテストしていませんが、かなり近づくはずです。

- name: add or update mysql user prosody 
    mysql_user: 
    name: "{{ prosody_user }}" 
    host: "{{ item[0] }}" 
    password: "{{ prosody_password }}" 
    login_user: "{{ root_user }}" 
    login_password: "{{ root_password }}" 
    check_implicit_admin: yes 
    append_privs: yes 
    priv: "{{ item[1] }}.*:ALL,GRANT" 
    with_nested: 
    - "{{ prosody_hosts }}" 
    - "{{ databases }}" 
関連する問題