diff options
Diffstat (limited to 'roles/storage/lvm')
-rw-r--r-- | roles/storage/lvm/base/defaults/main.yml | 36 | ||||
-rw-r--r-- | roles/storage/lvm/base/filter_plugins/lvm.py | 18 | ||||
-rw-r--r-- | roles/storage/lvm/base/tasks/main.yml | 15 | ||||
-rw-r--r-- | roles/storage/lvm/device/defaults/main.yml | 11 | ||||
-rw-r--r-- | roles/storage/lvm/device/tasks/main.yml | 25 | ||||
-rw-r--r-- | roles/storage/lvm/volume/tasks/main.yml | 53 |
6 files changed, 105 insertions, 53 deletions
diff --git a/roles/storage/lvm/base/defaults/main.yml b/roles/storage/lvm/base/defaults/main.yml index 36df4a51..f85e2c80 100644 --- a/roles/storage/lvm/base/defaults/main.yml +++ b/roles/storage/lvm/base/defaults/main.yml @@ -5,17 +5,15 @@ lvm_groups: {} # foo: # pvs: # - /dev/sdb -# - /dev/sdc1 +# - /dev/sdc -lvm_volumes: {} +lvm_devices: {} -# lvm_volumes: -# system/test: +# lvm_devices: +# system/dev-test: # vg: "{{ host_name }}" -# lv: test +# lv: dev-test # size: 1G -# fs: ext4 -# dest: /srv/test # foo/test: &_lvm_thinpool_foo_test_ # vg: foo # lv: test @@ -25,11 +23,29 @@ lvm_volumes: {} # parent: *_lvm_thinpool_foo_test_ # lv: blub # size: 3G -# fs: ext4 -# dest: /srv/blub # foo/hugo: # parent: *_lvm_thinpool_foo_test_ # lv: hugo # size: 2G + +lvm_volumes: {} + +# lvm_volumes: +# system/vol-test: +# vg: "{{ host_name }}" +# lv: vol-test +# size: 1G +# fs: ext4 +# dest: /srv/test +# foo/app1: +# parent: *_lvm_thinpool_foo_test_ +# lv: app1 +# size: 3G +# fs: ext4 +# dest: /srv/app1 +# foo/app2: +# parent: *_lvm_thinpool_foo_test_ +# lv: app2 +# size: 2G # fs: ext4 -# dest: /srv/hugo +# dest: /srv/app2 diff --git a/roles/storage/lvm/base/filter_plugins/lvm.py b/roles/storage/lvm/base/filter_plugins/lvm.py index 0f8b1e97..312741a6 100644 --- a/roles/storage/lvm/base/filter_plugins/lvm.py +++ b/roles/storage/lvm/base/filter_plugins/lvm.py @@ -6,25 +6,25 @@ from functools import partial from ansible import errors -def lvm_volume_list(data): +def lvm_device_list(data): try: thinpools = [] - volumes = [] - for name, volume in data.items(): - entry = {'name': name, 'volume': volume} - if 'thinpool' in volume and volume['thinpool'] == True: + devices = [] + for name, device in data.items(): + entry = {'name': name, 'device': device} + if 'thinpool' in device and device['thinpool'] == True: thinpools.append(entry) else: - volumes.append(entry) - return thinpools + volumes + devices.append(entry) + return thinpools + devices except Exception as e: - raise errors.AnsibleFilterError("lvm_volume_list(): %s" % str(e)) + raise errors.AnsibleFilterError("lvm_device_list(): %s" % str(e)) class FilterModule(object): filter_map = { - 'lvm_volume_list': lvm_volume_list, + 'lvm_device_list': lvm_device_list, } def filters(self): diff --git a/roles/storage/lvm/base/tasks/main.yml b/roles/storage/lvm/base/tasks/main.yml index 75af733b..04d44ad0 100644 --- a/roles/storage/lvm/base/tasks/main.yml +++ b/roles/storage/lvm/base/tasks/main.yml @@ -11,11 +11,20 @@ pv_options: "{{ item.value.pv_options | default(omit) }}" state: present -- name: create lvm volumes - loop: "{{ lvm_volumes | lvm_volume_list }}" +- name: create lvm devices + loop: "{{ lvm_devices | lvm_device_list }}" loop_control: label: "{{ item.name }}" vars: - lvm_volume: "{{ item.volume }}" + lvm_device: "{{ item.device }}" + include_role: + name: storage/lvm/device + +- name: create lvm volumes + loop: "{{ lvm_volumes | dict2items }}" + loop_control: + label: "{{ item.key }}" + vars: + lvm_volume: "{{ item.value }}" include_role: name: storage/lvm/volume diff --git a/roles/storage/lvm/device/defaults/main.yml b/roles/storage/lvm/device/defaults/main.yml new file mode 100644 index 00000000..abe4f52c --- /dev/null +++ b/roles/storage/lvm/device/defaults/main.yml @@ -0,0 +1,11 @@ +--- +# lvm_device: +# parent: +# thinpool: true +# ... +# vg: foo +# lv: bar +# thinpool: false +# size: 10G + +lvm_device: "{{ storage_device }}" diff --git a/roles/storage/lvm/device/tasks/main.yml b/roles/storage/lvm/device/tasks/main.yml new file mode 100644 index 00000000..bac06b3d --- /dev/null +++ b/roles/storage/lvm/device/tasks/main.yml @@ -0,0 +1,25 @@ +--- +- name: check device parent + when: "'parent' in lvm_device" + assert: + msg: "the device parent must be a lvm thinpool" + that: + - (lvm_device.parent.thinpool | default(false)) + +- name: install thin-provisioning-tools + when: (lvm_device.thinpool | default(false)) + apt: + name: thin-provisioning-tools + state: present + +- name: create logical volume + lvol: + vg: "{{ lvm_device.parent.vg | default(lvm_device.vg) }}" + lv: "{{ (lvm_device.thinpool | default(false)) | ternary(omit, lvm_device.lv) }}" + size: "{{ lvm_device.size }}" + thinpool: "{{ (lvm_device.thinpool | default(false)) | ternary(lvm_device.lv, (lvm_device.parent.lv | default(omit))) }}" + +- name: export device path + when: not (lvm_device.thinpool | default(false)) + set_fact: + storage_device_path: "/dev/mapper/{{ lvm_device.parent.vg | default(lvm_device.vg) | replace('-', '--') }}-{{ lvm_device.lv | replace('-', '--') }}" diff --git a/roles/storage/lvm/volume/tasks/main.yml b/roles/storage/lvm/volume/tasks/main.yml index 9329965c..d7255739 100644 --- a/roles/storage/lvm/volume/tasks/main.yml +++ b/roles/storage/lvm/volume/tasks/main.yml @@ -6,42 +6,33 @@ that: - (lvm_volume.parent.thinpool | default(false)) -- name: install thin-provisioning-tools - when: (lvm_volume.thinpool | default(false)) - apt: - name: thin-provisioning-tools - state: present - - name: create logical volume lvol: vg: "{{ lvm_volume.parent.vg | default(lvm_volume.vg) }}" - lv: "{{ (lvm_volume.thinpool | default(false)) | ternary(omit, lvm_volume.lv) }}" + lv: "{{ lvm_volume.lv }}" size: "{{ lvm_volume.size }}" - thinpool: "{{ (lvm_volume.thinpool | default(false)) | ternary(lvm_volume.lv, (lvm_volume.parent.lv | default(omit))) }}" + thinpool: "{{ lvm_volume.parent.lv | default(omit) }}" -- name: create and mount filesystem - when: not (lvm_volume.thinpool | default(false)) - block: - - name: create filesystem - filesystem: - fstype: "{{ lvm_volume.fs }}" - dev: "/dev/mapper/{{ lvm_volume.parent.vg | default(lvm_volume.vg) | replace('-', '--') }}-{{ lvm_volume.lv | replace('-', '--') }}" +- name: create filesystem + filesystem: + fstype: "{{ lvm_volume.fs }}" + dev: "/dev/mapper/{{ lvm_volume.parent.vg | default(lvm_volume.vg) | replace('-', '--') }}-{{ lvm_volume.lv | replace('-', '--') }}" - - name: mount filesytem - mount: - src: "/dev/mapper/{{ lvm_volume.parent.vg | default(lvm_volume.vg) | replace('-', '--') }}-{{ lvm_volume.lv | replace('-', '--') }}" - path: "{{ lvm_volume.dest }}" - fstype: "{{ lvm_volume.fs }}" - state: mounted +- name: mount filesytem + mount: + src: "/dev/mapper/{{ lvm_volume.parent.vg | default(lvm_volume.vg) | replace('-', '--') }}-{{ lvm_volume.lv | replace('-', '--') }}" + path: "{{ lvm_volume.dest }}" + fstype: "{{ lvm_volume.fs }}" + state: mounted - - name: set volume owner/group and mode - file: - state: directory - path: "{{ lvm_volume.dest }}" - mode: "{{ lvm_volume.mode | default(omit) }}" - owner: "{{ lvm_volume.owner | default(omit) }}" - group: "{{ lvm_volume.group | default(omit) }}" +- name: set volume owner/group and mode + file: + state: directory + path: "{{ lvm_volume.dest }}" + mode: "{{ lvm_volume.mode | default(omit) }}" + owner: "{{ lvm_volume.owner | default(omit) }}" + group: "{{ lvm_volume.group | default(omit) }}" - - name: export volume mountpoint - set_fact: - storage_volume_mountpoint: "{{ lvm_volume.dest }}" +- name: export volume mountpoint + set_fact: + storage_volume_mountpoint: "{{ lvm_volume.dest }}" |