5 votes

Ansible local_action : stat ne trouve pas mon fichier

Je veux copier un fichier sur des nœuds distants, mais seulement si le fichier existe. Je l'ai copié dans /tmp/webapps/partner.war

Ma tâche est :

- local_action: stat path="/tmp/webapps/{{ application }}.war"
  register: war

- name: Copy warfile
  copy: src=/tmp/webapps/{{ application }}.war dest=/tmp/deploy/{{ stage }}/{{ application }}.war
  when: war.stat.exists == true

Mais stat me dit toujours que le fichier n'existe pas. Si je lance stat manuellement, il me montre que le fichier existe.

Le résultat :

    TASK: [deploy | stat path="/tmp/webapps/{{ application }}.war"] *************** 
<127.0.0.1> REMOTE_MODULE stat path="/tmp/webapps/partner.war"
<127.0.0.1> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367 && echo $HOME/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367']
<127.0.0.1> PUT /tmp/tmpzrV_Ne TO /var/lib/awx/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367/stat
<127.0.0.1> EXEC ['/bin/sh', '-c', u'LANG=C LC_CTYPE=C /usr/bin/python /var/lib/awx/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367/stat; rm -rf /var/lib/awx/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367/ >/dev/null 2>&1']
ok: [example.com -> 127.0.0.1] => {"changed": false, "stat": {"exists": false}}

Qu'est-ce que j'ai fait de mal ? :/

0 votes

Déboguer la variable - debug: var=war

0 votes

En fonction des permissions, vous ne pourrez pas non plus le statuer comme votre ansible_user . Utilisez sudo: true

0 votes

@xddsg j'ai réussi à le faire fonctionner, ansible tower utilise proot - je l'ai désactivé et maintenant cela fonctionne.

5voto

Ralph Bolton Points 255

Pour information, j'ai eu des problèmes similaires en essayant de trouver des fichiers dans le répertoire "files" du rôle (sans tour). J'aurais normalement référencé ces fichiers sous la forme "../files/quelque chose", mais cela ne fonctionne pas pour un statut local_action. À la place, voici ce qui fonctionne :

- name: check for optional config file
  local_action: stat path={{ role_path }}/files/{{ inventory_hostname }}/some_file
  register: optional_file

(donc je suppose que la morale de l'histoire est : utilisez un chemin complet vers le fichier local)

0 votes

Merci, ça me rendait fou ! Je pouvais tester le rôle que j'avais créé et il fonctionnait parfaitement, mais lorsqu'il faisait partie d'un playbook plus large, il échouait parce que le chemin stat était différent du chemin include_vars.

4voto

chicks Points 3599

Tour Ansible utilise PRoot qui fournit une interface sympa pour créer des chroot et autres prisons similaires. Dans le Documents de la tour ils déclarent :

3.5. Playbooks n'ayant pas accès aux données nécessaires en raison de problèmes de PRoot

Lors de l'exécution d'un playbook qui lit et écrit des informations dans certains fichiers répertoires interdits, les utilisateurs peuvent rencontrer des problèmes avec PRoot. PRoot exécute le ansible-playbook à l'intérieur d'un chroot la prison. Dans des cas comme cas, le playbook en cours d'exécution ne peut voir les autres playbooks ou les sur le disque et le playbook doit-il s'attendre à avoir accès à cette informations, des problèmes surviendront. Pour affiner votre utilisation de PRoot, il y a certaines variables qui peuvent être définies :

# Enable proot support for running jobs (playbook runs only).
AWX_PROOT_ENABLED = False

# Command/path to proot.
AWX_PROOT_CMD = 'proot'

# Additional paths to hide from jobs using proot.
AWX_PROOT_HIDE_PATHS = []

# Additional paths to show for jobs using proot.
AWX_PROOT_SHOW_PATHS = []

0 votes

Sinon, vous pouvez définir /tmp dans le paramètre de la tour "chemins à exposer aux travaux isolés". Assurez-vous que vous savez vraiment si vous voulez faire cela ; ce n'est probablement pas une bonne idée si votre tour est utilisé par plusieurs équipes de l'entreprise qui ne sont autorisées qu'à un accès limité.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X