RHCE-B8. 利用playbook在指定主机组创建和使用逻辑卷
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCE-B8. 利用playbook在指定主机组创建和使用逻辑卷相关的知识,希望对你有一定的参考价值。
红帽RHCE考试下午-RHCE(RH294)
RH294任务概览
- 考试时间4个小时,6台虚拟机,15道题
- 原来通过脚本或者集群做的题现在都需要使用playbook实现
- 考试时大概有6台虚拟服务器,都已经做好了互相的免密
- 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证
- 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动
- 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行
- 注意:考试时一定注意要求将playbook放在指定用户的家目录中,用指定的用户登录做题!
- 注意:考试的判分方式通过普通用户远程执行指定目录下的playbook或者脚本,如果使用root做题,则没有权限就是零分
8. 利用playbook在指定主机组创建和使用逻辑卷
- 创建一个名为/home/student/ansible/lv.yml 的 playbook,
- 它将在所有受管节点上运行以执行下列任务:
任务要求
- 创建符合以下要求的逻辑卷:
- 逻辑卷创建在 research 卷组中逻辑卷名称为 data
- 逻辑卷大小为 1500MiB
- 使用ext4 文件系统格式化逻辑卷
- 如果无法创建请求的逻辑卷大小,应显示错误消息Could not create logical volume of that size,并且应改为使用大小 800MiB。
- 如果卷组research 不存在 ,应显示错误消息Volume group does not exist。
- 不要以任何方式挂载逻辑卷
注意:有的主机上有逻辑卷阿祖,有的主机上没有逻辑卷,有的主机上不足够创建1500但能创建800
准备个工作
- 考试期间不需要做
- 5 台虚拟机均没有对应的卷组和逻辑卷,
- 因此先准备分区和卷组(考试不需要)
- 设置server[a:b]卷组为 2G,
- server[c:d]卷组为 1G,
- bastion 没有卷组
[student@workstation ansible]$ vim lvm_pre.yml
---
- name: create volume group
hosts: dev, test
tasks:
- name: Create partition for LVM
parted:
device: /dev/vdb
number: 1
flags: [ lvm ]
state: present
part_start: 1MiB
part_end: 2GiB
- name: create research vg
lvg:
vg: research
pvs: /dev/vdb1
- name: create volume group
hosts: prod
tasks:
- name: Create partition for LVM
parted:
device: /dev/vdb
number: 1
flags: [ lvm ]
state: present
part_start: 1MiB
part_end: 1GiB
- name: create research vg
lvg:
vg: research
pvs: /dev/vdb1
[student@workstation ansible]$ ansible-playbook lvm_pre.yml
- 自己验证去
for i in server{a..d};do ssh root@$i "vgs";done
- 在练习环境172.25.250.250yum源目录总的有个lvm_pre.yml可以在创建模拟环境的卷组结构
完成步骤
- 考试只需要做以下步骤
- 创建题目中指定的playbook
首先,在所有节点下运行: hosts: all - 在playbook中,写创建指定大小的逻辑卷,使用block分组循环的方式进行,block有三个内容
先创建指定大小1500m的逻辑卷,使用lvol模块专门创建逻辑卷
如果创建不成则报指定的错误信息并创建指定大小800m的逻辑卷,使用rescue解决第一部分没完成的主机接下来做的任务
同时总是将逻辑卷格式化指定的格式:ext4或者xfs
写when,判断当题中指定要求的卷组存在的时候,才做以上操作 - 在playbook中,写题中要求的报错信息
写when,当题中要求的卷组不存在时,报以上的错
注意:写when时候的事实变量需要通过ansible servera -m setup > setup.log 获取,在里边找到vgs所在属性的标签
[student@workstation ansible]$ vim lv.yml
---
- name: create lvm
hosts: all
tasks:
- name: create logical volume
block: ## 使用块任务进行分组,是一个人物集合
- name: create lvm 1500m
lvol: ## 使用lvol模块创建逻辑卷
vg: research ## 基于哪个卷组创建逻辑卷
lv: data ## 创建逻辑卷的名字
size: 1500m ## 创建逻辑卷的大小
rescue: ## 使用rescue解决上一部分没能完成任务的主机
- name: output fail msg
debug: ## 使用debug模块显示提示信息
msg: Could not create logical volume of that size
- name: create lvm 800m
lvol:
vg: research
lv: data
size: 800m
always: ## 所有的主机都要进行的任务
- name: format lvm
filesystem:
fstype: ext4
dev: /dev/research/data
when: "'research' in ansible_facts.lvm.vgs" ## ansible_facts.lvm.vgs是个变量,要像找时间变量那样去找
- name: search not exists
debug:
msg: Volume group does not exist
when: "'research' not in ansible_facts.lvm.vgs"
[student@workstation ansible]$ ansible-playbook lv.yml
- 自己验证去
for i in server{a..d};do ssh root@$i "lvs";done
考察的知识点
playbook使用 when
- when语句可以实现条件测试。
- 如果需要根据变量、facts或此前任务的执行结果来做为某task执行与否的前提时要用到条件测试,
- 可以通过在task后添加when子句即可使用条件测试,使用jinja2的语法格式
范例:条件判断
---
- hosts: websrvs
remote_user: root
tasks:
- name: "shutdown RedHat flavored systems"
command: /sbin/shutdown -h now
when: ansible_os_family == "RedHat"
范例: 判断服务状态决定是否重新启动
---
- hosts: websrvs
tasks :
- name: Check nginx Service #检查nginx服务是否是活动的
command: systemctl is-active nginx
ignore_ errors: yes
register: check_nginx
- name: Httpd Restart #如果check nginx执行命令结果成功,即check_nginx.rc等于0,则执行重启nginx,否则跳过
service: name=nginx state=restarted
when: check_nginx.rc == 0
playbook使用 block分组
- 在需要满足同一个条件下,执行多个任务时,就需要进行block分组了。而不再每个任务都是用when。
[root@ansible ansible]#cat block.yml
---
- hosts: localhost
tasks:
- block:
- debug: msg="first"
- debug: msg="second"
when:
- ansible_facts['distribution'] == "CentOS"
- ansible_facts['distribution_major_version'] == "8"
#相当于下面写法
---
- hosts: localhost
tasks:
- debug: msg="first"
when:
- ansible_facts['distribution'] == "CentOS"
- ansible_facts['distribution_major_version'] == "8"
- debug: msg="second"
when:
- ansible_facts['distribution'] == "CentOS"
- ansible_facts['distribution_major_version'] == "8"
playbook使用block和rescue
- 当block的内容执行错误时就执行rescue的内容,当block执行成功时不会执行rescue的内容
[root@server4 bl]# cat BRtest.yml
---
- hosts: testBR
remote_user: root
tasks:
- block:
- shell: "mkdir /exist"
- shell: "mkdir /notexist"
rescue:
- debug:
msg: "I'm the King!"
playbook使用block和always
- block执行错我时执行rescue,而always无论block是否成功执行都会执行
[root@server4 bl]# cat BRtest.yml
---
- hosts: testBR
remote_user: root
tasks:
- block:
- shell: "mkdir /exist"
- shell: "mkdir /notexist"
rescue:
- debug:
msg: "I'm the King!"
always:
- debug:
msg: "F*ck the King!"
ansible创建逻辑卷lvol模块
- 使用lvol可以创建、删除逻辑卷以及动态改变逻辑卷大小。
lv ## 定义逻辑卷名称
size ## 定义逻辑卷大小
vg ## 逻辑卷的空间来自哪个vg
state ## present创建(默认) 或者 absent删除
force ## 强制删除或者调整逻辑卷大小
ansible格式化磁盘filesystem模块
- 使用filesystem模块可以创建或者删除磁盘上的文件系统,即所谓的格式化
dev ## 要格式化的分区
fstype ## 文件系统类型 比如 ext4 xfs
force ## 强制格式化,如果以前分区中有数据
以上是关于RHCE-B8. 利用playbook在指定主机组创建和使用逻辑卷的主要内容,如果未能解决你的问题,请参考以下文章
RHCE-B10. 利用playbook在不同主机组修改文件内容
RHCE-B12. 利用playbook生成所有清单主机指定硬件信息报告
RHCE-B12. 利用playbook生成所有清单主机指定硬件信息报告