Estou tentando configurar dinamicamente vários servidores NFS no meu sistema gerando seus arquivos /etc/exports usando o Ansible. Espero poder fazer isso com um modelo jinja2. É o modelo jinja2 que não consigo descobrir com base na minha lista de exportações.
Eu tenho as seguintes variáveis definidas na minha função nfs:
site_nfs_servers: ['ansibletarget1', 'ansibletarget2']
exports:
- server: "ansibletarget1"
shares:
- path: "/my/first/share/path"
client: "*"
options: "rw,sync"
- path: "/my/second/share/path"
client: "*"
options: "rw,sync,root_squash"
- server: "ansibletarget2"
shares:
- path: "/another/shared/path/different/server"
client: "*"
options: "ro,sync"
Eu então tenho o seguinte ansible play para gerar o modelo:
- name: Generate the exports file.
template:
src: exports.j2
dest: /etc/exports
owner: root
group: root
mode: '0750'
Meu template atualmente está assim:
{% for export in exports %}
{% if ansible_hostname in export.server %}
{% for share in shares %}
{{ share.path }} {{ share.client }} {{ share.options }}
{% endfor %}
{% endif %}
{% endfor %}
Acho que não estou nem perto de ter a estrutura de modelo correta. Como diabos alguém itera nessa lista?
Você está perdendo a referência ao
export
em seu segundo loop.No entanto, seria melhor definir os compartilhamentos nas variáveis do host, conforme mostrado na resposta de Vladimir.
Criar inventário
e coloque os compartilhamentos no host_vars
Criar uma função simplificada para teste
Em seguida, use o grupo de inventário e a função em um manual
Execute o manual e crie os arquivos
Consulte Exemplo de configuração do Ansible .
Se você quiser manter os compartilhamentos em um objeto, coloque a lista em groups_vars . Para simplificar o código, converta a lista em um dicionário. Você pode usar community.general.groupby_as_dict por exemplo
dá
Em seguida, modifique o modelo. Isso deve criar os mesmos arquivos de antes.