• trove instance service 总结


    def create(self, req, body, tenant_id):
    # TODO(hub-cap): turn this into middleware
    LOG.info(_LI("Creating a database instance for tenant '%s'"),
    tenant_id)
    LOG.debug("req : '%s' ", strutils.mask_password(req))
    LOG.debug("body : '%s' ", strutils.mask_password(body))
    context = req.environ[wsgi.CONTEXT_KEY]
    context.notification = notification.DBaaSInstanceCreate(context,
    request=req)
    datastore_args = body['instance'].get('datastore', {})
    datastore, datastore_version = (
    datastore_models.get_datastore_version(**datastore_args))
    image_id = datastore_version.image_id
    name = body['instance']['name']
    flavor_ref = body['instance']['flavorRef']
    flavor_id = utils.get_id_from_href(flavor_ref)

    configuration = self._configuration_parse(context, body)
    databases = populate_validated_databases(
    body['instance'].get('databases', []))
    database_names = [database.get('_name', '') for database in databases]
    users = None
    try:
    users = populate_users(body['instance'].get('users', []),
    database_names)
    except ValueError as ve:
    raise exception.BadRequest(msg=ve)

    if 'volume' in body['instance']:
    volume_info = body['instance']['volume']
    volume_size = int(volume_info['size'])
    volume_type = volume_info.get('type')
    else:
    volume_size = None
    volume_type = None

    if 'restorePoint' in body['instance']:
    backupRef = body['instance']['restorePoint']['backupRef']
    backup_id = utils.get_id_from_href(backupRef)
    else:
    backup_id = None

    availability_zone = body['instance'].get('availability_zone')
    nics = body['instance'].get('nics')

    slave_of_id = body['instance'].get('replica_of',
    # also check for older name
    body['instance'].get('slave_of'))
    replica_count = body['instance'].get('replica_count')
    modules = body['instance'].get('modules')
    locality = body['instance'].get('locality')
    if locality:
    locality_domain = ['affinity', 'anti-affinity']
    locality_domain_msg = ("Invalid locality '%s'. "
    "Must be one of ['%s']" %
    (locality,
    "', '".join(locality_domain)))
    if locality not in locality_domain:
    raise exception.BadRequest(msg=locality_domain_msg)
    if slave_of_id:
    dupe_locality_msg = (
    'Cannot specify locality when adding replicas to existing '
    'master.')
    raise exception.BadRequest(msg=dupe_locality_msg)

    instance = models.Instance.create(context, name, flavor_id,
    image_id, databases, users,
    datastore, datastore_version,
    volume_size, backup_id,
    availability_zone, nics,
    configuration, slave_of_id,
    replica_count=replica_count,
    volume_type=volume_type,
    modules=modules,
    locality=locality)

    view = views.InstanceDetailView(instance, req=req)
    return wsgi.Result(view.data(), 200)



    基本就是四步走,首先是请求上下文,然后创建实例对象,然后操作,最后返回wsgi
  • 相关阅读:
    redis 配置文件
    mysql的join
    mysql在DOS下的操作
    Echart显示在顶端显示总数
    汇编中,BP,SP有何区别?分别怎么使用?
    汇编函数调用中bp和sp是指什么?
    汇编语言中,SP,BP ,SI,DI作用?
    我对读计算机软件专业硕士的几点看法
    磨刀不误砍柴工
    《自己动手写操作系统》读书笔记——初识保护模式
  • 原文地址:https://www.cnblogs.com/S-tec-songjian/p/5796225.html
Copyright © 2020-2023  润新知