Add ability to set key value pairs in projects · no2key/python-openstackclient@70e6333 · GitHub
Skip to content

Commit 70e6333

Browse files
committed
Add ability to set key value pairs in projects
Add supporto of extra key value pairs for projects (aka tenants) * Added option --property key=value to create and set commands * Support for versions v2 and v3 Change-Id: I84064b8b308579d1b66c83b1ed3d1a37614ec087 Closes-Bug: #1220280
1 parent 808fa65 commit 70e6333

4 files changed

Lines changed: 178 additions & 0 deletions

File tree

openstackclient/identity/v2_0/project.py

Lines changed: 22 additions & 0 deletions

openstackclient/identity/v3/project.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from cliff import lister
2323
from cliff import show
2424

25+
from openstackclient.common import parseractions
2526
from openstackclient.common import utils
2627

2728

@@ -58,6 +59,13 @@ def get_parser(self, prog_name):
5859
action='store_true',
5960
help='Disable project',
6061
)
62+
parser.add_argument(
63+
'--property',
64+
metavar='<key=value>',
65+
action=parseractions.KeyValueAction,
66+
help='Property to add for this project '
67+
'(repeat option to set multiple properties)',
68+
)
6169
return parser
6270

6371
def take_action(self, parsed_args):
@@ -75,12 +83,16 @@ def take_action(self, parsed_args):
7583
enabled = True
7684
if parsed_args.disable:
7785
enabled = False
86+
kwargs = {}
87+
if parsed_args.property:
88+
kwargs = parsed_args.property.copy()
7889

7990
project = identity_client.projects.create(
8091
parsed_args.name,
8192
domain,
8293
description=parsed_args.description,
8394
enabled=enabled,
95+
**kwargs
8496
)
8597

8698
info = {}
@@ -182,6 +194,13 @@ def get_parser(self, prog_name):
182194
action='store_true',
183195
help='Disable project',
184196
)
197+
parser.add_argument(
198+
'--property',
199+
metavar='<key=value>',
200+
action=parseractions.KeyValueAction,
201+
help='Property to add for this project '
202+
'(repeat option to set multiple properties)',
203+
)
185204
return parser
186205

187206
def take_action(self, parsed_args):
@@ -192,6 +211,7 @@ def take_action(self, parsed_args):
192211
and not parsed_args.description
193212
and not parsed_args.domain
194213
and not parsed_args.enable
214+
and not parsed_args.property
195215
and not parsed_args.disable):
196216
return
197217

@@ -214,6 +234,8 @@ def take_action(self, parsed_args):
214234
kwargs['enabled'] = True
215235
if parsed_args.disable:
216236
kwargs['enabled'] = False
237+
if parsed_args.property:
238+
kwargs.update(parsed_args.property)
217239
if 'id' in kwargs:
218240
del kwargs['id']
219241
if 'domain_id' in kwargs:

openstackclient/tests/identity/v2_0/test_project.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,43 @@ def test_project_create_disable(self):
182182
)
183183
self.assertEqual(data, datalist)
184184

185+
def test_project_create_property(self):
186+
arglist = [
187+
'--property', 'fee=fi',
188+
'--property', 'fo=fum',
189+
identity_fakes.project_name,
190+
]
191+
verifylist = [
192+
('property', {'fee': 'fi', 'fo': 'fum'}),
193+
('name', identity_fakes.project_name),
194+
]
195+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
196+
197+
# DisplayCommandBase.take_action() returns two tuples
198+
columns, data = self.cmd.take_action(parsed_args)
199+
200+
# Set expected values
201+
kwargs = {
202+
'description': None,
203+
'enabled': True,
204+
'fee': 'fi',
205+
'fo': 'fum',
206+
}
207+
self.projects_mock.create.assert_called_with(
208+
identity_fakes.project_name,
209+
**kwargs
210+
)
211+
212+
collist = ('description', 'enabled', 'id', 'name')
213+
self.assertEqual(columns, collist)
214+
datalist = (
215+
identity_fakes.project_description,
216+
True,
217+
identity_fakes.project_id,
218+
identity_fakes.project_name,
219+
)
220+
self.assertEqual(data, datalist)
221+
185222

186223
class TestProjectDelete(TestProject):
187224

@@ -412,6 +449,34 @@ def test_project_set_disable(self):
412449
**kwargs
413450
)
414451

452+
def test_project_set_property(self):
453+
arglist = [
454+
'--property', 'fee=fi',
455+
'--property', 'fo=fum',
456+
identity_fakes.project_name,
457+
]
458+
verifylist = [
459+
('property', {'fee': 'fi', 'fo': 'fum'}),
460+
('project', identity_fakes.project_name),
461+
]
462+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
463+
464+
result = self.cmd.run(parsed_args)
465+
self.assertEqual(result, 0)
466+
467+
# Set expected values
468+
kwargs = {
469+
'description': identity_fakes.project_description,
470+
'enabled': True,
471+
'tenant_name': identity_fakes.project_name,
472+
'fee': 'fi',
473+
'fo': 'fum',
474+
}
475+
self.projects_mock.update.assert_called_with(
476+
identity_fakes.project_id,
477+
**kwargs
478+
)
479+
415480

416481
class TestProjectShow(TestProject):
417482

openstackclient/tests/identity/v3/test_project.py

Lines changed: 69 additions & 0 deletions

0 commit comments

Comments
 (0)