def CreateNetworkInterfaceMessage( resources, compute_client, network, subnet, private_network_ip, no_address, address, instance_refs, alias_ip_ranges_string=None): """Returns a new NetworkInterface message.""" # TODO(b/30460572): instance reference should have zone name, not zone URI. region = utils.ZoneNameToRegionName(instance_refs[0].zone.split('/')[-1]) messages = compute_client.messages network_interface = messages.NetworkInterface() # By default interface is attached to default network. If network or subnet # are specified they're used instead. if subnet is not None: subnet_ref = resources.Parse( subnet, collection='compute.subnetworks', params={'region': region}) network_interface.subnetwork = subnet_ref.SelfLink() if network is not None: network_ref = resources.Parse(network, collection='compute.networks') network_interface.network = network_ref.SelfLink() elif subnet is None: network_ref = resources.Parse( constants.DEFAULT_NETWORK, collection='compute.networks') network_interface.network = network_ref.SelfLink() if private_network_ip is not None: network_interface.networkIP = private_network_ip if alias_ip_ranges_string: network_interface.aliasIpRanges = ( alias_ip_range_utils.CreateAliasIpRangeMessagesFromString( messages, True, alias_ip_ranges_string)) if not no_address: access_config = messages.AccessConfig( name=constants.DEFAULT_ACCESS_CONFIG_NAME, type=messages.AccessConfig.TypeValueValuesEnum.ONE_TO_ONE_NAT) # If the user provided an external IP, populate the access # config with it. # TODO(b/25278937): plays poorly when creating multiple instances if len(instance_refs) == 1: address_resource = flags.ExpandAddressFlag( resources, compute_client, address, region) if address_resource: access_config.natIP = address_resource network_interface.accessConfigs = [access_config] return network_interface
def CreateNetworkInterfaceMessage(scope_prompter, compute_client, network, subnet, private_network_ip, no_address, address, instance_refs): """Returns a new NetworkInterface message.""" # TODO(b/30460572): instance reference should have zone name, not zone URI. region = utils.ZoneNameToRegionName(instance_refs[0].zone.split('/')[-1]) messages = compute_client.messages network_interface = None if subnet is not None: subnet_ref = scope_prompter.CreateRegionalReference( subnet, region, resource_type='subnetworks') network_interface = messages.NetworkInterface( subnetwork=subnet_ref.SelfLink()) else: network_ref = scope_prompter.CreateGlobalReference( network, resource_type='networks') network_interface = messages.NetworkInterface( network=network_ref.SelfLink()) if private_network_ip is not None: network_interface.networkIP = private_network_ip if not no_address: access_config = messages.AccessConfig( name=constants.DEFAULT_ACCESS_CONFIG_NAME, type=messages.AccessConfig.TypeValueValuesEnum.ONE_TO_ONE_NAT) # If the user provided an external IP, populate the access # config with it. # TODO(b/25278937): plays poorly when creating multiple instances if len(instance_refs) == 1: address_resource = flags.ExpandAddressFlag(scope_prompter, compute_client, address, region) if address_resource: access_config.natIP = address_resource network_interface.accessConfigs = [access_config] return network_interface
def CreateNetworkInterfaceMessage(resources, compute_client, network, subnet, private_network_ip, no_address, address, instance_refs, alias_ip_ranges_string=None, network_tier=None, no_public_dns=None, public_dns=None, no_public_ptr=None, public_ptr=None, no_public_ptr_domain=None, public_ptr_domain=None): """Returns a new NetworkInterface message.""" # TODO(b/30460572): instance reference should have zone name, not zone URI. region = utils.ZoneNameToRegionName(instance_refs[0].zone.split('/')[-1]) messages = compute_client.messages network_interface = messages.NetworkInterface() # By default interface is attached to default network. If network or subnet # are specified they're used instead. if subnet is not None: subnet_ref = resources.Parse(subnet, collection='compute.subnetworks', params={ 'project': instance_refs[0].project, 'region': region }) network_interface.subnetwork = subnet_ref.SelfLink() if network is not None: network_ref = resources.Parse(network, params={ 'project': instance_refs[0].project, }, collection='compute.networks') network_interface.network = network_ref.SelfLink() elif subnet is None: network_ref = resources.Parse( constants.DEFAULT_NETWORK, params={'project': instance_refs[0].project}, collection='compute.networks') network_interface.network = network_ref.SelfLink() if private_network_ip is not None: # Try interpreting the address as IPv4 or IPv6. try: ipaddr.IPAddress(private_network_ip) network_interface.networkIP = private_network_ip except ValueError: # ipaddr could not resolve as an IPv4 or IPv6 address. network_interface.networkIP = flags.GetAddressRef( resources, private_network_ip, region).SelfLink() if alias_ip_ranges_string: network_interface.aliasIpRanges = ( alias_ip_range_utils.CreateAliasIpRangeMessagesFromString( messages, True, alias_ip_ranges_string)) if not no_address: access_config = messages.AccessConfig( name=constants.DEFAULT_ACCESS_CONFIG_NAME, type=messages.AccessConfig.TypeValueValuesEnum.ONE_TO_ONE_NAT) if network_tier is not None: access_config.networkTier = ( messages.AccessConfig.NetworkTierValueValuesEnum(network_tier)) # If the user provided an external IP, populate the access # config with it. # TODO(b/25278937): plays poorly when creating multiple instances if len(instance_refs) == 1: address_resource = flags.ExpandAddressFlag(resources, compute_client, address, region) if address_resource: access_config.natIP = address_resource if no_public_dns is True: access_config.setPublicDns = False elif public_dns is True: access_config.setPublicDns = True if no_public_ptr is True: access_config.setPublicPtr = False elif public_ptr is True: access_config.setPublicPtr = True if no_public_ptr_domain is not True and public_ptr_domain is not None: access_config.publicPtrDomainName = public_ptr_domain network_interface.accessConfigs = [access_config] return network_interface
def CreateNetworkInterfaceMessage(resources, compute_client, network, subnet, project, location, scope, nic_type=None, no_address=None, address=None, private_network_ip=None, alias_ip_ranges_string=None, network_tier=None, no_public_dns=None, public_dns=None, no_public_ptr=None, public_ptr=None, no_public_ptr_domain=None, public_ptr_domain=None, stack_type=None, ipv6_network_tier=None, ipv6_public_ptr_domain=None): """Returns a new NetworkInterface message.""" # TODO(b/30460572): instance reference should have zone name, not zone URI. if scope == compute_scopes.ScopeEnum.ZONE: region = utils.ZoneNameToRegionName(location.split('/')[-1]) elif scope == compute_scopes.ScopeEnum.REGION: region = location messages = compute_client.messages network_interface = messages.NetworkInterface() # By default interface is attached to default network. If network or subnet # are specified they're used instead. if subnet is not None: subnet_ref = resources.Parse(subnet, collection='compute.subnetworks', params={ 'project': project, 'region': region }) network_interface.subnetwork = subnet_ref.SelfLink() if network is not None: network_ref = resources.Parse(network, params={ 'project': project, }, collection='compute.networks') network_interface.network = network_ref.SelfLink() elif subnet is None: network_ref = resources.Parse(constants.DEFAULT_NETWORK, params={'project': project}, collection='compute.networks') network_interface.network = network_ref.SelfLink() if private_network_ip is not None: # Try interpreting the address as IPv4 or IPv6. try: # ipaddress only allows unicode input ipaddress.ip_address(six.text_type(private_network_ip)) network_interface.networkIP = private_network_ip except ValueError: # ipaddress could not resolve as an IPv4 or IPv6 address. network_interface.networkIP = instances_flags.GetAddressRef( resources, private_network_ip, region).SelfLink() if nic_type is not None: network_interface.nicType = ( messages.NetworkInterface.NicTypeValueValuesEnum(nic_type)) if alias_ip_ranges_string: network_interface.aliasIpRanges = ( alias_ip_range_utils.CreateAliasIpRangeMessagesFromString( messages, True, alias_ip_ranges_string)) if stack_type is not None: network_interface.stackType = messages.NetworkInterface.StackTypeValueValuesEnum( stack_type) if not no_address: access_config = messages.AccessConfig( name=constants.DEFAULT_ACCESS_CONFIG_NAME, type=messages.AccessConfig.TypeValueValuesEnum.ONE_TO_ONE_NAT) if network_tier is not None: access_config.networkTier = ( messages.AccessConfig.NetworkTierValueValuesEnum(network_tier)) # If the user provided an external IP, populate the access # config with it. address_resource = instances_flags.ExpandAddressFlag( resources, compute_client, address, region) if address_resource: access_config.natIP = address_resource if no_public_dns: access_config.setPublicDns = False elif public_dns: access_config.setPublicDns = True if no_public_ptr: access_config.setPublicPtr = False elif public_ptr: access_config.setPublicPtr = True if not no_public_ptr_domain and public_ptr_domain is not None: access_config.publicPtrDomainName = public_ptr_domain network_interface.accessConfigs = [access_config] if ipv6_network_tier is not None or ipv6_public_ptr_domain is not None: ipv6_access_config = messages.AccessConfig( name=constants.DEFAULT_IPV6_ACCESS_CONFIG_NAME, type=messages.AccessConfig.TypeValueValuesEnum.DIRECT_IPV6) network_interface.ipv6AccessConfigs = [ipv6_access_config] if ipv6_network_tier is not None: ipv6_access_config.networkTier = ( messages.AccessConfig.NetworkTierValueValuesEnum(ipv6_network_tier) ) if ipv6_public_ptr_domain is not None: ipv6_access_config.setPublicPtr = True ipv6_access_config.publicPtrDomainName = ipv6_public_ptr_domain return network_interface