def update_app(self, app_serial, body): try: app_name = body['name'] description = body['description'] sql = ("UPDATE manor.manor_app_instance " "SET app_name='%s',app_description='%s' " "WHERE app_serial='%s'") % (app_name, description, app_serial) execute(sql) vms = yield list_app_resources(app_serial) for vm in vms: yield update_vm_display_name(vm['vm_id'], app_name) rs = yield DBUtil().query( ("select * from manor.manor_app_instance " "where app_serial='%s'") % app_serial) seq = rs[0]['app_id'] optLog.write(self.request, optLog.Type.APP_INSTANCE, seq, Operator.UPDATE, '%s' % app_name) self.response(generals.gen_response({'result': 'ok'})) except Exception as detail: logging.getLogger('manor').error(generals.trace()) raise detail
def create_action(tmp, serial): try: log_manor().debug(tmp) group_name = tmp['group_name'] stack_id = yield create_stack(tmp['resources'][group_name], serial, group_name) execute( ("INSERT INTO manor.manor_stacks (stack_id,app_serial,group_name)" " VALUES (%s,%s,%s)"), (stack_id, serial, group_name)) except Exception as e: log_manor().error(generals.trace()) raise e raise gen.Return(stack_id)
def do_delete_app(serial): log = logging.getLogger('manor') def do_delete(rows): for r in rows: log.debug('delete stack %s' % r['stack_id']) stack_util.delete_stack(r['stack_id']) execute_query( "SELECT * FROM manor.manor_stacks where app_serial='%s'" % serial, do_delete) execute("DELETE FROM manor.manor_app_instance WHERE app_serial=%s", serial) execute("DELETE FROM manor.manor_stacks WHERE app_serial=%s", serial) execute("DELETE FROM manor.manor_app_group_seq WHERE app_serial=%s", serial) log_file = '%s/stream_%s.log' % (cfgutils.getval('log', 'path'), serial) if os.path.isfile(log_file): os.remove(log_file) if os.path.exists('%s/%s' % (cfgutils.getval('log', 'path'), serial)): shutil.rmtree('%s/%s' % (cfgutils.getval('log', 'path'), serial)) path = cfgutils.getval('app', 'instance_path') if os.path.isfile('%s/%s.yaml' % (path, serial)): os.remove('%s/%s.yaml' % (path, serial))
def update_status(self, state): sql = ("update manor.manor_app_instance set state='%s' " "where app_serial='%s'") % (state, self.serial) db_utils.execute(sql)
def create_instance(request, name, action_name, seq): log = logging.getLogger('manor') try: log.debug(request.body) instance_path = cfgutils.getval('app', 'instance_path') template_path = cfgutils.getval('app', 'template_path') params = json.loads(request.body) app_name = params['app_name'] if 'type' in params: action_type = params['type'] else: action_type = 'deploy' if action_type == 'deploy': if not os.path.isfile('%s/%s.yaml' % (template_path, name)): raise Exception('error.manor.templates.not.exist') content = load_template(template_path, name.replace(' ', '') + '.yaml') else: with open( '%s/%s.yaml' % (instance_path, params['app_name'].replace(' ', ''))) as f: rs = f.read() content = yaml.safe_load(rs) if action_name not in [_['name'] for _ in content['action']]: raise Exception('error.manor.action.not.exist') if 'app_description' not in content: content['app_description'] = '' if params['app_description']: content['app_description'] = params['app_description'] # 合并参数 merge_params(action_name, content, log, params) check_template(content) info_token_list = [] if action_type == 'deploy': serial = uuid.uuid1() execute(( "INSERT INTO manor.manor_app_instance" "(template_name,app_name,app_serial,state,app_description,app_id)" "VALUES(%s,%s,%s,%s,%s,%s)"), (name, app_name, serial, 'building', content['app_description'], seq)) # save origin templates. log.debug('save app templates : %s' % str(serial)) with codecs.open( '%s/%s.yaml' % (instance_path, str(serial).replace(' ', '')), 'w+', 'utf-8') as f: f.write(yaml.safe_dump(content)) else: # 执行管理流程 serial = params['app_name'] streamlet_key = params['params'].keys() for k in streamlet_key: s_ps = params['params'][k]['params'] for s_p in s_ps: if 'info_return' in s_p and s_p['info_return']: token = str(uuid.uuid1()) s_ps.append({'info_token': token}) info_token_list.append(token) # 为了token merge_params(action_name, content, log, params) logging.getLogger('manor').debug(pyaml.dumps(content)) stream.execute(content, action_name, str(serial)) if action_type == 'deploy': optLog.write(request, optLog.Type.APP_INSTANCE, seq, Operator.CREATE, '%s' % app_name) else: action_label = [ _ for _ in content['action'] if _['name'] == action_name ][0]['label'] def get_result(rows): app_name = rows[0]['app_name'] optLog.write(request, optLog.Type.APP_INSTANCE, seq, Operator.EXECUTE_ACTION, '%s %s' % (app_name, action_label)) execute_query( "select * from manor.manor_app_instance where app_serial='%s'" % serial, get_result) return info_token_list, serial except Exception as e: log.error(generals.trace()) raise e