Deployment

Ansible:在組之間共享庫存變數

  • August 9, 2016

我有一本包含兩部戲劇的劇本,一部是本地的,一部是遠端的。我有兩個庫存,一個用於測試,一個用於生產。每個庫存為遠端組定義一個變數,但我想在本地播放中使用該變數而不使用委託。那可能嗎?我該怎麼做?

範例劇本:

- hosts: local
 tasks:
   # ... lots of local build steps here
   - command: tar -czf {{ archive_name }} /build_dir
- hosts: remote
 tasks:
   - unarchive: src={{ archive_name }} dest=/deploy_dir

測試庫存:

[local]
127.0.0.1

[remote]
test.example.com

[remote:vars]
archive_name=/tmp/test-build.tgz

生產庫存:

[local]
127.0.0.1

[remote]
www.example.com

[remote:vars]
archive_name=/tmp/production-build.tgz

此範例失敗,因為{{ archive_name }}沒有為local組定義。

對此的解決方案將具有以下限制:

  • 我無法將其放入文件中,group_vars因為我有具有相同組名的不同庫存。
  • 我寧願不委託建構過程任務,也不願使用單獨的遊戲。
  • 我想將變數保留在庫存文件中,而不是動態載入其他文件。

我目前看到的唯一選擇是{{ archive_name }}再次為local組定義,但這很容易出錯。

您應該能夠訪問archive_namethrough的值hostvars

- hosts: local
 tasks:
   # ... lots of local build steps here
   - command: tar -czf {{ hostvars[groups['remote'][0]]['archive_name'] }} /build_dir
- hosts: remote
 tasks:
   - unarchive: src={{ hostvars[groups['remote'][0]]['archive_name'] }} dest=/deploy_dir

引用自:https://serverfault.com/questions/795772