RedHat_RHCE认证题分析

ansible,常用

ansible 主机名 -m setup | less   可以查ansible的的变量。

ansible-doc  模块名字

ansible-vault  ansible加密

---
#补充ansible知识
- hosts:
  tasks:
    - mount:  #可以直接挂载且写入fstab文件里实现开机自动挂载
        path: /xfz
        src: /dev/vdb1
        fstype: xfs
        state: mounted

#present只修改fstab配置文件,不mount
#mounted 修改文件且挂载
#unmounted  只取消挂载,卸载不修改配置文件
#absent:卸载且删除文件中的配置内容

01. 安装和配置 ansible 环境


1)安装所需软件包
2)在/home/alice/ansible/inventory 文件中设置主机清单,要求:
node1 属于 test01 主机组
node2 属于 test02 主机组
node3 和 node4 属于 web 主机组
node5 属于 test05 主机组
web 组属于 webtest 主机组
3)在/home/alice/ansible 目录中创建 ansible.cfg,满足以下需求:
主机清单文件为/home/alice/ansible/inventory
playbook 中角色位置为/home/alice/ansible/roles
collection 位置为/home/alice/ansible/collections(仅适用于 RHEL9)

解题参考:
使用 ssh alice@control(需要输入密码,密码是 alice)
//安装软件(适用于 RHEL8)
[alice@control ~]$ sudo dnf -y install ansible
//安装软件(适用于 RHEL9)
[alice@control ~]$ sudo dnf -y install ansible-core ansible-
navigator

#可以支持ansible在容器中用的软件:ansible-navigator


//创建目录
[alice@control ~]$ mkdir /home/alice/ansible
//编写 ansible 主配置文件 ansible.cfg

8版本里面有配置参考,9版本里没有,可以使用文件中的一条命令:

ansible-config init disabled > ansible.cfg

可以生成模板

[alice@control ~]$ vim /home/alice/ansible/ansible.cfg
[defaults]
inventory=/home/alice/ansible/inventory #清单文件
roles_path=/home/alice/ansible/roles #角色目录
collections_paths=/home/alice/ansible/collections
#collection 目录,多个目录冒号:分隔(仅适用于 RHEL9)
remote_user=alice #远程用户
[privilege_escalation] #sudo 提权
become=True #是否提权
become_method=sudo #提权方式
become_user=root #提权用户
become_ask_pass=False #是否需要密码
//创建 ansible 主机清单文件
//(ansible-config list 可以搜索参数或 ansible-config init > /tmp/ansible.cfg 生成临时参考文件)

[alice@control ~]$ vim /home/alice/ansible/inventory    #要求创建什么主机清单名字,注意查看
[test01]
node
[test02]
node2
[web]
node3
node4
[test05]
node5
[webtest:children]        #嵌套组:
web
//测试环境
[alice@control ~]$ cd /home/alice/ansible/
[alice@control ansible]$ ansible all -m ping    #检测所有主机是否连通


[alice@control ansible]$ vim ~/.ansible-navigator.yml

---
ansible-navigator:
  execution-environment:
    image:registry.lab.example.com:5000/ee-supported.rhel8:latest
  pull:
    policy: missing

Downloading images using containers

navigator:领航员   execution:执行
#(仅适用于 RHEL9)
[alice@control ansible]$ sudo vim /etc/containers/registries.conf

... ...
[registries.search]
registries = ['registry.lab.example.com:5000']
[registries.insecure]
registries = ['registry.lab.example.com:5000']


[alice@control ansible]$ podman login registry.lab.example.com
Username:<输入题目给的用户名,模拟环境为免密,不需要 login>
Password:<输入题目给的密码,模拟环境为免密,不需要 login>
[alice@control ansible]$ ansible-navigator images #下载镜像(仅适用于 RHEL9)
//按 ESC 退出
[alice@control ansible]$ podman images     #查看镜像(仅适用于 RHEL9)下载镜像

02. 创建和运行 Ansible 临时命令


编写脚本/home/alice/ansible/adhoc.sh,为所有受管机配置 yum 仓库。(适用于 RHEL8)
编写脚本/home/alice/ansible/yum.yml,为所有受管机配置 yum 仓库。(适用于 RHEL9)

ansible-doc    -l  查看模块可以用管道grep过滤出想要的

