RHCE模拟测试

发布于:2025-08-12 ⋅ 阅读:(19) ⋅ 点赞:(0)

考前说明

请勿更改 IP 地址。DNS 解析完整主机名,同时也解析短名称。


• 所有系统的 root 密码都是 redhat


• Ansible 控制节点上已创建用户账户 devops。可以使用 ssh 访问


• 所需的所有镜像保存在镜像仓库 utility.lab.example.com

  podman 可使用下述账号登录使用 

  用户:admin

  密码:redhat

  

• 所有工作文件应保存在控制节点上的 /home/devops/ansible 目录中,且归devops 所有


• devops 的默认 ansible-navigator 配置: ~devops/.ansible-navigator.yml 参考讲师提供的文件


• 练习中的防火墙默认关闭,SELinux 处于强制模式 file 目录提供一些额外文件,考试会正常提供


• 产品文档位置 http://materials.example.com/docs/


• 模拟环境中提供的工具文件已经提供,、

  连接地址:

  http://materials.example.com/tools

  通过 wget 下载即可

1.安装并配置 Ansible为devops用户配置免密私钥

在控制节点 workstation.lab.example.com 上安装和配置 Ansible:

– 安装所需的软件包

– 创建静态清单文件 /home/devops/ansible/ 要求如下:

– servera 是 dev 主机组的成员

– serverb 是 test 和 balancers 

– serverc 和 serverd 是 prod 主机组的成员

– prod 组是 webservers 主机组的成员


创建名为 /home/devops/ansible/ansible.cfg 的配置文件,要求如下:

– 主机清单文件为 /home/devops/ansible/inventory 

– 默认内容集合目录为 /home/devops/ansible/mycollections 

– 默认角色目录为 /home/devops/ansible/roles

测试环境配置

# 为devops用户配置免密私钥

#测试

#设置ansible-navigator运行环境

实验开始

#登录

#创建目录

#查看安装包具体信息

#安装ansible所需软件

#登录容器镜像仓库

#配置ansible,编写ansible配置文件

#生成工作清单

#测试

2.创建 yum 仓库

作为系统管理员,需在受管节点上安装软件。

• 创建 playbook /home/devops/ansible/yum_repo.yml,该 playbook 将在各个受管节点上

• 创建以下 yum 仓库:

    – 仓库 1:

        • 仓库的名称为 RH294_BASE

        • 描述为 RH294 base software

        • BaseURL 为  http://content.example.com/rhel9.0/x86_64/dvd/BaseOS

        • GPG 签名检查为启用状态

        • GPG 密钥 URL 为http://content.example.com/rhel9.0/x86_64/dvd/RPM-GPG-KEY-redhat-release

    • 仓库为启用状态

    – 仓库 2:

        • 仓库的名称为 RH294_STREAM

        • 描述为 RH294 stream software

        • BaseURL 为     http://content.example.com/rhel9.0/x86_64/dvd/AppStream

        • GPG 签名检查为启用状态

        • GPG 密钥 URL 为 http://content.example.com/rhel9.0/x86_64/dvd/RPM-GPG-KEY-redhat-release

        • 仓库为启用状态

实验示例:

#编写指定Playbook

最后那里写yum_repo.yml,作者搞错啦

#查看内容(辅助)

#编写内容

#测试

记得改一下划红线的地方

#出现这些算成功

3.安装 Collections

以 devops 身份,将以下 collections 从资源连接目录中安装到workstation.lab.example.com  

• redhat-rhel_system_roles-1.16.2.tar.gz 

• ansible-posix-1.4.0.tar.gz 

• community-general-4.3.0.tar.gz 

• 资源连接:

    http://materials.example.com/tools

集合应安装到默认集合目录 /home/devops/ansible/mycollection

实验示例:

#配置资源

#安装Collections

#查看collections

4.安装软件包

• 创建名为 packages.yml 的 playbook:

– 将 php 和 mariadb 软件包安装到 dev、test 和 prod 组中的主机上

– 将 RPM Development Tools 包组安装到 dev 组中的主机上

– 将 dev 组中主机上的所有软件包更新为最新版本

实验示例:

#1.编写packages.yml

#查看帮助

#2.packages.yml内容

#3.运行playbook

#测试:

5.1使用角色(二选一)

