def create(nova_client, args, **kwargs):
    if use_external_resource(ctx, nova_client, FLAVOR_OPENSTACK_TYPE):
        return

    flavor_dict = create_object_dict(ctx, FLAVOR_OPENSTACK_TYPE, args, {})
    flavor = nova_client.flavors.create(**flavor_dict)
    set_openstack_runtime_properties(ctx, flavor, FLAVOR_OPENSTACK_TYPE)
def create(neutron_client, args, **kwargs):

    if use_external_resource(ctx, neutron_client, ROUTER_OPENSTACK_TYPE):
        try:
            ext_net_id_by_rel = _get_connected_ext_net_id(neutron_client)

            if ext_net_id_by_rel:
                router_id = get_openstack_id(ctx)

                router = neutron_client.show_router(router_id)['router']
                if not (router['external_gateway_info']
                        and 'network_id' in router['external_gateway_info']
                        and router['external_gateway_info']['network_id']
                        == ext_net_id_by_rel):
                    raise NonRecoverableError(
                        'Expected external resources router {0} and '
                        'external network {1} to be connected'.format(
                            router_id, ext_net_id_by_rel))
            return
        except Exception:
            delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS)
            raise

    router = create_object_dict(ctx, ROUTER_OPENSTACK_TYPE, args, {})
    ctx.logger.info('router: {0}'.format(router))

    _handle_external_network_config(router, neutron_client)

    r = neutron_client.create_router({ROUTER_OPENSTACK_TYPE:
                                      router})[ROUTER_OPENSTACK_TYPE]

    set_neutron_runtime_properties(ctx, r, ROUTER_OPENSTACK_TYPE)
示例#3
0
def create(cinder_client, status_attempts, status_timeout, args, **kwargs):

    if use_external_resource(ctx, cinder_client, VOLUME_OPENSTACK_TYPE,
                             'name'):
        return

    volume_dict = create_object_dict(ctx, VOLUME_OPENSTACK_TYPE, args, {})
    handle_image_from_relationship(volume_dict, 'imageRef', ctx)

    v = cinder_client.volumes.create(**volume_dict)

    ctx.instance.runtime_properties[OPENSTACK_ID_PROPERTY] = v.id
    ctx.instance.runtime_properties[OPENSTACK_TYPE_PROPERTY] = \
        VOLUME_OPENSTACK_TYPE
    ctx.instance.runtime_properties[OPENSTACK_NAME_PROPERTY] = \
        volume_dict['name']
    wait_until_status(
        cinder_client=cinder_client,
        volume_id=v.id,
        status=VOLUME_STATUS_AVAILABLE,
        num_tries=status_attempts,
        timeout=status_timeout,
    )
    ctx.instance.runtime_properties[OPENSTACK_AZ_PROPERTY] = \
        v.availability_zone
def create(cinder_client,
           args={},
           status_timeout=15,
           status_attempts=20,
           **kwargs):

    external_volume = use_external_resource(
        ctx, cinder_client, VOLUME_OPENSTACK_TYPE, VOLUME_OPENSTACK_ID_KEY)

    if external_volume:
        _set_volume_runtime_properties(external_volume)
        return

    volume_dict = create_object_dict(ctx, VOLUME_OPENSTACK_TYPE, args, {})
    handle_image_from_relationship(volume_dict, 'imageRef', ctx)

    v = cinder_client.volumes.create(**volume_dict)

    ctx.instance.runtime_properties[OPENSTACK_ID_PROPERTY] = v.id
    ctx.instance.runtime_properties[OPENSTACK_TYPE_PROPERTY] = \
        VOLUME_OPENSTACK_TYPE
    ctx.instance.runtime_properties[OPENSTACK_NAME_PROPERTY] = \
        volume_dict[VOLUME_OPENSTACK_ID_KEY]
    wait_until_status(cinder_client=cinder_client,
                      volume_id=v.id,
                      status=VOLUME_STATUS_AVAILABLE,
                      num_tries=status_attempts,
                      timeout=status_timeout,
                      )
    _set_volume_runtime_properties(v)
def update_project(keystone_client, args, **kwargs):

    project_dict = create_object_dict(ctx, PROJECT_OPENSTACK_TYPE, args,
                                      {'domain': 'default'})
    project_dict[PROJECT_OPENSTACK_TYPE] = get_openstack_id(ctx)
    project = keystone_client.projects.update(**project_dict)
    set_openstack_runtime_properties(ctx, project, PROJECT_OPENSTACK_TYPE)
