Skip to content

Commit 2ed10e9

Browse files
Introduce schema_version in the federated attribute mapping API
Depends-On: https://review.opendev.org/c/openstack/keystone/+/739966 Change-Id: I276ebd49094368dd823e50ff11a6e65fa2a6dcfb
1 parent dc8d9d3 commit 2ed10e9

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

openstackclient/identity/v3/mapping.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,21 @@ def _read_rules(self, path):
8181
else:
8282
return rules
8383

84+
@staticmethod
85+
def add_federated_schema_version_option(parser):
86+
parser.add_argument(
87+
'--schema-version',
88+
metavar='<schema_version>',
89+
required=False,
90+
default=None,
91+
help=_(
92+
"The federated attribute mapping schema version. The "
93+
"default value on the client side is 'None'; however, that "
94+
"will lead the backend to set the default according to "
95+
"'attribute_mapping_default_schema_version' option."
96+
),
97+
)
98+
8499

85100
class CreateMapping(command.ShowOne, _RulesReader):
86101
_description = _("Create new mapping")
@@ -98,14 +113,17 @@ def get_parser(self, prog_name):
98113
required=True,
99114
help=_('Filename that contains a set of mapping rules (required)'),
100115
)
116+
_RulesReader.add_federated_schema_version_option(parser)
101117
return parser
102118

103119
def take_action(self, parsed_args):
104120
identity_client = self.app.client_manager.identity
105121

106122
rules = self._read_rules(parsed_args.rules)
107123
mapping = identity_client.federation.mappings.create(
108-
mapping_id=parsed_args.mapping, rules=rules
124+
mapping_id=parsed_args.mapping,
125+
rules=rules,
126+
schema_version=parsed_args.schema_version,
109127
)
110128

111129
mapping._info.pop('links', None)
@@ -158,7 +176,7 @@ def take_action(self, parsed_args):
158176
# rules, (s)he should show specific ones.
159177
identity_client = self.app.client_manager.identity
160178
data = identity_client.federation.mappings.list()
161-
columns = ('ID',)
179+
columns = ('ID', 'schema_version')
162180
items = [utils.get_item_properties(s, columns) for s in data]
163181
return (columns, items)
164182

@@ -178,6 +196,8 @@ def get_parser(self, prog_name):
178196
metavar='<filename>',
179197
help=_('Filename that contains a new set of mapping rules'),
180198
)
199+
200+
_RulesReader.add_federated_schema_version_option(parser)
181201
return parser
182202

183203
def take_action(self, parsed_args):
@@ -186,7 +206,9 @@ def take_action(self, parsed_args):
186206
rules = self._read_rules(parsed_args.rules)
187207

188208
mapping = identity_client.federation.mappings.update(
189-
mapping=parsed_args.mapping, rules=rules
209+
mapping=parsed_args.mapping,
210+
rules=rules,
211+
schema_version=parsed_args.schema_version,
190212
)
191213

192214
mapping._info.pop('links', None)

openstackclient/tests/unit/identity/v3/test_mappings.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ def test_create_mapping(self):
6363
self.mapping_mock.create.assert_called_with(
6464
mapping_id=identity_fakes.mapping_id,
6565
rules=identity_fakes.MAPPING_RULES,
66+
schema_version=None,
6667
)
6768

6869
collist = ('id', 'rules')
@@ -106,12 +107,12 @@ def setUp(self):
106107
self.mapping_mock.list.return_value = [
107108
fakes.FakeResource(
108109
None,
109-
{'id': identity_fakes.mapping_id},
110+
{'id': identity_fakes.mapping_id, 'schema_version': '1.0'},
110111
loaded=True,
111112
),
112113
fakes.FakeResource(
113114
None,
114-
{'id': 'extra_mapping'},
115+
{'id': 'extra_mapping', 'schema_version': '2.0'},
115116
loaded=True,
116117
),
117118
]
@@ -128,10 +129,13 @@ def test_mapping_list(self):
128129

129130
self.mapping_mock.list.assert_called_with()
130131

131-
collist = ('ID',)
132+
collist = ('ID', 'schema_version')
132133
self.assertEqual(collist, columns)
133134

134-
datalist = [(identity_fakes.mapping_id,), ('extra_mapping',)]
135+
datalist = [
136+
(identity_fakes.mapping_id, '1.0'),
137+
('extra_mapping', '2.0'),
138+
]
135139
self.assertEqual(datalist, data)
136140

137141

@@ -173,6 +177,7 @@ def test_set_new_rules(self):
173177
self.mapping_mock.update.assert_called_with(
174178
mapping=identity_fakes.mapping_id,
175179
rules=identity_fakes.MAPPING_RULES_2,
180+
schema_version=None,
176181
)
177182

178183
self.assertIsNone(result)

0 commit comments

Comments
 (0)