RHCE认证

重要配置信息

在考试期间,除了您就坐位置的台式机之外,还将使用多个虚拟系统。您不具有台式机系统的 root 访问权,但具有对虚拟系统的完整 root 访问权。

系统信息

在本考试期间,您将操作下列虚拟系统:

系统 IP 地址 Ansible 角色
control 172.25.250.254 ansible control node
node1 172.25.250.9 ansible managed node
node2 172.25.250.10 ansible managed node
node3 172.25.250.11 ansible managed node
node4 172.25.250.12 ansible managed node
node5 172.25.250.13 ansible managed node

这些系统的 IP 地址采用静态设置。请勿更改这些设置。

主机名称解析已配置为解析上方列出的完全限定主机名,同时也解析主机短名称。

帐户信息

所有系统的 root 密码是 flectrag。

请勿更改 root 密码。除非另有指定,否则这将是用于访问其他系统和服务的密码。此外,除非另有指定,否则此密码也应用于您创建的所有帐户,或者任何需要设置密码的服务。

为方便起见,所有系统上已预装了 SSH 密钥,允许在不输入密码的前提下通过 SSH 进行 root 访问。请勿对系统上的 root SSH 配置文件进行任何修改。

Ansible 控制节点上已创建了用户帐户 greg。此帐户预装了 SSH 密钥,允许在 Ansible 控制节点和各个 Ansible 受管节点之间进行 SSH 登录。请勿对系统上的 greg SSH 配置文件进行任何修改。您可以从 root 帐户使用 su 访问此用户帐户。

重要信息

除非另有指定,否则您的所有工作(包括 Ansible playbook、配置文件和主机清单等)应当保存在控制节点上的目录 /home/greg/ansible 中,并且应当归 greg 用户所有。所有 Ansible 相关的命令应当由 greg 用户从 Ansible 控制节点上的这个目录运行。

其他信息

一些考试项目可能需要修改 Ansible 主机清单。您要负责确保所有以前的清单组和项目保留下来,与任何其他更改共存。您还要有确保清单中所有默认的组和主机保留您进行的任何更改。

考试系统上的防火墙默认为不启用,SELinux则处于强制模式。

如果需要安装其他软件,您的物理系统和 Ansible 控制节点可能已设置为指向 content 上的下述存储库:

  • http://content/rhel8.0/x86_64/dvd/BaseOS
  • http://content/rhel8.0/x86_64/dvd/AppStream

一些项目需要额外的文件,这些文件已在以下位置提供:

  • http://materials

产品文档可从以下位置找到:

  • http://materials/docs

其他资源也进行了配置,供您在考试期间使用。关于这些资源的具体信息将在需要这些资源的项目中提供。

重要信息
请注意,在评分之前,您的 Ansible 受管节点系统将重置为考试开始时的初始状态,您编写的 Ansible playbook 将通过以 greg 用户身份从控制节点上的目录 /home/greg/ansible 目录运行来应用。在 playbook 运行后,系统会对您的受管节点进行评估,以判断它们是否按照规定进行了配置。

第一题:安装和配置 Ansible

安装和配置Ansible

按照下方所述,在控制节点 control 上安装和配置 Ansible:

  • 安装所需的软件包
  • 创建名为 /home/greg/ansible/inventory 的静态清单文件,以满足以下要求:
  • node1 是 dev 主机组的成员
  • node2 是 test 主机组的成员
  • node3 和 node4 是 prod 主机组的成员
  • node5 是 balancers 主机组的成员
  • prod 组是 webservers 主机组的成员
  • 创建名为 /home/greg/ansible/ansible.cfg 的配置文件,以满足以下要求:
  • 主机清单文件为 /home/greg/ansible/inventory
  • playbook 中使用的角色的位置包括 /home/greg/ansible/roles

第一步

# 通过远程连接greg用户进入控制节点control
[kiosk@foundation0 ~]$ ssh greg@control
greg@control's password:
Activate the web console with: systemctl enable --now cockpit.socketLast login: Fri Nov 11 15:11:37 2022 from 172.25.250.250
[greg@control ~]$

第二步

