add access_key to share_access_map

For backends with internal authentication system,
e.g. Ceph, that return ``access_key`` (credential) for
client identities that are granted share access:

* Retrieve ``access_key`` as return value of driver's
  update_access()

* Store ``access_key`` in ShareAccessMapping model

* Expose it in access_list API

APIImpact

DocImpact

Partially implements bp auth-access-keys

Co-Authored-By: John Spray <jspray@redhat.com>

Change-Id: I486064f117cf3001dba7735ca92a7d89aee3ce5b
diff --git a/manila_tempest_tests/config.py b/manila_tempest_tests/config.py
index 58cf389..4203a71 100644
--- a/manila_tempest_tests/config.py
+++ b/manila_tempest_tests/config.py
@@ -34,7 +34,7 @@
                help="The minimum api microversion is configured to be the "
                     "value of the minimum microversion supported by Manila."),
     cfg.StrOpt("max_api_microversion",
-               default="2.20",
+               default="2.21",
                help="The maximum api microversion is configured to be the "
                     "value of the latest microversion supported by Manila."),
     cfg.StrOpt("region",
diff --git a/manila_tempest_tests/tests/api/test_rules.py b/manila_tempest_tests/tests/api/test_rules.py
index 09422c2..8e70a5f 100644
--- a/manila_tempest_tests/tests/api/test_rules.py
+++ b/manila_tempest_tests/tests/api/test_rules.py
@@ -424,7 +424,7 @@
         elif CONF.share.enable_cephx_rules_for_protocols:
             cls.protocol = CONF.share.enable_cephx_rules_for_protocols[0]
             cls.access_type = "cephx"
-            cls.access_to = "alice"
+            cls.access_to = "eve"
         cls.shares_v2_client.share_protocol = cls.protocol
         cls.share = cls.create_share()
 
@@ -465,7 +465,10 @@
                                                             version=version)
 
         # verify keys
-        for key in ("id", "access_type", "access_to", "access_level"):
+        keys = ("id", "access_type", "access_to", "access_level")
+        if utils.is_microversion_ge(version, '2.21'):
+            keys += ("access_key", )
+        for key in keys:
             [self.assertIn(key, r.keys()) for r in rules]
         for key in ('deleted', 'deleted_at', 'instance_mappings'):
             [self.assertNotIn(key, r.keys()) for r in rules]
@@ -474,6 +477,11 @@
         self.assertEqual(self.access_type, rules[0]["access_type"])
         self.assertEqual(self.access_to, rules[0]["access_to"])
         self.assertEqual('rw', rules[0]["access_level"])
+        if utils.is_microversion_ge(version, '2.21'):
+            if self.access_type == 'cephx':
+                self.assertIsNotNone(rules[0]['access_key'])
+            else:
+                self.assertIsNone(rules[0]['access_key'])
 
         # our share id in list and have no duplicates
         gen = [r["id"] for r in rules if r["id"] in rule["id"]]