根据以下要求创建名为 selinux.yml 的 playbook:

– 在所有受管节点上运行

– 使用 selinux 角色

– 将 SELinux 策略为 targeted 

– 将 SELinux 状态为 enforcing

# 查看示例文件

#2.查看系统roles

# 添加角色路径

查看命令

进入此配置文件编写

#3.编写playbook selinux.yml

#4.运行playbook

#5.测试

5.2 使用** **Timesync RHEL系统角色(二选一):

/home/devops/ansible/timesync.yml:

1. 在所有受管节点上运行

2. 使用 timesync 角色

3. 配置该角色,以使用当前有效的 NTP 提供

4. 配置该角色,以使用时间服务器 classroom.example.com

#复制命令

#查帮助

# 编写yml文件

#运行

6.使用 Ansible Galaxy 安装角色

• 创建 /home/devops/ansible/roles/requirements.yaml 文件用以下载并安装角色到 /home/devops/ansible/roles/ 目录中

– 角色名:balancer,来自于 http://materials.example.com/tools/haproxy.tar 

– 角色名:phpinfo,来自于 http://materials.example.com/tools/phpinfo.tar

#1.编辑playbook requirements.yml

#2.playbook内容

#3.运行安装命令

#4.测试

7.创建和使用角色

根据下列要求,在 /home/devops/ansible/roles 中创建名为 apache 的角色:

– 安装 httpd 软件包,开机启动并立即运行

• 开启防火墙并允许 web 服务通信

• 模板文件 index.html.j2 用于创建/var/www/html/index.html,含有以下内容:

    Welcome to HOSTNAME on IPADDRESS,其中 HOSTNAME 和 IPADDRESS 来自于事实变量

• 创建名为 newrole.yml 的 playbook,并使用此角色

• 这个 playbook 运行于 webservers 主机组

实验示例:

#1.创建角色

#2.查看角色创建信息

#3.建立模板index.html

查看两个事实变量信息

#4.创建角色任务

#5.编写roles的playbook newrole.yml

#6.运行newrole.yml

#7.帮助查看方式

#8.测试

8.从 Ansible Galaxy 使用角色

创建名为 roles.yml 的 playbook,满足以下要求:

– Playbook 运行在 balancers 主机组上,并使用 balancer 角色。

– 这个角色为 webservers 主机组配置负载均衡 web 服务器配置完成后,

当访问 http://serverb.lab.example.com 将显示以下输出信息:

• Welcome to serverc.lab.example.com on 172.25.250.12 

• Welcome to serverd.lab.example.com on 172.25.250.13

• 这个 playbook 中另一个 play 使用 phpinfo 角色在 webservers 主机组上执行完

毕后,访问主机组内每台主机的/hello.php 显示以下信息:

– Hello World from FQDN 

• FQDN 来自于事实变量

• 页面同时显示每台受控主机的 PHP 配置

实验示例:

#查看文件辅助

#编写角色play文件 roles.yml

#运行playbook

#测试

9.创建和使用分区

根据下列要求,创建名为 partition.yml 的 playbook:

– playbook 中包含一个 play,该 play 在 balancers 主机组中的主机上运行

• 在设备 vdb 上创建单个主分区,编号为 1,大小为 1500 MiB 

• 使用 ext4 文件系统格式化分区

• 将文件系统永久挂载到 /newpart 

• 如果无法创建请求的分区大小,应显示错误消息

– Could not create partition of that size 

- 并且应改为使用大小 800 MiB 

• 如果设备 vdd 不存在,应显示错误消息

– Disk does not exist

#查看文件辅助

hosts: balancers:指定该 play 在名为 balancers 的主机组中的主机上运行,

