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 ...
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
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