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)
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))