def deploy(config, actions): out = {} for action in actions: if hasattr(eval(action), '__call__'): out[action], failure = eval(action)(config, **actions[action]) if failure: break app = {} db.delete_app_info( config["appname"] ) for container in (out.get("running",[])+out.get("start_all",[])): name = container.get("Name").replace("/","") print "--> Container successfully started %s."%name db.create_container(config["appname"], container.get("Id"), name) app[name] = container return app
try: self.log.debug( "> load data from %s" % app_file ) stream = open(app_file, 'r') app = yaml.load(stream) except Exception: raise RuntimeError('Load yaml error!') config = utils.gen_config(app.get("name","default-app")) is_succeed = False try: app['src_app_id'] = app_id app["name"] = config["appname"] self.clone_app(config, app) #insert app to local db db.create_app(config["appname"], config["appname"], app_id, app['region'], base64.b64encode(utils.dict2str(app)) ) is_succeed = True except Result,e: print '!!!Expected error occur %s' % str(e.format()) except Exception,e: print '!!!Unexpected error occur %s' % str(e) finally: if not is_succeed: self.log.debug( '> Clear failed app info in local db' ) db.delete_app_info( config["appname"] ) raise RuntimeError('Clone app to local failed!') # Clone app def clone_app(self, config, app_dict): run_stack(config, app_dict)