示例#1
0
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
示例#2
0
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
示例#4
0
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