21.2. 在单个 Ansible 任务中管理多个 IdM sudo 规则
使用 freeipa.ansible_freeipa.ipasudorule collection 模块中提供的 sudorules 选项,您可以确保单个 Ansible 任务中存在或不存在多个身份管理(IdM) sudo 规则。使用 选项,您可以更轻松地定义 sudo 规则,并更有效地执行它们。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.15 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(这是执行
freeipa.ansible_freeipa模块的节点)是作为 IdM 客户端、服务器或副本的 IdM 域的一部分。
这个示例额外假设以下内容:
- IdM 中存在 user01 和 user02 用户。
- IdM 中存在 usergroup01 用户组。
- IdM 中存在 hostgroup01 和 hostgroup02 主机组。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/使用以下内容创建 ensure-presence-of-multiple-sudorules-in-a-task.yml 文件:
--- - name: Playbook to handle sudorules hosts: ipaserver become: true tasks: # Ensure sudo command name: /usr/sbin/dmidecode is present - freeipa.ansible_freeipa.ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/sbin/dmidecode # Ensure sudo command /usr/sbin/reboot is present - freeipa.ansible_freeipa.ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/sbin/reboot # Ensure sudo command /usr/bin/yum is present - freeipa.ansible_freeipa.ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/bin/yum # Ensure a sudo command group is present - freeipa.ansible_freeipa.ipasudocmdgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: sudogroup01 sudocmd: - /usr/sbin/dmidecode - /usr/sbin/reboot - name: Ensure multiple sudo rules are present using batch mode freeipa.ansible_freeipa.ipasudorule: ipaadmin_password: "{{ ipaadmin_password }}" sudorules: - name: testrule01 user: - user01 - user02 group: - usergroup01 allow_sudocmd: - /usr/bin/yum allow_sudocmdgroup: - sudogroup01 - name: testrule02 hostgroup: - hostgroup01 - hostgroup02- 注意
-
使用
sudorules选项,您可以指定多个仅适用于特定sudo规则的sudo规则变量。此sudo规则由name变量定义,它是sudorules选项的唯一强制的变量。在示例中,用户、组、allow_sudocmd和allow_sudocmdgroup变量应用到 testrule01sudo规则。
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory ensure-presence-of-multiple-sudorules-in-a-task.yml