tasks:后续跟着的是要在目标主机上执行的一系列任务列表。

  • name: check device vdb:任务的名称,用于标识这个任务是检查 vdb 设备是否存在。

  • ansible.builtin.debug:使用 debug 模块,功能是输出指定的消息。

  • msg: Disk does not exist:当满足 when 条件时,输出的错误消息内容,对应题目中 “如果设备 vdb 不存在,应显示错误消息 – Disk does not exist” 的要求。

  • when: ansible_facts['devices']['vdb'] is not defined:条件判断,当 ansible_facts(Ansible 收集的主机 facts 信息,包含设备等情况)中 devices 里的 vdb 设备未定义(即不存在)时,执行这个 debug 任务,输出对应提示。

  • block 部分:
    • name: Create a new primary partition with a size of 1500MiB:任务名称,表明尝试创建大小为 1500MiB 的主分区。
    • community.general.parted:使用 parted 模块(来自 community.general 集合),用于管理磁盘分区。
    • device: /dev/vdb:指定要操作的磁盘设备是 /dev/vdb
    • number: 1:分区编号为 1,即创建主分区编号 1 ,满足题目 “在设备 vdb 上创建单个主分区,编号为 1” 要求。
    • state: present:表示确保分区存在,这里就是要创建分区。
    • part_end: 1500MiB:指定分区大小为 1500MiB ,对应题目最初尝试创建 1500MiB 分区的要求。
    • when: ansible_facts['devices']['vdb'] is defined:条件,当 vdb 设备存在(已定义)时,才执行创建 1500MiB 分区的操作。

  • name: display err msg 和 ansible.builtin.debug 配合:输出错误消息 Could not create partition of that size,满足题目 “如果无法创建请求的分区大小,应显示错误消息 – Could not create partition of that size” 要求。

  • 接着第二个任务 name: Create a new primary partition with a size of 800MiB 及后续 community.general.parted 配置:在创建 1500MiB 分区失败后,改为尝试创建 800MiB 大小的主分区,part_end: 800MiB 指定新的分区大小,同样 when 条件确保在 vdb 设备存在时执行,满足题目 “并且应改为使用大小 800 MiB” 要求。

  • name:任务名称,说明是创建 ext4 文件系统相关操作。

  • community.general.filesystem:使用 filesystem 模块(来自 community.general 集合 ),用于在指定设备上创建文件系统。

  • fstype: ext4:指定要创建的文件系统类型是 ext4,满足题目 “使用 ext4 文件系统格式化分区” 要求。

  • dev: /dev/vdb1:指定要格式化的设备是 /dev/vdb1(即 vdb 设备上编号为 1 的分区 )。

  • when: ansible_facts['devices']['vdb'] is defined:条件,当 vdb 设备存在时,才执行格式化操作,因为设备都不存在的话,格式化也无意义。

  • name:任务描述,说明此任务是「检查并创建 /newpart 目录(若不存在)」。

  • ansible.builtin.file:Ansible 内置的 file 模块,用于管理文件 / 目录的状态(创建、删除、修改权限等)。

  • path: /newpart:指定要操作的路径,这里是准备作为挂载点的目录 /newpart

  • state: directory:告诉 file 模块,确保该路径是一个目录。如果目录不存在,会自动创建;若已存在则不做修改(幂等性)。

  • when 条件:仅当 ansible_facts 检测到 vdb 设备存在时,才执行此任务。避免设备不存在时,无意义地创建目录。

  • name:任务描述,说明此任务是「将 /dev/vdb1 挂载到 /newpart」。

  • ansible.posix.mount:Ansible posix 集合里的 mount 模块,专门用于管理文件系统挂载(支持写入 /etc/fstab 实现永久挂载)。

  • path: /newpart:指定挂载点,需与上一步创建的目录路径一致。

  • src: /dev/vdb1:指定要挂载的设备,即 vdb 磁盘的 1 号分区。

  • fstype: ext4:指定文件系统类型,需与分区实际格式(前面用 filesystem 模块格式化的 ext4)匹配。

  • state: mounted:让 mount 模块确保设备「已挂载」。它会做两件事:

    1. 执行 mount /dev/vdb1 /newpart 命令,临时挂载分区;

    2. 将挂载配置写入 /etc/fstab,实现永久挂载(系统重启后依然生效)。

  • when 条件:同样依赖 vdb 设备存在,保证挂载操作有意义。

总体代码

