Esempio n. 1
0
    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)
Esempio n. 2
0
 def _GetPerimeterType(self, kind):
     return perimeters.GetPerimeterTypeEnumForShortName(
         kind, self.api_version)