运行 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