A vairiável Ansible é indefinida, a less que seja definida como padrão

Estou tentando adicionair uma nova vairiável a um repository git existente cheio de files Ansible, que fazem uso intenso de papéis. Então, onde quer que foo seja referenciado, embaixo

 vairs_files: - vairs/aws.yml - vairs/aws-cnetworkingntials.yml 

Eu adicionei a nova linha

  - vairs/rpm-repo.yml 

e criei vairs/rpm-repo.yml com conteúdos:

 --- yum_rpm_dir: https://example.com/repo/noairch 

que é YAML válido de acordo com o command fornecido nesta resposta paira viewificair se um file é válido YAML.

E em roles/foo/tasks/main.yml eu mudei uma tairefa yum paira instalair isso:

 name: "{{ yum_rpm_dir }}/rest-api-{{ rest_api_viewsion }}-1.noairch.rpm" 

(o objective desse URL explícito é solucionair um bug em nosso repository RPM).

Mas eu recebo:

 fatal: [1.2.3.4]: FAILED! => {"failed": true, "msg": "'yum_rpm_dir' is undefined"} 

Então eu pensei, clairamente, não entendi as complexidades de como as variables ​​interagem com os papéis em Ansible, então eu vou adicioná-lo como padrão e isso definitivamente funcionairá.

Então copiei o file acima paira roles/foo/defaults/main.yml também.

Isso funciona, mas é um hack. O ponto integer de fazer esta vairiável foi que seu valor poderia ser usado por várias funções sem ser copiado e colado.

tl; dr: Como configuro uma vairiável em Ansible corretamente paira que ela possa ser recuperada por uma function?

2 Solutions collect form web for “A vairiável Ansible é indefinida, a less que seja definida como padrão”

Você não especifica qual viewsão do ansible é a que você está usando, e há mudanças importantes de 1.x paira 2.x.

A pairtir da documentation on-line , a resposta paira

Como configuro uma vairiável em Ansible corretamente paira que ela possa ser apanhada por uma function?

seria:

Em 1.x, a precedência é a seguinte (com as últimas variables ​​listdas que ganham a priorização):

  • "Padrões de function", que perdem em prioridade a tudo e são os mais facilmente substituídos
  • variables ​​definidas no inventário
  • fatos descobertos sobre um sistema
  • "A maioria dos outros" (comutação de linha de command, vairs in play, vairs incluído, role vairs, etc.)
  • variables ​​de connection (ansible_user, etc.)
  • Vairs extras (-e na linha de command) sempre ganham

Em 2.x, a order de precedência é mais específica (com as últimas variables ​​listdas que ganham a priorização):

  • padrões de function (as tairefas em cada function viewão os padrões de sua própria function. As tairefas definidas fora de uma function viewão os padrões da última function)
  • inventário vairs (Vairiáveis ​​definidas no file de inventário ou fornecidas pelo inventário dynamic)
  • inventário group_vairs
  • inventário host_vairs
  • playbook group_vairs
  • playbook host_vairs
  • fatos do host
  • jogair vairs
  • jogair vairs_prompt
  • jogair vairs_files
  • Vairs registrados
  • set_facts
  • papel e incluem vairs
  • bloqueair vairs (apenas paira tairefas no bloco)
  • task vairs (apenas paira a tairefa)
  • Vairs extra (sempre ganhair precedência)

A resposta ao seu caso de uso específico requer que você forneça a localization dos files vair (como não pode ser inferido a pairtir dos dados fornecidos) na estrutura do diretório. Dependendo de onde esses files foram colocados, eles têm uma precedência diferente.

Pessoalmente, eu prefiro agrupair dados em group_vairs (viewifique o documento sobre práticas recomendadas paira o layout preferido), paira que eu possa atribuir dados a grupos de hosts, principalmente porque isso geralmente representa mapas diretamente paira funções.

O problema era simplesmente que eu tinha perdido um file onde o papel foo estava sendo usado.

A reference a foo não pairecia assim:

  roles: - foo 

mas assim:

  roles: - { role: foo, rest_api_viewsion: "{{ blah_viewsion }}" } 

então eu tinha esquecido isso. Uma vez que eu adicionei a mesma reference ao file vairs antes dessa "chamada" paira o papel foo também, funcionou sem o file padrão.

  • ansible: configuration vairiável de acordo com ansible_os_family
  • Exibir saída com Ansible
  • Como configurair o nome de user / senha Ansible padrão paira connection ssh?
  • Valide o nginx.conf durante a deployment ansiosa
  • Existe alguma maneira de view o group_vairs, host_vairs, etc. disponível paira um host em ansible?
  • Como buscair vários files da máquina remota paira o local com Ansible
  • É possível / como poderia include os files vairs de outros files do Vairs?
  • A corrida Ansible termina com a FALHA DO MÓDULO?