web-dev-qa-db-ja.com

実行中の現在のansible-playbookへのパスを持つ変数?

実行中の現在のansible-playbookへの絶対パスを持つansible変数はありますか?

コンテキスト: mysqlドッカーを設定するためにlocalhostに対してansibleスクリプトを実行/作成しており、ansibleスクリプトに関連してデータボリュームをマウントしたい。

たとえば、~/branch1/にリポジトリをチェックアウトし、ansible-playbook dev.ymlを実行すると、ボリュームを~/branch1/.docker_volume/に保存する必要があると考えていたとします。 ~/branch2から実行した場合、ボリュームを~/branch2/.docker_volume/に構成する必要があります。

83
Josh Unger

playbook_dir変数を使用できます。

139
ctrlok

必要なものを正確に保持する変数はないようです。

ただし、引用 ドキュメント

また、inventory_dirは、Ansibleのインベントリホストファイルを保持するディレクトリのパス名です。inventory_fileは、Ansibleのインベントリホストファイルを指すパス名とファイル名です。

playbook_dirには、プレイブックのベースディレクトリが含まれます。

そして最後に、role_pathは現在のロールのパス名を返します(1.8以降)。これはロール内でのみ機能します。

セットアップによっては、これらまたは$ pwdベースのソリューションで十分な場合があります。

37
Cray

残念ながらありません。実際、絶対パスは、Ansibleの実行方法のコンテキストでは少し意味がありません(そして混乱を招く可能性があります)。一言で言えば、プレイブックを呼び出すと、タスクごとにAnsibleはタスクに関連付けられたモジュールをターゲットマシンの一時ディレクトリに物理的にコピーし、必要なパラメーターを指定してモジュールを呼び出します。そのため、ターゲットマシン上の絶対パスは、その中にいくつかの一時ファイルのみを含む一時ディレクトリであり、完全なプレイブックさえも含まれていません。また、ターゲット上でAnsibleディレクトリツリー全体を複製する場合を除き、Ansibleサーバー上のファイルのフルパスを知ることは、ターゲットマシン上ではほとんど役に立ちません。

Ansibleで定義されているすべての変数を表示するには、単に 次のコマンド を実行します。

$ ansible -m setup hostname

プレイブックへの絶対パスを知る必要があると思う理由は何ですか?

1
Bruce P

私はこのようなプレイブックを使用して、自分の役割をローカルでテストしていました。

---
- hosts: localhost
  roles:
     - role: .

しかし、これはAnsible v2.2での動作を停止しました。

前述のソリューションをデバッグしました

---
- hosts: all
  tasks:
    - name: Find out playbooks path
      Shell: pwd
      register: playbook_path_output
    - debug: var=playbook_path_output.stdout

「現在の作業ディレクトリ」ではなく、ホームディレクトリを作成しました

と和解しました

---
- hosts: all
  roles:
    - role: '{{playbook_dir}}'

上記のソリューションごと。

1

この目的のための組み込み変数はありませんが、「pwd」コマンドでいつでもプレイブックの絶対パスを見つけ、その出力を変数に登録できます。

- name: Find out playbook's path
  Shell: pwd
  register: playbook_path_output
- debug: 
  debug: var=playbook_path_output.stdout

これで、変数playbook_path_output.stdoutでパスが利用可能になりました

0
hyt