Estou trabalhando com dicts aninhados e tenho vários arquivos de dicionário com chaves idênticas. O dict e a tarefa em si estão funcionando, mas preciso adicionar a seguinte condição. Não execute a tarefa, se o estado do subelemento == ausente
Meu dict:
qualitygate:
- qualitygate_name: QA-dev
operators:
- metric: coverage
operator: CT
error: 1
state: present
- qualitygate_name: Department-xyc
operators:
- metric: coverage
operator: CT
error: 10
state: absent
- metric: duplicated_lines
operator: GT
error: 5
state: present
Usando minha tarefa:
- ansible.builtin.uri:
url: "{{ protocol }}://{{ server_fqdn }}/api/qualitygates/create_condition"
user: "{{ token }}"
method: POST
body_format: form-urlencoded
body:
error: "{{ item.1.error }}"
metric: "{{ item.1.metric }}"
gateName: "{{ item.0.qualitygate_name }}"
op: "{{ item.1.operator }}"
loop: "{{ qualitygate | subelements('operators', 'skip_missing=True') }}"
when: qualitygate[item]['state'] is match("present")
Como posso alterar o filtro para corresponder apenas ao valor "presente"
Use o item subelemento na condição
Exemplo de um manual completo para testes
dá resumido
O problema aqui é que
item
no seu loop não há um único valor. Se você executar alguns diagnósticos simples, como este:Você verá que
item
fica assim:Isso é descrito na documentação :
Você quer usar o segundo valor em
item
-- que para cada iteração representa um valor de uma dasoperators
listas -- em seu condicional. Isso lhe dá algo como isto:Se envolvermos tudo em uma
debug
tarefa, assim:Isso nos dá:
O que eu acho que demonstra exatamente o que você quer.