题目描述
- 从
http://materials/user_list.yml
下载要创建的用户的列表,并将它保存到/home/greg/ansible
. - 在本次考试中使用在其他位置创建的密码库
/home/greg/ansible/locker.yml
. 创建名为/home/greg/ansible/users.yml
的 playbook ,从而按以下所述创建用户帐户:
2.1. 职位描述为 developer
的用户应当:
- 在
dev
和test
主机组中的受管节点上创建; - 从
pw_developer
变量分配密码; - 是补充组
devops
的成员。
2.2. 职位描述为 manager
的用户应当:
- 在
prod
主机组中的受管节点上创建; - 从
pw_manager
变量分配密码; - 是补充组
opsmgr
的成员。
- 密码采用
SHA512
哈希格式。 - 您的 playbook 应能够在本次考试中使用在其他位置创建的库密码文件
/home/greg/ansible/secret.txt
正常运行。
详细解析
首先,进入到 /home/greg/ansible
目录,然后下载用户列表文件 user_list.yml
:
wget http://materials/user_list.yml
使用 cat
命令查看一下 user_list.yml
文件可以看到如下内容:
users: - name: bob job: developer - name: sally job: manager - name: fred job: developer
本题和前面一题(红帽 RHCE8 认证考试:创建密码库)是相关联的,我们在做本题的时候需要用到前面做的这一题的文件,因此需要使用 Ansible 的 vars_files
关键字以列表的形式,引用前面一题创建的包含变量的文件。
由于我们还需要为用户设置组,因此,在设置之前,我们需要使用 Ansible 的 group
模块确保在目标主机上存在我们需要使用的组(可以使用 ansible-doc group
命令查看该模块的帮助信息)。
当然,既然涉及对用户的操作,那么一定会用到 Ansible 的 user
模块(可以使用 ansible-doc user
命令查看该模块的帮助信息)。
接着,根据题目要求创建并编辑如下 playbook:
vim /home/greg/ansible/users.yml
之后,在该 playbook 中写入如下内容:
--- - name: hosts: dev,test vars_files: - locker.yml - user_list.yml tasks: - name: group: name: devops state: present - name: user: name: "{{ item.name }}" password: "{{ pw_developer | password_hash('sha512') }}" groups: devops loop: "{{ users }}" when: item.job == 'developer' - name: hosts: prod vars_files: - locker.yml - user_list.yml tasks: - name: group: name: opsmgr state: present - name: user: name: "{{ item.name }}" password: "{{ pw_manager | password_hash('sha512') }}" groups: opsmgr loop: "{{ users }}" when: item.job == 'manager'
由于上面的 playbook 调用了被加密的外部文件,因此在使用 ansible-play
命令执行该 playbook 时需要指定解密用的密码文件:
ansible-playbook --vault-password-file=/home/greg/ansible/secret.txt /home/greg/ansible/users.yml
根据前面一题(红帽 RHCE8 认证考试:创建密码库)中在 locker.yml
文件中写入的信息可知,执行完上面的 playbook 后,在正确的情况下,属于 developer
组的用户(即 bob
和 fred
)的密码是 Imadev
, 而属于 manager
组的用户(即 sally
)的密码是 Imamgr
.
确定了上面这些信息之后,为了验证本题中 playbook 的运行结果是否符合预期,我们就可以使用 SSH 登录到这些用户所在的主机上(我们可以从第一题创建的主机静态清单文件 inventory
中获知主机组和用户之间的对应关系。),之后,可以使用 groups
命令查看当前用户的所属组是否正确。