示例#1
0
    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
示例#2
0
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)
示例#3
0
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))
示例#4
0
 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)
示例#5
0
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