@@ -36,6 +36,42 @@ def get_service_name(service):
3636 return ''
3737
3838
39+ class AddProjectToEndpoint (command .Command ):
40+ _description = _ ("Associate a project to an endpoint" )
41+
42+ def get_parser (self , prog_name ):
43+ parser = super (
44+ AddProjectToEndpoint , self ).get_parser (prog_name )
45+ parser .add_argument (
46+ 'endpoint' ,
47+ metavar = '<endpoint>' ,
48+ help = _ ('Endpoint to associate with '
49+ 'specified project (name or ID)' ),
50+ )
51+ parser .add_argument (
52+ 'project' ,
53+ metavar = '<project>' ,
54+ help = _ ('Project to associate with '
55+ 'specified endpoint name or ID)' ),
56+ )
57+ common .add_project_domain_option_to_parser (parser )
58+ return parser
59+
60+ def take_action (self , parsed_args ):
61+ client = self .app .client_manager .identity
62+
63+ endpoint = utils .find_resource (client .endpoints ,
64+ parsed_args .endpoint )
65+
66+ project = common .find_project (client ,
67+ parsed_args .project ,
68+ parsed_args .project_domain )
69+
70+ client .endpoint_filter .add_endpoint_to_project (
71+ project = project .id ,
72+ endpoint = endpoint .id )
73+
74+
3975class CreateEndpoint (command .ShowOne ):
4076 _description = _ ("Create new endpoint" )
4177
@@ -152,34 +188,111 @@ def get_parser(self, prog_name):
152188 metavar = '<region-id>' ,
153189 help = _ ('Filter by region ID' ),
154190 )
191+ list_group = parser .add_mutually_exclusive_group ()
192+ list_group .add_argument (
193+ '--endpoint' ,
194+ metavar = '<endpoint-group>' ,
195+ help = _ ('Endpoint to list filters' ),
196+ )
197+ list_group .add_argument (
198+ '--project' ,
199+ metavar = '<project>' ,
200+ help = _ ('Project to list filters (name or ID)' ),
201+ )
202+ common .add_project_domain_option_to_parser (list_group )
155203 return parser
156204
157205 def take_action (self , parsed_args ):
158206 identity_client = self .app .client_manager .identity
159- columns = ('ID' , 'Region' , 'Service Name' , 'Service Type' ,
160- 'Enabled' , 'Interface' , 'URL' )
161- kwargs = {}
162- if parsed_args .service :
163- service = common .find_service (identity_client , parsed_args .service )
164- kwargs ['service' ] = service .id
165- if parsed_args .interface :
166- kwargs ['interface' ] = parsed_args .interface
167- if parsed_args .region :
168- kwargs ['region' ] = parsed_args .region
169- data = identity_client .endpoints .list (** kwargs )
170- service_list = identity_client .services .list ()
171-
172- for ep in data :
173- service = common .find_service_in_list (service_list , ep .service_id )
174- ep .service_name = get_service_name (service )
175- ep .service_type = service .type
207+
208+ endpoint = None
209+ if parsed_args .endpoint :
210+ endpoint = utils .find_resource (identity_client .endpoints ,
211+ parsed_args .endpoint )
212+ project = None
213+ if parsed_args .project :
214+ project = common .find_project (identity_client ,
215+ parsed_args .project ,
216+ parsed_args .project_domain )
217+
218+ if endpoint :
219+ columns = ('ID' , 'Name' )
220+ data = (
221+ identity_client .endpoint_filter
222+ .list_projects_for_endpoint (endpoint = endpoint .id )
223+ )
224+ else :
225+ columns = ('ID' , 'Region' , 'Service Name' , 'Service Type' ,
226+ 'Enabled' , 'Interface' , 'URL' )
227+ kwargs = {}
228+ if parsed_args .service :
229+ service = common .find_service (identity_client ,
230+ parsed_args .service )
231+ kwargs ['service' ] = service .id
232+ if parsed_args .interface :
233+ kwargs ['interface' ] = parsed_args .interface
234+ if parsed_args .region :
235+ kwargs ['region' ] = parsed_args .region
236+
237+ if project :
238+ data = (
239+ identity_client .endpoint_filter
240+ .list_endpoints_for_project (project = project .id )
241+ )
242+ else :
243+ data = identity_client .endpoints .list (** kwargs )
244+
245+ service_list = identity_client .services .list ()
246+
247+ for ep in data :
248+ service = common .find_service_in_list (service_list ,
249+ ep .service_id )
250+ ep .service_name = get_service_name (service )
251+ ep .service_type = service .type
252+
176253 return (columns ,
177254 (utils .get_item_properties (
178255 s , columns ,
179256 formatters = {},
180257 ) for s in data ))
181258
182259
260+ class RemoveProjectFromEndpoint (command .Command ):
261+ _description = _ ("Dissociate a project from an endpoint" )
262+
263+ def get_parser (self , prog_name ):
264+ parser = super (
265+ RemoveProjectFromEndpoint , self ).get_parser (prog_name )
266+ parser .add_argument (
267+ 'endpoint' ,
268+ metavar = '<endpoint>' ,
269+ help = _ ('Endpoint to dissociate from '
270+ 'specified project (name or ID)' ),
271+ )
272+ parser .add_argument (
273+ 'project' ,
274+ metavar = '<project>' ,
275+ help = _ ('Project to dissociate from '
276+ 'specified endpoint name or ID)' ),
277+ )
278+ common .add_project_domain_option_to_parser (parser )
279+ return parser
280+
281+ def take_action (self , parsed_args ):
282+ client = self .app .client_manager .identity
283+
284+ endpoint = utils .find_resource (client .endpoints ,
285+ parsed_args .endpoint )
286+
287+ project = common .find_project (client ,
288+ parsed_args .project ,
289+ parsed_args .project_domain )
290+
291+ client .endpoint_filter .delete_endpoint_from_project (
292+ project = project .id ,
293+ endpoint = endpoint .id )
294+
295+
183296class SetEndpoint (command .Command ):
184297 _description = _ ("Set endpoint properties" )
185298
0 commit comments