2017-01-16 3 views
4

J'ai une question quand j'utilisais le rôle Anfs NFS.Créer des chaînes dynamiquement dans l'inventaire Ansible

rôle NFS: https://github.com/geerlingguy/ansible-role-nfs

Ma situation est comme ceci: Nous allons créer une liste des machines virtuelles qui sont des clients NFS. Et nous avons besoin d'un contrôle d'accès sur le serveur NFS. Nous avons donc défini une liste nommée 'nfs_exports' dans l'inventaire Ansible en fonction du rôle ci-dessus.

Certaines des machines virtuelles seront terminées et désaffectées après une charge de travail complète. Et nous réexécuterons le playbook y compris le rôle NFS pour mettre à jour les paramètres du serveur NFS. Donc, il y a un groupe d'hôtes 'client_group', et la quantité d'hôtes est variable.

S'il y a une machine virtuelle, la liste des nfs_exports sera:

nfs_clients: "{{ groups['client_group'] }}" 
nfs_exports: 
- "{{ nfs_dirs[0] }} {{ nfs_clients[0] }}(rw)" 
- "{{ nfs_dirs[1] }} {{ nfs_clients[0] }}(ro)" 

Et s'il y a deux machines virtuelles,

nfs_clients: "{{ groups['client_group'] }}" 
nfs_exports: 
- "{{ nfs_dirs[0] }} {{ nfs_clients[0] }}(rw) {{ nfs_clients[1] }}(rw)" 
- "{{ nfs_dirs[1] }} {{ nfs_clients[0] }}(ro) {{ nfs_clients[1] }}(ro)" 

Et s'il y a trois machines virtuelles,

nfs_clients: "{{ groups['client_group'] }}" 
nfs_exports: 
- "{{ nfs_dirs[0] }} {{ nfs_clients[0] }}(rw) {{ nfs_clients[1] }}(rw) {{ nfs_clients[2] }}(rw)" 
- "{{ nfs_dirs[1] }} {{ nfs_clients[0] }}(ro) {{ nfs_clients[1] }}(ro) {{ nfs_clients[2] }}(ro)" 

Ce n'est pas bon dans notre cas. Parce que chaque fois que la quantité de machines virtuelles a changé, j'ai besoin de changer les 'nfs_exports' manuellement.

J'ai besoin de construire les chaînes dans la liste 'nfs_exports' dynamiquement. Donc s'il y a une VM, il n'y aura qu'un seul client dans 'nfs_exports'. S'il y a plusieurs machines virtuelles, toutes les machines virtuelles doivent être automatiquement incluses dans 'nfs_exports'.

Quelqu'un peut-il fournir une solution sur la construction de chaînes dans 'nfs_exports', ne pas changer manuellement 'nfs_exports' quand 'client_group' change?

Répondre

4

Ici, vous allez:

- hosts: localhost 
    gather_facts: no 
    vars: 
    nfs_clients: 
     - server1 
     - server2 
     - server3 
    nfs_dirs: 
     - path1 
     - path2 
    nfs_exports: 
     - "{{ nfs_dirs[0] }} {{ ' '.join(nfs_clients | map('regex_replace','$','(rw)')) }}" 
     - "{{ nfs_dirs[1] }} {{ ' '.join(nfs_clients | map('regex_replace','$','(ro)')) }}" 
    tasks: 
    - debug: var=nfs_exports 

Sortie:

ok: [localhost] => { 
    "nfs_exports": [ 
     "path1 server1(rw) server2(rw) server3(rw)", 
     "path2 server1(ro) server2(ro) server3(ro)" 
    ] 
} 
+0

J'ai vérifié votre code et il fonctionne très bien. Merci beaucoup! –