loops - 为什么基本的 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 处理会覆盖列表中具有相同键的较早项目。
推荐阅读
- python - 有没有办法对齐熊猫中的列标题?
- php - PHP,找到 XML 的元素并用它做一些事情
- spring-boot - BeforeAll 方法没有被触发
- c# - 如何在我的代码中找到错误的位置
- python - AttributeError:“张量”对象没有“下”属性
- firebase - 已查看 Firebase 文档,关于选择 Firestore 和 Cloud Functions 位置仍有几个问题
- speech-recognition - Kaldi解码中需要语音
- php - Laravel - 资源计数月份日期
- reactjs - 如何根据收到的道具使用 React Router 设置动态路由?
- php - 有没有办法压缩通过 php 创建的 html 输出?