2017-07-06 1 views
1

Ich werde Privilegien für zwei MySQL-Datenbanken zu Benutzer von verschiedenen IP mit Ansible gewähren. Was ich jetzt habe: Vars:Schleife durch Liste und Variable in Ansible

#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'] 

Aufgabe:

- 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 }}" } 

Direkter Aufruf der Array-Elemente nicht sehr schön aussieht. Ich möchte nur Schleife durch prosody_hosts Array in with_item Direktive, сonsidering, dass Datenbank ist kein Array.

Ziel ist es, so etwas zu bekommen:

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

Vielen Dank im Voraus!

Antwort

0

Was Sie brauchen, sind verschachtelte Schleifen. Siehe hierzu Ansible documentation.

Im Grunde würden Sie mit etwas ähnliches wie diesem enden. Setzen Sie Ihre Datenbanken in eine Liste mit dem Namen "Datenbanken", wie Sie es mit Hosts getan haben. Dies führt die Aufgabe für jeden Host und jede Datenbank aus.
Ich habe das nicht getestet, aber es sollte ziemlich nah kommen.

- 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 }}"