rebased mrjsmith

This commit is contained in:
Charlie Mordant
2020-05-14 23:43:59 +02:00
parent 94582de25d
commit 15b2b7b4e0
12 changed files with 171 additions and 266 deletions
+8 -109
View File
@@ -1,6 +1,6 @@
# Role Name # ansible-manage-lvm
An [Ansible] role to manage LVM Groups/Logical Volumes. Ansible role to manage LVM Groups/Logical Volumes.
> NOTE: Can be used to create, extend or resize LVM Groups and volumes. > NOTE: Can be used to create, extend or resize LVM Groups and volumes.
@@ -9,78 +9,9 @@ An [Ansible] role to manage LVM Groups/Logical Volumes.
Devices/disks to be members of the LVM setup **must be** identified prior to Devices/disks to be members of the LVM setup **must be** identified prior to
using this role. using this role.
> NOTE: Ensure that you select the correct devices/disks.
>
> NOTE: To create an LVM VG w/out creating LVM LVOLS...define lvname w/ var as
> `None` as in the below example.
## Role Variables ## Role Variables
```yaml [defaults/main.yml](defaults/main.yml)
---
# defaults file for ansible-manage-lvm
lvm_groups: []
# - vgname: ubuntu-vg
# disks:
# - /dev/sda5
# - /dev/sdc
# - /dev/sdd
# # defines if VG should exist or be removed
# # true or false
# create: true
# lvnames:
# - lvname: swap_1
# # Define size of lvol
# # 100%FREE, 10g, 1024 (megabytes by default)
# size: 5g
# # Defines additional lvcreate options (e.g. stripes, stripesize, etc)
# opts: ''
# # Defines if lvol should exist or be removed
# # true or false
# create: true
# # Defines filesystem to format lvol as
# filesystem: swap
# # Defines if filesystem should be mounted
# mount: false
# # Defines mountpoint for lvol
# mntp: []
# # Defines additional mount options (e.g. noatime, noexec, etc)
# mopts: ''
# - lvname: root
# size: 40g
# create: true
# filesystem: ext4
# mount: true
# mntp: /
# - vgname: test-vg
# disks:
# - /dev/sdb
# create: true
# lvnames:
# - lvname: test_1
# size: 5g
# create: true
# filesystem: ext4
# mount: true
# mntp: /mnt/test_1
# - lvname: test_2
# size: 10g
# create: true
# filesystem: ext4
# mount: true
# mntp: /mnt/test_2
# - vgname: cinder-volumes
# disks:
# - /dev/cciss/c0d1
# create: true
# lvnames:
# # Set to None to only create LVM VG w/out creating LVM LVOLS
# - None
# Defines if LVM will be managed by role
# default is false to ensure nothing is changed by accident.
manage_lvm: false
```
## Dependencies ## Dependencies
@@ -88,48 +19,16 @@ None
## Example Playbook ## Example Playbook
```yaml [playbook.yml](playbook.yml)
---
- hosts: test-nodes
vars:
lvm_groups:
- vgname: test-vg
disks:
- /dev/sdb
- /dev/sdc
create: true
lvnames:
- lvname: test_1
size: 5g
create: true
filesystem: ext4
mount: true
mntp: /mnt/test_1
- lvname: test_2
size: 10g
create: true
filesystem: ext4
mount: true
mntp: /mnt/test_2
manage_lvm: true
pri_domain_name: 'test.vagrant.local'
roles:
- role: ansible-manage-lvm
tasks:
```
## License ## License
BSD MIT
## Author Information ## Author Information
Larry Smith Jr. Larry Smith Jr.
- [@mrlesmithjr] - [@mrlesmithjr](https://twitter.com/mrlesmithjr)
- <http://everythingshouldbevirtual.com> - [mrlesmithjr@gmail.com](mailto:mrlesmithjr@gmail.com)
- mrlesmithjr [at] gmail.com - [http://everythingshouldbevirtual.com](http://everythingshouldbevirtual.com)
[@mrlesmithjr]: https://www.twitter.com/mrlesmithjr
[ansible]: https://www.ansible.com
+7 -8
View File
@@ -1,7 +1,7 @@
--- ---
galaxy_info: galaxy_info:
author: Larry Smith Jr. author: Larry Smith Jr.
description: Role to manage LVM Groups/Logical Volumes. Can be used to create, extend or resize LVM. description: Ansible role to manage(create, extend, resize) LVM Groups/Logical Volumes.
license: MIT license: MIT
min_ansible_version: 1.2 min_ansible_version: 1.2
@@ -12,17 +12,16 @@ galaxy_info:
- name: EL - name: EL
versions: versions:
- 6 - all
- 7 - name: Fedora
versions:
- all
- name: Ubuntu - name: Ubuntu
versions: versions:
- precise - all
- trusty
- name: Debian - name: Debian
versions: versions:
- jessie - all
- wheezy
galaxy_tags: galaxy_tags:
- system - system
- lvm - lvm
+19 -5
View File
@@ -5,13 +5,27 @@ driver:
name: virtualbox name: virtualbox
lint: yamllint . && flake8 && ansible-lint lint: yamllint . && flake8 && ansible-lint
platforms: platforms:
- name: Fedora-Molecule-LVM - name: CentOS-Molecule-LVM
box: fedora/31-cloud-base box: mrlesmithjr/centos7
cpu: 2
memory: 2048
provider_override_args: provider_override_args:
- "persistent_storage.enabled = true" - "persistent_storage.enabled = true"
- "persistent_storage.location = 'molecule-lvm.vdi'" - "persistent_storage.location = 'centos-molecule-lvm.vdi'"
- "persistent_storage.size = 100"
- "persistent_storage.mount = false"
- "persistent_storage.diskdevice = '/dev/sdb'"
- name: Fedora-Molecule-LVM
box: mrlesmithjr/fedora31
provider_override_args:
- "persistent_storage.enabled = true"
- "persistent_storage.location = 'fedora-molecule-lvm.vdi'"
- "persistent_storage.size = 100"
- "persistent_storage.mount = false"
- "persistent_storage.diskdevice = '/dev/sdb'"
- name: Ubuntu-Molecule-LVM
box: mrlesmithjr/bionic64
provider_override_args:
- "persistent_storage.enabled = true"
- "persistent_storage.location = 'ubuntu-molecule-lvm.vdi'"
- "persistent_storage.size = 100" - "persistent_storage.size = 100"
- "persistent_storage.mount = false" - "persistent_storage.mount = false"
- "persistent_storage.diskdevice = '/dev/sdb'" - "persistent_storage.diskdevice = '/dev/sdb'"
+27
View File
@@ -0,0 +1,27 @@
---
- hosts: test-nodes
vars:
lvm_groups:
- vgname: test-vg
disks:
- /dev/sdb
- /dev/sdc
create: true
lvnames:
- lvname: test_1
size: 5g
create: true
filesystem: ext4
mount: true
mntp: /mnt/test_1
- lvname: test_2
size: 10g
create: true
filesystem: ext4
mount: true
mntp: /mnt/test_2
manage_lvm: true
tasks:
- name: Include lvm
include_role:
name: ansible-manage-lvm
-17
View File
@@ -1,17 +0,0 @@
#!/usr/bin/env bash
TAR_FILE="v1.6.0.tar.gz"
# Prompt for Ansible role name
read -p "Enter the Ansible role name: " input
# Update .travis.yml with Ansible role name
sed -i '' "s/replace_role/${input}/g" ".travis.yml"
# Update tests/test.yml with Ansible role name
sed -i '' "s/replace_role/${input}/g" "tests/test.yml"
# Cleanup
if [ -f $TAR_FILE ]; then
rm $TAR_FILE
fi
+7 -7
View File
@@ -1,14 +1,14 @@
--- ---
- name: centos | installing lvm2 - name: centos | installing lvm2
package: package:
name: "lvm2" name: lvm2
state: "present" state: present
become: true become: true
- name: centos | installing sg3_utils - name: centos | installing sg3_utils
package: package:
name: "sg3_utils" name: sg3_utils
state: "present" state: present
become: true become: true
- name: centos | debug lvg - name: centos | debug lvg
@@ -36,12 +36,12 @@
- lv.1.create|bool - lv.1.create|bool
- name: centos | checking for scsi devices - name: centos | checking for scsi devices
command: "sg_scan" command: sg_scan
become: true become: true
register: "scsi_devices" register: scsi_devices
changed_when: false changed_when: false
- name: centos | rescanning for new disks - name: centos | rescanning for new disks
command: "/usr/bin/rescan-scsi-bus.sh" command: /usr/bin/rescan-scsi-bus.sh
become: true become: true
changed_when: false changed_when: false
+50 -65
View File
@@ -1,22 +1,22 @@
--- ---
- name: manage_lvm | unmounting filesystem(s) - name: create_fs | unmounting filesystem(s)
mount: mount:
path: "{{ lv.mntp }}" path: "{{ lv.mntp }}"
src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
fstype: "{{ lv.filesystem | default(omit) }}" fstype: "{{ lv.filesystem | default(omit) }}"
state: "absent" state: absent
become: true become: true
loop: "{{ vg.lvnames }}" loop: "{{ vg.lvnames }}"
loop_control: loop_control:
loop_var: lv loop_var: lv
when: > when:
(lv is defined and - lv is defined
lv != 'None') and - lv != 'None'
(lv.create is defined and - lv.create is defined
not lv.create and - not lv.create|bool
lv.filesystem != "swap") - lv.filesystem != "swap"
- name: manage_lvm | creating new filesystem on new LVM logical volume(s) - name: create_fs | creating new filesystem on new LVM logical volume(s)
filesystem: filesystem:
fstype: "{{ lv.filesystem }}" fstype: "{{ lv.filesystem }}"
dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
@@ -25,23 +25,19 @@
loop_control: loop_control:
loop_var: lv loop_var: lv
become: true become: true
when: > when:
( - vg.create is defined
(vg.create is defined and - vg.create|bool
vg.create) and - lv is defined
(lv is defined and - lv != 'None'
lv != 'None') and - lv.create is defined
(lv.create is defined and - lv.create|bool
lv.create) and - lv.filesystem is defined
( - lv.filesystem != 'None'
lv.filesystem is defined and - lv.filesystem != 'xfs'
lv.filesystem != 'None' and
lv.filesystem != 'xfs'
)
)
# unable to resize xfs: looks like we've to reference the mountpoint instead of the device
- name: manage_lvm | check already converted # unable to resize xfs: looks like we've to reference the mountpoint instead of the device
- name: create_fs | check already converted
# at least xfs is executed twice if the partition has changed in the meantime # at least xfs is executed twice if the partition has changed in the meantime
# then it tries to recreate the fs on the mounted fs which indeed fails... # then it tries to recreate the fs on the mounted fs which indeed fails...
shell: "xfs_info {{ lv.mntp }} | grep -c 'ftype=1'" shell: "xfs_info {{ lv.mntp }} | grep -c 'ftype=1'"
@@ -51,22 +47,15 @@
loop_var: lv loop_var: lv
register: mountedxfs register: mountedxfs
ignore_errors: true ignore_errors: true
changed_when: no changed_when: false
when: > when:
( - lv is defined and lv != 'None'
(lv is defined and lv != 'None') and - lv.filesystem is defined
( - lv.filesystem == "xfs"
lv.filesystem is defined and - lv.create is defined
lv.filesystem == "xfs" - lv.create|bool
)
and
(
lv.create is defined and
lv.create
)
)
- name: manage_lvm | creating new xfs filesystem on new LVM logical volume(s) - name: create_fs | creating new xfs filesystem on new LVM logical volume(s)
filesystem: filesystem:
fstype: "{{ lv.filesystem }}" fstype: "{{ lv.filesystem }}"
dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
@@ -74,38 +63,34 @@
loop_control: loop_control:
loop_var: lv loop_var: lv
become: true become: true
when: > when:
( - mountedxfs is failed
mountedxfs is failed and - vg.create is defined
(vg.create is defined and - vg.create|bool
vg.create) and - lv is defined
(lv is defined and - lv != 'None'
lv != 'None') and - lv.create is defined
(lv.create is defined and - lv.create|bool
lv.create) and - lv.filesystem is defined
( - lv.filesystem == 'xfs'
lv.filesystem is defined and
lv.filesystem == 'xfs'
)
)
- name: manage_lvm | mounting new filesystem(s) - name: create_fs | mounting new filesystem(s)
mount: mount:
path: "{{ lv.mntp }}" path: "{{ lv.mntp }}"
src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
fstype: "{{ lv.filesystem }}" fstype: "{{ lv.filesystem }}"
state: "mounted" state: mounted
opts: "{{ lv.mopts | default('defaults') }}" opts: "{{ lv.mopts | default('defaults') }}"
become: true become: true
loop: "{{ vg.lvnames }}" loop: "{{ vg.lvnames }}"
loop_control: loop_control:
loop_var: lv loop_var: lv
when: > when:
((vg.create is defined and - vg.create is defined
vg.create) and - vg.create|bool
(lv is defined and - lv is defined
lv != 'None') and - lv != 'None'
(lv.create is defined and - lv.create is defined
lv.create) and - lv.create|bool
(lv.mount is defined and - lv.mount is defined
lv.mount)) - lv.mount|bool
+12 -13
View File
@@ -1,10 +1,10 @@
--- ---
- name: "debug vg" - name: create_lv | Display Volume Group
debug: debug:
var: vg var: vg
verbosity: 2 verbosity: 2
- name: "debug lvm" - name: create_lv | debug lvm
loop: "{{ vg.lvnames | default([]) }}" loop: "{{ vg.lvnames | default([]) }}"
debug: debug:
var: lv var: lv
@@ -12,23 +12,22 @@
loop_control: loop_control:
loop_var: lv loop_var: lv
- name: manage_lvm | creating new LVM logical volume(s) - name: create_lv | creating new LVM logical volume(s)
lvol: lvol:
vg: "{{ vg.vgname }}" vg: "{{ vg.vgname }}"
lv: "{{ lv.lvname }}" lv: "{{ lv.lvname }}"
size: "{{ lv.size }}" size: "{{ lv.size }}"
shrink: no shrink: false
opts: "{{ lv.opts | default('') }}" opts: "{{ lv.opts | default('') }}"
state: "present" state: present
loop: "{{ vg.lvnames | default([]) }}" loop: "{{ vg.lvnames | default([]) }}"
loop_control: loop_control:
loop_var: lv loop_var: lv
become: true become: true
when: > when:
( - vg.create is defined
(vg.create is defined - vg.create|bool
and vg.create) and - lv is defined
(lv != 'None') and - lv != 'None'
(lv.create is defined and - lv.create is defined
lv.create) - lv.create|bool
)
+5 -6
View File
@@ -1,12 +1,11 @@
--- ---
- name: create_vg | creating new LVM volume group(s)
- name: manage_lvm | creating new LVM volume group(s)
lvg: lvg:
vg: "{{ item.vgname }}" vg: "{{ item.vgname }}"
pvs: "{{ item.disks | join(',') }}" pvs: "{{ item.disks | join(',') }}"
state: "present" state: present
become: true become: true
loop: "{{ lvm_groups }}" loop: "{{ lvm_groups }}"
when: > when:
item.create is defined and - item.create is defined
item.create - item.create|bool
+22 -22
View File
@@ -1,40 +1,40 @@
--- ---
- name: debian | Updating Apt Cache
apt:
update_cache: true
cache_valid_time: 3600
become: true
- name: debian | installing pre-reqs - name: debian | installing pre-reqs
package: apt:
name: name:
- lvm2 - lvm2
- scsitools - scsitools
state: "present" state: present
become: true become: true
- name: debian | install xfs tools - name: debian | install xfs tools
package: apt:
name: "xfsprogs" name: xfsprogs
state: "present" state: present
become: yes become: true
loop: "{{ lvm_groups|subelements('lvnames') }}" loop: "{{ lvm_groups|subelements('lvnames') }}"
when: > when:
( - item.1 is defined
(item.1 is defined and item.1 != 'None') and - item.1 != 'None'
( - item.1.filesystem is defined
item.1.filesystem is defined and - item.1.filesystem == "xfs"
item.1.filesystem == "xfs" - item.1.create is defined
) - item.1.create|bool
and
(
item.1.create is defined and
item.1.create
)
)
- name: debian | checking for scsi devices - name: debian | checking for scsi devices
command: "sg_scan" command: sg_scan
become: true become: true
register: "scsi_devices" register: scsi_devices
changed_when: false changed_when: false
- name: debian | rescanning for new disks added - name: debian | rescanning for new disks added
command: "/sbin/rescan-scsi-bus" command: /sbin/rescan-scsi-bus
become: true become: true
changed_when: false changed_when: false
when: scsi_devices['stdout'] | length when: scsi_devices['stdout'] | length
+3 -3
View File
@@ -7,6 +7,6 @@
when: ansible_os_family == "RedHat" when: ansible_os_family == "RedHat"
- include_tasks: manage_lvm.yml - include_tasks: manage_lvm.yml
when: > when:
manage_lvm and - lvm_groups is defined
lvm_groups is defined - manage_lvm|bool
+11 -11
View File
@@ -18,23 +18,23 @@
lvol: lvol:
vg: "{{ item.0.vgname }}" vg: "{{ item.0.vgname }}"
lv: "{{ item.1.lvname }}" lv: "{{ item.1.lvname }}"
state: "absent" state: absent
force: yes force: true
become: true become: true
loop: "{{ lvm_groups|subelements('lvnames', {'skip_missing': true}) }}" loop: "{{ lvm_groups|subelements('lvnames', {'skip_missing': true}) }}"
when: > when:
(item.1 is defined and - item.1 is defined
item.1 != 'None') and - item.1 != 'None'
(item.1.create is defined and - item.1.create is defined
not item.1.create) - not item.1.create|bool
- name: manage_lvm | Removing LVM volume group(s) - name: manage_lvm | Removing LVM volume group(s)
lvg: lvg:
vg: "{{ item.vgname }}" vg: "{{ item.vgname }}"
pvs: "{{ item.disks | join(',') }}" pvs: "{{ item.disks | join(',') }}"
state: "absent" state: absent
become: true become: true
loop: "{{ lvm_groups }}" loop: "{{ lvm_groups }}"
when: > when:
item.create is defined and - item.create is defined
not item.create - not item.create|bool