Ansible:试图将条件放在一个variables文件上

我正在开发一个项目,该项目将使用一些设备,这些设备需要configuration相同的游戏,但需要单独的variables。 我有一个vars文件,其中包括一些库,每个设备一个。 库的名称与设备的名称相匹配,例如:

(Device1的)

- {xxx: "AAA", yyy: "BBB", zzz: "CCC"} - {xxx: "AAA", yyy: "BBB", zzz: "CCC"} 

(设备2)

 - {xxx: "AAA", yyy: "BBB", zzz: "CCC"} - {xxx: "AAA", yyy: "BBB", zzz: "CCC"} 

剧本本身应该找出哪个库与设备匹配,使用该库的variables,而不是其他的。 我目前的尝试是这样做的:

 - name: do this command: "do some of item.xxx with some item.zzz - include_vars: device-library.yaml when: "{{item}} == {{ansible_hostname}}" 

但我总是得到:

致命:[xxx.xxx.xxx.xxx]:失败! => {“failed”:true,“msg”:“ERROR!'item'is undefined”}

当这个项目只是一个设备,我们一直使用with_items: stuff.yaml ,它工作得很好。

我的问题是:我必须用什么来代替{{item}} ,还是有更好的方法?

从这个声明:

剧本本身应该找出哪个库与设备匹配,使用该库的variables,而不是其他的。

我的结论是你试图复制Ansible最基本的function之一。

你应该做什么:

  1. 在Ansible项目目录下创build一个子目录host_vars ;
  2. 将包含variables定义的文件移动到host_vars目录;
  3. 确保上面的文件名完全匹配Ansible用于引用目标机器的主机名(不包括.yaml扩展名);
  4. 删除手册中的所有手册包含指令;
  5. 运行剧本。

或者覆盖多个服务器,您可以使用group_vars子目录执行相同的操作,并根据清单文件中定义的组名命名文件。

请参阅文档以获取更多信息。