コード例 #1
0
def get_or_create_provider_machine(image_id, machine_name, provider_uuid, app=None, version=None):
    """
    Guaranteed Return of ProviderMachine.
    1. Load provider machine from DB
    2. If 'Miss':
       * Lookup application based on PM uuid
       If 'Miss':
         * Create application based on PM uuid
    3. Using application from 2. Create provider machine
    """
    provider_machine = get_provider_machine(image_id, provider_uuid)
    if provider_machine:
        return provider_machine
    if not app:
        app = get_application(provider_uuid, image_id, machine_name)
    # ASSERT: If no application here, this is a new image (Found on instance)
    # that was created on a seperate server. We need to make a new one.
    if not app:
        app = create_application(provider_uuid, image_id, machine_name)

    if not version:
        version = get_version_for_machine(provider_uuid, image_id, fuzzy=True)
    if not version:
        version = create_app_version(app, "1.0", provider_machine_id=image_id)
    # TODO: fuzzy=True returns a list, but call comes through as a .get()?
    #      this line will cover that edge-case.
    if type(version) in [models.QuerySet, list]:
        version = version[0]

    return create_provider_machine(image_id, provider_uuid, app, version=version)
コード例 #2
0
ファイル: machine.py プロジェクト: naveentrtumkur/atmosphere
def get_or_create_provider_machine(image_id, machine_name,
                                   provider_uuid, app=None, version=None,
                                   version_name="1.0"):
    """
    Guaranteed Return of ProviderMachine.
    1. Load provider machine from DB
    2. If 'Miss':
       * Lookup application based on PM uuid
       If 'Miss':
         * Create application based on PM uuid
    3. Using application from 2. Create provider machine
    """
    provider_machine = get_provider_machine(image_id, provider_uuid)
    if provider_machine:
        return provider_machine
    if not app:
        app = get_application(provider_uuid, image_id, machine_name)
    # ASSERT: If no application here, this is a new image (Found on instance)
    # that was created on a seperate server. We need to make a new one.
    if not app:
        app = create_application(provider_uuid, image_id, machine_name)

    if not version:
        version = get_version_for_machine(provider_uuid, image_id, fuzzy=True)
        if not version:
            version = create_app_version(app, version_name, provider_machine_id=image_id)
    if type(version) in [models.QuerySet, list]:
        version = version[0]

    return create_provider_machine(
        image_id,
        provider_uuid,
        app,
        version=version)
コード例 #3
0
ファイル: machine.py プロジェクト: catdewey/atmosphere
def get_or_create_provider_machine(image_id, machine_name,
                                   provider_uuid, app=None, version=None):
    """
    Guaranteed Return of ProviderMachine.
    1. Load provider machine from DB
    2. If 'Miss':
       * Lookup application based on PM uuid
       If 'Miss':
         * Create application based on PM uuid
    3. Using application from 2. Create provider machine
    """
    provider_machine = get_provider_machine(image_id, provider_uuid)
    if provider_machine:
        return provider_machine
    if not app:
        app = get_application(provider_uuid, image_id, machine_name)
    # ASSERT: If no application here, this is a new image (Found on instance)
    # that was created on a seperate server. We need to make a new one.
    if not app:
        app = create_application(provider_uuid, image_id, machine_name)

    if not version:
        version = get_version_for_machine(provider_uuid, image_id)
    if not version:
        version = create_app_version(app, "1.0", provider_machine_id=image_id)

    return create_provider_machine(
        image_id,
        provider_uuid,
        app,
        version=version)
コード例 #4
0
def convert_glance_image(glance_image, provider_uuid, owner=None):
    """
    Guaranteed Return of ProviderMachine.
    1. Load provider machine from DB and return
    2a. If 'Miss':
        * Lookup application based on glance_machine metadata for application_uuid
        If 'Miss':
          * Create application based on available glance_machine metadata
    2b. Using application from 2. Create provider machine
    """
    from core.models import AtmosphereUser
    image_id = glance_image.id
    machine_name = glance_image.name
    application_name = machine_name  # Future: application_name will partition at the 'Application Version separator'.. and pass the version_name to create_version
    provider_machine = get_provider_machine(image_id, provider_uuid)
    if provider_machine:
        return (provider_machine, False)
    app_kwargs = collect_image_metadata(glance_image)
    if owner and hasattr(owner,'name'):
        owner_name = owner.name
    else:
        owner_name = glance_image.get('application_owner')
    user = AtmosphereUser.objects.filter(username=owner_name).first()
    if user:
        identity = Identity.objects.filter(
            provider__uuid=provider_uuid, created_by=user).first()
    else:
        identity = None
    app_kwargs.update({
        'created_by': user,
        'created_by_identity': identity
    })
    app = create_application(
        provider_uuid, image_id, application_name,
        **app_kwargs)
    version = get_version_for_machine(provider_uuid, image_id, fuzzy=True)
    if not version:
        version_kwargs = {
            'version_str': glance_image.get('application_version', '1.0'),
            'created_by': user,
            'created_by_identity': identity,
            'provider_machine_id': image_id
        }
        version = create_app_version(app, **version_kwargs)
    #TODO: fuzzy=True returns a list, but call comes through as a .get()?
    #      this line will cover that edge-case.
    if type(version) in [models.QuerySet, list]:
        version = version[0]

    machine_kwargs = {
        'created_by_identity': identity,
        'version': version
    }
    provider_machine = create_provider_machine(
        image_id, provider_uuid,
        app, **machine_kwargs)
    return (provider_machine, True)
