diff --git a/lib/ansible/modules/storage/netapp/na_ontap_export_policy_rule.py b/lib/ansible/modules/storage/netapp/na_ontap_export_policy_rule.py
index 09701cc3310..831975f2882 100644
--- a/lib/ansible/modules/storage/netapp/na_ontap_export_policy_rule.py
+++ b/lib/ansible/modules/storage/netapp/na_ontap_export_policy_rule.py
@@ -43,6 +43,9 @@ options:
   client_match:
     description:
     - List of Client Match host names, IP Addresses, Netgroups, or Domains
+    - If rule_index is not provided, client_match is used as a key to fetch current rule to determine create,delete,modify actions.
+      If a rule with provided client_match exists, a new rule will not be created, but the existing rule will be modified or deleted.
+      If a rule with provided client_match doesn't exist, a new rule will be created if state is present.
 
   ro_rule:
     description:
@@ -73,8 +76,6 @@ options:
   rule_index:
     description:
     - rule index of the export policy
-    - Required for delete and modify
-    - If rule_index is not set for a modify, the module will create another rule with desired parameters
 
   vserver:
     description:
@@ -214,15 +215,12 @@ class NetAppontapExportRule(object):
 
         if self.parameters.get('rule_index'):
             query['rule-index'] = self.parameters['rule_index']
+        elif self.parameters.get('client_match'):
+            query['client-match'] = self.parameters['client_match']
         else:
-            if self.parameters.get('ro_rule'):
-                query['ro-rule'] = {'security-flavor': self.parameters['ro_rule']}
-            if self.parameters.get('rw_rule'):
-                query['rw-rule'] = {'security-flavor': self.parameters['rw_rule']}
-            if self.parameters.get('protocol'):
-                query['protocol'] = {'security-flavor': self.parameters['protocol']}
-            if self.parameters.get('client_match'):
-                query['client-match'] = self.parameters['client_match']
+            self.module.fail_json(
+                msg="Need to specify at least one of the rule_index and client_match option.")
+
         attributes = {
             'query': {
                 'export-rule-info': query
@@ -247,7 +245,6 @@ class NetAppontapExportRule(object):
             self.module.fail_json(msg='Error getting export policy rule %s: %s'
                                   % (self.parameters['name'], to_native(error)),
                                   exception=traceback.format_exc())
-
         if result is not None and \
                 result.get_child_by_name('num-records') and int(result.get_child_content('num-records')) >= 1:
             current = dict()
@@ -265,6 +262,8 @@ class NetAppontapExportRule(object):
                 current[item_key] = self.na_helper.get_value_for_list(from_zapi=True,
                                                                       zapi_parent=rule_info.get_child_by_name(parent))
             current['num_records'] = int(result.get_child_content('num-records'))
+            if not self.parameters.get('rule_index'):
+                self.parameters['rule_index'] = current['rule_index']
         return current
 
     def get_export_policy(self):
@@ -358,8 +357,6 @@ class NetAppontapExportRule(object):
         """
         delete rule for the export policy.
         """
-        if self.parameters.get('rule_index') is None:
-            self.parameters['rule_index'] = rule_index
         export_rule_delete = netapp_utils.zapi.NaElement.create_node_with_children(
             'export-rule-destroy', **{'policy-name': self.parameters['name'],
                                       'rule-index': str(rule_index)})
@@ -398,6 +395,7 @@ class NetAppontapExportRule(object):
         # convert client_match list to comma-separated string
         if self.parameters.get('client_match') is not None:
             self.parameters['client_match'] = ','.join(self.parameters['client_match'])
+            self.parameters['client_match'] = self.parameters['client_match'].replace(' ', '')
 
         current, modify = self.get_export_policy_rule(), None
         action = self.na_helper.get_cd_action(current, self.parameters)