web-dev-qa-db-fra.com

Exécuter Python via ansible

J'essaie d'exécuter un script python à partir d'un script ansible. Je pense que ce serait une chose facile à faire, mais je ne peux pas le comprendre. J'ai un projet une structure comme celle-ci:

playbook-folder
  roles
    stagecode
      files
        mypythonscript.py
      tasks
        main.yml
  release.yml

J'essaie d'exécuter mypythonscript.py dans une tâche dans main.yml (qui est un rôle utilisé dans release.yml). Voici la tâche:

- name: run my script!
  command: ./roles/stagecode/files/mypythonscript.py
  args:
    chdir: /dir/to/be/run/in
  delegate_to: 127.0.0.1
  run_once: true

J'ai également essayé ../files/mypythonscript.py. Je pensais que le chemin pour ansible serait relatif au playbook, mais je suppose que non?

J'ai aussi essayé de déboguer pour savoir où j'en suis au milieu du script, mais pas de chance non plus.

- name: figure out where we are
  stat: path=.
  delegate_to: 127.0.0.1
  run_once: true
  register: righthere

- name: print where we are
  debug: msg="{{righthere.stat.path}}"
  delegate_to: 127.0.0.1
  run_once: true

Cela imprime juste ".". Tellement utile ...

20
CorayThan

essayez d'utiliser la directive script, cela fonctionne pour moi

mon main.yml

---
- name: execute install script
  script: get-pip.py

et le fichier get-pip.py doit être dans les fichiers dans le même rôle

36
Orest Stetsiak

Si vous souhaitez pouvoir utiliser un chemin relatif vers votre script plutôt qu'un chemin absolu, il vaut mieux utiliser role_path variable magique pour trouver le chemin vers le rôle et travailler à partir de là.

Avec la structure que vous utilisez dans la question, les éléments suivants devraient fonctionner:

- name: run my script!
  command: ./mypythonscript.py
  args:
    chdir: "{{ role_path }}"/files
  delegate_to: 127.0.0.1
  run_once: true
13
ydaetskcoR