Eu tenho um playbook Ansible que precisa --extra-vars
ser passado e gostaria de saber se existe alguma maneira de validar os nomes de host a partir dos --extra-vars
valores dentro das variáveis.
Exemplo de manualtest.yml
- hosts: localhost
gather_facts: false
vars:
prg:
prod_mgmt_network: "{{ ['prodsrv00']|product(range(prod_start,prod_end))|map('join')|list }}"
test_mgmt_network: "{{ ['testsrv00']|product(range(test_start,test_end))|map('join')|list }}"
prod_start: 4281
prod_end: 4283
test_start: 8281
test_end: 8283
tasks:
- debug:
var: prg.prod_mgmt_network, prg.test_mgmt_network
Comando de amostra
ansible-playbook --extra-vars hostname=['prodsrv004281', 'prodsrv004282', 'testsrv008281', 'testsrv008282', 'testsrv008283', 'testsrv008284'] test.yml
Eu gostaria de falhar na tarefa se um nome de host não estiver dentro da variável. por exemplo, testsrv008283
e testsrv008284
deve falhar na tarefa.
O primeiro problema é o formato das variáveis extras. Consulte Definindo variáveis em tempo de execução . A sintaxe chave=valor (INI) é sempre interpretada como strings. Você pode querer testá-lo. Por exemplo, a peça abaixo
dá (resumido)
Existem mais opções de como obter uma lista:
Então, você obterá
Então, a jogada abaixo dá o mesmo resultado
Para testar seu caso, a opção mais simples é colocar a lista em um arquivo
P: "Falha se o nome do host não estiver na variável. Por exemplo, testesrv008283 e testesrv008284 devem falhar."
R: Selecione as listas de hosts e compare as diferenças. Por exemplo,
dá
A avaliação das redes dá
A afirmação abaixo passará
mas, este irá falhar
Exemplo de um manual completo para teste