{
  "description": "ResourceSet is the Schema for the ResourceSets 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": "ResourceSetSpec defines the desired state of ResourceSet",
      "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
        },
        "dependsOn": {
          "description": "DependsOn specifies the list of Kubernetes resources that must\nexist on the cluster before the reconciliation process starts.",
          "items": {
            "description": "Dependency defines a ResourceSet dependency on a Kubernetes resource.",
            "properties": {
              "apiVersion": {
                "description": "APIVersion of the resource to depend on.",
                "type": "string"
              },
              "kind": {
                "description": "Kind of the resource to depend on.",
                "type": "string"
              },
              "name": {
                "description": "Name of the resource to depend on.",
                "type": "string"
              },
              "namespace": {
                "description": "Namespace of the resource to depend on.",
                "type": "string"
              },
              "ready": {
                "description": "Ready checks if the resource Ready status condition is true.",
                "type": "boolean"
              },
              "readyExpr": {
                "description": "ReadyExpr checks if the resource satisfies the given CEL expression.\nThe expression replaces the default readiness check and\nis only evaluated if Ready is set to 'true'.",
                "type": "string"
              }
            },
            "required": [
              "apiVersion",
              "kind",
              "name"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "inputStrategy": {
          "description": "InputStrategy defines how the inputs are combined when multiple\ninput provider objects are used. Defaults to flattening all inputs\nfrom all providers into a single list of input sets.",
          "properties": {
            "name": {
              "description": "Name defines how the inputs are combined when multiple\ninput provider objects are used. Supported values are:\n- Flatten: all inputs sets from all input provider objects are\n  flattened into a single list of input sets.\n- Permute: all inputs sets from all input provider objects are\n  combined using a Cartesian product, resulting in a list of input sets\n  that contains every possible combination of input values.\n  For example, if provider A has inputs [{x: 1}, {x: 2}] and provider B has\n  inputs [{y: \"a\"}, {y: \"b\"}], the resulting input sets will be:\n  [{x: 1, y: \"a\"}, {x: 1, y: \"b\"}, {x: 2, y: \"a\"}, {x: 2, y: \"b\"}].\n  This strategy can lead to a large number of input sets and should be\n  used with caution. Users should use filtering features from\n  ResourceSetInputProvider to limit the amount of exported inputs.",
              "enum": [
                "Flatten",
                "Permute"
              ],
              "type": "string"
            }
          },
          "required": [
            "name"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "inputs": {
          "description": "Inputs contains the list of ResourceSet inputs.",
          "items": {
            "additionalProperties": {
              "x-kubernetes-preserve-unknown-fields": true
            },
            "description": "ResourceSetInput defines the key-value pairs of the ResourceSet input.",
            "type": "object"
          },
          "type": "array"
        },
        "inputsFrom": {
          "description": "InputsFrom contains the list of references to input providers.\nWhen set, the inputs are fetched from the providers and concatenated\nwith the in-line inputs defined in the ResourceSet.",
          "items": {
            "description": "InputProviderReference defines a reference to an input provider resource\nin the same namespace as the ResourceSet.",
            "properties": {
              "apiVersion": {
                "description": "APIVersion of the input provider resource.\nWhen not set, the APIVersion of the ResourceSet is used.",
                "enum": [
                  "fluxcd.controlplane.io/v1"
                ],
                "type": "string"
              },
              "kind": {
                "description": "Kind of the input provider resource.",
                "enum": [
                  "ResourceSetInputProvider"
                ],
                "type": "string"
              },
              "name": {
                "description": "Name of the input provider resource. Cannot be set\nwhen the Selector field is set.",
                "type": "string"
              },
              "selector": {
                "description": "Selector is a label selector to filter the input provider resources\nas an alternative to the Name field.",
                "properties": {
                  "matchExpressions": {
                    "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                    "items": {
                      "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                      "properties": {
                        "key": {
                          "description": "key is the label key that the selector applies to.",
                          "type": "string"
                        },
                        "operator": {
                          "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                          "type": "string"
                        },
                        "values": {
                          "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array",
                          "x-kubernetes-list-type": "atomic"
                        }
                      },
                      "required": [
                        "key",
                        "operator"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "atomic"
                  },
                  "matchLabels": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                    "type": "object"
                  }
                },
                "type": "object",
                "x-kubernetes-map-type": "atomic",
                "additionalProperties": false
              }
            },
            "type": "object",
            "x-kubernetes-validations": [
              {
                "message": "at least one of name or selector must be set for input provider references",
                "rule": "has(self.name) || has(self.selector)"
              },
              {
                "message": "cannot set both name and selector for input provider references",
                "rule": "!has(self.name) || !has(self.selector)"
              }
            ],
            "additionalProperties": false
          },
          "type": "array"
        },
        "resources": {
          "description": "Resources contains the list of Kubernetes resources to reconcile.",
          "items": {
            "x-kubernetes-preserve-unknown-fields": true
          },
          "type": "array"
        },
        "resourcesTemplate": {
          "description": "ResourcesTemplate is a Go template that generates the list of\nKubernetes resources to reconcile. The template is rendered\nas multi-document YAML, the resources should be separated by '---'.\nWhen both Resources and ResourcesTemplate are set, the resulting\nobjects are merged and deduplicated, with the ones from Resources taking precedence.",
          "type": "string"
        },
        "serviceAccountName": {
          "description": "The name of the Kubernetes service account to impersonate\nwhen reconciling the generated resources.",
          "type": "string"
        },
        "wait": {
          "description": "Wait instructs the controller to check the health\nof all the reconciled resources.",
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "ResourceSetStatus defines the observed state of ResourceSet.",
      "properties": {
        "conditions": {
          "description": "Conditions contains the readiness conditions of the object.",
          "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 the reconciliation history of the ResourceSet\nas a list of snapshots ordered by the last reconciled time.",
          "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 a list of Kubernetes resource object references\nlast applied on the cluster.",
          "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
        },
        "lastAppliedRevision": {
          "description": "LastAppliedRevision is the digest of the\ngenerated resources that were last reconcile.",
          "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"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
