mirror of
https://github.com/mrlesmithjr/ansible-manage-lvm.git
synced 2025-12-14 13:54:58 +03:00
molecule test and idempotence
This commit is contained in:
@@ -1,18 +1,38 @@
|
||||
---
|
||||
- name: centos | installing lvm2
|
||||
yum:
|
||||
package:
|
||||
name: "lvm2"
|
||||
state: "present"
|
||||
become: true
|
||||
|
||||
- name: centos | installing sg3_utils
|
||||
yum:
|
||||
package:
|
||||
name: "sg3_utils"
|
||||
state: "present"
|
||||
become: true
|
||||
|
||||
- name: centos | install xfs tools
|
||||
package:
|
||||
name: "xfsprogs"
|
||||
state: "present"
|
||||
become: yes
|
||||
loop: "{{ lvm_groups|subelements('lvnames') }}"
|
||||
when: >
|
||||
(
|
||||
(item.1 is defined and item.1 != 'None') and
|
||||
(
|
||||
item.1.filesystem is defined and
|
||||
item.1.filesystem == "xfs"
|
||||
)
|
||||
and
|
||||
(
|
||||
item.1.create is defined and
|
||||
item.1.create
|
||||
)
|
||||
)
|
||||
|
||||
- name: centos | checking for scsi devices
|
||||
shell: "sg_scan"
|
||||
command: "sg_scan"
|
||||
become: true
|
||||
register: "scsi_devices"
|
||||
changed_when: False
|
||||
|
||||
86
tasks/create_lv.yml
Normal file
86
tasks/create_lv.yml
Normal file
@@ -0,0 +1,86 @@
|
||||
---
|
||||
|
||||
- name: manage_lvm | creating new LVM logical volume(s)
|
||||
lvol:
|
||||
vg: "{{ vg.item[0]['vgname'] }}"
|
||||
lv: "{{ vg.item[1]['lvname'] }}"
|
||||
size: "{{ vg.item[1]['size'] }}"
|
||||
shrink: no
|
||||
opts: "{{ vg.item[1]['opts'] | default('') }}"
|
||||
state: "present"
|
||||
become: true
|
||||
notify:
|
||||
- manage_lvm | resizing swap
|
||||
- manage_lvm | resizing btrfs
|
||||
- manage_lvm | resizing xfs
|
||||
- manage_lvm | resizing filesystem
|
||||
when: >
|
||||
(
|
||||
(vg.item[0]['create'] is defined
|
||||
and vg.item[0]['create']) and
|
||||
(vg.item[1] is defined and
|
||||
vg.item[1] != 'None') and
|
||||
(vg.item[1]['create'] is defined and
|
||||
vg.item[1]['create'])
|
||||
)
|
||||
|
||||
- name: manage_lvm | creating new filesystem on new LVM logical volume(s)
|
||||
filesystem:
|
||||
fstype: "{{ vg.item[1]['filesystem'] }}"
|
||||
dev: "/dev/{{ vg.item[0]['vgname'] }}/{{ vg.item[1]['lvname'] }}"
|
||||
# resizefs: yes #coming in 2.0 which will replace the resizing filesystem task below
|
||||
become: true
|
||||
when: >
|
||||
(
|
||||
(vg.item[0]['create'] is defined and
|
||||
vg.item[0]['create']) and
|
||||
(vg.item[1] is defined and
|
||||
vg.item[1] != 'None') and
|
||||
(vg.item[1]['create'] is defined and
|
||||
vg.item[1]['create']) and
|
||||
(
|
||||
vg.item[1]['filesystem'] is defined and
|
||||
vg.item[1]['filesystem'] != 'None' and
|
||||
vg.item[1]['filesystem'] != "swap" and
|
||||
vg.item[1]['filesystem'] != "xfs"
|
||||
)
|
||||
)
|
||||
|
||||
- name: lvm | check already converted
|
||||
loop: "{{ lvm_groups|subelements('lvnames') }}"
|
||||
shell: "xfs_info /dev/{{ vg.item.0.vgname }}/{{ vg.item.1.lvname }} | grep -c 'ftype=1'"
|
||||
become: yes
|
||||
register: alreadyformattedresult
|
||||
ignore_errors: True
|
||||
changed_when: no
|
||||
when: >
|
||||
(
|
||||
(vg.item.1 is defined and vg.item.1 != 'None') and
|
||||
(
|
||||
vg.item.1.filesystem2 is defined and
|
||||
vg.item.1.filesystem2 == "xfs"
|
||||
)
|
||||
and
|
||||
(
|
||||
vg.item.1.create is defined and
|
||||
vg.item.1.create
|
||||
)
|
||||
)
|
||||
|
||||
- name: manage_lvm | creating new filesystem on new LVM logical volume(s)
|
||||
command: mkfs.xfs /dev/{{ vg.item.0.vgname }}/{{ vg.item.1.lvname }}
|
||||
become: yes
|
||||
when: >
|
||||
(
|
||||
alreadyformattedresult and
|
||||
(vg.item[0]['create'] is defined and
|
||||
vg.item[0]['create']) and
|
||||
(vg.item[1] is defined and
|
||||
vg.item[1] != 'None') and
|
||||
(vg.item[1]['create'] is defined and
|
||||
vg.item[1]['create']) and
|
||||
(
|
||||
vg.item[1]['filesystem'] is defined and
|
||||
vg.item[1]['filesystem'] == "xfs"
|
||||
)
|
||||
)
|
||||
22
tasks/create_vg.yml
Normal file
22
tasks/create_vg.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
---
|
||||
- name: manage_lvm | check existing physical volume group(s)
|
||||
shell: "vgdisplay | grep '{{ item['vgname'] }}'"
|
||||
become: true
|
||||
with_items: "{{ lvm_groups }}"
|
||||
ignore_errors: True
|
||||
changed_when: no
|
||||
register: vg_exist
|
||||
|
||||
- debug: var=vg_exist
|
||||
|
||||
- name: manage_lvm | creating new LVM physical volume group(s)
|
||||
lvg:
|
||||
vg: "{{ item.item['vgname'] }}"
|
||||
pvs: "{{ item.item['disks']|join(',') }}"
|
||||
state: "present"
|
||||
become: true
|
||||
with_items: "{{ vg_exist.results }}"
|
||||
when: >
|
||||
item.rc != 0 and
|
||||
item.item['create'] is defined and
|
||||
item.item['create']
|
||||
@@ -1,22 +1,40 @@
|
||||
---
|
||||
- name: debian | installing pre-reqs
|
||||
apt:
|
||||
package:
|
||||
name:
|
||||
- lvm2
|
||||
- scsitools
|
||||
- xfsprogs
|
||||
state: "present"
|
||||
become: true
|
||||
|
||||
- name: centos | install xfs tools
|
||||
package:
|
||||
name: "xfsprogs"
|
||||
state: "present"
|
||||
become: yes
|
||||
loop: "{{ lvm_groups|subelements('lvnames') }}"
|
||||
when: >
|
||||
(
|
||||
(item.1 is defined and item.1 != 'None') and
|
||||
(
|
||||
item.1.filesystem is defined and
|
||||
item.1.filesystem == "xfs"
|
||||
)
|
||||
and
|
||||
(
|
||||
item.1.create is defined and
|
||||
item.1.create
|
||||
)
|
||||
)
|
||||
|
||||
- name: debian | checking for scsi devices
|
||||
shell: "sg_scan"
|
||||
command: "sg_scan"
|
||||
become: true
|
||||
register: "scsi_devices"
|
||||
changed_when: False
|
||||
changed_when: false
|
||||
|
||||
- name: debian | rescanning for new disks added
|
||||
command: "/sbin/rescan-scsi-bus"
|
||||
become: true
|
||||
changed_when: False
|
||||
when: scsi_devices['stdout'] != ""
|
||||
changed_when: false
|
||||
when: scsi_devices['stdout'] | length
|
||||
|
||||
@@ -1,123 +1,26 @@
|
||||
---
|
||||
- name: manage_lvm | creating new LVM volume group(s)
|
||||
lvg:
|
||||
vg: "{{ item['vgname'] }}"
|
||||
pvs: "{{ item['disks']|join(',') }}"
|
||||
state: "present"
|
||||
become: true
|
||||
with_items: "{{ lvm_groups }}"
|
||||
when: >
|
||||
(item['create'] is defined and
|
||||
item['create'])
|
||||
- name: manage_lvm | manage physical volume group creation
|
||||
include: create_vg.yml
|
||||
|
||||
- name: manage_lvm | creating new LVM logical volume(s)
|
||||
lvol:
|
||||
vg: "{{ item[0]['vgname'] }}"
|
||||
lv: "{{ item[1]['lvname'] }}"
|
||||
size: "{{ item[1]['size'] }}"
|
||||
shrink: no
|
||||
opts: "{{ item[1]['opts'] | default('') }}"
|
||||
state: "present"
|
||||
- name: manage_lvm | check existing logical volume group(s)
|
||||
shell: "lvs -o lv_name {{ item[0]['vgname'] }} --separator='|' --noheadings | grep {{ item[1]['lvname'] }}"
|
||||
become: true
|
||||
register: lvm
|
||||
ignore_errors: True
|
||||
changed_when: no
|
||||
with_subelements:
|
||||
- "{{ lvm_groups }}"
|
||||
- lvnames
|
||||
when: >
|
||||
((item[0]['create'] is defined
|
||||
and item[0]['create']) and
|
||||
(item[1] is defined and
|
||||
item[1] != 'None') and
|
||||
(item[1]['create'] is defined and
|
||||
item[1]['create']))
|
||||
register: lv_exist
|
||||
|
||||
- name: manage_lvm | creating new filesystem on new LVM logical volume(s)
|
||||
filesystem:
|
||||
fstype: "{{ item[1]['filesystem'] }}"
|
||||
dev: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}"
|
||||
# resizefs: yes #coming in 2.0 which will replace the resizing filesystem task below
|
||||
become: true
|
||||
with_subelements:
|
||||
- "{{ lvm_groups }}"
|
||||
- lvnames
|
||||
when: >
|
||||
((item[0]['create'] is defined and
|
||||
item[0]['create']) and
|
||||
(item[1] is defined and
|
||||
item[1] != 'None') and
|
||||
(item[1]['create'] is defined and
|
||||
item[1]['create']) and
|
||||
(item[1]['filesystem'] is defined and
|
||||
item[1]['filesystem'] != 'None') and
|
||||
item[1]['filesystem'] != "swap")
|
||||
- debug: var=lv_exist
|
||||
|
||||
- name: manage_lvm | mounting new filesystem(s)
|
||||
mount:
|
||||
name: "{{ item[1]['mntp'] }}"
|
||||
src: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}"
|
||||
fstype: "{{ item[1]['filesystem'] }}"
|
||||
state: "mounted"
|
||||
opts: "{{ item[1]['mopts'] | default('defaults') }}"
|
||||
become: true
|
||||
with_subelements:
|
||||
- "{{ lvm_groups }}"
|
||||
- lvnames
|
||||
- name: manage_lvm | loop over logical volume(s)
|
||||
include: create_lv.yml
|
||||
loop: "{{ lv_exist.results }}"
|
||||
loop_control:
|
||||
loop_var: vg
|
||||
when: >
|
||||
((item[0]['create'] is defined and
|
||||
item[0]['create']) and
|
||||
(item[1] is defined and
|
||||
item[1] != 'None') and
|
||||
(item[1]['create'] is defined and
|
||||
item[1]['create']) and
|
||||
(item[1]['mount'] is defined and
|
||||
item[1]['mount']))
|
||||
|
||||
- name: manage_lvm | resizing filesystem
|
||||
command: resize2fs /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}
|
||||
become: true
|
||||
with_subelements:
|
||||
- "{{ lvm_groups }}"
|
||||
- lvnames
|
||||
when: >
|
||||
lvm['changed'] and
|
||||
item[1]['filesystem'] is defined and
|
||||
item[1]['filesystem'] != "None" and
|
||||
item[1]['filesystem'] != "swap" and
|
||||
item[1]['filesystem'] != "xfs" and
|
||||
item[1]['filesystem'] != "btrfs"
|
||||
|
||||
- name: manage_lvm | resizing xfs
|
||||
command: xfs_growfs -d {{ item[1]['mntp'] }}
|
||||
become: true
|
||||
with_subelements:
|
||||
- "{{ lvm_groups }}"
|
||||
- lvnames
|
||||
when: >
|
||||
lvm['changed'] and
|
||||
item[1]['filesystem'] is defined and
|
||||
item[1]['filesystem'] == "xfs"
|
||||
|
||||
- name: manage_lvm | resizing swap
|
||||
shell: "swapoff -a && mkswap /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }} && swapon -va"
|
||||
become: true
|
||||
with_subelements:
|
||||
- "{{ lvm_groups }}"
|
||||
- lvnames
|
||||
when: >
|
||||
lvm['changed'] and
|
||||
item[1]['filesystem'] is defined and
|
||||
item[1]['filesystem'] == "swap"
|
||||
|
||||
- name: manage_lvm | resizing btrfs
|
||||
shell: "btrfs filesystem resize max {{ item[1]['mntp'] }}"
|
||||
become: true
|
||||
with_subelements:
|
||||
- "{{ lvm_groups }}"
|
||||
- lvnames
|
||||
when: >
|
||||
lvm['changed'] and
|
||||
item[1]['filesystem'] is defined and
|
||||
item[1]['filesystem'] == "btrfs"
|
||||
vg.rc != 0
|
||||
|
||||
- name: manage_lvm | unmounting filesystem(s)
|
||||
mount:
|
||||
@@ -136,6 +39,29 @@
|
||||
not item[1]['create'] and
|
||||
item[1]['filesystem'] != "swap")
|
||||
|
||||
- meta: flush_handlers
|
||||
|
||||
- name: manage_lvm | mounting new filesystem(s)
|
||||
mount:
|
||||
name: "{{ item[1]['mntp'] }}"
|
||||
src: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}"
|
||||
fstype: "{{ item[1]['filesystem'] }}"
|
||||
state: "mounted"
|
||||
opts: "{{ item[1]['mopts'] | default('defaults') }}"
|
||||
become: true
|
||||
with_subelements:
|
||||
- "{{ lvm_groups }}"
|
||||
- lvnames
|
||||
when: >
|
||||
((item[0]['create'] is defined and
|
||||
item[0]['create']) and
|
||||
(item[1] is defined and
|
||||
item[1] != 'None') and
|
||||
(item[1]['create'] is defined and
|
||||
item[1]['create']) and
|
||||
(item[1]['mount'] is defined and
|
||||
item[1]['mount']))
|
||||
|
||||
- name: manage_lvm | Removing LVM logical volume(s)
|
||||
lvol:
|
||||
vg: "{{ item[0]['vgname'] }}"
|
||||
@@ -152,7 +78,7 @@
|
||||
(item[1]['create'] is defined and
|
||||
not item[1]['create'])
|
||||
|
||||
- name: manage_lvm | Removing LVM volume group(s)
|
||||
- name: manage_lvm | Removing LVM physical volume group(s)
|
||||
lvg:
|
||||
vg: "{{ item['vgname'] }}"
|
||||
pvs: "{{ item['disks']|join(',') }}"
|
||||
|
||||
Reference in New Issue
Block a user