# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cnrm.cloud.google.com/version: 1.128.0
  creationTimestamp: null
  labels:
    cnrm.cloud.google.com/managed-by-kcc: "true"
    cnrm.cloud.google.com/system: "true"
  name: iampolicies.iam.cnrm.cloud.google.com
spec:
  group: iam.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: IAMPolicy
    plural: iampolicies
    shortNames:
    - gcpiampolicy
    - gcpiampolicies
    singular: iampolicy
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - description: When 'True' the most recent reconcile of the resource succeeded
      jsonPath: .status.conditions[?(@.type=='Ready')].status
      name: Ready
      type: string
    - description: The reason for the value in 'Ready'
      jsonPath: .status.conditions[?(@.type=='Ready')].reason
      name: Status
      type: string
    - jsonPath: .status.conditions[?(@.type=='Ready')].lastTransitionTime
      name: Status Age
      type: date
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: IAMPolicy is the Schema for the iampolicies API
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: IAMPolicySpec defines the desired state of IAMPolicy
            properties:
              auditConfigs:
                description: Optional. The list of IAM audit configs.
                items:
                  description: Specifies the Cloud Audit Logs configuration for the
                    IAM policy.
                  properties:
                    auditLogConfigs:
                      description: Required. The configuration for logging of each
                        type of permission.
                      items:
                        properties:
                          exemptedMembers:
                            description: Identities that do not cause logging for
                              this type of permission. The format is the same as that
                              for 'members' in IAMPolicy/IAMPolicyMember.
                            items:
                              type: string
                            type: array
                          logType:
                            description: Permission type for which logging is to be
                              configured. Must be one of 'DATA_READ', 'DATA_WRITE',
                              or 'ADMIN_READ'.
                            pattern: ^(DATA_READ|DATA_WRITE|ADMIN_READ)$
                            type: string
                        required:
                        - logType
                        type: object
                      type: array
                    service:
                      description: 'Required. The service for which to enable Data
                        Access audit logs. The special value ''allServices'' covers
                        all services. Note that if there are audit configs covering
                        both ''allServices'' and a specific service, then the union
                        of the two audit configs is used for that service: the ''logTypes''
                        specified in each ''auditLogConfig'' are enabled, and the
                        ''exemptedMembers'' in each ''auditLogConfig'' are exempted.'
                      type: string
                  required:
                  - auditLogConfigs
                  - service
                  type: object
                type: array
              bindings:
                description: Optional. The list of IAM bindings.
                items:
                  description: Specifies the members to bind to an IAM role.
                  properties:
                    condition:
                      description: Optional. The condition under which the binding
                        applies.
                      properties:
                        description:
                          type: string
                        expression:
                          type: string
                        title:
                          type: string
                      required:
                      - expression
                      - title
                      type: object
                    members:
                      description: Optional. The list of IAM users to be bound to
                        the role.
                      items:
                        type: string
                      type: array
                    role:
                      description: Required. The role to bind the users to.
                      pattern: ^((projects|organizations)/[^/]+/)?roles/[\w_\.]+$
                      type: string
                  required:
                  - role
                  type: object
                type: array
              resourceRef:
                description: Immutable. Required. The GCP resource to set the IAM
                  policy on.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                    - required:
                      - apiVersion
                    - required:
                      - external
                properties:
                  apiVersion:
                    type: string
                  external:
                    type: string
                  kind:
                    type: string
                  name:
                    type: string
                  namespace:
                    type: string
                required:
                - kind
                type: object
            required:
            - resourceRef
            type: object
          status:
            description: IAMPolicyStatus defines the observed state of IAMPolicy
            properties:
              conditions:
                description: Conditions represent the latest available observations
                  of the IAM policy's current state.
                items:
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another.
                      type: string
                    message:
                      description: Human-readable message indicating details about
                        last transition.
                      type: string
                    reason:
                      description: Unique, one-word, CamelCase reason for the condition's
                        last transition.
                      type: string
                    status:
                      description: Status is the status of the condition. Can be True,
                        False, Unknown.
                      type: string
                    type:
                      description: Type is the type of the condition.
                      type: string
                  type: object
                type: array
              observedGeneration:
                description: ObservedGeneration is the generation of the resource
                  that was most recently observed by the Config Connector controller.
                  If this is equal to metadata.generation, then that means that the
                  current reported status reflects the most recent desired state of
                  the resource.
                format: int64
                type: integer
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
