def Run(self, args): client = zones_api.Client(version=self._API_VERSION) perimeter_ref = args.CONCEPTS.perimeter.Parse() perimeter_type = perimeters.GetPerimeterTypeEnumForShortName( args.perimeter_type, self._API_VERSION) # Extract the arguments that reside in a ServicePerimeterConfig. resources = _ParseArgWithShortName(args, 'resources') levels = _ParseArgWithShortName(args, 'access_levels') levels = perimeters.ExpandLevelNamesIfNecessary( levels, perimeter_ref.accessPoliciesId) restricted_services = _ParseArgWithShortName(args, 'restricted_services') vpc_allowed_services = _ParseArgWithShortName(args, 'vpc_allowed_services') ingress_policies, egress_policies = _ParseDirectionalPolicies( args, self._release_track) if (args.enable_vpc_accessible_services is None and args.perimeter_enable_vpc_accessible_services is None): enable_vpc_accessible_services = None else: enable_vpc_accessible_services = ( args.enable_vpc_accessible_services or args.perimeter_enable_vpc_accessible_services) result = repeated.CachedResult.FromFunc(client.Get, perimeter_ref) try: result.Get() # Check if the perimeter was actually obtained. except apitools_exceptions.HttpNotFoundError: if args.perimeter_title is None or perimeter_type is None: raise exceptions.RequiredArgumentException( 'perimeter-title', ('Since this Service Perimeter does not exist, perimeter-title ' 'and perimeter-type must be supplied.')) else: if args.perimeter_title is not None or perimeter_type is not None: raise exceptions.InvalidArgumentException( 'perimeter-title', ('A Service Perimeter with the given name already exists. The ' 'title and the type fields cannot be updated in the dry-run mode.' )) policies.ValidateAccessPolicyArg(perimeter_ref, args) return client.PatchDryRunConfig( perimeter_ref, title=args.perimeter_title, description=args.perimeter_description, perimeter_type=perimeter_type, resources=resources, levels=levels, restricted_services=restricted_services, vpc_allowed_services=vpc_allowed_services, enable_vpc_accessible_services=enable_vpc_accessible_services, ingress_policies=ingress_policies, egress_policies=egress_policies)
def _GetPerimeterType(self, kind): return perimeters.GetPerimeterTypeEnumForShortName( kind, self.api_version)