我试图对多个主机运行使用相同名称的容器运行ansible playbook。有3台主机,每个主机运行一个名为“Web”的容器。我在试着用docker连接。
- name: Ping
ping:
- name: Add web container to inventory
add_host:
name: web
ansible_connection: docker
ansible_docker_extra_args: "-H=tcp://{{ ansible_host }}:2375"
ansible_user: root
changed_when: false
- name: Remove old logging directory
delegate_to: web
file:
state: absent
path: /var/log/old_logs
PLAY [all]
TASK [Gathering Facts]
ok: [web1]
ok: [web2]
ok: [web3]
TASK [web-playbook : Ping]
ok: [web1]
ok: [web2]
ok: [web3]
TASK [web-playbook : Add sensor container to inventory]
ok: [web1]
PLAY RECAP
web1 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web2 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web3 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
你得到的结果绝对是意料之中的。引用add_host
文档
这个模块绕过play host循环,只对play中的所有主机运行一次,如果您需要它进行迭代,请使用with-loop构造。
也就是说,add_host
不能依赖hosts循环,而需要自己创建一个循环。
假设所有的docker主机都在DockerHosts
组中,下面的playbook应该可以完成这项工作。我目前不在一个情况下,我可以测试自己,所以你可能需要调整一点。让我知道它是否对你有帮助,如果我必须编辑我的答案。
请注意,尽管add_host
任务不会自然循环,但我在第一次播放中保留了原始组中的主机,以便正确地收集事实,并在hostvars
魔术变量中正确地填充事实
---
- name: Create dynamic inventory for docker containers
hosts: dockerhosts
tasks:
- name: Add web container to inventory
add_host:
name: "web_{{ item }}"
groups:
- dockercontainers
ansible_connection: docker
ansible_host: web
ansible_docker_extra_args: "-H=tcp://{{ hostvars[item].ansible_host }}:2375"
ansible_user: root
loop: "{{ groups['dockerhosts'] }}"
- name: Play needed commands on containers
hosts: dockercontainers
tasks:
- name: Remove old logging directory
file:
state: absent
path: /var/log/old_logs
问题内容: 我是Swift的新手,我已经遍历了一些教程,其中许多教程使用同一个名称多次定义了一个函数。 我已经习惯了其他编程语言,否则将无法执行此操作。 因此,我检查了官方的Swift手册,还检查了override关键字,以了解可以得到的结果,但是仍然无法理解以下代码: 从我看到的函数tableView设置在第1行和第5行,我注意到的唯一区别是第一个tableView函数返回,而第二个函数返回(U
问题内容: 我的MySQL数据库中有这些表: 通用表: Facebook表: 首席表: 基本上,常规表包含一些( 显然 )常规数据。基于generalTable.scenario,您可以在其他两个表中查找更多详细信息,这些表在某些熟悉的列中(例如,expiresAt),而在其他一些列中则不然。 我的问题是,如何仅通过一个查询就可以获取generalTable和正确的明细表的联接数据。 所以,我想这
我有一个依赖于多个docker容器的应用程序。我使用docker撰写,以便所有容器都在同一个网络中进行容器间通信。但是,我的两个容器在各自的容器中监听相同的端口8080,但是映射到主机上的不同端口: 8072,8073。对于集装箱间的通信,因为我们使用集装箱的端口,这会引起问题吗? 限制条件: 我需要两个容器才能运行我的应用程序。因此,我无法将具有相同内部端口的其他容器隔离到不同的网络 所有容器都
我想对两个不同的数据帧执行一些sql操作。不幸的是,就像我处理的数据一样,拼写通常是不同的。 下面是一个示例,其中userid属于df1,username属于df2。有人帮我吗?
由于ES的docker容器,我面临一个奇怪的问题,我之前在9200主机端口的docker容器中运行独立的ES 7.10(内部docker端口与标准9200和9300 ES端口相同),同时,我启动了三个ES docker容器(有一个不同的小版本7)(它们应该组成集群,让我们把它命名为docker ES集群)。 这三个ES docker容器使用的主机端口为9200、92019202,因此,由于端口冲突