diff options
| author | Zuul <zuul@review.openstack.org> | 2017-12-13 02:18:43 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2017-12-13 02:18:43 +0000 |
| commit | 21b656ca4aa995530be474a8b9761b89f2ef93dd (patch) | |
| tree | b75291d0eb94a417b09c3cc6df1d2ea11338414b /openstackclient/identity | |
| parent | 58e5abf2946ce9f0fa118866ac89f6ce881e440e (diff) | |
| parent | 12ee1861085144f43e6e535f82ba5d9b5d9a5632 (diff) | |
| download | python-openstackclient-21b656ca4aa995530be474a8b9761b89f2ef93dd.tar.gz | |
Merge "Add support for endpoing filter commands"
Diffstat (limited to 'openstackclient/identity')
| -rw-r--r-- | openstackclient/identity/v3/endpoint.py | 147 |
1 files changed, 130 insertions, 17 deletions
diff --git a/openstackclient/identity/v3/endpoint.py b/openstackclient/identity/v3/endpoint.py index 3b4dd0de..3229240e 100644 --- a/openstackclient/identity/v3/endpoint.py +++ b/openstackclient/identity/v3/endpoint.py @@ -36,6 +36,42 @@ def get_service_name(service): return '' +class AddProjectToEndpoint(command.Command): + _description = _("Associate a project to an endpoint") + + def get_parser(self, prog_name): + parser = super( + AddProjectToEndpoint, self).get_parser(prog_name) + parser.add_argument( + 'endpoint', + metavar='<endpoint>', + help=_('Endpoint to associate with ' + 'specified project (name or ID)'), + ) + parser.add_argument( + 'project', + metavar='<project>', + help=_('Project to associate with ' + 'specified endpoint name or ID)'), + ) + common.add_project_domain_option_to_parser(parser) + return parser + + def take_action(self, parsed_args): + client = self.app.client_manager.identity + + endpoint = utils.find_resource(client.endpoints, + parsed_args.endpoint) + + project = common.find_project(client, + parsed_args.project, + parsed_args.project_domain) + + client.endpoint_filter.add_endpoint_to_project( + project=project.id, + endpoint=endpoint.id) + + class CreateEndpoint(command.ShowOne): _description = _("Create new endpoint") @@ -152,27 +188,68 @@ class ListEndpoint(command.Lister): metavar='<region-id>', help=_('Filter by region ID'), ) + list_group = parser.add_mutually_exclusive_group() + list_group.add_argument( + '--endpoint', + metavar='<endpoint-group>', + help=_('Endpoint to list filters'), + ) + list_group.add_argument( + '--project', + metavar='<project>', + help=_('Project to list filters (name or ID)'), + ) + common.add_project_domain_option_to_parser(list_group) return parser def take_action(self, parsed_args): identity_client = self.app.client_manager.identity - columns = ('ID', 'Region', 'Service Name', 'Service Type', - 'Enabled', 'Interface', 'URL') - kwargs = {} - if parsed_args.service: - service = common.find_service(identity_client, parsed_args.service) - kwargs['service'] = service.id - if parsed_args.interface: - kwargs['interface'] = parsed_args.interface - if parsed_args.region: - kwargs['region'] = parsed_args.region - data = identity_client.endpoints.list(**kwargs) - service_list = identity_client.services.list() - - for ep in data: - service = common.find_service_in_list(service_list, ep.service_id) - ep.service_name = get_service_name(service) - ep.service_type = service.type + + endpoint = None + if parsed_args.endpoint: + endpoint = utils.find_resource(identity_client.endpoints, + parsed_args.endpoint) + project = None + if parsed_args.project: + project = common.find_project(identity_client, + parsed_args.project, + parsed_args.project_domain) + + if endpoint: + columns = ('ID', 'Name') + data = ( + identity_client.endpoint_filter + .list_projects_for_endpoint(endpoint=endpoint.id) + ) + else: + columns = ('ID', 'Region', 'Service Name', 'Service Type', + 'Enabled', 'Interface', 'URL') + kwargs = {} + if parsed_args.service: + service = common.find_service(identity_client, + parsed_args.service) + kwargs['service'] = service.id + if parsed_args.interface: + kwargs['interface'] = parsed_args.interface + if parsed_args.region: + kwargs['region'] = parsed_args.region + + if project: + data = ( + identity_client.endpoint_filter + .list_endpoints_for_project(project=project.id) + ) + else: + data = identity_client.endpoints.list(**kwargs) + + service_list = identity_client.services.list() + + for ep in data: + service = common.find_service_in_list(service_list, + ep.service_id) + ep.service_name = get_service_name(service) + ep.service_type = service.type + return (columns, (utils.get_item_properties( s, columns, @@ -180,6 +257,42 @@ class ListEndpoint(command.Lister): ) for s in data)) +class RemoveProjectFromEndpoint(command.Command): + _description = _("Dissociate a project from an endpoint") + + def get_parser(self, prog_name): + parser = super( + RemoveProjectFromEndpoint, self).get_parser(prog_name) + parser.add_argument( + 'endpoint', + metavar='<endpoint>', + help=_('Endpoint to dissociate from ' + 'specified project (name or ID)'), + ) + parser.add_argument( + 'project', + metavar='<project>', + help=_('Project to dissociate from ' + 'specified endpoint name or ID)'), + ) + common.add_project_domain_option_to_parser(parser) + return parser + + def take_action(self, parsed_args): + client = self.app.client_manager.identity + + endpoint = utils.find_resource(client.endpoints, + parsed_args.endpoint) + + project = common.find_project(client, + parsed_args.project, + parsed_args.project_domain) + + client.endpoint_filter.delete_endpoint_from_project( + project=project.id, + endpoint=endpoint.id) + + class SetEndpoint(command.Command): _description = _("Set endpoint properties") |
