【发布时间】:2021-01-04 12:57:59
【问题描述】:
我是使用 ansible 进行服务器管理的新手,我需要一些帮助,根据主机和主机组来管理用户和组的成员资格定义,并最大限度地减少重复和可扩展性。
(25 个用户/20 个组超过 50 个主机,最后具有不同的“sudo”和“组成员身份”)。
我们的想法是:
-
“groups_vars”文件定义要在主机组的每个主机上创建的用户(列表或哈希)。
-
“host_vars”文件定义特定主机的用户。 (最后,我需要嵌套组,而不是特定的 host_vars 文件)
我需要将这些 \*_vars 文件内容合并而不是替换(我了解“vars 优先级”的工作原理),因为我想避免用户声明重复。
为了实现这一点,我在\*_vars 文件中使用了哈希语法,并在/etc/ansible/ansible.cfg 中设置了hash_behaviour=merge。
这是我的文件:
我的库存:
all:
children:
type_a:
hosts:
vm1:
vm2:
我的调试手册:
- hosts: type_a
tasks:
- name: Debugging
debug:
msg: "{{ users }}"
group_vars/type_a.yaml :
users:
user1:
name: user1
user2:
name: user2
host_vars/vm1.yaml
users:
user3_vm1_specific:
name: user3_vm1_specific
最后,我需要“vm1”上的 3 个用户,而“vm2”上只有“user1”和“user2”,然后我将使用 vars 来创建用户。
使用合并选项(将在较新版本的 ansible 中弃用)有效,但似乎不是最佳做法。
我在 StackOverflow 和其他网站上搜索过这里,大多数时候的解决方案是:
- 复制用户定义 (每个用户的属性超过 8 个且主机组过多:不可接受。)
- 为第二个用户列表使用其他名称,然后使用
{{ user_list1 + user_list2 }}组合两者。
如果我们想添加许多嵌套组,则扩展性不强。您每次都需要添加自定义命名列表。如果“host_vars”和“group_vars”具有相同的用户定义,它也会重复:它不会合并内容,而是每次使用不同的内容声明两次。
我的第一个解决方案正在运行,但使用了一个近乎弃用的选项。 那么在这种情况下管理 vars 的最佳实践是什么? (已经阅读了关于 vars 的 ansible 文档,但它并没有真正帮助我)。
另外,也许 ansible tower 或 foreman 可以解决这个问题?
【问题讨论】:
标签: ansible