---
- hosts:  balancers
  tasks:
    - name: check device vdb
      ansible.builtin.debug:
        msg: Could not create partition of that size
      when: ansible_facts['devices']['vdb'] is not defined

    - name: create part
      block:
        - name: Create a new primary partition with a size of 1500MiB
          community.general.parted:
            device: /dev/vdb
            number: 1
            state: present
            part_end: 1500MiB
          when: ansible_facts['devices']['vdb'] is defined
     rescue:
        - name: display err msg
          ansible.builtin.debug:
            msg: Could not create partition of that size

        - name: Create a new primary partition with a size of 800MiB
          community.general.parted:
            device: /dev/vdb
            number: 1
            state: present
            part_end: 800MiB
          when: ansible_facts['devices']['vdb'] is defined

      always:
        - name: Create a ext4 filesystem on /dev/vdb1
          community.general.filesystem:
            fstype: ext4
            dev: /dev/vdb1
          when: ansible_facts['devices']['vdb'] is defined

        - name: Create a directory if it does not exist
          ansible.builtin.file:
            path: /newpart
            state: directory
          when: ansible_facts['devices']['vdb'] is defined

        - name: Mount vdb
          ansible.posix.mount:
            path: /newpart
            src:  /dev/vdb1
            fstype: ext4
            state: mounted
          when: ansible_facts['devices']['vdb'] is defined

#运行

#测试

10.生成主机文件

将 http://materials.example.com/tools/hosts.j2 模板文件拷贝到/home/devops/ansible 目录中完善此模板文件,用以生成受控节点的 /etc/myhosts 文件创建名为 hosts.yml 的playbook 对 dev 主机组使用此模板文件/etc/myhosts 文件内容最终如下:

127.0.0.1 localhost localhost.localdomain localhost4 

localhost4.localdomain4 

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 

172.25.250.10 servera.lab.example.com servera 

172.25.250.11 serverb.lab.example.com serverb 

172.25.250.12 serverc.lab.example.com serverc 

172.25.250.13 servera.lab.example.com serverd

实验示例:

#1.建立j2模板

#查看文件(辅助)

#2.建立playbook vim hosts.yml

#可以用这个查看复制一些内容

# vim hosts.yml内容

#3.运行playbook

#4.测试:

11.修改文件内容

创建名为 issue.yml 的 playbook,要求如下: 

– 此 playbook 运行到所有受控节点

• 此 playbook 覆盖/etc/issue 文件中的内容:

• 在 dev 主机组的主机中,内容是:Development 在 test 主机组的主机中,内容是:Test 

• 在 prod 主机组的主机中,内容是:Production

实验示例:

#查看,在此查看目录中查询这个

#进入此文件编写

#运行

#测试

12.创建 Web 内容目录

按照下方所述,创建名为 webcontent.yml 的 playbook:

– 该 playbook 在 dev 主机组中的受管节点上运行

– 创建目录 /webdev 所有者为 webdev 组

– 具有常规权限:owner=read+write+execute,

    group=read+write+execute,other=read+execute 

– 具有特殊权限:set group ID 

– 用软链接将 /var/www/html/webdev 链接到 /webdev 

– 创建文件 /webdev/index.html,内容为:Red Hat Ansible 

