RHCE认证题解

考前说明

复制代码
请勿更改 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: ![](https://i-blog.csdnimg.cn/direct/acc4a1397aa74afe9c3e089694bc4ce9.png) ![](https://i-blog.csdnimg.cn/direct/03ec2962f6fb41558785200bbfc661c3.png) 检查测试: ![](https://i-blog.csdnimg.cn/direct/cdf0295a9d8b454e8ee43e789b99caeb.png) ![](https://i-blog.csdnimg.cn/direct/3d23f6b0effa4ddc83410b691eadfa76.png) ### **题二(二题出一题来考)** **使用** **Timesync RHEL系统角色** 安装 RHEL 系统角色软件包,并创建符合以下条件的playbook /home/devops/ansible/timesync.yml 1. 在所有受管节点上运行 2. 使用 timesync 角色 3. 配置该角色,以使用当前有效的 NTP 提供 4. 配置该角色,以使用时间服务器 classroom.example.com 配置: ![](https://i-blog.csdnimg.cn/direct/c4d39ae8d8484797bcde0400bd1a7818.png) ![](https://i-blog.csdnimg.cn/direct/a0cf5e6570a74f48937edc795f3ba2bc.png) 查看帮助: ![](https://i-blog.csdnimg.cn/direct/275689c8fb3645c69d751e9707eff44c.png) ![](https://i-blog.csdnimg.cn/direct/d597b996100a4ba9bb81c8a1b88c83bf.png) 编辑playbook: ![](https://i-blog.csdnimg.cn/direct/357be30bce46482489a994813ee4ce54.png) ![](https://i-blog.csdnimg.cn/direct/38a128ddabfa47b997b6f9131ea62f92.png) 运行playbook: ![](https://i-blog.csdnimg.cn/direct/b6e7707c8abf40809957f5362d3224ef.png) ![](https://i-blog.csdnimg.cn/direct/3f8c8bba32cf4e33bf1e2c8d6a9252a5.png) 测试: ![](https://i-blog.csdnimg.cn/direct/2e2882e74095469694462f1eeab87acf.png) ## 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 配置: ![](https://i-blog.csdnimg.cn/direct/4a8cb0ba6a764793866cf0190d432217.png) ![](https://i-blog.csdnimg.cn/direct/d89f366bad5645fc999e8cfd065b1bcb.png) 安装: ![](https://i-blog.csdnimg.cn/direct/fe6c2e4987224abab9121d5743017a1a.png) 检查测试: ![](https://i-blog.csdnimg.cn/direct/0d75efccc50d48b6b348f03afd198f52.png) ## 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 主机组 配置: ![](https://i-blog.csdnimg.cn/direct/b3eed1d5a76748409ff6fd8da5c5b3ec.png) ![](https://i-blog.csdnimg.cn/direct/1bccef5d1be5411db47e80c42f7f4fe1.png) ![](https://i-blog.csdnimg.cn/direct/28cc59d0a1414e4799980a8d6bd67328.png) 捕捉事实变量: ![](https://i-blog.csdnimg.cn/direct/b56aeca32ae84d95ae805a37d2683bb1.png) ![](https://i-blog.csdnimg.cn/direct/d8e0ad4bac764da8862642bf2e10f3c6.png) ![](https://i-blog.csdnimg.cn/direct/dc972da07b1d4718ba001f3ec7f78774.png) 编写j2模板: ![](https://i-blog.csdnimg.cn/direct/9f103e8d8ea24b688014d2dfd037cf6c.png) ![](https://i-blog.csdnimg.cn/direct/a7111912e4d44087bd20224c28237b71.png) ![](https://i-blog.csdnimg.cn/direct/cdc7b1976bd9427585c06dd5987c8050.png) **编写动作:** ![](https://i-blog.csdnimg.cn/direct/1207cfe192d14da4836bb1b0f4cc498b.png) ![](https://i-blog.csdnimg.cn/direct/bc92deb6e9614dd6b2269e9201a465e4.png) ![](https://i-blog.csdnimg.cn/direct/f1d81ea9d38043ab8a5bf1c6333d2cc3.png) ![](https://i-blog.csdnimg.cn/direct/6d23f523a5eb439f801a0f5bda24c269.png) ![](https://i-blog.csdnimg.cn/direct/0a7375e11b0347f6bde117390a0003d9.png) ![](https://i-blog.csdnimg.cn/direct/d3b38ef447174d3487d90fdbdc55346d.png) ![](https://i-blog.csdnimg.cn/direct/e293ecead0044e3cb1dc664227b85a62.png) ![](https://i-blog.csdnimg.cn/direct/1a18e998fa604caaa2e31f6cf04e62e8.png) ![](https://i-blog.csdnimg.cn/direct/f63e07a02d4e4928b7ebcbd06f5193c1.png) ![](https://i-blog.csdnimg.cn/direct/c556a0c771ee45878c4a01104e191be5.png) ![](https://i-blog.csdnimg.cn/direct/1f3acaa18071428593671fa8f945a893.png) ![](https://i-blog.csdnimg.cn/direct/43c79cfa8f4345e3bc28871d8b041d46.png) ![](https://i-blog.csdnimg.cn/direct/b474cb69b2d54fb88eb8006808d4b6eb.png) ![](https://i-blog.csdnimg.cn/direct/b3ed0600445f482aa16cb486ac9bd57b.png) ![](https://i-blog.csdnimg.cn/direct/115779f1fc8440419af231f38761bb91.png) 检查角色: ![](https://i-blog.csdnimg.cn/direct/cf861e45e33644a08c3e52599d1e5c75.png) 编写playbook: ![](https://i-blog.csdnimg.cn/direct/e17ab01f69274418aee0aec22cecddd2.png) ![](https://i-blog.csdnimg.cn/direct/ec5a9279c5804ad1bc8367e3d02282ea.png) 运行playbook: ![](https://i-blog.csdnimg.cn/direct/f1f3476949ee4b4c815a9b9515fdcafc.png) ![](https://i-blog.csdnimg.cn/direct/0f083d836e9d49f1ae4e928d3f68ce22.png) 检查测试: ![](https://i-blog.csdnimg.cn/direct/7702cad4b49d417997fb194a3e0866bf.png) ## 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 配置 配置: ![](https://i-blog.csdnimg.cn/direct/575e292fa5bf4e64a738f9fcc9b2810b.png) ![](https://i-blog.csdnimg.cn/direct/410d1fe91fcb442a814f70c2490c0dd2.png) ![](https://i-blog.csdnimg.cn/direct/84cc8f5af0104fcfaf3d15c664ae821f.png) ![](https://i-blog.csdnimg.cn/direct/ba16f2bc17b4442bbe863733c3422488.png) ![](https://i-blog.csdnimg.cn/direct/0c44fdb3eccf494281cba734d0234b10.png) ![](https://i-blog.csdnimg.cn/direct/f6bf3ae8ff9d4cc4b67ba493b47e5402.png) ↑webservers不要写火墙,因为上一题已经做过 运行playbook: ![](https://i-blog.csdnimg.cn/direct/7613dfc561234e49a1fcd3f9b4afb58f.png) ![](https://i-blog.csdnimg.cn/direct/efbb388170884f9bb3307feb0982dd46.png) 检查测试: ![](https://i-blog.csdnimg.cn/direct/a843be4726ea4f49b412982ffcde4494.png) ![](https://i-blog.csdnimg.cn/direct/0e4eaa4b4efb462c96d50fba7f26ccc9.png) ## 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: ![](https://i-blog.csdnimg.cn/direct/908ea9e1492c41c89c495c145e8d7b90.png) ![](https://i-blog.csdnimg.cn/direct/27d899e4c4304bb4904bf45fdb2876a4.png) ![](https://i-blog.csdnimg.cn/direct/b167ea88e6f9459fbf77e04fbdec0b2a.png) ![](https://i-blog.csdnimg.cn/direct/6893552767244c62851aed5d467b6586.png) ![](https://i-blog.csdnimg.cn/direct/3216afa5ebab40179a37fb8de94d61f0.png) ![](https://i-blog.csdnimg.cn/direct/091f7b2aac3047339b82969dd1af1b97.png) ![](https://i-blog.csdnimg.cn/direct/5b4394691a8c4d23806d12a326765e2e.png) ![](https://i-blog.csdnimg.cn/direct/4abcf64741a24be1b31399230c505e33.png) ![](https://i-blog.csdnimg.cn/direct/1f57cf69e91a4f959b1c90f0e141275a.png) ![](https://i-blog.csdnimg.cn/direct/b9942b30ae074aadbcf457355e9986c5.png) ![](https://i-blog.csdnimg.cn/direct/549c144668814c43834c52e07c5c37ae.png) ![](https://i-blog.csdnimg.cn/direct/0432286a183240f0bc2c70eaa337d585.png) ![](https://i-blog.csdnimg.cn/direct/71a3dc93d51d46f59e834b8942353751.png) ![](https://i-blog.csdnimg.cn/direct/f7ab63c7de534b94948524b9527e8e45.png) ![](https://i-blog.csdnimg.cn/direct/6d75d59e5d254b5ca1ff4f17ad27ae9b.png) ![](https://i-blog.csdnimg.cn/direct/5441e3afff864805a6d01d9d56840fb1.png) ![](https://i-blog.csdnimg.cn/direct/f72c6c92186f4e75b5007823d5baaf72.png) ![](https://i-blog.csdnimg.cn/direct/f6e9576fd491458ba1d8671e29b9d8bc.png) ![](https://i-blog.csdnimg.cn/direct/3dd70d28d8e2449596a9a137b9d8af18.png) ![](https://i-blog.csdnimg.cn/direct/77ae8ac16a1d4877ac79b4bcb4bd6b20.png) ![](https://i-blog.csdnimg.cn/direct/6bda847fbf1545888d8f37ea8884cbad.png) 运行playbook: ![](https://i-blog.csdnimg.cn/direct/f2fa225ea3fc4f41b900acd87dd33a1e.png) ![](https://i-blog.csdnimg.cn/direct/50bc7f8d1fe7476ca708c44d23edcc5d.png) 检查测试: ![](https://i-blog.csdnimg.cn/direct/2d0c4e9aed7d406ca712ef6779db9004.png) ### **题二(考试时二出一)创建和使用逻辑卷** ```bash 创建一个名为/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台虚拟机均没有对应的卷组和逻辑卷, 因此先准备分区和卷组(考试不需要)====** ```bash #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台虚拟机均没有对应的卷组和逻辑卷, 因此先准备分区和卷组(考试不需要)====** 配置: ![](https://i-blog.csdnimg.cn/direct/18460937fef64ee288c463da89155610.png) ```bash --- - 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" ``` 运行: ![](https://i-blog.csdnimg.cn/direct/6923306aacc741edaba0e073e30abe4f.png) 测试: ## ![](https://i-blog.csdnimg.cn/direct/6d2196f4efb84595abc102c485e43891.png) ## 10.生成主机文件 ```bash 将 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 ``` ### **开桂简便法:** 复制展示内容: ![](https://i-blog.csdnimg.cn/direct/f79a4a0c565541128182d6b9a454137c.png) ![](https://i-blog.csdnimg.cn/direct/c9006326365d453084d9b94662c12844.png) 编写yml: ![](https://i-blog.csdnimg.cn/direct/7c1a01fc46f740748a4adf7a5f2112d5.png) 运行: ![](https://i-blog.csdnimg.cn/direct/480adbaed956466e8bcdc39465d7ee29.png) 测试: ![](https://i-blog.csdnimg.cn/direct/e495ddb4f5b7459a894858faf4197a3b.png) ### **法二正常配置:** 下载模板文件(在ansible目录下载): ![](https://i-blog.csdnimg.cn/direct/60af75a6f6e2403d906f37e383160abb.png) ![](https://i-blog.csdnimg.cn/direct/167af6d0e59b4f5e882440d37cf92723.png) ![](https://i-blog.csdnimg.cn/direct/dd10e7903abc487abf0d3d9d6d930010.png) 提取事实变量: ![](https://i-blog.csdnimg.cn/direct/4adc4f9c97ea4a42aec7938d62c75824.png) ![](https://i-blog.csdnimg.cn/direct/5d474857a4644aabbcb9219d30b83b0f.png) ![](https://i-blog.csdnimg.cn/direct/1cc4379a7a384849830ce4730271a28b.png) 用魔法变量.事实变量来获取IP、主机全名、主机简称: ![](https://i-blog.csdnimg.cn/direct/3ac3ca2060b2442ba7f762355f82ef6f.png) 根据题意创建playbook: ![](https://i-blog.csdnimg.cn/direct/b26c066dc6664b96aab761e46eed76e7.png) ![](https://i-blog.csdnimg.cn/direct/ffbf089e67ec4637a86900b2104a8cb6.png) 查看模板帮助: ![](https://i-blog.csdnimg.cn/direct/f1dda4be706747cd965cc97c3a3ca343.png) ![](https://i-blog.csdnimg.cn/direct/67e6f2badeef47ea9ce8a7d081ea5f35.png) ![](https://i-blog.csdnimg.cn/direct/ed7cd5f9f57345d9bde0a59bb5c53ab7.png) 运行playbook: ![](https://i-blog.csdnimg.cn/direct/f9ef77529fdd469b8563987309ef64e6.png) ![](https://i-blog.csdnimg.cn/direct/bac38de512fa4599b86d4ac03026d0fe.png) 检查测试: ![](https://i-blog.csdnimg.cn/direct/fd626f6598f641d68c22fd67b53d0747.png) ## 11.修改文件内容 创建名为 issue.yml 的 playbook,要求如下: -- 此 playbook 运行到所有受控节点 • 此 playbook 覆盖/etc/issue 文件中的内容: • 在 dev 主机组的主机中,内容是:Development 在 test 主机组的主机中,内容是:Test • 在 prod 主机组的主机中,内容是:Production ### **法一不写when的易写法:** ![](https://i-blog.csdnimg.cn/direct/5ffaaef7a9fd41508e0840f09c88a8d4.png) ![](https://i-blog.csdnimg.cn/direct/b35ffe21db7f456b9bb49056be407763.png) 运行: ![](https://i-blog.csdnimg.cn/direct/f56a971c221d4f24b62d74f0483e02a3.png) ![](https://i-blog.csdnimg.cn/direct/498908548ffa474386568e2755ced69a.png) ### **法二正常配置:** ![](https://i-blog.csdnimg.cn/direct/e0715e0777894d179508ca0bd0b9345c.png) ![](https://i-blog.csdnimg.cn/direct/12c0f4b220b74c6b88968aa917212676.png) 查看copy模块帮助: ![](https://i-blog.csdnimg.cn/direct/d57446c8e4a74da9b64057fc0a88f093.png) ![](https://i-blog.csdnimg.cn/direct/890ba2c821f54602bb8d43734dd881cb.png) ![](https://i-blog.csdnimg.cn/direct/9f40e932888c45999b2b3b1568f2e2a6.png) 运行playbook: ![](https://i-blog.csdnimg.cn/direct/a81f773a5a044b53b7c50ace3d899d10.png) ![](https://i-blog.csdnimg.cn/direct/be0f8532ca2d447b902a1da8057a6335.png) 检查测试: ![](https://i-blog.csdnimg.cn/direct/9905147639aa4bbfbdf298ea9d8c3158.png) ## 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,开启服务,火墙放行的动作,我们可以直接使用 ![](https://i-blog.csdnimg.cn/direct/4e3684f63f104385bd111020ecb0390b.png) ```bash --- - 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: ![](https://i-blog.csdnimg.cn/direct/98b34d32addb49dfabb693606cec2aae.png) 测试: ![](https://i-blog.csdnimg.cn/direct/8b18a7e6e7194f47b5956c8ee2789bbb.png) ### **麻烦配置法:** 查看user模块帮助: ![](https://i-blog.csdnimg.cn/direct/b02101eabaea443eab81dcf38ae0b325.png) ![](https://i-blog.csdnimg.cn/direct/7a388f992e8a4cf28de5a3da1319b165.png) 创建playbook: ![](https://i-blog.csdnimg.cn/direct/a1546dee4065414fb1cee4922c560db1.png) ![](https://i-blog.csdnimg.cn/direct/f59c265d7d8e47c8a039bad7506794e6.png) 查看创建目录模块帮助: ![](https://i-blog.csdnimg.cn/direct/6e24b839acf844b881659b0190091458.png) ![](https://i-blog.csdnimg.cn/direct/0a808a3eb3584c3fbc07e100cd5d1351.png) ![](https://i-blog.csdnimg.cn/direct/eb7e669aabe04b289999e50f60203298.png) ![](https://i-blog.csdnimg.cn/direct/cbcd0ebc8ffd44968d9ce29c71ab9bd8.png) ![](https://i-blog.csdnimg.cn/direct/7061cd37c7e1495ab5f1445bb1301480.png) 查看下载模块帮助: ![](https://i-blog.csdnimg.cn/direct/c28f91d4cf954d11bdcdf9abebb7d910.png) ![](https://i-blog.csdnimg.cn/direct/66233295ff574784bd1cee58e558b40c.png) ![](https://i-blog.csdnimg.cn/direct/74556147ef7f4c6898e301b93df011df.png) 查看server模块帮助来启动服务: ![](https://i-blog.csdnimg.cn/direct/a9d9f448736d46b9b5945718d85bb024.png) ![](https://i-blog.csdnimg.cn/direct/8cbeb00e101b4253bb33d998d068d92d.png) ![](https://i-blog.csdnimg.cn/direct/e6d88d25b1304e1d9182f121b7889c31.png) 查看copy模块帮助来导入文件内容: ![](https://i-blog.csdnimg.cn/direct/70651636d56341adb5467cce1680e59c.png) ![](https://i-blog.csdnimg.cn/direct/f39cf88df00f4d42a433685622486b74.png) ![](https://i-blog.csdnimg.cn/direct/4c7a410aa1194f25baefe20a42e682a9.png) 查看火墙模块帮助: ![](https://i-blog.csdnimg.cn/direct/ac21019e99014b1784b778a60742ee5f.png) ![](https://i-blog.csdnimg.cn/direct/398a45a8cb3f4699af13a2008c46c44a.png) ![](https://i-blog.csdnimg.cn/direct/e3eafdb3db0a4d4b9b79fb338a91a146.png) ![](https://i-blog.csdnimg.cn/direct/2810e0f578964022adc94d74fe448293.png) 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: ![](https://i-blog.csdnimg.cn/direct/d12fb7481e4c4284933a0f2f403df77b.png) ![](https://i-blog.csdnimg.cn/direct/19857a4d5f314762a3be421d7f53952b.png) 测试: ![](https://i-blog.csdnimg.cn/direct/b791ca55a9684d059c4a23b94c17388c.png) ## 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 ### 方法一: 结合考前说明里的工具文件连接地址下载模板示例: ![](https://i-blog.csdnimg.cn/direct/c8143455498c4b81a29526d351663105.png) 查看模板示例: ![](https://i-blog.csdnimg.cn/direct/b218dde27b074a61a351449285045238.png) 查看的帮助文档: ![](https://i-blog.csdnimg.cn/direct/4c9f2c488b1047869fc1990654190fc7.png) ![](https://i-blog.csdnimg.cn/direct/f258bd5d1e6140d1923981ffe8e8170a.png) ![](https://i-blog.csdnimg.cn/direct/2986b01a351349a29d53338b6ccdcd34.png) ![](https://i-blog.csdnimg.cn/direct/a981e36a1612419c9818afd1d0a05865.png) 👆或者过滤devices 编辑yml: ![](https://i-blog.csdnimg.cn/direct/ff50e63eab5a4bbca4a802fcc51a66e9.png) ![](https://i-blog.csdnimg.cn/direct/9d92349a28c645a4997862f53878592b.png) 👆hw_name根据下载的模板示例的键的开头填写 查看动作的模板: ![](https://i-blog.csdnimg.cn/direct/cf16cd3e50a648c38ada422c5af7ff2c.png) ![](https://i-blog.csdnimg.cn/direct/933022eb06e54b57ba0b4b2a0535ccf9.png) ![](https://i-blog.csdnimg.cn/direct/640be069117a4f029feb9b287773a3ec.png) ![](https://i-blog.csdnimg.cn/direct/4362d5845b1b4ccc975e392b22c00428.png) ![](https://i-blog.csdnimg.cn/direct/390202157507444eb1a256122963f982.png) ![](https://i-blog.csdnimg.cn/direct/8f5cdbe8826f46fb80c3d9a3dc87a3f4.png) 运行: ![](https://i-blog.csdnimg.cn/direct/958cc7f66f344924a17cf14fd940db19.png) 测试: ![](https://i-blog.csdnimg.cn/direct/dfe028996cb24af9ad57ce10e6ee9cd8.png) ### 方法二: 结合考前说明里的工具文件连接地址下载: ![](https://i-blog.csdnimg.cn/direct/c8143455498c4b81a29526d351663105.png) 创建playbook: ![](https://i-blog.csdnimg.cn/direct/417a2f33478e4dfea8d8d9608fbfb4e0.png) ![](https://i-blog.csdnimg.cn/direct/12c2561e61024206ab7851f99578da94.png) 查看copy模块帮助来复制下载的模板: ![](https://i-blog.csdnimg.cn/direct/7b94be3b17ee45efb24d9d70d3d969d5.png) ![](https://i-blog.csdnimg.cn/direct/946c7eb208034790b7afd1eae714572c.png) ![](https://i-blog.csdnimg.cn/direct/95a46b411042489baf9ef1ae113433b4.png) 查看lineinfile模块帮助来替换文件内容: ![](https://i-blog.csdnimg.cn/direct/03b27997506f4b33b0f274f8cbf23d46.png) ![](https://i-blog.csdnimg.cn/direct/6cf39ce6fccb49f18754534702fadec0.png) ![](https://i-blog.csdnimg.cn/direct/c01ee997e4b4497aa3d63a3757295748.png) 👆这里inventoryhostname是指短名称,用inventory_hostname提取。如果是hostname是指全称,就要用_fqdn ![](https://i-blog.csdnimg.cn/direct/ca3980b0a4d045ccaa01dc41104c4c25.png) ![](https://i-blog.csdnimg.cn/direct/6482a2f1b8f04bb282ab35e7064c9ec6.png) ![](https://i-blog.csdnimg.cn/direct/3f591d94c1bc4363ba7ff35e55f06ae2.png) ![](https://i-blog.csdnimg.cn/direct/63ce10af48e74c8c91ce771b02953f7f.png) ![](https://i-blog.csdnimg.cn/direct/b91997bc494a4216b5fdf08b648e878b.png) ![](https://i-blog.csdnimg.cn/direct/fa0def68b0a24c83810096dd814614db.png) ![](https://i-blog.csdnimg.cn/direct/68ab9a57feed4390b9526a474f44939e.png) ![](https://i-blog.csdnimg.cn/direct/6d395f8522ca4134b4da9e5c677ad249.png) 👆注意变双引了 ![](https://i-blog.csdnimg.cn/direct/e1eecf28b4494dc5aebdd77fc7219eb3.png) ![](https://i-blog.csdnimg.cn/direct/394152f73da14fd4823d1779bb8ebbbf.png) 运行playbook: ![](https://i-blog.csdnimg.cn/direct/22d5b8b4697647ac946ece05bfecfaab.png) ![](https://i-blog.csdnimg.cn/direct/738b9c57fd674fa7aa2fbc13ac6a20d4.png) 检查测试: ![](https://i-blog.csdnimg.cn/direct/a26d0862ca5b400ab5fb854d293e4732.png) ## 14.创建 password vault 创建一个名为 locker.yml 的 ansible vault 文件存储用户密码: • Vault 文件中含有两个变量,名称如下: -- pw_developer: Imadev • pw_manager: Imamgr 加解密密码为 redhat • 密码存储在 /home/devops/ansible/secret.txt 中。 配置: 编辑密码本: ![](https://i-blog.csdnimg.cn/direct/d2d86d57df174a63827cc90617704298.png) ![](https://i-blog.csdnimg.cn/direct/8a817160971648e4909365ee22c2f633.png) 给密码本权限: ![](https://i-blog.csdnimg.cn/direct/9bce0cdbe8904b87841e277d1990e9a0.png) 在ansible配置文件中指定密码本路径: ![](https://i-blog.csdnimg.cn/direct/173701416a4c4ea3b773bd95d4225adf.png) ![](https://i-blog.csdnimg.cn/direct/d9b0cde8c6d64e19be66f747d7911b68.png) 创建加密yml: ![](https://i-blog.csdnimg.cn/direct/e878f5acc39e49a293396be8f0e4d9c8.png) ![](https://i-blog.csdnimg.cn/direct/019e2a88acd240eab06d4eee2070802a.png) 查看测试: ![](https://i-blog.csdnimg.cn/direct/a62ed0e7134e4448ad0da61498a91e34.png) ![](https://i-blog.csdnimg.cn/direct/1e5575cba909406b9ec8051892acbed8.png) ![](https://i-blog.csdnimg.cn/direct/a6847d48426f476499757e0d5bcccec1.png) ## 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 配置: 下载用户清单: ![](https://i-blog.csdnimg.cn/direct/18ac5d5045e346eb9d824643759d973f.png) 编辑yml: ![](https://i-blog.csdnimg.cn/direct/71501e00029c4c58b04f57c93477b399.png) ![](https://i-blog.csdnimg.cn/direct/f0180f3a581d49e4836131fb991c03bd.png) 查看组文档帮助: ![](https://i-blog.csdnimg.cn/direct/a095a16797664b28af4cd9cd7664d86d.png) ![](https://i-blog.csdnimg.cn/direct/0d9e2aaa9e0b40c9b565a762a15e141a.png) ![](https://i-blog.csdnimg.cn/direct/ed0e4507956a45d5ac1741ca5907ce55.png) 查看用户帮助文档: ![](https://i-blog.csdnimg.cn/direct/9a3eba2c1cff4661ac79a32c4663a5b9.png) ![](https://i-blog.csdnimg.cn/direct/69284e95b3df4324ba6e8d137fa751b9.png) ```bash --- - 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" ``` ![](https://i-blog.csdnimg.cn/direct/18fb956e4efd40b3acc4c9b96ace2a7d.png) ## 16.更新 Ansible 库的密钥 ```bash • 请为 expense.yml 文件修改 vault 密码,要求如下: -- 请将 http://materials.example.com/tools/expense.yml 文件保存到 /home/devops/ansible/expense.yml • 当前密码为 ibmibm • 新密码为 redhatredhat ``` 配置: 下载文件: ![](https://i-blog.csdnimg.cn/direct/1035717bb02e42c2a75f43f8d67268a7.png) 修改密码: ![](https://i-blog.csdnimg.cn/direct/9558d2e65e244082bbe7269b7ea65149.png) 测试: ![](https://i-blog.csdnimg.cn/direct/458550152aef4ad3b36069498d9fe494.png) ## 17.配置 cron 作业 ```bash 在所有受管节点上创建名为 /home/devops/ansible/cron.yml 的 Playbook,为natasha 用户创建 cron 作业: • 用户 natasha 每隔 2 分钟执行 logger "RH294 in progress" ``` 配置: 编辑yml: ![](https://i-blog.csdnimg.cn/direct/1c657f53641349fcbe14c4872019f5e3.png) ![](https://i-blog.csdnimg.cn/direct/64ada1d991de459aa0f3ef9a1e66ab90.png) 查看用户帮助文档: ![](https://i-blog.csdnimg.cn/direct/710f879704da43cf84107c3985826fca.png) ![](https://i-blog.csdnimg.cn/direct/2e2c59c9d1ee4f0c921fb584f4e84324.png) ![](https://i-blog.csdnimg.cn/direct/0ddd692586b848cfa369fa76e1c90aa7.png) 查看cron帮助文档: ![](https://i-blog.csdnimg.cn/direct/52c38423e5a24b14a20b0b80ec68690f.png) ![](https://i-blog.csdnimg.cn/direct/874bf509c5ab4ad4a5f5a9711db97755.png) 查看命令绝对路径: ![](https://i-blog.csdnimg.cn/direct/46b81cbebe4e4251ad5047cadb2f3180.png) ![](https://i-blog.csdnimg.cn/direct/7457143e10aa4977bda03d43ed091e68.png) 运行: ![](https://i-blog.csdnimg.cn/direct/b6caf44db7ea424386800bb29ded8ab8.png) 测试: ![](https://i-blog.csdnimg.cn/direct/65d9d1d33ff5439083b625ef576d65a7.png)

相关推荐
代码改变世界ctw5 分钟前
TrustZone技术详解————这篇是AI写的包括图
linux
Johny_Zhao12 分钟前
SeaTunnel的搭建部署以及测试
linux·网络·网络安全·信息安全·kubernetes·云计算·containerd·devops·seatunnel·系统运维
nVisual26 分钟前
运维新纪元:告别Excel手工规划,实现“零误差”决策
运维·网络·设计模式·自动化
Dnui_King37 分钟前
Oracle 在线重定义
java·服务器·前端
Another Iso1 小时前
Linux之Shell脚本基本语法
linux·运维·服务器
焱童鞋1 小时前
win服务器系统10060问题解决
运维·服务器
Codeking__1 小时前
应用层自定义协议与序列化
服务器·网络
维尔切1 小时前
Linux中systemd与systemctl管理指南
linux·服务器·网络
Borny鼎鼎1 小时前
局域网内某服务器访问其他服务器虚拟机内相关服务配置
运维
PythonicCC1 小时前
服务器工作职责及核心组件详解
运维·服务器