summaryrefslogtreecommitdiff
path: root/roles/storage/lvm
diff options
context:
space:
mode:
Diffstat (limited to 'roles/storage/lvm')
-rw-r--r--roles/storage/lvm/base/defaults/main.yml36
-rw-r--r--roles/storage/lvm/base/filter_plugins/lvm.py18
-rw-r--r--roles/storage/lvm/base/tasks/main.yml15
-rw-r--r--roles/storage/lvm/device/defaults/main.yml11
-rw-r--r--roles/storage/lvm/device/tasks/main.yml25
-rw-r--r--roles/storage/lvm/volume/tasks/main.yml53
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 }}"