仓库 1:
名称为 BASE,描述为 software base
URL 为 http://server1.lab0.example.com/rhel9/BaseOS
GPG 签名启用
GPG 密钥 URL 为 http://server1.lab0.example.com/rhel9/RPM-GPG-KEY-redhat-release
仓库为启用状态
仓库 2:
名称为 STREAM,描述为 software stream
URL 为 http://server1.lab0.example.com/rhel9/AppStream
GPG 签名启用
GPG 密钥 URL 为 http://server1.lab0.example.com/rhel9/RPM-GPG-KEY-redhat-release
仓库为启用状态

 

- hosts: all
  tasks: 
    - name: Add base repo
      yum_repository:
        name: BASE
        description: software base
        baseurl: http://server1.lab0.example.com/rhel9/BaseOS
        gpgcheck: yes
        gpgkey: http://server1.lab0.example.com/rhel9/RPM-GPG-KEY-redhat-release
        enabled: yes
    - name: Add appstream repo
      yum_repository:
        name: STREAM
        description: software stream
        baseurl: http://server1.lab0.example.com/rhel9/AppStream
        gpgcheck: yes
        gpgkey: http://server1.lab0.example.com/rhel9/RPM-GPG-KEY-redhat-release
        enabled: yes


[alice@control ansible]$ ansible-playbook yum.yml
#本机执行剧本
或者
[alice@control ansible]$ ansible-navigator run yum.yml -m stdout
//临时启动 ee-supported-rhel8 容器(在容器中执行剧本)

03. 编写剧本远程安装软件


创建名为/home/alice/ansible/tools.yml 的 playbook,能够实现以下目的:
1)将 php 和 tftp 软件包安装到 test01、test02 和 web 主机组中的主机上
2)将 RPM Development Tools 软件包组安装到 test01 主机组中的主机上
3)将 test01 主机组中的主机上所有软件包升级到最新版本
解题参考:
//创建剧本文件
[alice@control ansible]$ vim tools.yml
---
- hosts: test01,test02,web #远程的主机
tasks:
- yum: #安装 php 和 tftp 软件
name:
- php
- tftp
- hosts: test01 #远程主机
tasks:
- yum: #安装软件包组
name: "@RPM Development Tools"
- yum: #升级软件
name: '*'           *代表所有软件
state: latest
//执行剧本
[alice@control ansible]$ ansible-playbook tools.yml
或者
[alice@control ansible]$ ansible-navigator run tools.yml -m stdout
//临时启动 ee-supported-rhel8 容器(在容器中执行剧本)

04. 配置计划任务


编写剧本/home/alice/ansible/jihua.yml
1)在 test02 组中的被管理主机运行
2)为用户 alice 创建计划任务: alice 用户每隔 5 分钟执行 echo "hello tarena"
解题参考:
//编写剧本
[alice@control ansible]$ vim jihua.yml
---
- hosts: test02 #远程主机
  tasks:
    - cron: #计划任务模块
         name: benben #计划任务名称
         minute: "*/5" #每 5 分钟
         job: 'echo "hello tarena"' #计划任务需要执行的命令
        user: alice #计划任务用户
[alice@control ansible]$ ansible-playbook jihua.yml

05.安装并使用系统角色(selinux)

ansible all -a 'getenforce'


安装系统角色,创建 playbook /home/alice/ansible/selinux.yml
要求满足如下条件:
1) 在所有被管理主机运行
2) 使用 selinux 角色
3) 使用角色配置强制状态运行 SElinux
解题参考:
//查询哪个软件包是角色(rhel-system-roles.noarch)
[alice@control ansible]$ sudo dnf list |grep roles
//安装软件
[alice@control ansible]$ sudo dnf -y install rhel-system-roles.noarch  
//查询软件安装到了哪里(这个软件提供了很多角色)
[alice@control ansible]$ rpm -ql rhel-system-roles.noarch
//查看安装了哪些角色(模拟题目要求使用的是 selinux 角色)
[alice@control ansible]$ ls /usr/share/ansible/roles/
//根据第一题,题目要求,创建一个存放角色的目录
[alice@control ansible]$ mkdir /home/alice/ansible/roles
//拷贝角色,到第一题要求的目录下
[alice@control ~]$ cp -r \
/usr/share/ansible/roles/rhel-system-roles.selinux/ \
/home/alice/ansible/roles/selinux
//查看 readme 帮助文档(根据查看的帮助写剧本)
[alice@control ~]$ cat /home/alice/ansible/roles/selinux/README.md
//编写剧本文件
[alice@control ansible]$ vim /home/alice/ansible/selinux.yml
---
- hosts: all
  vars: #设置剧本变量,变量参考 README 文档
     selinux_policy: targeted
     selinux_state: enforcing
   roles:
      - role: selinux #调用角色
        become: true