コード例 #5
0
def convert_glance_image(
    account_driver, glance_image, provider_uuid, owner=None
):
    """
    Guaranteed Return of ProviderMachine.
    1. Load provider machine from DB and return
    2a. If 'Miss':
        * Lookup application based on glance_machine metadata for application_uuid
        If 'Miss':
          * Create application based on available glance_machine metadata
    2b. Using application from 2. Create provider machine
    """
    if hasattr(glance_image, 'id'):
        image_id = glance_image.id
    elif type(glance_image) == dict:
        image_id = glance_image.get('id')
    else:
        raise ValueError("Unexpected glance_image: %s" % glance_image)

    provider_machine = get_provider_machine(image_id, provider_uuid)
    if provider_machine:
        if provider_machine.is_end_dated():
            return (None, False)
        update_instance_source_size(
            provider_machine.instance_source, glance_image.get('size')
        )
        return (provider_machine, False)
    (app_kwargs, version_kwargs
    ) = _application_and_version_from_metadata(account_driver, glance_image)
    # TODO: use version_kwargs in method below?
    version = get_version_for_machine(provider_uuid, image_id, fuzzy=True)
    if version:
        app = version.application
    else:
        app = create_application(**app_kwargs)
        version = create_app_version(app=app, **version_kwargs)

    #TODO: fuzzy=True returns a list, but call comes through as a .get()?
    #      this line will cover that edge-case.
    if type(version) in [models.QuerySet, list]:
        version = version[0]

    machine_kwargs = {
        'created_by_identity': version_kwargs.get('created_by_identity'),
        'version': version
    }
    provider_machine = create_provider_machine(
        image_id, provider_uuid, app, **machine_kwargs
    )
    update_instance_source_size(
        provider_machine.instance_source, glance_image.get('size')
    )
    return (provider_machine, True)
コード例 #6
0
ファイル: machine.py プロジェクト: zhxu73/atmosphere
def convert_glance_image(account_driver,
                         glance_image,
                         provider_uuid,
                         owner=None):
    """
    Guaranteed Return of ProviderMachine.
    1. Load provider machine from DB and return
    2a. If 'Miss':
        * Lookup application based on glance_machine metadata for application_uuid
        If 'Miss':
          * Create application based on available glance_machine metadata
    2b. Using application from 2. Create provider machine
    """
    if hasattr(glance_image, 'id'):
        image_id = glance_image.id
    elif type(glance_image) == dict:
        image_id = glance_image.get('id')
    else:
        raise ValueError("Unexpected glance_image: %s" % glance_image)

    provider_machine = get_provider_machine(image_id, provider_uuid)
    if provider_machine:
        if provider_machine.is_end_dated():
            return (None, False)
        update_instance_source_size(provider_machine.instance_source,
                                    glance_image.get('size'))
        return (provider_machine, False)
    (app_kwargs, version_kwargs) = _application_and_version_from_metadata(
        account_driver, glance_image)
    # TODO: use version_kwargs in method below?
    version = get_version_for_machine(provider_uuid, image_id, fuzzy=True)
    if version:
        app = version.application
    else:
        app = create_application(**app_kwargs)
        version = create_app_version(app=app, **version_kwargs)

    #TODO: fuzzy=True returns a list, but call comes through as a .get()?
    #      this line will cover that edge-case.
    if type(version) in [models.QuerySet, list]:
        version = version[0]

    machine_kwargs = {
        'created_by_identity': version_kwargs.get('created_by_identity'),
        'version': version
    }
    provider_machine = create_provider_machine(image_id, provider_uuid, app,
                                               **machine_kwargs)
    update_instance_source_size(provider_machine.instance_source,
                                glance_image.get('size'))
    return (provider_machine, True)