题目描述
创建一个名为 /home/greg/ansible/lv.yml 的 playbook ,它将在所有受管节点上运行以执行下列任务:
创建符合以下要求的逻辑卷:
- 逻辑卷创建在
research卷组中; - 逻辑卷名称为
data; - 逻辑卷大小为
1500 MiB; - 使用
ext4文件系统格式化逻辑卷; - 如果无法创建请求的逻辑卷大小,应显示错误信息,并且应改为使用大小
800 MiB:
Could not create logical volume of that size
- 如果卷组
research不存在,应显示如下错误信息:
Volume group done not exist
- 不要以任何方式挂载逻辑卷。
详细解析
本题需要用到如下 Ansible 模块和关键字:
lvol模块
- 简介:用于创建、删除或更改逻辑卷的大小,可以使用如下命令查看该模块的用法详解和示例:
ansible-doc lvol
常用的参数有:
vg: 在哪个卷组上创建逻辑卷(“逻辑卷”即:lv);lv: 要创建的逻辑卷的名字;size: 要创建的逻辑卷的大小。
filesystem模块
- 简介:用于远程格式化受控端主机上的硬盘,可以使用如下命令查看该模块的用法详解和示例:
ansible-doc filesystem
常用的参数有:
dev: 目标块存储设备的路径;fstype:(要格式化的)文件系统类型。
debug模块
- 简介:该模块是一个调试模块,用于在调试中输出信息,可以使用如下命令查看该模块的用法详解和示例:
ansible-doc debug
常用的参数有:
msg: 指定的调试信息
debug模块一般要和when关键字搭配使用。
block,rescue和always关键字
block, rescue 和 always 这三个关键字一般会搭配使用:当 block 无法执行时,就执行 rescue, 而无论 block 是否成功,都会执行 always.
接下来开始正式的 playbook 编写。
首先,根据题目要求创建并编辑 playbook:
vim /home/greg/ansible/lv.yml
之后,根据题目要求编写出如下 playbook(注意缩进和拼写):
---
- name:
hosts: all
tasks:
- name:
block:
- name:
lvol:
vg: research
lv: data
size: 1500m
rescue:
- name:
debug:
msg: Could not create logical volume of that size
- name:
lvol:
vg: research
lv: data
size: 800m
always:
- name:
filesystem:
dev: /dev/research/data
fstype: ext4
when: "'research' in ansible_lvm.vgs"
- name:
debug:
msg: Volume group done not exist
when: "'research' not in ansible_lvm.vgs"
接着,运行该 playbook:
ansible-playbook /home/greg/ansible/lv.yml
如果上述 playbook 执行时没有报错,我们可以接着使用如下命令查看一下所有受控端主机上的逻辑卷情况,做进一步的验证:
ansible all -m command -a "lvs"