2016-02-01 9 views
8

私は、実行可能なスクリプトからPythonスクリプトを実行しようとしています。私はこれが簡単なことだと思いますが、私はそれを理解することはできません。私は(release.ymlで使用される役割である)main.ymlにタスク内でmypythonscript.py実行しようとしている実行中のPythonスクリプトを実行する

playbook-folder 
    roles 
    stagecode 
     files 
     mypythonscript.py 
     tasks 
     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を試しました。私は、無能な人のための道は、プレイブックとの相対的なものだと思ったが、私はそう思わないだろうか?

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

- 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 

ちょうど "。"が表示されます。役に立つ...

答えて

11

絶対パスではなくスクリプトへの相対パスを使用したい場合は、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 
+0

私はpythonスクリプトを実行する予定の私のディレクトリを台無しにするだろうが、私はpythonスクリプトにparamとして渡すことができると思います。ありがとう! – CorayThan

+1

Pythonスクリプトを特定のパスから実行する必要がある場合は 'command行を' command:./ "{{role_path}}"/files/mypythonscript.py'に変更してください( 'chdir' arg – ydaetskcoR

14

スクリプトディレクティブを使用しようと、それは私

私main.yml

--- 
- name: execute install script 
    script: get-pip.py 
のために働きます

およびget-pip.pyファイルは個のファイルにする必要があります同じ役割に

+0

これは良い答えですが、私はOPの元のコードにしっかりと従う以外の理由をなぜ示唆していないのかもわかりません。ロールを使用して、スクリプト/ファイルやテンプレートなどの検索パスなど、それらの周りの構文的な砂糖を使用します。 – ydaetskcoR

関連する問題