rhce

CE习题指导

注意:此指导主要针对重点进行分析,有些简单的步骤没有涉及,大家参考习题答案即可

习题练熟后即可找班主任约考,考试那天要带身份证,签字笔,准备一个电子邮箱(接收证书用)

01,安装和配置 ansible 环境

该题绝不允许出任何错误!

1)比较容易,su - alice切换到alice账户后,使用sudo yum -y install ansible即可

2)按参考习题答案写即可,没有难度,不过要记住嵌套组的写法[webtest:children]

3)这个需求是写配置文件,比较麻烦,不过可以参考默认的配置文件,复制粘贴即可

以下内容都可以在默认配置文件/etc/ansible/ansible.cfg 里面找到,搜索一下即可

[defaults]

inventory = inventory  //主机清单文件

remote_user = alice  //连接受管机的远程用户名

roles_path = roles  //指定默认的角色目录

[privilege_escalation]  //设置用户 sudo 提权

become=True  //需要提权

become_method=sudo  //提权方式为 sudo

become_user=root  //提权为 root

become_ask_pass=False  //无需验证密码

----------------------------------------------------------------------------

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

该题绝不允许出任何错误!

该题目的是给所有被控主机配2个yum仓库,先用ansible-doc -l | grep yum 查到 搭建yum的模块名字叫 yum_repository,然后ansible-doc  yum_repository 可以看帮助,里面有大部分参数,可以通过搜索EXAMPLE找到各种例子。

最后通过脚本的方式把命令写进去,别忘记加x权限给脚本

另外题目给的比如仓库名、描述、仓库软件源地址等都可以用复制粘贴的方式避免输入错误

----------------------------------------------------------------------------

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

该题目是第一道剧本题,非常简单,属于送分题,按参考习题答案多练习即可。

这种剧本题大家可能在不同场合碰到了不同书写方式,比如yum模块装包这段:

- yum: pkg="php,tftp"

- yum:  

    name:

- php

- tftp

两种写法最终都可以成功安装软件包,具体用哪一种不必纠结,都可以,自己决定即可,只要最终完成题目需求。

-----------------------------------------------------------------------------

04. 安装并使用系统角色

第一道角色的题,难度不高,先用yum list | grep roles 命令查到系统角色包叫rhel-system-roles,用yum安装即可,然后通过rpm -ql rhel-system-roles命令查看到这个包所涉及到的目录有个叫/usr/share/ansible/roles/的,那些系统角色都在里面。

比如要使用timesync这个角色,可以先执行

cp -r /usr/share/ansible/roles/rhel-system-roles.timesync  roles/timesync

将rhel-system-roles.timesync目录拷贝到/home/alice/ansible/roles里

然后 cat roles/timesync/README.md可以参考帮助文档编写剧本文件找到下面内容

vars:

    timesync_ntp_servers:

       - hostname: foo.example.com

        iburst: yes

将其中的域名改成题目要求的ip即可,详细剧本可以参考习题答案

注意该剧本在执行时可能会遇到红色错误提示,可以无视即可,只要最终失败任务数量为0即可

---------------------------------------------------------------------------

另外该系统角色也可以配置selinux,方法如下

cp -r  /usr/share/ansible/roles/rhel-system-roles.selinux/  /home/alice/ansible/roles/selinux   //拷贝角色到roles目录

cat /home/alice/ansible/roles/selinux/README.md     //查看 readme 帮助文档

[alice@control ansible]$ vim /home/alice/ansible/selinux.yml    //编写剧本文件,给所有被控主机开启selinux

---

- hosts: all

  vars: //设置剧本变量,变量参考 README 文档

    selinux_policy: targeted

    selinux_state: enforcing      //开启selinux

  roles:

    - role: selinux    //调用角色

然后用ansible-playbook selinux.yml执行剧本

----------------------------------------------------------------------------

05. 通过 galaxy 安装角色

比较容易的题,送分,参考习题答案写即可

注意,像http://study.lab0.example.com/roles/haproxy.tar这样的路径要复制粘贴避免错误,还有该题的yml文件是写在roles下!

最后执行ansible-galaxy install -r roles/down.yml 即可让新角色安装到roles目录中,因为配置文件ansible.cfg中指定了角色的位置就是roles目录

