変数への相対パスがないプレイブック


8

私はすでにたくさんのプレイブックを持っていたので、それらをプレイブックディレクトリに整理し始めました。これにより、varsファイルへの相対パスが必要になります。

実際の脚本:

---
- hosts:  aws_instance.jenkins-agents
  user:   ec2-user
  vars_files:
    - ../../../vars/main.yaml
    - ../../../vars/vault.yaml
  ...

dir構造を維持する方法はありますが、lochnessファミリー(../../../)は避けますか?

私は役割について知っています。それらへのパスを指定できますが、vars_filesに類似するものは見つかりません

プロジェクト条件:

  1. プロジェクトのルートからプレイブックを実行する必要があります
  2. varsplaybooks dirの両方がプロジェクトのルートにあります
  3. このプロジェクトには静的なインベントリ/ホストはありませんが、プレイブックを実行するとオンザフライで生成されます

1
多分あなたはあなたの相対的な部分に変数を使うことができます../../../varsか?
Tensibai 2017年

回答:


6

あなたは気付くでしょうディレクトリのレイアウトのための公式の推奨は、ルートレベルでのプレイブックのすべてを置きます。Ansibleは他のスキームをうまく処理しないため、これは意図的なものです。

始めたように、プレイブックをサブディレクトリに置くことができますが、プレイブックから使用する他のリソースへの相対パスを使用する必要があります(すでに説明したように)。Ansibleは、プレイブックパスを使用して検索を開始します。これは、記述されているとおりです。ほとんどの場合、プレイブックが置かれている場所に移動することを選択すると、それが対処することになります。

ただし、ネストが必要なようです。

---
- hosts:  aws_instance.jenkins-agents
  user:   ec2-user
  vars_files:
    - ../../../vars/main.yaml
    - ../../../vars/vault.yaml
  ...

なぜ3つのディレクトリに移動するのですか?公式のレイアウトに似ていますが、プレイブック用のサブフォルダーが1つあります。その後、あなたはちょうどで終わります

---
- hosts:  aws_instance.jenkins-agents
  user:   ec2-user
  vars_files:
    - ../vars/main.yaml
    - ../vars/vault.yaml
  ...

これははるかに小さな変更です。


次に、実際に使用することはほとんどありませんvars_files。Ansibleで使用されるほとんどの変数は、ホストに基づいて変化する(したがって、プロジェクトルート内のgroup_vars/ host_varsに入る必要がある)か、または役割固有(したがって、役割ディレクトリ内のvars/ defaultsに入る必要がある)のいずれかです。いくつかのドキュメントリンク:

個人的には、プレイブックにできるだけ少ないのが最善であると思いますが、すべてを役割に委任します。以下は、セットアップのプレイブック全体の例です。

- hosts: aws_instance.jenkins-agents
  roles:
    - ../roles/jenkins_agent

これにより、再利用の柔軟性が大幅に向上します。

あなた自身が役割の相対パスを使用するように望んでいない見つけた場合と、あなたは無効にすることができますroles_pathansible.cfgあなたからあなたのAnsibleのコマンドを実行してルートディレクトリに。


2

030さんの回答にはまだコメントできないので(口座を開設したばかり)、ここで回答します。

グループvarsディレクトリは、Ansibleパスからの相対パスです。

/ etc / ansibleからAnsibleを実行する必要はありません。必要に応じて〜/ .hidden / directory / stuffから実行できます。ディレクトリ構造を維持するようにしてください。すなわち:

/pipeline/   # ansible playbooks are here
/pipeline/roles
/pipeline/group_vars

次に、次のようなものを実行できます

cd /pipeline
ansible-playbook deploy_app.yml

これは、pipeline / group_varsフォルダーからグループ変数を読み取ります。ansible.cfgを/に置くことができるように、デフォルトの場所(/ etc / ansible)でそれらを見つけることができない場合は、現在のフォルダーからのパスを探すので、最初にansibleルートフォルダーにcdする方が良いでしょう。他のコマンドライン引数を指定する必要のないパイプライン。オプションで、ansible.cfg内に特定のパスを定義することもできます。

さらに一歩進んで、環境/場所などごとに個別のグループ変数を設定できます。

/pipeline/prod/group_vars/all.yml
/pipeline/dev/group_vars/all.yml

include-varsを使用して次のように実行します。

ansible-playbook deploy_app.yml -i prod


変数をグループでソートすることをお勧めします。唯一のことは、インベントリをサブディレクトリに配置する場合、group_varsおよびhosts_varsへのシンボリックリンクをインベントリサブディレクトリに配置する必要があることです。
Jiri Klouda 2017年

1

このような問題を回避するために、Ansibleにはホストとグループあります

/etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json'
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball

これは私の質問の答えにはなりませんが、値をグループごとに言っておくことは興味深いアイデアです。私たちが持っている変数は、主に特定のグループに関連しています。ただ、/etcバリアントは、私たちのために動作しないでしょう。プロジェクトからそれらをピックアップできることを願っています。
MailoSvětel2017年

etcフォルダーに存在する必要はありません。ホストとグループvars dirsがansibleディレクトリにある場合、それは機能します
030
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.