Creați un inventar
coajă> gazde pisici
[site_nfs_servers]
ansibletarget1
ansibletarget2
și puneți acțiuni în host_vars
shell> cat host_vars/ansibletarget1.yml
acțiuni:
- cale: „/my/first/share/path”
client: "*"
opțiuni: „rw,sync”
- cale: „/my/second/share/path”
client: "*"
opțiuni: „rw,sync,root_squash”
shell> cat host_vars/ansibletarget2.yml
acțiuni:
- cale: „/altul/partajat/cale/diferent/server”
client: "*"
opțiuni: "ro,sync"
Creați un rol simplificat pentru testare
shell> tree roles/my_nfs_role/
roles/my_nfs_role/
âââ sarcini
â  âââ main.yml
âââ şabloane
âââ exporturi.j2
2 directoare, 2 fișiere
shell> cat roles/my_nfs_role/tasks/main.yml
- șablon:
src: exporturi.j2
dest: /etc/exports.test
shell> cat roles/my_nfs_role/templates/exports.j2
{% pentru cota de acțiuni %}
{{ share.path }} {{ share.client }} {{ share.options }}
{% endfor %}
Apoi, folosiți grupul de inventar și rolul dintr-un manual
shell> cat playbook.yml
- gazde: site_nfs_servers
roluri:
- my_nfs_role
Rulați playbook-ul și creați fișierele
shell> ansible-playbook -i găzduiește playbook.yml
PLAY [site_nfs_servers] ********************************************** **
SARCINA [my_nfs_role: template] ********************************************
schimbat: [ansibletarget1]
schimbat: [ansibletarget2]
...
shell> ssh admin@ansibletarget1 cat /etc/exports.test
/my/first/share/path * rw,sync
/my/second/share/path * rw,sync,root_squash
shell> ssh admin@ansibletarget2 cat /etc/exports.test
/other/shared/path/different/server * ro,sync
Vedea Exemplu de configurare Ansible.
Dacă doriți să păstrați acțiunile într-un singur obiect, puneți lista în grupuri_vars. Pentru a simplifica codul, convertiți lista într-un dicționar. Poți să folosești comunitate.general.groupby_as_dict de exemplu
shell> cat group_vars/all.yml
exporturi:
- server: „ansibletarget1”
acțiuni:
- cale: „/my/first/share/path”
client: "*"
opțiuni: „rw,sync”
- cale: „/my/second/share/path”
client: "*"
opțiuni: „rw,sync,root_squash”
- server: „ansibletarget2”
acțiuni:
- cale: „/altul/partajat/cale/diferent/server”
client: "*"
opțiuni: "ro,sync"
exports_dict: „{{ exports|community.general.groupby_as_dict('server') }}”
dă
exports_dict:
ansibletarget1:
server: ansibletarget1
acțiuni:
- client: '*'
opțiuni: rw,sync
cale: /my/first/share/path
- client: '*'
opțiuni: rw,sync,root_squash
cale: /my/second/share/path
ansibletarget2:
server: ansibletarget2
acțiuni:
- client: '*'
opțiuni: ro,sync
cale: /other/shared/path/different/server
Apoi modificați șablonul. Acest lucru ar trebui să creeze aceleași fișiere ca înainte.
shell> cat roles/my_nfs_role/templates/exports.j2
{% pentru cota în exports_dict[inventory_hostname]['shares'] %}
{{ share.path }} {{ share.client }} {{ share.options }}
{% endfor %}