def create(neutron_client, args, **kwargs):

    if use_external_resource(ctx, neutron_client, SUBNET_OPENSTACK_TYPE):
        try:
            net_id = \
                get_openstack_id_of_single_connected_node_by_openstack_type(
                    ctx, NETWORK_OPENSTACK_TYPE, True)

            if net_id:
                subnet_id = get_openstack_id(ctx)

                if neutron_client.show_subnet(
                        subnet_id)[SUBNET_OPENSTACK_TYPE][NETWORK_ID] \
                        != net_id:
                    raise NonRecoverableError(
                        'Expected external resources subnet {0} and network'
                        ' {1} to be connected'.format(subnet_id, net_id))
            return
        except Exception:
            delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS)
            raise

    net_id = get_openstack_id_of_single_connected_node_by_openstack_type(
        ctx, NETWORK_OPENSTACK_TYPE)
    subnet = create_object_dict(ctx,
                                SUBNET_OPENSTACK_TYPE,
                                args,
                                {NETWORK_ID: net_id})

    s = neutron_client.create_subnet(
        {SUBNET_OPENSTACK_TYPE: subnet})[SUBNET_OPENSTACK_TYPE]
    set_neutron_runtime_properties(ctx, s, SUBNET_OPENSTACK_TYPE)
示例#7
0
def create(keystone_client, args, **kwargs):
    if use_external_resource(ctx, keystone_client, USER_OPENSTACK_TYPE):
        return

    user_dict = create_object_dict(ctx, USER_OPENSTACK_TYPE, args, {})
    user = keystone_client.users.create(**user_dict)

    set_openstack_runtime_properties(ctx, user, USER_OPENSTACK_TYPE)
def create(keystone_client, args, **kwargs):
    if use_external_resource(ctx, keystone_client, PROJECT_OPENSTACK_TYPE):
        return

    project_dict = create_object_dict(ctx, PROJECT_OPENSTACK_TYPE, args,
                                      {'domain': 'default'})

    project = keystone_client.projects.create(**project_dict)
    set_openstack_runtime_properties(ctx, project, PROJECT_OPENSTACK_TYPE)
def create(neutron_client, args, **kwargs):

    if use_external_resource(ctx, neutron_client, NETWORK_OPENSTACK_TYPE):
        return
    network = create_object_dict(ctx, NETWORK_OPENSTACK_TYPE, args,
                                 {ADMIN_STATE_UP: True})

    net = neutron_client.create_network({NETWORK_OPENSTACK_TYPE:
                                         network})[NETWORK_OPENSTACK_TYPE]
    set_neutron_runtime_properties(ctx, net, NETWORK_OPENSTACK_TYPE)
def create(nova_client, args, **kwargs):
    if use_external_resource(ctx, nova_client, SERVER_GROUP_OPENSTACK_TYPE):
        return

    server_grp = create_object_dict(
        ctx, SERVER_GROUP_OPENSTACK_TYPE, args,
        {'policies': [ctx.node.properties['policy']]})

    server_grp = nova_client.server_groups.create(**server_grp)
    set_openstack_runtime_properties(ctx, server_grp,
                                     SERVER_GROUP_OPENSTACK_TYPE)
def create(nova_client, args, **kwargs):
    if use_external_resource(ctx, nova_client, FLAVOR_OPENSTACK_TYPE):
        return

    flavor_dict = create_object_dict(ctx, FLAVOR_OPENSTACK_TYPE, args, {})
    ctx.logger.info('Creating flavor: {0}'.format(flavor_dict))

    flavor = nova_client.flavors.create(**flavor_dict)
    set_openstack_runtime_properties(ctx, flavor, FLAVOR_OPENSTACK_TYPE)

    _set_extra_specs(ctx, flavor)
    _set_tenants_access(ctx, nova_client, flavor)
def update(nova_client, args, **kwargs):
    host_aggregate_dict = create_object_dict(ctx,
                                             HOST_AGGREGATE_OPENSTACK_TYPE,
                                             args)

    _remove_hosts(ctx, nova_client, get_openstack_id(ctx), kwargs)
    host_aggregate = nova_client.aggregates.update(get_openstack_id(ctx),
                                                   host_aggregate_dict)
    _add_hosts(ctx, nova_client, host_aggregate, kwargs)
    _set_metadata(ctx, nova_client, host_aggregate, kwargs)

    set_openstack_runtime_properties(ctx, host_aggregate,
                                     HOST_AGGREGATE_OPENSTACK_TYPE)
def create(nova_client, args, **kwargs):
    if use_external_resource(ctx, nova_client, HOST_AGGREGATE_OPENSTACK_TYPE):
        return

    host_aggregate_dict = create_object_dict(ctx,
                                             HOST_AGGREGATE_OPENSTACK_TYPE,
                                             args)

    host_aggregate = nova_client.aggregates.create(**host_aggregate_dict)
    _add_hosts(ctx, nova_client, host_aggregate, kwargs)
    _set_metadata(ctx, nova_client, host_aggregate, kwargs)

    set_openstack_runtime_properties(ctx, host_aggregate,
                                     HOST_AGGREGATE_OPENSTACK_TYPE)
