是否可以创建一个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被定义为 不够? –