# 安装ansible软件包
[greg@control ~]$ sudo yum -y install ansible# 检查软件是否安装成功
[greg@control ~]$ ansible --version
ansible 2.8.0config file = /etc/ansible/ansible.cfgconfigured module search path = ['/home/greg/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python3.6/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 3.6.8 (default, Apr  3 2019, 17:26:03) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]

第三步

# 创建角色路径,并进入ansible目录
[greg@control ~]$ mkdir -p /home/greg/ansible/roles
[greg@control ~]$ cd ansible/
[greg@control ansible]$ # 编辑清单文件
[greg@control ~]$ vim /home/greg/ansible/inventory
[dev]
node1[test]
node2[prod]
node3
node4[balancers]
node5[webservers:children]
prod

第四步

# 安装完ansible会有一个默认的配置文件,拷贝到题中指定目录进行修改
[greg@control ~]$ cp /etc/ansible/ansible.cfg /home/greg/ansible/ansible.cfg
[greg@control ~]$ vim /home/greg/ansible/ansible.cfg
[defaults]
inventory = /home/greg/ansible/inventory ## 首先找到inventory,改成题中指定的目录
roles_path = /home/greg/ansible/roles ## 修改角色目录为指定目录
host_key_checking = False  ## 关掉主机key检查
remote_user = greg  ## 更改远端执行用户为题目中指定的用户,这里时greg,考试时随机应变
## 找到[privilege_escalation]标签和这些become,把下面四行注释去掉
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

第五步

# 检查
[greg@control ansible]$ ansible-inventory --graph
@all:|--@balancers:|  |--node5|--@dev:|  |--node1|--@test:|  |--node2|--@ungrouped:|--@webservers:|  |--@prod:|  |  |--node3|  |  |--node4
[greg@control ansible]$ ansible all -m ping -o
node3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"}
node2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"}
node5 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"}
node4 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"}
node1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"}

第二题:创建和运行 Ansible 临时命令

创建和运行 Ansible 临时命令

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

请按照正文所述,创建一个名为 /home/greg/ansible/adhoc.sh 的 shell 脚本,该脚本将使用 Ansible 临时命令在各个受管节点上安装 yum 存储库:

存储库1:

  • 存储库的名称为 EX294_BASE
  • 描述为 EX294 base software
  • 基础 URL 为 http://content/rhel8.0/x86_64/dvd/BaseOS
  • GPG 签名检查为启用状态
  • GPG 密钥 URL 为 http://content/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release
  • 存储库为启用状态

存储库2:

  • 存储库的名称为 EX294_STREAM
  • 描述为 EX294 stream software
  • 基础 URL 为 http://content/rhel8.0/x86_64/dvd/AppStream
  • GPG 签名检查为启用状态
  • GPG 密钥 URL 为 http://content/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release
  • 存储库为启用状态

第一步

# ansible-doc查询文档
[greg@control ansible]$ ansible-doc -l | grep yum
yum                                                    Manages packages with the `yum' package manager
yum_repository                                         Add or remove YUM repositories

第二步

# 创建shell脚本文件
[greg@control ansible]$ vim /home/greg/ansible/adhoc.sh#!/bin/bash
ansible all -m yum_repository -a "name=EX294_BASE description='EX294 base software' baseurl=http://content/rhel8.0/x86_64/dvd/BaseOS gpgcheck=yes gpgkey=http://content/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release enabled=yes"
ansible all -m yum_repository -a "name=EX294_STREAM description='EX294 stream software' baseurl=http://content/rhel8.0/x86_64/dvd/AppStream gpgcheck=yes gpgkey=http://content/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release enabled=yes"

第三步

# shell脚本文件添加执行权限,并运行
[greg@control ansible]$ chmod +x /home/greg/ansible/adhoc.sh
[greg@control ansible]$ /home/greg/ansible/adhoc.sh

第四步

# 测试,验证
[greg@control ansible]$ ansible all -a 'yum repolist'
...

第三题:安装软件包

安装软件包

创建一个名为 /home/greg/ansible/packages.yml 的 playbook :

  • 将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上
  • 将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上
  • 将 dev 主机组中主机上的所有软件包更新为最新版本

第一步

# 设置行号显示,设置Tab格式
[greg@control ansible]$ vim ~/.vimrc
set number ts=2 sw=2 et

第二步

# 创建playbook,编写playbook
[greg@control ansible]$ vim /home/greg/ansible/packages.yml
---
- name: 安装软件包1hosts: dev,test,prodtasks: - name: ensure a list of packages installedyum:name: "{{ packages }}"vars:packages:- php- mariadb  - name: 安装软件包2hosts: dev,test,prodtasks: - name: install the package groupyum:name: "@RPM Development Tools"state: present- name: upgrade all packagesyum:name: '*'state: latest

第四步

# 执行playbook
[greg@control ansible]$ ansible-playbook /home/greg/ansible/packages.yml

第五步

# 验证
[greg@control ansible]$ ansible dev,test,prod -a "rpm -q php mariadb"
[greg@control ansible]$ ansible dev -a "yum grouplist"
[greg@control ansible]$ ansible dev -a "yum update"

第四题:使用 RHEL 系统角色(NEW)

使用 RHEL 系统角色

安装 RHEL 系统角色软件包,并创建符合以下条件的 playbook /home/greg/ansible/selinux.yml :

  • 在所有受管节点上运行
  • 使用 selinux 角色
  • 配置该角色,配置被管理节点的 selinux 为 enforcing

第一步

# 搜索软件包
[greg@control ansible]$ yum search role
Last metadata expiration check: 1:39:45 ago on Tue 15 Nov 2022 10:03:09 AM GMT.
============================================ Name & Summary Matched: role ============================================
policycoreutils-newrole.x86_64 : The newrole application for RBAC/MLS
================================================= Name Matched: role =================================================
rhel-system-roles.noarch : Set of interfaces for unified system management
=============================================== Summary Matched: role ================================================
ansible-freeipa.noarch : Roles and playbooks to deploy FreeIPA servers, replicas and clients

第二步

# 安装角色软件包
[greg@control ansible]$ sudo yum -y install rhel-system-roles.noarch

第三步

# 查看角色路径,角色路径放到配置文件
[greg@control ansible]$ rpm -ql rhel-system-roles.noarch
/usr/share/ansible/roles
...[greg@control ansible]$ vim ansible.cfg
roles_path    = /home/greg/ansible/roles:/usr/share/ansible/roles

第四步

# 查找配置文件样例,复制样例到playbook,修改playbook
[greg@control ansible]$ rpm -ql rhel-system-roles.noarch | grep example
/usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml[greg@control ansible]$ cp /usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml /home/greg/ansible/selinux.yml
[greg@control ansible]$ vim /home/greg/ansible/selinux.yml
---
- hosts: allvars:selinux_policy: targetedselinux_state: enforcing# prepare prerequisites which are used in this playbooktasks:- name: execute the role and catch errorsblock:- include_role:name: rhel-system-roles.selinuxrescue:# Fail if failed for a different reason than selinux_reboot_required.- name: handle errorsfail:msg: "role failed"when: not selinux_reboot_required- name: restart managed hostshell: sleep 2 && shutdown -r now "Ansible updates triggered"async: 1poll: 0ignore_errors: true- name: wait for managed host to come backwait_for_connection:delay: 10timeout: 300- name: reapply the roleinclude_role:name: rhel-system-roles.selinux

第五步

# 执行playbook
[greg@control ansible]$ ansible-playbook selinux.yml

第六步

# 验证
[greg@control ansible]$ ansible all -a "grep ^SELINUX /etc/selinux/config"
node4 | CHANGED | rc=0 >>
SELINUX=enforcing
SELINUXTYPE=targeted
...

第四题:使用 RHEL 系统角色(OLD)

使用 RHEL 系统角色

安装 RHEL 系统角色软件包,并创建符合以下条件的 playbook /home/greg/ansible/timesync.yml :

  • 在所有受管节点上运行
  • 使用 timesync 角色
  • 配置该角色,以使用当前有效的 NTP 提供商
  • 配置该角色,以使用时间服务器 172.25.254.254
  • 配置该角色,以启用 iburst 参数

第一步

# 搜索软件包
[greg@control ansible]$ yum search role
Last metadata expiration check: 1:39:45 ago on Tue 15 Nov 2022 10:03:09 AM GMT.
============================================ Name & Summary Matched: role ============================================
policycoreutils-newrole.x86_64 : The newrole application for RBAC/MLS
================================================= Name Matched: role =================================================
rhel-system-roles.noarch : Set of interfaces for unified system management
=============================================== Summary Matched: role ================================================
ansible-freeipa.noarch : Roles and playbooks to deploy FreeIPA servers, replicas and clients

第二步

# 安装角色软件包
[greg@control ansible]$ sudo yum -y install rhel-system-roles.noarch

第三步

# 查看角色路径,角色路径放到配置文件
[greg@control ansible]$ rpm -ql rhel-system-roles.noarch
/usr/share/ansible/roles
...[greg@control ansible]$ vim ansible.cfg
roles_path    = /home/greg/ansible/roles:/usr/share/ansible/roles

第四步

# 查找配置文件样例,复制样例到playbook,并修改playbook
[greg@control ansible]$ rpm -ql rhel-system-roles.noarch
/usr/share/doc/rhel-system-roles/timesync/example-timesync-playbook.yml[greg@control ansible]$ cp /usr/share/doc/rhel-system-roles/timesync/example-timesync-playbook.yml /home/greg/ansible/timesync.yml
[greg@control ansible]$ vim /home/greg/ansible/timesync.yml
---
- hosts: allvars:timesync_ntp_servers:- hostname: 172.25.254.254iburst: yesroles:- rhel-system-roles.timesync

第五步

# 运行playbook
[greg@control ansible]$ ansible-playbook timesync.yml

第六步

# 验证
[greg@control ansible]$ ansible all -m shell -a 'chronyc sources'

第五题:使用 Ansible Galaxy 安装角色

使用 Ansible Galaxy 安装角色

使用 Ansible Galaxy 和要求文件 /home/greg/ansible/roles/requirements.yml 。从以下 URL 下载角色并安装到 /home/greg/ansible/roles :

  • http://materials/haproxy.tar 此角色的名称应当为 balancer
  • http://materials/phpinfo.tar 此角色的名称应当为 phpinfo

第一步

# 编写playbook文件
[greg@control ansible]$ vim /home/greg/ansible/roles/requirements.yml
---
- src: http://materials/haproxy.tarname: balancer
- src: http://materials/phpinfo.tarname: phpinfo

第二步

# 安装角色
[greg@control ansible]$ ansible-galaxy role install -r  /home/greg/ansible/roles/requirements.yml

第三步

# 验证
[greg@control ansible]$ ansible-galaxy list
# /home/greg/ansible/roles
- balancer, (unknown version)
- phpinfo, (unknown version)

第六题:创建和使用角色

创建和使用角色

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

  • httpd 软件包已安装,设为在系统启动时启用并启动
  • 防火墙已启用并正在运行,并使用允许访问 Web 服务器的规则
  • 模板文件 index.html.j2 已存在,用于创建具有以下输出的文件 /var/www/html/index.html :
Welcome to HOSTNAME on IPADDRESS

其中,HOSTNAME 是受管节点的完全限定域名,IPADDRESS 则是受管节点的 IP 地址。

创建一个名为 /home/greg/ansible/apache.yml 的 playbook:

  • 该 play 在 webservers 主机组中的主机上运行并将使用 apache 角色

第一步

# 进入角色路径,创建名为 apache 的角色
[greg@control ansible]$ cd roles/
[greg@control roles]$ ansible-galaxy init apache
- Role apache was created successfully

第二步

# 编写任务tasks文件
[greg@control roles]$ vim apache/tasks/main.yml
---
# tasks file for apache
- name: ensure a list of packages installedyum:name: "{{ packages }}"vars:packages:- httpd- firewalld- name: Start service httpd, if not startedservice:name: httpdstate: startedenabled: yes- name: Start service firewalld, if not startedservice:name: firewalldstate: startedenabled: yes- firewalld:service: httppermanent: yesstate: enabledimmediate: yes- name: Template a file template:src: index.html.j2dest: /var/www/html/index.html

第三步

# 编写模板文件
[greg@control roles]$ vim apache/templates/index.html.j2
Welcome to {{ ansible_fqdn }} on {{ ansible_default_ipv4.address }}

第四步

# 回到ansible路径,编写playbook文件
[greg@control roles]$ cd ..
[greg@control ansible]$ vim /home/greg/ansible/apache.yml---
- name: 创建和使用角色hosts: webserversroles:- apache

第五步

# 执行playbook文件
[greg@control ansible]$ ansible-playbook /home/greg/ansible/apache.yml

第六步

# 验证
[greg@control ansible]$ curl node3
Welcome to node3.lab.example.com on 172.25.250.11
[greg@control ansible]$ curl node4
Welcome to node4.lab.example.com on 172.25.250.12

第七题:从 Ansible Galaxy 使用角色

从 Ansible Galaxy 使用角色

根据下列要求,创建一个名为 /home/greg/ansible/roles.yml 的 playbook :

  • playbook 中包含一个 play, 该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色。

  • 此角色配置一项服务,以在 webservers 主机组中的主机之间平衡 Web 服务器请求的负载。

  • 浏览到 balancers 主机组中的主机(例如 http://172.25.250.13 )将生成以下输出:

    Welcome to node3.lab.example.com on 172.25.250.11
    
  • 重新加载浏览器将从另一 Web 服务器生成输出:

    Welcome to node4.lab.example.com on 172.25.250.12
    
  • playbook 中包含一个 play, 该 play 在 webservers 主机组中的主机上运行并将使用 phpinfo 角色。

  • 请通过 URL /hello.php 浏览到 webservers 主机组中的主机将生成以下输出:

    Hello PHP World from FQDN
    
  • 其中,FQDN 是主机的完全限定名称。

    Hello PHP World from node3.lab.example.com
    

另外还有 PHP 配置的各种详细信息,如安装的 PHP 版本等。

  • 同样,浏览到 http://172.25.250.12/hello.php 会生成以下输出:
Hello PHP World from node4.lab.example.com

另外还有 PHP 配置的各种详细信息,如安装的 PHP 版本等。

第一步

# 编写playbook
[greg@control ansible]$ vim /home/greg/ansible/roles.yml

第二步

# 执行playbook
---
- name: 从 Ansible Galaxy 使用角色1hosts: webserversroles:- phpinfo-
- name: 从 Ansible Galaxy 使用角色2hosts: balancersroles:- balancer

第三步

验证

第八题:创建和使用分区(NEW)

创建和使用分区

创建一个名为 /home/greg/ansible/partition.yml 的 playbook ,它将在所有受管节点上创建分区:

  • 在vdb创建一个1500M主分区,分区号1,并格式化ext4

  • prod组将分区永久挂载到/data

  • 如果磁盘空间不够,

  • 给出提示信息Could not create partition of that size

  • 创建800MiB分区

  • 如果 vdb不存在,则给出提示信息this disk is not exist

第一步

# 创建playbook
[greg@control ansible]$ vim /home/greg/ansible/partition.yml
---
- name: 创建和使用分区hosts: all tasks:- name: Handle the errorblock:- name: Create a new primary partitionparted:device: /dev/vdbnumber: 1state: presentpart_end: 1500MiB- name: Create a ext4 filesystem filesystem:fstype: ext4dev: /dev/vdb1- name: Mount mount:path: /datasrc: /dev/vdb1fstype: ext4state: mountedwhen: inventory_hostname in groups.prodrescue:- debug:msg: Could not create partition of that size- name: Create a new primary partitionparted:device: /dev/vdbnumber: 1state: presentpart_end: 800MiBwhen: ansible_devices.vdb is defined- debug:msg: this disk is not existwhen: ansible_devices.vdb is undefined

第二步

# 执行playbook
[greg@control ansible]$ ansible-playbook partition.yml

第三步

# 验证
[greg@control ansible]$ ansible all -a 'lsblk'

第八题:创建和使用逻辑卷(OLD)

创建和使用逻辑卷

创建一个名为 /home/greg/ansible/lv.yml 的 playbook ,它将在所有受管节点上运行以执行下列任务:

  • 创建符合以下要求的逻辑卷:

  • 逻辑卷创建在 research 卷组中

  • 逻辑卷名称为 data

  • 逻辑卷大小为 1500 MiB

  • 使用 ext4 文件系统格式化逻辑卷

  • 如果无法创建请求的逻辑卷大小,应显示错误信息

Could not create logical volume of that size

,并且应改为使用大小 800 MiB。

  • 如果卷组 research 不存在,应显示错误信息
Volume group done not exist
  • 不要以任何方式挂载逻辑卷

第一步

# 创建playbook
[greg@control ansible]$ vim /home/greg/ansible/lv.yml
---
- name: 创建和使用逻辑卷hosts: all tasks:- block:- name: Create a logical volumelvol:vg: researchlv: datasize: 1500- name: Create a ext4 filesystemfilesystem:fstype: ext4dev: /dev/research/datarescue:- debug:msg: Could not create logical volume of that size- name: Create a logical volumelvol:vg: researchlv: datasize: 800 when: ansible_lvm.vgs.research is defined- debug:msg: Volume group done not existwhen: ansible_lvm.vgs.research is not defined

第二步

# 执行playbook
[greg@control ansible]$ ansible-playbook lv.yml

第三步

# 验证
[greg@control ansible]$ ansible all -a "lvs"

第九题:生成主机文件

生成主机文件

  • 将一个初始模板文件从 http://materials/hosts.j2 下载到 /home/greg/ansible
  • 完成该模板,以便用它生成以下文件:针对每个清单主机包含一行内容,其格式与 /etc/hosts 相同
  • 创建名为 /home/greg/ansible/hosts.yml 的 playbook ,它将使用此模板在 dev 主机组中的主机上生成文件 /etc/myhosts

该 playbook 运行后, dev 主机组中主机上的文件 /etc/myhosts 应针对每个受管主机包含一行内容:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6172.25.250.9    node1.lab.example.com node1172.25.250.10   node2.lab.example.com node2172.25.250.11   node3.lab.example.com node3172.25.250.12   node4.lab.example.com node4172.25.250.13   node5.lab.example.com node5

注:清单主机名称的显示顺序不重要。

第一步

# 下载初始模板文件
[greg@control ansible]$ wget http://materials/hosts.j2

第二步

# 创建playbook
[greg@control ansible]$ vim /home/greg/ansible/hosts.yml
---
- name: 生成主机文件hosts: all tasks:- name: Template a file to /etc/myhoststemplate:src: /home/greg/ansible/hosts.j2dest: /etc/myhostswhen: inventory_hostname in groups.dev

第三步

# 编写hosts.j2文件
[greg@control ansible]$ vim hosts.j2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for host in groups['all'] %}
{{ hostvars[host]['ansible_facts']['default_ipv4']['address'] }} {{ hostvars[host]['ansible_facts']['nodename'] }} {{ hostvars[host]['ansible_facts']['hostname'] }}
{% endfor %}

第四步

# 执行playbook
[greg@control ansible]$ ansible-playbook hosts.yml

第五步

# 验证
[greg@control ansible]$ ansible dev -a "cat /etc/myhosts"

第十题:修改文件内容

修改文件内容

按照下方所述,创建一个名为 /home/greg/ansible/issue.yml 的 playbook :

  • 该 playbook 将在所有清单主机上运行

  • 该 playbook 会将 /etc/issue 的内容替换为下方所示的一行文本:

  • 在 dev 主机组中的主机上,这行文本显示 为:Development

  • 在 test 主机组中的主机上,这行文本显示 为:Test

  • 在 prod 主机组中的主机上,这行文本显示 为:Production

第一步

# 创建playbook,并编写playbook
[greg@control ansible]$ vim /home/greg/ansible/issue.yml
---
- name: 修改文件内容hosts: alltasks:- name: Copy using inline content 1copy:content: 'Development'dest: /etc/issuewhen: inventory_hostname in groups.dev- name: Copy using inline content 2copy:content: 'Test'dest: /etc/issuewhen: inventory_hostname in groups.test- name: Copy using inline content 3copy:content: 'Production'dest: /etc/issuewhen: inventory_hostname in groups.prod

第二步

# 执行playbook
[greg@control ansible]$ ansible-playbook issue.yml

第三步

# 验证
[greg@control ansible]$ ansible all -a "cat  /etc/issue"

第十一题:创建 Web 内容目录

创建 Web 内容目录

按照下方所述,创建一个名为 /home/greg/ansible/webcontent.yml 的 playbook :

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

  • 创建符合下列要求的目录 /webdev :

  • 所有者为 webdev 组

  • 具有常规权限:owner=read+write+execute , group=read+write+execute ,other=read+execute

  • 具有特殊权限:设置组 ID

  • 用符号链接将 /var/www/html/webdev 链接到 /webdev

  • 创建文件 /webdev/index.html ,其中包含如下所示的单行文件: Development

  • 在 dev 主机组中主机上浏览此目录(例如 http://172.25.250.9/webdev/ )将生成以下输出:

Development

第一步

# 检查webdev 组是否存在
[greg@control ansible]$ ansible dev -a "grep webdev /etc/group"
node1 | CHANGED | rc=0 >>
webdev:x:1003:

第二步

# 创建playbook
[greg@control ansible]$ vim /home/greg/ansible/webcontent.yml
---
- name: 创建 Web 内容目录hosts: devtasks:- name: Create a directory if it does not existfile:path: /webdevstate: directorygroup: webdevmode: u=rwx,g=rwxs,o=rx- name: Create a symbolic linkfile:src: /webdevdest: /var/www/html/webdevstate: link- name: Copy using inline contentcopy:content: 'Development'dest: /webdev/index.htmlsetype: httpd_sys_content_t- name: Start service httpd, if not startedservice:name: httpdstate: startedenabled: yes

第三步

# 执行playbook
[greg@control ansible]$ ansible-playbook webcontent.yml

第四步

验证

第十二题:生成硬件报告

生成硬件报告

创建一个名为 /home/greg/ansible/hwreport.yml 的 playbook ,它将在所有受管节点上生成含有以下信息的输出文件 /root/hwreport.txt :

  • 清单主机名称
  • 以 MB 表示的总内存大小
  • BIOS 版本
  • 磁盘设备 vda 的大小
  • 磁盘设备 vdb 的大小
  • 输出文件中的每一行含有一个 key=value 对。

您的 playbook 应当:

  • 从 http://materials/hwreport.empty 下载文件,并将它保存为 /root/hwreport.txt
  • 使用正确的值改为 /root/hwreport.txt
  • 如果硬件项不存在,相关的值应设为 NONE

第一步

# 创建playbook
[greg@control ansible]$ vim /home/greg/ansible/hwreport.yml

第二步

# 执行playbook
[greg@control ansible]$ ansible-playbook hwreport.yml
---
- name: 生成硬件报告hosts: all tasks:- name: Download foo.confget_url:url: http://materials/hwreport.emptydest: /root/hwreport.txt- name: Ensure 1lineinfile:path: /root/hwreport.txtregexp: '^HOST='line: HOST={{ inventory_hostname }}- name: Ensure 2lineinfile:path: /root/hwreport.txtregexp: '^MEMORY='line: MEMORY={{ ansible_memtotal_mb }}- name: Ensure 3lineinfile:path: /root/hwreport.txtregexp: '^BIOS='line: BIOS={{ ansible_bios_version }}- name: Ensure 4lineinfile:path: /root/hwreport.txtregexp: '^DISK_SIZE_VDA='line: DISK_SIZE_VDA={{ ansible_devices.vda.size }}- name: Ensure 5lineinfile:path: /root/hwreport.txtregexp: '^DISK_SIZE_VDB='line: DISK_SIZE_VDB={{ ansible_devices.vdb.size | default('NONE', true) }}

第三步

# 验证
[greg@control ansible]$ ansible all -a 'cat /root/hwreport.txt'

第十三题:创建密码库

创建密码库

按照下方所述,创建一个 Ansible 库来存储用户密码:

  • 库名称为 /home/greg/ansible/locker.yml
  • 库中含有两个变量,名称如下:
  • pw_developer,值为 Imadev
  • pw_manager,值为 Imamgr
  • 用于加密和解密该库的密码为 whenyouwishuponastar
  • 密码存储在文件 /home/greg/ansible/secret.txt 中

第一步

# 密码导入密码存储文件
[greg@control ansible]$ echo "whenyouwishuponastar" > /home/greg/ansible/secret.txt

第二步

# 修改配置文件存储路径
[greg@control ansible]$ vim ansible.cfg
vault_password_file = /home/greg/ansible/secret.txt

第三步

# 创建Ansible 库,存储用户密码
[greg@control ansible]$ ansible-vault create /home/greg/ansible/locker.yml
pw_developer: Imadev
pw_manager: Imamgr

第四步

# 验证
[greg@control ansible]$ ansible-vault view /home/greg/ansible/locker.yml---
pw_developer: Imadev
pw_manager: Imamgr

第十四题:创建用户帐户

创建用户帐户

  • 从 http://materials/user_list.yml 下载要创建的用户的列表,并将它保存到 /home/greg/ansible
  • 在本次考试中使用在其他位置创建的密码库 /home/greg/ansible/locker.yml 。创建名为 /home/greg/ansible/users.yml 的 playbook ,从而按以下所述创建用户帐户:
  • 职位描述为 developer 的用户应当:
    • 在 dev 和 test 主机组中的受管节点上创建
    • 从 pw_developer 变量分配密码
    • 是补充组 devops 的成员
  • 职位描述为 manager 的用户应当:
    • 在 prod 主机组中的受管节点上创建
    • 从 pw_manager 变量分配密码
    • 是补充组 opsmgr 的成员
  • 密码采用 SHA512 哈希格式。
  • 您的 playbook 应能够在本次考试中使用在其他位置创建的库密码文件 /home/greg/ansible/secret.txt 正常运行。

第一步

# 查看组是否存在
[greg@control ansible]$ ansible dev,test -a "grep devops /etc/group"

第二步

# 下载要创建的用户的列表
[greg@control ansible]$ wget http://materials/user_list.yml

第三步

# 创建playbook,并编写
[greg@control ansible]$ vim /home/greg/ansible/users.yml
---
- name: 创建用户帐户 1hosts: dev,testvars_files:- /home/greg/ansible/locker.yml- /home/greg/ansible/user_list.ymltasks:- name: Ensure group 1group:name: devopsstate: present- name: Add the user 1user:name: "{{ item.name }}"groups: devopspassword: "{{ pw_developer | password_hash('sha512') }}"append: yesloop: "{{ users }}"when: item.job == 'developer'- name: 创建用户帐户 2hosts: prodvars_files:- /home/greg/ansible/locker.yml- /home/greg/ansible/user_list.ymltasks:- name: Ensure group 2group:name: opsmgrstate: present- name: Add the user 2user:name: "{{ item.name }}"groups: opsmgrpassword: "{{ pw_manager | password_hash('sha512') }}"append: yesloop: "{{ users }}"when: item.job == 'manager'

第四步

# 执行playbook
[greg@control ansible]$ ansible-playbook users.yml

第五步

# 验证
[greg@control ansible]$ ansible dev,test -m shell -a "id bob; id sally; id fred"

第十五题:更新 Ansible 库的密钥

更新 Ansible 库的密钥

按照下方所述,更新现有 Ansible 库的密钥:

  • 从 http://materials/salaries.yml 下载 Ansible 库到 /home/greg/ansible
  • 当前的库密码为 insecure8sure
  • 新的库密码为 bbs2you9527
  • 库使用新密码保持加密状态

第一步

# 下载Ansible 库
[greg@control ansible]$ wget http://materials/salaries.yml

第二步

# 重设密码
[greg@control ansible]$ ansible-vault rekey  /home/greg/ansible/salaries.yml
Vault password: 'insecure8sure'
New Vault password: 'bbs2you9527'
Confirm New Vault password: 'bbs2you9527'
Rekey successful

第三步

# 验证
[greg@control ansible]$ ansible-vault view  /home/greg/ansible/salaries.yml
Vault password: 'bbs2you9527'
haha

第十六题:配置 cron 作业(增加)

配置 cron 作业

创建一个名为 /home/greg/ansible/cron.yml 的 playbook :

  • 该 playbook 在 test 主机组中的受管节点上运行
  • 配置 cron 作业,该作业每隔 2 分钟运行并执行以下命令:
  • logger “EX200 in progress”,以用户 bob 身份运行

第一步

# 创建playbook
[greg@control ansible]$ vim /home/greg/ansible/cron.yml
---
- name: cronhosts: testtasks:- name: Ensure a job cron:name: "check dirs"minute: "*/2"job: 'logger "EX200 in progress"'user: bob

第二步

# 执行playbook
[greg@control ansible]$ ansible-playbook cron.yml

第三步

# 验证
[greg@control ansible]$ ansible test -a "grep EX200 /var/log/cron"

ontrol ansible]$ ansible-vault rekey /home/greg/ansible/salaries.yml
Vault password: ‘insecure8sure’
New Vault password: ‘bbs2you9527’
Confirm New Vault password: ‘bbs2you9527’
Rekey successful


==第三步==~~~sh
# 验证
[greg@control ansible]$ ansible-vault view  /home/greg/ansible/salaries.yml
Vault password: 'bbs2you9527'
haha

第十六题:配置 cron 作业(增加)

配置 cron 作业

创建一个名为 /home/greg/ansible/cron.yml 的 playbook :

  • 该 playbook 在 test 主机组中的受管节点上运行
  • 配置 cron 作业,该作业每隔 2 分钟运行并执行以下命令:
  • logger “EX200 in progress”,以用户 bob 身份运行

第一步

# 创建playbook
[greg@control ansible]$ vim /home/greg/ansible/cron.yml
---
- name: cronhosts: testtasks:- name: Ensure a job cron:name: "check dirs"minute: "*/2"job: 'logger "EX200 in progress"'user: bob

第二步

# 执行playbook
[greg@control ansible]$ ansible-playbook cron.yml

第三步

# 验证
[greg@control ansible]$ ansible test -a "grep EX200 /var/log/cron"

2022RHCE最新认证—(满分通过)相关推荐

  1. 百家号企业专业号怎么认证?百家号蓝V认证最新认证流程!

    百家号企业专业号怎么认证?百家号蓝V认证最新认证流程! 企业百家号新功能上线了! 视频可以挂载线索组件啦~ 帮你快速锁定精准线索,提升私域增长能力.@热门小助手+ 百家号发布视频又出新功能,很多细心的 ...

  2. 思科推出最新认证考纲 将首先应用于CCIE认证

    今天,IT专业人士除要具备深厚的专业知识与技术外,更重要的是要对所处企业的业务环境有深刻理解,并能有效通过技术手段为业务增长创造更为有利的IT空间,从而为企业业务带来真正的价值.在这样的背景下,让技术 ...

  3. 思科640-816最新认证资料-Pass4side权威考题大师提供

    640-816考试认证资料 640-816 题库 Interconnecting Cisco Networking Devices Part 2 科目编号:640-816 科目名称:Interconn ...

  4. Adobe Magento 2 最新认证证书考前准备,考试过程和注意事项

    报考Magento 2认证证书,推荐的最低有1.5年的Magento相关经验在参加考试比较保险.开发人员最好多看看Magento 2.4 Developer Documentation,其他人员多看看 ...

  5. 微软最新认证提前看之微软认证IT专业人员

    href="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_filelist.xml" rel=" ...

  6. 微软最新认证提前看之微软认证技能专家

    href="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_filelist.xml" rel=" ...

  7. 你该知道的 Oracle 认证那些事儿(免费 赠送最新OCP题库)

    作者 | JiekeXu 来源 | JiekeXu之路(ID: JiekeXu_IT) 转载请联系授权 | (微信ID:xxq1426321293) 大家好,我是 JiekuXu,很高兴和大家又见面了 ...

  8. 勤于动手操作 满分过CCNA认证

    2005年1月下旬,正打算转换工作环境的Roger,无意间从报纸上看到了"系统工程师认证(IT认证 )"培训的消息,其扎实的课程安排吸引了当时正准备离职的Roger,他想到自己在I ...

  9. CCF CSP认证考试在线评测系统

    关于CCF CSP认证考试在线评测系统 CCF CSP认证考试简介 CCF是中国计算机学会的简称.CCF计算机软件能力认证(简称CCF CSP认证考试)是CCF于2014年推出,是CCF计算机职业资格 ...

最新文章

  1. 这26个阿里 Java 开源项目,你用过几个?
  2. 如何建立企业内部培训体系?
  3. Spring,Reactor和ElasticSearch:使用伪造的测试数据进行标记
  4. arduino 温度调节器_Arduino用温湿度传感器控制继电器,为什么点了串口助手才能运行,拔掉usb线,直接外界9V电源却用不了...
  5. MyBatis 延迟加载的三种加载方式深入,你get了吗?
  6. go socket编程(详细)
  7. Jupyter Notebook——Windows平台上中如何切换虚拟环境
  8. keil窗口显示不全_使用Keil语言的嵌入式C编程教程(下)
  9. select option 不写 value 属性 产生的浏览器差异
  10. 深度学习9-tensorboard
  11. OSPFv3中LSA详解(八)——Type5类LSA详解
  12. Mac使用技巧:清除 MacBook 上的浏览器缓存
  13. DB2 9 根本(730 磨练)认证指南,第 3 部门: 谋面 DB2 数据(4)
  14. vba6.3提取自WPS2012专业增强版 带教程 (wps可能是因为该宏在此工作簿中不可用)
  15. 阿里云服务器搭建及域名申请攻略
  16. Spark MLBase分布式机器学习系统入门:以MLlib实现Kmeans聚类算法
  17. html 通知页面,12款体验不错的网站提示/通知样式
  18. Android app包下fragment详细使用
  19. 怎样成为一个高级JAVA工程师
  20. Python中 list[:]与 list 的区别

热门文章

  1. CountDownLatch与CyclicBarrier使用与理解
  2. 盛世三国未能连接到服务器,《盛世三国》停服公告
  3. 一对多Excel自定义函数:SVLOOKUP
  4. 寒假CF1 小呀小苹果儿
  5. 77句唯美爱情语录,很多人已经不相信爱情了,你也是吗?
  6. android selector 开关,android selector 状态切换 以及动画
  7. 【PyTorch教程】P22 squential和小实战
  8. android viewholder
  9. C#之MySql删除
  10. 2010-2020年全国用电量逐月累计数据/全国分产业用电量逐月累计数据