我有系统(Zabbix)使用基于“/”定界符的粗略组/子组定义,这些定界符在普通列表中定义。
例如:“Grp(1)”“Grp(1)/Subgrp(A)”“Grp(1)/Subgrp(B)”“Grp(2)”“Grp(2)/Subgrp(X)”
这定义了两个组,具有两个子组(A 和 B)的 Grp(1) 和具有一个子组 (X) 的 Grp(2)
如果我在逻辑上将用户分配给“Grp(1)”,则预计用户也自动拥有“Grp(1)/Subgrp(A)”和“Grp(1)/Subgrp(B)”的权限
示例 vars 文件如下所示:
---
groups_vars:
- "Grp(1)"
- "Grp(1)/Subgrp(A)"
- "Grp(1)/Subgrp(B)"
- "Grp(2)"
- "Grp(2)/Subgrp(X)"
vars 用于 ansible Galaxy 模块 community.zabbix,Grp(1) 有简化用法:
- name: Ensure user groups are created and right to itself and subgroups are assigned
community.zabbix.zabbix_usergroup:
name: Grp(1)
rights:
- {host_group: ["Grp(1)","Grp(1)/Subgrp(A)","Grp(1)/Subgrp(B)"], permission: "read-write" }
我试图实现输入变量的“set_fact”转换为更适合ansible循环的格式:
---
groups_vars:
-
name: Grp(1)
rights:
host_group:
- Grp(1)
- Grp(1)/Subgrp(A)
- Grp(1)/Subgrp(B)
permission: read-write
-
name: Grp(1)/Subgrp(A)
rights:
host_group:
- Grp(1)/Subgrp(A)
permission: read-write
-
name: Grp(1)/Subgrp(B)
rights:
host_group:
- Grp(1)/Subgrp(B)
permission: read-write
-
name: Grp(2)
rights:
host_group:
- Grp(2)
- Grp(1)/Subgrp(X)
permission: read-write
-
name: Grp(2)/Subgrp(X)
rights:
host_group:
- Grp(2)/Subgrp(X)
permission: read-write
但我没有定义转换。我尝试用于过滤的 select('match', ) 函数是基于正则表达式的,但它本身可以包含正则表达式指令(名称“Grp(1)”包含作为正则表达式指令的括号),我无法找到任何“startswith”方法寻找子群。我的想法是,对于上面定义的原始 group_vars 中的每个组,我找到所有以组名开头的项目(所以对于“Grp(2)”,我会找到“Grp(2)”和“Grp(2)/Subgrp (X)”,对于“Grp(2)/Subgrp(X)”,我只会找到“Grp(2)/Subgrp(X)”本身)
请任何想法如何解决这个问题?也许我的方法完全错误,如果有更优雅的解决方案,请帮助。