2016-05-13 7 views
0

私はそうのようなフォルダ構造があります。環境固有のインベントリファイルをどのように指定しますか?

. 
├── ansible.cfg 
├── etc 
│   ├── dev 
│   │   ├── common 
│   │   │   ├── graphite.yml 
│   │   │   ├── mongo.yml 
│   │   │   ├── mysql.yml 
│   │   │   └── rs4.yml 
│   │   ├── inventory 
│   │   └── products 
│   │    ├── a.yml 
│   │    ├── b.yml 
│   │    └── c.yml 
│   └── prod 
│    ├── common 
│    │   ├── graphite.yml 
│    │   ├── mongo.yml 
│    │   ├── redis.yml 
│    │   └── rs4.yml 
│    ├── inventory 
│    └── products 
│     ├── a.yml 
│     ├── b.yml 
│     └── c.yml 
├── globals.yml 
├── startup.yml 
├── roles 
| └── [...] 
└── requirements.txt 

そして、私のansible.cfgでは、私のような何かをしたいと思います:hostfile=./etc/{{ env }}/inventoryをするが、これは動作しません。 Ansibleに環境固有のインベントリファイルを指定する方法はありますか?

+1

環境に基づくルーチンは、実際には良い設計ではありません。ルーチンはエラーを確実に捕捉できるように、すべての環境で同じでなければなりません(少しでも変更してください)。むしろ、変更はアプリケーション/サービスレベルで行う必要があります。 – activatedgeek

答えて

1

私は共通しており、製品は可変ファイルです。

@Deepali Mittalは既にあなたの在庫がinventory/{{ env }}のように表示されるはずです。

inventory/prodでは、グループprodを定義するとinventory/devに、あなたはグループdev定義します

[prod] 
host1 
host2 
hostN 

これは、あなたがグループがproddevためvarsの定義することができますが。これは単にフォルダgroup_vars/prodを作成し、あなたのvarsファイルを内部に置きます。

再注文し、あなたの構造は次のようになります。

. 
├── ansible.cfg 
├── inventory 
│ ├── dev 
│ └── prod 
├── group_vars 
│ ├── dev 
│ │ ├── common 
│ │ │ ├── graphite.yml 
│ │ │ ├── mongo.yml 
│ │ │ ├── mysql.yml 
│ │ │ └── rs4.yml 
│ │ └── products 
│ │  ├── a.yml 
│ │  ├── b.yml 
│ │  └── c.yml 
│ └── prod 
│  ├── common 
│  │ ├── graphite.yml 
│  │ ├── mongo.yml 
│  │ ├── mysql.yml 
│  │ └── rs4.yml 
│  └── products 
│   ├── a.yml 
│   ├── b.yml 
│   └── c.yml 
├── globals.yml 
├── startup.yml 
├── roles 
| └── [...] 
└── requirements.txt 

私はglobals.ymlが何であるかわかりません。プレイブックの場合は、正しい場所にあります。グローバル定義を持つ変数ファイルの場合は、group_vars/all.ymlとして保存し、すべてのホストに対して自動的にロードされます。私はあなたが尋ねたように、それはansible.cfg内の環境を評価することが可能だとは思わない

ansible-playbook -i inventory/prod startup.yml 

今、あなたは正しいインベントリファイルとansible・脚本を呼び出します。

+0

ヒントをお寄せいただきありがとうございます。私の変数の 'prod'に複数のフォルダがある場合は、これらのファイル(' common'と 'product'のファイル)を自動読み込みますか? 'prod'を超えてどんな深さで知っていますか? – MrDuk

+0

また、これを 'ansible.cfg'で定義する私の目標は、毎回インベントリファイルを指定する必要がなくなるためです。 'startup.yml'を実行し、どの環境で作業したいのかを確認し、選択した環境のインベントリファイルを動的に読み込みます。 – MrDuk

0

{{ env }}/inventoryの代わりに/inventory/{{ env }}と思っています。また、あなたが現在どのように使用しているかを共有できれば、設定をenvsに変更するとエラーが発生します。

関連する問題