我有一个由分布在多个主机上的微模块组成的应用程序。
[moduleA_hostgroup]
host1
host2
[moduleB_hostgroup]
host2
host3
[moduleC_hostgroup]
host1
host4每个模块都有特定的位置和配置文件。我想获取所有已安装模块的配置
vars:
modules:
moduleA:
path: "/opt/moduleA"
files_to_fetch: ['*.conf']
moduleB:
path: "/etc/moduleB"
files_to_fetch: ['*.json','*.properties']
moduleC:
path: "/etc/moduleC"
files_to_fetch: ['*.conf','*.json']我可以通过运行一个角色来检索这些模块的文件:
- hosts: moduleA_hostgroup
pre_tasks:
- name: pre_tasks
set_fact:
path: "{{ modules.moduleA.path }}"
pattern: "{{ modules.moduleA.files_tofetch }}'
roles:
- ../roles/fetch_module_config
- hosts: moduleB_hostgroup
pre_tasks:
- name: pre_tasks
set_fact:
path: "{{ modules.moduleB.path }}"
pattern: "{{ modules.moduleB.files_tofetch }}'
roles:
- ../roles/fetch_module_config
etc..问题是,我将不得不像运行模块一样多次运行角色,是否有一种优雅的方式循环遍历模块列表并仅在模块主机组上运行角色?
发布于 2022-11-04 13:58:31
include_role应该能做到这一点。
---
- hosts: hosts
vars:
modules:
moduleA:
path: "/opt/moduleA"
files_to_fetch: ['*.conf']
moduleB:
path: "/etc/moduleB"
files_to_fetch: ['*.json','*.properties']
moduleC:
path: "/etc/moduleC"
files_to_fetch: ['*.conf','*.json']
tasks:
- name: Collecting Data
include_role:
name: fetch_module_config
vars:
path: "{{ item.value.path }}"
pattern: "{{ item.value.files_to_fetch }}"
loop: "{{ modules | dict2items }}"
when: item.key in group_names但这相当笨重。对于这样的任务来说,角色是不合适的,您应该考虑将其转换为任务,然后使用include_task。
https://serverfault.com/questions/1114827
复制相似问题