Yug*_*hou 5 ansible ansible-playbook
该应用程序需要以下主机:
[foo-servers]
foo-server ansible_ssh_host=192.168.50.2
[bar-servers]
bar-server ansible_ssh_host=192.168.50.3
[mysql-servers]
mysql-server ansible_ssh_host=192.168.50.4
[mongodb-servers]
mongodb-server ansible_ssh_host=192.168.50.5
Run Code Online (Sandbox Code Playgroud)
我需要在foo服务器和bar服务器上配置主机,因为他们需要访问mysql和mongodb.为此,我引入了一个名为hosts的角色:
# roles/hosts/tasks/main.yml
---
- name: change hosts
template: src=hosts.j2 dest=/etc/hosts
# roles/hosts/templates/hosts.j2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for item in hostvars %}
{{ hostvars[item]['ansible_ssh_host'] }} {{ item }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
问题是我跑的时候
ansible-playbook foo.yml
Run Code Online (Sandbox Code Playgroud)
目标上的/ etc/hosts仅包含当前主机的ip和主机名,在这种情况下为foo-server.
我的问题是:
当我只针对其中一个运行playbook时,如何获取清单中的所有主机?
或者你可以提出一些替代方案,因为我在第一时间就得到了错误的想法.
我想到的替代方案是:
使主机配置成为针对所有主机的单独的剧本
---
- name: Configuring hosts
hosts: all
user: root
roles:
- hosts
Run Code Online (Sandbox Code Playgroud)
缺点是我需要在其他人之前运行这个剧本,这似乎不是使用角色的正确方法.
确实这很奇怪,因为即使是文件也说:
如果,在这一点上,你还没有在剧本或剧集的任何游戏中与该主持人交谈,你可以得到变量,但你将无法看到事实.
我从中理解,如果主机尚未被"查询",您可能无法获得收集的事实,但您仍应该看到库存(和组/主机变量)中定义的变量.也许你应该把它推到邮件列表.
与此同时,您可以使用groups['all']循环遍历主机来解决问题:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for item in groups['all'] %}
{{ hostvars[item]['ansible_ssh_host'] }} {{ item }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18179 次 |
| 最近记录: |