From e541bed186c84094dbf58245f037267e0d74f279 Mon Sep 17 00:00:00 2001
From: Luca Lorenzetto <lorenzetto.luca@gmail.com>
Date: Fri, 16 Mar 2018 20:14:06 +0100
Subject: [PATCH] Added parameters to na_cdot_volume (#37202)

* Added parameters to na_cdot_volume

Before this commit there were no parameter for creating a volume
and exporting it as NFS volume. The added parameters are:
- *junction-path* for specifying where to mount the volume in the namespace
- *export-policy* for specifying which export policy to apply to the given namespace
- *snapshot-policy* if required, applying a snapshot policy for scheduling data protection tasks

* Sanity fixes

* Sanity fixes (2)
---
 .../modules/storage/netapp/na_cdot_volume.py  | 44 +++++++++++++++++--
 1 file changed, 41 insertions(+), 3 deletions(-)

diff --git a/lib/ansible/modules/storage/netapp/na_cdot_volume.py b/lib/ansible/modules/storage/netapp/na_cdot_volume.py
index c6ce8cf025..458fa54af9 100644
--- a/lib/ansible/modules/storage/netapp/na_cdot_volume.py
+++ b/lib/ansible/modules/storage/netapp/na_cdot_volume.py
@@ -69,6 +69,26 @@ options:
     - Name of the vserver to use.
     required: true
 
+  junction_path:
+    description:
+    - Junction path where to mount the volume
+    required: false
+    version_added: '2.6'
+
+  export_policy:
+    description:
+    - Export policy to set for the specified junction path.
+    required: false
+    default: default
+    version_added: '2.6'
+
+  snapshot_policy:
+    description:
+    - Snapshot policy to set for the specified volume.
+    required: false
+    default: default
+    version_added: '2.6'
+
 '''
 
 EXAMPLES = """
@@ -85,6 +105,9 @@ EXAMPLES = """
         hostname: "{{ netapp_hostname }}"
         username: "{{ netapp_username }}"
         password: "{{ netapp_password }}"
+        junction_path: /ansibleVolume
+        export_policy: all_nfs_networks
+        snapshot_policy: daily
 
     - name: Make FlexVol offline
       na_cdot_volume:
@@ -142,6 +165,9 @@ class NetAppCDOTVolume(object):
                                     'pb', 'eb', 'zb', 'yb'], type='str'),
             aggregate_name=dict(type='str'),
             vserver=dict(required=True, type='str', default=None),
+            junction_path=dict(required=False, type='str', default=None),
+            export_policy=dict(required=False, type='str', default='default'),
+            snapshot_policy=dict(required=False, type='str', default='default'),
         ))
 
         self.module = AnsibleModule(
@@ -161,6 +187,9 @@ class NetAppCDOTVolume(object):
         self.is_online = p['is_online']
         self.size_unit = p['size_unit']
         self.vserver = p['vserver']
+        self.junction_path = p['junction_path']
+        self.export_policy = p['export_policy']
+        self.snapshot_policy = p['snapshot_policy']
 
         if p['size'] is not None:
             self.size = p['size'] * self._size_unit_map[self.size_unit]
@@ -226,10 +255,19 @@ class NetAppCDOTVolume(object):
         return return_value
 
     def create_volume(self):
+        create_parameters = {'volume': self.name,
+                             'containing-aggr-name': self.aggregate_name,
+                             'size': str(self.size),
+                             }
+        if self.junction_path:
+            create_parameters['junction-path'] = str(self.junction_path)
+        if self.export_policy != 'default':
+            create_parameters['export-policy'] = str(self.export_policy)
+        if self.snapshot_policy != 'default':
+            create_parameters['snapshot-policy'] = str(self.snapshot_policy)
+
         volume_create = netapp_utils.zapi.NaElement.create_node_with_children(
-            'volume-create', **{'volume': self.name,
-                                'containing-aggr-name': self.aggregate_name,
-                                'size': str(self.size)})
+            'volume-create', **create_parameters)
 
         try:
             self.server.invoke_successfully(volume_create,