diff --git a/README.md b/README.md index 3836b7c..84ad51e 100644 --- a/README.md +++ b/README.md @@ -1,89 +1,131 @@ -Role Name -========= +# Role Name -Role to manage LVM Groups/Logical Volumes. Can be used to create, extend or resize LVM Groups and volumes. +An [Ansible] role to manage LVM Groups/Logical Volumes. -Requirements ------------- +> NOTE: Can be used to create, extend or resize LVM Groups and volumes. -Devices/disks to be part of the LVM setup must be identified prior to using this role. Ensure that you select the correct devices/disks. -##### To only create an LVM VG w/out creating LVM LVOLS...define lvname w/ var as None as in the below example. +## Requirements -Role Variables --------------- +Devices/disks to be members of the LVM setup **must be** identified prior to +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 + +```yaml --- # defaults file for ansible-manage-lvm -lvm_groups: - - vgname: ubuntu-vg - disks: /dev/sda5,/dev/sdc,/dev/sdd #for multiple disks...../dev/sdb,/dev/sdc - create: true #defines if VG should exist or be removed....true or false - lvnames: - - lvname: swap_1 - size: 5g #define size of lvol...100%FREE, 10g, 1024 (megabytes by default) - create: true #defines if lvol should exist or be removed...true or false - filesystem: swap #defines filesystem to format lvol as - mount: false #defines if filesystem should be mounted - mntp: [] #defines mountpoint for lvol - - lvname: root - size: 40g #define size of lvol...100%FREE, 10g, 1024 (megabytes by default) - create: true #defines if lvol should exist or be removed...true or false - filesystem: ext4 #defines filesystem to format lvol as - mount: true - mntp: / #defines mountpoint for lvol - - vgname: test-vg - disks: /dev/sdb #for multiple disks...../dev/sdb,/dev/sdc - create: true #defines if VG should exist or be removed....true or false - lvnames: - - lvname: test_1 - size: 5g #define size of lvol...100%FREE, 10g, 1024 (megabytes by default) - create: true #defines if lvol should exist or be removed...true or false - filesystem: ext4 #defines filesystem to format lvol as - mount: true #defines if filesystem should be mounted - mntp: /mnt/test_1 #defines mountpoint for lvol - - lvname: test_2 - size: 10g #define size of lvol...100%FREE, 10g, 1024 (megabytes by default) - create: true #defines if lvol should exist or be removed...true or false - filesystem: ext4 #defines filesystem to format lvol as - mount: true - mntp: /mnt/test_2 #defines mountpoint for lvol -# - vgname: cinder-volumes -# disks: /dev/cciss/c0d1 #for multiple disks...../dev/sdb,/dev/sdc -# create: true #defines if VG should exist or be removed....true or false -# lvnames: -# - None #set to None to only create LVM VG w/out creating LVM LVOLS... -manage_lvm: false #defines if LVM will be managed by role....default is false to ensure nothing is changed by accident. -```` +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 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: [] + # - 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 -Dependencies ------------- +# Defines if LVM will be managed by role +# default is false to ensure nothing is changed by accident. +manage_lvm: false +``` + +## Dependencies None -Example Playbook ----------------- +## Example Playbook -#### Galaxy ------------ - - hosts: servers - roles: - - mrlesmithjr.manage-lvm -#### GitHub ------------ - - hosts: servers - roles: - - ansible-manage-lvm +```yaml +--- +- 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 -Author Information ------------------- +## Author Information Larry Smith Jr. -- @mrlesmithjr -- http://everythingshouldbevirtual.com -- mrlesmithjr [at] gmail.com + +- [@mrlesmithjr] +- +- mrlesmithjr [at] gmail.com + +[@mrlesmithjr]: https://www.twitter.com/mrlesmithjr + +[ansible]: https://www.ansible.com diff --git a/defaults/main.yml b/defaults/main.yml index 043decd..2b882bf 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,41 +1,59 @@ --- # defaults file for ansible-manage-lvm -lvm_groups: - - vgname: ubuntu-vg - disks: /dev/sda5,/dev/sdc,/dev/sdd #for multiple disks...../dev/sdb,/dev/sdc - create: true #defines if VG should exist or be removed....true or false - lvnames: - - lvname: swap_1 - size: 5g #define size of lvol...100%FREE, 10g, 1024 (megabytes by default) - create: true #defines if lvol should exist or be removed...true or false - filesystem: swap #defines filesystem to format lvol as - mount: false #defines if filesystem should be mounted - mntp: [] #defines mountpoint for lvol - - lvname: root - size: 40g #define size of lvol...100%FREE, 10g, 1024 (megabytes by default) - create: true #defines if lvol should exist or be removed...true or false - filesystem: ext4 #defines filesystem to format lvol as - mount: true - mntp: / #defines mountpoint for lvol - - vgname: test-vg - disks: /dev/sdb #for multiple disks...../dev/sdb,/dev/sdc - create: true #defines if VG should exist or be removed....true or false - lvnames: - - lvname: test_1 - size: 5g #define size of lvol...100%FREE, 10g, 1024 (megabytes by default) - create: true #defines if lvol should exist or be removed...true or false - filesystem: ext4 #defines filesystem to format lvol as - mount: true #defines if filesystem should be mounted - mntp: /mnt/test_1 #defines mountpoint for lvol - - lvname: test_2 - size: 10g #define size of lvol...100%FREE, 10g, 1024 (megabytes by default) - create: true #defines if lvol should exist or be removed...true or false - filesystem: ext4 #defines filesystem to format lvol as - mount: true - mntp: /mnt/test_2 #defines mountpoint for lvol -# - vgname: cinder-volumes -# disks: /dev/cciss/c0d1 #for multiple disks...../dev/sdb,/dev/sdc -# create: true #defines if VG should exist or be removed....true or false -# lvnames: -# - None #set to None to only create LVM VG w/out creating LVM LVOLS... -manage_lvm: false #defines if LVM will be managed by role....default is false to ensure nothing is changed by accident. +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 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: [] + # - 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 diff --git a/meta/main.yml b/meta/main.yml index 6459902..46ba314 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -15,123 +15,22 @@ galaxy_info: # - CC-BY license: license (GPLv2, CC-BY, etc) min_ansible_version: 1.2 - # - # Below are all platforms currently available. Just uncomment - # the ones that apply to your role. If you don't see your - # platform on this list, let us know and we'll get it added! - # platforms: - name: EL versions: - # - all - # - 5 - - 6 - - 7 - #- name: GenericUNIX - # versions: - # - all - # - any - #- name: Fedora - # versions: - # - all - # - 16 - # - 17 - # - 18 - # - 19 - # - 20 - # - 21 - # - 22 - #- name: Windows - # versions: - # - all - # - 2012R2 - #- name: SmartOS - # versions: - # - all - # - any - #- name: opensuse - # versions: - # - all - # - 12.1 - # - 12.2 - # - 12.3 - # - 13.1 - # - 13.2 - #- name: Amazon - # versions: - # - all - # - 2013.03 - # - 2013.09 - #- name: GenericBSD - # versions: - # - all - # - any - #- name: FreeBSD - # versions: - # - all - # - 8.0 - # - 8.1 - # - 8.2 - # - 8.3 - # - 8.4 - # - 9.0 - # - 9.1 - # - 9.1 - # - 9.2 + - 6 + - 7 - name: Ubuntu versions: - # - all - # - lucid - # - maverick - # - natty - # - oneiric - - precise - # - quantal - # - raring - # - saucy - - trusty - # - utopic - # - vivid - #- name: SLES - # versions: - # - all - # - 10SP3 - # - 10SP4 - # - 11 - # - 11SP1 - # - 11SP2 - # - 11SP3 - #- name: GenericLinux - # versions: - # - all - # - any - #- name: Debian - # versions: - # - all - # - etch - # - jessie - # - lenny - # - squeeze - # - wheezy - # - # Below are all categories currently available. Just as with - # the platforms above, uncomment those that apply to your role. - # + - precise + - trusty + - name: Debian + versions: + - jessie + - wheezy + categories: - #- cloud - #- cloud:ec2 - #- cloud:gce - #- cloud:rax - #- clustering - #- database - #- database:nosql - #- database:sql - #- development - #- monitoring - #- networking - #- packaging - system - #- web dependencies: [] # List your role dependencies here, one per line. # Be sure to remove the '[]' above if you add dependencies diff --git a/tasks/centos.yml b/tasks/centos.yml index 7c198b1..66cab6b 100644 --- a/tasks/centos.yml +++ b/tasks/centos.yml @@ -1,19 +1,23 @@ --- - name: centos | installing lvm2 yum: - name: lvm2 - state: present + name: "lvm2" + state: "present" + become: true - name: centos | installing sg3_utils yum: - name: sg3_utils - state: present + name: "sg3_utils" + state: "present" + become: true - name: centos | checking for scsi devices - shell: sg_scan - register: scsi_devices + shell: "sg_scan" + become: true + register: "scsi_devices" changed_when: False - name: centos | rescanning for new disks - command: /usr/bin/rescan-scsi-bus.sh + command: "/usr/bin/rescan-scsi-bus.sh" + become: true changed_when: False diff --git a/tasks/debian.yml b/tasks/debian.yml index 7441201..47db409 100644 --- a/tasks/debian.yml +++ b/tasks/debian.yml @@ -2,18 +2,21 @@ - name: debian | installing pre-reqs apt: name: "{{ item }}" - state: present + state: "present" + become: true with_items: - - lvm2 - - scsitools - - xfsprogs + - 'lvm2' + - 'scsitools' + - 'xfsprogs' - name: debian | checking for scsi devices - shell: sg_scan - register: scsi_devices + shell: "sg_scan" + become: true + register: "scsi_devices" changed_when: False - name: debian | rescanning for new disks added - command: /sbin/rescan-scsi-bus + command: "/sbin/rescan-scsi-bus" + become: true changed_when: False - when: scsi_devices.stdout != "" + when: scsi_devices['stdout'] != "" diff --git a/tasks/main.yml b/tasks/main.yml index a6f1922..96ebddf 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -7,4 +7,6 @@ when: ansible_os_family == "RedHat" - include: manage_lvm.yml - when: manage_lvm is defined and manage_lvm + when: > + manage_lvm and + lvm_groups is defined diff --git a/tasks/manage_lvm.yml b/tasks/manage_lvm.yml index 0df6b7a..1b0479f 100644 --- a/tasks/manage_lvm.yml +++ b/tasks/manage_lvm.yml @@ -1,100 +1,153 @@ --- - name: manage_lvm | creating new LVM volume group(s) lvg: - vg: "{{ item.vgname }}" - pvs: "{{ item.disks }}" - state: present + vg: "{{ item['vgname'] }}" + pvs: "{{ item['disks']|join(',') }}" + state: "present" + become: true with_items: "{{ lvm_groups }}" - when: item.create is defined and item.create + when: > + (item['create'] is defined and + item['create']) - name: manage_lvm | creating new LVM logical volume(s) lvol: - vg: "{{ item.0.vgname }}" - lv: "{{ item.1.lvname }}" - size: "{{ item.1.size }}" + vg: "{{ item[0]['vgname'] }}" + lv: "{{ item[1]['lvname'] }}" + size: "{{ item[1]['size'] }}" shrink: no - state: present + state: "present" + become: true register: lvm 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 ) + 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'])) - 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 }}" + 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 ) + 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'])) - 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 + name: "{{ item[1]['mntp'] }}" + src: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}" + fstype: "{{ item[1]['filesystem'] }}" + state: "mounted" + 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 ) + 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 }} + command: resize2fs /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }} + become: true with_subelements: - "{{ lvm_groups }}" - lvnames - when: lvm.changed and item.1.filesystem != "swap" and item.1.filesystem != "xfs" and item.1.filesystem != "btrfs" + when: > + lvm['changed'] and + item[1]['filesystem'] != "swap" and + item[1]['filesystem'] != "xfs" and + item[1]['filesystem'] != "btrfs" - name: manage_lvm | resizing xfs - command: xfs_growfs -d /dev/{{ item.0.vgname }}/{{ item.1.lvname }} + command: xfs_growfs -d /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }} + become: true with_subelements: - "{{ lvm_groups }}" - lvnames - when: lvm.changed and item.1.filesystem == "xfs" + when: > + lvm['changed'] and + item[1]['filesystem'] == "xfs" - name: manage_lvm | resizing swap - shell: "swapoff -a && mkswap /dev/{{ item.0.vgname }}/{{ item.1.lvname }} && swapon -va" + 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 == "swap" + when: > + lvm['changed'] and + item[1]['filesystem'] == "swap" - name: manage_lvm | resizing btrfs - shell: "btrfs filesystem resize max {{ item.1.mntp }}" + shell: "btrfs filesystem resize max {{ item[1]['mntp'] }}" + become: true with_subelements: - "{{ lvm_groups }}" - lvnames - when: lvm.changed and item.1.filesystem == "btrfs" + when: > + lvm['changed'] and + item[1]['filesystem'] == "btrfs" - name: manage_lvm | unmounting filesystem(s) mount: - name: "{{ item.1.mntp }}" - src: "/dev/{{ item.0.vgname }}/{{ item.1.lvname }}" - fstype: "{{ item.1.filesystem }}" - state: absent + name: "{{ item[1]['mntp'] }}" + src: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}" + fstype: "{{ item[1]['filesystem'] }}" + state: "absent" + become: true with_subelements: - "{{ lvm_groups }}" - lvnames - when: ( item.1 is defined and item.1 != 'None' ) and ( item.1.create is defined and not item.1.create ) + when: > + (item[1] is defined and + item[1] != 'None') and + (item[1]['create'] is defined and + not item[1]['create']) - name: manage_lvm | Removing LVM logical volume(s) lvol: - vg: "{{ item.0.vgname }}" - lv: "{{ item.1.lvname }}" - state: absent + vg: "{{ item[0]['vgname'] }}" + lv: "{{ item[1]['lvname'] }}" + state: "absent" force: yes + become: true with_subelements: - "{{ lvm_groups }}" - lvnames - when: ( item.1 is defined and item.1 != 'None' ) and ( item.1.create is defined and not item.1.create ) + when: > + (item[1] is defined and + item[1] != 'None') and + (item[1]['create'] is defined and + not item[1]['create']) - name: manage_lvm | Removing LVM volume group(s) lvg: - vg: "{{ item.vgname }}" - pvs: "{{ item.disks }}" - state: absent + vg: "{{ item['vgname'] }}" + pvs: "{{ item['disks']|join(',') }}" + state: "absent" + become: true with_items: "{{ lvm_groups }}" - when: item.create is defined and not item.create + when: > + item['create'] is defined and + not item['create']