Ansible技术问询:获取执行角色组名及按组名创建目录
解决Ansible组名获取与组目录创建问题
嘿,我来帮你搞定这两个Ansible相关的问题!
问题1:如何在Ansible中获取执行角色的组名?
Ansible自带的魔术变量可以轻松帮你获取主机的组信息,最实用的两个变量是:
group_names:这是一个列表,包含当前执行任务的主机所属的所有组名。比如你的例子里,host2同时属于db和logs组,那group_names的值就是["db", "logs"]。groups:这是一个字典,键是清单里的所有组名,值是对应组下的主机列表。比如你的动态清单对应的groups就是{"db": ["host1", "host2", "host3"], "logs": ["host2"], "misc": ["host4"]}。
问题2:给每个组的主机创建对应组名的目录
你当前写死组名的剧本不够灵活,组多的时候会很繁琐。这里有两种更优雅的实现方式:
方式一:针对主机遍历其所属组创建目录
这种方式完美匹配你的场景——如果主机属于多个组(比如host2同时在db和logs组),会自动在该主机上创建所有对应组名的目录:
- hosts: all tasks: - name: 创建主机所属每个组对应的目录 file: path: "{{ item }}" state: directory loop: "{{ group_names }}"
执行后效果完全符合预期:
- host1、host3会创建
db目录 - host2会创建
db和logs两个目录 - host4会创建
misc目录
方式二:按组批量执行任务(适合扩展场景)
如果之后需要针对不同组添加额外配置(比如设置不同目录权限),可以用groups变量遍历所有组,在对应组的主机上执行任务:
- name: 按组创建专属目录 hosts: all tasks: - name: 创建组对应目录 file: path: "{{ group_info.key }}" state: directory loop: "{{ groups | dict2items }}" loop_control: loop_var: group_info delegate_to: "{{ host }}" with_items: "{{ group_info.value }}" vars: host: "{{ item }}"
内容的提问来源于stack exchange,提问作者Shreya Bhat
相关产品推荐
相关产品推荐

