--- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafanaalertrulegroups.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafanaalertrulegroups.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaAlertRuleGroup listKind: GrafanaAlertRuleGroupList plural: grafanaalertrulegroups singular: grafanaalertrulegroup scope: Namespaced versions: - additionalPrinterColumns: - format: date-time jsonPath: .status.lastResync name: Last resync type: date - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: GrafanaAlertRuleGroup is the Schema for the grafanaalertrulegroups API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaAlertRuleGroupSpec defines the desired state of GrafanaAlertRuleGroup properties: allowCrossNamespaceImport: default: false description: Allow the Operator to match this resource with Grafanas outside the current namespace type: boolean editable: description: Whether to enable or disable editing of the alert rule group in Grafana UI type: boolean x-kubernetes-validations: - message: Value is immutable rule: self == oldSelf folderRef: description: Match GrafanaFolders CRs to infer the uid type: string x-kubernetes-validations: - message: Value is immutable rule: self == oldSelf folderUID: description: |- UID of the folder containing this rule group Overrides the FolderSelector type: string x-kubernetes-validations: - message: Value is immutable rule: self == oldSelf instanceSelector: description: Selects Grafana instances for import 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic x-kubernetes-validations: - message: spec.instanceSelector is immutable rule: self == oldSelf interval: format: duration pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string name: description: Name of the alert rule group. If not specified, the resource name will be used. type: string resyncPeriod: default: 10m0s description: How often the resource is synced, defaults to 10m0s if not set pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string rules: items: description: AlertRule defines a specific rule to be evaluated. It is based on the upstream model with some k8s specific type mappings properties: annotations: additionalProperties: type: string type: object condition: type: string data: items: properties: datasourceUid: description: Grafana data source unique identifier; it should be '__expr__' for a Server Side Expression operation. type: string model: description: JSON is the raw JSON query and includes the above properties as well as custom properties. x-kubernetes-preserve-unknown-fields: true queryType: description: |- QueryType is an optional identifier for the type of query. It can be used to distinguish different types of queries. type: string refId: description: RefID is the unique identifier of the query, set by the frontend call. type: string relativeTimeRange: description: relative time range properties: from: description: from format: int64 type: integer to: description: to format: int64 type: integer type: object type: object type: array execErrState: enum: - OK - Alerting - Error - KeepLast type: string for: default: 0s format: duration pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string isPaused: type: boolean keepFiringFor: format: duration pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string labels: additionalProperties: type: string type: object missingSeriesEvalsToResolve: description: The number of missing series evaluations that must occur before the rule is considered to be resolved. format: int64 type: integer noDataState: enum: - Alerting - NoData - OK - KeepLast type: string notificationSettings: properties: group_by: items: type: string type: array group_interval: type: string group_wait: type: string mute_time_intervals: items: type: string type: array receiver: type: string repeat_interval: type: string required: - receiver type: object record: properties: from: type: string metric: type: string required: - from - metric type: object title: example: Always firing maxLength: 190 minLength: 1 type: string uid: description: UID of the alert rule. Can be any string consisting of alphanumeric characters, - and _ with a maximum length of 40 maxLength: 40 pattern: ^[a-zA-Z0-9-_]+$ type: string required: - condition - data - execErrState - for - noDataState - title - uid type: object minItems: 1 type: array suspend: description: Suspend pauses synchronizing attempts and tells the operator to ignore changes type: boolean required: - instanceSelector - interval - rules type: object x-kubernetes-validations: - message: Only one of FolderUID or FolderRef can be set and one must be defined rule: (has(self.folderUID) && !(has(self.folderRef))) || (has(self.folderRef) && !(has(self.folderUID))) - message: spec.editable is immutable rule: ((!has(oldSelf.editable) && !has(self.editable)) || (has(oldSelf.editable) && has(self.editable))) - message: spec.folderUID is immutable rule: ((!has(oldSelf.folderUID) && !has(self.folderUID)) || (has(oldSelf.folderUID) && has(self.folderUID))) - message: spec.folderRef is immutable rule: ((!has(oldSelf.folderRef) && !has(self.folderRef)) || (has(oldSelf.folderRef) && has(self.folderRef))) - message: disabling spec.allowCrossNamespaceImport requires a recreate to ensure desired state rule: '!oldSelf.allowCrossNamespaceImport || (oldSelf.allowCrossNamespaceImport && self.allowCrossNamespaceImport)' status: description: The most recent observed state of a Grafana resource properties: conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafanacontactpoints.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafanacontactpoints.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaContactPoint listKind: GrafanaContactPointList plural: grafanacontactpoints singular: grafanacontactpoint scope: Namespaced versions: - additionalPrinterColumns: - format: date-time jsonPath: .status.lastResync name: Last resync type: date - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: GrafanaContactPoint is the Schema for the grafanacontactpoints API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaContactPointSpec defines the desired state of GrafanaContactPoint properties: allowCrossNamespaceImport: default: false description: Allow the Operator to match this resource with Grafanas outside the current namespace type: boolean disableResolveMessage: type: boolean instanceSelector: description: Selects Grafana instances for import 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic x-kubernetes-validations: - message: spec.instanceSelector is immutable rule: self == oldSelf name: type: string resyncPeriod: default: 10m0s description: How often the resource is synced, defaults to 10m0s if not set pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string settings: x-kubernetes-preserve-unknown-fields: true suspend: description: Suspend pauses synchronizing attempts and tells the operator to ignore changes type: boolean type: minLength: 1 type: string uid: description: Manually specify the UID the Contact Point is created with. Can be any string consisting of alphanumeric characters, - and _ with a maximum length of 40 maxLength: 40 pattern: ^[a-zA-Z0-9-_]+$ type: string x-kubernetes-validations: - message: spec.uid is immutable rule: self == oldSelf valuesFrom: items: properties: targetPath: type: string valueFrom: properties: configMapKeyRef: description: Selects a key of a ConfigMap. properties: key: description: The key to select. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the ConfigMap or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a Secret. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object x-kubernetes-validations: - message: Either configMapKeyRef or secretKeyRef must be set rule: (has(self.configMapKeyRef) && !has(self.secretKeyRef)) || (!has(self.configMapKeyRef) && has(self.secretKeyRef)) required: - targetPath - valueFrom type: object maxItems: 99 type: array required: - instanceSelector - name - settings - type type: object x-kubernetes-validations: - message: spec.uid is immutable rule: ((!has(oldSelf.uid) && !has(self.uid)) || (has(oldSelf.uid) && has(self.uid))) - message: disabling spec.allowCrossNamespaceImport requires a recreate to ensure desired state rule: '!oldSelf.allowCrossNamespaceImport || (oldSelf.allowCrossNamespaceImport && self.allowCrossNamespaceImport)' status: description: The most recent observed state of a Grafana resource properties: conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafanadashboards.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafanadashboards.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaDashboard listKind: GrafanaDashboardList plural: grafanadashboards singular: grafanadashboard scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.NoMatchingInstances name: No matching instances type: boolean - format: date-time jsonPath: .status.lastResync name: Last resync type: date - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: GrafanaDashboard is the Schema for the grafanadashboards API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaDashboardSpec defines the desired state of GrafanaDashboard properties: allowCrossNamespaceImport: default: false description: Allow the Operator to match this resource with Grafanas outside the current namespace type: boolean configMapRef: description: model from configmap properties: key: description: The key to select. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the ConfigMap or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic contentCacheDuration: description: Cache duration for models fetched from URLs type: string datasources: description: maps required data sources to existing ones items: description: |- GrafanaResourceDatasource is used to set the datasource name of any templated datasources in content definitions (e.g., dashboard JSON). properties: datasourceName: type: string inputName: type: string required: - datasourceName - inputName type: object type: array envFrom: description: environments variables from secrets or config maps items: properties: configMapKeyRef: description: Selects a key of a ConfigMap. properties: key: description: The key to select. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the ConfigMap or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a Secret. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object type: array envs: description: environments variables as a map items: properties: name: type: string value: description: Inline env value type: string valueFrom: description: Reference on value source, might be the reference on a secret or config map properties: configMapKeyRef: description: Selects a key of a ConfigMap. properties: key: description: The key to select. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the ConfigMap or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a Secret. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object required: - name type: object type: array folder: description: folder assignment for dashboard type: string folderRef: description: Name of a `GrafanaFolder` resource in the same namespace type: string folderUID: description: UID of the target folder for this dashboard type: string grafanaCom: description: grafana.com/dashboards properties: id: type: integer revision: type: integer required: - id type: object gzipJson: description: GzipJson the model's JSON compressed with Gzip. Base64-encoded when in YAML. format: byte type: string instanceSelector: description: Selects Grafana instances for import 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic x-kubernetes-validations: - message: spec.instanceSelector is immutable rule: self == oldSelf json: description: model json type: string jsonnet: description: Jsonnet type: string jsonnetLib: description: Jsonnet project build properties: fileName: type: string gzipJsonnetProject: format: byte type: string jPath: items: type: string type: array required: - fileName - gzipJsonnetProject type: object plugins: description: plugins items: properties: name: minLength: 1 type: string version: pattern: ^((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?|latest)$ type: string required: - name - version type: object type: array resyncPeriod: default: 10m0s description: How often the resource is synced, defaults to 10m0s if not set pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string suspend: description: Suspend pauses synchronizing attempts and tells the operator to ignore changes type: boolean uid: description: |- Manually specify the uid, overwrites uids already present in the json model. Can be any string consisting of alphanumeric characters, - and _ with a maximum length of 40. maxLength: 40 pattern: ^[a-zA-Z0-9-_]+$ type: string x-kubernetes-validations: - message: spec.uid is immutable rule: self == oldSelf url: description: model url type: string urlAuthorization: description: authorization options for model from url properties: basicAuth: properties: password: description: SecretKeySelector selects a key of a Secret. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic username: description: SecretKeySelector selects a key of a Secret. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object type: object required: - instanceSelector type: object x-kubernetes-validations: - message: Only one of folderUID or folderRef can be declared at the same time rule: (has(self.folderUID) && !(has(self.folderRef))) || (has(self.folderRef) && !(has(self.folderUID))) || !(has(self.folderRef) && (has(self.folderUID))) - message: folder field cannot be set when folderUID or folderRef is already declared rule: (has(self.folder) && !(has(self.folderRef) || has(self.folderUID))) || !(has(self.folder)) - message: spec.uid is immutable rule: ((!has(oldSelf.uid) && !has(self.uid)) || (has(oldSelf.uid) && has(self.uid))) - message: disabling spec.allowCrossNamespaceImport requires a recreate to ensure desired state rule: '!oldSelf.allowCrossNamespaceImport || (oldSelf.allowCrossNamespaceImport && self.allowCrossNamespaceImport)' status: description: GrafanaDashboardStatus defines the observed state of GrafanaDashboard properties: NoMatchingInstances: description: The dashboard instanceSelector can't find matching grafana instances type: boolean conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array contentCache: format: byte type: string contentTimestamp: format: date-time type: string contentUrl: type: string hash: type: string lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string uid: type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafanadatasources.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafanadatasources.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaDatasource listKind: GrafanaDatasourceList plural: grafanadatasources singular: grafanadatasource scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.NoMatchingInstances name: No matching instances type: boolean - format: date-time jsonPath: .status.lastResync name: Last resync type: date - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: GrafanaDatasource is the Schema for the grafanadatasources API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaDatasourceSpec defines the desired state of GrafanaDatasource properties: allowCrossNamespaceImport: default: false description: Allow the Operator to match this resource with Grafanas outside the current namespace type: boolean datasource: properties: access: type: string basicAuth: type: boolean basicAuthUser: type: string database: type: string editable: description: Whether to enable/disable editing of the datasource in Grafana UI type: boolean isDefault: type: boolean jsonData: type: object x-kubernetes-preserve-unknown-fields: true name: type: string orgId: description: Deprecated field, it has no effect format: int64 type: integer secureJsonData: type: object x-kubernetes-preserve-unknown-fields: true type: type: string uid: description: Deprecated field, use spec.uid instead type: string url: type: string user: type: string type: object instanceSelector: description: Selects Grafana instances for import 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic x-kubernetes-validations: - message: spec.instanceSelector is immutable rule: self == oldSelf plugins: description: plugins items: properties: name: minLength: 1 type: string version: pattern: ^((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?|latest)$ type: string required: - name - version type: object type: array resyncPeriod: default: 10m0s description: How often the resource is synced, defaults to 10m0s if not set pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string suspend: description: Suspend pauses synchronizing attempts and tells the operator to ignore changes type: boolean uid: description: |- The UID, for the datasource, fallback to the deprecated spec.datasource.uid and metadata.uid. Can be any string consisting of alphanumeric characters, - and _ with a maximum length of 40 +optional maxLength: 40 pattern: ^[a-zA-Z0-9-_]+$ type: string x-kubernetes-validations: - message: spec.uid is immutable rule: self == oldSelf valuesFrom: description: environments variables from secrets or config maps items: properties: targetPath: type: string valueFrom: properties: configMapKeyRef: description: Selects a key of a ConfigMap. properties: key: description: The key to select. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the ConfigMap or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a Secret. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object x-kubernetes-validations: - message: Either configMapKeyRef or secretKeyRef must be set rule: (has(self.configMapKeyRef) && !has(self.secretKeyRef)) || (!has(self.configMapKeyRef) && has(self.secretKeyRef)) required: - targetPath - valueFrom type: object maxItems: 99 type: array required: - datasource - instanceSelector type: object x-kubernetes-validations: - message: spec.uid is immutable rule: ((!has(oldSelf.uid) && !has(self.uid)) || (has(oldSelf.uid) && has(self.uid))) - message: disabling spec.allowCrossNamespaceImport requires a recreate to ensure desired state rule: '!oldSelf.allowCrossNamespaceImport || (oldSelf.allowCrossNamespaceImport && self.allowCrossNamespaceImport)' status: description: GrafanaDatasourceStatus defines the observed state of GrafanaDatasource properties: NoMatchingInstances: description: The datasource instanceSelector can't find matching grafana instances type: boolean conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array hash: type: string lastMessage: description: 'Deprecated: Check status.conditions or operator logs' type: string lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string uid: type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafanafolders.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafanafolders.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaFolder listKind: GrafanaFolderList plural: grafanafolders singular: grafanafolder scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.NoMatchingInstances name: No matching instances type: boolean - format: date-time jsonPath: .status.lastResync name: Last resync type: date - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: GrafanaFolder is the Schema for the grafanafolders API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaFolderSpec defines the desired state of GrafanaFolder properties: allowCrossNamespaceImport: default: false description: Allow the Operator to match this resource with Grafanas outside the current namespace type: boolean instanceSelector: description: Selects Grafana instances for import 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic x-kubernetes-validations: - message: spec.instanceSelector is immutable rule: self == oldSelf parentFolderRef: description: Reference to an existing GrafanaFolder CR in the same namespace type: string parentFolderUID: description: UID of the folder in which the current folder should be created type: string permissions: description: Raw json with folder permissions, potentially exported from Grafana type: string resyncPeriod: default: 10m0s description: How often the resource is synced, defaults to 10m0s if not set pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string suspend: description: Suspend pauses synchronizing attempts and tells the operator to ignore changes type: boolean title: description: Display name of the folder in Grafana type: string uid: description: Manually specify the UID the Folder is created with. Can be any string consisting of alphanumeric characters, - and _ with a maximum length of 40 maxLength: 40 pattern: ^[a-zA-Z0-9-_]+$ type: string x-kubernetes-validations: - message: spec.uid is immutable rule: self == oldSelf required: - instanceSelector type: object x-kubernetes-validations: - message: Only one of parentFolderUID or parentFolderRef can be set rule: (has(self.parentFolderUID) && !(has(self.parentFolderRef))) || (has(self.parentFolderRef) && !(has(self.parentFolderUID))) || !(has(self.parentFolderRef) && (has(self.parentFolderUID))) - message: spec.uid is immutable rule: ((!has(oldSelf.uid) && !has(self.uid)) || (has(oldSelf.uid) && has(self.uid))) - message: disabling spec.allowCrossNamespaceImport requires a recreate to ensure desired state rule: '!oldSelf.allowCrossNamespaceImport || (oldSelf.allowCrossNamespaceImport && self.allowCrossNamespaceImport)' status: description: GrafanaFolderStatus defines the observed state of GrafanaFolder properties: NoMatchingInstances: description: The folder instanceSelector can't find matching grafana instances type: boolean conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array hash: type: string lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafanalibrarypanels.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafanalibrarypanels.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaLibraryPanel listKind: GrafanaLibraryPanelList plural: grafanalibrarypanels singular: grafanalibrarypanel scope: Namespaced versions: - additionalPrinterColumns: - format: date-time jsonPath: .status.lastResync name: Last resync type: date - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: GrafanaLibraryPanel is the Schema for the grafanalibrarypanels API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaLibraryPanelSpec defines the desired state of GrafanaLibraryPanel properties: allowCrossNamespaceImport: default: false description: Allow the Operator to match this resource with Grafanas outside the current namespace type: boolean configMapRef: description: model from configmap properties: key: description: The key to select. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the ConfigMap or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic contentCacheDuration: description: Cache duration for models fetched from URLs type: string datasources: description: maps required data sources to existing ones items: description: |- GrafanaResourceDatasource is used to set the datasource name of any templated datasources in content definitions (e.g., dashboard JSON). properties: datasourceName: type: string inputName: type: string required: - datasourceName - inputName type: object type: array envFrom: description: environments variables from secrets or config maps items: properties: configMapKeyRef: description: Selects a key of a ConfigMap. properties: key: description: The key to select. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the ConfigMap or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a Secret. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object type: array envs: description: environments variables as a map items: properties: name: type: string value: description: Inline env value type: string valueFrom: description: Reference on value source, might be the reference on a secret or config map properties: configMapKeyRef: description: Selects a key of a ConfigMap. properties: key: description: The key to select. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the ConfigMap or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a Secret. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object required: - name type: object type: array folderRef: description: Name of a `GrafanaFolder` resource in the same namespace type: string folderUID: description: UID of the target folder for this dashboard type: string grafanaCom: description: grafana.com/dashboards properties: id: type: integer revision: type: integer required: - id type: object gzipJson: description: GzipJson the model's JSON compressed with Gzip. Base64-encoded when in YAML. format: byte type: string instanceSelector: description: Selects Grafana instances for import 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic x-kubernetes-validations: - message: spec.instanceSelector is immutable rule: self == oldSelf json: description: model json type: string jsonnet: description: Jsonnet type: string jsonnetLib: description: Jsonnet project build properties: fileName: type: string gzipJsonnetProject: format: byte type: string jPath: items: type: string type: array required: - fileName - gzipJsonnetProject type: object plugins: description: plugins items: properties: name: minLength: 1 type: string version: pattern: ^((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?|latest)$ type: string required: - name - version type: object type: array resyncPeriod: default: 10m0s description: How often the resource is synced, defaults to 10m0s if not set pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string suspend: description: Suspend pauses synchronizing attempts and tells the operator to ignore changes type: boolean uid: description: |- Manually specify the uid, overwrites uids already present in the json model. Can be any string consisting of alphanumeric characters, - and _ with a maximum length of 40. maxLength: 40 pattern: ^[a-zA-Z0-9-_]+$ type: string x-kubernetes-validations: - message: spec.uid is immutable rule: self == oldSelf url: description: model url type: string urlAuthorization: description: authorization options for model from url properties: basicAuth: properties: password: description: SecretKeySelector selects a key of a Secret. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic username: description: SecretKeySelector selects a key of a Secret. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object type: object required: - instanceSelector type: object x-kubernetes-validations: - message: Only one of folderUID or folderRef can be declared at the same time rule: (has(self.folderUID) && !(has(self.folderRef))) || (has(self.folderRef) && !(has(self.folderUID))) || !(has(self.folderRef) && (has(self.folderUID))) - message: spec.uid is immutable rule: ((!has(oldSelf.uid) && !has(self.uid)) || (has(oldSelf.uid) && has(self.uid))) - message: disabling spec.allowCrossNamespaceImport requires a recreate to ensure desired state rule: '!oldSelf.allowCrossNamespaceImport || (oldSelf.allowCrossNamespaceImport && self.allowCrossNamespaceImport)' status: description: GrafanaLibraryPanelStatus defines the observed state of GrafanaLibraryPanel properties: conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array contentCache: format: byte type: string contentTimestamp: format: date-time type: string contentUrl: type: string hash: type: string lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string uid: type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafanamutetimings.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafanamutetimings.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaMuteTiming listKind: GrafanaMuteTimingList plural: grafanamutetimings singular: grafanamutetiming scope: Namespaced versions: - additionalPrinterColumns: - format: date-time jsonPath: .status.lastResync name: Last resync type: date - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: GrafanaMuteTiming is the Schema for the GrafanaMuteTiming API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaMuteTimingSpec defines the desired state of GrafanaMuteTiming properties: allowCrossNamespaceImport: default: false description: Allow the Operator to match this resource with Grafanas outside the current namespace type: boolean editable: default: true description: Whether to enable or disable editing of the mute timing in Grafana UI type: boolean x-kubernetes-validations: - message: spec.editable is immutable rule: self == oldSelf instanceSelector: description: Selects Grafana instances for import 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic x-kubernetes-validations: - message: spec.instanceSelector is immutable rule: self == oldSelf name: description: A unique name for the mute timing type: string resyncPeriod: default: 10m0s description: How often the resource is synced, defaults to 10m0s if not set pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string suspend: description: Suspend pauses synchronizing attempts and tells the operator to ignore changes type: boolean time_intervals: description: Time intervals for muting items: properties: days_of_month: description: |- The date 1-31 of a month. Negative values can also be used to represent days that begin at the end of the month. For example: -1 for the last day of the month. items: type: string type: array location: description: Depending on the location, the time range is displayed in local time. type: string months: description: |- The months of the year in either numerical or the full calendar month. For example: 1, may. items: type: string type: array times: description: The time inclusive of the start and exclusive of the end time (in UTC if no location has been selected, otherwise local time). items: properties: end_time: description: end time type: string start_time: description: start time type: string required: - end_time - start_time type: object type: array weekdays: description: |- The day or range of days of the week. For example: monday, thursday items: type: string type: array years: description: |- The year or years for the interval. For example: 2021 items: type: string type: array type: object minItems: 1 type: array required: - instanceSelector - name - time_intervals type: object x-kubernetes-validations: - message: disabling spec.allowCrossNamespaceImport requires a recreate to ensure desired state rule: '!oldSelf.allowCrossNamespaceImport || (oldSelf.allowCrossNamespaceImport && self.allowCrossNamespaceImport)' status: description: The most recent observed state of a Grafana resource properties: conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafananotificationpolicies.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafananotificationpolicies.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaNotificationPolicy listKind: GrafanaNotificationPolicyList plural: grafananotificationpolicies singular: grafananotificationpolicy scope: Namespaced versions: - additionalPrinterColumns: - format: date-time jsonPath: .status.lastResync name: Last resync type: date - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: GrafanaNotificationPolicy is the Schema for the GrafanaNotificationPolicy API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaNotificationPolicySpec defines the desired state of GrafanaNotificationPolicy properties: allowCrossNamespaceImport: default: false description: Allow the Operator to match this resource with Grafanas outside the current namespace type: boolean editable: description: Whether to enable or disable editing of the notification policy in Grafana UI type: boolean x-kubernetes-validations: - message: Value is immutable rule: self == oldSelf instanceSelector: description: Selects Grafana instances for import 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic x-kubernetes-validations: - message: spec.instanceSelector is immutable rule: self == oldSelf resyncPeriod: default: 10m0s description: How often the resource is synced, defaults to 10m0s if not set pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string route: description: Routes for alerts to match against properties: continue: description: continue type: boolean group_by: description: group by items: type: string type: array group_interval: description: group interval type: string group_wait: description: group wait type: string match_re: additionalProperties: type: string description: match re type: object matchers: description: matchers items: properties: isEqual: description: is equal type: boolean isRegex: description: is regex type: boolean name: description: name type: string value: description: value type: string required: - isRegex - value type: object type: array mute_time_intervals: description: mute time intervals items: type: string type: array object_matchers: description: object matchers items: description: |- ObjectMatcher ObjectMatcher is a matcher that can be used to filter alerts. swagger:model ObjectMatcher items: type: string type: array type: array provenance: description: provenance type: string receiver: description: receiver minLength: 1 type: string repeat_interval: description: repeat interval type: string routeSelector: description: |- selects GrafanaNotificationPolicyRoutes to merge in when specified mutually exclusive with Routes 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic routes: description: routes, mutually exclusive with RouteSelector x-kubernetes-preserve-unknown-fields: true required: - receiver type: object suspend: description: Suspend pauses synchronizing attempts and tells the operator to ignore changes type: boolean required: - instanceSelector - route type: object x-kubernetes-validations: - message: spec.editable is immutable rule: ((!has(oldSelf.editable) && !has(self.editable)) || (has(oldSelf.editable) && has(self.editable))) - message: disabling spec.allowCrossNamespaceImport requires a recreate to ensure desired state rule: '!oldSelf.allowCrossNamespaceImport || (oldSelf.allowCrossNamespaceImport && self.allowCrossNamespaceImport)' status: description: GrafanaNotificationPolicyStatus defines the observed state of GrafanaNotificationPolicy properties: conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array discoveredRoutes: items: type: string type: array lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafananotificationpolicyroutes.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafananotificationpolicyroutes.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaNotificationPolicyRoute listKind: GrafanaNotificationPolicyRouteList plural: grafananotificationpolicyroutes singular: grafananotificationpolicyroute scope: Namespaced versions: - name: v1beta1 schema: openAPIV3Schema: description: GrafanaNotificationPolicyRoute is the Schema for the grafananotificationpolicyroutes API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaNotificationPolicyRouteSpec defines the desired state of GrafanaNotificationPolicyRoute properties: continue: description: continue type: boolean group_by: description: group by items: type: string type: array group_interval: description: group interval type: string group_wait: description: group wait type: string match_re: additionalProperties: type: string description: match re type: object matchers: description: matchers items: properties: isEqual: description: is equal type: boolean isRegex: description: is regex type: boolean name: description: name type: string value: description: value type: string required: - isRegex - value type: object type: array mute_time_intervals: description: mute time intervals items: type: string type: array object_matchers: description: object matchers items: description: |- ObjectMatcher ObjectMatcher is a matcher that can be used to filter alerts. swagger:model ObjectMatcher items: type: string type: array type: array provenance: description: provenance type: string receiver: description: receiver minLength: 1 type: string repeat_interval: description: repeat interval type: string routeSelector: description: |- selects GrafanaNotificationPolicyRoutes to merge in when specified mutually exclusive with Routes 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic routes: description: routes, mutually exclusive with RouteSelector x-kubernetes-preserve-unknown-fields: true required: - receiver type: object status: description: The most recent observed state of a Grafana resource properties: conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafananotificationtemplates.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafananotificationtemplates.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaNotificationTemplate listKind: GrafanaNotificationTemplateList plural: grafananotificationtemplates singular: grafananotificationtemplate scope: Namespaced versions: - additionalPrinterColumns: - format: date-time jsonPath: .status.lastResync name: Last resync type: date - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: GrafanaNotificationTemplate is the Schema for the GrafanaNotificationTemplate API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaNotificationTemplateSpec defines the desired state of GrafanaNotificationTemplate properties: allowCrossNamespaceImport: default: false description: Allow the Operator to match this resource with Grafanas outside the current namespace type: boolean editable: description: Whether to enable or disable editing of the notification template in Grafana UI type: boolean x-kubernetes-validations: - message: spec.editable is immutable rule: self == oldSelf instanceSelector: description: Selects Grafana instances for import 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic x-kubernetes-validations: - message: spec.instanceSelector is immutable rule: self == oldSelf name: description: Template name type: string resyncPeriod: default: 10m0s description: How often the resource is synced, defaults to 10m0s if not set pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string suspend: description: Suspend pauses synchronizing attempts and tells the operator to ignore changes type: boolean template: description: Template content type: string required: - instanceSelector - name type: object x-kubernetes-validations: - message: spec.editable is immutable rule: ((!has(oldSelf.editable) && !has(self.editable)) || (has(oldSelf.editable) && has(self.editable))) - message: disabling spec.allowCrossNamespaceImport requires a recreate to ensure desired state rule: '!oldSelf.allowCrossNamespaceImport || (oldSelf.allowCrossNamespaceImport && self.allowCrossNamespaceImport)' status: description: The most recent observed state of a Grafana resource properties: conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafanas.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafanas.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: Grafana listKind: GrafanaList plural: grafanas singular: grafana scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.version name: Version type: string - jsonPath: .status.stage name: Stage type: string - jsonPath: .status.stageStatus name: Stage status type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: Grafana is the Schema for the grafanas API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaSpec defines the desired state of Grafana properties: client: description: Client defines how the grafana-operator talks to the grafana instance. properties: headers: additionalProperties: type: string description: Custom HTTP headers to use when interacting with this Grafana. type: object preferIngress: description: If the operator should send it's request through the grafana instances ingress object instead of through the service. nullable: true type: boolean timeout: nullable: true type: integer tls: description: TLS Configuration used to talk with the grafana instance. properties: certSecretRef: description: Use a secret as a reference to give TLS Certificate information properties: name: description: name is unique within a namespace to reference a secret resource. type: string namespace: description: namespace defines the space within which the secret name must be unique. type: string type: object x-kubernetes-map-type: atomic insecureSkipVerify: description: Disable the CA check of the server type: boolean type: object x-kubernetes-validations: - message: insecureSkipVerify and certSecretRef cannot be set at the same time rule: (has(self.insecureSkipVerify) && !(has(self.certSecretRef))) || (has(self.certSecretRef) && !(has(self.insecureSkipVerify))) type: object config: additionalProperties: additionalProperties: type: string type: object description: Config defines how your grafana ini file should looks like. type: object x-kubernetes-preserve-unknown-fields: true deployment: description: Deployment sets how the deployment object should look like with your grafana instance, contains a number of defaults. properties: metadata: properties: annotations: additionalProperties: type: string type: object labels: additionalProperties: type: string type: object type: object spec: properties: minReadySeconds: format: int32 type: integer paused: type: boolean progressDeadlineSeconds: format: int32 type: integer replicas: format: int32 type: integer revisionHistoryLimit: format: int32 type: integer selector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic strategy: properties: rollingUpdate: properties: maxSurge: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true maxUnavailable: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true type: object type: type: string type: object template: properties: metadata: properties: annotations: additionalProperties: type: string type: object labels: additionalProperties: type: string type: object type: object spec: properties: activeDeadlineSeconds: format: int64 type: integer affinity: properties: nodeAffinity: properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: preference: properties: matchExpressions: items: properties: key: type: string operator: type: string values: items: type: string type: array x-kubernetes-list-type: atomic required: - key - operator type: object type: array x-kubernetes-list-type: atomic matchFields: items: properties: key: type: string operator: type: string values: items: type: string type: array x-kubernetes-list-type: atomic required: - key - operator type: object type: array x-kubernetes-list-type: atomic type: object x-kubernetes-map-type: atomic weight: format: int32 type: integer required: - preference - weight type: object type: array x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: properties: nodeSelectorTerms: items: properties: matchExpressions: items: properties: key: type: string operator: type: string values: items: type: string type: array x-kubernetes-list-type: atomic required: - key - operator type: object type: array x-kubernetes-list-type: atomic matchFields: items: properties: key: type: string operator: type: string values: items: type: string type: array x-kubernetes-list-type: atomic required: - key - operator type: object type: array x-kubernetes-list-type: atomic type: object x-kubernetes-map-type: atomic type: array x-kubernetes-list-type: atomic required: - nodeSelectorTerms type: object x-kubernetes-map-type: atomic type: object podAffinity: properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: podAffinityTerm: properties: labelSelector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic matchLabelKeys: items: type: string type: array x-kubernetes-list-type: atomic mismatchLabelKeys: items: type: string type: array x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic namespaces: items: type: string type: array x-kubernetes-list-type: atomic topologyKey: type: string required: - topologyKey type: object weight: format: int32 type: integer required: - podAffinityTerm - weight type: object type: array x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: items: properties: labelSelector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic matchLabelKeys: items: type: string type: array x-kubernetes-list-type: atomic mismatchLabelKeys: items: type: string type: array x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic namespaces: items: type: string type: array x-kubernetes-list-type: atomic topologyKey: type: string required: - topologyKey type: object type: array x-kubernetes-list-type: atomic type: object podAntiAffinity: properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: podAffinityTerm: properties: labelSelector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic matchLabelKeys: items: type: string type: array x-kubernetes-list-type: atomic mismatchLabelKeys: items: type: string type: array x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic namespaces: items: type: string type: array x-kubernetes-list-type: atomic topologyKey: type: string required: - topologyKey type: object weight: format: int32 type: integer required: - podAffinityTerm - weight type: object type: array x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: items: properties: labelSelector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic matchLabelKeys: items: type: string type: array x-kubernetes-list-type: atomic mismatchLabelKeys: items: type: string type: array x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic namespaces: items: type: string type: array x-kubernetes-list-type: atomic topologyKey: type: string required: - topologyKey type: object type: array x-kubernetes-list-type: atomic type: object type: object automountServiceAccountToken: type: boolean containers: items: properties: args: items: type: string type: array x-kubernetes-list-type: atomic command: items: type: string type: array x-kubernetes-list-type: atomic env: items: properties: name: type: string value: type: string valueFrom: properties: configMapKeyRef: properties: key: type: string name: default: "" type: string optional: type: boolean required: - key type: object x-kubernetes-map-type: atomic fieldRef: properties: apiVersion: type: string fieldPath: type: string required: - fieldPath type: object x-kubernetes-map-type: atomic fileKeyRef: properties: key: type: string optional: default: false type: boolean path: type: string volumeName: type: string required: - key - path - volumeName type: object x-kubernetes-map-type: atomic resourceFieldRef: properties: containerName: type: string divisor: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true resource: type: string required: - resource type: object x-kubernetes-map-type: atomic secretKeyRef: properties: key: type: string name: default: "" type: string optional: type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map envFrom: items: properties: configMapRef: properties: name: default: "" type: string optional: type: boolean type: object x-kubernetes-map-type: atomic prefix: type: string secretRef: properties: name: default: "" type: string optional: type: boolean type: object x-kubernetes-map-type: atomic type: object type: array x-kubernetes-list-type: atomic image: type: string imagePullPolicy: type: string lifecycle: properties: postStart: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object sleep: properties: seconds: format: int64 type: integer required: - seconds type: object tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object type: object preStop: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object sleep: properties: seconds: format: int64 type: integer required: - seconds type: object tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object type: object stopSignal: type: string type: object livenessProbe: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object failureThreshold: format: int32 type: integer grpc: properties: port: format: int32 type: integer service: default: "" type: string required: - port type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object initialDelaySeconds: format: int32 type: integer periodSeconds: format: int32 type: integer successThreshold: format: int32 type: integer tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object terminationGracePeriodSeconds: format: int64 type: integer timeoutSeconds: format: int32 type: integer type: object name: type: string ports: items: properties: containerPort: format: int32 type: integer hostIP: type: string hostPort: format: int32 type: integer name: type: string protocol: default: TCP type: string required: - containerPort type: object type: array x-kubernetes-list-map-keys: - containerPort - protocol x-kubernetes-list-type: map readinessProbe: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object failureThreshold: format: int32 type: integer grpc: properties: port: format: int32 type: integer service: default: "" type: string required: - port type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object initialDelaySeconds: format: int32 type: integer periodSeconds: format: int32 type: integer successThreshold: format: int32 type: integer tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object terminationGracePeriodSeconds: format: int64 type: integer timeoutSeconds: format: int32 type: integer type: object resizePolicy: items: properties: resourceName: type: string restartPolicy: type: string required: - resourceName - restartPolicy type: object type: array x-kubernetes-list-type: atomic resources: properties: claims: items: properties: name: type: string request: type: string required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map limits: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object requests: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object type: object restartPolicy: type: string restartPolicyRules: items: properties: action: type: string exitCodes: properties: operator: type: string values: items: format: int32 type: integer type: array x-kubernetes-list-type: set required: - operator type: object required: - action type: object type: array x-kubernetes-list-type: atomic securityContext: properties: allowPrivilegeEscalation: type: boolean appArmorProfile: properties: localhostProfile: type: string type: type: string required: - type type: object capabilities: properties: add: items: type: string type: array x-kubernetes-list-type: atomic drop: items: type: string type: array x-kubernetes-list-type: atomic type: object privileged: type: boolean procMount: type: string readOnlyRootFilesystem: type: boolean runAsGroup: format: int64 type: integer runAsNonRoot: type: boolean runAsUser: format: int64 type: integer seLinuxOptions: properties: level: type: string role: type: string type: type: string user: type: string type: object seccompProfile: properties: localhostProfile: type: string type: type: string required: - type type: object windowsOptions: properties: gmsaCredentialSpec: type: string gmsaCredentialSpecName: type: string hostProcess: type: boolean runAsUserName: type: string type: object type: object startupProbe: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object failureThreshold: format: int32 type: integer grpc: properties: port: format: int32 type: integer service: default: "" type: string required: - port type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object initialDelaySeconds: format: int32 type: integer periodSeconds: format: int32 type: integer successThreshold: format: int32 type: integer tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object terminationGracePeriodSeconds: format: int64 type: integer timeoutSeconds: format: int32 type: integer type: object stdin: type: boolean stdinOnce: type: boolean terminationMessagePath: type: string terminationMessagePolicy: type: string tty: type: boolean volumeDevices: items: properties: devicePath: type: string name: type: string required: - devicePath - name type: object type: array x-kubernetes-list-map-keys: - devicePath x-kubernetes-list-type: map volumeMounts: items: properties: mountPath: type: string mountPropagation: type: string name: type: string readOnly: type: boolean recursiveReadOnly: type: string subPath: type: string subPathExpr: type: string required: - mountPath - name type: object type: array x-kubernetes-list-map-keys: - mountPath x-kubernetes-list-type: map workingDir: type: string required: - name type: object type: array dnsConfig: properties: nameservers: items: type: string type: array x-kubernetes-list-type: atomic options: items: properties: name: type: string value: type: string type: object type: array x-kubernetes-list-type: atomic searches: items: type: string type: array x-kubernetes-list-type: atomic type: object dnsPolicy: type: string enableServiceLinks: type: boolean ephemeralContainers: items: properties: args: items: type: string type: array x-kubernetes-list-type: atomic command: items: type: string type: array x-kubernetes-list-type: atomic env: items: properties: name: type: string value: type: string valueFrom: properties: configMapKeyRef: properties: key: type: string name: default: "" type: string optional: type: boolean required: - key type: object x-kubernetes-map-type: atomic fieldRef: properties: apiVersion: type: string fieldPath: type: string required: - fieldPath type: object x-kubernetes-map-type: atomic fileKeyRef: properties: key: type: string optional: default: false type: boolean path: type: string volumeName: type: string required: - key - path - volumeName type: object x-kubernetes-map-type: atomic resourceFieldRef: properties: containerName: type: string divisor: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true resource: type: string required: - resource type: object x-kubernetes-map-type: atomic secretKeyRef: properties: key: type: string name: default: "" type: string optional: type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map envFrom: items: properties: configMapRef: properties: name: default: "" type: string optional: type: boolean type: object x-kubernetes-map-type: atomic prefix: type: string secretRef: properties: name: default: "" type: string optional: type: boolean type: object x-kubernetes-map-type: atomic type: object type: array x-kubernetes-list-type: atomic image: type: string imagePullPolicy: type: string lifecycle: properties: postStart: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object sleep: properties: seconds: format: int64 type: integer required: - seconds type: object tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object type: object preStop: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object sleep: properties: seconds: format: int64 type: integer required: - seconds type: object tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object type: object stopSignal: type: string type: object livenessProbe: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object failureThreshold: format: int32 type: integer grpc: properties: port: format: int32 type: integer service: default: "" type: string required: - port type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object initialDelaySeconds: format: int32 type: integer periodSeconds: format: int32 type: integer successThreshold: format: int32 type: integer tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object terminationGracePeriodSeconds: format: int64 type: integer timeoutSeconds: format: int32 type: integer type: object name: type: string ports: items: properties: containerPort: format: int32 type: integer hostIP: type: string hostPort: format: int32 type: integer name: type: string protocol: default: TCP type: string required: - containerPort type: object type: array x-kubernetes-list-map-keys: - containerPort - protocol x-kubernetes-list-type: map readinessProbe: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object failureThreshold: format: int32 type: integer grpc: properties: port: format: int32 type: integer service: default: "" type: string required: - port type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object initialDelaySeconds: format: int32 type: integer periodSeconds: format: int32 type: integer successThreshold: format: int32 type: integer tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object terminationGracePeriodSeconds: format: int64 type: integer timeoutSeconds: format: int32 type: integer type: object resizePolicy: items: properties: resourceName: type: string restartPolicy: type: string required: - resourceName - restartPolicy type: object type: array x-kubernetes-list-type: atomic resources: properties: claims: items: properties: name: type: string request: type: string required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map limits: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object requests: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object type: object restartPolicy: type: string restartPolicyRules: items: properties: action: type: string exitCodes: properties: operator: type: string values: items: format: int32 type: integer type: array x-kubernetes-list-type: set required: - operator type: object required: - action type: object type: array x-kubernetes-list-type: atomic securityContext: properties: allowPrivilegeEscalation: type: boolean appArmorProfile: properties: localhostProfile: type: string type: type: string required: - type type: object capabilities: properties: add: items: type: string type: array x-kubernetes-list-type: atomic drop: items: type: string type: array x-kubernetes-list-type: atomic type: object privileged: type: boolean procMount: type: string readOnlyRootFilesystem: type: boolean runAsGroup: format: int64 type: integer runAsNonRoot: type: boolean runAsUser: format: int64 type: integer seLinuxOptions: properties: level: type: string role: type: string type: type: string user: type: string type: object seccompProfile: properties: localhostProfile: type: string type: type: string required: - type type: object windowsOptions: properties: gmsaCredentialSpec: type: string gmsaCredentialSpecName: type: string hostProcess: type: boolean runAsUserName: type: string type: object type: object startupProbe: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object failureThreshold: format: int32 type: integer grpc: properties: port: format: int32 type: integer service: default: "" type: string required: - port type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object initialDelaySeconds: format: int32 type: integer periodSeconds: format: int32 type: integer successThreshold: format: int32 type: integer tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object terminationGracePeriodSeconds: format: int64 type: integer timeoutSeconds: format: int32 type: integer type: object stdin: type: boolean stdinOnce: type: boolean targetContainerName: type: string terminationMessagePath: type: string terminationMessagePolicy: type: string tty: type: boolean volumeDevices: items: properties: devicePath: type: string name: type: string required: - devicePath - name type: object type: array x-kubernetes-list-map-keys: - devicePath x-kubernetes-list-type: map volumeMounts: items: properties: mountPath: type: string mountPropagation: type: string name: type: string readOnly: type: boolean recursiveReadOnly: type: string subPath: type: string subPathExpr: type: string required: - mountPath - name type: object type: array x-kubernetes-list-map-keys: - mountPath x-kubernetes-list-type: map workingDir: type: string required: - name type: object type: array hostAliases: items: properties: hostnames: items: type: string type: array x-kubernetes-list-type: atomic ip: type: string required: - ip type: object type: array hostIPC: type: boolean hostNetwork: type: boolean hostPID: type: boolean hostUsers: type: boolean hostname: type: string imagePullSecrets: items: properties: name: default: "" type: string type: object x-kubernetes-map-type: atomic type: array initContainers: items: properties: args: items: type: string type: array x-kubernetes-list-type: atomic command: items: type: string type: array x-kubernetes-list-type: atomic env: items: properties: name: type: string value: type: string valueFrom: properties: configMapKeyRef: properties: key: type: string name: default: "" type: string optional: type: boolean required: - key type: object x-kubernetes-map-type: atomic fieldRef: properties: apiVersion: type: string fieldPath: type: string required: - fieldPath type: object x-kubernetes-map-type: atomic fileKeyRef: properties: key: type: string optional: default: false type: boolean path: type: string volumeName: type: string required: - key - path - volumeName type: object x-kubernetes-map-type: atomic resourceFieldRef: properties: containerName: type: string divisor: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true resource: type: string required: - resource type: object x-kubernetes-map-type: atomic secretKeyRef: properties: key: type: string name: default: "" type: string optional: type: boolean required: - key type: object x-kubernetes-map-type: atomic type: object required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map envFrom: items: properties: configMapRef: properties: name: default: "" type: string optional: type: boolean type: object x-kubernetes-map-type: atomic prefix: type: string secretRef: properties: name: default: "" type: string optional: type: boolean type: object x-kubernetes-map-type: atomic type: object type: array x-kubernetes-list-type: atomic image: type: string imagePullPolicy: type: string lifecycle: properties: postStart: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object sleep: properties: seconds: format: int64 type: integer required: - seconds type: object tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object type: object preStop: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object sleep: properties: seconds: format: int64 type: integer required: - seconds type: object tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object type: object stopSignal: type: string type: object livenessProbe: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object failureThreshold: format: int32 type: integer grpc: properties: port: format: int32 type: integer service: default: "" type: string required: - port type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object initialDelaySeconds: format: int32 type: integer periodSeconds: format: int32 type: integer successThreshold: format: int32 type: integer tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object terminationGracePeriodSeconds: format: int64 type: integer timeoutSeconds: format: int32 type: integer type: object name: type: string ports: items: properties: containerPort: format: int32 type: integer hostIP: type: string hostPort: format: int32 type: integer name: type: string protocol: default: TCP type: string required: - containerPort type: object type: array x-kubernetes-list-map-keys: - containerPort - protocol x-kubernetes-list-type: map readinessProbe: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object failureThreshold: format: int32 type: integer grpc: properties: port: format: int32 type: integer service: default: "" type: string required: - port type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object initialDelaySeconds: format: int32 type: integer periodSeconds: format: int32 type: integer successThreshold: format: int32 type: integer tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object terminationGracePeriodSeconds: format: int64 type: integer timeoutSeconds: format: int32 type: integer type: object resizePolicy: items: properties: resourceName: type: string restartPolicy: type: string required: - resourceName - restartPolicy type: object type: array x-kubernetes-list-type: atomic resources: properties: claims: items: properties: name: type: string request: type: string required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map limits: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object requests: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object type: object restartPolicy: type: string restartPolicyRules: items: properties: action: type: string exitCodes: properties: operator: type: string values: items: format: int32 type: integer type: array x-kubernetes-list-type: set required: - operator type: object required: - action type: object type: array x-kubernetes-list-type: atomic securityContext: properties: allowPrivilegeEscalation: type: boolean appArmorProfile: properties: localhostProfile: type: string type: type: string required: - type type: object capabilities: properties: add: items: type: string type: array x-kubernetes-list-type: atomic drop: items: type: string type: array x-kubernetes-list-type: atomic type: object privileged: type: boolean procMount: type: string readOnlyRootFilesystem: type: boolean runAsGroup: format: int64 type: integer runAsNonRoot: type: boolean runAsUser: format: int64 type: integer seLinuxOptions: properties: level: type: string role: type: string type: type: string user: type: string type: object seccompProfile: properties: localhostProfile: type: string type: type: string required: - type type: object windowsOptions: properties: gmsaCredentialSpec: type: string gmsaCredentialSpecName: type: string hostProcess: type: boolean runAsUserName: type: string type: object type: object startupProbe: properties: exec: properties: command: items: type: string type: array x-kubernetes-list-type: atomic type: object failureThreshold: format: int32 type: integer grpc: properties: port: format: int32 type: integer service: default: "" type: string required: - port type: object httpGet: properties: host: type: string httpHeaders: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic path: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true scheme: type: string required: - port type: object initialDelaySeconds: format: int32 type: integer periodSeconds: format: int32 type: integer successThreshold: format: int32 type: integer tcpSocket: properties: host: type: string port: anyOf: - type: integer - type: string x-kubernetes-int-or-string: true required: - port type: object terminationGracePeriodSeconds: format: int64 type: integer timeoutSeconds: format: int32 type: integer type: object stdin: type: boolean stdinOnce: type: boolean terminationMessagePath: type: string terminationMessagePolicy: type: string tty: type: boolean volumeDevices: items: properties: devicePath: type: string name: type: string required: - devicePath - name type: object type: array x-kubernetes-list-map-keys: - devicePath x-kubernetes-list-type: map volumeMounts: items: properties: mountPath: type: string mountPropagation: type: string name: type: string readOnly: type: boolean recursiveReadOnly: type: string subPath: type: string subPathExpr: type: string required: - mountPath - name type: object type: array x-kubernetes-list-map-keys: - mountPath x-kubernetes-list-type: map workingDir: type: string required: - name type: object type: array nodeName: type: string nodeSelector: additionalProperties: type: string type: object x-kubernetes-map-type: atomic os: properties: name: type: string required: - name type: object overhead: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string priority: format: int32 type: integer priorityClassName: type: string readinessGates: items: properties: conditionType: type: string required: - conditionType type: object type: array restartPolicy: type: string runtimeClassName: type: string schedulerName: type: string securityContext: properties: appArmorProfile: properties: localhostProfile: type: string type: type: string required: - type type: object fsGroup: format: int64 type: integer fsGroupChangePolicy: type: string runAsGroup: format: int64 type: integer runAsNonRoot: type: boolean runAsUser: format: int64 type: integer seLinuxChangePolicy: type: string seLinuxOptions: properties: level: type: string role: type: string type: type: string user: type: string type: object seccompProfile: properties: localhostProfile: type: string type: type: string required: - type type: object supplementalGroups: items: format: int64 type: integer type: array x-kubernetes-list-type: atomic supplementalGroupsPolicy: type: string sysctls: items: properties: name: type: string value: type: string required: - name - value type: object type: array x-kubernetes-list-type: atomic windowsOptions: properties: gmsaCredentialSpec: type: string gmsaCredentialSpecName: type: string hostProcess: type: boolean runAsUserName: type: string type: object type: object serviceAccount: type: string serviceAccountName: type: string setHostnameAsFQDN: type: boolean shareProcessNamespace: type: boolean subdomain: type: string terminationGracePeriodSeconds: format: int64 type: integer tolerations: items: properties: effect: type: string key: type: string operator: type: string tolerationSeconds: format: int64 type: integer value: type: string type: object type: array topologySpreadConstraints: items: properties: labelSelector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic matchLabelKeys: items: type: string type: array x-kubernetes-list-type: atomic maxSkew: format: int32 type: integer minDomains: format: int32 type: integer nodeAffinityPolicy: type: string nodeTaintsPolicy: type: string topologyKey: type: string whenUnsatisfiable: type: string required: - maxSkew - topologyKey - whenUnsatisfiable type: object type: array x-kubernetes-list-map-keys: - topologyKey - whenUnsatisfiable x-kubernetes-list-type: map volumes: items: properties: awsElasticBlockStore: properties: fsType: type: string partition: format: int32 type: integer readOnly: type: boolean volumeID: type: string required: - volumeID type: object azureDisk: properties: cachingMode: type: string diskName: type: string diskURI: type: string fsType: default: ext4 type: string kind: type: string readOnly: default: false type: boolean required: - diskName - diskURI type: object azureFile: properties: readOnly: type: boolean secretName: type: string shareName: type: string required: - secretName - shareName type: object cephfs: properties: monitors: items: type: string type: array x-kubernetes-list-type: atomic path: type: string readOnly: type: boolean secretFile: type: string secretRef: properties: name: default: "" type: string type: object x-kubernetes-map-type: atomic user: type: string required: - monitors type: object cinder: properties: fsType: type: string readOnly: type: boolean secretRef: properties: name: default: "" type: string type: object x-kubernetes-map-type: atomic volumeID: type: string required: - volumeID type: object configMap: properties: defaultMode: format: int32 type: integer items: items: properties: key: type: string mode: format: int32 type: integer path: type: string required: - key - path type: object type: array x-kubernetes-list-type: atomic name: default: "" type: string optional: type: boolean type: object x-kubernetes-map-type: atomic csi: properties: driver: type: string fsType: type: string nodePublishSecretRef: properties: name: default: "" type: string type: object x-kubernetes-map-type: atomic readOnly: type: boolean volumeAttributes: additionalProperties: type: string type: object required: - driver type: object downwardAPI: properties: defaultMode: format: int32 type: integer items: items: properties: fieldRef: properties: apiVersion: type: string fieldPath: type: string required: - fieldPath type: object x-kubernetes-map-type: atomic mode: format: int32 type: integer path: type: string resourceFieldRef: properties: containerName: type: string divisor: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true resource: type: string required: - resource type: object x-kubernetes-map-type: atomic required: - path type: object type: array x-kubernetes-list-type: atomic type: object emptyDir: properties: medium: type: string sizeLimit: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object ephemeral: properties: volumeClaimTemplate: properties: metadata: type: object spec: properties: accessModes: items: type: string type: array x-kubernetes-list-type: atomic dataSource: properties: apiGroup: type: string kind: type: string name: type: string required: - kind - name type: object x-kubernetes-map-type: atomic dataSourceRef: properties: apiGroup: type: string kind: type: string name: type: string namespace: type: string required: - kind - name type: object resources: properties: limits: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object requests: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object type: object selector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic storageClassName: type: string volumeAttributesClassName: type: string volumeMode: type: string volumeName: type: string type: object required: - spec type: object type: object fc: properties: fsType: type: string lun: format: int32 type: integer readOnly: type: boolean targetWWNs: items: type: string type: array x-kubernetes-list-type: atomic wwids: items: type: string type: array x-kubernetes-list-type: atomic type: object flexVolume: properties: driver: type: string fsType: type: string options: additionalProperties: type: string type: object readOnly: type: boolean secretRef: properties: name: default: "" type: string type: object x-kubernetes-map-type: atomic required: - driver type: object flocker: properties: datasetName: type: string datasetUUID: type: string type: object gcePersistentDisk: properties: fsType: type: string partition: format: int32 type: integer pdName: type: string readOnly: type: boolean required: - pdName type: object gitRepo: properties: directory: type: string repository: type: string revision: type: string required: - repository type: object glusterfs: properties: endpoints: type: string path: type: string readOnly: type: boolean required: - endpoints - path type: object hostPath: properties: path: type: string type: type: string required: - path type: object image: properties: pullPolicy: type: string reference: type: string type: object iscsi: properties: chapAuthDiscovery: type: boolean chapAuthSession: type: boolean fsType: type: string initiatorName: type: string iqn: type: string iscsiInterface: default: default type: string lun: format: int32 type: integer portals: items: type: string type: array x-kubernetes-list-type: atomic readOnly: type: boolean secretRef: properties: name: default: "" type: string type: object x-kubernetes-map-type: atomic targetPortal: type: string required: - iqn - lun - targetPortal type: object name: type: string nfs: properties: path: type: string readOnly: type: boolean server: type: string required: - path - server type: object persistentVolumeClaim: properties: claimName: type: string readOnly: type: boolean required: - claimName type: object photonPersistentDisk: properties: fsType: type: string pdID: type: string required: - pdID type: object portworxVolume: properties: fsType: type: string readOnly: type: boolean volumeID: type: string required: - volumeID type: object projected: properties: defaultMode: format: int32 type: integer sources: items: properties: clusterTrustBundle: properties: labelSelector: properties: matchExpressions: items: properties: key: type: string operator: type: string values: 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 type: object type: object x-kubernetes-map-type: atomic name: type: string optional: type: boolean path: type: string signerName: type: string required: - path type: object configMap: properties: items: items: properties: key: type: string mode: format: int32 type: integer path: type: string required: - key - path type: object type: array x-kubernetes-list-type: atomic name: default: "" type: string optional: type: boolean type: object x-kubernetes-map-type: atomic downwardAPI: properties: items: items: properties: fieldRef: properties: apiVersion: type: string fieldPath: type: string required: - fieldPath type: object x-kubernetes-map-type: atomic mode: format: int32 type: integer path: type: string resourceFieldRef: properties: containerName: type: string divisor: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true resource: type: string required: - resource type: object x-kubernetes-map-type: atomic required: - path type: object type: array x-kubernetes-list-type: atomic type: object podCertificate: properties: certificateChainPath: type: string credentialBundlePath: type: string keyPath: type: string keyType: type: string maxExpirationSeconds: format: int32 type: integer signerName: type: string required: - keyType - signerName type: object secret: properties: items: items: properties: key: type: string mode: format: int32 type: integer path: type: string required: - key - path type: object type: array x-kubernetes-list-type: atomic name: default: "" type: string optional: type: boolean type: object x-kubernetes-map-type: atomic serviceAccountToken: properties: audience: type: string expirationSeconds: format: int64 type: integer path: type: string required: - path type: object type: object type: array x-kubernetes-list-type: atomic type: object quobyte: properties: group: type: string readOnly: type: boolean registry: type: string tenant: type: string user: type: string volume: type: string required: - registry - volume type: object rbd: properties: fsType: type: string image: type: string keyring: default: /etc/ceph/keyring type: string monitors: items: type: string type: array x-kubernetes-list-type: atomic pool: default: rbd type: string readOnly: type: boolean secretRef: properties: name: default: "" type: string type: object x-kubernetes-map-type: atomic user: default: admin type: string required: - image - monitors type: object scaleIO: properties: fsType: default: xfs type: string gateway: type: string protectionDomain: type: string readOnly: type: boolean secretRef: properties: name: default: "" type: string type: object x-kubernetes-map-type: atomic sslEnabled: type: boolean storageMode: default: ThinProvisioned type: string storagePool: type: string system: type: string volumeName: type: string required: - gateway - secretRef - system type: object secret: properties: defaultMode: format: int32 type: integer items: items: properties: key: type: string mode: format: int32 type: integer path: type: string required: - key - path type: object type: array x-kubernetes-list-type: atomic optional: type: boolean secretName: type: string type: object storageos: properties: fsType: type: string readOnly: type: boolean secretRef: properties: name: default: "" type: string type: object x-kubernetes-map-type: atomic volumeName: type: string volumeNamespace: type: string type: object vsphereVolume: properties: fsType: type: string storagePolicyID: type: string storagePolicyName: type: string volumePath: type: string required: - volumePath type: object required: - name type: object type: array type: object type: object type: object type: object disableDefaultAdminSecret: description: DisableDefaultAdminSecret prevents operator from creating default admin-credentials secret type: boolean disableDefaultSecurityContext: description: DisableDefaultSecurityContext prevents the operator from populating securityContext on deployments enum: - Pod - Container - All type: string external: description: External enables you to configure external grafana instances that is not managed by the operator. properties: adminPassword: description: AdminPassword key to talk to the external grafana instance. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic adminUser: description: AdminUser key to talk to the external grafana instance. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic apiKey: description: The API key to talk to the external grafana instance, you need to define ether apiKey or adminUser/adminPassword. properties: key: description: The key of the secret to select from. Must be a valid secret key. type: string name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string optional: description: Specify whether the Secret or its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic tls: description: DEPRECATED, use top level `tls` instead. properties: certSecretRef: description: Use a secret as a reference to give TLS Certificate information properties: name: description: name is unique within a namespace to reference a secret resource. type: string namespace: description: namespace defines the space within which the secret name must be unique. type: string type: object x-kubernetes-map-type: atomic insecureSkipVerify: description: Disable the CA check of the server type: boolean type: object x-kubernetes-validations: - message: insecureSkipVerify and certSecretRef cannot be set at the same time rule: (has(self.insecureSkipVerify) && !(has(self.certSecretRef))) || (has(self.certSecretRef) && !(has(self.insecureSkipVerify))) url: description: URL of the external grafana instance you want to manage. type: string required: - url type: object ingress: description: Ingress sets how the ingress object should look like with your grafana instance. properties: metadata: description: ObjectMeta contains only a [subset of the fields included in k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#objectmeta-v1-meta). properties: annotations: additionalProperties: type: string type: object labels: additionalProperties: type: string type: object type: object spec: description: IngressSpec describes the Ingress the user wishes to exist. properties: defaultBackend: description: |- defaultBackend is the backend that should handle requests that don't match any rule. If Rules are not specified, DefaultBackend must be specified. If DefaultBackend is not set, the handling of requests that do not match any of the rules will be up to the Ingress controller. properties: resource: description: |- resource is an ObjectRef to another Kubernetes resource in the namespace of the Ingress object. If resource is specified, a service.Name and service.Port must not be specified. This is a mutually exclusive setting with "Service". properties: apiGroup: description: |- APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required. type: string kind: description: Kind is the type of resource being referenced type: string name: description: Name is the name of resource being referenced type: string required: - kind - name type: object x-kubernetes-map-type: atomic service: description: |- service references a service as a backend. This is a mutually exclusive setting with "Resource". properties: name: description: |- name is the referenced service. The service must exist in the same namespace as the Ingress object. type: string port: description: |- port of the referenced service. A port name or port number is required for a IngressServiceBackend. properties: name: description: |- name is the name of the port on the Service. This is a mutually exclusive setting with "Number". type: string number: description: |- number is the numerical port number (e.g. 80) on the Service. This is a mutually exclusive setting with "Name". format: int32 type: integer type: object x-kubernetes-map-type: atomic required: - name type: object type: object ingressClassName: description: |- ingressClassName is the name of an IngressClass cluster resource. Ingress controller implementations use this field to know whether they should be serving this Ingress resource, by a transitive connection (controller -> IngressClass -> Ingress resource). Although the `kubernetes.io/ingress.class` annotation (simple constant name) was never formally defined, it was widely supported by Ingress controllers to create a direct binding between Ingress controller and Ingress resources. Newly created Ingress resources should prefer using the field. However, even though the annotation is officially deprecated, for backwards compatibility reasons, ingress controllers should still honor that annotation if present. type: string rules: description: |- rules is a list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend. items: description: |- IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue. properties: host: description: "host is the fully qualified domain name of a network host, as defined by RFC 3986.\nNote the following deviations from the \"host\" part of the\nURI as defined in RFC 3986:\n1. IPs are not allowed. Currently an IngressRuleValue can only apply to\n the IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future.\nIncoming requests are matched against the host before the\nIngressRuleValue. If the host is unspecified, the Ingress routes all\ntraffic based on the specified IngressRuleValue.\n\nhost can be \"precise\" which is a domain name without the terminating dot of\na network host (e.g. \"foo.bar.com\") or \"wildcard\", which is a domain name\nprefixed with a single wildcard label (e.g. \"*.foo.com\").\nThe wildcard character '*' must appear by itself as the first DNS label and\nmatches only a single label. You cannot have a wildcard label by itself (e.g. Host == \"*\").\nRequests will be matched against the Host field in the following way:\n1. If host is precise, the request matches this rule if the http host header is equal to Host.\n2. If host is a wildcard, then the request matches this rule if the http host header\nis to equal to the suffix (removing the first label) of the wildcard rule." type: string http: description: |- HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'. properties: paths: description: paths is a collection of paths that map requests to backends. items: description: |- HTTPIngressPath associates a path with a backend. Incoming urls matching the path are forwarded to the backend. properties: backend: description: |- backend defines the referenced service endpoint to which the traffic will be forwarded to. properties: resource: description: |- resource is an ObjectRef to another Kubernetes resource in the namespace of the Ingress object. If resource is specified, a service.Name and service.Port must not be specified. This is a mutually exclusive setting with "Service". properties: apiGroup: description: |- APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required. type: string kind: description: Kind is the type of resource being referenced type: string name: description: Name is the name of resource being referenced type: string required: - kind - name type: object x-kubernetes-map-type: atomic service: description: |- service references a service as a backend. This is a mutually exclusive setting with "Resource". properties: name: description: |- name is the referenced service. The service must exist in the same namespace as the Ingress object. type: string port: description: |- port of the referenced service. A port name or port number is required for a IngressServiceBackend. properties: name: description: |- name is the name of the port on the Service. This is a mutually exclusive setting with "Number". type: string number: description: |- number is the numerical port number (e.g. 80) on the Service. This is a mutually exclusive setting with "Name". format: int32 type: integer type: object x-kubernetes-map-type: atomic required: - name type: object type: object path: description: |- path is matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a '/' and must be present when using PathType with value "Exact" or "Prefix". type: string pathType: description: |- pathType determines the interpretation of the path matching. PathType can be one of the following values: * Exact: Matches the URL path exactly. * Prefix: Matches based on a URL path prefix split by '/'. Matching is done on a path element by element basis. A path element refers is the list of labels in the path split by the '/' separator. A request is a match for path p if every p is an element-wise prefix of p of the request path. Note that if the last element of the path is a substring of the last element in request path, it is not a match (e.g. /foo/bar matches /foo/bar/baz, but does not match /foo/barbaz). * ImplementationSpecific: Interpretation of the Path matching is up to the IngressClass. Implementations can treat this as a separate PathType or treat it identically to Prefix or Exact path types. Implementations are required to support all path types. type: string required: - backend - pathType type: object type: array x-kubernetes-list-type: atomic required: - paths type: object type: object type: array x-kubernetes-list-type: atomic tls: description: |- tls represents the TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI. items: description: IngressTLS describes the transport layer security associated with an ingress. properties: hosts: description: |- hosts is a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified. items: type: string type: array x-kubernetes-list-type: atomic secretName: description: |- secretName is the name of the secret used to terminate TLS traffic on port 443. Field is left optional to allow TLS routing based on SNI hostname alone. If the SNI host in a listener conflicts with the "Host" header field used by an IngressRule, the SNI host is used for termination and value of the "Host" header is used for routing. type: string type: object type: array x-kubernetes-list-type: atomic type: object type: object jsonnet: properties: libraryLabelSelector: description: |- A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic type: object persistentVolumeClaim: description: PersistentVolumeClaim creates a PVC if you need to attach one to your grafana instance. properties: metadata: description: ObjectMeta contains only a [subset of the fields included in k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#objectmeta-v1-meta). properties: annotations: additionalProperties: type: string type: object labels: additionalProperties: type: string type: object type: object spec: properties: accessModes: items: type: string type: array dataSource: description: |- TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace. properties: apiGroup: description: |- APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required. type: string kind: description: Kind is the type of resource being referenced type: string name: description: Name is the name of resource being referenced type: string required: - kind - name type: object x-kubernetes-map-type: atomic dataSourceRef: description: |- TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace. properties: apiGroup: description: |- APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required. type: string kind: description: Kind is the type of resource being referenced type: string name: description: Name is the name of resource being referenced type: string required: - kind - name type: object x-kubernetes-map-type: atomic resources: description: ResourceRequirements describes the compute resource requirements. properties: claims: description: |- Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. This field depends on the DynamicResourceAllocation feature gate. This field is immutable. It can only be set for containers. items: description: ResourceClaim references one entry in PodSpec.ResourceClaims. properties: name: description: |- Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container. type: string request: description: |- Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request. type: string required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map limits: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: |- Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ type: object requests: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: |- Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ type: object type: object selector: description: |- A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. 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 relates 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. Valid 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, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge 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 map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic storageClassName: type: string volumeMode: description: PersistentVolumeMode describes how a volume is intended to be consumed, either Block or Filesystem. type: string volumeName: description: VolumeName is the binding reference to the PersistentVolume backing this claim. type: string type: object type: object preferences: description: Preferences holds the Grafana Preferences settings properties: homeDashboardUid: type: string type: object route: description: Route sets how the ingress object should look like with your grafana instance, this only works in Openshift. properties: metadata: description: ObjectMeta contains only a [subset of the fields included in k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#objectmeta-v1-meta). properties: annotations: additionalProperties: type: string type: object labels: additionalProperties: type: string type: object type: object spec: properties: alternateBackends: items: description: |- RouteTargetReference specifies the target that resolve into endpoints. Only the 'Service' kind is allowed. Use 'weight' field to emphasize one over others. properties: kind: default: Service description: The kind of target that the route is referring to. Currently, only 'Service' is allowed enum: - Service - "" type: string name: description: name of the service/target that is being referred to. e.g. name of the service minLength: 1 type: string weight: default: 100 description: |- weight as an integer between 0 and 256, default 100, that specifies the target's relative weight against other target reference objects. 0 suppresses requests to this backend. format: int32 maximum: 256 minimum: 0 type: integer required: - kind - name type: object type: array host: type: string path: type: string port: description: RoutePort defines a port mapping from a router to an endpoint in the service endpoints. properties: targetPort: anyOf: - type: integer - type: string description: |- The target port on pods selected by the service this route points to. If this is a string, it will be looked up as a named port in the target endpoints port list. Required x-kubernetes-int-or-string: true required: - targetPort type: object subdomain: type: string tls: description: TLSConfig defines config used to secure a route and provide termination properties: caCertificate: description: caCertificate provides the cert authority certificate contents type: string certificate: description: |- certificate provides certificate contents. This should be a single serving certificate, not a certificate chain. Do not include a CA certificate. type: string destinationCACertificate: description: |- destinationCACertificate provides the contents of the ca certificate of the final destination. When using reencrypt termination this file should be provided in order to have routers use it for health checks on the secure connection. If this field is not specified, the router may provide its own destination CA and perform hostname validation using the short service name (service.namespace.svc), which allows infrastructure generated certificates to automatically verify. type: string externalCertificate: description: |- externalCertificate provides certificate contents as a secret reference. This should be a single serving certificate, not a certificate chain. Do not include a CA certificate. The secret referenced should be present in the same namespace as that of the Route. Forbidden when `certificate` is set. The router service account needs to be granted with read-only access to this secret, please refer to openshift docs for additional details. properties: name: description: |- name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string type: object x-kubernetes-map-type: atomic insecureEdgeTerminationPolicy: description: |- insecureEdgeTerminationPolicy indicates the desired behavior for insecure connections to a route. While each router may make its own decisions on which ports to expose, this is normally port 80. If a route does not specify insecureEdgeTerminationPolicy, then the default behavior is "None". * Allow - traffic is sent to the server on the insecure port (edge/reencrypt terminations only). * None - no traffic is allowed on the insecure port (default). * Redirect - clients are redirected to the secure port. enum: - Allow - None - Redirect - "" type: string key: description: key provides key file contents type: string termination: description: |- termination indicates termination type. * edge - TLS termination is done by the router and http is used to communicate with the backend (default) * passthrough - Traffic is sent straight to the destination without the router providing TLS termination * reencrypt - TLS termination is done by the router and https is used to communicate with the backend Note: passthrough termination is incompatible with httpHeader actions enum: - edge - reencrypt - passthrough type: string required: - termination type: object x-kubernetes-validations: - message: 'cannot have both spec.tls.termination: passthrough and spec.tls.insecureEdgeTerminationPolicy: Allow' rule: 'has(self.termination) && has(self.insecureEdgeTerminationPolicy) ? !((self.termination==''passthrough'') && (self.insecureEdgeTerminationPolicy==''Allow'')) : true' to: description: |- RouteTargetReference specifies the target that resolve into endpoints. Only the 'Service' kind is allowed. Use 'weight' field to emphasize one over others. properties: kind: default: Service description: The kind of target that the route is referring to. Currently, only 'Service' is allowed enum: - Service - "" type: string name: description: name of the service/target that is being referred to. e.g. name of the service minLength: 1 type: string weight: default: 100 description: |- weight as an integer between 0 and 256, default 100, that specifies the target's relative weight against other target reference objects. 0 suppresses requests to this backend. format: int32 maximum: 256 minimum: 0 type: integer required: - kind - name type: object wildcardPolicy: description: WildcardPolicyType indicates the type of wildcard support needed by routes. type: string type: object type: object service: description: Service sets how the service object should look like with your grafana instance, contains a number of defaults. properties: metadata: description: ObjectMeta contains only a [subset of the fields included in k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#objectmeta-v1-meta). properties: annotations: additionalProperties: type: string type: object labels: additionalProperties: type: string type: object type: object spec: description: ServiceSpec describes the attributes that a user creates on a service. properties: allocateLoadBalancerNodePorts: description: |- allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is "true". It may be set to "false" if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type. type: boolean clusterIP: description: |- clusterIP is the IP address of the service and is usually assigned randomly. If an address is specified manually, is in-range (as per system configuration), and is not in use, it will be allocated to the service; otherwise creation of the service will fail. This field may not be changed through updates unless the type field is also being changed to ExternalName (which requires this field to be blank) or the type field is being changed from ExternalName (in which case this field may optionally be specified, as describe above). Valid values are "None", empty string (""), or a valid IP address. Setting this to "None" makes a "headless service" (no virtual IP), which is useful when direct endpoint connections are preferred and proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. If this field is specified when creating a Service of type ExternalName, creation will fail. This field will be wiped when updating a Service to type ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies type: string clusterIPs: description: |- ClusterIPs is a list of IP addresses assigned to this service, and are usually assigned randomly. If an address is specified manually, is in-range (as per system configuration), and is not in use, it will be allocated to the service; otherwise creation of the service will fail. This field may not be changed through updates unless the type field is also being changed to ExternalName (which requires this field to be empty) or the type field is being changed from ExternalName (in which case this field may optionally be specified, as describe above). Valid values are "None", empty string (""), or a valid IP address. Setting this to "None" makes a "headless service" (no virtual IP), which is useful when direct endpoint connections are preferred and proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. If this field is specified when creating a Service of type ExternalName, creation will fail. This field will be wiped when updating a Service to type ExternalName. If this field is not specified, it will be initialized from the clusterIP field. If this field is specified, clients must ensure that clusterIPs[0] and clusterIP have the same value. This field may hold a maximum of two entries (dual-stack IPs, in either order). These IPs must correspond to the values of the ipFamilies field. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies items: type: string type: array x-kubernetes-list-type: atomic externalIPs: description: |- externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system. items: type: string type: array x-kubernetes-list-type: atomic externalName: description: |- externalName is the external reference that discovery mechanisms will return as an alias for this service (e.g. a DNS CNAME record). No proxying will be involved. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires `type` to be "ExternalName". type: string externalTrafficPolicy: description: |- externalTrafficPolicy describes how nodes distribute service traffic they receive on one of the Service's "externally-facing" addresses (NodePorts, ExternalIPs, and LoadBalancer IPs). If set to "Local", the proxy will configure the service in a way that assumes that external load balancers will take care of balancing the service traffic between nodes, and so each node will deliver traffic only to the node-local endpoints of the service, without masquerading the client source IP. (Traffic mistakenly sent to a node with no endpoints will be dropped.) The default value, "Cluster", uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features). Note that traffic sent to an External IP or LoadBalancer IP from within the cluster will always get "Cluster" semantics, but clients sending to a NodePort from within the cluster may need to take traffic policy into account when picking a node. type: string healthCheckNodePort: description: |- healthCheckNodePort specifies the healthcheck nodePort for the service. This only applies when type is set to LoadBalancer and externalTrafficPolicy is set to Local. If a value is specified, is in-range, and is not in use, it will be used. If not specified, a value will be automatically allocated. External systems (e.g. load-balancers) can use this port to determine if a given node holds endpoints for this service or not. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type). This field cannot be updated once set. format: int32 type: integer internalTrafficPolicy: description: |- InternalTrafficPolicy describes how nodes distribute service traffic they receive on the ClusterIP. If set to "Local", the proxy will assume that pods only want to talk to endpoints of the service on the same node as the pod, dropping the traffic if there are no local endpoints. The default value, "Cluster", uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features). type: string ipFamilies: description: |- IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this service. This field is usually assigned automatically based on cluster configuration and the ipFamilyPolicy field. If this field is specified manually, the requested family is available in the cluster, and ipFamilyPolicy allows it, it will be used; otherwise creation of the service will fail. This field is conditionally mutable: it allows for adding or removing a secondary IP family, but it does not allow changing the primary IP family of the Service. Valid values are "IPv4" and "IPv6". This field only applies to Services of types ClusterIP, NodePort, and LoadBalancer, and does apply to "headless" services. This field will be wiped when updating a Service to type ExternalName. This field may hold a maximum of two entries (dual-stack families, in either order). These families must correspond to the values of the clusterIPs field, if specified. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field. items: description: |- IPFamily represents the IP Family (IPv4 or IPv6). This type is used to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). type: string type: array x-kubernetes-list-type: atomic ipFamilyPolicy: description: |- IPFamilyPolicy represents the dual-stack-ness requested or required by this Service. If there is no value provided, then this field will be set to SingleStack. Services can be "SingleStack" (a single IP family), "PreferDualStack" (two IP families on dual-stack configured clusters or a single IP family on single-stack clusters), or "RequireDualStack" (two IP families on dual-stack configured clusters, otherwise fail). The ipFamilies and clusterIPs fields depend on the value of this field. This field will be wiped when updating a service to type ExternalName. type: string loadBalancerClass: description: |- loadBalancerClass is the class of the load balancer implementation this Service belongs to. If specified, the value of this field must be a label-style identifier, with an optional prefix, e.g. "internal-vip" or "example.com/internal-vip". Unprefixed names are reserved for end-users. This field can only be set when the Service type is 'LoadBalancer'. If not set, the default load balancer implementation is used, today this is typically done through the cloud provider integration, but should apply for any default implementation. If set, it is assumed that a load balancer implementation is watching for Services with a matching class. Any default load balancer implementation (e.g. cloud providers) should ignore Services that set this field. This field can only be set when creating or updating a Service to type 'LoadBalancer'. Once set, it can not be changed. This field will be wiped when a service is updated to a non 'LoadBalancer' type. type: string loadBalancerIP: description: |- Only applies to Service Type: LoadBalancer. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. Deprecated: This field was under-specified and its meaning varies across implementations. Using it is non-portable and it may not support dual-stack. Users are encouraged to use implementation-specific annotations when available. type: string loadBalancerSourceRanges: description: |- If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/ items: type: string type: array x-kubernetes-list-type: atomic ports: description: |- The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies items: description: ServicePort contains information on service's port. properties: appProtocol: description: |- The application protocol for this port. This is used as a hint for implementations to offer richer behavior for protocols that they understand. This field follows standard Kubernetes label syntax. Valid values are either: * Un-prefixed protocol names - reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). * Kubernetes-defined prefixed names: * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior- * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455 * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455 * Other protocols should use implementation-defined prefixed names such as mycompany.com/my-custom-protocol. type: string name: description: |- The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. When considering the endpoints for a Service, this must match the 'name' field in the EndpointPort. Optional if only one ServicePort is defined on this service. type: string nodePort: description: |- The port on each node on which this service is exposed when type is NodePort or LoadBalancer. Usually assigned by the system. If a value is specified, in-range, and not in use it will be used, otherwise the operation will fail. If not specified, a port will be allocated if this Service requires one. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type from NodePort to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport format: int32 type: integer port: description: The port that will be exposed by this service. format: int32 type: integer protocol: default: TCP description: |- The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". Default is TCP. type: string targetPort: anyOf: - type: integer - type: string description: |- Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service x-kubernetes-int-or-string: true required: - port type: object type: array x-kubernetes-list-map-keys: - port - protocol x-kubernetes-list-type: map publishNotReadyAddresses: description: |- publishNotReadyAddresses indicates that any agent which deals with endpoints for this Service should disregard any indications of ready/not-ready. The primary use case for setting this field is for a StatefulSet's Headless Service to propagate SRV DNS records for its Pods for the purpose of peer discovery. The Kubernetes controllers that generate Endpoints and EndpointSlice resources for Services interpret this to mean that all endpoints are considered "ready" even if the Pods themselves are not. Agents which consume only Kubernetes generated endpoints through the Endpoints or EndpointSlice resources can safely assume this behavior. type: boolean selector: additionalProperties: type: string description: |- Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/ type: object x-kubernetes-map-type: atomic sessionAffinity: description: |- Supports "ClientIP" and "None". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies type: string sessionAffinityConfig: description: sessionAffinityConfig contains the configurations of session affinity. properties: clientIP: description: clientIP contains the configurations of Client IP based session affinity. properties: timeoutSeconds: description: |- timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP". Default value is 10800(for 3 hours). format: int32 type: integer type: object type: object trafficDistribution: description: |- TrafficDistribution offers a way to express preferences for how traffic is distributed to Service endpoints. Implementations can use this field as a hint, but are not required to guarantee strict adherence. If the field is not set, the implementation will apply its default routing strategy. If set to "PreferClose", implementations should prioritize endpoints that are in the same zone. type: string type: description: |- type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. "ClusterIP" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object or EndpointSlice objects. If clusterIP is "None", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a virtual IP. "NodePort" builds on ClusterIP and allocates a port on every node which routes to the same endpoints as the clusterIP. "LoadBalancer" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the same endpoints as the clusterIP. "ExternalName" aliases this service to the specified externalName. Several other fields do not apply to ExternalName services. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types type: string type: object type: object serviceAccount: description: ServiceAccount sets how the ServiceAccount object should look like with your grafana instance, contains a number of defaults. properties: automountServiceAccountToken: type: boolean imagePullSecrets: items: description: |- LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace. properties: name: default: "" description: |- Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string type: object x-kubernetes-map-type: atomic type: array metadata: description: ObjectMeta contains only a [subset of the fields included in k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#objectmeta-v1-meta). properties: annotations: additionalProperties: type: string type: object labels: additionalProperties: type: string type: object type: object secrets: items: description: ObjectReference contains enough information to let you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: description: |- If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. type: string kind: description: |- Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: description: |- Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: description: |- Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: description: |- Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: description: |- UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object x-kubernetes-map-type: atomic type: array type: object suspend: description: Suspend pauses reconciliation of owned resources like deployments, Services, Etc. upon changes type: boolean version: description: Version specifies the version of Grafana to use for this deployment. It follows the same format as the docker.io/grafana/grafana tags type: string type: object status: description: GrafanaStatus defines the observed state of Grafana properties: adminUrl: type: string alertRuleGroups: items: type: string type: array conditions: items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array contactPoints: items: type: string type: array dashboards: items: type: string type: array datasources: items: type: string type: array folders: items: type: string type: array lastMessage: type: string libraryPanels: items: type: string type: array muteTimings: items: type: string type: array notificationTemplates: items: type: string type: array serviceaccounts: items: type: string type: array stage: type: string stageStatus: type: string version: type: string type: object required: - spec type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/charts/crds/crds/grafana.integreatly.org_grafanaserviceaccounts.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: grafanaserviceaccounts.grafana.integreatly.org spec: group: grafana.integreatly.org names: categories: - grafana-operator kind: GrafanaServiceAccount listKind: GrafanaServiceAccountList plural: grafanaserviceaccounts singular: grafanaserviceaccount scope: Namespaced versions: - additionalPrinterColumns: - format: date-time jsonPath: .status.lastResync name: Last resync type: date - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: GrafanaServiceAccount is the Schema for the grafanaserviceaccounts API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: GrafanaServiceAccountSpec defines the desired state of a GrafanaServiceAccount. properties: instanceName: description: Name of the Grafana instance to create the service account for minLength: 1 type: string x-kubernetes-validations: - message: spec.instanceName is immutable rule: self == oldSelf isDisabled: default: false description: Whether the service account is disabled type: boolean name: description: Name of the service account in Grafana minLength: 1 type: string x-kubernetes-validations: - message: spec.name is immutable rule: self == oldSelf resyncPeriod: default: 10m0s description: How often the resource is synced, defaults to 10m0s if not set pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$ type: string x-kubernetes-validations: - message: spec.resyncPeriod must be greater than 0 rule: duration(self) > duration('0s') role: description: Role of the service account (Viewer, Editor, Admin) enum: - Viewer - Editor - Admin type: string suspend: default: false description: Suspend pauses reconciliation of the service account type: boolean tokens: description: Tokens to create for the service account items: description: GrafanaServiceAccountTokenSpec defines a token for a service account properties: expires: description: Expiration date of the token. If not set, the token never expires format: date-time type: string name: description: Name of the token minLength: 1 type: string secretName: description: Name of the secret to store the token. If not set, a name will be generated minLength: 1 type: string required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map required: - instanceName - name - role type: object status: description: GrafanaServiceAccountStatus defines the observed state of a GrafanaServiceAccount properties: account: description: Info contains the Grafana service account information properties: id: description: ID of the service account in Grafana format: int64 type: integer isDisabled: description: IsDisabled indicates if the service account is disabled type: boolean login: type: string name: type: string role: description: Role is the Grafana role for the service account (Viewer, Editor, Admin) type: string tokens: description: Information about tokens items: description: GrafanaServiceAccountTokenStatus describes a token created in Grafana. properties: expires: description: |- Expiration time of the token N.B. There's possible discrepancy with the expiration time in spec It happens because Grafana API accepts TTL in seconds then calculates the expiration time against the current time format: date-time type: string id: description: ID of the token in Grafana format: int64 type: integer name: type: string secret: description: Name of the secret containing the token properties: name: type: string namespace: type: string type: object required: - id - name type: object type: array required: - id - isDisabled - login - name - role type: object conditions: description: Results when synchonizing resource with Grafana instances items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array lastResync: description: Last time the resource was synchronized with Grafana instances format: date-time type: string type: object type: object served: true storage: true subresources: status: {} --- # Source: grafana-operator/charts/grafana-operator/templates/serviceaccount.yaml apiVersion: v1 kind: ServiceAccount metadata: name: grafana-operator namespace: grafana-operator labels: helm.sh/chart: grafana-operator-v5.20.0 app.kubernetes.io/name: grafana-operator app.kubernetes.io/instance: grafana-operator app.kubernetes.io/version: "v5.20.0" app.kubernetes.io/managed-by: Helm app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/component: operator automountServiceAccountToken: true --- # Source: grafana-operator/charts/grafana-operator/templates/rbac.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: grafana-operator labels: helm.sh/chart: grafana-operator-v5.20.0 app.kubernetes.io/name: grafana-operator app.kubernetes.io/instance: grafana-operator app.kubernetes.io/version: "v5.20.0" app.kubernetes.io/managed-by: Helm app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/component: operator rules: - apiGroups: - "" resources: - configmaps - persistentvolumeclaims - secrets - serviceaccounts - services verbs: - create - delete - get - list - patch - update - watch - apiGroups: - "" resources: - events verbs: - create - get - list - patch - watch - apiGroups: - apps resources: - deployments verbs: - create - delete - get - list - patch - update - watch - apiGroups: - coordination.k8s.io resources: - leases verbs: - create - delete - get - list - patch - update - watch - apiGroups: - grafana.integreatly.org resources: - grafanaalertrulegroups - grafanacontactpoints - grafanadashboards - grafanadatasources - grafanafolders - grafanalibrarypanels - grafanamutetimings - grafananotificationpolicies - grafananotificationpolicyroutes - grafananotificationtemplates - grafanas - grafanaserviceaccounts verbs: - create - delete - get - list - patch - update - watch - apiGroups: - grafana.integreatly.org resources: - grafanaalertrulegroups/finalizers - grafanacontactpoints/finalizers - grafanadashboards/finalizers - grafanadatasources/finalizers - grafanafolders/finalizers - grafanalibrarypanels/finalizers - grafanamutetimings/finalizers - grafananotificationpolicies/finalizers - grafananotificationpolicyroutes/finalizers - grafananotificationtemplates/finalizers - grafanas/finalizers - grafanaserviceaccounts/finalizers verbs: - update - apiGroups: - grafana.integreatly.org resources: - grafanaalertrulegroups/status - grafanacontactpoints/status - grafanadashboards/status - grafanadatasources/status - grafanafolders/status - grafanalibrarypanels/status - grafanamutetimings/status - grafananotificationpolicies/status - grafananotificationpolicyroutes/status - grafananotificationtemplates/status - grafanas/status - grafanaserviceaccounts/status verbs: - get - patch - update - apiGroups: - networking.k8s.io resources: - ingresses verbs: - create - delete - get - list - patch - update - watch --- # Source: grafana-operator/charts/grafana-operator/templates/rbac.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: grafana-operator labels: helm.sh/chart: grafana-operator-v5.20.0 app.kubernetes.io/name: grafana-operator app.kubernetes.io/instance: grafana-operator app.kubernetes.io/version: "v5.20.0" app.kubernetes.io/managed-by: Helm app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/component: operator subjects: - kind: ServiceAccount name: grafana-operator namespace: grafana-operator roleRef: kind: ClusterRole name: grafana-operator apiGroup: rbac.authorization.k8s.io --- # Source: grafana-operator/charts/grafana-operator/templates/service.yaml apiVersion: v1 kind: Service metadata: name: grafana-operator-metrics-service namespace: grafana-operator labels: helm.sh/chart: grafana-operator-v5.20.0 app.kubernetes.io/name: grafana-operator app.kubernetes.io/instance: grafana-operator app.kubernetes.io/version: "v5.20.0" app.kubernetes.io/managed-by: Helm app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/component: operator spec: type: ClusterIP ports: - port: 9090 targetPort: metrics protocol: TCP name: metrics - port: 8888 targetPort: pprof protocol: TCP name: pprof selector: app.kubernetes.io/name: grafana-operator app.kubernetes.io/instance: grafana-operator --- # Source: grafana-operator/charts/grafana-operator/templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: grafana-operator namespace: grafana-operator labels: helm.sh/chart: grafana-operator-v5.20.0 app.kubernetes.io/name: grafana-operator app.kubernetes.io/instance: grafana-operator app.kubernetes.io/version: "v5.20.0" app.kubernetes.io/managed-by: Helm app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/component: operator spec: replicas: 2 selector: matchLabels: app.kubernetes.io/name: grafana-operator app.kubernetes.io/instance: grafana-operator template: metadata: labels: helm.sh/chart: grafana-operator-v5.20.0 app.kubernetes.io/name: grafana-operator app.kubernetes.io/instance: grafana-operator app.kubernetes.io/version: "v5.20.0" app.kubernetes.io/managed-by: Helm app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/component: operator spec: serviceAccountName: grafana-operator containers: - name: grafana-operator securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL readOnlyRootFilesystem: true runAsNonRoot: true image: "ghcr.io/grafana/grafana-operator:v5.20.0" imagePullPolicy: IfNotPresent env: - name: WATCH_NAMESPACE value: - name: WATCH_NAMESPACE_SELECTOR value: "" - name: WATCH_LABEL_SELECTORS value: "" - name: ENFORCE_CACHE_LABELS value: "safe" - name: CLUSTER_DOMAIN value: "" args: - --health-probe-bind-address=:8081 - --metrics-bind-address=0.0.0.0:9090 - --pprof-addr=0.0.0.0:8888 - --zap-encoder=console - --zap-log-level=info - --zap-time-encoding=rfc3339 - --leader-elect - --max-concurrent-reconciles=1 volumeMounts: - name: dashboards-dir mountPath: /tmp/dashboards ports: - containerPort: 9090 name: metrics protocol: TCP - containerPort: 8888 name: pprof protocol: TCP livenessProbe: httpGet: path: /healthz port: 8081 readinessProbe: httpGet: path: /readyz port: 8081 resources: requests: cpu: 10m memory: 64Mi volumes: - name: dashboards-dir emptyDir: {} --- # Source: grafana-operator/charts/postgres-17-cluster/templates/cluster.yaml apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: grafana-operator-postgresql-17-cluster namespace: grafana-operator labels: helm.sh/chart: postgres-17-cluster-6.16.0 app.kubernetes.io/name: grafana-operator-postgresql-17 app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/version: "6.16.0" app.kubernetes.io/managed-by: Helm spec: instances: 3 imageName: "ghcr.io/cloudnative-pg/postgresql:17.7-standard-trixie" imagePullPolicy: IfNotPresent postgresUID: 26 postgresGID: 26 plugins: - name: barman-cloud.cloudnative-pg.io enabled: true isWALArchiver: false parameters: barmanObjectName: "grafana-operator-postgresql-17-external-backup" serverName: "grafana-operator-postgresql-17-backup-2" - name: barman-cloud.cloudnative-pg.io enabled: true isWALArchiver: true parameters: barmanObjectName: "grafana-operator-postgresql-17-garage-local-backup" serverName: "grafana-operator-postgresql-17-backup-1" externalClusters: - name: recovery plugin: name: barman-cloud.cloudnative-pg.io parameters: barmanObjectName: "grafana-operator-postgresql-17-recovery" serverName: grafana-operator-postgresql-17-backup-1 storage: size: 10Gi storageClass: local-path walStorage: size: 2Gi storageClass: local-path resources: limits: hugepages-2Mi: 256Mi requests: cpu: 100m memory: 256Mi affinity: enablePodAntiAffinity: true topologyKey: kubernetes.io/hostname primaryUpdateMethod: switchover primaryUpdateStrategy: unsupervised logLevel: info enableSuperuserAccess: false enablePDB: true postgresql: parameters: hot_standby_feedback: "on" max_slot_wal_keep_size: 2000MB shared_buffers: 128MB monitoring: enablePodMonitor: true disableDefaultQueries: false bootstrap: recovery: database: app source: grafana-operator-postgresql-17-backup-1 externalClusters: - name: grafana-operator-postgresql-17-backup-1 plugin: name: barman-cloud.cloudnative-pg.io enabled: true isWALArchiver: false parameters: barmanObjectName: "grafana-operator-postgresql-17-recovery" serverName: grafana-operator-postgresql-17-backup-1 --- # Source: grafana-operator/templates/external-secret.yaml apiVersion: external-secrets.io/v1 kind: ExternalSecret metadata: name: grafana-auth-secret namespace: grafana-operator labels: app.kubernetes.io/name: grafana-auth-secret app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: secretStoreRef: kind: ClusterSecretStore name: vault data: - secretKey: admin-user remoteRef: conversionStrategy: Default decodingStrategy: None key: /cl01tl/grafana/auth metadataPolicy: None property: admin-user - secretKey: admin-password remoteRef: conversionStrategy: Default decodingStrategy: None key: /cl01tl/grafana/auth metadataPolicy: None property: admin-password --- # Source: grafana-operator/templates/external-secret.yaml apiVersion: external-secrets.io/v1 kind: ExternalSecret metadata: name: grafana-oauth-secret namespace: grafana-operator labels: app.kubernetes.io/name: grafana-oauth-secret app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: secretStoreRef: kind: ClusterSecretStore name: vault data: - secretKey: AUTH_CLIENT_ID remoteRef: conversionStrategy: Default decodingStrategy: None key: /authentik/oidc/grafana metadataPolicy: None property: client - secretKey: AUTH_CLIENT_SECRET remoteRef: conversionStrategy: Default decodingStrategy: None key: /authentik/oidc/grafana metadataPolicy: None property: secret --- # Source: grafana-operator/templates/external-secret.yaml apiVersion: external-secrets.io/v1 kind: ExternalSecret metadata: name: grafana-operator-postgresql-17-cluster-backup-secret namespace: grafana-operator labels: app.kubernetes.io/name: grafana-operator-postgresql-17-cluster-backup-secret app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: secretStoreRef: kind: ClusterSecretStore name: vault data: - secretKey: ACCESS_KEY_ID remoteRef: conversionStrategy: Default decodingStrategy: None key: /digital-ocean/home-infra/postgres-backups metadataPolicy: None property: access - secretKey: ACCESS_SECRET_KEY remoteRef: conversionStrategy: Default decodingStrategy: None key: /digital-ocean/home-infra/postgres-backups metadataPolicy: None property: secret --- # Source: grafana-operator/templates/external-secret.yaml apiVersion: external-secrets.io/v1 kind: ExternalSecret metadata: name: grafana-operator-postgresql-17-cluster-backup-secret-garage namespace: grafana-operator labels: app.kubernetes.io/name: grafana-operator-postgresql-17-cluster-backup-secret-garage app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: secretStoreRef: kind: ClusterSecretStore name: vault data: - secretKey: ACCESS_KEY_ID remoteRef: conversionStrategy: Default decodingStrategy: None key: /garage/home-infra/postgres-backups metadataPolicy: None property: ACCESS_KEY_ID - secretKey: ACCESS_SECRET_KEY remoteRef: conversionStrategy: Default decodingStrategy: None key: /garage/home-infra/postgres-backups metadataPolicy: None property: ACCESS_SECRET_KEY - secretKey: ACCESS_REGION remoteRef: conversionStrategy: Default decodingStrategy: None key: /garage/home-infra/postgres-backups metadataPolicy: None property: ACCESS_REGION --- # Source: grafana-operator/templates/grafana.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: Grafana metadata: name: grafana-main namespace: grafana-operator labels: app.kubernetes.io/name: grafana-main app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator app: grafana-main spec: config: analytics: enabled: "false" check_for_updates: "false" reporting_enabled: "false" server: domain: alexlebens.net root_url: https://grafana.alexlebens.net log: mode: "console" users: auto_assign_org: "true" auto_assign_org_id: "1" auth: disable_login_form: "true" auto_login: "true" signout_redirect_url: https://authentik.alexlebens.net/application/o/grafana/end-session/ auth.generic_oauth: enabled: "true" name: Authentik allow_sign_up: "true" client_id: ${AUTH_CLIENT_ID} client_secret: ${AUTH_CLIENT_SECRET} scopes: openid profile email auth_url: https://authentik.alexlebens.net/application/o/authorize/ token_url: https://authentik.alexlebens.net/application/o/token/ api_url: https://authentik.alexlebens.net/application/o/userinfo/ role_attribute_path: contains(groups, 'Grafana Admins') && 'Admin' || contains(groups, 'Grafana Editors') && 'Editor' || 'Viewer' database: type: postgres host: "${DB_HOST}:${DB_PORT}" name: ${DB_DATABASE} user: ${DB_USER} password: ${DB_PASSWORD} remote_cache: type: redis connstr: addr=redis-replication-remote-cache-master.grafana-operator:6379,pool_size=100,db=0,ssl=false unified_alerting: enabled: "true" ha_redis_address: redis-replication-unified-alerting-master.grafana-operator:6379 deployment: spec: replicas: 3 template: spec: containers: - name: grafana image: grafana/grafana:12.0.0 resources: requests: cpu: 100m memory: 128Mi env: - name: AUTH_CLIENT_ID valueFrom: secretKeyRef: name: grafana-oauth-secret key: AUTH_CLIENT_ID - name: AUTH_CLIENT_SECRET valueFrom: secretKeyRef: name: grafana-oauth-secret key: AUTH_CLIENT_SECRET - name: ADMIN_USER valueFrom: secretKeyRef: name: grafana-auth-secret key: admin-user - name: ADMIN_PASSWORD valueFrom: secretKeyRef: name: grafana-auth-secret key: admin-password - name: DB_HOST valueFrom: secretKeyRef: name: grafana-operator-postgresql-17-cluster-app key: host - name: DB_DATABASE valueFrom: secretKeyRef: name: grafana-operator-postgresql-17-cluster-app key: dbname - name: DB_PORT valueFrom: secretKeyRef: name: grafana-operator-postgresql-17-cluster-app key: port - name: DB_USER valueFrom: secretKeyRef: name: grafana-operator-postgresql-17-cluster-app key: user - name: DB_PASSWORD valueFrom: secretKeyRef: name: grafana-operator-postgresql-17-cluster-app key: password --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-ceph namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-ceph app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-system resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/system/ceph.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-coredns namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-coredns app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-system resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/system/coredns.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-etcd namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-etcd app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-system resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/system/etcd.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-garage namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-garage app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-system resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/system/garage.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-loki namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-loki app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-system resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/system/loki.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-node-full namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-node-full app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-system resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/system/node-full.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-node-short namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-node-short app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-system resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/system/node-short.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-argocd namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-argocd app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/argocd.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-blocky namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-blocky app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/blocky.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-cert-manager namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-cert-manager app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/cert-manager.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-cloudnative-pg namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-cloudnative-pg app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/cloudnative-pg.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-descheduler namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-descheduler app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/descheduler.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-gatus namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-gatus app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/gatus.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-operator namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-operator app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/grafana-operator.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-harbor namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-harbor app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/harbor.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-redis-replication namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-redis-replication app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/redis-replication.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-redis-operator namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-redis-operator app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/redis-operator.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-speedtest-exporter namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-speedtest-exporter app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/speedtest-exporter.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-spegel namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-spegel app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/spegel.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-traefik namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-traefik app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/traefik.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-trivy namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-trivy app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/trivy.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-unpoller namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-unpoller app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/unpoller.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-volsync namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-volsync app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-service resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/service/volsync.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-s3 namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-s3 app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-platform resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/platform/s3.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-authentik namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-authentik app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-platform resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/platform/authentik.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-gitea namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-gitea app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-platform resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/platform/gitea.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-ntfy namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-ntfy app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-platform resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/platform/ntfy.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-qbittorrent namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-qbittorrent app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-platform resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/platform/qbittorrent.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-vault namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-vault app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-platform resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/platform/vault.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-airgradient namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-airgradient app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-iot resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/iot/airgradient.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-server-power-consumption namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-server-power-consumption app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-iot resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/iot/server-power-consumption.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-immich namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-immich app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-application resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/application/immich.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-radarr namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-radarr app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-application resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/application/radarr.json --- # Source: grafana-operator/templates/grafana-dashboard.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDashboard metadata: name: grafana-dashboard-sonarr namespace: grafana-operator labels: app.kubernetes.io/name: grafana-dashboard-sonarr app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main contentCacheDuration: 1h folderUID: grafana-folder-application resyncPeriod: 1h url: http://gitea-http.gitea:3000/alexlebens/grafana-dashboards/raw/branch/main/dashboards/application/sonarr.json --- # Source: grafana-operator/templates/grafana-datasource.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDatasource metadata: name: grafana-datasource-prometheus namespace: grafana-operator labels: app.kubernetes.io/name: grafana-datasource-prometheus app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: datasource: name: Prometheus type: prometheus url: http://kube-prometheus-stack-prometheus.kube-prometheus-stack:9090/ access: proxy isDefault: true jsonData: timeInterval: 30s instanceSelector: matchLabels: app: grafana-main plugins: - name: camptocamp-prometheus-alertmanager-datasource version: 2.1.0 resyncPeriod: 30s uid: kube-prometheus-stack --- # Source: grafana-operator/templates/grafana-datasource.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaDatasource metadata: name: grafana-datasource-loki namespace: grafana-operator labels: app.kubernetes.io/name: grafana-datasource-loki app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: datasource: name: Loki type: loki url: http://loki.loki:3100/ access: proxy instanceSelector: matchLabels: app: grafana-main resyncPeriod: 30s uid: loki --- # Source: grafana-operator/templates/grafana-folder.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaFolder metadata: name: grafana-folder-application namespace: grafana-operator labels: app.kubernetes.io/name: grafana-folder-application app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main title: Application uid: grafana-folder-application resyncPeriod: 30s permissions: | { "items": [ { "role": "Admin", "permission": 4 }, { "role": "Editor", "permission": 2 }, { "role": "Viewer", "permission": 1 } ] } --- # Source: grafana-operator/templates/grafana-folder.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaFolder metadata: name: grafana-folder-iot namespace: grafana-operator labels: app.kubernetes.io/name: grafana-folder-iot app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main title: IoT uid: grafana-folder-iot resyncPeriod: 30s permissions: | { "items": [ { "role": "Admin", "permission": 4 }, { "role": "Editor", "permission": 2 }, { "role": "Viewer", "permission": 1 } ] } --- # Source: grafana-operator/templates/grafana-folder.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaFolder metadata: name: grafana-folder-platform namespace: grafana-operator labels: app.kubernetes.io/name: grafana-folder-platform app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main title: Platform uid: grafana-folder-platform resyncPeriod: 30s permissions: | { "items": [ { "role": "Admin", "permission": 4 }, { "role": "Editor", "permission": 2 }, { "role": "Viewer", "permission": 1 } ] } --- # Source: grafana-operator/templates/grafana-folder.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaFolder metadata: name: grafana-folder-service namespace: grafana-operator labels: app.kubernetes.io/name: grafana-folder-service app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app: grafana-main title: Service uid: grafana-folder-service resyncPeriod: 30s permissions: | { "items": [ { "role": "Admin", "permission": 4 }, { "role": "Editor", "permission": 2 }, { "role": "Viewer", "permission": 1 } ] } --- # Source: grafana-operator/templates/grafana-folder.yaml apiVersion: grafana.integreatly.org/v1beta1 kind: GrafanaFolder metadata: name: grafana-folder-system namespace: grafana-operator labels: app.kubernetes.io/name: grafana-folder-system app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: instanceSelector: matchLabels: app.kubernetes.io/name: grafana-main title: System uid: grafana-folder-system resyncPeriod: 30s permissions: | { "items": [ { "role": "Admin", "permission": 4 }, { "role": "Editor", "permission": 2 }, { "role": "Viewer", "permission": 1 } ] } --- # Source: grafana-operator/templates/http-route.yaml apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: http-route-grafana namespace: grafana-operator labels: app.kubernetes.io/name: http-route-grafana app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: parentRefs: - group: gateway.networking.k8s.io kind: Gateway name: traefik-gateway namespace: traefik hostnames: - grafana.alexlebens.net rules: - matches: - path: type: PathPrefix value: / backendRefs: - group: '' kind: Service name: grafana-main-service port: 3000 weight: 100 --- # Source: grafana-operator/charts/postgres-17-cluster/templates/object-store.yaml apiVersion: barmancloud.cnpg.io/v1 kind: ObjectStore metadata: name: "grafana-operator-postgresql-17-external-backup" namespace: grafana-operator labels: helm.sh/chart: postgres-17-cluster-6.16.0 app.kubernetes.io/name: grafana-operator-postgresql-17 app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/version: "6.16.0" app.kubernetes.io/managed-by: Helm spec: retentionPolicy: 30d configuration: destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/grafana-operator/grafana-operator-postgresql-17-cluster endpointURL: https://nyc3.digitaloceanspaces.com s3Credentials: accessKeyId: name: grafana-operator-postgresql-17-cluster-backup-secret key: ACCESS_KEY_ID secretAccessKey: name: grafana-operator-postgresql-17-cluster-backup-secret key: ACCESS_SECRET_KEY --- # Source: grafana-operator/charts/postgres-17-cluster/templates/object-store.yaml apiVersion: barmancloud.cnpg.io/v1 kind: ObjectStore metadata: name: "grafana-operator-postgresql-17-garage-local-backup" namespace: grafana-operator labels: helm.sh/chart: postgres-17-cluster-6.16.0 app.kubernetes.io/name: grafana-operator-postgresql-17 app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/version: "6.16.0" app.kubernetes.io/managed-by: Helm spec: retentionPolicy: 3d configuration: destinationPath: s3://postgres-backups/cl01tl/grafana-operator/grafana-operator-postgresql-17-cluster endpointURL: http://garage-main.garage:3900 s3Credentials: accessKeyId: name: grafana-operator-postgresql-17-cluster-backup-secret-garage key: ACCESS_KEY_ID secretAccessKey: name: grafana-operator-postgresql-17-cluster-backup-secret-garage key: ACCESS_SECRET_KEY region: name: grafana-operator-postgresql-17-cluster-backup-secret-garage key: ACCESS_REGION --- # Source: grafana-operator/charts/postgres-17-cluster/templates/object-store.yaml apiVersion: barmancloud.cnpg.io/v1 kind: ObjectStore metadata: name: "grafana-operator-postgresql-17-recovery" namespace: grafana-operator labels: helm.sh/chart: postgres-17-cluster-6.16.0 app.kubernetes.io/name: grafana-operator-postgresql-17 app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/version: "6.16.0" app.kubernetes.io/managed-by: Helm spec: configuration: destinationPath: s3://postgres-backups/cl01tl/grafana-operator/grafana-operator-postgresql-17-cluster endpointURL: http://garage-main.garage:3900 wal: compression: snappy maxParallel: 1 data: compression: snappy jobs: 1 s3Credentials: accessKeyId: name: grafana-operator-postgresql-17-cluster-backup-secret-garage key: ACCESS_KEY_ID secretAccessKey: name: grafana-operator-postgresql-17-cluster-backup-secret-garage key: ACCESS_SECRET_KEY --- # Source: grafana-operator/charts/postgres-17-cluster/templates/prometheus-rule.yaml apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: grafana-operator-postgresql-17-alert-rules namespace: grafana-operator labels: helm.sh/chart: postgres-17-cluster-6.16.0 app.kubernetes.io/name: grafana-operator-postgresql-17 app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/version: "6.16.0" app.kubernetes.io/managed-by: Helm spec: groups: - name: cloudnative-pg/grafana-operator-postgresql-17 rules: - alert: CNPGClusterBackendsWaitingWarning annotations: summary: CNPG Cluster a backend is waiting for longer than 5 minutes. description: |- Pod {{ $labels.pod }} has been waiting for longer than 5 minutes expr: | cnpg_backends_waiting_total > 300 for: 1m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterDatabaseDeadlockConflictsWarning annotations: summary: CNPG Cluster has over 10 deadlock conflicts. description: |- There are over 10 deadlock conflicts in {{ $labels.pod }} expr: | cnpg_pg_stat_database_deadlocks > 10 for: 1m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterHACritical annotations: summary: CNPG Cluster has no standby replicas! description: |- CloudNativePG Cluster "{{`{{`}} $labels.job {{`}}`}}" has no ready standby replicas. Your cluster at a severe risk of data loss and downtime if the primary instance fails. The primary instance is still online and able to serve queries, although connections to the `-ro` endpoint will fail. The `-r` endpoint os operating at reduced capacity and all traffic is being served by the main. This can happen during a normal fail-over or automated minor version upgrades in a cluster with 2 or less instances. The replaced instance may need some time to catch-up with the cluster primary instance. This alarm will be always trigger if your cluster is configured to run with only 1 instance. In this case you may want to silence it. runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterHACritical.md expr: | max by (job) (cnpg_pg_replication_streaming_replicas{namespace="grafana-operator"} - cnpg_pg_replication_is_wal_receiver_up{namespace="grafana-operator"}) < 1 for: 5m labels: severity: critical namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterHAWarning annotations: summary: CNPG Cluster less than 2 standby replicas. description: |- CloudNativePG Cluster "{{`{{`}} $labels.job {{`}}`}}" has only {{`{{`}} $value {{`}}`}} standby replicas, putting your cluster at risk if another instance fails. The cluster is still able to operate normally, although the `-ro` and `-r` endpoints operate at reduced capacity. This can happen during a normal fail-over or automated minor version upgrades. The replaced instance may need some time to catch-up with the cluster primary instance. This alarm will be constantly triggered if your cluster is configured to run with less than 3 instances. In this case you may want to silence it. runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterHAWarning.md expr: | max by (job) (cnpg_pg_replication_streaming_replicas{namespace="grafana-operator"} - cnpg_pg_replication_is_wal_receiver_up{namespace="grafana-operator"}) < 2 for: 5m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterHighConnectionsCritical annotations: summary: CNPG Instance maximum number of connections critical! description: |- CloudNativePG Cluster "grafana-operator/grafana-operator-postgresql-17-cluster" instance {{`{{`}} $labels.pod {{`}}`}} is using {{`{{`}} $value {{`}}`}}% of the maximum number of connections. runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterHighConnectionsCritical.md expr: | sum by (pod) (cnpg_backends_total{namespace="grafana-operator", pod=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"}) / max by (pod) (cnpg_pg_settings_setting{name="max_connections", namespace="grafana-operator", pod=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"}) * 100 > 95 for: 5m labels: severity: critical namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterHighConnectionsWarning annotations: summary: CNPG Instance is approaching the maximum number of connections. description: |- CloudNativePG Cluster "grafana-operator/grafana-operator-postgresql-17-cluster" instance {{`{{`}} $labels.pod {{`}}`}} is using {{`{{`}} $value {{`}}`}}% of the maximum number of connections. runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterHighConnectionsWarning.md expr: | sum by (pod) (cnpg_backends_total{namespace="grafana-operator", pod=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"}) / max by (pod) (cnpg_pg_settings_setting{name="max_connections", namespace="grafana-operator", pod=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"}) * 100 > 80 for: 5m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterHighReplicationLag annotations: summary: CNPG Cluster high replication lag description: |- CloudNativePG Cluster "grafana-operator/grafana-operator-postgresql-17-cluster" is experiencing a high replication lag of {{`{{`}} $value {{`}}`}}ms. High replication lag indicates network issues, busy instances, slow queries or suboptimal configuration. runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterHighReplicationLag.md expr: | max(cnpg_pg_replication_lag{namespace="grafana-operator",pod=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"}) * 1000 > 1000 for: 5m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterInstancesOnSameNode annotations: summary: CNPG Cluster instances are located on the same node. description: |- CloudNativePG Cluster "grafana-operator/grafana-operator-postgresql-17-cluster" has {{`{{`}} $value {{`}}`}} instances on the same node {{`{{`}} $labels.node {{`}}`}}. A failure or scheduled downtime of a single node will lead to a potential service disruption and/or data loss. runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterInstancesOnSameNode.md expr: | count by (node) (kube_pod_info{namespace="grafana-operator", pod=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"}) > 1 for: 5m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterLongRunningTransactionWarning annotations: summary: CNPG Cluster query is taking longer than 5 minutes. description: |- CloudNativePG Cluster Pod {{ $labels.pod }} is taking more than 5 minutes (300 seconds) for a query. expr: |- cnpg_backends_max_tx_duration_seconds > 300 for: 1m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterLowDiskSpaceCritical annotations: summary: CNPG Instance is running out of disk space! description: |- CloudNativePG Cluster "grafana-operator/grafana-operator-postgresql-17-cluster" is running extremely low on disk space. Check attached PVCs! runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterLowDiskSpaceCritical.md expr: | max(max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"} / kubelet_volume_stats_capacity_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"})) > 0.9 OR max(max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$-wal"} / kubelet_volume_stats_capacity_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$-wal"})) > 0.9 OR max(sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_used_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$-tbs.*"}) / sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_capacity_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$-tbs.*"}) * on(namespace, persistentvolumeclaim) group_left(volume) kube_pod_spec_volumes_persistentvolumeclaims_info{pod=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"} ) > 0.9 for: 5m labels: severity: critical namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterLowDiskSpaceWarning annotations: summary: CNPG Instance is running out of disk space. description: |- CloudNativePG Cluster "grafana-operator/grafana-operator-postgresql-17-cluster" is running low on disk space. Check attached PVCs. runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterLowDiskSpaceWarning.md expr: | max(max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"} / kubelet_volume_stats_capacity_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"})) > 0.7 OR max(max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$-wal"} / kubelet_volume_stats_capacity_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$-wal"})) > 0.7 OR max(sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_used_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$-tbs.*"}) / sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_capacity_bytes{namespace="grafana-operator", persistentvolumeclaim=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$-tbs.*"}) * on(namespace, persistentvolumeclaim) group_left(volume) kube_pod_spec_volumes_persistentvolumeclaims_info{pod=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"} ) > 0.7 for: 5m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterOffline annotations: summary: CNPG Cluster has no running instances! description: |- CloudNativePG Cluster "grafana-operator/grafana-operator-postgresql-17-cluster" has no ready instances. Having an offline cluster means your applications will not be able to access the database, leading to potential service disruption and/or data loss. runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterOffline.md expr: | (count(cnpg_collector_up{namespace="grafana-operator",pod=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"}) OR on() vector(0)) == 0 for: 5m labels: severity: critical namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterPGDatabaseXidAgeWarning annotations: summary: CNPG Cluster has a number of transactions from the frozen XID to the current one. description: |- Over 300,000,000 transactions from frozen xid on pod {{ $labels.pod }} expr: | cnpg_pg_database_xid_age > 300000000 for: 1m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterPGReplicationWarning annotations: summary: CNPG Cluster standby is lagging behind the primary. description: |- Standby is lagging behind by over 300 seconds (5 minutes) expr: | cnpg_pg_replication_lag > 300 for: 1m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterReplicaFailingReplicationWarning annotations: summary: CNPG Cluster has a replica is failing to replicate. description: |- Replica {{ $labels.pod }} is failing to replicate expr: | cnpg_pg_replication_in_recovery > cnpg_pg_replication_is_wal_receiver_up for: 1m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster - alert: CNPGClusterZoneSpreadWarning annotations: summary: CNPG Cluster instances in the same zone. description: |- CloudNativePG Cluster "grafana-operator/grafana-operator-postgresql-17-cluster" has instances in the same availability zone. A disaster in one availability zone will lead to a potential service disruption and/or data loss. runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterZoneSpreadWarning.md expr: | 3 > count(count by (label_topology_kubernetes_io_zone) (kube_pod_info{namespace="grafana-operator", pod=~"grafana-operator-postgresql-17-cluster-([1-9][0-9]*)$"} * on(node,instance) group_left(label_topology_kubernetes_io_zone) kube_node_labels)) < 3 for: 5m labels: severity: warning namespace: grafana-operator cnpg_cluster: grafana-operator-postgresql-17-cluster --- # Source: grafana-operator/templates/redis-replication.yaml apiVersion: redis.redis.opstreelabs.in/v1beta2 kind: RedisReplication metadata: name: redis-replication-unified-alerting namespace: grafana-operator labels: app.kubernetes.io/name: redis-replication-unified-alerting app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: clusterSize: 3 podSecurityContext: runAsUser: 1000 fsGroup: 1000 kubernetesConfig: image: quay.io/opstree/redis:v8.0.3 imagePullPolicy: IfNotPresent resources: requests: cpu: 50m memory: 128Mi storage: volumeClaimTemplate: spec: storageClassName: ceph-block accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi redisExporter: enabled: true image: quay.io/opstree/redis-exporter:v1.48.0 --- # Source: grafana-operator/templates/redis-replication.yaml apiVersion: redis.redis.opstreelabs.in/v1beta2 kind: RedisReplication metadata: name: redis-replication-remote-cache namespace: grafana-operator labels: app.kubernetes.io/name: redis-replication-remote-cache app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator spec: clusterSize: 3 podSecurityContext: runAsUser: 1000 fsGroup: 1000 kubernetesConfig: image: quay.io/opstree/redis:v8.0.3 imagePullPolicy: IfNotPresent resources: requests: cpu: 50m memory: 128Mi storage: volumeClaimTemplate: spec: storageClassName: ceph-block accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi redisExporter: enabled: true image: quay.io/opstree/redis-exporter:v1.48.0 --- # Source: grafana-operator/charts/postgres-17-cluster/templates/scheduled-backup.yaml apiVersion: postgresql.cnpg.io/v1 kind: ScheduledBackup metadata: name: "grafana-operator-postgresql-17-daily-backup-scheduled-backup" namespace: grafana-operator labels: helm.sh/chart: postgres-17-cluster-6.16.0 app.kubernetes.io/name: grafana-operator-postgresql-17 app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/version: "6.16.0" app.kubernetes.io/managed-by: Helm spec: immediate: false suspend: false schedule: "0 0 0 * * *" backupOwnerReference: self cluster: name: grafana-operator-postgresql-17-cluster method: plugin pluginConfiguration: name: barman-cloud.cloudnative-pg.io parameters: barmanObjectName: "grafana-operator-postgresql-17-external-backup" --- # Source: grafana-operator/charts/postgres-17-cluster/templates/scheduled-backup.yaml apiVersion: postgresql.cnpg.io/v1 kind: ScheduledBackup metadata: name: "grafana-operator-postgresql-17-live-backup-scheduled-backup" namespace: grafana-operator labels: helm.sh/chart: postgres-17-cluster-6.16.0 app.kubernetes.io/name: grafana-operator-postgresql-17 app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/version: "6.16.0" app.kubernetes.io/managed-by: Helm spec: immediate: true suspend: false schedule: "0 0 0 * * *" backupOwnerReference: self cluster: name: grafana-operator-postgresql-17-cluster method: plugin pluginConfiguration: name: barman-cloud.cloudnative-pg.io parameters: barmanObjectName: "grafana-operator-postgresql-17-garage-local-backup" --- # Source: grafana-operator/charts/grafana-operator/templates/servicemonitor.yaml apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: grafana-operator namespace: grafana-operator labels: helm.sh/chart: grafana-operator-v5.20.0 app.kubernetes.io/name: grafana-operator app.kubernetes.io/instance: grafana-operator app.kubernetes.io/version: "v5.20.0" app.kubernetes.io/managed-by: Helm app.kubernetes.io/part-of: grafana-operator app.kubernetes.io/component: operator spec: jobLabel: grafana-operator namespaceSelector: matchNames: - grafana-operator selector: matchLabels: app.kubernetes.io/name: grafana-operator app.kubernetes.io/instance: grafana-operator endpoints: - port: metrics path: /metrics interval: 1m scrapeTimeout: 10s --- # Source: grafana-operator/templates/service-monitor.yaml apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: redis-replication-grafana-operator namespace: grafana-operator labels: app.kubernetes.io/name: redis-replication-grafana-operator app.kubernetes.io/instance: grafana-operator app.kubernetes.io/part-of: grafana-operator redis-operator: "true" env: production spec: selector: matchLabels: redis_setup_type: replication endpoints: - port: redis-exporter interval: 30s scrapeTimeout: 10s