Estou tentando filtrar os seguintes dados com base na existência do username
subdicionário.
Uma solução ideal seria quando eu não precisasse mencionar todas as chaves, por exemplo agtsvcaccount, sqlsvcaccount, sapwd
, porque isso deveria ser genérico em outros esquemas.
Este é um exemplo de entrada com a variável input_parameters
, esta saÃda é de uma tarefa de depuração do Ansible.
ok: [localhost] => {
"msg": {
"ansible": {
"limit": [
"vm1234.vmdomain.com",
"vm5678.vmdomain.com"
]
},
"mssql": {
"edition": "standard",
"language": "en",
"setupconfig": {
"action": "Install",
"agtsvcaccount": {
"type": "System User",
"username": "SQL_Agt",
"vault": "credvault",
"visibility": false
},
"agtsvcstartuptype": "Automatic",
"features": [
"SQLENGINE"
],
"forcereboot": false,
"instancename": "MSSQLINSTANCE",
"npenabled": true,
"sapwd": {
"type": "Database",
"username": "sa",
"vault": "credvault",
"visibility": false
},
"securitymode": "SQL",
"sqlcollation": "SQL_Latin1_General_CP1_CI_AS",
"sqlsvcaccount": {
"type": "System User",
"username": "SQL_Svc",
"vault": "credvault",
"visibility": false
},
"sqlsvcstartuptype": "Automatic",
"sqlsysadminaccounts": [
"Administrator"
],
"tcpenabled": true
},
"version": "2022"
}
}
}
No momento, estou usando algo assim, que não é genérico/dinâmico o suficiente, e não quero usar account_identifiers
para outros esquemas, que são muito semelhantes.
- name: 'Process credentials'
ansible.builtin.include_role:
name: 'mycollection.generic'
tasks_from: 'user/{{ item.value.vault }}.yml'
loop: '{{ input_parameters.mssql.setupconfig | dict2items }}'
when: 'item.key in account_identifiers'
vars:
account_identifiers: ['sapwd','sqlsvcaccount','agtsvcaccount','ftsvcaccount','rssvcaccount','assvcaccount','issvcaccount']
Alguma idéia de como fazer isso?
Tentei tirar uma ideia da documentação do Ansible, mas acho que está faltando alguma coisa.
Você pode usar
selectattr
na lista de dicionários criada pelo seudict2items
, para testar se uma propriedade desses dicionários está definida.Então, seu loop acabaria sendo:
Com uma
debug
tarefa simplificada, nos seus dados de entrada:Você obteria: