Ansible: tentando colocar condicionais em um arquivo vars

1

Estou trabalhando em um projeto que usará vários dispositivos que precisarão ser configurados com as mesmas reproduções, mas com variáveis separadas. Eu tenho um arquivo vars que inclui um número de bibliotecas, uma para cada dispositivo. O nome da biblioteca corresponde ao nome do dispositivo, por exemplo:

(Device1)

- {xxx: "AAA", yyy: "BBB", zzz: "CCC"}
- {xxx: "AAA", yyy: "BBB", zzz: "CCC"}

(Device2)

- {xxx: "AAA", yyy: "BBB", zzz: "CCC"}
- {xxx: "AAA", yyy: "BBB", zzz: "CCC"}

O próprio jogo deve descobrir qual biblioteca corresponde ao dispositivo, usar as variáveis dessa biblioteca e nenhuma das outras. Minha tentativa atual é feita assim:

- name: do this
  command: "do some of item.xxx with some item.zzz
- include_vars: device-library.yaml
  when: "{{item}} == {{ansible_hostname}}"

Mas eu sempre entendo:

fatal: [xxx.xxx.xxx.xxx]: FAILED! => {"failed": true, "msg": "ERROR! 'item' is undefined"}

Quando este projeto era apenas um dispositivo, usamos with_items: stuff.yaml o tempo todo e funcionou muito bem.

Minha pergunta é: o que devo colocar no lugar de {{item}} ou existe uma maneira melhor?

    
por Disco King 28.09.2016 / 22:48

1 resposta

7

A partir desta declaração:

The play itself is supposed to figure out which library matches the device, use that library's variables and none of the other ones.

Concluo que você está tentando replicar uma das características mais fundamentais do Ansible.

O que você deve fazer:

  1. crie um subdiretório host_vars no diretório do projeto Ansible;
  2. mova os arquivos que contêm definições de variáveis para o diretório host_vars ;
  3. verifique se os nomes de arquivos acima correspondem exatamente aos nomes de host usados pelo Ansible para se referir às máquinas de destino (sem .yaml extension);
  4. exclua todas as diretivas de inclusão manuais do seu manual;
  5. execute o manual.

Como alternativa, para cobrir vários servidores, você pode fazer o mesmo usando o subdiretório group_vars e nomear os arquivos de acordo com os nomes dos grupos definidos no arquivo de inventário.

Consulte a documentação para obter mais informações .

    
por 29.09.2016 / 01:27