我有一个Ansible playbook(使用ansible 1.9.3)来设置和更新一堆服务器 . 其中一个步骤是安装包(使用'apt'插件) . 直到最近我的所有服务器都是统一的(相同版本的Ubuntu服务器) . 我正在推出一个更新的Ubuntu服务器,一些包名已经改变 .
这是我的任务文件的样子:
- name: install needed packages
apt: name={{ item }} state=present update_cache=yes
with_items: packages
(我在vars文件中有一个包列表) .
我可以在库存文件中为具有不同Ubuntu版本的主机定义一个变量 .
如何更改此任务以使用当前主机的一个软件包列表,以及我的新主机的另一个软件包列表?
2 回答
使用
when
子句 . 这是一个只能在ubuntu 12.04上运行的例子您也可以使用:
Edit: 更高版本的Ansible(例如2.7.1)将为此声明打印警告:
Ansible现在期望条件语句的另一种语法,如文档中所述 .
对于Ansible 2.5你可以试试这个:
甚至:
latest version of the docs建议使用像这样访问ansible_facts:
为了保持您的剧本更清洁,您可以在角色中执行此操作,例如,您可以拥有一个基于操作系统的一个
tasks/main.yml
它将包含与when
使用的条件匹配的任务,例如,如果使用ansible_os_family
的内容main.yml
可能是这样的:这种方法的优点是除了每个操作系统只有一组任务外,您还可以标记完整的任务 .