注意该题和后面的  ”创建及使用自定义角色”  与  “使用之前通过 galaxy 下载的角色” 两道题是连贯的,要按顺序做

------------------------------------------------------------------------------

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

步骤比较多的题,难度中等,多利用ansible-doc查看模块用法可以比较轻松的完成

比如防火墙可以用ansible-doc firewalld,然后搜索/EXAMPLE

另外Welcome to HOSTNAME on IPADDRESS 这句话要复制粘贴到index.html.j2中,然后修改其中的HOSTNAME为变量 {{ ansible_fqdn }},代表完全域名,IPADDRESS改为 {{ ansible_eth0.ipv4.address }}代表网卡ip,注意这里考试时不一定网卡就叫eth0,可以通过ip  add  show查看

整个答题过程参考习题答案写即可

------------------------------------------------------------------------------

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

这个题是利用test05 主机组(里面就是一个node5主机)运行haproxy角色,这个角色可以实现类似nginx代理服务器的效果(比如之前nginx课程中讲过利用proxy、web1、web2搭建集群,访问proxy会轮询显示web1和web2的页面)

也就是说这个题做完,多次访问node5的网页会看到下面轮询显示node3和node4的页面

其中webtest主机组(里面是node3和node4)要运行 myphp 角色,这样就能得到新的页面index.php

node5不要忘记在剧本中还要关闭防火墙才能顺利让别人访问

整个答题过程参考习题答案写即可

------------------------------------------------------------------------------

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

比较有挑战的题出现了!这个题本身的需求不难,就是利用search卷组创建名叫mylv且大小为1000M的逻辑卷,但是有些被控主机没这个卷组,有些也不够1000M,所以可以按这个思路解决:

首先,把根本就没有search卷组的被控主机踢掉,方法是(以下两种都可以,二选一)

 tasks:

   - debug:

       msg: "VG not found"

     when: "'search' not in ansible_lvm.vgs"     //search不存在则显示报错

failed_when: "'search' not in ansible_lvm.vgs"     //停止后面的任务

 tasks:

   - fail: msg="VG not found"     //喊出这段信息后该主机就算失败,就可以停止后续任务

     when: "'search' not in ansible_lvm.vgs"     //search不存在时执行fail模块的任务

然后使用block完成后续任务

- block:  //配置指令块

    - lvol: lv=mylv size=1000M vg=search force=yes    //创建逻辑卷,大小1000M

 rescue:   //若块操作失败,则执行补救

  - debug: msg="insufficient free space"  //喊出”空间不足”

- lvol: lv=mylv size=500M vg=search force=yes     //改成创建500M大小

- filesystem: dev=/dev/search/mylv fstype=ext4 force=yes    //最后再格式化

整个答题过程参考习题答案写即可

------------------------------------------------------------------------------

如果要求创建普通分区(注意,练习环境可能没有vdc硬盘,可以自己添加,比如给node2添加个2G的,node5添加个1G的)

使用vdc创建1500M分区,使用ext4格式化,空间不够的话改为800M,如果vdc不存在则显示错误信息vdc not found

---

- hosts: all

tasks:

- debug:

msg: "vdc not found"

when: "'vdc' not in ansible_devices" //如果哪个机器没有vdc硬盘,就执行上面的debug任务

failed_when: "'vdc' not in ansible_devices" //如果哪个机器没有vdc硬盘,就算失败,停止之后任务

- block:

- parted: //调用分区模块

device: /dev/vdc //对vdc分区

number: 1 //第1个分区

state: present //执行分区

part_end: 1500MiB //大小1500M

rescue: //当上面任务失败时执行后续任务

- debug:

msg: "insufficient free space" //喊出空间不足

- parted:

device: /dev/vdc

number: 1

state: present

part_end: 800MiB //改成划分800M大小的分区

always:

- filesystem: //最后,凡是成功分区的无论大小都格式化

fstype: ext4 //格式化为ext4文件系统

dev: /dev/vdc1 //对vdc1格式化

ansible all -a 'lsblk' //查看所有主机硬盘信息

ansible node2,node5 -a 'blkid /dev/vdc1' //查看格式化结果是否为ext4

---------------------------------------------------------------

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

