7

私のプレイブックでは、スクリプトを実行し、将来の使用のために値を保存する local_action を実行します。

- local_action: command python release.py
  register: release_url

プレイブックをサブディレクトリに移動するまで、これはうまく機能しました。コマンドは現在の作業ディレクトリ (ansible を実行するディレクトリ) から実行されることが判明したため、パスは次のようにする必要があります。

- local_action: command python roles/ghost/release.py

私は以下のようなディレクトリ構造を持っています:

  • group_vars/
  • 役割/
    • 幽霊/
      • タスク/
        • main.yml
      • テンプレート/
      • release.py
  • サイト.yml

ただし、ロール/ゴーストフォルダー名は変更される可能性があります (これをハードコーディングすると、別のディレクトリから Playbook を実行できなくなります)。

tasks/main.yml (local_action コマンドを発行する) のディレクトリ パスを取得するにはどうすればよいですか?

4

3 に答える 3

6

ansible 1.8 の時点で、role_pathこの目的で使用できる変数が定義されています。

于 2015-01-20T21:59:15.720 に答える
2

release.py スクリプトを roles/ghost/files/ に配置して、local_action で使用できますか

- name: local scrpt 
  local_action: script release.py

そうすれば、ディレクトリパスを取得する必要がない場合があります

これは、ディレクトリ レイアウトの部分http://www.ansibleworks.com/docs/playbooks_best_practices.htmlでそうすることに言及しています。

于 2013-11-06T19:15:37.000 に答える
0

このSOの質問を見る前にプルリクエストを送信しましたが、要点は次のとおりです。

  1. スクリプトをロール内の「ファイル」ディレクトリに移動します
  2. スクリプトがどのパスにあるかわからないため、スクリプトを /tmp にコピーします。

    - name: copy ghost release script to tmp
      local_action: copy src=release.py dest=/tmp/release.py
      sudo: no
    
  3. 次に、スクリプトを実行できます

    - name: get ghost release version
      local_action: command python /tmp/release.py
      register: ghost_release
      sudo: no
    

sudo: no外側のプレイブックがそれをグローバルに に設定する場合に選択しますon。このアクションに root は必要ありません。また、パスワードを要求する必要がある場合、ansible の実行が中断される可能性があります。

ステップ 2 を行うには、ファクトを使用して何らかの方法でファイル名をランダム化し、スクリプトの実行後に追加のステップでファイルを削除するという、より良い方法もあるかもしれません。/tmp/release.pyこれにより、既に呼び出されたファイルが存在する可能性に伴うリスクを最小限に抑えることができます。

于 2014-11-24T14:47:38.183 に答える