RHCE认证题解

发布于:2025-08-03 ⋅ 阅读:(10) ⋅ 点赞:(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 下载即可

配置位置

所有配置均在workstation主机中完成!!!

start→ALL

  

  

或者通过ssh直接远程登陆:

1.安装并配置 Ansible

在控制节点 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/mycollection

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

配置:

=========================↓为练习环境配置,真实考试不用做======================

真实考试环境配置已经写好了,但模拟练习要去超级用户那复制模板:

👇不想下面这么麻烦可以直接:sudo cp /root/ansible-navigator.yml /home/devops/ansible/

 练习环境有问题(没有私钥),需要执行下面这一条解决,真实考试不需要执行下面这一条👇

=========================↑为练习环境配置,真实考试不用做======================

ansible配置文件读取优先级:当前目录>家目录>系统目录

当前目录:

家目录:

系统目录:

复制内容:

 

 

 

👾如果不提权的话被控主机就会以devops身份执行命令

 

检验测试:

测试提权控制主机:

列出清单列表:

。。。省略上半段

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

• 仓库为启用状态

配置:

设置vim工作模式,方便playbook的书写:

编辑playbook:

然后复制出仓库2:

运行playbook:

检验测试:

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

=================================↓简便法==================================

编写下载playbook:

安装:

检验测试:

=================================↑简便法==================================

方法二:

检验测试:

4.安装软件包

 创建名为 packages.yml 的 playbook:

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

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

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

配置:

 编辑playbook:

查看EXAMPLES帮助:

运行安装:

👆php 和 mariadb 软件包安装成功

👆动作用latest和present都可以

👾latest和present都可以表示安装,但只有latest能执行更新

运行playbook:

👆这个执行过程会比较漫长

检查测试:

👆换serverb/c都可以看看

5.使用角色

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

– 在所有受管节点上运行

– 使用 selinux 角色

– 将 SELinux 策略为 targeted 

– 将 SELinux 状态为 enforcing

配置:

编辑ansible配置文件去指定角色:

查询帮助:

编辑playbook:

=========================================================================

练习环境有问题,需做以下操作

报错处理--仅练习环境,然后再次执行剧本:
[devops@workstation ansible]$ ssh devops@servera
[devops@servera ~]$ sudo mv /usr/lib/python3.9/site-packages/OpenSSL/crypto.py{,.bak}
[devops@workstation ansible]$ ansible-navigator run -m stdout selinux.yml

=========================================================================

运行playbook:

检查测试:

题二(二题出一题来考)

**使用** **Timesync RHEL系统角色**

安装 RHEL 系统角色软件包,并创建符合以下条件的playbook

/home/devops/ansible/timesync.yml

1. 在所有受管节点上运行
2. 使用 timesync 角色
3. 配置该角色,以使用当前有效的 NTP 提供
4. 配置该角色,以使用时间服务器 classroom.example.com

配置:

查看帮助:

编辑playbook:

运行playbook:

测试:

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

配置:

安装:

检查测试:

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 主机组

配置:

捕捉事实变量:

编写j2模板:

编写动作:

检查角色:

编写playbook:

运行playbook:

检查测试:

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 配置

配置:

↑webservers不要写火墙,因为上一题已经做过

运行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

配置:

创建playbook:

运行playbook:

检查测试:

题二(考试时二出一)创建和使用逻辑卷

创建一个名为/home/devops/ansible/lv.yml 的playbook,它将在dev和prod上运行以执行下列任务

1. 创建符合以下要求的逻辑卷:
	逻辑卷创建在 research 卷组中
	逻辑卷名称为 data
	逻辑卷大小为 600MiB

2. 使用 ext4 文件系统格式化逻辑卷
3. 如果无法创建请求的逻辑卷大小,应显示错误消息
	Could not create logical volume of that size,并且应改为使用大小 400MiB。

4. 如果卷组research 不存在 ,应显示错误消息
	Volume group does not exist

5. 不要以任何方式挂载逻辑卷

====↓准备工作,5台虚拟机均没有对应的卷组和逻辑卷, 因此先准备分区和卷组(考试不需要)====

#server[a:b]卷组为800M,server[c:d]卷组为500M.

[devops@workstation ansible]$ vim lvm_pre.yml
- hosts: dev
  tasks:
    - name: Create partition for LVM
      community.general.parted:
        device: /dev/vdb
        number: 1
        flags: [ lvm ]
        state: present
        part_start: 1MiB
        part_end: 800MiB

    - name: create research vg
      community.general.lvg:
        vg: research
        pvs: /dev/vdb1

- hosts: prod
  tasks:
    - name: Create partition for LVM
      community.general.parted:
        device: /dev/vdb
        number: 1
        flags: [ lvm ]
        state: present
        part_start: 1MiB
        part_end: 600MiB
    - name: create research vg
      community.general.lvg:
        vg: research
        pvs: /dev/vdb1
       
       
 [devops@workstation ansible]$ ansible-navigator run -m stdout lvm_pre.yml

====↑准备工作,5台虚拟机均没有对应的卷组和逻辑卷, 因此先准备分区和卷组(考试不需要)====

配置:

---
- hosts: dev,prod
  tasks:
  - name: check vg
    ansible.builtin.debug:
      msg: Volume group does not exist
    when: "'research' not in ansible_lvm.vgs"

  - name: Create lvm
    block:
      - name: creat 600MiB
        community.general.lvol:
          vg: research
          lv: data
          size: 600
        when: "'research' in ansible_lvm.vgs"

    rescue:
      - name: creat 400MiB
        community.general.lvol:
          vg: research
          lv: data
          size: 400
        when: "'research' in ansible_lvm.vgs"

      - name: show error
        ansible.builtin.debug:
          msg: Could not create logical volume of that size
        when: "'research' in ansible_lvm.vgs"

    always:
      - name: ext4
        community.general.filesystem:
          fstype: ext4
          dev: /dev/research/data
        when: "'research' in ansible_lvm.vgs"

运行:

测试:

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

开桂简便法:

复制展示内容:

编写yml:

运行:

测试:

法二正常配置:

下载模板文件(在ansible目录下载):

提取事实变量:

用魔法变量.事实变量来获取IP、主机全名、主机简称:

根据题意创建playbook:

查看模板帮助:

运行playbook:

检查测试:

11.修改文件内容

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

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

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

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

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

法一不写when的易写法:

运行:

法二正常配置:

查看copy模块帮助:

运行playbook:

检查测试:

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 

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

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

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

    Red Hat Ansible

使用角色的简单配置法:

因为之前创建的apache角色已经有了安装httpd,开启服务,火墙放行的动作,我们可以直接使用

---
- name: create web server
  hosts: dev
  roles:
  - apache
  tasks:
  - name: Add webdev
    ansible.builtin.user:
      name: webdev

  - name: create /webdev
    ansible.builtin.file:
      path: /webdev
      owner: webdev
      group: root
      mode: '2775'
      state: directory
      setype: httpd_sys_content_t

  - name: Create link
    ansible.builtin.file:
      src: /webdev
      dest: /var/www/html/webdev
      state: link

  - name: write index
    ansible.builtin.copy:
      content: Red Hat Ansible
      dest: /var/www/html/webdev/index.html
      setype: httpd_sys_content_t

运行yml:

测试:

麻烦配置法:

查看user模块帮助:

创建playbook:

查看创建目录模块帮助:

查看下载模块帮助:

查看server模块帮助来启动服务:

查看copy模块帮助来导入文件内容:

查看火墙模块帮助:

playbook总览:

---
- name: create webdev
  hosts: dev
  tasks:
  - name: create user
    ansible.builtin.user:
      name: webdev

  - name: create webdev file
    ansible.builtin.file:
      path: /webdev
      owner: webdev
      group: root
      mode: '2775'
      state: directory
      setype: httpd_sys_content_t

  - name: Create link for webdev
    ansible.builtin.file:
      src: /webdev
      dest: /var/www/html/webdev
      state: link

  - name: install web server
    ansible.builtin.dnf:
      name: httpd
      state: latest

  - name: start web server
    ansible.builtin.service:
      name: httpd
      enabled: yes
      state: started

  - name: write for index.html
    ansible.builtin.copy:
      content: "Red Hat Ansible"
      dest: /var/www/html/webdev/index.html
      setype: httpd_sys_content_t

  - name: set firewalld for web
    ansible.posix.firewalld:
      service: http
      permanent: yes
      state: enabled
      immediate: yes

运行playbook:

测试:

13.生成硬件报告

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

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

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

• 磁盘设备 vda 的大小

• 磁盘设备 vdb 的大小

输出文件中的每一行含有一个 key=value 对 playbook 应当
来自http://materials.example.com/tools/hwreport.empty 模板文件,
并将它保存为 /root/hwreport.txt 

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

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

方法一:

 结合考前说明里的工具文件连接地址下载模板示例:

查看模板示例:

查看的帮助文档:

👆或者过滤devices

编辑yml:

👆hw_name根据下载的模板示例的键的开头填写

查看动作的模板:

运行:

测试:

方法二:

结合考前说明里的工具文件连接地址下载:

创建playbook:

查看copy模块帮助来复制下载的模板:

查看lineinfile模块帮助来替换文件内容:

👆这里inventoryhostname是指短名称,用inventory_hostname提取。如果是hostname是指全称,就要用_fqdn

👆注意变双引了

运行playbook:

检查测试:

14.创建 password vault

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

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

– pw_developer: Imadev 

• pw_manager: Imamgr 加解密密码为 redhat 

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

配置:

编辑密码本:

给密码本权限:

在ansible配置文件中指定密码本路径:

创建加密yml:

查看测试:

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

配置:

下载用户清单:

编辑yml:

查看组文档帮助:

查看用户帮助文档:

---
- name: create users1
  hosts: dev,test
  vars_files:
    - user_list.yml
    - locker.yml
  tasks:
  - name: create devops group
    ansible.builtin.group:
      name: devops
      state: present

  - name: create user from job_developer
    ansible.builtin.user:
      name: "{{ item.name }}"        #使用变量里name的变量值
      uid: "{{ item.uid }}"          #使用变量里uid的变量值
      groups: devops
      append: yes                    #因为是添加用户附属组,yes表示追加
      password: "{{ pw_developer | password_hash('sha512') }}" #变量里取密码然后哈希运算
    loop: "{{ users }}"              #遍历users里所有变量
    when: item.job == "developer"    #当条件满足时以上才执行

#以下复制上面做修改即可
- name: create users2
  hosts: prod
  vars_files:
    - user_list.yml
    - locker.yml
  tasks:
  - name: create opsmgr group
    ansible.builtin.group:
      name: opsmgr
      state: present

  - name: create user from job_manager
    ansible.builtin.user:
      name: "{{ item.name }}"
      uid: "{{ item.uid }}"
      groups: opsmgr
      append: yes
      password: "{{ pw_manager | password_hash('sha512') }}"
    loop: "{{ users }}"
    when: item.job == "manager"

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”

配置:

编辑yml:

查看用户帮助文档:

查看cron帮助文档:

查看命令绝对路径:

运行:

测试:


网站公告

今日签到

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