Deployment
Ansible:在組之間共享庫存變數
我有一本包含兩部戲劇的劇本,一部是本地的,一部是遠端的。我有兩個庫存,一個用於測試,一個用於生產。每個庫存為遠端組定義一個變數,但我想在本地播放中使用該變數而不使用委託。那可能嗎?我該怎麼做?
範例劇本:
- 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_name
through的值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