linux ansible循环+判断
给node1添加一块5G的硬盘
给node2添加一块2G的硬盘
node3不添加硬盘
[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 9G 0 rom
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─cs-root 253:0 0 17G 0 lvm /
└─cs-swap 253:1 0 2G 0 lvm [SWAP]
nvme0n2 259:3 0 5G 0 disk
[root@node2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 9G 0 rom
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─cs-root 253:0 0 17G 0 lvm /
└─cs-swap 253:1 0 2G 0 lvm [SWAP]
nvme0n2 259:3 0 2G 0 disk
写一个partition.yml的playbook,满足如下要求:
给所有的受控主机创建分区,创建2500M的分区,然后对分区进行格式化,格式化为xfs的文件系统。
如果不能满足创建2500M的分区,则显示错误消息为:disk size not enough,接着改为创建1000M。
如果没有/dev/sdb硬盘,则显示错误消息为:the device is not sdb
[root@ansible ~]# su - student
Last login: Mon Oct 24 16:34:21 CST 2022 on pts/0
[student@ansible ~]$ cd ansible/
[student@ansible ansible]$ ls
ansible.cfg inventory roles
[student@ansible ansible]$ vim partition.yml
---
- name: create
hosts: all
tasks:
- name: create
block:
- name: create nvme0n2
parted:
device: /dev/nvme0n2
number: 1
part_start: 10MiB
part_end: 2510MiB
state: present
rescue:
- name: disk size not enough
debug:
msg: disk size not enough
- name: restart nvme0n2
parted:
device: /dev/nvme0n2
number: 1
part_start: 10MiB
part_end: 1010MiB
state: present
always:
- name: mkfs.xfs
filesystem:
fstype: xfs
dev: /dev/nvme0n2p1
when: "'nvme0n2' in ansible_devices"
- name: the device is not nvme0n2
debug:
msg: the device is not nvme0n2
when: "'nvme0n2' not in ansible_devices"
[student@ansible ansible]$ ansible-playbook partition.yml
PLAY [create] ****************************************************************************
TASK [Gathering Facts] *******************************************************************
ok: [node1]
ok: [node2]
ok: [node3]
TASK [create nvme0n2] ********************************************************************
skipping: [node3]
fatal: [node2]: FAILED! => {"changed": false, "err": "Error: The location 2510MiB is outside of the device /dev/nvme0n2.\n", "msg": "Error while running parted script: /sbin/parted -s -m -a optimal /dev/nvme0n2 -- unit KiB mklabel msdos mkpart primary 10MiB 2510MiB", "out": "", "rc": 1}
changed: [node1]
TASK [disk size not enough] **************************************************************
ok: [node2] => {
"msg": "disk size not enough"
}
TASK [restart nvme0n2] *******************************************************************
changed: [node2]
TASK [mkfs.xfs] **************************************************************************
skipping: [node3]
changed: [node2]
changed: [node1]
TASK [the device is not nvme0n2] *********************************************************
skipping: [node1]
skipping: [node2]
ok: [node3] => {
"msg": "the device is not nvme0n2"
}
PLAY RECAP *******************************************************************************
node1 : ok=3 changed=2 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
node2 : ok=4 changed=2 unreachable=0 failed=0 skipped=1 rescued=1 ignored=0
node3 : ok=2 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 9G 0 rom
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─cs-root 253:0 0 17G 0 lvm /
└─cs-swap 253:1 0 2G 0 lvm [SWAP]
nvme0n2 259:3 0 5G 0 disk
└─nvme0n2p1 259:4 0 2.5G 0 part
[root@node2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 9G 0 rom
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─cs-root 253:0 0 17G 0 lvm /
└─cs-swap 253:1 0 2G 0 lvm [SWAP]
nvme0n2 259:1 0 2G 0 disk
└─nvme0n2p1 259:2 0 1000M 0 part