//执行剧本
[alice@control ansible]$ ansible-playbook selinux.yml

06. 安装并使用系统角色(timesync)


安装 RHEL 角色软件包,并创建剧本/home/alice/ansible/timesync.yml,满足以下要求:
1)在 test01 组中的被管理主机运行
2)使用 timesync 角色
3)配置该角色,使用时间服务器 172.25.0.254,并启用 iburst 参数
解题参考:
//查询哪个软件包是角色(rhel-system-roles.noarch)
[alice@control ansible]$ sudo dnf list |grep roles
//安装软件
[alice@control ansible]$ sudo dnf -y install rhel-system-roles.noarch
//查询软件安装到了哪里(这个软件提供了很多角色)
//答案就是在/usr/share/ansible/roles/目录
[alice@control ansible]$ rpm -ql rhel-system-roles.noarch
//根据题目要求,拷贝角色到特定的目录下,名称是 timesync
//备注:\代表换行符
[alice@control ansible]$ cp -r \
/usr/share/ansible/roles/rhel-system-roles.timesync/ \
/home/alice/ansible/roles/timesync
//仔细阅读帮助文件,Example Playbook
[alice@control ansible]$ cat roles/timesync/README.md
//参考帮助文档编写剧本文件
[alice@control ansible]$ vim timesync.yml
---
- hosts: test01
vars: #设置剧本变量,变量参考 README 文档
timesync_ntp_servers:
- hostname: 172.25.0.254
iburst: yes
roles:
- timesync #调用角色
//执行剧本文件
[alice@control ansible]$ ansible-playbook timesync.yml

以上两个题目类似,通过查看说明书解题。

这题不能错一点!!!

07. 通过 galaxy 安装角色与 collection

创建剧本/home/alice/ansible/roles/down.yml,用来从以下 URL 下载角色,
并安装到/home/alice/ansible/roles 目录下:
http://server1.lab0.example.com/roles/haproxy.tar 此角色名为 haproxy
http://server1.lab0.example.com/roles/myphp.tar 此角色名为 myphp
从 http://server1.lab0.example.com/materials/下载如下 collection 并安装到
/home/alice/ansible/collections 目录下(仅适用于 RHEL9):
 ansible-posix-1.5.1.tar.gz
 community-general-6.3.0.tar.gz
解题参考:
//编写下载文件,下载角色
[alice@control ansible]$ vim roles/down.yml
- src: http://server1.lab0.example.com/roles/haproxy.tar    下载路径
   name: haproxy                                                                下载之后叫什么
- src: http://server1.lab0.example.com/roles/myphp.tar
   name: myphp
[alice@control ansible]$ ansible-galaxy install -r roles/down.yml

利用刚刚写的变量去下载,后面的题目会用,现在不用。这个文件不是剧本
[alice@control ansible]$ ansible-galaxy collection install \
http://server1.lab0.example.com/materials/ansible-posix-1.5.1.tar.gz \
-p /home/alice/ansible/collections
[alice@control ansible]$ ansible-galaxy collection install \
http://server1.lab0.example.com/materials/community-general-6.3.0.tar.gz \
-p /home/alice/ansible/collections

08. 创建及使用自定义角色


根据下列要求,在/home/alice/ansible/roles 中创建名为 httpd 的角色:
1)安装 httpd 软件,并能够开机自动运行
2)开启防火墙,并允许 httpd 通过
3)使用模板 index.html.j2,用来创建/var/www/html/index.html 网页,
内容如下(HOSTNAME 是受管理节点的完全域名,IPADDRESS 是 IP 地址):
Welcome to HOSTNAME on IPADDRESS
然后创建剧本 /home/alice/ansible/myrole.yml,为 webtest 主机组启用 httpd 角色。
解题参考:
//初始化角色目录
[alice@control ansible]$ ansible-galaxy init roles/httpd
//查看创建的目录结构
[alice@control ansible]$ ls roles/httpd
//创建网页模板文件
[alice@control ansible]$ vim roles/httpd/templates/index.html.j2
Welcome to {{ansible_fqdn}} on {{ansible_enp1s0.ipv4.address}}
//编辑任务文件
[alice@control ansible]$ vim roles/httpd/tasks/main.yml
---
# tasks file for /home/alice/ansible/roles/httpd
- yum: #安装 httpd 软件
       name: httpd
