web-dev-qa-db-ja.com

ansible経由でPythonスクリプトを実行

Ansibleスクリプトからpythonスクリプトを実行しようとしています。これは簡単なことだと思いますが、理解できません。プロジェクトがあります。このような構造:

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

Main.ymlのタスク(release.ymlで使用されるロール)内でmypythonscript.pyを実行しようとしています。タスクは次のとおりです。

- 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のパスはPlaybookに関連すると思いましたが、そうではないでしょうか?

また、スクリプトの途中でどこにいるかを把握するためにデバッグを試みましたが、そこには運がありません。

- 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

それは単に「。」を出力します。とても役立つ...

20
CorayThan

scriptディレクティブを使用してみてください、それは私のために動作します

私のmain.yml

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

およびget-pip.pyファイルは同じfiles役割

36
Orest Stetsiak

絶対パスではなくスクリプトへの相対パスを使用できるようにする場合は、 role_pathマジック変数 ロールへのパスを見つけて、そこから作業します。

質問で使用している構造では、以下が機能するはずです。

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