题目描述
创建一个名为 /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