运行 Python 通过 ansible 编写的脚本
Running Python script via ansible
我正在尝试 运行 来自 ansible 脚本的 python 脚本。我认为这很容易做到,但我想不通。我有一个这样的项目结构:
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。我认为 ansible 的路径与剧本有关,但我猜不是?
我也尝试调试以找出我在脚本中间的位置,但也没有成功。
- 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
这只是打印出“.”。很有帮助...
如果您希望能够使用脚本的相对路径而不是绝对路径,那么您最好使用 role_path
magic variable 找到角色的路径并从那里开始工作。
对于您在问题中使用的结构,以下应该有效:
- name: run my script!
command: ./mypythonscript.py
args:
chdir: "{{ role_path }}"/files
delegate_to: 127.0.0.1
run_once: true
尝试使用 script 指令,对我有用
我的main.yml
---
- name: execute install script
script: get-pip.py
和get-pip.py文件应该在文件中同一个角色
一个alternative/straight正向解:
假设您已经在 ./env1 下构建了虚拟环境,并使用 pip3 安装了所需的 python 模块。
现在编写 playbook 任务,如:
- name: Run a script using an executable in a system path
script: ./test.py
args:
executable: ./env1/bin/python
register: python_result
- name: Get stdout or stderr from the output
debug:
var: python_result.stdout
我正在尝试 运行 来自 ansible 脚本的 python 脚本。我认为这很容易做到,但我想不通。我有一个这样的项目结构:
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。我认为 ansible 的路径与剧本有关,但我猜不是?
我也尝试调试以找出我在脚本中间的位置,但也没有成功。
- 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
这只是打印出“.”。很有帮助...
如果您希望能够使用脚本的相对路径而不是绝对路径,那么您最好使用 role_path
magic variable 找到角色的路径并从那里开始工作。
对于您在问题中使用的结构,以下应该有效:
- name: run my script!
command: ./mypythonscript.py
args:
chdir: "{{ role_path }}"/files
delegate_to: 127.0.0.1
run_once: true
尝试使用 script 指令,对我有用
我的main.yml
---
- name: execute install script
script: get-pip.py
和get-pip.py文件应该在文件中同一个角色
一个alternative/straight正向解: 假设您已经在 ./env1 下构建了虚拟环境,并使用 pip3 安装了所需的 python 模块。 现在编写 playbook 任务,如:
- name: Run a script using an executable in a system path
script: ./test.py
args:
executable: ./env1/bin/python
register: python_result
- name: Get stdout or stderr from the output
debug:
var: python_result.stdout