def GetAddress(self, messages, args, address, address_ref, resource_parser): network_tier = self.ConstructNetworkTier(messages, args) if args.ip_version or ( address is None and address_ref.Collection() == 'compute.globalAddresses'): ip_version = messages.Address.IpVersionValueValuesEnum( args.ip_version or 'IPV4') else: # IP version is only specified in global requests if an address is not # specified to determine whether an ipv4 or ipv6 address should be # allocated. ip_version = None # TODO(b/36862747): get rid of args.subnet check if args.subnet: if address_ref.Collection() == 'compute.globalAddresses': raise exceptions.ToolException( '[--subnet] may not be specified for global addresses.') if not args.subnet_region: args.subnet_region = address_ref.region subnetwork_url = flags.SubnetworkArgument().ResolveAsResource( args, resource_parser).SelfLink() else: subnetwork_url = None return messages.Address( address=address, description=args.description, networkTier=network_tier, ipVersion=ip_version, name=address_ref.Name(), addressType=(messages.Address.AddressTypeValueValuesEnum.INTERNAL if subnetwork_url else None), subnetwork=subnetwork_url)
def Args(cls, parser): _Args(cls, parser) flags.AddAddressesAndIPVersions(parser, required=False) flags.AddNetworkTier(parser) cls.SUBNETWORK_ARG = flags.SubnetworkArgument() cls.SUBNETWORK_ARG.AddArgument(parser)
def Args(cls, parser): _Args(cls, parser) flags.AddAddressesAndIPVersions(parser, required=False) parser.add_argument( '--network-tier', choices=['PREMIUM', 'SELECT'], type=lambda x: x.upper(), help='The network tier to assign to the reserved IP addresses. If left ' 'empty, `PREMIUM` is used. Supported network tiers are: `PREMIUM`, ' '`SELECT`.') cls.SUBNETWORK_ARG = flags.SubnetworkArgument() cls.SUBNETWORK_ARG.AddArgument(parser)
def _Args(cls, parser, support_shared_loadbalancer_vip): """Argument parsing.""" cls.ADDRESSES_ARG = flags.AddressArgument(required=False) cls.ADDRESSES_ARG.AddArgument(parser, operation_type='create') flags.AddDescription(parser) parser.display_info.AddCacheUpdater(flags.AddressesCompleter) flags.AddAddressesAndIPVersions(parser, required=False) flags.AddNetworkTier(parser) flags.AddPrefixLength(parser) flags.AddPurpose(parser, support_shared_loadbalancer_vip) cls.SUBNETWORK_ARG = flags.SubnetworkArgument() cls.SUBNETWORK_ARG.AddArgument(parser) cls.NETWORK_ARG = flags.NetworkArgument() cls.NETWORK_ARG.AddArgument(parser)
def _Args(cls, parser, support_psc_google_apis, support_ipv6_reservation): """Argument parsing.""" cls.ADDRESSES_ARG = flags.AddressArgument(required=False) cls.ADDRESSES_ARG.AddArgument(parser, operation_type='create') flags.AddDescription(parser) parser.display_info.AddCacheUpdater(flags.AddressesCompleter) flags.AddAddressesAndIPVersions(parser, required=False) flags.AddNetworkTier(parser) flags.AddPrefixLength(parser) flags.AddPurpose(parser, support_psc_google_apis) flags.AddIPv6EndPointType(parser, support_ipv6_reservation) cls.SUBNETWORK_ARG = flags.SubnetworkArgument() cls.SUBNETWORK_ARG.AddArgument(parser) cls.NETWORK_ARG = flags.NetworkArgument() cls.NETWORK_ARG.AddArgument(parser)
def GetAddress(self, messages, args, address, address_ref, resource_parser): network_tier = self.ConstructNetworkTier(messages, args) if args.ip_version or (address is None and address_ref.Collection() == 'compute.globalAddresses'): ip_version = messages.Address.IpVersionValueValuesEnum( args.ip_version or 'IPV4') else: # IP version is only specified in global requests if an address is not # specified to determine whether an ipv4 or ipv6 address should be # allocated. ip_version = None if args.subnet and args.network: raise exceptions.ConflictingArgumentsException( '--network', '--subnet') purpose = None if args.purpose and not args.network and not args.subnet: raise exceptions.MinimumArgumentException( ['--network', '--subnet'], ' if --purpose is specified') # TODO(b/36862747): get rid of args.subnet check if args.subnet: if address_ref.Collection() == 'compute.globalAddresses': raise exceptions.ToolException( '[--subnet] may not be specified for global addresses.') if not args.subnet_region: args.subnet_region = address_ref.region subnetwork_url = flags.SubnetworkArgument().ResolveAsResource( args, resource_parser).SelfLink() purpose = messages.Address.PurposeValueValuesEnum( args.purpose or 'GCE_ENDPOINT') self.CheckPurposeInSubnetwork( messages, purpose, self._support_shared_loadbalancer_vip) else: subnetwork_url = None network_url = None if args.network: if address_ref.Collection() == 'compute.addresses': raise exceptions.InvalidArgumentException( '--network', 'network may not be specified for regional addresses.') network_url = flags.NetworkArgument().ResolveAsResource( args, resource_parser).SelfLink() purpose = messages.Address.PurposeValueValuesEnum(args.purpose or 'VPC_PEERING') if purpose != messages.Address.PurposeValueValuesEnum.VPC_PEERING: raise exceptions.InvalidArgumentException( '--purpose', 'must be VPC_PEERING for global internal addresses.') if not args.prefix_length: raise exceptions.RequiredArgumentException( '--prefix-length', 'prefix length is needed for reserving IP ranges.') if args.prefix_length: if purpose != messages.Address.PurposeValueValuesEnum.VPC_PEERING: raise exceptions.InvalidArgumentException( '--prefix-length', 'can only be used with [--purpose VPC_PEERING].') return messages.Address( address=address, prefixLength=args.prefix_length, description=args.description, networkTier=network_tier, ipVersion=ip_version, name=address_ref.Name(), addressType=(messages.Address.AddressTypeValueValuesEnum.INTERNAL if subnetwork_url or network_url else None), purpose=purpose, subnetwork=subnetwork_url, network=network_url)
def GetAddress(self, messages, args, address, address_ref, resource_parser): network_tier = self.ConstructNetworkTier(messages, args) if args.ip_version or (address is None and address_ref.Collection() == 'compute.globalAddresses'): ip_version = messages.Address.IpVersionValueValuesEnum( args.ip_version or 'IPV4') else: # IP version is only specified in global and regional external Ipv6 # requests if an address is not specified to determine whether an ipv4 or # ipv6 address should be allocated. ip_version = None if args.subnet and args.network: raise exceptions.ConflictingArgumentsException( '--network', '--subnet') purpose = None if args.purpose and not args.network and not args.subnet: raise exceptions.MinimumArgumentException( ['--network', '--subnet'], ' if --purpose is specified') # TODO(b/36862747): get rid of args.subnet check if args.subnet: if address_ref.Collection() == 'compute.globalAddresses': raise exceptions.BadArgumentException( '--subnet', '[--subnet] may not be specified for global addresses.') if not args.subnet_region: args.subnet_region = address_ref.region subnetwork_url = flags.SubnetworkArgument().ResolveAsResource( args, resource_parser).SelfLink() if not (self._support_ipv6_reservation and args.endpoint_type): # External IPv6 reservation does not need purpose field. purpose = messages.Address.PurposeValueValuesEnum( args.purpose or 'GCE_ENDPOINT') self.CheckPurposeInSubnetwork(messages, purpose) else: subnetwork_url = None network_url = None if args.network: purpose = messages.Address.PurposeValueValuesEnum(args.purpose or 'VPC_PEERING') network_url = flags.NetworkArgument().ResolveAsResource( args, resource_parser).SelfLink() if purpose != messages.Address.PurposeValueValuesEnum.IPSEC_INTERCONNECT: if address_ref.Collection() == 'compute.addresses': raise exceptions.InvalidArgumentException( '--network', 'network may not be specified for regional addresses.') supported_purposes = { 'VPC_PEERING': messages.Address.PurposeValueValuesEnum.VPC_PEERING } if self._support_psc_google_apis: supported_purposes[ 'PRIVATE_SERVICE_CONNECT'] = messages.Address.PurposeValueValuesEnum.PRIVATE_SERVICE_CONNECT if purpose not in supported_purposes.values(): raise exceptions.InvalidArgumentException( '--purpose', 'must be {} for ' 'global internal addresses.'.format(' or '.join( supported_purposes.keys()))) ipv6_endpoint_type = None if self._support_ipv6_reservation and args.endpoint_type: ipv6_endpoint_type = messages.Address.Ipv6EndpointTypeValueValuesEnum( args.endpoint_type) address_type = None if self._support_ipv6_reservation and args.endpoint_type: address_type = messages.Address.AddressTypeValueValuesEnum.EXTERNAL elif subnetwork_url or network_url: address_type = messages.Address.AddressTypeValueValuesEnum.INTERNAL if args.prefix_length: if self._support_ipv6_reservation and address and not address_type: # This is address promotion. address_type = messages.Address.AddressTypeValueValuesEnum.EXTERNAL elif (purpose != messages.Address.PurposeValueValuesEnum.VPC_PEERING and purpose != messages.Address.PurposeValueValuesEnum.IPSEC_INTERCONNECT): raise exceptions.InvalidArgumentException( '--prefix-length', 'can only be used with ' '[--purpose VPC_PEERING/IPSEC_INTERCONNECT] or External IPv6 reservation. Found {e}' .format(e=purpose)) if not args.prefix_length: if purpose == messages.Address.PurposeValueValuesEnum.VPC_PEERING: raise exceptions.RequiredArgumentException( '--prefix-length', 'prefix length is needed for reserving VPC peering IP ranges.' ) if purpose == messages.Address.PurposeValueValuesEnum.IPSEC_INTERCONNECT: raise exceptions.RequiredArgumentException( '--prefix-length', 'prefix length is needed for reserving IP ranges' ' for IPsec-encrypted Cloud Interconnect.') if self._support_ipv6_reservation: return messages.Address(address=address, prefixLength=args.prefix_length, description=args.description, networkTier=network_tier, ipVersion=ip_version, name=address_ref.Name(), addressType=address_type, purpose=purpose, subnetwork=subnetwork_url, network=network_url, ipv6EndpointType=ipv6_endpoint_type) else: return messages.Address( address=address, prefixLength=args.prefix_length, description=args.description, networkTier=network_tier, ipVersion=ip_version, name=address_ref.Name(), addressType=( messages.Address.AddressTypeValueValuesEnum.INTERNAL if subnetwork_url or network_url else None), purpose=purpose, subnetwork=subnetwork_url, network=network_url)