题目描述
按照下方所述,在控制节点 control 上安装和配置 Ansible:
- 安装所需的软件包。
- 创建名为
/home/greg/ansible/inventory
的静态清单文件,以满足以下要求: node1
是dev
主机组的成员;node2
是test
主机组的成员;node3
和node4
是prod
主机组的成员;node5
是balancers
主机组的成员;prod
组是webservers
主机组的成员;- 创建名为
/home/greg/ansible/ansible.cfg
的配置文件,以满足以下要求: - 主机清单文件为
/home/greg/ansible/inventory
; playbook
中使用的角色的位置包括/home/greg/ansible/roles
.
详细解析
[1]. 以下操作都是在 Ansible 的控制节点中完成的。在本文中,控制节点的名称是
control
;[2]. 有的考试环境中会要求在控制节点上所做的所有操作都要由特定用户来完成,例如,在本文中,所有在控制节点
control
上对 Ansible 做的操作都是以greg
用户的身份完成的,而不是root
用户。
首先,使用控制节点上的 root 用户在控制节点主机上安装 Ansible:
yum -y install ansible
下面的步骤开始使用控制节点上的 greg 用户完成。
创建并编辑静态清单文件 /home/greg/ansible/inventory
:
mkdir /home/greg/ansible/ touch /home/greg/ansible/inventory vim /home/greg/ansible/inventory
[1]. 要根据题目要求编辑文件或创建目录的时候最好用直接复制题目中给出的从根目录开始的完整路径进行创建,这样可以尽可能避免出错,例如,在创建静态清单文件
/home/greg/ansible/inventory
的时候,不要先进入/home/greg/ansible/
目录下,然后使用touch inventory
的方式编辑inventory
文件,而是直接使用完整路径编辑inventory
文件:touch /home/greg/ansible/inventory
.[2]. 有时候,直接创建并保存
/home/greg/ansible/inventory
这个静态清单文件时会报错,这是因为,在刚开始做题的时候,目录/home/greg/ansible/
还不存在,这时候,我们可以先创建该目录:mkdir /home/greg/ansible/
.
在静态清单文件 /home/greg/ansible/inventory
中写入如下内容:
下面这个静态清单文件是 RHCE 考试中的基础,一旦这一题出错(例如在清单文件中没有正确地写入全部组和主机),后面很多题目都会被系统判断为错误。因此要格外认真地编写这个静态清单文件。
[dev] node1 [test] node2 [prod] node3 node4 [balancers] node5 [webservers:children] prod
注意:prod 本身就是一个主机组,因此,根据题目,prod 其实是 webservers 主机组的 children 主机组.
接着,题目要求我们创建名为 /home/greg/ansible/ansible.cfg
的配置文件,但是,该配置文件中内容很多,我们可以使用如下方法复制一份系统中当前已有的 cfg
配置文件,然后再进行修改即可:
cp -p /etc/ansible/ansible.cfg /home/greg/ansible/ansible.cfg
可以使用
ansible --version
命令查看 Ansible 默认的cfg
配置文件所在的位置,在返回结果的config file
参数后面跟的就是cfg
配置文件的具体位置,例如:config file = /home/greg/ansible/ansible.cfg
.
之后,我们需要对由上面的操作形成的 /home/greg/ansible/ansible.cfg
这个文件进行如下修改(由于要修改的地方比较多,在修改时可以借助 VIM 编辑器的搜索功能查找并快速定位到要修改的地方):
1. 设置主机清单文件
将 #inventory = /etc/ansible/hosts
修改为:
inventory = /home/greg/ansible/inventory
“inventory” 的英文意思是“库存,清单”。
2. 修改 playbook 中所使用的角色的位置
将 #roles_path = /etc/ansible/roles
修改为:
roles_path = /home/greg/ansible/roles
[1]. 上面的这两处修改是根据题目明确要求而做的,而下面的这几处修改则是为了保证 playbook 能够在受控节点上正常执行而做的;
[2]. 我们可以在本题中就创建角色目录/home/greg/ansible/roles
, 这个目录在后面的题目中会用到。
3. 设置在被控端执行 playbook 的用户身份
将 #remote_user = root
修改为:
remote_user = greg
4. 禁用主机密钥检查
将 #host_key_checking = False
修改为:
host_key_checking = False
5. 为受控端用户进行特权升级
将:
[privilege_escalation] #become=True #become_method=sudo #become_user=root #become_ask_pass=False
修改为:
[privilege_escalation] become=True become_method=sudo become_user=root become_ask_pass=False
做完上面这些配置之后,我们可以使用如下 Ansible 命令在所有受控主机上做一个 Ping 测试,如果返回的结果都是绿色的(如图 01 所示),则代表 Ansible 可以正常管理这些主机,本题也就成功完成了。
关于 Ansible 的返回结果所用的颜色以及对应的状态可以参考这篇文章:https://zhaokaifeng.com/?p=9061
Ansible 的
-m
参数用于调用指定的 Ansible 模块,默认使用的是 Command 模块。