首先用wget http://study.lab0.example.com/materials/newhosts.j2 下载模板,进行修改,注意不要复制粘贴题目最终结果,这里要用变量

该文件改成以下状态:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain 4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain 6

{% for i in groups.all %} //这里是调用for循环,groups.all是魔法变量,代表所有主机的主机名,i代表每个不同的主机名循环显示,比如变量hostvars[i].ansible_fqdn这样写,就代表不同主机的完全主机名

{{hostvars[i].ansible_eth0.ipv4.address}} {{hostvars[i].ansible_fqdn}} {{hostvars[i].ansible_hostname}}

{% endfor %} //这里是for语法的结束

---------------------------------------------------------------

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

该题要求在所有主机运行剧本,可以通过编写判断语句分析哪个被控主机在哪个组

这里使用的关键魔法变量是group_names,代表当前被控主机的所在组

- copy:

content: "test01" //该参数可以定义要拷贝的文字

dest: /etc/issue

force: yes

when: "'test01' in group_names" //判断,test01字符串是否在你的组名中,如果在了就说明这个被控主机是在test01组

---------------------------------------------------------------

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

该题步骤比较多,而且有些环节讲究顺序,比如创建目录/webdev,要先创建webdev组,还有题目没说要安装网站,但是最后要让node1以网站形式显示信息,所以要写安装网站的步骤,还有网站的内容不要自己敲,“It's works!”这句话要复制粘贴。

最后不要忘记设置防火墙放行http数据,还有调整selinux上下文,方法如下:

在node1主机敲 ll -Z /webdev 可以查看到红色字体,和ll -Z /var/www/html/的不一样,这就导致selinux限制了网站对/webdev的访问

-rw-r--r--. 1 root root system_u:object_r:default_t:s0 11 May 14 11:51 index.html

root root unconfined_u:object_r:httpd_sys_content_t:s0 7 May 14 11:51 webdev -> /webdev

可以在剧本最后加上一句 -shell: chcon -R -t httpd_sys_content_t /webdev 就能让/webdev满足selinux要求,chcon可以修改selinux上下文,-R是递归,-t是改的类型为httpd_sys_content_t

以下是整个题目剧本参考:(注意,由于复制粘贴问题,所以可能有些该缩进两格的地方显示没缩进,大家自己调节)

---

- hosts: test01

tasks:

- group: //创建组

name: webdev

state: present

- file: //创建目录

name: /webdev //位置在根下

group: webdev //加入的组是webdev

state: directory //类型是目录

mode: "2775" //定义权限,2是setGID的特殊权限,775是普通权限

- yum:

name: httpd //安装网站

- file:

src: /webdev //源文件

name: /var/www/html/webdev //制作连接文件

state: link //文件类型是连接文件

force: yes //即使源不存在也创建,其实可以不写,源肯定存在,刚才已经创建了

- copy:

content: "It's works!" //拷贝的文字

dest: /webdev/index.html //创建网站文件

force: yes // 强制覆盖,默认覆盖,可以不写

- service:

name: httpd //开启网站服务

state: restarted

enabled: yes //开机自启

- firewalld:

service: http //让防火墙放行网站数据

permanent: yes //永久生效

state: enabled //让该防火墙设置启用

immediate: yes //立刻生效

- shell: chcon -R -t httpd_sys_content_t /webdev //修改上下文,让selinux开启的状态下网站依然能正常看到 http://node1/webdev/里面的内容,访问这个地址用server1的浏览器测试

---------------------------------------------------------------

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

该题可以另开一个窗口 通过ansible node1 -m setup | less 命令查看变量

---

- hosts: all

tasks:

- get_url:

url: http://study.lab0.example.com/materials/hardware.empty //下载文件

dest: /root/hardware.txt //下载后改名保存的位置

- replace: //接下来就把键值对按要求替换

path: /root/hardware.txt

regexp: inventoryhostname //替换的内容,这个内容在hardware.emptyhardware.txt里找

replace: "{{inventory_hostname}}" //换成清单中的主机名

- replace:

path: /root/hardware.txt

regexp: memory_in_MB

replace: "{{ansible_memtotal_mb}}" //换成总内存大小txt

- replace:

path: /root/hardware.txt

