web-dev-qa-db-ja.com

Ansibleで親ディレクトリを取得しますか?

Ansibleで相対パスを評価する方法はありますか?

tasks:
  - name: Run docker containers
    include: tasks/dockerup.yml src_code='..'

基本的に、ソースコードパスをタスクに渡すことに興味があります。ソースコードが{{ansible_inventory}}の親パスである場合がありますが、そのままではそれを達成する方法はありません。

----詳細情報----

プロジェクトの構造:

myproj
  app
  deploy
    deploy.yml

deploy.ymlからappにアクセスしようとしています。

19
Pithikos

ソースを確認したところ、知らないフィルタが見つかりました。以前の文字列操作を忘れて、それはこれは簡単です:

{{ inventory_dir | dirname }}

その他の便利なフィルター


以前の答え:

これはそれを行うはずです:

{{ inventory_dir.split("/")[0:-1]|join("/") }}

以前の答え:

します{{ inventory_dir }}何をしたいですか?

利用可能な、inventory_dirは、Ansibleのインベントリホストファイルを保持するディレクトリのパス名です

または、「親ディレクトリ」がタスクの役割のパスである場合は、{{ role_path }}トリックをするかもしれません。

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

http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts から

28
udondan

現在のプレイブックの実行への絶対パスに{{playbook_dir}}を使用できます。私にとってはそれが最善の方法です。なぜなら、あなたは通常、あなたのプレイブックがどこにあるか知っているからです。

2
flxPeters

OK、回避策は、このために別のタスクを使用することです:

tasks:
  - name: Get source code absolute path
    Shell: dirname '{{inventory_dir}}'
    register: dirname
  - name: Run docker containers
    include: tasks/dockerup.yml src_code={{dirname.stdout}}

inventory_dirについて教えてくれたウドンダンに感謝します。

0
Pithikos