首页 > 解决方案 > 使用ansible循环主机变量

问题描述

我想实现这样的功能:

for(int i=0;i<nums;i++){
  hosts[i].something();
}
---
- hosts: vm[{{i}}]
  with_sequence: start=0 end=10 format=i%d
  gather_facts: False
  remote_user: root
  tasks:
  - import_tasks: test.yaml  

我该如何修改它?

非常感谢,掩蔽时间

标签: ansible

解决方案


所以我认为你在这里可能有几个问题,对于初学者来说,当你调用 with_sequence 时,它​​会迭代到一个名为“item”的变量,系统将不知道如何处理你放置在其中的 i 变量。格式行只是对要放入“项目”的字符串执行额外的转换。如果要将其命名为“item”以外的名称,则必须将 loop_control 和 loop_var 子参数附加到任务上。

https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html

这将我们带到了下一点,我认为您不能将循环应用于这样的剧本,我很确定您只能对任务执行此操作。

但是,如果您的目标只是遍历以“vm”开头的特定主机组,则可以通过清单来实现。在您的清单文件中,创建一个将捆绑一系列主机的组,如下所示:

[test_servers]
vm[0:10]

然后重新格式化你的剧本,看起来像这样:

---
- hosts: test_servers
  gather_facts: False
  remote_user: root
  tasks:
  - import_tasks: test.yaml  

推荐阅读