@@ -261,6 +261,23 @@ def get_href(self, top_level_url, target_link, domain_name=None):
261261 else :
262262 return (None , None )
263263
264+ def yield_href (self , top_level_url , target_link ):
265+ status , res = self .rest .request (method = 'GET' , url = top_level_url )
266+ index = target_link .upper ()
267+ if status == 'Authorization Required' :
268+ #log.error("Authorization failed. (Check your credentials)")
269+ raise OpenShiftLoginException ('Authorization Required' )
270+
271+ data = self .rest .response .json ()['data' ]
272+ if data :
273+ for entry in data :
274+ res = entry ['links' ][index ]
275+
276+ yield (res ['href' ], res ['method' ])
277+ else :
278+ raise OpenShiftNullDomainException ("No domain has been initialized." )
279+ #return ('Not Found', self.rest.response.json)
280+
264281 ##### /user (sshkey)
265282 #@conditional_decorator(timeit, DOING_PERFORMANCE_ANALYSIS)
266283 @conditional_decorator (timeit , DOING_PERFORMANCE_ANALYSIS )
325342 @conditional_decorator (timeit , DOING_PERFORMANCE_ANALYSIS )
326343 def domain_delete (self , domain_name = None , force = True ):
327344 """ destroy a user's domain, if no name is given, figure it out"""
345+ log .debug ("Deleting domain '%s'" % domain_name )
328346 if domain_name is None :
329347 status , domain_name = self .domain_get ()
330348
@@ -338,6 +356,13 @@ def domain_delete(self, domain_name=None, force=True):
338356 else : # problem
339357 return (url , self .rest .response .raw )
340358
359+ def domain_delete_all (self , force = True ):
360+ """ destroy all user's domains"""
361+ results = []
362+ for status , domain_name in self .domain_list ():
363+ results .append (self .domain_delete (domain_name , force = force ))
364+ return results
365+
341366 @conditional_decorator (timeit , DOING_PERFORMANCE_ANALYSIS )
342367 def domain_get (self , name = None ):
343368 log .info ("Getting domain information..." )
@@ -353,20 +378,51 @@ def domain_get(self, name=None):
353378 domain_index_name = 'name'
354379 return (status , self .rest .response .json ()['data' ][domain_index_name ])
355380
356- def domain_update (self , new_name ):
381+ def domain_list (self ):
382+ log .info ("Listing domain information..." )
383+ domains = []
384+ for url , method in self .yield_href ('/domains' , 'get' ):
385+ (status , raw_response ) = self .rest .request (method = method , url = url )
386+ if status == 200 :
387+ domain_index_name = 'id' if self .REST_API_VERSION < 1.6 else 'name'
388+ domains .append ((status , self .rest .response .json ()['data' ][domain_index_name ]))
389+ return domains
390+
391+ def domain_update (self , new_name , old_name = None ):
357392 params = {'id' : new_name }
358- url , method = self .get_href ("/domains" , 'update' )
393+ url , method = self .get_href ("/domains" , 'update' , domain_name = old_name )
394+ if url == 'Not Found' :
395+ return ('Not Found' , None )
359396 (status , res ) = self .rest .request (method = method , url = url , params = params )
360397 return (status , res )
361398
362- def app_list (self ):
363- url , method = self .get_href ('/domains' , 'list_applications' )
399+ def app_list (self , domain_name = None ):
400+ url , method = self .get_href ('/domains' , 'list_applications' , domain_name = domain_name )
401+ if url == 'Not Found' :
402+ return ('Not Found' , None )
364403 (status , res ) = self .rest .request (method = method , url = url )
365404 return (status , self .rest .response .json ()['data' ])
366405
406+ def app_list_all (self ):
407+ """List all user's apps over all user's domains.
408+ Return format:
409+ [
410+ [status, [app, app, ...]],
411+ [status, [app, app, ...]],
412+ ...
413+ ]
414+ """
415+ results = []
416+ for url , method in self .yield_href ('/domains' , 'list_applications' ):
417+ (status , res ) = self .rest .request (method = method , url = url )
418+ results .append ((status , self .rest .response .json ()['data' ]))
419+ return results
420+
367421 @conditional_decorator (timeit , DOING_PERFORMANCE_ANALYSIS )
368- def app_create (self , app_name , app_type , scale = 'false' , init_git_url = None ):
369- url , method = self .get_href ('/domains' , 'add_application' )
422+ def app_create (self , app_name , app_type , scale = 'false' , init_git_url = None , domain_name = None ):
423+ url , method = self .get_href ('/domains' , 'add_application' , domain_name = domain_name )
424+ if url == 'Not Found' :
425+ return ('Not Found' , None )
370426 valid_options = self .rest .response .json ()['data' ][0 ]['links' ]['ADD_APPLICATION' ]['optional_params' ][0 ]['valid_options' ]
371427 #if app_type not in valid_options:
372428 # log.error("The app type you specified '%s' is not supported!" % app_type)
@@ -542,75 +598,64 @@ def app_create_scale(self, app_name, app_type, scale, init_git_url=None):
542598 self .app_create (app_name = app_name , app_type = app_type , scale = scale , init_git_url = init_git_url )
543599
544600 @conditional_decorator (timeit , DOING_PERFORMANCE_ANALYSIS )
545- def app_delete (self , app_name ):
546- params = {'action' : 'DELETE' , 'app_name' : app_name }
547- return self .app_action (params )
601+ def app_delete (self , app_name , domain_name = None ):
602+ return self .app_action ('DELETE' , app_name , domain_name = domain_name )
548603
549604 @conditional_decorator (timeit , DOING_PERFORMANCE_ANALYSIS )
550- def app_start (self , app_name ):
551- params = {"action" : 'START' , 'app_name' : app_name }
552- return self .app_action (params )
605+ def app_start (self , app_name , domain_name = None ):
606+ return self .app_action ('START' , app_name , domain_name = domain_name )
553607
554608 @conditional_decorator (timeit , DOING_PERFORMANCE_ANALYSIS )
555- def app_stop (self , app_name ):
556- params = {"action" : 'STOP' , 'app_name' : app_name }
557- return self .app_action (params )
609+ def app_stop (self , app_name , domain_name = None ):
610+ return self .app_action ('STOP' , app_name , domain_name = domain_name )
558611
559612 @conditional_decorator (timeit , DOING_PERFORMANCE_ANALYSIS )
560- def app_restart (self , app_name ):
561- params = {"action" : 'RESTART' , 'app_name' : app_name }
562- return self .app_action (params )
613+ def app_restart (self , app_name , domain_name = None ):
614+ return self .app_action ('RESTART' , app_name , domain_name = domain_name )
563615
564616 @conditional_decorator (timeit , DOING_PERFORMANCE_ANALYSIS )
565- def app_force_stop (self , app_name ):
566- params = {"action" : 'FORCE_STOP' , 'app_name' : app_name }
567- return self .app_action (params )
617+ def app_force_stop (self , app_name , domain_name = None ):
618+ return self .app_action ('FORCE_STOP' , app_name , domain_name = domain_name )
568619
569620 @conditional_decorator (timeit , DOING_PERFORMANCE_ANALYSIS )
570- def app_get_descriptor (self , app_name ):
571- params = {'action' : 'GET' , 'app_name' : app_name }
572- return self .app_action (params )
621+ def app_get_descriptor (self , app_name , domain_name = None ):
622+ return self .app_action ('GET' , app_name , domain_name = domain_name )
573623
574624 #############################################################
575625 # event related functions
576626 #############################################################
577- def app_scale_up (self , app_name ):
578- params = {'action' : 'SCALE_UP' , 'app_name' : app_name }
579- return self .app_action (params )
627+ def app_scale_up (self , app_name , domain_name = None ):
628+ return self .app_action ('SCALE_UP' , app_name , domain_name = domain_name )
580629
581- def app_scale_down (self , app_name ):
582- params = {'action' : 'SCALE_DOWN' , 'app_name' : app_name }
583- return self .app_action (params )
630+ def app_scale_down (self , app_name , domain_name = None ):
631+ return self .app_action ('SCALE_DOWN' , app_name , domain_name = domain_name )
584632
585- def app_add_alias (self , app_name , alias ):
586- params = {'action' : 'ADD_ALIAS' , 'app_name' : app_name , 'alias' : alias }
587- return self .app_action (params )
633+ def app_add_alias (self , app_name , alias , domain_name = None ):
634+ return self .app_action ('ADD_ALIAS' , app_name , alias = alias , domain_name = domain_name )
588635
589- def app_remove_alias (self , app_name , alias ):
590- params = {'action' : 'REMOVE_ALIAS' , 'app_name' : app_name , 'alias' : alias }
591- return self .app_action (params )
636+ def app_remove_alias (self , app_name , alias , domain_name = None ):
637+ return self .app_action ('REMOVE_ALIAS' , app_name , alias = alias , domain_name = domain_name )
592638
593639 def app_get_estimates (self ):
594640 url , method = self .get_href ('/estimates' , 'get_estimate' )
641+ if url == 'Not Found' :
642+ return ('Not Found' , None )
595643 (status , res ) = self .rest .request (method = method , url = url )
596644 return (status , self .rest .response .json ()['data' ])
597645
598646 #params = {'action': 'GET_ESTIMATE'}
599647 #return self.app_action(params)
600648
601- def app_action (self , params ):
649+ def app_action (self , action , app_name , domain_name = None , ** params ):
602650 """ generic helper function that is capable of doing all the operations
603651 for application
604652 """
605- # step1. find th url and method
606- status , res = self .app_list ()
653+ # step1. find url and method
654+ status , res = self .app_list (domain_name )
607655
656+ action = action .upper ()
608657 app_found = False
609- action = params ['action' ]
610- if 'app_name' in params :
611- app_name = params ['app_name' ]
612- if 'cartridge' in params :
613- cart_name = params ['cartridge' ]
658+ #cart_name = params.get('cartridge', None)
614659
615660 for app in res :
616661 #for app in res['data']:
@@ -650,20 +695,16 @@ def app_action(self, params):
650695
651696 def get_gears (self , app_name , domain_name = None ):
652697 """ return gears information """
653- params = {"action" : 'GET_GEAR_GROUPS' , 'app_name' : app_name }
654- return self .app_action (params )
698+ return self .app_action ('GET_GEAR_GROUPS' , app_name , domain_name = domain_name )
655699
656700 ################################
657701 # cartridges
658702 ################################
659- def cartridge_list (self , app_name ):
660- params = {"action" : 'LIST_CARTRIDGES' , 'app_name' : app_name }
661- return self .app_action (params )
662-
663- def cartridge_add (self , app_name , cartridge ):
664- params = {"action" : 'ADD_CARTRIDGE' , 'app_name' : app_name ,
665- 'cartridge' : cartridge }
666- status , res = self .app_action (params )
703+ def cartridge_list (self , app_name , domain_name = None ):
704+ return self .app_action ('LIST_CARTRIDGES' , app_name , domain_name = domain_name )
705+
706+ def cartridge_add (self , app_name , cartridge , domain_name = None ):
707+ status , res = self .app_action ('ADD_CARTRIDGE' , app_name , cartridge = cartridge , domain_name = domain_name )
667708 return (status , self .rest .response .json ()['messages' ])
668709
669710 def cartridge_delete (self , app_name , name ):
0 commit comments