- service: #启动服务并设置开机自启动
       name: httpd
       state: started
       enabled: yes

- firewalld:

    service: http

    permanent: true

    immediate: true

    state: enabled
- template: #拷贝网页模板文件到被管理端主机
      src: index.html.j2
      dest: /var/www/html/index.html
//编写剧本,调用自定义的角色
[alice@control ansible]$ vim myrole.yml
---
- hosts: webtest #远程的被管理端主机
roles:
- httpd #调用 httpd 角色
//执行剧本
[alice@control ansible]$ ansible-playbook myrole.yml
//注意:本题以及后续所有题目,均不考虑防火墙问题,实际考试需要根据需要自行解决

09. 使用之前通过 galaxy 下载的角色


创建剧本/home/alice/ansible/web.yml,满足下列需求:
1)该剧本中包含一个 play,可以在 test05 主机组运行 haproxy 角色
(此角色已经配置好网站的负载均衡服务)
2)多次访问 http://node5.lab0.example.com 可以输出不同主机的欢迎页面
3)该剧本中包含另一个 play,可以在 webtest 主机组运行 myphp 角色
(此角色已经配置好网站的 php 页面)
4)多次访问 http://node5.lab0.example.com/index.php 也输出不同主机的欢迎页面
解题参考:
//编写剧本文件
[alice@control ansible]$ vim web.yml
---
- hosts: test05 #远程主机
roles:
- haproxy #调用 haproxy 角色
- hosts: webtest #远程主机
roles:
- myphp #调用 myphp 角色
//执行剧本
[alice@control ansible]$ ansible-playbook web.yml
[alice@control ansible]$ curl http://node5.lab0.example.com
[alice@control ansible]$ curl http://node5.lab0.example.com/index.php
#测试结果


10. 编写剧本管理远程分区


创建剧本/home/alice/ansible/part.yml,用来为所有受管机完成以下部署:
1)使用 vdc,创建一个分区,大小为 2000MiB
2)使用 xfs 文件系统格式化该逻辑卷
3)如果无法创建要求的大小,应显示错误信息 insufficient free space,
并改为 800MiB
4)如果 vdc 不存在,应显示错误信息 vdc not found
5)不需要挂载逻辑卷
解题参考:
//编写剧本文件(仅适用于 RHEL8)
[alice@control ansible]$ vim part.yml
---
- hosts: all #远程主机
  tasks:
     - fail:
         msg: "vdc not found"
       when: "'vdc' not in ansible_devices" #目标不存在则显示报错
- block: #配置指定块
- p arted: #使用模块创建 2G 分区
device: /dev/vdc
number: 1
state: present
part_end: 2GiB
rescue: #若 2G 逻辑卷创建失败需要执行的任务
- debug:
msg: "insufficient free space" #显示提示信息
- parted: #使用模块创建 800M 分区
device: /dev/vdc
number: 1
state: present
part_end: 800MiB
always: #始终都要执行的任务
- filesystem: #格式化分区
fstype: xfs
dev: /dev/vdc1
//执行剧本(仅适用于 RHEL8)
[alice@control ansible]$ ansible-playbook part.yml
//编写剧本文件(仅适用于 RHEL9)
ansible-core 不包含 parted 和 filesystem 模块,前面下载的 collection 有 parted 等模块
模块名称不知道可以通过 ansible-doc -l |grep 关键词查看
[alice@control ansible]$ vim part.yml

---
- hosts: all #远程主机
tasks:
- fail:
msg: "vdc not found"
when: "'vdc' not in ansible_devices" #目标不存在则显示报错
- block: #配置指定块
- community.general.parted: #使用模块创建 2G 分区
device: /dev/vdc
number: 1
state: present
part_end: 2GiB
rescue: #若 2G 逻辑卷创建失败需要
执行的任务
- debug:
msg: "insufficient free space" #显示提示信息
- community.general.parted: #使用模块创建 800M 分区
device: /dev/vdc
number: 1
state: present
part_end: 800MiB
always: #始终都要执行的任务
- community.general.filesystem: #格式化分区
fstype: xfs
dev: /dev/vdc1


