Adding feature to support lvm for ephemeral VMs

Change-Id: Ib4329027e23981cbba39c9c1c894adbbbea4c7c3
diff --git a/README.rst b/README.rst
index da98313..ab61b71 100644
--- a/README.rst
+++ b/README.rst
@@ -285,7 +285,33 @@
           rbd_pool: nova
           rbd_user: nova
           secret_uuid: 03006edd-d957-40a3-ac4c-26cd254b3731
+      ....
 
+Nova with ephemeral configured with LVM
+
+.. code-block:: yaml
+
+    nova:
+      compute:
+        enabled: true
+        ...
+        lvm:
+          ephemeral: yes
+          images_volume_group: nova_vg
+
+    linux:
+      storage:
+        lvm:
+          nova_vg:
+            name: nova_vg
+            devices:
+              - /dev/sdf
+              - /dev/sdd
+              - /dev/sdg
+              - /dev/sde
+              - /dev/sdc
+              - /dev/sdj
+              - /dev/sdh
 
 Client role
 -----------
diff --git a/nova/files/mitaka/nova-compute.conf.Debian b/nova/files/mitaka/nova-compute.conf.Debian
index e89a442..f5db5e7 100644
--- a/nova/files/mitaka/nova-compute.conf.Debian
+++ b/nova/files/mitaka/nova-compute.conf.Debian
@@ -134,6 +134,15 @@
 rbd_secret_uuid={{ compute.ceph.secret_uuid }}
 libvirt_inject_password=false
 libvirt_inject_key=false
+{%- elif compute.get('lvm', {}).ephemeral is defined %}
+images_type=lvm
+images_volume_group={{ compute.lvm.images_volume_group }}
+{%- if compute.lvm.volume_clear is defined %}
+volume_clear={{ compute.lvm.volume_clear }}
+{%- endif %}
+{%- if compute.lvm.volume_clear_size is defined %}
+volume_clear_size={{ compute.lvm.volume_clear_size }}
+{%- endif %}
 {%- endif %}
 {%- if compute.libvirt.hw_disk_discard is defined %}
 hw_disk_discard={{ compute.libvirt.hw_disk_discard }}
diff --git a/nova/files/newton/nova-compute.conf.Debian b/nova/files/newton/nova-compute.conf.Debian
index d9f5975..40638c5 100644
--- a/nova/files/newton/nova-compute.conf.Debian
+++ b/nova/files/newton/nova-compute.conf.Debian
@@ -159,6 +159,15 @@
 rbd_secret_uuid={{ compute.ceph.secret_uuid }}
 libvirt_inject_password=false
 libvirt_inject_key=false
+{%- elif compute.get('lvm', {}).ephemeral is defined %}
+images_type=lvm
+images_volume_group={{ compute.lvm.images_volume_group }}
+{%- if compute.lvm.volume_clear is defined %}
+volume_clear={{ compute.lvm.volume_clear }}
+{%- endif %}
+{%- if compute.lvm.volume_clear_size is defined %}
+volume_clear_size={{ compute.lvm.volume_clear_size }}
+{%- endif %}
 {%- endif %}
 {%- if compute.libvirt.hw_disk_discard is defined %}
 hw_disk_discard={{ compute.libvirt.hw_disk_discard }}
diff --git a/nova/files/ocata/nova-compute.conf.Debian b/nova/files/ocata/nova-compute.conf.Debian
index 77d4b50..db5357b 100644
--- a/nova/files/ocata/nova-compute.conf.Debian
+++ b/nova/files/ocata/nova-compute.conf.Debian
@@ -5916,6 +5916,15 @@
 rbd_secret_uuid={{ compute.ceph.secret_uuid }}
 inject_password=false
 inject_key=false
+{%- elif compute.get('lvm', {}).ephemeral is defined %}
+images_type=lvm
+images_volume_group={{ compute.lvm.images_volume_group }}
+{%- if compute.lvm.volume_clear is defined %}
+volume_clear={{ compute.lvm.volume_clear }}
+{%- endif %}
+{%- if compute.lvm.volume_clear_size is defined %}
+volume_clear_size={{ compute.lvm.volume_clear_size }}
+{%- endif %}
 {%- endif %}
 
 {%- if compute.get('libvirt', {}).uri is defined %}
diff --git a/tests/pillar/compute_cluster.sls b/tests/pillar/compute_cluster.sls
index 2bcd9b4..b027101 100644
--- a/tests/pillar/compute_cluster.sls
+++ b/tests/pillar/compute_cluster.sls
@@ -70,3 +70,9 @@
     upgrade_levels:
       compute: liberty
     libvirt_service_group: libvirtd
+    lvm:
+      ephemeral: yes
+      images_volume_group: nova_vg
+      volume_clear: zero
+      volume_clear_size: 0
+