def create(neutron_client, args, **kwargs):

    if use_external_floatingip(neutron_client, 'floating_ip_address',
                               lambda ext_fip: ext_fip['floating_ip_address']):
        return

    floatingip = {
        # No defaults
    }
    floatingip.update(ctx.node.properties['floatingip'], **args)

    # Sugar: floating_network_name -> (resolve) -> floating_network_id
    if 'floating_network_name' in floatingip:
        floatingip['floating_network_id'] = neutron_client.cosmo_get_named(
            'network', floatingip['floating_network_name'])['id']
        del floatingip['floating_network_name']
    elif 'floating_network_id' not in floatingip:
        provider_context = provider(ctx)
        ext_network = provider_context.ext_network
        if ext_network:
            floatingip['floating_network_id'] = ext_network['id']
    else:
        raise NonRecoverableError('Missing floating network id or name')

    fip = neutron_client.create_floatingip(
        {'floatingip': floatingip})['floatingip']
    set_floatingip_runtime_properties(fip['id'], fip['floating_ip_address'])

    ctx.logger.info('Floating IP creation response: {0}'.format(fip))
def create(neutron_client, **kwargs):

    if use_external_floatingip(neutron_client, 'floating_ip_address',
                               lambda ext_fip: ext_fip['floating_ip_address']):
        return

    floatingip = {
        # No defaults
    }
    floatingip.update(ctx.node.properties['floatingip'])

    # Sugar: floating_network_name -> (resolve) -> floating_network_id
    if 'floating_network_name' in floatingip:
        floatingip['floating_network_id'] = neutron_client.cosmo_get_named(
            'network', floatingip['floating_network_name'])['id']
        del floatingip['floating_network_name']
    elif 'floating_network_id' not in floatingip:
        provider_context = provider(ctx)
        ext_network = provider_context.ext_network
        if ext_network:
            floatingip['floating_network_id'] = ext_network['id']
    else:
        raise NonRecoverableError('Missing floating network id or name')

    fip = neutron_client.create_floatingip({'floatingip':
                                            floatingip})['floatingip']
    set_floatingip_runtime_properties(fip['id'], fip['floating_ip_address'])

    ctx.logger.info('Floating IP creation response: {0}'.format(fip))
def create(neutron_client, args, **kwargs):

    if use_external_floatingip(neutron_client, 'floating_ip_address',
                               lambda ext_fip: ext_fip['floating_ip_address']):
        return

    floatingip = {
        # No defaults
    }
    floatingip.update(ctx.node.properties[FLOATINGIP_OPENSTACK_TYPE], **args)

    # Do we have a relationship with a network?

    connected_network = \
        get_single_connected_node_by_openstack_type(
            ctx, NETWORK_OPENSTACK_TYPE, True)

    if connected_network:
        network_from_rel = connected_network.runtime_properties[
            OPENSTACK_ID_PROPERTY]
    else:
        network_from_rel = None

    # TODO: Should we check whether this is really an "external" network?

    network_name_provided = 'floating_network_name' in floatingip
    network_id_provided = 'floating_network_id' in floatingip
    provided = [
        network_name_provided, network_id_provided, network_from_rel
        is not None
    ].count(True)

    # At most one is expected.

    if provided > 1:
        raise NonRecoverableError(
            FLOATING_NETWORK_ERROR_MSG.format(network_from_rel, floatingip))

    if network_from_rel:
        floatingip['floating_network_id'] = network_from_rel
    elif network_name_provided:
        floatingip['floating_network_id'] = neutron_client.cosmo_get_named(
            'network', floatingip['floating_network_name'])['id']
        del floatingip['floating_network_name']
    elif not network_id_provided:
        provider_context = provider(ctx)
        ext_network = provider_context.ext_network
        if ext_network:
            floatingip['floating_network_id'] = ext_network['id']
        else:
            raise NonRecoverableError(
                FLOATING_NETWORK_ERROR_MSG.format(None, None))

    fip = neutron_client.create_floatingip(
        {FLOATINGIP_OPENSTACK_TYPE: floatingip})[FLOATINGIP_OPENSTACK_TYPE]
    set_floatingip_runtime_properties(fip['id'], fip['floating_ip_address'])

    ctx.logger.info('Floating IP creation response: {0}'.format(fip))
def create(nova_client, args, **kwargs):

    if use_external_floatingip(nova_client, 'ip', lambda ext_fip: ext_fip.ip):
        return

    floatingip = {'pool': None}
    floatingip.update(ctx.node.properties['floatingip'], **args)

    fip = nova_client.floating_ips.create(floatingip['pool'])
    set_floatingip_runtime_properties(fip.id, fip.ip)
def create(nova_client, **kwargs):

    if use_external_floatingip(nova_client, 'ip',
                               lambda ext_fip: ext_fip.ip):
        return

    floatingip = {
        'pool': None
    }
    floatingip.update(ctx.node.properties['floatingip'])

    fip = nova_client.floating_ips.create(floatingip['pool'])
    set_floatingip_runtime_properties(fip.id, fip.ip)
Beispiel #6
0
def create(neutron_client, args, **kwargs):

    if use_external_floatingip(neutron_client, 'floating_ip_address',
                               lambda ext_fip: ext_fip['floating_ip_address']):
        return

    floatingip = {
        # No defaults
    }
    floatingip.update(ctx.node.properties[FLOATINGIP_OPENSTACK_TYPE], **args)

    network_from_rel = \
        get_openstack_id_of_single_connected_node_by_openstack_type(
            ctx, NETWORK_OPENSTACK_TYPE, True)

    if 'floating_network_id' in floatingip:
        ctx.logger.debug('Using floating ip network {0}.'.format(
            floatingip['floating_network_id']))
    elif 'floating_network_name' in floatingip:
        floatingip['floating_network_id'] = neutron_client.cosmo_get_named(
            'network', floatingip['floating_network_name'])['id']
        ctx.logger.debug(
            'Using floating ip network {0} from name {1} provided.'.format(
                floatingip['floating_network_id'],
                floatingip['floating_network_name']))
        del floatingip['floating_network_name']
    elif network_from_rel:
        floatingip['floating_network_id'] = network_from_rel
        ctx.logger.debug(
            'Using floating ip network {0} from relationship.'.format(
                floatingip['floating_network_id']))
    else:
        provider_context = provider(ctx)
        ext_network = provider_context.ext_network
        if ext_network:
            floatingip['floating_network_id'] = ext_network['id']
            ctx.logger.debug(
                'Using floating ip network {0} from provider context.'.format(
                    floatingip['floating_network_id']))
        else:
            raise NonRecoverableError(
                FLOATING_NETWORK_ERROR_MSG.format(None, None))

    fip = neutron_client.create_floatingip(
        {FLOATINGIP_OPENSTACK_TYPE: floatingip})[FLOATINGIP_OPENSTACK_TYPE]
    set_floatingip_runtime_properties(fip['id'], fip['floating_ip_address'])

    ctx.logger.info('Floating IP creation response: {0}'.format(fip))