[alice@control ansible]$ ansible-playbook part.yml
或者
[alice@control ansible]$ ansible-navigator run part.yml -m stdout

11. 编写剧本远程管理逻辑卷


创建剧本 /home/alice/ansible/lvm.yml,用来为所有受管机完成以下部署:
1)在卷组 search 中创建名为 mylv 的逻辑卷,大小为 1000MiB
2)使用 ext4 文件系统格式化该逻辑卷
3)如果无法创建要求的大小,应显示错误信息 insufficient free space,
---
- hosts: all #远程主机
tasks:
- fail:
msg: "vdc not found"
when: "'vdc' not in ansible_devices" #目标不存在则显示报错
- block: #配置指定块
- community.general.parted: #使用模块创建 2G 分区
device: /dev/vdc
number: 1
state: present
part_end: 2GiB
rescue: #若 2G 逻辑卷创建失败需要
执行的任务
- debug:
msg: "insufficient free space" #显示提示信息
- community.general.parted: #使用模块创建 800M 分区
device: /dev/vdc
number: 1
state: present
part_end: 800MiB
always: #始终都要执行的任务
- community.general.filesystem: #格式化分区
fstype: xfs
dev: /dev/vdc1
并改为 500MiB
4)如果卷组 search 不存在,应显示错误信息 VG not found
5)不需要挂载逻辑卷
解题参考:
//编写剧本文件(仅适用于 RHEL8)
[alice@control ansible]$ vim lvm.yml
---
- hosts: all #远程主机
tasks:
- debug:
msg: "VG not found"
when: "'search' not in ansible_lvm.vgs" #目标不存在则显示报错
failed_when: "'search' not in ansible_lvm.vgs" #停止后面的任务
- block: #配置指定块
- lvol: #使用模块创建逻辑 1G 卷
vg: search
lv: mylv
size: 1000m
rescue: #若 1G 逻辑卷创建失败需要执行的任务
- debug:
msg: "insufficient free space" #显示提示信息
- lvol: #使用模块创建 500M 逻辑卷
vg: search
lv: mylv
size: 500m
always: #始终都要执行的任务
- filesystem:
fstype: ext4 #格式化逻辑卷
dev: /dev/search/mylv
//执行剧本
[alice@control ansible]$ ansible-playbook lvm.yml
//编写剧本文件(仅适用于 RHEL9)
ansible-core 不包含 lvol 和 filesystem 模块,前面下载的 collection 有 lvol 等模块
[alice@control ansible]$ vim lvm.yml

---
- hosts: all #远程主机
tasks:
- fail:
msg: "VG not found"
when: "'search' not in ansible_lvm.vgs" #目标不存在则显示
报错
- block: #配置指定块
- community.general.lvol: #使用模块创建逻辑 1G

vg: search
lv: mylv
size: 1000m
rescue: #若 1G 逻辑卷创建失败需要执行的任

- debug:
msg: "insufficient free space" #显示提示信息
- community.general.lvol: #使用模块创建 500M 逻辑

vg: search
lv: mylv
size: 500m
always: #始终都要执行的任务
- community.general.filesystem:
fstype: ext4 #格式化逻辑卷
dev: /dev/search/mylv
[alice@control ansible]$ ansible-playbook lvm.yml
或者
[alice@control ansible]$ ansible-navigator run lvm.yml -m stdout

12. 根据模板部署主机文件


从 http://server1.lab0.example.com/materials/newhosts.j2 下载模板文件
完成该模板文件,用来生成新主机清单(主机的显示顺序没有要求),结构如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.25.254.101 node1.lab0.example.com node1
172.25.254.102 node2.lab0.example.com node2
172.25.254.103 node3.lab0.example.com node3
172.25.254.104 node4.lab0.example.com node4
172.25.254.105 node5.lab0.example.com node5
创建剧本/home/alice/ansible/newhosts.yml,它将使用上述模板在 test01 主机组的主机上
生成文件/etc/newhosts。
解题参考:
//下载模板文件,备注:如果没有 wget 软件可以自己 yum 安装
[alice@control ansible]$ wget
http://server1.lab0.example.com/materials/newhosts.j2
//修改模板文件的内容,默认只有 2 行,题目要求补充后面的所有内容
[alice@control ansible]$ vim newhosts.j2 #(网卡名不要照抄,看实际情况)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for i in groups.all %}
{{hostvars[i].ansible_enp1s0.ipv4.address}} {{hostvars[i].ansible_fqdn}}
{{hostvars[i].ansible_hostname}}
{% endfor %}
//编写剧本文件
[alice@control ansible]$ vim newhosts.yml
- hosts: all #远程所有主机获取 facts 变量信息
- hosts: test01 #远程 test01 组
tasks:
- template: #使用模块拷贝模板文件到远程主机
src: newhosts.j2
dest: /etc/newhosts
//执行剧本
[alice@control ansible]$ ansible-playbook newhosts.yml

