Ansible: vars_files ne peut pas voir les faits ou autres variables qu'un rôle dans le même jeu peut

Créé le 10 août 2017  ·  3Commentaires  ·  Source: ansible/ansible

TYPE DE PROBLEME
  • Rapport d'erreur
NOM DU COMPOSANT

playbooks

VERSION ANSIBLE
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
CONFIGURATION

J'importe des rôles et des jeux depuis un autre répertoire, donc j'ai dans ansible.cfg

[defaults]
roles_path = ../../../deployment/playbooks/roles
OS / ENVIRONNEMENT

OSX 10.10.5

SOMMAIRE

Lorsque j'essaie de décider dynamiquement quel fichier de coffre-fort je veux importer en utilisant une variable dans vars_files (les tests unitaires ne devraient pas utiliser de mots de passe de production!) Pour les lectures importées, je ne peux pas le faire en utilisant group_vars, host_vars ou facts défini dans un jeu de configuration. Je ne peux utiliser qu'un argument de ligne de commande ansible.

ÉTAPES POUR REPRODUIRE

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
RÉSULTATS ATTENDUS

Si la variable vault_file est spécifiée sur la ligne de commande ansible en utilisant --extra-vars le script s'exécute très bien. Il devrait fonctionner correctement lorsque vault_file est défini à partir d'un fichier d'inventaire ou défini comme un fait dans unitenv_setup , mais ce n'est pas le cas

RÉSULTATS ACTUELS

En utilisant n'importe quelle méthode en plus de la ligne de commande pour définir vault_file , j'obtiens l'erreur suivante:

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

mode extrêmement verbeux:

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

Commentaire le plus utile

peut-être devriez-vous corriger la documentation? Pas vraiment évident ...

Tous les 3 commentaires

Je constate qu'il y a quelque chose de complexe dans mon environnement de production que je n'arrive pas à entrer dans une simple reproduction partageable. En tout cas, voici la tentative de reproduction.

Incompréhension possible

Salut!

Merci beaucoup pour votre soumission à Ansible. Cela signifie sincèrement beaucoup pour nous.

Nous pensons que le ticket que vous avez déposé est quelque peu mal compris, car une chose fonctionne un peu différemment de ce qui est indiqué.

faits, les variables d'hôte et de groupe. En gros, toutes les variables associées à l'hôte ne sont pas disponibles pour vars_files , seules les variables à portée de lecture ou les variables supplémentaires sont disponibles à ce stade. Utilisez plutôt une tâche include_vars .

À l'avenir, cela pourrait être un sujet plus adapté à la liste des utilisateurs, que vous pouvez également publier ici si vous souhaitez plus d'aide sur ce qui précède.

Merci encore pour cela et votre intérêt pour Ansible!

peut-être devriez-vous corriger la documentation? Pas vraiment évident ...

Cette page vous a été utile?
0 / 5 - 0 notes