{
  "description": "HelmOp describes a helm chart information.\nThe resource contains the necessary information to deploy the chart to target clusters.",
  "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"
        },
        "helmSecretName": {
          "description": "HelmSecretName contains the auth secret with the credentials to access\na private Helm repository.",
          "nullable": true,
          "type": "string"
        },
        "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"
        },
        "insecureSkipTLSVerify": {
          "description": "InsecureSkipTLSverify will use insecure HTTPS to clone the helm app resource.",
          "type": "boolean"
        },
        "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"
        },
        "labels": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Labels are copied to the bundle and can be used in a\ndependsOn.selector.",
          "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"
        },
        "pollingInterval": {
          "description": "PollingInterval is how often to check the Helm repository for new updates.",
          "nullable": true,
          "type": "string"
        },
        "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 resource.",
          "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"
        },
        "desiredReadyClusters": {
          "description": "DesiredReadyClusters\tis the number of clusters that should be ready for bundles of this resource.",
          "type": "integer"
        },
        "display": {
          "description": "Display contains a human readable summary of the status.",
          "properties": {
            "error": {
              "description": "Error is true if a message is present.",
              "type": "boolean"
            },
            "message": {
              "description": "Message contains the relevant message from the deployment conditions.",
              "type": "string"
            },
            "readyBundleDeployments": {
              "description": "ReadyBundleDeployments is a string in the form \"%d/%d\", that describes the\nnumber of ready bundledeployments over the total number of bundledeployments.",
              "type": "string"
            },
            "state": {
              "description": "State is the state of the resource, e.g. \"GitUpdating\" or the maximal\nBundleState according to StateRank.",
              "type": "string"
            }
          },
          "type": "object"
        },
        "lastPollingTriggered": {
          "description": "LastPollingTime is the last time the polling check was triggered",
          "format": "date-time",
          "type": "string"
        },
        "perClusterResourceCounts": {
          "additionalProperties": {
            "description": "ResourceCounts contains the number of resources in each state.",
            "properties": {
              "desiredReady": {
                "description": "DesiredReady is the number of resources that should be ready.",
                "type": "integer"
              },
              "missing": {
                "description": "Missing is the number of missing resources.",
                "type": "integer"
              },
              "modified": {
                "description": "Modified is the number of resources that have been modified.",
                "type": "integer"
              },
              "notReady": {
                "description": "NotReady is the number of not ready resources. Resources are not\nready if they do not match any other state.",
                "type": "integer"
              },
              "orphaned": {
                "description": "Orphaned is the number of orphaned resources.",
                "type": "integer"
              },
              "ready": {
                "description": "Ready is the number of ready resources.",
                "type": "integer"
              },
              "unknown": {
                "description": "Unknown is the number of resources in an unknown state.",
                "type": "integer"
              },
              "waitApplied": {
                "description": "WaitApplied is the number of resources that are waiting to be applied.",
                "type": "integer"
              }
            },
            "type": "object"
          },
          "description": "PerClusterResourceCounts contains the number of resources in each state over all bundles, per cluster.",
          "type": "object"
        },
        "readyClusters": {
          "description": "ReadyClusters is the lowest number of clusters that are ready over\nall the bundles of this resource.",
          "type": "integer"
        },
        "resourceCounts": {
          "description": "ResourceCounts contains the number of resources in each state over all bundles.",
          "properties": {
            "desiredReady": {
              "description": "DesiredReady is the number of resources that should be ready.",
              "type": "integer"
            },
            "missing": {
              "description": "Missing is the number of missing resources.",
              "type": "integer"
            },
            "modified": {
              "description": "Modified is the number of resources that have been modified.",
              "type": "integer"
            },
            "notReady": {
              "description": "NotReady is the number of not ready resources. Resources are not\nready if they do not match any other state.",
              "type": "integer"
            },
            "orphaned": {
              "description": "Orphaned is the number of orphaned resources.",
              "type": "integer"
            },
            "ready": {
              "description": "Ready is the number of ready resources.",
              "type": "integer"
            },
            "unknown": {
              "description": "Unknown is the number of resources in an unknown state.",
              "type": "integer"
            },
            "waitApplied": {
              "description": "WaitApplied is the number of resources that are waiting to be applied.",
              "type": "integer"
            }
          },
          "type": "object"
        },
        "resources": {
          "description": "Resources contains metadata about the resources of each bundle.",
          "items": {
            "description": "Resource contains metadata about the resources of a bundle.",
            "properties": {
              "apiVersion": {
                "description": "APIVersion is the API version of the resource.",
                "nullable": true,
                "type": "string"
              },
              "error": {
                "description": "Error is true if any Error in the PerClusterState is true.",
                "type": "boolean"
              },
              "id": {
                "description": "ID is the name of the resource, e.g. \"namespace1/my-config\" or \"backingimagemanagers.storage.io\".",
                "nullable": true,
                "type": "string"
              },
              "incompleteState": {
                "description": "IncompleteState is true if a bundle summary has 10 or more non-ready\nresources or a non-ready resource has more 10 or more non-ready or\nmodified states.",
                "type": "boolean"
              },
              "kind": {
                "description": "Kind is the k8s kind of the resource.",
                "nullable": true,
                "type": "string"
              },
              "message": {
                "description": "Message is the first message from the PerClusterStates.",
                "nullable": true,
                "type": "string"
              },
              "name": {
                "description": "Name of the resource.",
                "nullable": true,
                "type": "string"
              },
              "namespace": {
                "description": "Namespace of the resource.",
                "nullable": true,
                "type": "string"
              },
              "perClusterState": {
                "description": "PerClusterState contains lists of cluster IDs for every State for this resource",
                "nullable": true,
                "properties": {
                  "missing": {
                    "description": "Missing is a list of cluster IDs for which this a resource is in Missing state",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "modified": {
                    "description": "Modified is a list of cluster IDs for which this a resource is in Modified state",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "notReady": {
                    "description": "NotReady is a list of cluster IDs for which this a resource is in NotReady state",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "orphaned": {
                    "description": "Orphaned is a list of cluster IDs for which this a resource is in Orphaned state",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "pending": {
                    "description": "Pending is a list of cluster IDs for which this a resource is in Pending state",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "ready": {
                    "description": "Ready is a list of cluster IDs for which this a resource is in Ready state",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "unknown": {
                    "description": "Unknown is a list of cluster IDs for which this a resource is in Unknown state",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "waitApplied": {
                    "description": "WaitApplied is a list of cluster IDs for which this a resource is in WaitApplied state",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "state": {
                "description": "State is the state of the resource, e.g. \"Unknown\", \"WaitApplied\", \"ErrApplied\" or \"Ready\".",
                "type": "string"
              },
              "transitioning": {
                "description": "Transitioning is true if any Transitioning in the PerClusterState is true.",
                "type": "boolean"
              },
              "type": {
                "description": "Type is the type of the resource, e.g. \"apiextensions.k8s.io.customresourcedefinition\" or \"configmap\".",
                "type": "string"
              }
            },
            "required": [
              "perClusterState"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "summary": {
          "description": "Summary contains the number of bundle deployments in each state and a 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"
        },
        "version": {
          "description": "Version installed for the helm chart.\nWhen using * or empty version in the spec we get the latest version from\nthe helm repository when possible",
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "HelmOp v1alpha1"
}