题目描述
创建一个名为 /home/greg/ansible/packages.yml
的 playbook
:
- 将
php
和mariadb
软件包安装到dev
、test
和prod
主机组中的主机上; - 将
RPM Development Tools
软件包组安装到dev
主机组中的主机上; - 将
dev
主机组中主机上的所有软件包更新为最新版本。
详细解析
首先,按照要求创建一个 playbook:
vim /home/greg/ansible/packages.yml
接着,根据题目要求,我们需要在该 playbook 中写入如下三段内容:
第一段
将 php
和 mariadb
软件包安装到 dev
、test
和 prod
主机组中的主机上,playbook 如下:
--- - name: hosts: dev,test,prod tasks: - name: yum: name: "{{ item }}" state: present loop: - php - mariadb
[1]. 在上面的 playbook 中,
yum
是 Ansible 模块的名称,yum
下面的name
是要安装的软件包的名称,state
用于指定要安装的软件包的状态,其中present
表示“稳定版”(如果题目没有指定要安装的软件包的状态,则安装稳定版即可);[2]. 上面的
yum name:
后面没有直接跟软件包名称,而是用了一个表示循环的{{ item }}
, 该循环会调用下面loop
中定义的列表。
第二段
将 RPM Development Tools
软件包组安装到 dev
主机组中的主机上:
- name: hosts: dev tasks: - name: yum: name: "@RPM Development Tools" state: present
由于
RPM Development Tools
是一个软件包组,因此,要在前面加上@
并将整体用双引号引起来。
第三段
将 dev
主机组中主机上的所有软件包更新为最新版本:
- name: hosts: dev tasks: - name: yum: name: "*" state: latest
yum: name:
后面跟的"*"
表示所有软件包,state: latest
表示最新版本。在 RHCE8 考试中,许多题目中编写的 playbook 都是可以像本题这样分段编写的,不同段之间一般会有些相同的部分,对于这样相同的部分,直接从上一个 playbook 中复制即可,这样既可以加快编写速度,也可以降低编写出错的可能性。
完整的 playbook 如下:
--- - name: hosts: dev,test,prod tasks: - name: yum: name: "{{ item }}" state: present loop: - php - mariadb - name: hosts: dev tasks: - name: yum: name: "@RPM Development Tools" state: present - name: hosts: dev tasks: - name: yum: name: "*" state: latest
编写完成 playbook 之后,执行如下命令即可运行该 playbook:
ansible-playbook packages.yml
一般情况下,如果执行结果没有红色报错即代表没问题。当然,我们也可以执行如下 Ansible 临时命令,查询一下在 dev
、test
和 prod
主机组中的主机上是否已经安装了 php
软件包:
ansible dev,test,prod -m command -a 'rpm -q php'
如果上述命令能够返回类似如下内容,则代表 php
软件包已经在目标主机上安装成功:
node4 | CHANGED | rc=0 >> php-7.2.11-1.module+el8+2561+1aca3413.x86_64 node2 | CHANGED | rc=0 >> php-7.2.11-1.module+el8+2561+1aca3413.x86_64 node3 | CHANGED | rc=0 >> php-7.2.11-1.module+el8+2561+1aca3413.x86_64 node1 | CHANGED | rc=0 >> php-7.2.11-1.module+el8+2561+1aca3413.x86_64