– 在 dev 主机组中主机上浏览此目录(例如

    http://servera.lab.example.com/webdev/index.html )将生成以下输出   Red Hat Ansible

实验示例:

#查看,在此查看目录中查询这个

#进入配置文件编写

#检测一下语法是否错误

#运行

#测试

13.生成硬件报告

创建名为 hwreport.yml 的 playbook,在所有受控主机上生成

/root/hwreport.txt 文件,内容包含: 

– 清单主机名称以 MB 表示的总内存大小 BIOS 版本

• 磁盘设备 vda 的大小

• 磁盘设备 vdb 的大小

• 输出文件中的每一行含有一个 key=value 对 playbook 应当来自

files/13/hwreport.empty 模板文件,并将它保存为 /root/hwreport.txt 

• 使用正确的值修改 /root/hwreport.txt 

• 如果硬件项不存在,相关的值应设为 NONE

#查看模板

方法一:

#创建hwreport.yml配置文件

  
---
- hosts: all
  vars:
    hw_all:
      - hw_name: HOST
        hw_cont: "{{ inventory_hostname | default('NONE',true) }}"
      - hw_name: MEMORY
        hw_cont: "{{ ansible_memtotal_mb | default('NONE',true) }}MB"
      - hw_name: BIOS
        hw_cont: "{{ ansible_bios_version | default('NONE',true) }}"
      - hw_name: DISK_SIZE_VDA
        hw_cont: "{{ ansible_devices.vda.size | default('NONE',true) }}"
      - hw_name: DISK_SIZE_VDB
        hw_cont: "{{ ansible_devices.vdb.size | default('NONE',true) }}"
  tasks:
    - name: one
      ansible.builtin.get_url:
        url: http://materials.example.com/tools/hwreport.empty
        dest: /root/hwreport.txt
    - name: two
      ansible.builtin.lineinfile:
        path: /root/hwreport.txt
        regexp: "^{{ item.hw_name }}"
        line: "{{ item.hw_name }}={{ item.hw_cont }}"
      loop: "{{ hw_all }}"

#测试(可测试单个或者所有)

单个:

所有:

测试结果太多,可以自行查看

方法二:

---
- name: create display host
  hosts:  all
  tasks:
    - name: create file
      ansible.builtin.get_url:
        url: http://materials.example.com/tools/hwreport.empty
        dest: /root/hwreport.txt

    - name: HOST
      ansible.builtin.lineinfile:
        path: /root/hwreport.txt
        regexp: '^HOST='
        line: 'HOST = {{ inventory_hostname }}'

    - name: MEMORY
      ansible.builtin.lineinfile:
        path: /root/hwreport.txt
        regexp: '^MEMORY='
        line: 'MEMORY = {{ ansible_memtotal_mb }}MB'

    - name: BIOS
      ansible.builtin.lineinfile:
        path: /root/hwreport.txt
        regexp: '^BIOS='
        line: 'BIOS = {{ ansible_version }}'

    - name: DEVICE VDA
      ansible.builtin.lineinfile:
        path: /root/hwreport.txt
        regexp: '^VDA='
        line: "VDA = {{ ansible_devices.vda.size | default('NONE') }}"

    - name: DEVICE VDB
      ansible.builtin.lineinfile:
        path: /root/hwreport.txt
        regexp: '^VDB='
        line: "VDB = {{ ansible_devices.vdb.size | default('NONE') }}"

#运行跟测试跟方法一一样

14.创建 password vault

创建一个名为 locker.yml 的 ansible vault 文件存储用户密码:

• Vault 文件中含有两个变量,名称如下:

– pw_developer: Imadev 

• pw_manager: Imamgr 加解密密码为 redhat 

• 密码存储在 /home/devops/ansible/secret.txt 中。

实验示例:

#输入密码

#修改权限

#查看

#进入此配置文件编写

#在进入配置文件编写

#测试

15.创建用户帐户

需要创建的用户账户清单来自于 http://materials.example.com/tools/user_list.yml,请拷贝到/home/devops/ansible/中

• 配合上一题的 locker.yml,创建名为 users.yml 的 playbook,要求如下:

– 用户的 job description 为 developer 的用户,创建到 dev 和 test 主机组

• 中,用户密码来自于 pw_developer 变量,用户的附属组是 devops 

• 用户的 job description 为 manager 的用户,创建到 prod 主机组中,用户密

• 码来自于 pw_manager 变量,用户的附属组是 opsmgr 

• 用户密码使用 SHA512 hash

实验示例:

#下载安装

#进入配置文件查看

#在进入此配置文件编写内容

#全部代码如下

#运行

16.更新 Ansible 库的密钥

• 请为 expense.yml 文件修改 vault 密码,要求如下:

– 请将 http://materials.example.com/tools/expense.yml 文件保存到

  /home/devops/ansible/expense.yml 

• 当前密码为 ibmibm 

• 新密码为 redhatredhat

实验示例:

#安装

#修改密码

#查看密码是否修改完成

17.配置 cron 作业

在所有受管节点上创建名为 /home/devops/ansible/cron.yml 的 Playbook,为natasha 用户创建 cron 作业:

• 用户 natasha 每隔 2 分钟执行 logger “RH294 in progress”

#查看模板

#进入配置文件配置

---
- name: create con for natasha
  hosts:  all
  tasks:
    - name: create user natasha
      ansible.builtin.user:
        name: natasha
        state: present

    - name: create cron for natasha
      ansible.builtin.cron:
        name: "natasha cronjob"
        minute: "*/2"
        hour: "*"
        day:  "*"
        month:  "*"
        weekday:  "*"
        user: natasha
        job: ' logger “RH294 in progress” '

#运行

#检验


网站公告

今日签到

点亮在社区的每一天
去签到