当前位置: 首页 > news >正文

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-B9. 利用playbooke生成主机清单文件
  • RHCE-B10. 利用playbook在不同主机组修改文件内容
  • RHCE-B11. 利用playbook创建 Web 内容目录并能够访问
  • RHCE-B12. 利用playbook生成所有清单主机指定硬件信息报告
  • RHCE-B13. 创建Ansible密码库,使用文件内密码加密yml
  • RHCE-B14. 基于Ansible密码库创建用户帐户
  • RHCE-B15.更新 Ansible 库的密钥
  • RHCE-B16.编写playbook创建cron计划任务
  • ubuntu和centos创建用户的区别
  • 常见编程语言都是什么类型的?不同类型的语言有什么区别?
  • False等价布尔值bool(value)
  • 写shell脚本的一种开头方式,给你的脚本加个保险
  • 离线安装pyenv的shell脚本
  • Python语言的特点
  • Python中标识符的命名规则
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • CSS 提示工具(Tooltip)
  • es6要点
  • gops —— Go 程序诊断分析工具
  • Gradle 5.0 正式版发布
  • java概述
  • Python 基础起步 (十) 什么叫函数?
  • Webpack 4 学习01(基础配置)
  • 经典排序算法及其 Java 实现
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 用element的upload组件实现多图片上传和压缩
  • 字符串匹配基础上
  • elasticsearch-head插件安装
  • Mac 上flink的安装与启动
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • 组复制官方翻译九、Group Replication Technical Details
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #控制台大学课堂点名问题_课堂随机点名
  • (12)目标检测_SSD基于pytorch搭建代码
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (接口封装)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (转)关于pipe()的详细解析
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ****Linux下Mysql的安装和配置
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .Net Core和.Net Standard直观理解
  • .NET 指南:抽象化实现的基类
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [AIGC 大数据基础]hive浅谈