diff --git a/README.md b/README.md index b0dd6ad..26a1ccd 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,62 @@ Role Name ========= -Role to manage LVM Groups/Logical Volumes. Can be used to create, extend or resize LVM. +Role to manage LVM Groups/Logical Volumes. Can be used to create, extend or resize LVM Groups and volumes. Requirements ------------ 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. -##### Creating LVM -###### /dev/sda5 - -##### Extending LVM -###### Current disk /dev/sda5 -###### New Disk /dev/sdb - Role Variables -------------- ```` ---- -# defaults file for ansible-manage-lvm -create_lvm: false #defines if lvm should be created when adding additional disks...should be defined in host_vars/host (do not set extend or resize to true) -create_lvname: test-lv #define lvm name when adding additional disks...should be defined in host_vars/host -create_lvsize: 100%FREE #defines the lvm lv size --- (10G) - would create new lvm with 10Gigabytes -- (512) - would create new lvm with 512m -create_vgname: test-vg #defines the lvm vg name to create... -extend_lvm: false #defines if lvm vg should be extended (do not set create to true)...should be defined in host_vars/host -extend_lvname: test-lv #defines the lvm lv name to extend...should be defined in host_vars/host -extend_vgname: test-vg #defines the lvm vg name to extend...should be defined in host_vars/host -lvextend_options: '-L+10G' #defines the options to pass to lvextend --- ('-L+10G') - would increase by 10GB whereas ('-l +100%FREE') would increase to full capacity -lvm_current_disk: /dev/sda5 #defines the disk currently configured for lvm...should be defined in host_vars/host -lvm_extend_disks: '{{ lvm_current_disk }},{{ lvm_new_disk }}' #defines the disks to extend in lvm group...should be defined in host_vars/host -lvm_filesystem: ext4 #defines the filesystem type to create when configuring lvm ( ext3, ext4, xfs, etc. )...should be defined in host_vars/host -lvm_new_disk: /dev/sdb #defines the new disk being added to volume group...should be defined in host_vars/host -lvm_new_mntp: /mnt/test #defines the desired mount point to be created and new logical volume to be mounted to...should be defined in host_vars/host -resize_lvm: false #set to true if resizing the logical volume (do not set create to true)...should be defined in host_vars/host -resize_lvname: test-lv #defines the logical volume name to resize...should be defined in host_vars/host -resize_vgname: test-vg #defines the volume group name to resize...should be defined in host_vars/host +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 + extend: false #defines if lvol should be extended..ex. after adding additional disks to VG + lvextend_options: -L+10G #defines the options to pass to lvextend --- ('-L+10G') - would increase by 10GB whereas ('-l +100%FREE') would increase to full capacity + resize: false + - 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 + extend: true #defines if lvol should be extended..ex. after adding additional disks to VG + lvextend_options: -L+5G #defines the options to pass to lvextend --- ('-L+10G') - would increase by 10GB whereas ('-l +100%FREE') would increase to full capacity + resize: true + - 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 + extend: false #defines if lvol should be extended..ex. after adding additional disks to VG + lvextend_options: -L+10G #defines the options to pass to lvextend --- ('-L+10G') - would increase by 10GB whereas ('-l +100%FREE') would increase to full capacity + resize: true + - 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 + extend: false #defines if lvol should be extended..ex. after adding additional disks to VG + lvextend_options: -L+10G #defines the options to pass to lvextend --- ('-L+10G') - would increase by 10GB whereas ('-l +100%FREE') would increase to full capacity + resize: true ```` Dependencies diff --git a/defaults/main.yml b/defaults/main.yml index f826cf1..4318c85 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,22 +1,5 @@ --- # defaults file for ansible-manage-lvm -create_lvm: false #defines if lvm should be created when adding additional disks...should be defined in host_vars/host (do not set extend or resize to true) -create_lvname: test-lv #define lvm name when adding additional disks...should be defined in host_vars/host -create_lvsize: 100%FREE #defines the lvm lv size --- (10G) - would create new lvm with 10Gigabytes -- (512) - would create new lvm with 512m -create_vgname: test-vg #defines the lvm vg name to create... -extend_lvm: false #defines if lvm vg should be extended (do not set create to true)...should be defined in host_vars/host -extend_lvname: test-lv #defines the lvm lv name to extend...should be defined in host_vars/host -extend_vgname: test-vg #defines the lvm vg name to extend...should be defined in host_vars/host -lvextend_options: '-L+10G' #defines the options to pass to lvextend --- ('-L+10G') - would increase by 10GB whereas ('-l +100%FREE') would increase to full capacity -lvm_current_disk: /dev/sda5 #defines the disk currently configured for lvm...should be defined in host_vars/host -lvm_extend_disks: '{{ lvm_current_disk }},{{ lvm_new_disk }}' #defines the disks to extend in lvm group...should be defined in host_vars/host -lvm_filesystem: ext4 #defines the filesystem type to create when configuring lvm ( ext3, ext4, xfs, etc. )...should be defined in host_vars/host -lvm_new_disk: /dev/sdb #defines the new disk being added to volume group...should be defined in host_vars/host -lvm_new_mntp: /mnt/test #defines the desired mount point to be created and new logical volume to be mounted to...should be defined in host_vars/host -resize_lvm: false #set to true if resizing the logical volume (do not set create to true)...should be defined in host_vars/host -resize_lvname: test-lv #defines the logical volume name to resize...should be defined in host_vars/host -resize_vgname: test-vg #defines the volume group name to resize...should be defined in host_vars/host - lvm_groups: - vgname: ubuntu-vg disks: /dev/sda5 #for multiple disks...../dev/sdb,/dev/sdc diff --git a/tasks/create_lvm.yml b/tasks/create_lvm.yml deleted file mode 100644 index 986414b..0000000 --- a/tasks/create_lvm.yml +++ /dev/null @@ -1,24 +0,0 @@ ---- -- name: create_lvm | creating new LVM volume group - lvg: - vg: "{{ create_vgname }}" - pvs: "{{ lvm_new_disk }}" - state: present - -- name: create_lvm | creating new LVM logical volume - lvol: - vg: "{{ create_vgname }}" - lv: "{{ create_lvname }}" - size: "{{ create_lvsize }}" - -- name: create_lvm | creating new filesystem on new LVM logical volume - filesystem: - fstype: "{{ lvm_filesystem }}" - dev: "/dev/{{ create_vgname }}/{{ create_lvname }}" - -- name: create_lvm | mounting new filesystem - mount: - name: "{{ lvm_new_mntp }}" - src: "/dev/{{ create_vgname }}/{{ create_lvname }}" - fstype: "{{ lvm_filesystem }}" - state: mounted diff --git a/tasks/extend_lvm.yml b/tasks/extend_lvm.yml deleted file mode 100644 index a541e18..0000000 --- a/tasks/extend_lvm.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -- name: extend_lvm | extending existing LVM volume group - lvg: - vg: "{{ extend_vgname }}" - pvs: "{{ lvm_extend_disks }}" - -- name: extend_lvm | extending existing filesystem - command: lvextend {{ lvextend_options }} /dev/{{ extend_vgname }}/{{ extend_lvname }} diff --git a/tasks/main.yml b/tasks/main.yml index 5381d7f..713a60a 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -6,13 +6,4 @@ - include: centos.yml when: ansible_os_family == "RedHat" -#- include: create_lvm.yml -# when: create_lvm is defined and create_lvm - -#- include: extend_lvm.yml -# when: extend_lvm is defined and extend_lvm - -#- include: resize_lvm.yml -# when: resize_lvm is defined and resize_lvm - - include: manage_lvm.yml diff --git a/tasks/manage_lvm.yml b/tasks/manage_lvm.yml index 846896a..289e3da 100644 --- a/tasks/manage_lvm.yml +++ b/tasks/manage_lvm.yml @@ -4,44 +4,26 @@ vg: "{{ item.vgname }}" pvs: "{{ item.disks }}" state: present - with_items: - - lvm_groups + with_items: lvm_groups when: item.create is defined and item.create -- name: manage_lvm | Removing LVM volume group(s) - lvg: - vg: "{{ item.vgname }}" - pvs: "{{ item.disks }}" - state: absent - with_items: - - lvm_groups - when: item.create is defined and not item.create - - name: manage_lvm | creating new LVM logical volume(s) lvol: vg: "{{ item.0.vgname }}" lv: "{{ item.1.lvname }}" size: "{{ item.1.size }}" state: present + register: lvm with_subelements: - lvm_groups - lvnames when: ( item.0.create is defined and item.0.create ) and ( item.1.create is defined and item.1.create ) -- name: manage_lvm | Removing LVM logical volume(s) - lvol: - vg: "{{ item.0.vgname }}" - lv: "{{ item.1.lvname }}" - state: absent - with_subelements: - - lvm_groups - - lvnames - when: ( item.0.create is defined and item.0.create ) and ( item.1.create is defined and not 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 }}" +# resizefs: yes #coming in 2.0 which will replace the resizing filesystem task below with_subelements: - lvm_groups - lvnames @@ -58,9 +40,46 @@ - lvnames when: ( item.0.create is defined and item.0.create ) and ( item.1.create is defined and item.1.create ) and ( item.1.mount is defined and item.1.mount ) -- name: manage_lvm | extending existing filesystem - command: lvextend {{ item.1.lvextend_options }} /dev/{{ item.0.vgname }}/{{ item.1.lvname }} +- name: manage_lvm | resizing filesystem + command: resize2fs /dev/{{ item.0.vgname }}/{{ item.1.lvname }} with_subelements: - lvm_groups - lvnames - when: ( item.0.create is defined and item.0.create ) and ( item.1.create is defined and item.1.create ) and ( item.1.extend is defined and item.1.extend ) + when: lvm.changed and item.1.filesystem != "swap" + +- name: manage_lvm | resizing swap + shell: "swapoff -a && mkswap /dev/{{ item.0.vgname }}/{{ item.1.lvname }} && swapon -va" + with_subelements: + - lvm_groups + - lvnames + when: lvm.changed and item.1.filesystem == "swap" + +- 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 + with_subelements: + - lvm_groups + - lvnames + when: ( 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 + force: yes + with_subelements: + - lvm_groups + - lvnames + when: ( 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 + with_items: lvm_groups + when: item.create is defined and not item.create diff --git a/tasks/resize_lvm.yml b/tasks/resize_lvm.yml deleted file mode 100644 index a46c03a..0000000 --- a/tasks/resize_lvm.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -- name: resize_lvm | resizing filesystem - command: resize2fs /dev/{{ resize_vgname }}/{{ resize_lvname }}