为什么基本的 Ansible 循环似乎为每个项目和主机建立多个 ssh 连接?



非常初学者的问题,但试图了解循环与不使用循环的情况。(ANSIBLE 2.9.9(

这是我的设置

# setup_servers.yml
- hosts: all
gather_facts: false
roles:
- baseline
# staging.yml
---
all:
children:
hosts:
host1:
host2:
host3:
# baseline/tasks/main.yml
---
- name: Create Users Task
user:
name: "{{ item }}"
state: present
loop: "{{ developers }}"
# baseline/vars/main.yml
---
developers:
- bob
- jane
- sally

当我运行这个时,我得到了以下内容:ansible-playbook -i staging.yml setup_servers.yml我得到以下内容:

TASK [baseline : Create Users Task] *************************************************************************************************************************************************************************************************
ok: [host1] => (item=bob)
ok: [host2] => (item=bob)
ok: [host3] => (item=bob)
ok: [host1] => (item=jane)
ok: [host2] => (item=jane)
ok: [host3] => (item=jane)
ok: [host1] => (item=sally)
ok: [host2] => (item=sally)
ok: [host3] => (item=sally)

但是,如果我不在任务中使用循环:

---
- name: Create Users Task
user:
name: "bob"
state: present
user:
name: "jane"
state: present
user:
name: "sally"
state: present

我得到这个不同的输出:

TASK [baseline : Create Users Task] *************************************************************************************************************************************************************************************************
ok: [host1]
ok: [host2]
ok: [host3]

输出的显示方式似乎在上面的循环情况下,它针对循环中的每个项目分别连接到每个主机。而对于非循环任务,它显示它只连接到每个主机一次。此外,循环情况需要相当长的时间才能完成(8 倍 - 基本检查,time在命令前面附加了几次运行(。

输出是否不指示实际的 ssh 行为?对这里发生的事情的任何见解都会有所帮助。如果循环方案为每个主机和项目连接一次,有没有办法进行设置,以便它连接到每个主机一次,然后循环创建用户?

在重新阅读了循环和许多谷歌搜索的所有文档后,我没有找到答案。

谢谢。

您的非循环任务无效。 您有三个user调用,但实际上只执行了最后一个。 YAML是一种编程语言。 YAML 处理将覆盖列表中具有相同键的早期项。

相关内容

最新更新