我对Ansible完全陌生,所以我仍然在为它的工作方式而挣扎.我有一个库存文件,其中有几个主机,按环境和功能排序:
[PRO-OSB]
host-1
host-2
[PRO-WL]
host-3
host-4
[PRO:children]
PRO-OSB
PRO-WL但我想,有时我可能需要运行更多的游戏手册,即关注环境、其功能、主机集群和在主机上运行的应用程序。因此,在简历中,每个主机必须有4个“类别”:环境、功能、集群和应用程序。我如何才能做到这一点,而不必不断重复输入??
发布于 2020-01-14 14:28:02
我如何才能做到这一点,而不必不断重复条目?
你不能。你必须在每个需要的组中声明属于它的机器。因此,如果机器属于4个不同的组(不考虑父组),则必须在4个相关组中声明主机。
Ansible可以选择相反的方法(例如,为其所属的每个主机列出列表),但这不是保留的解决方案,它将是冗长的。
为了使事情变得更简单,并使IMO更加安全,您可以将库存分成几个环境库存(prod,dev.)这样你就可以消除每个库存中的一个层次的复杂性。缺点是,这样的设置不能同时针对所有的env。
如果您的库存很大,并且针对某种集群/云环境(vsphere,aws.),动态库存可以提供帮助。
发布于 2020-01-14 15:39:47
问:“每个主机必须有4个”类别“:环境、功能、集群和应用程序。我如何才能做到这一点而不需要不断地重复输入?”
答:可以在*:vars部分声明默认选项,并使用主机的特定选项覆盖它。见如何合并变量。例如,库存
$ cat hosts
[PRO_OSB]
test_01 my_cluster='cluster_A'
test_02
[PRO_WL]
test_03 my_cluster='cluster_A'
test_04
[PRO:children]
PRO_OSB
PRO_WL
[PRO:vars]
my_environment='default_env'
my_function='default_fnc
my_cluster='default_cluster'
my_app='default_app'带着剧本
- hosts: PRO
gather_facts: false
tasks:
- debug:
msg: "{{ inventory_hostname }}
{{ my_environment }}
{{ my_function }}
{{ my_cluster }}
{{ my_app }}"and (my_cluster变量test_01和test_03被主机值覆盖)
"msg": "test_01 default_env 'default_fnc cluster_A default_app"
"msg": "test_02 default_env 'default_fnc default_cluster default_app"
"msg": "test_04 default_env 'default_fnc default_cluster default_app"
"msg": "test_03 default_env 'default_fnc cluster_A default_app"问:“运行游戏说明更多,即关注环境,其功能,集群主机和应用程序。”
可以使用模块add_host创建动态组并根据需要选择主机。例如,在第一次播放中创建新的组cluster_A,并在下一次播放中使用它
- hosts: all
tasks:
- add_host:
name: "{{ item }}"
group: cluster_A
loop: "{{ hostvars|
dict2items|
json_query('[?value.my_cluster == `cluster_A`].key') }}"
delegate_to: localhost
run_once: true
- hosts: cluster_A
tasks:
- debug:
var: inventory_hostname给出
ok: [test_01] => {
"inventory_hostname": "test_01"
}
ok: [test_03] => {
"inventory_hostname": "test_03"
}发布于 2020-05-23 05:14:15
对于那些可能需要这样的东西的人--
最后,当我试图为每个主机建立多个变量,以便根据角色或团队交付文件时,我在库存文件中使用了这种格式。
清单/支助/主机
support:
hosts:
qahost:
host_role:
waiter
dishwasher
host_teams:
ops
sales
awshost:
host_role:
waiter
host_teams:
dev
testhost1:
host_role:
dishwasher
host_teams:
ops
dev
testhost2:
host_role:
dishwasher
boss
host_teams:
ops
dev
sales在这出戏中提到了他们:
- name: parse inventory file host variables
debug:
msg: |
- "role attribute of host: {{ item }} is {{ hostvars[item]['host_role'] }}"
- "team attribute of host: {{ item }} is {{ hostvars[item]['host_teams'] }}"
with_items: "{{ inventory_hostname }}"
when: hostvars[item]['host_teams'] is contains (team_name)带有自定义extra_var的ansible命令,该命令传递给剧本,并在库存中与when条件相匹配:
ansible-playbook -i inventory/support/hosts -e 'team_name="sales"' playbook.ymlhttps://stackoverflow.com/questions/59735057
复制相似问题