是否可以創建一個Ansible庫存變量,該變量與庫存主機或組沒有關聯,但該Playbook運行的服務器層是否可用?我有一個Ansible角色,使用APT安裝libffi-dev軟件包,但我可能想要在每個服務器層上安裝該軟件包的不同版本。我爲此創建了一個變量「libffi-dev_ver」。我還擁有與我的每個層級相對應的庫存文件「開發」,「分段」和「生產」。如何設置Ansible特定於庫存的變量?
我的角色的主要任務,這是從我的主要site.yml劇本叫,檢查該版本變量存在運行中的作用之前:
# roles/misc_libs/tasks/main.yml
- include: check_vars.yml tags=misc_libs
- include: misc_libs.yml tags=misc_libs
check_vars.yml檢查,以確保軟件包版本變量存在:
# roles/misc_libs_tasks/check_vars.yml
- name: check that required role variables are set
fail: msg="{{ item }} is not defined"
when: not {{ item }}
with_items:
- libffi-dev_ver
的misc_libs作用實際上使用的是可變的安裝包:
# roles/misc_libs/tasks/misc_libs.yml
- name: install libffi-dev
apt: >
pkg=libffi-dev={{ libffi-dev_ver }}
update_cache=yes
cache_valid_time=3600
become: True
我的開發清單文件看起來是這樣的:
# development
[webservers]
web01.example.com ansible_ssh_host=<ip_address>
[dev:children]
webservers
[webservers:vars]
libffi-dev_ver="3.1-2+b2"
當我運行此命令:
ansible-playbook -i development site.yml -l webservers
我得到這個Ansible錯誤:
fatal: [web01.example.com] => error while evaluating conditional: not libffi-dev_ver
什麼是聲明的正確方法Ansible中的這樣的包版本變量?變量的值取決於服務器層,它向我表明它已進入清單文件,因爲清單文件是服務器層特定的。但是所有庫存變量似乎都必須與主機或組相關聯。我已經這樣做了,但角色仍然沒有看到變量。我可以將任務添加到檢測服務器層的角色中,並使用「when」條件相應地設置變量,但該解決方案看起來很難看,因爲如果要在角色中安裝多個包,則每個角色需要三個條件包版本變量。我瀏覽了Ansible文檔並閱讀了很多關於設置多層劇本的博文,但我沒有看到這種特殊的情況。什麼是正確的方式來聲明這樣的層特定變量?
我沒有得到你想要完成的。爲什麼: #角色/ misc_libs /任務/ misc_libs.yml - 名稱:安裝libffi-dev的 貼切:> PKG = libffi-dev的= {{libffi-dev_ver}} update_cache = YES cache_valid_time = 3600 成爲:真 何時:libffi-dev_ver被定義爲 不夠? –