{
  "description": "Kustomization is the Schema for the kustomizations API.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore 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.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "KustomizationSpec defines the configuration to calculate the desired state\nfrom a Source using Kustomize.",
      "properties": {
        "commonMetadata": {
          "description": "CommonMetadata specifies the common labels and annotations that are\napplied to all resources. Any existing label or annotation will be\noverridden if its key matches a common one.",
          "properties": {
            "annotations": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Annotations to be added to the object's metadata.",
              "type": "object"
            },
            "labels": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Labels to be added to the object's metadata.",
              "type": "object"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "components": {
          "description": "Components specifies relative paths to kustomize Components.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "decryption": {
          "description": "Decrypt Kubernetes secrets before applying them on the cluster.",
          "properties": {
            "provider": {
              "description": "Provider is the name of the decryption engine.",
              "enum": [
                "sops"
              ],
              "type": "string"
            },
            "secretRef": {
              "description": "The secret name containing the private OpenPGP keys used for decryption.\nA static credential for a cloud provider defined inside the Secret\ntakes priority to secret-less authentication with the ServiceAccountName\nfield.",
              "properties": {
                "name": {
                  "description": "Name of the referent.",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "serviceAccountName": {
              "description": "ServiceAccountName is the name of the service account used to\nauthenticate with KMS services from cloud providers. If a\nstatic credential for a given cloud provider is defined\ninside the Secret referenced by SecretRef, that static\ncredential takes priority.",
              "type": "string"
            }
          },
          "required": [
            "provider"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "deletionPolicy": {
          "description": "DeletionPolicy can be used to control garbage collection when this\nKustomization is deleted. Valid values are ('MirrorPrune', 'Delete',\n'WaitForTermination', 'Orphan'). 'MirrorPrune' mirrors the Prune field\n(orphan if false, delete if true). Defaults to 'MirrorPrune'.",
          "enum": [
            "MirrorPrune",
            "Delete",
            "WaitForTermination",
            "Orphan"
          ],
          "type": "string"
        },
        "dependsOn": {
          "description": "DependsOn may contain a DependencyReference slice\nwith references to Kustomization resources that must be ready before this\nKustomization can be reconciled.",
          "items": {
            "description": "DependencyReference defines a Kustomization dependency on another Kustomization resource.",
            "properties": {
              "name": {
                "description": "Name of the referent.",
                "type": "string"
              },
              "namespace": {
                "description": "Namespace of the referent, defaults to the namespace of the Kustomization\nresource object that contains the reference.",
                "type": "string"
              },
              "readyExpr": {
                "description": "ReadyExpr is a CEL expression that can be used to assess the readiness\nof a dependency. When specified, the built-in readiness check\nis replaced by the logic defined in the CEL expression.\nTo make the CEL expression additive to the built-in readiness check,\nthe feature gate `AdditiveCELDependencyCheck` must be set to `true`.",
                "type": "string"
              }
            },
            "required": [
              "name"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "force": {
          "default": false,
          "description": "Force instructs the controller to recreate resources\nwhen patching fails due to an immutable field change.",
          "type": "boolean"
        },
        "healthCheckExprs": {
          "description": "HealthCheckExprs is a list of healthcheck expressions for evaluating the\nhealth of custom resources using Common Expression Language (CEL).\nThe expressions are evaluated only when Wait or HealthChecks are specified.",
          "items": {
            "description": "CustomHealthCheck defines the health check for custom resources.",
            "properties": {
              "apiVersion": {
                "description": "APIVersion of the custom resource under evaluation.",
                "type": "string"
              },
              "current": {
                "description": "Current is the CEL expression that determines if the status\nof the custom resource has reached the desired state.",
                "type": "string"
              },
              "failed": {
                "description": "Failed is the CEL expression that determines if the status\nof the custom resource has failed to reach the desired state.",
                "type": "string"
              },
              "inProgress": {
                "description": "InProgress is the CEL expression that determines if the status\nof the custom resource has not yet reached the desired state.",
                "type": "string"
              },
              "kind": {
                "description": "Kind of the custom resource under evaluation.",
                "type": "string"
              }
            },
            "required": [
              "apiVersion",
              "current",
              "kind"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "healthChecks": {
          "description": "A list of resources to be included in the health assessment.",
          "items": {
            "description": "NamespacedObjectKindReference contains enough information to locate the typed referenced Kubernetes resource object\nin any namespace.",
            "properties": {
              "apiVersion": {
                "description": "API version of the referent, if not specified the Kubernetes preferred version will be used.",
                "type": "string"
              },
              "kind": {
                "description": "Kind of the referent.",
                "type": "string"
              },
              "name": {
                "description": "Name of the referent.",
                "type": "string"
              },
              "namespace": {
                "description": "Namespace of the referent, when not specified it acts as LocalObjectReference.",
                "type": "string"
              }
            },
            "required": [
              "kind",
              "name"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "ignoreMissingComponents": {
          "description": "IgnoreMissingComponents instructs the controller to ignore Components paths\nnot found in source by removing them from the generated kustomization.yaml\nbefore running kustomize build.",
          "type": "boolean"
        },
        "images": {
          "description": "Images is a list of (image name, new name, new tag or digest)\nfor changing image names, tags or digests. This can also be achieved with a\npatch, but this operator is simpler to specify.",
          "items": {
            "description": "Image contains an image name, a new name, a new tag or digest, which will replace the original name and tag.",
            "properties": {
              "digest": {
                "description": "Digest is the value used to replace the original image tag.\nIf digest is present NewTag value is ignored.",
                "type": "string"
              },
              "name": {
                "description": "Name is a tag-less image name.",
                "type": "string"
              },
              "newName": {
                "description": "NewName is the value used to replace the original name.",
                "type": "string"
              },
              "newTag": {
                "description": "NewTag is the value used to replace the original tag.",
                "type": "string"
              }
            },
            "required": [
              "name"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "interval": {
          "description": "The interval at which to reconcile the Kustomization.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
          "type": "string"
        },
        "kubeConfig": {
          "description": "The KubeConfig for reconciling the Kustomization on a remote cluster.\nWhen used in combination with KustomizationSpec.ServiceAccountName,\nforces the controller to act on behalf of that Service Account at the\ntarget cluster.\nIf the --default-service-account flag is set, its value will be used as\na controller level fallback for when KustomizationSpec.ServiceAccountName\nis empty.",
          "properties": {
            "configMapRef": {
              "description": "ConfigMapRef holds an optional name of a ConfigMap that contains\nthe following keys:\n\n- `provider`: the provider to use. One of `aws`, `azure`, `gcp`, or\n   `generic`. Required.\n- `cluster`: the fully qualified resource name of the Kubernetes\n   cluster in the cloud provider API. Not used by the `generic`\n   provider. Required when one of `address` or `ca.crt` is not set.\n- `address`: the address of the Kubernetes API server. Required\n   for `generic`. For the other providers, if not specified, the\n   first address in the cluster resource will be used, and if\n   specified, it must match one of the addresses in the cluster\n   resource.\n   If audiences is not set, will be used as the audience for the\n   `generic` provider.\n- `ca.crt`: the optional PEM-encoded CA certificate for the\n   Kubernetes API server. If not set, the controller will use the\n   CA certificate from the cluster resource.\n- `audiences`: the optional audiences as a list of\n   line-break-separated strings for the Kubernetes ServiceAccount\n   token. Defaults to the `address` for the `generic` provider, or\n   to specific values for the other providers depending on the\n   provider.\n-  `serviceAccountName`: the optional name of the Kubernetes\n   ServiceAccount in the same namespace that should be used\n   for authentication. If not specified, the controller\n   ServiceAccount will be used.\n\nMutually exclusive with SecretRef.",
              "properties": {
                "name": {
                  "description": "Name of the referent.",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "secretRef": {
              "description": "SecretRef holds an optional name of a secret that contains a key with\nthe kubeconfig file as the value. If no key is set, the key will default\nto 'value'. Mutually exclusive with ConfigMapRef.\nIt is recommended that the kubeconfig is self-contained, and the secret\nis regularly updated if credentials such as a cloud-access-token expire.\nCloud specific `cmd-path` auth helpers will not function without adding\nbinaries and credentials to the Pod that is responsible for reconciling\nKubernetes resources. Supported only for the generic provider.",
              "properties": {
                "key": {
                  "description": "Key in the Secret, when not specified an implementation-specific default key is used.",
                  "type": "string"
                },
                "name": {
                  "description": "Name of the Secret.",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "x-kubernetes-validations": [
            {
              "message": "exactly one of spec.kubeConfig.configMapRef or spec.kubeConfig.secretRef must be specified",
              "rule": "has(self.configMapRef) || has(self.secretRef)"
            },
            {
              "message": "exactly one of spec.kubeConfig.configMapRef or spec.kubeConfig.secretRef must be specified",
              "rule": "!has(self.configMapRef) || !has(self.secretRef)"
            }
          ],
          "additionalProperties": false
        },
        "namePrefix": {
          "description": "NamePrefix will prefix the names of all managed resources.",
          "maxLength": 200,
          "minLength": 1,
          "type": "string"
        },
        "nameSuffix": {
          "description": "NameSuffix will suffix the names of all managed resources.",
          "maxLength": 200,
          "minLength": 1,
          "type": "string"
        },
        "patches": {
          "description": "Strategic merge and JSON patches, defined as inline YAML objects,\ncapable of targeting objects based on kind, label and annotation selectors.",
          "items": {
            "description": "Patch contains an inline StrategicMerge or JSON6902 patch, and the target the patch should\nbe applied to.",
            "properties": {
              "patch": {
                "description": "Patch contains an inline StrategicMerge patch or an inline JSON6902 patch with\nan array of operation objects.",
                "type": "string"
              },
              "target": {
                "description": "Target points to the resources that the patch document should be applied to.",
                "properties": {
                  "annotationSelector": {
                    "description": "AnnotationSelector is a string that follows the label selection expression\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api\nIt matches with the resource annotations.",
                    "type": "string"
                  },
                  "group": {
                    "description": "Group is the API group to select resources from.\nTogether with Version and Kind it is capable of unambiguously identifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
                    "type": "string"
                  },
                  "kind": {
                    "description": "Kind of the API Group to select resources from.\nTogether with Group and Version it is capable of unambiguously\nidentifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
                    "type": "string"
                  },
                  "labelSelector": {
                    "description": "LabelSelector is a string that follows the label selection expression\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api\nIt matches with the resource labels.",
                    "type": "string"
                  },
                  "name": {
                    "description": "Name to match resources with.",
                    "type": "string"
                  },
                  "namespace": {
                    "description": "Namespace to select resources from.",
                    "type": "string"
                  },
                  "version": {
                    "description": "Version of the API Group to select resources from.\nTogether with Group and Kind it is capable of unambiguously identifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              }
            },
            "required": [
              "patch"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "path": {
          "description": "Path to the directory containing the kustomization.yaml file, or the\nset of plain YAMLs a kustomization.yaml should be generated for.\nDefaults to 'None', which translates to the root path of the SourceRef.",
          "type": "string"
        },
        "postBuild": {
          "description": "PostBuild describes which actions to perform on the YAML manifest\ngenerated by building the kustomize overlay.",
          "properties": {
            "substitute": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Substitute holds a map of key/value pairs.\nThe variables defined in your YAML manifests that match any of the keys\ndefined in the map will be substituted with the set value.\nIncludes support for bash string replacement functions\ne.g. ${var:=default}, ${var:position} and ${var/substring/replacement}.",
              "type": "object"
            },
            "substituteFrom": {
              "description": "SubstituteFrom holds references to ConfigMaps and Secrets containing\nthe variables and their values to be substituted in the YAML manifests.\nThe ConfigMap and the Secret data keys represent the var names, and they\nmust match the vars declared in the manifests for the substitution to\nhappen.",
              "items": {
                "description": "SubstituteReference contains a reference to a resource containing\nthe variables name and value.",
                "properties": {
                  "kind": {
                    "description": "Kind of the values referent, valid values are ('Secret', 'ConfigMap').",
                    "enum": [
                      "Secret",
                      "ConfigMap"
                    ],
                    "type": "string"
                  },
                  "name": {
                    "description": "Name of the values referent. Should reside in the same namespace as the\nreferring resource.",
                    "maxLength": 253,
                    "minLength": 1,
                    "type": "string"
                  },
                  "optional": {
                    "default": false,
                    "description": "Optional indicates whether the referenced resource must exist, or whether to\ntolerate its absence. If true and the referenced resource is absent, proceed\nas if the resource was present but empty, without any variables defined.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "kind",
                  "name"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "prune": {
          "description": "Prune enables garbage collection.",
          "type": "boolean"
        },
        "retryInterval": {
          "description": "The interval at which to retry a previously failed reconciliation.\nWhen not specified, the controller uses the KustomizationSpec.Interval\nvalue to retry failures.",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
          "type": "string"
        },
        "serviceAccountName": {
          "description": "The name of the Kubernetes service account to impersonate\nwhen reconciling this Kustomization.",
          "type": "string"
        },
        "sourceRef": {
          "description": "Reference of the source where the kustomization file is.",
          "properties": {
            "apiVersion": {
              "description": "API version of the referent.",
              "type": "string"
            },
            "kind": {
              "description": "Kind of the referent.",
              "enum": [
                "OCIRepository",
                "GitRepository",
                "Bucket",
                "ExternalArtifact"
              ],
              "type": "string"
            },
            "name": {
              "description": "Name of the referent.",
              "type": "string"
            },
            "namespace": {
              "description": "Namespace of the referent, defaults to the namespace of the Kubernetes\nresource object that contains the reference.",
              "type": "string"
            }
          },
          "required": [
            "kind",
            "name"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "suspend": {
          "description": "This flag tells the controller to suspend subsequent kustomize executions,\nit does not apply to already started executions. Defaults to false.",
          "type": "boolean"
        },
        "targetNamespace": {
          "description": "TargetNamespace sets or overrides the namespace in the\nkustomization.yaml file.",
          "maxLength": 63,
          "minLength": 1,
          "type": "string"
        },
        "timeout": {
          "description": "Timeout for validation, apply and health checking operations.\nDefaults to 'Interval' duration.",
          "pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
          "type": "string"
        },
        "wait": {
          "description": "Wait instructs the controller to check the health of all the reconciled\nresources. When enabled, the HealthChecks are ignored. Defaults to false.",
          "type": "boolean"
        }
      },
      "required": [
        "interval",
        "prune",
        "sourceRef"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "default": {
        "observedGeneration": -1
      },
      "description": "KustomizationStatus defines the observed state of a kustomization.",
      "properties": {
        "conditions": {
          "items": {
            "description": "Condition contains details for one aspect of the current state of this API Resource.",
            "properties": {
              "lastTransitionTime": {
                "description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
                "maxLength": 32768,
                "type": "string"
              },
              "observedGeneration": {
                "description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
                "format": "int64",
                "minimum": 0,
                "type": "integer"
              },
              "reason": {
                "description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
                "maxLength": 1024,
                "minLength": 1,
                "pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
                "type": "string"
              },
              "status": {
                "description": "status of the condition, one of True, False, Unknown.",
                "enum": [
                  "True",
                  "False",
                  "Unknown"
                ],
                "type": "string"
              },
              "type": {
                "description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
                "maxLength": 316,
                "pattern": "^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "message",
              "reason",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "history": {
          "description": "History contains a set of snapshots of the last reconciliation attempts\ntracking the revision, the state and the duration of each attempt.",
          "items": {
            "description": "Snapshot represents a point-in-time record of a group of resources reconciliation,\nincluding timing information, status, and a unique digest identifier.",
            "properties": {
              "digest": {
                "description": "Digest is the checksum in the format `<algo>:<hex>` of the resources in this snapshot.",
                "type": "string"
              },
              "firstReconciled": {
                "description": "FirstReconciled is the time when this revision was first reconciled to the cluster.",
                "format": "date-time",
                "type": "string"
              },
              "lastReconciled": {
                "description": "LastReconciled is the time when this revision was last reconciled to the cluster.",
                "format": "date-time",
                "type": "string"
              },
              "lastReconciledDuration": {
                "description": "LastReconciledDuration is time it took to reconcile the resources in this revision.",
                "type": "string"
              },
              "lastReconciledStatus": {
                "description": "LastReconciledStatus is the status of the last reconciliation.",
                "type": "string"
              },
              "metadata": {
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Metadata contains additional information about the snapshot.",
                "type": "object"
              },
              "totalReconciliations": {
                "description": "TotalReconciliations is the total number of reconciliations that have occurred for this snapshot.",
                "format": "int64",
                "type": "integer"
              }
            },
            "required": [
              "digest",
              "firstReconciled",
              "lastReconciled",
              "lastReconciledDuration",
              "lastReconciledStatus",
              "totalReconciliations"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "inventory": {
          "description": "Inventory contains the list of Kubernetes resource object references that\nhave been successfully applied.",
          "properties": {
            "entries": {
              "description": "Entries of Kubernetes resource object references.",
              "items": {
                "description": "ResourceRef contains the information necessary to locate a resource within a cluster.",
                "properties": {
                  "id": {
                    "description": "ID is the string representation of the Kubernetes resource object's metadata,\nin the format '<namespace>_<name>_<group>_<kind>'.",
                    "type": "string"
                  },
                  "v": {
                    "description": "Version is the API version of the Kubernetes resource object's kind.",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "v"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "required": [
            "entries"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "lastAppliedOriginRevision": {
          "description": "The last successfully applied origin revision.\nEquals the origin revision of the applied Artifact from the referenced Source.\nUsually present on the Metadata of the applied Artifact and depends on the\nSource type, e.g. for OCI it's the value associated with the key\n\"org.opencontainers.image.revision\".",
          "type": "string"
        },
        "lastAppliedRevision": {
          "description": "The last successfully applied revision.\nEquals the Revision of the applied Artifact from the referenced Source.",
          "type": "string"
        },
        "lastAttemptedRevision": {
          "description": "LastAttemptedRevision is the revision of the last reconciliation attempt.",
          "type": "string"
        },
        "lastHandledReconcileAt": {
          "description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
          "type": "string"
        },
        "observedGeneration": {
          "description": "ObservedGeneration is the last reconciled generation.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
