ansible - Ansible 为所有人和组运行一个角色
问题描述
我有一个创建用户帐户的角色“totaldebug.users”。对于我的剧本,我有以下内容:
---
- name: Configure all servers.
hosts: all
become: true
roles:
- base
- security
- totaldebug.users
- import_playbook: tor.yml
然后在导入的剧本中我有:
---
- hosts: tor
roles:
- totaldebug.motd
- totaldebug.users
然后我有以下 group_vars:
全部
users:
- username: mainaccount
uid: 2000
groups: ['sudo']
ssh-key: mypublic ssh key"
tor/vars
# Users
users:
- username: serviceaccount
uid: 666
system: true
我的期望是,它首先会运行“All”组并应用用户,mainaccount
然后运行 tor 组并创建它,serviceaccount
但它会跳过主帐户并创建服务帐户。
我这样做的原因是我想要在所有服务器上的主帐户,但是服务帐户在其他服务器上会有所不同或不需要,有没有办法实现这一点,或者我只需要在每个组 var 下添加用户并将其从全部中删除?
似乎是一个糟糕的设计,因为我不得不用任何帐户更改来更新多个文件,而不仅仅是能够在顶层全部更改它。
解决方案
从广告资源 group_vars 返回的变量不取决于您定位的组,仅取决于优先规则(可以稍微调整)
从上面的第一个链接中,我建议您提出建议:
就定义变量(在哪里定义某些类型的变量)达成一致的团队和项目通常会避免变量优先级问题。我们建议您在一个地方定义每个变量:找出定义变量的位置,并保持简单。例如,请参阅有关在何处设置变量的提示。
这是我将如何解决您当前问题的示例。我首先要说明(只是一个例子,你可以适应):
- 默认用户列表在组中定义
all
- 用户的完整列表按组计算
all
- 其他组可以定义额外的用户列表。
- 一台机器只能是定义附加用户的一个组的一部分。
从那里:
- 在group_vars/all.ylm
_default_users:
- username: mainaccount
uid: 2000
groups: ['sudo']
ssh-key: mypublic ssh key"
users: "{{ _default_users + (_specific_users | default([])) }}"
- 在group_vars/tor.yml
_specific_users:
- username: serviceaccount
uid: 666
system: true
然后,您只需要运行一次您的角色。如果您正在运行任务的特定主机存在默认用户和特定用户,它将创建它们。
推荐阅读
- sql - 将连接表的前 10 个选定行(所有列)放入数组或变量表中的 SQL Server 方法
- odoo - 获取存储在文件存储 odoo 11 中的图像
- javascript - 添加新文档时正在检查 Firebase 列表权限
- reactjs - 在 ReactJS 中滚动嵌套组件
- java - 如何在 Java 中为 Elasticsearch 编写适当的单元测试
- c - 指针可以指向内存是不是没有分配?
- python - scipy中0阶的上不完全伽玛函数
- hadoop - 如何在不插入任何记录的情况下通过配置单元表模式推断镶木地板模式?
- docker - 即使 docker-compose up 成功也无法连接到 docker 端点
- sql-server - 如何将 SQL Server 触发器转换为 Oracle 触发器?