2017-03-22 4 views
0

東と西の2つのデータセンターがある場合。データセンターと環境で不可能な在庫を整理する方法は?

次に、DEV、QA、PRODの3つの環境があります。

それぞれのデータセンターと環境には独自の領事クラスターがあります。

今私は、たとえば、インベントリから領事クラスタを参照するようにしたい:

consul_servers: "{{ groups['consul'] | to_json }}" 

は、どのように私はそのデータセンターと環境のための適切な領事のクラスタホストにのみ結果に自分の在庫とgroup_varsを整理するのですか?

データセンターと環境ごとにインベントリファイルを用意することが考えられます。例えば

  • 西dev.ini
  • 西qa.ini
  • 西prod.ini
  • 東dev.ini
  • 東qa.ini
  • east-prod.ini

妥当だと思われますが、今はどうすればgroup_varsの環境のみまたはデータセンターのみの変数に対処できますか?私はそれらを子供グループにするのですか?

答えて

1

1つのアプローチは、シンボリックリンクを使用することです。すべての共通環境とデータセンター変数を別々のファイルに定義し、必要なすべての組み合わせをサブフォルダとして作成し、group_vars/allに適切なvarファイルへのリンクが含まれているようにします。私はここだけeast-prodwest-devの組み合わせを定義しましたが、あなたは同様の方法で他の人を作ることができ

virt_inv/ 
├── dc_east.yml 
├── dc_west.yml 
├── east-prod 
│   ├── group_vars 
│   │   └── all 
│   │    ├── dc.yml -> ../../../dc_east.yml 
│   │    └── env.yml -> ../../../env_prod.yml 
│   └── hosts 
├── env_dev.yml 
├── env_prod.yml 
└── west-dev 
    ├── group_vars 
    │   └── all 
    │    ├── dc.yml -> ../../../dc_west.yml 
    │    └── env.yml -> ../../../env_dev.yml 
    └── hosts 

:ここ

は2つのデータセンターeast/westと2つの環境dev/prodための一例です。

$ find virt_inv -type f -print -exec cat {} \; 
virt_inv/dc_east.yml 
datacenter: east-02 
virt_inv/dc_west.yml 
datacenter: west-01 
virt_inv/east-prod/hosts 
[servers] 
host4 
host5 
virt_inv/env_dev.yml 
env: developer 
virt_inv/env_prod.yml 
env: production 
virt_inv/west-dev/hosts 
[servers] 
host1 
host2 

そして結果:これは私が必要なものであるように思わ

$ ansible all -i virt_inv/east-prod/hosts -m debug -a 'msg={{datacenter}}-{{env}}' 
host5 | SUCCESS => { 
    "msg": "east-02-production" 
} 
host4 | SUCCESS => { 
    "msg": "east-02-production" 
} 

$ ansible all -i virt_inv/west-dev/hosts -m debug -a 'msg={{datacenter}}-{{env}}' 
host2 | SUCCESS => { 
    "msg": "west-01-developer" 
} 
host1 | SUCCESS => { 
    "msg": "west-01-developer" 
} 
+0

おかげ

この

は、デモコンテンツであります –

関連する問題