Skip to content

Commit e607ee2

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Identity: Add --project-domain option for limits"
2 parents 252f9ff + ea1f813 commit e607ee2

4 files changed

Lines changed: 76 additions & 8 deletions

File tree

openstackclient/identity/v3/limit.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def get_parser(self, prog_name):
6868
required=True,
6969
help=_('Project to associate the resource limit to'),
7070
)
71+
common_utils.add_project_domain_option_to_parser(parser)
7172
parser.add_argument(
7273
'--service',
7374
metavar='<service>',
@@ -98,12 +99,12 @@ def take_action(self, parsed_args):
9899
if parsed_args.description:
99100
kwargs["description"] = parsed_args.description
100101

101-
# TODO(0weng): Add --project-domain option
102-
# to support filtering project domain
103-
kwargs["project_id"] = common_utils._find_sdk_id(
104-
identity_client.find_project,
105-
name_or_id=parsed_args.project,
102+
kwargs["project_id"] = common_utils.find_project_id_sdk(
103+
identity_client,
104+
parsed_args.project,
105+
domain_name_or_id=parsed_args.project_domain,
106106
)
107+
107108
kwargs["service_id"] = common_utils.find_service_sdk(
108109
identity_client, parsed_args.service
109110
).id
@@ -144,6 +145,8 @@ def get_parser(self, prog_name):
144145
metavar='<project>',
145146
help=_('List resource limits associated with project'),
146147
)
148+
common_utils.add_project_domain_option_to_parser(parser)
149+
147150
return parser
148151

149152
def take_action(self, parsed_args):
@@ -160,12 +163,17 @@ def take_action(self, parsed_args):
160163
parsed_args.region
161164
).id
162165

163-
# TODO(0weng): Add --project-domain option
164-
# to support filtering project domain
165166
if parsed_args.project:
167+
project_domain_id = None
168+
if parsed_args.project_domain:
169+
project_domain_id = common_utils.find_domain_id_sdk(
170+
identity_client, parsed_args.project_domain
171+
)
172+
166173
kwargs["project_id"] = common_utils._find_sdk_id(
167174
identity_client.find_project,
168175
name_or_id=parsed_args.project,
176+
domain_id=project_domain_id,
169177
)
170178

171179
if parsed_args.resource_name:

openstackclient/tests/functional/identity/v3/test_limit.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,53 @@ def test_limit_create_with_project_name(self):
100100
self.assert_show_fields(items, self.LIMIT_FIELDS)
101101
registered_limit_id = self._create_dummy_registered_limit()
102102

103+
def test_limit_create_with_project_domain(self):
104+
registered_limit_id = self._create_dummy_registered_limit()
105+
raw_output = self.openstack(
106+
f'registered limit show {registered_limit_id}',
107+
cloud=SYSTEM_CLOUD,
108+
)
109+
items = self.parse_show(raw_output)
110+
service_id = self._extract_value_from_items('service_id', items)
111+
resource_name = self._extract_value_from_items('resource_name', items)
112+
113+
raw_output = self.openstack(f'service show {service_id}')
114+
items = self.parse_show(raw_output)
115+
service_name = self._extract_value_from_items('name', items)
116+
117+
project_name = self._create_dummy_project()
118+
raw_output = self.openstack(
119+
f'project show {project_name}',
120+
cloud=SYSTEM_CLOUD,
121+
)
122+
items = self.parse_show(raw_output)
123+
domain_id = self._extract_value_from_items('domain_id', items)
124+
125+
params = {
126+
'project_name': project_name,
127+
'project_domain': domain_id,
128+
'service_name': service_name,
129+
'resource_name': resource_name,
130+
'resource_limit': 15,
131+
}
132+
raw_output = self.openstack(
133+
'limit create'
134+
' --project {project_name}'
135+
' --project-domain {project_domain}'
136+
' --service {service_name}'
137+
' --resource-limit {resource_limit}'
138+
' {resource_name}'.format(**params),
139+
cloud=SYSTEM_CLOUD,
140+
)
141+
items = self.parse_show(raw_output)
142+
limit_id = self._extract_value_from_items('id', items)
143+
self.addCleanup(
144+
self.openstack, f'limit delete {limit_id}', cloud=SYSTEM_CLOUD
145+
)
146+
147+
self.assert_show_fields(items, self.LIMIT_FIELDS)
148+
registered_limit_id = self._create_dummy_registered_limit()
149+
103150
def test_limit_create_with_service_id(self):
104151
self._create_dummy_limit()
105152

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
# under the License.
1212

1313
from openstack import exceptions as sdk_exc
14+
from openstack.identity.v3 import domain as _domain
1415
from openstack.identity.v3 import limit as _limit
1516
from openstack.identity.v3 import project as _project
1617
from openstack.identity.v3 import region as _region
@@ -26,7 +27,10 @@ class TestLimitCreate(identity_fakes.TestIdentityv3):
2627
def setUp(self):
2728
super().setUp()
2829

29-
self.project = sdk_fakes.generate_fake_resource(_project.Project)
30+
self.domain = sdk_fakes.generate_fake_resource(_domain.Domain)
31+
self.project = sdk_fakes.generate_fake_resource(
32+
_project.Project, domain_id=self.domain.id
33+
)
3034
self.region = sdk_fakes.generate_fake_resource(_region.Region)
3135
self.service = sdk_fakes.generate_fake_resource(_service.Service)
3236

@@ -35,6 +39,7 @@ def setUp(self):
3539
self.identity_sdk_client.find_service.return_value = self.service
3640
self.identity_sdk_client.get_region.return_value = self.region
3741
self.identity_sdk_client.find_project.return_value = self.project
42+
self.identity_sdk_client.find_domain.return_value = self.domain
3843

3944
self.limit = sdk_fakes.generate_fake_resource(
4045
resource_type=_limit.Limit,
@@ -116,6 +121,8 @@ def test_limit_create_with_options(self):
116121
arglist = [
117122
'--project',
118123
self.project.id,
124+
'--project-domain',
125+
self.domain.name,
119126
'--service',
120127
self.service.id,
121128
'--resource-limit',
@@ -128,6 +135,7 @@ def test_limit_create_with_options(self):
128135
]
129136
verifylist = [
130137
('project', self.project.id),
138+
('project_domain', self.domain.name),
131139
('service', self.service.id),
132140
('resource_name', self.limit_with_options.resource_name),
133141
('resource_limit', resource_limit),
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
Add ``--project-domain`` option for the ``limit list`` and ``limit create``
5+
commands.

0 commit comments

Comments
 (0)