13. 编写剧本修改远程文件内容


创建剧本 /home/alice/ansible/newissue.yml,满足下列要求:
1)在所有清单主机上运行,替换/etc/issue 的内容
2)对于 test01 主机组中的主机,/etc/issue 文件内容为 test01
3)对于 test02 主机组中的主机,/etc/issue 文件内容为 test02
4)对于 web 主机组中的主机,/etc/issue 文件内容为 Webserver
解题参考:
[alice@control ansible]$ vim inventory
[test01]
node1
[test02]
node2
[web]
node3
node4
[test05]
node5
[webtest:children]
web
[test01:vars] #给 test01 组定义变量
con=test01 #con 是变量名,test01 是变量的值
[test02:vars] #给 test01 组定义变量
con=test02 #con 是变量名,test02 是变量的值
[web:vars] #给 test 组定义变量
con=Webserver #con 是变量名,Webserver 是变量的值
//编写剧本文件
[alice@control ansible]$ vim newissue.yml
---
- hosts: all
tasks:
- copy:
content: "{{con}}"
dest: /etc/issue
//执行剧本
[alice@control ansible]$ ansible-playbook newissue.yml

14. 编写剧本部署远程 Web 目录


创建剧本/home/alice/ansible/webdev.yml,满足下列要求:
1)在 test01 主机组运行
2)创建目录/webdev,属于 webdev 组,权限为 rwxrwxr-x,具有 SetGID 特殊权限
3)使用符号链接/var/www/html/webdev 链接到/webdev 目录
4)创建文件/webdev/index.html,内容是 It's works!
5)查看 test01 主机组的 web 页面 http://node1/webdev/将显示 It's works!
解题参考:
//编写剧本文件
[alice@control ansible]$ vim webdev.yml
---
- hosts: test01 #远程主机
  tasks:
    - yum: #调用模块安装 httpd 软件
         name: httpd
    - service: #调用模块启动服务,设置开机自启动
       name: httpd
       state: started
        enabled: yes
    - group: #调用模块创建一个组
        name: webdev
         state: present
     - file: #使用 file 模块创建目录
         path: /webdev
         state: directory
         group: webdev #目录的所属组
         mode: '2775' #目录的权限
     - file: #使用 file 模块给目录创建一个软连接
           src: /webdev
           dest: /var/www/html/webdev
           state: link

     - copy: #使用 copy 模块拷贝网页文件内容
            content: "It's works!"
             dest: /webdev/index.html
     - shell: chcon -R -t httpd_sys_content_t /webdev #设置 SELinux
//执行剧本  -R是递归修改
[alice@control ansible]$ ansible-playbook webdev.yml
[alice@control ansible]$ curl http://node1/webdev/
#验证网页是否能访问

15. 编写剧本为受管机生成硬件报告


创建名为/home/alice/ansible/hardware.yml 的 playbook,满足下列要求:
1)使所有受管理节点从以下 URL 下载文件:
http://server1.lab0.example.com/materials/hardware.empty
2)并用来生成以下硬件报告信息,存储在各自的/root/hardware.txt 文件中
清单主机名称
以 MB 表示的总内存大小
BIOS 版本
硬盘 vda 的大小
硬盘 vdb 的大小
解题参考:
//编写剧本文件
[alice@control ansible]$ vim hardware.yml
---
- hosts: all #远程主机
tasks:
- get_url: #使用 get_url 模块下载网站上面的文件
url: http://server1.lab0.example.com/materials/hardware.empty
dest: /root/hardware.txt
- replace: #使用 replace 模块修改下载的模板文件
path: /root/hardware.txt
regexp: inventoryhostname
replace: "{{ansible_hostname}}"
- replace: #使用 replace 模块修改下载的模板文件
path: /root/hardware.txt
regexp: memory_in_MB
replace: "{{ansible_memtotal_mb}}"
- replace: #使用 replace 模块修改下载的模板文件
path: /root/hardware.txt
regexp: BIOS_version
replace: "{{ansible_bios_version}}"
- replace: #使用 replace 模块修改下载的模板文件
path: /root/hardware.txt
regexp: disk_vda_size
replace: "{{ansible_devices.vda.size}}"
- replace: #使用 replace 模块修改下载的模板文件
path: /root/hardware.txt
regexp: disk_vdb_size
replace: "{{ansible_devices.vdb.size if ansible_devices.vdb.size is
defined else 'NONE'}}"
//执行剧本
[alice@control ansible]$ ansible-playbook hardware.yml


