cinder NFS

Change-Id: Ie6193bae9a5e0704270652d36b5ff6ffaf70d3ed
diff --git a/README.rst b/README.rst
index 7d6c011..72b2f4e 100644
--- a/README.rst
+++ b/README.rst
@@ -232,6 +232,26 @@
             multipath: true
             pool: SAS15K
 
+
+Cinder setup with NFS
+
+.. code-block:: yaml
+
+    cinder:
+      controller:
+        enabled: true
+        default_volume_type: nfs-driver
+        backend:
+          nfs-driver:
+            engine: nfs
+            type_name: nfs-driver
+            volume_group: cinder-volume
+            path: /var/lib/cinder/nfs
+            devices:
+            - 172.16.10.110:/var/nfs/cinder
+            options: rw,sync
+
+
 Cinder setup with Hitachi VPS
 
 .. code-block:: yaml
diff --git a/cinder/controller.sls b/cinder/controller.sls
index a10d5d9..60020e6 100644
--- a/cinder/controller.sls
+++ b/cinder/controller.sls
@@ -53,6 +53,18 @@
 
 {%- for backend_name, backend in controller.get('backend', {}).iteritems() %}
 
+{%- if backend.engine is defined and backend.engine == 'nfs' %}
+/etc/cinder/nfs_shares:
+  file.managed:
+  - source: salt://cinder/files/{{ controller.version }}/nfs_shares
+  - defaults:
+      backend: {{ backend|yaml }}
+  - template: jinja
+  - require:
+    - pkg: cinder_controller_packages
+
+{%- endif %}
+
 cinder_type_create_{{ backend_name }}:
   cmd.run:
   - name: "source /root/keystonerc; cinder type-create {{ backend.type_name }}"
@@ -95,4 +107,4 @@
 
 {% endfor %}
 
-{%- endif %}
+{%- endif %}
\ No newline at end of file
diff --git a/cinder/files/backend/_nfs.conf b/cinder/files/backend/_nfs.conf
new file mode 100644
index 0000000..7c7cc7d
--- /dev/null
+++ b/cinder/files/backend/_nfs.conf
@@ -0,0 +1,11 @@
+
+[{{ backend_name }}]
+backend_host={{ backend.get('host', grains.host) }}
+volume_driver = cinder.volume.drivers.nfs.NfsDriver
+volume_backend_name={{ backend_name }}
+
+nfs_mount_attempts = 3
+nfs_mount_options = {{ backend.get('options', None) }}
+nfs_mount_point_base = {{ backend.get('path', '/mnt') }}
+nfs_shares_config = /etc/cinder/nfs_shares
+nfs_sparsed_volumes = True
diff --git a/cinder/files/liberty/nfs_shares b/cinder/files/liberty/nfs_shares
new file mode 100644
index 0000000..9878dca
--- /dev/null
+++ b/cinder/files/liberty/nfs_shares
@@ -0,0 +1,3 @@
+{%- for nfs_server in backend.devices %}
+{{ nfs_server }}
+{%- endfor %}
\ No newline at end of file
diff --git a/cinder/files/mitaka/nfs_shares b/cinder/files/mitaka/nfs_shares
new file mode 100644
index 0000000..9878dca
--- /dev/null
+++ b/cinder/files/mitaka/nfs_shares
@@ -0,0 +1,3 @@
+{%- for nfs_server in backend.devices %}
+{{ nfs_server }}
+{%- endfor %}
\ No newline at end of file
diff --git a/cinder/files/newton/nfs_shares b/cinder/files/newton/nfs_shares
new file mode 100644
index 0000000..9878dca
--- /dev/null
+++ b/cinder/files/newton/nfs_shares
@@ -0,0 +1,3 @@
+{%- for nfs_server in backend.devices %}
+{{ nfs_server }}
+{%- endfor %}
\ No newline at end of file
diff --git a/tests/pillar/nfs.sls b/tests/pillar/nfs.sls
new file mode 100644
index 0000000..c79b3c1
--- /dev/null
+++ b/tests/pillar/nfs.sls
@@ -0,0 +1,24 @@
+cinder:
+  controller:
+    enabled: true
+    version: liberty
+    default_volume_type: nfs-driver
+    backend:
+      nfs-driver:
+        engine: nfs
+        type_name: nfs-driver
+        volume_group: cinder-volume
+        path: /var/lib/cinder/nfs
+        devices:
+        - 172.16.10.110:/var/nfs/cinder
+        options: rw,sync
+  volume:
+    enabled: true
+    version: liberty
+    default_volume_type: nfs-driver
+    backend:
+      nfs-driver:
+        enabled: true
+        engine: nfs
+        type_name: nfs-driver
+        volume_group: cinder-volume
\ No newline at end of file