{
  "description": "Bundle contains the resources of an application and its deployment options.\nIt will be deployed as a Helm chart to target clusters.\n\nWhen a GitRepo is scanned it will produce one or more bundles. Bundles are\na collection of resources that get deployed to one or more cluster(s). Bundle is the\nfundamental deployment unit used in Fleet. The contents of a Bundle may be\nKubernetes manifests, Kustomize configuration, or Helm charts. Regardless\nof the source the contents are dynamically rendered into a Helm chart by\nthe agent and installed into the downstream cluster as a Helm release.",
  "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": {
      "properties": {
        "contentsId": {
          "description": "ContentsID stores the contents id when deploying contents using an OCI registry.",
          "nullable": true,
          "type": "string"
        },
        "correctDrift": {
          "description": "CorrectDrift specifies how drift correction should work.",
          "properties": {
            "enabled": {
              "description": "Enabled correct drift if true.",
              "type": "boolean"
            },
            "force": {
              "description": "Force helm rollback with --force option will be used if true. This will try to recreate all resources in the release.",
              "type": "boolean"
            },
            "keepFailHistory": {
              "description": "KeepFailHistory keeps track of failed rollbacks in the helm history.",
              "type": "boolean"
            }
          },
          "type": "object"
        },
        "defaultNamespace": {
          "description": "DefaultNamespace is the namespace to use for resources that do not\nspecify a namespace. This field is not used to enforce or lock down\nthe deployment to a specific namespace.",
          "nullable": true,
          "type": "string"
        },
        "deleteCRDResources": {
          "description": "DeleteCRDResources deletes CRDs. Warning! this will also delete all your Custom Resources.",
          "type": "boolean"
        },
        "deleteNamespace": {
          "description": "DeleteNamespace can be used to delete the deployed namespace when removing the bundle",
          "type": "boolean"
        },
        "dependsOn": {
          "description": "DependsOn refers to the bundles which must be ready before this bundle can be deployed.",
          "items": {
            "properties": {
              "name": {
                "description": "Name of the bundle.",
                "nullable": true,
                "type": "string"
              },
              "selector": {
                "description": "Selector matching bundle's labels.",
                "nullable": true,
                "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"
                    },
                    "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"
              }
            },
            "type": "object"
          },
          "nullable": true,
          "type": "array"
        },
        "diff": {
          "description": "Diff can be used to ignore the modified state of objects which are amended at runtime.",
          "nullable": true,
          "properties": {
            "comparePatches": {
              "description": "ComparePatches match a resource and remove fields, or the resource itself from the check for modifications.",
              "items": {
                "description": "ComparePatch matches a resource and removes fields from the check for modifications.",
                "properties": {
                  "apiVersion": {
                    "description": "APIVersion is the apiVersion of the resource to match.",
                    "nullable": true,
                    "type": "string"
                  },
                  "jsonPointers": {
                    "description": "JSONPointers ignore diffs at a certain JSON path.",
                    "items": {
                      "type": "string"
                    },
                    "nullable": true,
                    "type": "array"
                  },
                  "kind": {
                    "description": "Kind is the kind of the resource to match.",
                    "nullable": true,
                    "type": "string"
                  },
                  "name": {
                    "description": "Name is the name of the resource to match.",
                    "nullable": true,
                    "type": "string"
                  },
                  "namespace": {
                    "description": "Namespace is the namespace of the resource to match.",
                    "nullable": true,
                    "type": "string"
                  },
                  "operations": {
                    "description": "Operations remove a JSON path from the resource.",
                    "items": {
                      "description": "Operation of a ComparePatch, usually:\n* \"remove\" to remove a specific path in a resource\n* \"ignore\" to remove the entire resource from checks for modifications.",
                      "properties": {
                        "op": {
                          "description": "Op is usually \"remove\" or \"ignore\"",
                          "nullable": true,
                          "type": "string"
                        },
                        "path": {
                          "description": "Path is the JSON path to remove. Not needed if Op is \"ignore\".",
                          "nullable": true,
                          "type": "string"
                        },
                        "value": {
                          "description": "Value is usually empty.",
                          "nullable": true,
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "nullable": true,
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "nullable": true,
              "type": "array"
            }
          },
          "type": "object"
        },
        "downstreamResources": {
          "description": "DownstreamResources points to resources to be copied into downstream clusters, from the bundle's\nnamespace.",
          "items": {
            "description": "DownstreamResource contains identifiers for a resource to be copied from the parent bundle's namespace to each\ndownstream cluster.",
            "properties": {
              "kind": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "forceSyncGeneration": {
          "description": "ForceSyncGeneration is used to force a redeployment",
          "format": "int64",
          "type": "integer"
        },
        "helm": {
          "description": "Helm options for the deployment, like the chart name, repo and values.",
          "properties": {
            "atomic": {
              "description": "Atomic sets the --atomic flag when Helm is performing an upgrade",
              "type": "boolean"
            },
            "chart": {
              "description": "Chart can refer to any go-getter URL or OCI registry based helm\nchart URL. The chart will be downloaded.",
              "nullable": true,
              "type": "string"
            },
            "disableDNS": {
              "description": "DisableDNS can be used to customize Helm's EnableDNS option, which Fleet sets to `true` by default.",
              "type": "boolean"
            },
            "disableDependencyUpdate": {
              "description": "DisableDependencyUpdate allows skipping chart dependencies update",
              "type": "boolean"
            },
            "disablePreProcess": {
              "description": "DisablePreProcess disables template processing in values",
              "type": "boolean"
            },
            "force": {
              "description": "Force allows to override immutable resources. This could be dangerous.",
              "type": "boolean"
            },
            "maxHistory": {
              "description": "MaxHistory limits the maximum number of revisions saved per release by Helm.",
              "type": "integer"
            },
            "releaseName": {
              "description": "ReleaseName sets a custom release name to deploy the chart as. If\nnot specified a release name will be generated by combining the\ninvoking GitRepo.name + GitRepo.path.",
              "maxLength": 53,
              "nullable": true,
              "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$",
              "type": "string"
            },
            "repo": {
              "description": "Repo is the name of the HTTPS helm repo to download the chart from.",
              "nullable": true,
              "type": "string"
            },
            "skipSchemaValidation": {
              "description": "SkipSchemaValidation allows skipping schema validation against the chart values",
              "type": "boolean"
            },
            "takeOwnership": {
              "description": "TakeOwnership makes helm skip the check for its own annotations",
              "type": "boolean"
            },
            "templateValues": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Template Values passed to Helm. It is possible to specify the keys and values\nas go template strings. Unlike .values, content of each key will be templated\nfirst, before serializing to yaml. This allows to template complex values,\nlike ranges and maps.\ntemplateValues keys have precedence over values keys in case of conflict.",
              "nullable": true,
              "type": "object"
            },
            "timeoutSeconds": {
              "description": "TimeoutSeconds is the time to wait for Helm operations.",
              "type": "integer"
            },
            "values": {
              "description": "Values passed to Helm. It is possible to specify the keys and values\nas go template strings.",
              "nullable": true,
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "valuesFiles": {
              "description": "ValuesFiles is a list of files to load values from.",
              "items": {
                "type": "string"
              },
              "nullable": true,
              "type": "array"
            },
            "valuesFrom": {
              "description": "ValuesFrom loads the values from configmaps and secrets.",
              "items": {
                "description": "Define helm values that can come from configmap, secret or external. Credit: https://github.com/fluxcd/helm-operator/blob/0cfea875b5d44bea995abe7324819432070dfbdc/pkg/apis/helm.fluxcd.io/v1/types_helmrelease.go#L439",
                "properties": {
                  "configMapKeyRef": {
                    "description": "The reference to a config map with release values.",
                    "nullable": true,
                    "properties": {
                      "key": {
                        "nullable": true,
                        "type": "string"
                      },
                      "name": {
                        "description": "Name of a resource in the same namespace as the referent.",
                        "nullable": true,
                        "type": "string"
                      },
                      "namespace": {
                        "nullable": true,
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "secretKeyRef": {
                    "description": "The reference to a secret with release values.",
                    "nullable": true,
                    "properties": {
                      "key": {
                        "nullable": true,
                        "type": "string"
                      },
                      "name": {
                        "description": "Name of a resource in the same namespace as the referent.",
                        "nullable": true,
                        "type": "string"
                      },
                      "namespace": {
                        "nullable": true,
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              },
              "nullable": true,
              "type": "array"
            },
            "version": {
              "description": "Version of the chart to download",
              "nullable": true,
              "type": "string"
            },
            "waitForJobs": {
              "description": "WaitForJobs if set and timeoutSeconds provided, will wait until all\nJobs have been completed before marking the GitRepo as ready. It\nwill wait for as long as timeoutSeconds",
              "type": "boolean"
            }
          },
          "type": "object"
        },
        "helmOpOptions": {
          "description": "HelmOpOptions stores the options relative to HelmOp resources\nNon-nil HelmOpOptions indicate that the source of resources is a Helm chart,\nnot a git repository.",
          "nullable": true,
          "properties": {
            "helmOpInsecureSkipTLSVerify": {
              "description": "InsecureSkipTLSverify will use insecure HTTPS to clone the helm app resource.",
              "type": "boolean"
            },
            "helmOpSecretName": {
              "description": "SecretName stores the secret name for storing credentials when accessing\na remote helm repository defined in a HelmOp resource",
              "type": "string"
            }
          },
          "type": "object"
        },
        "ignore": {
          "description": "IgnoreOptions can be used to ignore fields when monitoring the bundle.",
          "nullable": true,
          "properties": {
            "conditions": {
              "description": "Conditions is a list of conditions to be ignored when monitoring the Bundle.",
              "items": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              "nullable": true,
              "type": "array"
            }
          },
          "type": "object"
        },
        "keepResources": {
          "description": "KeepResources can be used to keep the deployed resources when removing the bundle",
          "type": "boolean"
        },
        "kustomize": {
          "description": "Kustomize options for the deployment, like the dir containing the\nkustomization.yaml file.",
          "nullable": true,
          "properties": {
            "dir": {
              "description": "Dir points to a custom folder for kustomize resources. This folder must contain\na kustomization.yaml file.",
              "nullable": true,
              "type": "string"
            }
          },
          "type": "object"
        },
        "namespace": {
          "description": "TargetNamespace if present will assign all resource to this\nnamespace and if any cluster scoped resource exists the deployment\nwill fail.",
          "nullable": true,
          "type": "string"
        },
        "namespaceAnnotations": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "NamespaceAnnotations are annotations that will be appended to the namespace created by Fleet.",
          "nullable": true,
          "type": "object"
        },
        "namespaceLabels": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "NamespaceLabels are labels that will be appended to the namespace created by Fleet.",
          "nullable": true,
          "type": "object"
        },
        "paused": {
          "description": "Paused if set to true, will stop any BundleDeployments from being updated. It will be marked as out of sync.",
          "type": "boolean"
        },
        "resources": {
          "description": "Resources contains the resources that were read from the bundle's\npath. This includes the content of downloaded helm charts.",
          "items": {
            "description": "BundleResource represents the content of a single resource from the bundle, like a YAML manifest.",
            "properties": {
              "content": {
                "description": "The content of the resource, can be compressed.",
                "nullable": true,
                "type": "string"
              },
              "encoding": {
                "description": "Encoding is either empty or \"base64+gz\".",
                "nullable": true,
                "type": "string"
              },
              "name": {
                "description": "Name of the resource, can include the bundle's internal path.",
                "nullable": true,
                "type": "string"
              }
            },
            "type": "object"
          },
          "nullable": true,
          "type": "array"
        },
        "rolloutStrategy": {
          "description": "RolloutStrategy controls the rollout of bundles, by defining\npartitions, canaries and percentages for cluster availability.",
          "nullable": true,
          "properties": {
            "autoPartitionSize": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "string"
                }
              ],
              "description": "A number or percentage of how to automatically partition clusters if no\nspecific partitioning strategy is configured.\ndefault: 25%",
              "nullable": true,
              "x-kubernetes-int-or-string": true
            },
            "maxUnavailable": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "string"
                }
              ],
              "description": "A number or percentage of clusters that can be unavailable during an update\nof a bundle. This follows the same basic approach as a deployment rollout\nstrategy. Once the number of clusters meets unavailable state update will be\npaused. Default value is 100% which doesn't take effect on update.\ndefault: 100%",
              "nullable": true,
              "x-kubernetes-int-or-string": true
            },
            "maxUnavailablePartitions": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "string"
                }
              ],
              "description": "A number or percentage of cluster partitions that can be unavailable during\nan update of a bundle.\ndefault: 0",
              "nullable": true,
              "x-kubernetes-int-or-string": true
            },
            "partitions": {
              "description": "A list of definitions of partitions.  If any target clusters do not match\nthe configuration they are added to partitions at the end following the\nautoPartitionSize.",
              "items": {
                "description": "Partition defines a separate rollout strategy for a set of clusters.",
                "properties": {
                  "clusterGroup": {
                    "description": "A cluster group name to include in this partition",
                    "type": "string"
                  },
                  "clusterGroupSelector": {
                    "description": "Selector matching cluster group labels to include in this partition",
                    "nullable": true,
                    "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"
                        },
                        "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"
                  },
                  "clusterName": {
                    "description": "ClusterName is the name of a cluster to include in this partition",
                    "type": "string"
                  },
                  "clusterSelector": {
                    "description": "Selector matching cluster labels to include in this partition",
                    "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"
                        },
                        "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"
                  },
                  "maxUnavailable": {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ],
                    "description": "A number or percentage of clusters that can be unavailable in this\npartition before this partition is treated as done.\ndefault: 10%",
                    "x-kubernetes-int-or-string": true
                  },
                  "name": {
                    "description": "A user-friendly name given to the partition used for Display (optional).",
                    "nullable": true,
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "nullable": true,
              "type": "array"
            }
          },
          "type": "object"
        },
        "serviceAccount": {
          "description": "ServiceAccount which will be used to perform this deployment.",
          "nullable": true,
          "type": "string"
        },
        "targetRestrictions": {
          "description": "TargetRestrictions is an allow list, which controls if a bundledeployment is created for a target.",
          "items": {
            "description": "BundleTargetRestriction is used internally by Fleet and should not be modified.\nIt acts as an allow list, to prevent the creation of BundleDeployments from\nTargets created by TargetCustomizations in fleet.yaml.",
            "properties": {
              "clusterGroup": {
                "nullable": true,
                "type": "string"
              },
              "clusterGroupSelector": {
                "description": "A label selector is a label query over a set of resources. The result of matchLabels and\nmatchExpressions are ANDed. An empty label selector matches all objects. A null\nlabel selector matches no objects.",
                "nullable": true,
                "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"
                    },
                    "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"
              },
              "clusterName": {
                "nullable": true,
                "type": "string"
              },
              "clusterSelector": {
                "description": "A label selector is a label query over a set of resources. The result of matchLabels and\nmatchExpressions are ANDed. An empty label selector matches all objects. A null\nlabel selector matches no objects.",
                "nullable": true,
                "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"
                    },
                    "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"
              },
              "name": {
                "nullable": true,
                "type": "string"
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "targets": {
          "description": "Targets refer to the clusters which will be deployed to.\nTargets are evaluated in order and the first one to match is used.",
          "items": {
            "description": "BundleTarget declares clusters to deploy to. Fleet will merge the\nBundleDeploymentOptions from customizations into this struct.",
            "properties": {
              "clusterGroup": {
                "description": "ClusterGroup to match a specific cluster group by name.",
                "nullable": true,
                "type": "string"
              },
              "clusterGroupSelector": {
                "description": "ClusterGroupSelector is a selector to match cluster groups.",
                "nullable": true,
                "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"
                    },
                    "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"
              },
              "clusterName": {
                "description": "ClusterName to match a specific cluster by name that will be\nselected",
                "nullable": true,
                "type": "string"
              },
              "clusterSelector": {
                "description": "ClusterSelector is a selector to match clusters. The structure is\nthe standard metav1.LabelSelector format. If clusterGroupSelector or\nclusterGroup is specified, clusterSelector will be used only to\nfurther refine the selection after clusterGroupSelector and\nclusterGroup is evaluated.",
                "nullable": true,
                "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"
                    },
                    "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"
              },
              "correctDrift": {
                "description": "CorrectDrift specifies how drift correction should work.",
                "properties": {
                  "enabled": {
                    "description": "Enabled correct drift if true.",
                    "type": "boolean"
                  },
                  "force": {
                    "description": "Force helm rollback with --force option will be used if true. This will try to recreate all resources in the release.",
                    "type": "boolean"
                  },
                  "keepFailHistory": {
                    "description": "KeepFailHistory keeps track of failed rollbacks in the helm history.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "defaultNamespace": {
                "description": "DefaultNamespace is the namespace to use for resources that do not\nspecify a namespace. This field is not used to enforce or lock down\nthe deployment to a specific namespace.",
                "nullable": true,
                "type": "string"
              },
              "deleteCRDResources": {
                "description": "DeleteCRDResources deletes CRDs. Warning! this will also delete all your Custom Resources.",
                "type": "boolean"
              },
              "deleteNamespace": {
                "description": "DeleteNamespace can be used to delete the deployed namespace when removing the bundle",
                "type": "boolean"
              },
              "diff": {
                "description": "Diff can be used to ignore the modified state of objects which are amended at runtime.",
                "nullable": true,
                "properties": {
                  "comparePatches": {
                    "description": "ComparePatches match a resource and remove fields, or the resource itself from the check for modifications.",
                    "items": {
                      "description": "ComparePatch matches a resource and removes fields from the check for modifications.",
                      "properties": {
                        "apiVersion": {
                          "description": "APIVersion is the apiVersion of the resource to match.",
                          "nullable": true,
                          "type": "string"
                        },
                        "jsonPointers": {
                          "description": "JSONPointers ignore diffs at a certain JSON path.",
                          "items": {
                            "type": "string"
                          },
                          "nullable": true,
                          "type": "array"
                        },
                        "kind": {
                          "description": "Kind is the kind of the resource to match.",
                          "nullable": true,
                          "type": "string"
                        },
                        "name": {
                          "description": "Name is the name of the resource to match.",
                          "nullable": true,
                          "type": "string"
                        },
                        "namespace": {
                          "description": "Namespace is the namespace of the resource to match.",
                          "nullable": true,
                          "type": "string"
                        },
                        "operations": {
                          "description": "Operations remove a JSON path from the resource.",
                          "items": {
                            "description": "Operation of a ComparePatch, usually:\n* \"remove\" to remove a specific path in a resource\n* \"ignore\" to remove the entire resource from checks for modifications.",
                            "properties": {
                              "op": {
                                "description": "Op is usually \"remove\" or \"ignore\"",
                                "nullable": true,
                                "type": "string"
                              },
                              "path": {
                                "description": "Path is the JSON path to remove. Not needed if Op is \"ignore\".",
                                "nullable": true,
                                "type": "string"
                              },
                              "value": {
                                "description": "Value is usually empty.",
                                "nullable": true,
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "nullable": true,
                          "type": "array"
                        }
                      },
                      "type": "object"
                    },
                    "nullable": true,
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "doNotDeploy": {
                "description": "DoNotDeploy if set to true, will not deploy to this target.",
                "type": "boolean"
              },
              "downstreamResources": {
                "description": "DownstreamResources points to resources to be copied into downstream clusters, from the bundle's\nnamespace.",
                "items": {
                  "description": "DownstreamResource contains identifiers for a resource to be copied from the parent bundle's namespace to each\ndownstream cluster.",
                  "properties": {
                    "kind": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "forceSyncGeneration": {
                "description": "ForceSyncGeneration is used to force a redeployment",
                "format": "int64",
                "type": "integer"
              },
              "helm": {
                "description": "Helm options for the deployment, like the chart name, repo and values.",
                "properties": {
                  "atomic": {
                    "description": "Atomic sets the --atomic flag when Helm is performing an upgrade",
                    "type": "boolean"
                  },
                  "chart": {
                    "description": "Chart can refer to any go-getter URL or OCI registry based helm\nchart URL. The chart will be downloaded.",
                    "nullable": true,
                    "type": "string"
                  },
                  "disableDNS": {
                    "description": "DisableDNS can be used to customize Helm's EnableDNS option, which Fleet sets to `true` by default.",
                    "type": "boolean"
                  },
                  "disableDependencyUpdate": {
                    "description": "DisableDependencyUpdate allows skipping chart dependencies update",
                    "type": "boolean"
                  },
                  "disablePreProcess": {
                    "description": "DisablePreProcess disables template processing in values",
                    "type": "boolean"
                  },
                  "force": {
                    "description": "Force allows to override immutable resources. This could be dangerous.",
                    "type": "boolean"
                  },
                  "maxHistory": {
                    "description": "MaxHistory limits the maximum number of revisions saved per release by Helm.",
                    "type": "integer"
                  },
                  "releaseName": {
                    "description": "ReleaseName sets a custom release name to deploy the chart as. If\nnot specified a release name will be generated by combining the\ninvoking GitRepo.name + GitRepo.path.",
                    "maxLength": 53,
                    "nullable": true,
                    "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$",
                    "type": "string"
                  },
                  "repo": {
                    "description": "Repo is the name of the HTTPS helm repo to download the chart from.",
                    "nullable": true,
                    "type": "string"
                  },
                  "skipSchemaValidation": {
                    "description": "SkipSchemaValidation allows skipping schema validation against the chart values",
                    "type": "boolean"
                  },
                  "takeOwnership": {
                    "description": "TakeOwnership makes helm skip the check for its own annotations",
                    "type": "boolean"
                  },
                  "templateValues": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "Template Values passed to Helm. It is possible to specify the keys and values\nas go template strings. Unlike .values, content of each key will be templated\nfirst, before serializing to yaml. This allows to template complex values,\nlike ranges and maps.\ntemplateValues keys have precedence over values keys in case of conflict.",
                    "nullable": true,
                    "type": "object"
                  },
                  "timeoutSeconds": {
                    "description": "TimeoutSeconds is the time to wait for Helm operations.",
                    "type": "integer"
                  },
                  "values": {
                    "description": "Values passed to Helm. It is possible to specify the keys and values\nas go template strings.",
                    "nullable": true,
                    "type": "object",
                    "x-kubernetes-preserve-unknown-fields": true
                  },
                  "valuesFiles": {
                    "description": "ValuesFiles is a list of files to load values from.",
                    "items": {
                      "type": "string"
                    },
                    "nullable": true,
                    "type": "array"
                  },
                  "valuesFrom": {
                    "description": "ValuesFrom loads the values from configmaps and secrets.",
                    "items": {
                      "description": "Define helm values that can come from configmap, secret or external. Credit: https://github.com/fluxcd/helm-operator/blob/0cfea875b5d44bea995abe7324819432070dfbdc/pkg/apis/helm.fluxcd.io/v1/types_helmrelease.go#L439",
                      "properties": {
                        "configMapKeyRef": {
                          "description": "The reference to a config map with release values.",
                          "nullable": true,
                          "properties": {
                            "key": {
                              "nullable": true,
                              "type": "string"
                            },
                            "name": {
                              "description": "Name of a resource in the same namespace as the referent.",
                              "nullable": true,
                              "type": "string"
                            },
                            "namespace": {
                              "nullable": true,
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "secretKeyRef": {
                          "description": "The reference to a secret with release values.",
                          "nullable": true,
                          "properties": {
                            "key": {
                              "nullable": true,
                              "type": "string"
                            },
                            "name": {
                              "description": "Name of a resource in the same namespace as the referent.",
                              "nullable": true,
                              "type": "string"
                            },
                            "namespace": {
                              "nullable": true,
                              "type": "string"
                            }
                          },
                          "type": "object"
                        }
                      },
                      "type": "object"
                    },
                    "nullable": true,
                    "type": "array"
                  },
                  "version": {
                    "description": "Version of the chart to download",
                    "nullable": true,
                    "type": "string"
                  },
                  "waitForJobs": {
                    "description": "WaitForJobs if set and timeoutSeconds provided, will wait until all\nJobs have been completed before marking the GitRepo as ready. It\nwill wait for as long as timeoutSeconds",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "ignore": {
                "description": "IgnoreOptions can be used to ignore fields when monitoring the bundle.",
                "nullable": true,
                "properties": {
                  "conditions": {
                    "description": "Conditions is a list of conditions to be ignored when monitoring the Bundle.",
                    "items": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "nullable": true,
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "keepResources": {
                "description": "KeepResources can be used to keep the deployed resources when removing the bundle",
                "type": "boolean"
              },
              "kustomize": {
                "description": "Kustomize options for the deployment, like the dir containing the\nkustomization.yaml file.",
                "nullable": true,
                "properties": {
                  "dir": {
                    "description": "Dir points to a custom folder for kustomize resources. This folder must contain\na kustomization.yaml file.",
                    "nullable": true,
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "name": {
                "description": "Name of target. This value is largely for display and logging. If\nnot specified a default name of the format \"target000\" will be used",
                "type": "string"
              },
              "namespace": {
                "description": "TargetNamespace if present will assign all resource to this\nnamespace and if any cluster scoped resource exists the deployment\nwill fail.",
                "nullable": true,
                "type": "string"
              },
              "namespaceAnnotations": {
                "additionalProperties": {
                  "type": "string"
                },
                "description": "NamespaceAnnotations are annotations that will be appended to the namespace created by Fleet.",
                "nullable": true,
                "type": "object"
              },
              "namespaceLabels": {
                "additionalProperties": {
                  "type": "string"
                },
                "description": "NamespaceLabels are labels that will be appended to the namespace created by Fleet.",
                "nullable": true,
                "type": "object"
              },
              "serviceAccount": {
                "description": "ServiceAccount which will be used to perform this deployment.",
                "nullable": true,
                "type": "string"
              },
              "yaml": {
                "description": "YAML options, if using raw YAML these are names that map to\noverlays/{name} files that will be used to replace or patch a resource.",
                "nullable": true,
                "properties": {
                  "overlays": {
                    "description": "Overlays is a list of names that maps to folders in \"overlays/\".\nIf you wish to customize the file ./subdir/resource.yaml then a file\n./overlays/myoverlay/subdir/resource.yaml will replace the base\nfile.\nA file named ./overlays/myoverlay/subdir/resource_patch.yaml will patch the base file.",
                    "items": {
                      "type": "string"
                    },
                    "nullable": true,
                    "type": "array"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "valuesHash": {
          "description": "ValuesHash is the hash of the values used to render the Helm chart.\nIt changes when any values from fleet.yaml, values from ValuesFiles or values from target\ncustomization changes.",
          "type": "string"
        },
        "yaml": {
          "description": "YAML options, if using raw YAML these are names that map to\noverlays/{name} files that will be used to replace or patch a resource.",
          "nullable": true,
          "properties": {
            "overlays": {
              "description": "Overlays is a list of names that maps to folders in \"overlays/\".\nIf you wish to customize the file ./subdir/resource.yaml then a file\n./overlays/myoverlay/subdir/resource.yaml will replace the base\nfile.\nA file named ./overlays/myoverlay/subdir/resource_patch.yaml will patch the base file.",
              "items": {
                "type": "string"
              },
              "nullable": true,
              "type": "array"
            }
          },
          "type": "object"
        }
      },
      "type": "object"
    },
    "status": {
      "properties": {
        "conditions": {
          "description": "Conditions is a list of Wrangler conditions that describe the state\nof the bundle.",
          "items": {
            "properties": {
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.",
                "type": "string"
              },
              "lastUpdateTime": {
                "description": "The last time this condition was updated.",
                "type": "string"
              },
              "message": {
                "description": "Human-readable message indicating details about last transition",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type of cluster condition.",
                "type": "string"
              }
            },
            "required": [
              "status",
              "type"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "display": {
          "description": "Display contains the number of ready, desiredready clusters and a\nsummary state for the bundle's resources.",
          "properties": {
            "readyClusters": {
              "description": "ReadyClusters is a string in the form \"%d/%d\", that describes the\nnumber of clusters that are ready vs. the number of clusters desired\nto be ready.",
              "nullable": true,
              "type": "string"
            },
            "state": {
              "description": "State is a summary state for the bundle, calculated over the non-ready resources.",
              "nullable": true,
              "type": "string"
            }
          },
          "type": "object"
        },
        "maxNew": {
          "description": "MaxNew is always 50. A bundle change can only stage 50\nbundledeployments at a time.",
          "type": "integer"
        },
        "maxUnavailable": {
          "description": "MaxUnavailable is the maximum number of unavailable deployments. See\nrollout configuration.",
          "type": "integer"
        },
        "maxUnavailablePartitions": {
          "description": "MaxUnavailablePartitions is the maximum number of unavailable\npartitions. The rollout configuration defines a maximum number or\npercentage of unavailable partitions.",
          "type": "integer"
        },
        "newlyCreated": {
          "description": "NewlyCreated is the number of bundle deployments that have been created,\nnot updated.",
          "type": "integer"
        },
        "observedGeneration": {
          "description": "ObservedGeneration is the current generation of the bundle.",
          "format": "int64",
          "type": "integer"
        },
        "ociReference": {
          "description": "OCIReference is the OCI reference used to store contents, this is\nonly for informational purposes.",
          "type": "string"
        },
        "partitions": {
          "description": "PartitionStatus lists the status of each partition.",
          "items": {
            "description": "PartitionStatus is the status of a single rollout partition.",
            "properties": {
              "count": {
                "description": "Count is the number of clusters in the partition.",
                "type": "integer"
              },
              "maxUnavailable": {
                "description": "MaxUnavailable is the maximum number of unavailable clusters in the partition.",
                "type": "integer"
              },
              "name": {
                "description": "Name is the name of the partition.",
                "nullable": true,
                "type": "string"
              },
              "summary": {
                "description": "Summary is a summary state for the partition, calculated over its non-ready resources.",
                "properties": {
                  "desiredReady": {
                    "description": "DesiredReady is the number of bundle deployments that should be\nready.",
                    "type": "integer"
                  },
                  "errApplied": {
                    "description": "ErrApplied is the number of bundle deployments that have been synced\nfrom the Fleet controller and the downstream cluster, but with some\nerrors when deploying the bundle.",
                    "type": "integer"
                  },
                  "modified": {
                    "description": "Modified is the number of bundle deployments that have been deployed\nand for which all resources are ready, but where some changes from the\nGit repository have not yet been synced.",
                    "type": "integer"
                  },
                  "nonReadyResources": {
                    "description": "NonReadyClusters is a list of states, which is filled for a bundle\nthat is not ready.",
                    "items": {
                      "description": "NonReadyResource contains information about a bundle that is not ready for a\ngiven state like \"ErrApplied\". It contains a list of non-ready or modified\nresources and their states.",
                      "properties": {
                        "bundleState": {
                          "description": "State is the state of the resource, like e.g. \"NotReady\" or \"ErrApplied\".",
                          "nullable": true,
                          "type": "string"
                        },
                        "message": {
                          "description": "Message contains information why the bundle is not ready.",
                          "nullable": true,
                          "type": "string"
                        },
                        "modifiedStatus": {
                          "description": "ModifiedStatus lists the state for each modified resource.",
                          "items": {
                            "description": "ModifiedStatus is used to report the status of a resource that is modified.\nIt indicates if the modification was a create, a delete or a patch.",
                            "properties": {
                              "apiVersion": {
                                "nullable": true,
                                "type": "string"
                              },
                              "delete": {
                                "type": "boolean"
                              },
                              "exist": {
                                "description": "Exist is true if the resource exists but is not owned by us. This can happen if a resource was adopted by another bundle whereas the first bundle still exists and due to that reports that it does not own it.",
                                "type": "boolean"
                              },
                              "kind": {
                                "nullable": true,
                                "type": "string"
                              },
                              "missing": {
                                "type": "boolean"
                              },
                              "name": {
                                "nullable": true,
                                "type": "string"
                              },
                              "namespace": {
                                "nullable": true,
                                "type": "string"
                              },
                              "patch": {
                                "nullable": true,
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "nullable": true,
                          "type": "array"
                        },
                        "name": {
                          "description": "Name is the name of the resource.",
                          "nullable": true,
                          "type": "string"
                        },
                        "nonReadyStatus": {
                          "description": "NonReadyStatus lists the state for each non-ready resource.",
                          "items": {
                            "description": "NonReadyStatus is used to report the status of a resource that is not ready. It includes a summary.",
                            "properties": {
                              "apiVersion": {
                                "nullable": true,
                                "type": "string"
                              },
                              "kind": {
                                "nullable": true,
                                "type": "string"
                              },
                              "name": {
                                "nullable": true,
                                "type": "string"
                              },
                              "namespace": {
                                "nullable": true,
                                "type": "string"
                              },
                              "summary": {
                                "properties": {
                                  "error": {
                                    "type": "boolean"
                                  },
                                  "message": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "state": {
                                    "type": "string"
                                  },
                                  "transitioning": {
                                    "type": "boolean"
                                  }
                                },
                                "type": "object"
                              },
                              "uid": {
                                "description": "UID is a type that holds unique ID values, including UUIDs.  Because we\ndon't ONLY use UUIDs, this is an alias to string.  Being a type captures\nintent and helps make sure that UIDs and names do not get conflated.",
                                "nullable": true,
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "nullable": true,
                          "type": "array"
                        }
                      },
                      "type": "object"
                    },
                    "nullable": true,
                    "type": "array"
                  },
                  "notReady": {
                    "description": "NotReady is the number of bundle deployments that have been deployed\nwhere some resources are not ready.",
                    "type": "integer"
                  },
                  "outOfSync": {
                    "description": "OutOfSync is the number of bundle deployments that have been synced\nfrom Fleet controller, but not yet by the downstream agent.",
                    "type": "integer"
                  },
                  "pending": {
                    "description": "Pending is the number of bundle deployments that are being processed\nby Fleet controller.",
                    "type": "integer"
                  },
                  "ready": {
                    "description": "Ready is the number of bundle deployments that have been deployed\nwhere all resources are ready.",
                    "type": "integer"
                  },
                  "waitApplied": {
                    "description": "WaitApplied is the number of bundle deployments that have been\nsynced from Fleet controller and downstream cluster, but are waiting\nto be deployed.",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "unavailable": {
                "description": "Unavailable is the number of unavailable clusters in the partition.",
                "type": "integer"
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "resourceKey": {
          "description": "ResourceKey lists resources, which will likely be deployed. The\nactual list of resources on a cluster might differ, depending on the\nhelm chart, value templating, etc.. (deprecated to reduce bundle size)",
          "items": {
            "description": "ResourceKey lists resources, which will likely be deployed.",
            "properties": {
              "apiVersion": {
                "description": "APIVersion is the k8s api version of the resource.",
                "nullable": true,
                "type": "string"
              },
              "kind": {
                "description": "Kind is the k8s api kind of the resource.",
                "nullable": true,
                "type": "string"
              },
              "name": {
                "description": "Name is the name of the resource.",
                "nullable": true,
                "type": "string"
              },
              "namespace": {
                "description": "Namespace is the namespace of the resource.",
                "nullable": true,
                "type": "string"
              }
            },
            "type": "object"
          },
          "nullable": true,
          "type": "array"
        },
        "resourcesSha256Sum": {
          "description": "ResourcesSHA256Sum corresponds to the JSON serialization of the .Spec.Resources field",
          "type": "string"
        },
        "summary": {
          "description": "Summary contains the number of bundle deployments in each state and\na list of non-ready resources.",
          "properties": {
            "desiredReady": {
              "description": "DesiredReady is the number of bundle deployments that should be\nready.",
              "type": "integer"
            },
            "errApplied": {
              "description": "ErrApplied is the number of bundle deployments that have been synced\nfrom the Fleet controller and the downstream cluster, but with some\nerrors when deploying the bundle.",
              "type": "integer"
            },
            "modified": {
              "description": "Modified is the number of bundle deployments that have been deployed\nand for which all resources are ready, but where some changes from the\nGit repository have not yet been synced.",
              "type": "integer"
            },
            "nonReadyResources": {
              "description": "NonReadyClusters is a list of states, which is filled for a bundle\nthat is not ready.",
              "items": {
                "description": "NonReadyResource contains information about a bundle that is not ready for a\ngiven state like \"ErrApplied\". It contains a list of non-ready or modified\nresources and their states.",
                "properties": {
                  "bundleState": {
                    "description": "State is the state of the resource, like e.g. \"NotReady\" or \"ErrApplied\".",
                    "nullable": true,
                    "type": "string"
                  },
                  "message": {
                    "description": "Message contains information why the bundle is not ready.",
                    "nullable": true,
                    "type": "string"
                  },
                  "modifiedStatus": {
                    "description": "ModifiedStatus lists the state for each modified resource.",
                    "items": {
                      "description": "ModifiedStatus is used to report the status of a resource that is modified.\nIt indicates if the modification was a create, a delete or a patch.",
                      "properties": {
                        "apiVersion": {
                          "nullable": true,
                          "type": "string"
                        },
                        "delete": {
                          "type": "boolean"
                        },
                        "exist": {
                          "description": "Exist is true if the resource exists but is not owned by us. This can happen if a resource was adopted by another bundle whereas the first bundle still exists and due to that reports that it does not own it.",
                          "type": "boolean"
                        },
                        "kind": {
                          "nullable": true,
                          "type": "string"
                        },
                        "missing": {
                          "type": "boolean"
                        },
                        "name": {
                          "nullable": true,
                          "type": "string"
                        },
                        "namespace": {
                          "nullable": true,
                          "type": "string"
                        },
                        "patch": {
                          "nullable": true,
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "nullable": true,
                    "type": "array"
                  },
                  "name": {
                    "description": "Name is the name of the resource.",
                    "nullable": true,
                    "type": "string"
                  },
                  "nonReadyStatus": {
                    "description": "NonReadyStatus lists the state for each non-ready resource.",
                    "items": {
                      "description": "NonReadyStatus is used to report the status of a resource that is not ready. It includes a summary.",
                      "properties": {
                        "apiVersion": {
                          "nullable": true,
                          "type": "string"
                        },
                        "kind": {
                          "nullable": true,
                          "type": "string"
                        },
                        "name": {
                          "nullable": true,
                          "type": "string"
                        },
                        "namespace": {
                          "nullable": true,
                          "type": "string"
                        },
                        "summary": {
                          "properties": {
                            "error": {
                              "type": "boolean"
                            },
                            "message": {
                              "items": {
                                "type": "string"
                              },
                              "type": "array"
                            },
                            "state": {
                              "type": "string"
                            },
                            "transitioning": {
                              "type": "boolean"
                            }
                          },
                          "type": "object"
                        },
                        "uid": {
                          "description": "UID is a type that holds unique ID values, including UUIDs.  Because we\ndon't ONLY use UUIDs, this is an alias to string.  Being a type captures\nintent and helps make sure that UIDs and names do not get conflated.",
                          "nullable": true,
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "nullable": true,
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "nullable": true,
              "type": "array"
            },
            "notReady": {
              "description": "NotReady is the number of bundle deployments that have been deployed\nwhere some resources are not ready.",
              "type": "integer"
            },
            "outOfSync": {
              "description": "OutOfSync is the number of bundle deployments that have been synced\nfrom Fleet controller, but not yet by the downstream agent.",
              "type": "integer"
            },
            "pending": {
              "description": "Pending is the number of bundle deployments that are being processed\nby Fleet controller.",
              "type": "integer"
            },
            "ready": {
              "description": "Ready is the number of bundle deployments that have been deployed\nwhere all resources are ready.",
              "type": "integer"
            },
            "waitApplied": {
              "description": "WaitApplied is the number of bundle deployments that have been\nsynced from Fleet controller and downstream cluster, but are waiting\nto be deployed.",
              "type": "integer"
            }
          },
          "type": "object"
        },
        "unavailable": {
          "description": "Unavailable is the number of bundle deployments that are not ready or\nwhere the AppliedDeploymentID in the status does not match the\nDeploymentID from the spec.",
          "type": "integer"
        },
        "unavailablePartitions": {
          "description": "UnavailablePartitions is the number of unavailable partitions.",
          "type": "integer"
        }
      },
      "type": "object"
    }
  },
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Bundle v1alpha1"
}