Estou tentando criar uma automação Fortinet FortiManager com sua coleção Ansible .
Eu criei uma tarefa dinâmica de criação de ADOM que é executada em um loop e agora estou tentando executar outras tarefas dinâmicas que criam modelos CLI dentro de todos os ADOMs criados. O problema que estou enfrentando é que tenho que definir o nome ADOM várias vezes em diferentes tarefas executadas em um loop, mas o que gostaria de fazer é herdar/compartilhar o nome ADOM entre as tarefas de loop, para não ter que definir repetidamente para cada tarefa de loop com outro nome de variável.
Este é o código que tenho com as descrições:
- Criei uma tarefa que inclui tarefas de criação de ADOM e a executa em um loop para cada ADOM que preciso criar. Eu preciso fazer isso devido ao fato de que o resultado do estado da tarefa de criação do FortiManager ADOM não dá "OK" se o ADOM já foi criado, mas falha. Então eu tive que construir assim.
---
name: 'Setup ADOMS'
loop: '{{ fmg_adom_list }}'
loop_control:
loop_var: '__adom'
label: '{{ __adom.fmg_adom_name }}'
ansible.builtin.include_tasks: 'fmg_setup_adom.yml'
- Esta é a tarefa de criação do ADOM e verifique se o ADOM existe para pular a criação
- name: Check if ADOM exists
fortinet.fortimanager.fmgr_fact:
facts:
selector: "dvmdb_adom"
params:
adom: "{{ __adom.fmg_adom_name }}"
register: fmg_adom_check
no_log: false
ignore_errors: true
changed_when: "fmg_adom_check.rc != 0"
failed_when: "fmg_adom_check.rc == -3"
- name: "Create ADOM {{ __adom.fmg_adom_name }}"
fortinet.fortimanager.fmgr_dvmdb_adom:
bypass_validation: "{{ fmg_bypass_validation }}"
state: "{{ __adom.fmg_adom_state | default('present') }}"
dvmdb_adom:
name: "{{ __adom.fmg_adom_name | replace(' ', '_') }}"
desc: "{{ __adom.fmg_adom_desc }}"
os_ver: "{{ __adom.fmg_adom_os_ver | default(7.0) | float }}"
mode: "{{ __adom.fmg_adom_mode | default('gms') }}"
restricted_prds: "{{ __adom.fmg_adom_restricted_prds | default('fos') }}"
state: " {{ __adom.fmg_dvmdb_adom_state | default(1) | int }}"
flags: "{{ __adom.fmg_adom_flags }}"
register: fmg_adom_create
when: fmg_adom_check.meta.response_message == "Object does not exist"
- name: Print ADOM creation error message
ansible.builtin.debug:
msg: "Failed to create ADOM: {{ fmg_adom_check.meta.response_message }}"
when: fmg_adom_create is failed
- name: Print ADOM already exists message
ansible.builtin.debug:
msg: "ADOM {{ __adom.fmg_adom_name }} already exists"
when: fmg_adom_create is skipped
- name: Print ADOM created successfully message
ansible.builtin.debug:
msg: "ADOM {{ __adom.fmg_adom_name }} created successfully"
when: fmg_adom_create is succeeded and fmg_adom_create is not skipped
- Esta é a tarefa de modelo CLI que me dá um erro:
The error was: 'list object' has no attribute 'fmg_adom_name'
. Estou preso em entender como posso fazer a tarefa usar afmg_adom_name
lista de variáveis de criação do ADOM, em vez de repetir a variável com um novo nome, comofmg_tmpl_grp_adom
o ADOM é uma variável obrigatória.
---
- name: Create CLI template group {{ item.fmg_tmpl_grp_name }} to ADOM {{ item.fmg_adom_name }}
fortinet.fortimanager.fmgr_templategroup:
workspace_locking_adom: "{{ item.fmg_adom_name }}"
adom: "{{ item.fmg_adom_name }}"
state: "{{ item.fmg_tmpl_grp_state }}"
templategroup:
name: "{{ item.fmg_tmpl_grp_name }}"
description: "{{ item.fmg_tmpl_grp_desc }}"
member: "{{ item.fmg_tmpl_grp_mbr | list }}"
loop: "{{ fmg_tmpl_grp_list | zip(fmg_adom_list) | list }}"
- Estas são as variáveis que defino no playbook
# ADOM Creation variables
fmg_adom_list:
- fmg_adom_name: "ADOM_One"
fmg_adom_desc: "ADOM One"
fmg_adom_flags:
- no_vpn_console
- per_device_wtp
- per_device_fsw
# ADOM CLI Template group creation varibles
fmg_tmpl_grp_list:
- fmg_tmpl_grp_state: present
fmg_tmpl_grp_name: "Test"
fmg_tmpl_grp_desc: "Test group"
fmg_tmpl_grp_mbr:
- "test_cli_template"
Espero ter me explicado da forma mais clara e compreensível possível.
Obrigado!
Você está compactando duas listas juntas, o que significa que você acaba com uma lista de duas tuplas, ou seja. cada elemento da lista é em si uma lista. Portanto, acessar o
fmg_adom_name
atributo de um item da lista (em vez do dicionário esperado) resulta no erro observado.Você precisa acessar
[0]
as informações de adom e[1]
as informações de modelo.Observação lateral, isso mapeará o primeiro adom para o primeiro modelo, o segundo adom para o segundo modelo, etc. Se não for isso que você deseja,
zip
não é o filtro certo.