16. 创建保险库文件


创建 ansible 保险库 /home/alice/ansible/passdb.yml,其中有 2 个变量:
1)pw_dev,值为 ab1234
2)pw_man,值为 cd5678
加密和解密该库的密码是 pwd@1234,密码存在/home/alice/ansible/secret.txt 中
解题参考:
//创建密码变量文件
[alice@control ansible]$ vim passdb.yml
pw_dev: ab1234
pw_man: cd5678
//创建加密的密码文件
[alice@control ansible]$ vim secret.txt
pwd@1234
//使用密码文件加密变量文件
[alice@control ansible]$ ansible-vault encrypt \
--vault-id secret.txt passdb.yml


17. 编写剧本为受管机批量创建用户


从以下 URL 下载用户列表,保存到/home/alice/ansible 目录下:
http://server1.lab0.example.com/materials/name_list.yml
创建剧本/home/alice/ansible/users.yml 的 playbook,满足下列要求:
1)使用之前题目中的 passdb.yml 保险库文件提供的密码做用户密码
2)职位描述为 dev 的用户应在 test01、test02 主机组的受管机上创建,
使用 pw_dev 变量分配密码,是补充组 devops 的成员
3)职位描述为 man 的用户应在 web 主机组的受管机上创建,
使用 pw_man 变量分配密码,是补充组 opsmgr 的成员
4)该 playbook 可以使用之前题目创建的 secret.txt 密码文件运行
解题参考:
//使用 wget 按要求下载文件
[alice@control ansible]$ wget
http://server1.lab0.example.com/materials/name_list.yml
//使用 cat 命令查看文件内容
[alice@control ansible]$ cat name_list.yml
users:
- name: tom
job: dev
- name: jerry
job: man
//编写剧本文件
[alice@control ansible]$ vim users.yml
---
- hosts: test01,test02 #远程主机
vars_files: #加载 2 个变量文件
- name_list.yml
- passdb.yml
tasks:
- group: #使用 group 模块创建组
name: devops
- user: #使用 user 模块创建用户、设置密码、设置用户所属组
name: "{{item.name}}"
password: "{{ pw_dev | password_hash('sha512')}}"
groups: devops
loop: "{{users}}" #对 users 变量进行循环
when: item.job == 'dev' #当 job 是 dev 时执行 user 模块创建用户
- hosts: web #远程主机
vars_files: #加载 2 个变量文件
- name_list.yml
- passdb.yml
tasks:
- group: #使用 group 模块创建组
name: opsmgr
- user: #使用 user 模块创建用户、设置密码、设置用户所属组
name: "{{item.name}}"
password: "{{ pw_man | password_hash('sha512')}}"
groups: opsmgr
loop: "{{users}}" #对 users 变量进行循环
when: item.job == 'man' #当 job 是 man 时执行 user 模块创建用户
//执行剧本(passdb.yml 文件是加密的,执行剧本需要提供加密的密码)
[alice@control ansible]$ ansible-playbook \
--vault-id secret.txt users.yml


18. 重设保险库密码


从以下 URL 下载保险库文件到/home/alice/ansible 目录:
http://server1.lab0.example.com/materials/topsec.yml
当前的库密码是 banana,新密码是 big_banana,请更新该库密码
解题参考:
//下载素材文件
[alice@control ansible]$ wget
http://server1.lab0.example.com/materials/topsec.yml
//使用 ansible-vault rekey 命令给加密的文件修改密码
[alice@control ansible]$ ansible-vault rekey topsec.yml
Vault password: <旧密码>
New Vault password: <新密码>
Confirm New Vault password: <再输入新密码>
##server1 主机执行命令判题:
[root@server1 ~]# rhce all

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值