RHCE-B8. 利用playbook在指定主机组创建和使用逻辑卷

Posted 白-胖-子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCE-B8. 利用playbook在指定主机组创建和使用逻辑卷相关的知识,希望对你有一定的参考价值。

红帽RHCE考试下午-RHCE(RH294)

RH294任务概览

  • 考试时间4个小时,6台虚拟机,15道题
  • 原来通过脚本或者集群做的题现在都需要使用playbook实现
  • 考试时大概有6台虚拟服务器,都已经做好了互相的免密
  • 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证
  • 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动
  • 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行
  1. 注意:考试时一定注意要求将playbook放在指定用户的家目录中,用指定的用户登录做题!
  2. 注意:考试的判分方式通过普通用户远程执行指定目录下的playbook或者脚本,如果使用root做题,则没有权限就是零分

8. 利用playbook在指定主机组创建和使用逻辑卷

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

任务要求

  • 创建符合以下要求的逻辑卷:
  1. 逻辑卷创建在 research 卷组中逻辑卷名称为 data
  2. 逻辑卷大小为 1500MiB
  3. 使用ext4 文件系统格式化逻辑卷
  4. 如果无法创建请求的逻辑卷大小,应显示错误消息Could not create logical volume of that size,并且应改为使用大小 800MiB。
  5. 如果卷组research 不存在 ,应显示错误消息Volume group does not exist。
  6. 不要以任何方式挂载逻辑卷
    注意:有的主机上有逻辑卷阿祖,有的主机上没有逻辑卷,有的主机上不足够创建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可以在创建模拟环境的卷组结构

完成步骤

  • 考试只需要做以下步骤
  1. 创建题目中指定的playbook
    首先,在所有节点下运行: hosts: all
  2. 在playbook中,写创建指定大小的逻辑卷,使用block分组循环的方式进行,block有三个内容
    先创建指定大小1500m的逻辑卷,使用lvol模块专门创建逻辑卷
    如果创建不成则报指定的错误信息并创建指定大小800m的逻辑卷,使用rescue解决第一部分没完成的主机接下来做的任务
    同时总是将逻辑卷格式化指定的格式:ext4或者xfs
    写when,判断当题中指定要求的卷组存在的时候,才做以上操作
  3. 在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生成所有清单主机指定硬件信息报告

RHCE-B3. 创建playbook安装 php 和 mariadb 软件包到指定主机组

RHCE-B9. 利用playbooke生成主机清单文件

RHCE-B11. 利用playbook创建 Web 内容目录并能够访问