ansible循环+判断
给node1添加一块5G的硬盘
给node2添加一块2G的硬盘
node3不添加硬盘
写一个partition.yml的playbook,满足如下要求:
给所有的受控主机创建分区,创建2500M的分区,然后对分区进行格式化,格式化为xfs的文件系统。
如果不能满足创建2500M的分区,则显示错误消息为:disk size not enough,接着改为创建1000M。
如果没有/dev/sdb硬盘,则显示错误消息为:the device is not sdb
[student@server ansible]$ cat partition.yml
---
- name: create vg
hosts: node1,node2,node3
tasks:
- name: test sdb
shell: lsblk | grep -w sdb
register: sdb
ignore_errors: yes
- name: sdb
debug:
msg: the device not is sdb
when: sdb.rc != 0
- name: create vg
block:
- name: creste 2500
parted:
device: /dev/sdb
number: 1
state: present
part_end: 2500MiB
rescue:
- name: output fail message
debug:
msg: disk size not enough
- name: create 1000
parted:
device: /dev/sdb
number: 1
state: present
part_end: 1000MiB
when: sdb.rc == 0
always:
- name: format for lv
filesystem:
dev: /dev/sdb1
fstype: ext4
[student@server ansible]$ ansible-playbook partition.yml
PLAY [create vg] ***********************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************
ok: [node1]
ok: [node2]
ok: [node3]
TASK [test sdb] ************************************************************************************************************
fatal: [node3]: FAILED! => {"changed": true, "cmd": "lsblk | grep -w sdb", "delta": "0:00:00.006009", "end": "2022-10-31 20:10:30.995414", "msg": "non-zero return code", "rc": 1, "start": "2022-10-31 20:10:30.989405", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring
changed: [node1]
changed: [node2]
TASK [sdb] *****************************************************************************************************************
skipping: [node1]
skipping: [node2]
ok: [node3] => {
"msg": "the device not is sdb"
}
TASK [creste 2500] *********************************************************************************************************
fatal: [node3]: FAILED! => {"changed": false, "err": "Error: Could not stat device /dev/sdb - No such file or directory.\n", "msg": "Error while getting device information with parted script: '/sbin/parted -s -m /dev/sdb -- unit 'KiB' print'", "out": "", "rc": 1}
fatal: [node2]: FAILED! => {"changed": false, "err": "Error: The location 2500MiB is outside of the device /dev/sdb.\n", "msg": "Error while running parted script: /sbin/parted -s -m -a optimal /dev/sdb -- unit KiB mklabel msdos mkpart primary 0% 2500MiB", "out": "", "rc": 1}
changed: [node1]
TASK [output fail message] *************************************************************************************************
ok: [node2] => {
"msg": "disk size not enough"
}
ok: [node3] => {
"msg": "disk size not enough"
}
TASK [create 1000] *********************************************************************************************************
skipping: [node3]
changed: [node2]
TASK [format for lv] *******************************************************************************************************
fatal: [node3]: FAILED! => {"changed": false, "msg": "Device /dev/sdb1 not found."}
changed: [node2]
changed: [node1]
PLAY RECAP *****************************************************************************************************************
node1 : ok=4 changed=3 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
node2 : ok=5 changed=3 unreachable=0 failed=0 skipped=1 rescued=1 ignored=0
node3 : ok=4 changed=1 unreachable=0 failed=1 skipped=1 rescued=1 ignored=1
[root@node2 ~]# lsblk | grep sdb
sdb 9:27 0 2G 0 disk
└─sdb1 9:28 0 999M 0 part
[root@node2 ~]# blkid /dev/sdb1
/dev/sdb1: UUID="56jd43mh-1rd4-4ebe-a807-fc8e3b240e42" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="94rt80o6-01"
[root@node1 ~]# lsblk | grep sdb
sdb 9:27 0 5G 0 disk
└─sdb1 9:28 0 2.5G 0 part
[root@node1 ~]# blkid /dev/sdb1
/dev/sdb1: UUID="7yt6n8hv-1q20-9h6l-bh0c-b5007ece904c" TYPE="ext4" PARTUUID="9ik6td43-01"