molecule test and idempotence

This commit is contained in:
Charlie Mordant
2020-04-15 14:33:41 +02:00
parent fe860566ba
commit ea9109220b
19 changed files with 488 additions and 121 deletions

View File

@@ -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
View 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
View 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']

View File

@@ -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

View File

@@ -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(',') }}"