Ответ 1
попробуйте использовать директиву script, у меня это работает
мой main.yml
---
- name: execute install script
script: get-pip.py
и файл get-pip.py должен быть в файлах в той же роли
Я пытаюсь запустить python script из ansible script. Я бы подумал, что это будет легко сделать, но я не могу понять это. У меня есть такая структура проекта, как это:
playbook-folder
roles
stagecode
files
mypythonscript.py
tasks
main.yml
release.yml
Я пытаюсь запустить mypythonscript.py внутри задачи в main.yml(это роль, используемая в release.yml). Здесь задача:
- 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
Я также пробовал.. /files/mypythonscript.py. Я думал, что путь к аналогу будет относиться к книжке, но я не думаю?
Я также пробовал отлаживать, чтобы выяснить, где я нахожусь в середине script, но не повезло и там.
- 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
Это просто печатает ".". Так полезно...
попробуйте использовать директиву script, у меня это работает
мой main.yml
---
- name: execute install script
script: get-pip.py
и файл get-pip.py должен быть в файлах в той же роли
Если вы хотите использовать относительный путь к вашему script, а не по абсолютному пути, вам может быть лучше использовать магическую переменную role_path
. найти путь к роли и работать оттуда.
Со структурой, которую вы используете в вопросе, должно работать следующее:
- name: run my script!
command: ./mypythonscript.py
args:
chdir: "{{ role_path }}"/files
delegate_to: 127.0.0.1
run_once: true