Ansible: vars_files não pode ver fatos ou outras variáveis ​​que uma função no mesmo jogo pode

Criado em 10 ago. 2017  ·  3Comentários  ·  Fonte: ansible/ansible

TIPO DE PROBLEMA
  • Relatório de erro
NOME DO COMPONENTE

playbooks

VERSÃO ANSÍVEL
ansible 2.4.0
  config file = None
  configured module search path = [u'/Users/szabop/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.10 (default, Jul 14 2015, 19:46:27) [GCC 4.2.1 Compatible Apple LLVM 6.0
CONFIGURAÇÃO

Estou importando funções e reproduções de outro diretório, então tenho em ansible.cfg

[defaults]
roles_path = ../../../deployment/playbooks/roles
OS / MEIO AMBIENTE

OSX 10.10.5

RESUMO

Quando tento decidir dinamicamente qual arquivo vault desejo importar usando uma variável em vars_files (testes de unidade não deveriam usar senhas de produção!) Para reproduções importadas, não consigo fazer isso usando group_vars, host_vars ou fatos definido em um jogo de configuração. Só posso usar um argumento de linha de comando ansible.

PASSOS PARA REPRODUZIR

ansible-playbook -t app_test -i inventories/localhost/local.hosts unit.yml

---
#
# network.yml
#
- name: Setup the networks
  hosts: dockerhosts
  vars_files:
     - demoVars.yml
     - "{{ vault_file }}"   # this will only be valid if declared on the ansible command line.
  roles:
    - role: debug     # note this will print out a valid {{ vault_file }} in all cases (but comment out the vars_files line or it will error first)
    - role: network_setup
      options:
        internal: "{{ networks.internal }}"
        external: "{{ networks.external }}"
        nginx: "{{ networks.nginx }}"
  tags:
    - setup
    - standalone
    - app_test
# unit.yml
---
- name: create facts used to compose variables later in this playbook
  hosts: dockerhosts
  vars:
    esTmpDir: "/tmp/es"
  roles:
    - role: unitenv_setup
  tags:
    - app_test
- import_playbook: ../../../deployment/playbooks/network.yml
RESULTADOS ESPERADOS

Se a variável vault_file for especificada na linha de comando ansible usando --extra-vars o script funcionará perfeitamente. Deve funcionar bem quando vault_file é definido a partir de um arquivo de inventário ou definido como um fato em unitenv_setup , mas não

RESULTADOS REAIS

Usando qualquer método além da linha de comando para definir vault_file , recebo o seguinte erro:

PLAY [Setup the networks] *********************************************************************
ERROR! vars file {{ vault_file }} was not found

modo extremamente detalhado:

ETA: ran handlers
META: ran handlers
Read vars_file 'demoVars.yml'
skipping vars_file '{{ vault_file }}' due to an undefined variable
Read vars_file 'demoVars.yml'
skipping vars_file '{{ vault_file }}' due to an undefined variable

PLAY [Setup the networks] *********************************************************************
Read vars_file 'demoVars.yml'
ERROR! vars file {{ vault_file }} was not found

affects_2.4 bug core

Comentários muito úteis

talvez você deva corrigir a documentação? Não exatamente óbvio ...

Todos 3 comentários

Observo que há algo complexo em meu ambiente de produção que não consigo encontrar em uma reprodução compartilhável simples. De qualquer forma, aqui está a tentativa de reprodução.

Possível mal-entendido

Oi!

Muito obrigado por seu envio para a Ansible. Sinceramente, significa muito para nós.

Acreditamos que o tíquete que você preencheu está sendo um tanto mal interpretado, pois uma coisa funciona de maneira um pouco diferente do que foi declarado.

fatos, host e vars de grupo .. basicamente qualquer 'host associado vars' não está disponível por vars_files , apenas vars com escopo de jogo ou vars extras estão disponíveis nesse ponto. Use uma tarefa include_vars invés.

No futuro, este pode ser um tópico mais adequado para a lista de usuários, que você também pode postar aqui se desejar mais ajuda com o acima.

Obrigado mais uma vez por isso e pelo seu interesse na Ansible!

talvez você deva corrigir a documentação? Não exatamente óbvio ...

Esta página foi útil?
0 / 5 - 0 avaliações