def create(neutron_client, args, **kwargs):

    ext_port = use_external_resource(ctx, neutron_client, PORT_OPENSTACK_TYPE)
    if ext_port:
        try:
            net_id = \
                get_openstack_id_of_single_connected_node_by_openstack_type(
                    ctx, NETWORK_OPENSTACK_TYPE, True)

            if net_id:
                port_id = get_openstack_id(ctx)

                if neutron_client.show_port(
                        port_id)[PORT_OPENSTACK_TYPE]['network_id'] != net_id:
                    raise NonRecoverableError(
                        'Expected external resources port {0} and network {1} '
                        'to be connected'.format(port_id, net_id))

            ctx.instance.runtime_properties[FIXED_IP_ADDRESS_PROPERTY] = \
                _get_fixed_ip(ext_port)
            ctx.instance.runtime_properties[MAC_ADDRESS_PROPERTY] = \
                ext_port['mac_address']
            return
        except Exception:
            delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS)
            raise

    net_id = ctx.node.properties.get(PORT_OPENSTACK_TYPE, {}).get('network_id')
    if not net_id:
        net_id = \
            get_openstack_id_of_single_connected_node_by_openstack_type(
                ctx, NETWORK_OPENSTACK_TYPE)

    port = create_object_dict(ctx, PORT_OPENSTACK_TYPE, args,
                              {'network_id': net_id})
    _handle_fixed_ips(port, neutron_client)
    _handle_security_groups(port)

    p = neutron_client.create_port({PORT_OPENSTACK_TYPE:
                                    port})[PORT_OPENSTACK_TYPE]

    set_neutron_runtime_properties(ctx, p, PORT_OPENSTACK_TYPE)
    ctx.instance.runtime_properties[FIXED_IP_ADDRESS_PROPERTY] = \
        _get_fixed_ip(p)
    ctx.instance.runtime_properties[MAC_ADDRESS_PROPERTY] = p['mac_address']
def create(nova_client, args, **kwargs):

    private_key_path = _get_private_key_path()
    pk_exists = _check_private_key_exists(private_key_path)

    if use_external_resource(ctx, nova_client, KEYPAIR_OPENSTACK_TYPE):
        if not pk_exists:
            delete_runtime_properties(ctx, RUNTIME_PROPERTIES_KEYS)
            raise NonRecoverableError(
                'Failed to use external keypair (node {0}): the public key {1}'
                ' is available on Openstack, but the private key could not be '
                'found at {2}'.format(ctx.node.id,
                                      ctx.node.properties['resource_id'],
                                      private_key_path))
        return

    if pk_exists:
        raise NonRecoverableError(
            "Can't create keypair - private key path already exists: {0}".
            format(private_key_path))

    keypair = create_object_dict(ctx, KEYPAIR_OPENSTACK_TYPE, args, {})

    keypair = nova_client.keypairs.create(keypair['name'],
                                          keypair.get('public_key'))

    set_openstack_runtime_properties(ctx, keypair, KEYPAIR_OPENSTACK_TYPE)

    try:
        # write private key file
        _mkdir_p(os.path.dirname(private_key_path))
        with open(private_key_path, 'w') as f:
            f.write(keypair.private_key)
        os.chmod(private_key_path, 0600)
    except Exception:
        _delete_private_key_file()
        delete_resource_and_runtime_properties(ctx, nova_client,
                                               RUNTIME_PROPERTIES_KEYS)
        raise
示例#16
0
def create(glance_client, args, **kwargs):
    if use_external_resource(ctx, glance_client, IMAGE_OPENSTACK_TYPE):
        return

    _validate_image_dictionary()
    img_dict = create_object_dict(ctx, IMAGE_OPENSTACK_TYPE, args, {})
    img_path = img_dict.pop('data', '')
    img = glance_client.images.create(**img_dict)
    img_url = ctx.node.properties.get('image_url')
    try:
        _validate_image()
        if img_path:
            with open(img_path, 'rb') as image_file:
                glance_client.images.upload(image_id=img.id,
                                            image_data=image_file)
        elif img_url:
            img = glance_client.images.add_location(img.id, img_url, {})
    except Exception:
        _remove_protected(glance_client)
        glance_client.images.delete(image_id=img.id)
        raise

    set_openstack_runtime_properties(ctx, img, IMAGE_OPENSTACK_TYPE)
示例#17
0
def update(glance_client, args, **kwargs):
    image_dict = create_object_dict(ctx, IMAGE_OPENSTACK_TYPE, args)
    image_dict[IMAGE_OPENSTACK_TYPE] = get_openstack_id(ctx)
    image = glance_client.images.update(**image_dict)
    set_openstack_runtime_properties(ctx, image, IMAGE_OPENSTACK_TYPE)
示例#18
0
def update(keystone_client, args, **kwargs):
    user_dict = create_object_dict(ctx, USER_OPENSTACK_TYPE, args, {})
    user_dict[USER_OPENSTACK_TYPE] = get_openstack_id(ctx)
    user = keystone_client.users.update(**user_dict)
    set_openstack_runtime_properties(ctx, user, USER_OPENSTACK_TYPE)