Skip to content

Commit 98dc2a3

Browse files
committed
Merge pull request openshift#11 from caruccio/master
Handling multiple domains
2 parents 8bb511b + 99222d9 commit 98dc2a3

File tree

1 file changed

+95
-54
lines changed

1 file changed

+95
-54
lines changed

oshift/__init__.py

Lines changed: 95 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
@@ -325,6 +342,7 @@ def domain_create(self, name, rhlogin='[email protected]'):
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

Comments
 (0)