Introduce `schema_version` in the federated attribute mapping API

Depends-On: https://review.opendev.org/c/openstack/keystone/+/739966
Change-Id: I276ebd49094368dd823e50ff11a6e65fa2a6dcfb
This commit is contained in:
Rafael Weingärtner 2024-01-26 18:22:53 -03:00
parent dc8d9d3541
commit 2ed10e9a72
2 changed files with 34 additions and 7 deletions

View File

@ -81,6 +81,21 @@ class _RulesReader(object):
else:
return rules
@staticmethod
def add_federated_schema_version_option(parser):
parser.add_argument(
'--schema-version',
metavar='<schema_version>',
required=False,
default=None,
help=_(
"The federated attribute mapping schema version. The "
"default value on the client side is 'None'; however, that "
"will lead the backend to set the default according to "
"'attribute_mapping_default_schema_version' option."
),
)
class CreateMapping(command.ShowOne, _RulesReader):
_description = _("Create new mapping")
@ -98,6 +113,7 @@ class CreateMapping(command.ShowOne, _RulesReader):
required=True,
help=_('Filename that contains a set of mapping rules (required)'),
)
_RulesReader.add_federated_schema_version_option(parser)
return parser
def take_action(self, parsed_args):
@ -105,7 +121,9 @@ class CreateMapping(command.ShowOne, _RulesReader):
rules = self._read_rules(parsed_args.rules)
mapping = identity_client.federation.mappings.create(
mapping_id=parsed_args.mapping, rules=rules
mapping_id=parsed_args.mapping,
rules=rules,
schema_version=parsed_args.schema_version,
)
mapping._info.pop('links', None)
@ -158,7 +176,7 @@ class ListMapping(command.Lister):
# rules, (s)he should show specific ones.
identity_client = self.app.client_manager.identity
data = identity_client.federation.mappings.list()
columns = ('ID',)
columns = ('ID', 'schema_version')
items = [utils.get_item_properties(s, columns) for s in data]
return (columns, items)
@ -178,6 +196,8 @@ class SetMapping(command.Command, _RulesReader):
metavar='<filename>',
help=_('Filename that contains a new set of mapping rules'),
)
_RulesReader.add_federated_schema_version_option(parser)
return parser
def take_action(self, parsed_args):
@ -186,7 +206,9 @@ class SetMapping(command.Command, _RulesReader):
rules = self._read_rules(parsed_args.rules)
mapping = identity_client.federation.mappings.update(
mapping=parsed_args.mapping, rules=rules
mapping=parsed_args.mapping,
rules=rules,
schema_version=parsed_args.schema_version,
)
mapping._info.pop('links', None)

View File

@ -63,6 +63,7 @@ class TestMappingCreate(TestMapping):
self.mapping_mock.create.assert_called_with(
mapping_id=identity_fakes.mapping_id,
rules=identity_fakes.MAPPING_RULES,
schema_version=None,
)
collist = ('id', 'rules')
@ -106,12 +107,12 @@ class TestMappingList(TestMapping):
self.mapping_mock.list.return_value = [
fakes.FakeResource(
None,
{'id': identity_fakes.mapping_id},
{'id': identity_fakes.mapping_id, 'schema_version': '1.0'},
loaded=True,
),
fakes.FakeResource(
None,
{'id': 'extra_mapping'},
{'id': 'extra_mapping', 'schema_version': '2.0'},
loaded=True,
),
]
@ -128,10 +129,13 @@ class TestMappingList(TestMapping):
self.mapping_mock.list.assert_called_with()
collist = ('ID',)
collist = ('ID', 'schema_version')
self.assertEqual(collist, columns)
datalist = [(identity_fakes.mapping_id,), ('extra_mapping',)]
datalist = [
(identity_fakes.mapping_id, '1.0'),
('extra_mapping', '2.0'),
]
self.assertEqual(datalist, data)
@ -173,6 +177,7 @@ class TestMappingSet(TestMapping):
self.mapping_mock.update.assert_called_with(
mapping=identity_fakes.mapping_id,
rules=identity_fakes.MAPPING_RULES_2,
schema_version=None,
)
self.assertIsNone(result)