実行中の現在のansible-playbookへの絶対パスを持つansible変数はありますか?
コンテキスト: mysqlドッカーを設定するためにlocalhost
に対してansibleスクリプトを実行/作成しており、ansibleスクリプトに関連してデータボリュームをマウントしたい。
たとえば、~/branch1/
にリポジトリをチェックアウトし、ansible-playbook dev.yml
を実行すると、ボリュームを~/branch1/.docker_volume/
に保存する必要があると考えていたとします。 ~/branch2
から実行した場合、ボリュームを~/branch2/.docker_volume/
に構成する必要があります。
playbook_dir
変数を使用できます。
必要なものを正確に保持する変数はないようです。
ただし、引用 ドキュメント :
また、
inventory_dir
は、Ansibleのインベントリホストファイルを保持するディレクトリのパス名です。inventory_file
は、Ansibleのインベントリホストファイルを指すパス名とファイル名です。playbook_dirには、プレイブックのベースディレクトリが含まれます。
そして最後に、
role_path
は現在のロールのパス名を返します(1.8以降)。これはロール内でのみ機能します。
セットアップによっては、これらまたは$ pwd
ベースのソリューションで十分な場合があります。
残念ながらありません。実際、絶対パスは、Ansibleの実行方法のコンテキストでは少し意味がありません(そして混乱を招く可能性があります)。一言で言えば、プレイブックを呼び出すと、タスクごとにAnsibleはタスクに関連付けられたモジュールをターゲットマシンの一時ディレクトリに物理的にコピーし、必要なパラメーターを指定してモジュールを呼び出します。そのため、ターゲットマシン上の絶対パスは、その中にいくつかの一時ファイルのみを含む一時ディレクトリであり、完全なプレイブックさえも含まれていません。また、ターゲット上でAnsibleディレクトリツリー全体を複製する場合を除き、Ansibleサーバー上のファイルのフルパスを知ることは、ターゲットマシン上ではほとんど役に立ちません。
Ansibleで定義されているすべての変数を表示するには、単に 次のコマンド を実行します。
$ ansible -m setup hostname
プレイブックへの絶対パスを知る必要があると思う理由は何ですか?
私はこのようなプレイブックを使用して、自分の役割をローカルでテストしていました。
---
- 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}}'
上記のソリューションごと。
この目的のための組み込み変数はありませんが、「pwd」コマンドでいつでもプレイブックの絶対パスを見つけ、その出力を変数に登録できます。
- name: Find out playbook's path
Shell: pwd
register: playbook_path_output
- debug:
debug: var=playbook_path_output.stdout
これで、変数playbook_path_output.stdoutでパスが利用可能になりました