红帽 RHCE8 认证考试:安装软件包

题目描述

创建一个名为 /home/greg/ansible/packages.ymlplaybook:

  • phpmariadb 软件包安装到 devtestprod 主机组中的主机上;
  • RPM Development Tools 软件包组安装到 dev 主机组中的主机上;
  • dev 主机组中主机上的所有软件包更新为最新版本。

详细解析

首先,按照要求创建一个 playbook:

vim /home/greg/ansible/packages.yml

接着,根据题目要求,我们需要在该 playbook 中写入如下三段内容:

第一段

phpmariadb 软件包安装到 devtestprod 主机组中的主机上,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 临时命令,查询一下在 devtestprod 主机组中的主机上是否已经安装了 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