regexp: BIOS_version

replace: "{{ansible_bios_version}}" //换成bios版本号

- replace:

path: /root/hardware.txt

regexp: disk_vda_size

replace: "{{ansible_devices.vda.size}}" //换成a硬盘大小

- replace:

path: /root/hardware.txt

regexp: disk_vdb_size

replace: "{{ansible_devices.vdb.size if ansible_devices.vdb.size is defined else 'NONE'}}" //换成b硬盘大小,如果没有b硬盘就显示NONE

该题的剧本运行后,可以通过ansible all -a 'cat /root/hardware.txt' 查看结果

---------------------------------------------------------------

13. 创建保险库文件

该题比较简单,直接在control主机完成,由于与下一题有直接关联,要按顺序做,且不能有错

[alice@control ansible]$ echo "pwd@1234" > secret.txt //创建存了密码的文件

[alice@control ansible]$ ansible-vault create passdb.yml --vault-password-file=secret.txt //用刚才的密码文件加密passdb.yml文件,而且里面要写

pw_dev: ab1234 //注意这里的冒号后面有空格

pw_man: cd5678

[alice@control ansible]$ ansible-vault view passdb.yml //输入密码即可查看

---------------------------------------------------------------

14. 编写剧本为受管机批量创建用户,要求使用保险库中的密码

应该是ce考试中最难一题,涉及到了四个文件,users.yml是剧本文件,name_list.yml是账户列表变量文件,passdb.yml是密码变量文件,secret.txt 是存了密码的文件,这里的密码可以解密passdb.yml

- hosts: test01,test02 //按题目要求,先在这两个主机组创建职位描述是dev的账户

vars_files: //依次读取下面两个存了变量的文件

- name_list.yml //账户列表变量文件

- passdb.yml //是密码变量文件

tasks:

- group: //创建组

name: devops //组名叫devops

- user:

name: "{{item.name}}" //创建账户

password: "{{pw_dev |password_hash('sha512')}}" //利用变量pw_dev配置密码

groups: devops //附加组是devops

when: item.job == 'dev' //判断,当职位描述是dev时,才执行创建账户的任务

loop: "{{users}}" //循环调用users里面的变量,这个信息是读取了name_list.yml得到的

- hosts: web //该剧和上述情况基本一致,就是组名、账户名、密码变量等内容不一样,下面不再多做描述

vars_files:

- name_list.yml

- passdb.yml

tasks:

- group:

name: opsmgr

- user:

name: "{{item.name}}"

password: "{{pw_man |password_hash('sha512')}}"

groups: opsmgr

when: item.job == 'man'

loop: "{{users}}"

运行剧本之后,可以分别在test01,test02主机组查看应该只有tom账户,而不会有jerry ,web主机组只有jerry账户,而不会有tom

---------------------------------------------------------------

15. 重设保险库密码

该题是最简单的一道,只要用ansible-vault命令即可查询到rekey是重设密码

具体过程参考习题答案写即可

---------------------------------------------------------------

补充题:

计划任务(cron模块)

使用alice账户每隔5分钟执行date >> ~/abcd.txt任务

---

- hosts: node1

tasks:

- cron: //调用计划任务模块

name: myjob //描述,实际做题时看题目需求,如果没需求可以不写

minute: "*/5" //每隔5分钟,这里只提到了分钟,其他没写就都是 *

job: "date >> ~/abcd.txt" //执行任务

user: alice //为alice定义

[root@node1 ~]# crontab -u alice -l //到node1主机查看

---------------------------------------------------------------

mount模块,可以实现自动挂载

---

- hosts: node5

tasks:

- mount: //挂载模块

path: /xyz //挂载到xyz目录

src: /dev/vdc1 //将vdc1这个分区挂载到上述目录

fstype: ext4 //文件系统

state: mounted //执行挂载任务

[root@node5 ~]# mkdir /xyz //可以在node5上创建这个目录作为测试

[root@node5 ~]# lsblk //执行剧本之后查看

[root@node5 ~]# cat /etc/fstab //执行剧本之后查看

---------------------------------------------------------------

习题练熟后即可找班主任约考,考试那天要带身份证,签字笔,准备一个电子邮箱(接收证书用)

预祝考试顺利!!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值