diff --git a/Documentation/api.md b/Documentation/api.md index 5009350c2f..472340d3ac 100644 --- a/Documentation/api.md +++ b/Documentation/api.md @@ -15571,6 +15571,90 @@ int +

DiscordConfig +

+

+(Appears on:Receiver) +

+
+

DiscordConfig configures notifications via Discord. +See https://prometheus.io/docs/alerting/latest/configuration/#discord_config

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+sendResolved
+ +bool + +
+(Optional) +

Whether or not to notify about resolved alerts.

+
+apiURL
+ + +Kubernetes core/v1.SecretKeySelector + + +
+

The secret’s key that contains the Discord webhook URL. +The secret needs to be in the same namespace as the AlertmanagerConfig +object and accessible by the Prometheus Operator.

+
+title
+ +string + +
+(Optional) +

The template of the message’s title.

+
+message
+ +string + +
+(Optional) +

The template of the message’s body.

+
+httpConfig
+ + +HTTPConfig + + +
+(Optional) +

HTTP client configuration.

+

EmailConfig

@@ -15820,7 +15904,7 @@ Duration

HTTPConfig

-(Appears on:OpsGenieConfig, PagerDutyConfig, PushoverConfig, SNSConfig, SlackConfig, TelegramConfig, VictorOpsConfig, WeChatConfig, WebhookConfig) +(Appears on:DiscordConfig, OpsGenieConfig, PagerDutyConfig, PushoverConfig, SNSConfig, SlackConfig, TelegramConfig, VictorOpsConfig, WeChatConfig, WebhookConfig)

HTTPConfig defines a client HTTP configuration. @@ -18251,6 +18335,20 @@ string +discordConfigs
+ + +[]DiscordConfig + + + + +(Optional) +

List of Discord configurations.

+ + + + slackConfigs
@@ -20386,6 +20484,90 @@ int +

DiscordConfig +

+

+(Appears on:Receiver) +

+
+

DiscordConfig configures notifications via Discord. +See https://prometheus.io/docs/alerting/latest/configuration/#discord_config

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+sendResolved
+ +bool + +
+(Optional) +

Whether or not to notify about resolved alerts.

+
+apiURL
+ + +Kubernetes core/v1.SecretKeySelector + + +
+

The secret’s key that contains the Discord webhook URL. +The secret needs to be in the same namespace as the AlertmanagerConfig +object and accessible by the Prometheus Operator.

+
+title
+ +string + +
+(Optional) +

The template of the message’s title.

+
+message
+ +string + +
+(Optional) +

The template of the message’s body.

+
+httpConfig
+ + +HTTPConfig + + +
+(Optional) +

HTTP client configuration.

+

EmailConfig

@@ -20586,7 +20768,7 @@ SafeTLSConfig

HTTPConfig

-(Appears on:OpsGenieConfig, PagerDutyConfig, PushoverConfig, SNSConfig, SlackConfig, TelegramConfig, VictorOpsConfig, WeChatConfig, WebhookConfig) +(Appears on:DiscordConfig, OpsGenieConfig, PagerDutyConfig, PushoverConfig, SNSConfig, SlackConfig, TelegramConfig, VictorOpsConfig, WeChatConfig, WebhookConfig)

HTTPConfig defines a client HTTP configuration. @@ -21784,6 +21966,19 @@ string +discordConfigs
+ + +[]DiscordConfig + + + + +

List of Slack configurations.

+ + + + slackConfigs
diff --git a/bundle.yaml b/bundle.yaml index 21f90941e5..62fe5e3944 100644 --- a/bundle.yaml +++ b/bundle.yaml @@ -211,6 +211,394 @@ spec: items: description: Receiver defines one or more notification integrations. properties: + discordConfigs: + description: List of Discord configurations. + items: + description: DiscordConfig configures notifications via Discord. + See https://prometheus.io/docs/alerting/latest/configuration/#discord_config + properties: + apiURL: + description: The secret's key that contains the Discord + webhook URL. The secret needs to be in the same namespace + as the AlertmanagerConfig object and accessible by the + Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its key + must be defined + type: boolean + required: + - key + type: object + httpConfig: + description: HTTP client configuration. + properties: + authorization: + description: Authorization header configuration for + the client. This is mutually exclusive with BasicAuth + and is only available starting from Alertmanager + v0.22+. + properties: + credentials: + description: Selects a key of a Secret in the + namespace that contains the credentials for + authentication. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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: + description: "Defines the authentication type. + The value is case-insensitive. \n \"Basic\" + is not a supported value. \n Default: \"Bearer\"" + type: string + type: object + basicAuth: + description: BasicAuth for the client. This is mutually + exclusive with Authorization. If both are defined, + BasicAuth takes precedence. + properties: + password: + description: The secret in the service monitor + namespace that contains the password for authentication. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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: The secret in the service monitor + namespace that contains the username for authentication. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + bearerTokenSecret: + description: The secret's key that contains the bearer + token to be used by the client for authentication. + The secret needs to be in the same namespace as + the AlertmanagerConfig object and accessible by + the Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + followRedirects: + description: FollowRedirects specifies whether the + client should follow HTTP 3xx redirects. + type: boolean + oauth2: + description: OAuth2 client credentials used to fetch + a token for the targets. + properties: + clientId: + description: The secret or configmap containing + the OAuth2 client id + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + clientSecret: + description: The secret containing the OAuth2 + client secret + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + endpointParams: + additionalProperties: + type: string + description: Parameters to append to the token + URL + type: object + scopes: + description: OAuth2 scopes used for the token + request + items: + type: string + type: array + tokenUrl: + description: The URL to fetch the token from + minLength: 1 + type: string + required: + - clientId + - clientSecret + - tokenUrl + type: object + proxyURL: + description: Optional proxy URL. + type: string + tlsConfig: + description: TLS configuration for the client. + properties: + ca: + description: Certificate authority used when verifying + server certificates. + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + cert: + description: Client certificate to present when + doing client-authentication. + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + insecureSkipVerify: + description: Disable target certificate validation. + type: boolean + keySecret: + description: Secret containing the client key + file for the targets. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + serverName: + description: Used to verify the hostname for the + targets. + type: string + type: object + type: object + message: + description: The template of the message's body. + type: string + sendResolved: + description: Whether or not to notify about resolved alerts. + type: boolean + title: + description: The template of the message's title. + type: string + required: + - apiURL + type: object + type: array emailConfigs: description: List of Email configurations. items: diff --git a/example/prometheus-operator-crd-full/monitoring.coreos.com_alertmanagerconfigs.yaml b/example/prometheus-operator-crd-full/monitoring.coreos.com_alertmanagerconfigs.yaml index 239067b223..dfe8a408a4 100644 --- a/example/prometheus-operator-crd-full/monitoring.coreos.com_alertmanagerconfigs.yaml +++ b/example/prometheus-operator-crd-full/monitoring.coreos.com_alertmanagerconfigs.yaml @@ -211,40 +211,15 @@ spec: items: description: Receiver defines one or more notification integrations. properties: - emailConfigs: - description: List of Email configurations. + discordConfigs: + description: List of Discord configurations. items: - description: EmailConfig configures notifications via Email. + description: DiscordConfig configures notifications via Discord. + See https://prometheus.io/docs/alerting/latest/configuration/#discord_config properties: - authIdentity: - description: The identity to use for authentication. - type: string - authPassword: - description: The secret's key that contains the password - to use for authentication. The secret needs to be in - the same namespace as the AlertmanagerConfig object - and accessible by the Prometheus Operator. - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - 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 - authSecret: - description: The secret's key that contains the CRAM-MD5 - secret. The secret needs to be in the same namespace + apiURL: + description: The secret's key that contains the Discord + webhook URL. The secret needs to be in the same namespace as the AlertmanagerConfig object and accessible by the Prometheus Operator. properties: @@ -265,64 +240,23 @@ spec: - key type: object x-kubernetes-map-type: atomic - authUsername: - description: The username to use for authentication. - type: string - from: - description: The sender address. - type: string - headers: - description: Further headers email header key/value pairs. - Overrides any headers previously set by the notification - implementation. - items: - description: KeyValue defines a (key, value) tuple. - properties: - key: - description: Key of the tuple. - minLength: 1 - type: string - value: - description: Value of the tuple. - type: string - required: - - key - - value - type: object - type: array - hello: - description: The hostname to identify to the SMTP server. - type: string - html: - description: The HTML body of the email notification. - type: string - requireTLS: - description: The SMTP TLS requirement. Note that Go does - not support unencrypted connections to remote SMTP endpoints. - type: boolean - sendResolved: - description: Whether or not to notify about resolved alerts. - type: boolean - smarthost: - description: The SMTP host and port through which emails - are sent. E.g. example.com:25 - type: string - text: - description: The text body of the email notification. - type: string - tlsConfig: - description: TLS configuration + httpConfig: + description: HTTP client configuration. properties: - ca: - description: Certificate authority used when verifying - server certificates. + authorization: + description: Authorization header configuration for + the client. This is mutually exclusive with BasicAuth + and is only available starting from Alertmanager + v0.22+. properties: - configMap: - description: ConfigMap containing data to use - for the targets. + credentials: + description: Selects a key of a Secret in the + namespace that contains the credentials for + authentication. properties: key: - description: The key to select. + description: The key of the secret to select + from. Must be a valid secret key. type: string name: description: 'Name of the referent. More info: @@ -331,16 +265,49 @@ spec: kind, uid?' type: string optional: - description: Specify whether the ConfigMap - or its key must be defined + description: Specify whether the Secret or + its key must be defined type: boolean required: - key type: object x-kubernetes-map-type: atomic - secret: - description: Secret containing data to use for - the targets. + type: + description: "Defines the authentication type. + The value is case-insensitive. \n \"Basic\" + is not a supported value. \n Default: \"Bearer\"" + type: string + type: object + basicAuth: + description: BasicAuth for the client. This is mutually + exclusive with Authorization. If both are defined, + BasicAuth takes precedence. + properties: + password: + description: The secret in the service monitor + namespace that contains the password for authentication. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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: The secret in the service monitor + namespace that contains the username for authentication. properties: key: description: The key of the secret to select @@ -361,16 +328,95 @@ spec: type: object x-kubernetes-map-type: atomic type: object - cert: - description: Client certificate to present when doing - client-authentication. + bearerTokenSecret: + description: The secret's key that contains the bearer + token to be used by the client for authentication. + The secret needs to be in the same namespace as + the AlertmanagerConfig object and accessible by + the Prometheus Operator. properties: - configMap: - description: ConfigMap containing data to use - for the targets. + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + followRedirects: + description: FollowRedirects specifies whether the + client should follow HTTP 3xx redirects. + type: boolean + oauth2: + description: OAuth2 client credentials used to fetch + a token for the targets. + properties: + clientId: + description: The secret or configmap containing + the OAuth2 client id + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + clientSecret: + description: The secret containing the OAuth2 + client secret properties: key: - description: The key to select. + description: The key of the secret to select + from. Must be a valid secret key. type: string name: description: 'Name of the referent. More info: @@ -379,16 +425,803 @@ spec: kind, uid?' type: string optional: - description: Specify whether the ConfigMap - or its key must be defined + description: Specify whether the Secret or + its key must be defined type: boolean required: - key type: object - x-kubernetes-map-type: atomic - secret: - description: Secret containing data to use for - the targets. + x-kubernetes-map-type: atomic + endpointParams: + additionalProperties: + type: string + description: Parameters to append to the token + URL + type: object + scopes: + description: OAuth2 scopes used for the token + request + items: + type: string + type: array + tokenUrl: + description: The URL to fetch the token from + minLength: 1 + type: string + required: + - clientId + - clientSecret + - tokenUrl + type: object + proxyURL: + description: Optional proxy URL. + type: string + tlsConfig: + description: TLS configuration for the client. + properties: + ca: + description: Certificate authority used when verifying + server certificates. + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + cert: + description: Client certificate to present when + doing client-authentication. + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + insecureSkipVerify: + description: Disable target certificate validation. + type: boolean + keySecret: + description: Secret containing the client key + file for the targets. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + serverName: + description: Used to verify the hostname for the + targets. + type: string + type: object + type: object + message: + description: The template of the message's body. + type: string + sendResolved: + description: Whether or not to notify about resolved alerts. + type: boolean + title: + description: The template of the message's title. + type: string + required: + - apiURL + type: object + type: array + emailConfigs: + description: List of Email configurations. + items: + description: EmailConfig configures notifications via Email. + properties: + authIdentity: + description: The identity to use for authentication. + type: string + authPassword: + description: The secret's key that contains the password + to use for authentication. The secret needs to be in + the same namespace as the AlertmanagerConfig object + and accessible by the Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + authSecret: + description: The secret's key that contains the CRAM-MD5 + secret. The secret needs to be in the same namespace + as the AlertmanagerConfig object and accessible by the + Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + authUsername: + description: The username to use for authentication. + type: string + from: + description: The sender address. + type: string + headers: + description: Further headers email header key/value pairs. + Overrides any headers previously set by the notification + implementation. + items: + description: KeyValue defines a (key, value) tuple. + properties: + key: + description: Key of the tuple. + minLength: 1 + type: string + value: + description: Value of the tuple. + type: string + required: + - key + - value + type: object + type: array + hello: + description: The hostname to identify to the SMTP server. + type: string + html: + description: The HTML body of the email notification. + type: string + requireTLS: + description: The SMTP TLS requirement. Note that Go does + not support unencrypted connections to remote SMTP endpoints. + type: boolean + sendResolved: + description: Whether or not to notify about resolved alerts. + type: boolean + smarthost: + description: The SMTP host and port through which emails + are sent. E.g. example.com:25 + type: string + text: + description: The text body of the email notification. + type: string + tlsConfig: + description: TLS configuration + properties: + ca: + description: Certificate authority used when verifying + server certificates. + properties: + configMap: + description: ConfigMap containing data to use + for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use for + the targets. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + cert: + description: Client certificate to present when doing + client-authentication. + properties: + configMap: + description: ConfigMap containing data to use + for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use for + the targets. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + insecureSkipVerify: + description: Disable target certificate validation. + type: boolean + keySecret: + description: Secret containing the client key file + for the targets. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + serverName: + description: Used to verify the hostname for the targets. + type: string + type: object + to: + description: The email address to send notifications to. + type: string + type: object + type: array + name: + description: Name of the receiver. Must be unique across all + items from the list. + minLength: 1 + type: string + opsgenieConfigs: + description: List of OpsGenie configurations. + items: + description: OpsGenieConfig configures notifications via OpsGenie. + See https://prometheus.io/docs/alerting/latest/configuration/#opsgenie_config + properties: + actions: + description: Comma separated list of actions that will + be available for the alert. + type: string + apiKey: + description: The secret's key that contains the OpsGenie + API key. The secret needs to be in the same namespace + as the AlertmanagerConfig object and accessible by the + Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + apiURL: + description: The URL to send OpsGenie API requests to. + type: string + description: + description: Description of the incident. + type: string + details: + description: A set of arbitrary key/value pairs that provide + further detail about the incident. + items: + description: KeyValue defines a (key, value) tuple. + properties: + key: + description: Key of the tuple. + minLength: 1 + type: string + value: + description: Value of the tuple. + type: string + required: + - key + - value + type: object + type: array + entity: + description: Optional field that can be used to specify + which domain alert is related to. + type: string + httpConfig: + description: HTTP client configuration. + properties: + authorization: + description: Authorization header configuration for + the client. This is mutually exclusive with BasicAuth + and is only available starting from Alertmanager + v0.22+. + properties: + credentials: + description: Selects a key of a Secret in the + namespace that contains the credentials for + authentication. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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: + description: "Defines the authentication type. + The value is case-insensitive. \n \"Basic\" + is not a supported value. \n Default: \"Bearer\"" + type: string + type: object + basicAuth: + description: BasicAuth for the client. This is mutually + exclusive with Authorization. If both are defined, + BasicAuth takes precedence. + properties: + password: + description: The secret in the service monitor + namespace that contains the password for authentication. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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: The secret in the service monitor + namespace that contains the username for authentication. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + bearerTokenSecret: + description: The secret's key that contains the bearer + token to be used by the client for authentication. + The secret needs to be in the same namespace as + the AlertmanagerConfig object and accessible by + the Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + followRedirects: + description: FollowRedirects specifies whether the + client should follow HTTP 3xx redirects. + type: boolean + oauth2: + description: OAuth2 client credentials used to fetch + a token for the targets. + properties: + clientId: + description: The secret or configmap containing + the OAuth2 client id + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + clientSecret: + description: The secret containing the OAuth2 + client secret + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + endpointParams: + additionalProperties: + type: string + description: Parameters to append to the token + URL + type: object + scopes: + description: OAuth2 scopes used for the token + request + items: + type: string + type: array + tokenUrl: + description: The URL to fetch the token from + minLength: 1 + type: string + required: + - clientId + - clientSecret + - tokenUrl + type: object + proxyURL: + description: Optional proxy URL. + type: string + tlsConfig: + description: TLS configuration for the client. + properties: + ca: + description: Certificate authority used when verifying + server certificates. + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + cert: + description: Client certificate to present when + doing client-authentication. + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + insecureSkipVerify: + description: Disable target certificate validation. + type: boolean + keySecret: + description: Secret containing the client key + file for the targets. properties: key: description: The key of the secret to select @@ -408,88 +1241,95 @@ spec: - key type: object x-kubernetes-map-type: atomic - type: object - insecureSkipVerify: - description: Disable target certificate validation. - type: boolean - keySecret: - description: Secret containing the client key file - for the targets. - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: - https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' + serverName: + description: Used to verify the hostname for the + targets. 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 - serverName: - description: Used to verify the hostname for the targets. - type: string type: object - to: - description: The email address to send notifications to. + message: + description: Alert text limited to 130 characters. + type: string + note: + description: Additional alert note. + type: string + priority: + description: Priority level of alert. Possible values + are P1, P2, P3, P4, and P5. + type: string + responders: + description: List of responders responsible for notifications. + items: + description: OpsGenieConfigResponder defines a responder + to an incident. One of `id`, `name` or `username` + has to be defined. + properties: + id: + description: ID of the responder. + type: string + name: + description: Name of the responder. + type: string + type: + description: Type of responder. + enum: + - team + - teams + - user + - escalation + - schedule + minLength: 1 + type: string + username: + description: Username of the responder. + type: string + required: + - type + type: object + type: array + sendResolved: + description: Whether or not to notify about resolved alerts. + type: boolean + source: + description: Backlink to the sender of the notification. + type: string + tags: + description: Comma separated list of tags attached to + the notifications. type: string + updateAlerts: + description: Whether to update message and description + of the alert in OpsGenie if it already exists By default, + the alert is never updated in OpsGenie, the new message + only appears in activity log. + type: boolean type: object type: array - name: - description: Name of the receiver. Must be unique across all - items from the list. - minLength: 1 - type: string - opsgenieConfigs: - description: List of OpsGenie configurations. + pagerdutyConfigs: + description: List of PagerDuty configurations. items: - description: OpsGenieConfig configures notifications via OpsGenie. - See https://prometheus.io/docs/alerting/latest/configuration/#opsgenie_config + description: PagerDutyConfig configures notifications via + PagerDuty. See https://prometheus.io/docs/alerting/latest/configuration/#pagerduty_config properties: - actions: - description: Comma separated list of actions that will - be available for the alert. + class: + description: The class/type of the event. type: string - apiKey: - description: The secret's key that contains the OpsGenie - API key. The secret needs to be in the same namespace - as the AlertmanagerConfig object and accessible by the - Prometheus Operator. - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - 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 - apiURL: - description: The URL to send OpsGenie API requests to. + client: + description: Client identification. + type: string + clientURL: + description: Backlink to the sender of notification. + type: string + component: + description: The part or component of the affected system + that is broken. type: string description: description: Description of the incident. type: string details: - description: A set of arbitrary key/value pairs that provide - further detail about the incident. + description: Arbitrary key/value pairs that provide further + detail about the incident. items: description: KeyValue defines a (key, value) tuple. properties: @@ -505,9 +1345,8 @@ spec: - value type: object type: array - entity: - description: Optional field that can be used to specify - which domain alert is related to. + group: + description: A cluster or grouping of sources. type: string httpConfig: description: HTTP client configuration. @@ -857,107 +1696,119 @@ spec: type: string type: object type: object - message: - description: Alert text limited to 130 characters. - type: string - note: - description: Additional alert note. - type: string - priority: - description: Priority level of alert. Possible values - are P1, P2, P3, P4, and P5. - type: string - responders: - description: List of responders responsible for notifications. + pagerDutyImageConfigs: + description: A list of image details to attach that provide + further detail about an incident. items: - description: OpsGenieConfigResponder defines a responder - to an incident. One of `id`, `name` or `username` - has to be defined. + description: PagerDutyImageConfig attaches images to + an incident properties: - id: - description: ID of the responder. + alt: + description: Alt is the optional alternative text + for the image. type: string - name: - description: Name of the responder. + href: + description: Optional URL; makes the image a clickable + link. type: string - type: - description: Type of responder. - enum: - - team - - teams - - user - - escalation - - schedule - minLength: 1 + src: + description: Src of the image being attached to + the incident type: string - username: - description: Username of the responder. + type: object + type: array + pagerDutyLinkConfigs: + description: A list of link details to attach that provide + further detail about an incident. + items: + description: PagerDutyLinkConfig attaches text links + to an incident + properties: + alt: + description: Text that describes the purpose of + the link, and can be used as the link's text. + type: string + href: + description: Href is the URL of the link to be attached type: string - required: - - type type: object type: array + routingKey: + description: The secret's key that contains the PagerDuty + integration key (when using Events API v2). Either this + field or `serviceKey` needs to be defined. The secret + needs to be in the same namespace as the AlertmanagerConfig + object and accessible by the Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 sendResolved: description: Whether or not to notify about resolved alerts. type: boolean - source: - description: Backlink to the sender of the notification. + serviceKey: + description: The secret's key that contains the PagerDuty + service key (when using integration type "Prometheus"). + Either this field or `routingKey` needs to be defined. + The secret needs to be in the same namespace as the + AlertmanagerConfig object and accessible by the Prometheus + Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + severity: + description: Severity of the incident. type: string - tags: - description: Comma separated list of tags attached to - the notifications. + url: + description: The URL to send requests to. type: string - updateAlerts: - description: Whether to update message and description - of the alert in OpsGenie if it already exists By default, - the alert is never updated in OpsGenie, the new message - only appears in activity log. - type: boolean type: object type: array - pagerdutyConfigs: - description: List of PagerDuty configurations. + pushoverConfigs: + description: List of Pushover configurations. items: - description: PagerDutyConfig configures notifications via - PagerDuty. See https://prometheus.io/docs/alerting/latest/configuration/#pagerduty_config + description: PushoverConfig configures notifications via Pushover. + See https://prometheus.io/docs/alerting/latest/configuration/#pushover_config properties: - class: - description: The class/type of the event. - type: string - client: - description: Client identification. - type: string - clientURL: - description: Backlink to the sender of notification. - type: string - component: - description: The part or component of the affected system - that is broken. - type: string - description: - description: Description of the incident. - type: string - details: - description: Arbitrary key/value pairs that provide further - detail about the incident. - items: - description: KeyValue defines a (key, value) tuple. - properties: - key: - description: Key of the tuple. - minLength: 1 - type: string - value: - description: Value of the tuple. - type: string - required: - - key - - value - type: object - type: array - group: - description: A cluster or grouping of sources. + expire: + description: How long your notification will continue + to be retried for, unless the user acknowledges the + notification. + pattern: ^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$ type: string + html: + description: Whether notification message is HTML or plain + text. + type: boolean httpConfig: description: HTTP client configuration. properties: @@ -1306,49 +2157,35 @@ spec: type: string type: object type: object - pagerDutyImageConfigs: - description: A list of image details to attach that provide - further detail about an incident. - items: - description: PagerDutyImageConfig attaches images to - an incident - properties: - alt: - description: Alt is the optional alternative text - for the image. - type: string - href: - description: Optional URL; makes the image a clickable - link. - type: string - src: - description: Src of the image being attached to - the incident - type: string - type: object - type: array - pagerDutyLinkConfigs: - description: A list of link details to attach that provide - further detail about an incident. - items: - description: PagerDutyLinkConfig attaches text links - to an incident - properties: - alt: - description: Text that describes the purpose of - the link, and can be used as the link's text. - type: string - href: - description: Href is the URL of the link to be attached - type: string - type: object - type: array - routingKey: - description: The secret's key that contains the PagerDuty - integration key (when using Events API v2). Either this - field or `serviceKey` needs to be defined. The secret - needs to be in the same namespace as the AlertmanagerConfig - object and accessible by the Prometheus Operator. + message: + description: Notification message. + type: string + priority: + description: Priority, see https://pushover.net/api#priority + type: string + retry: + description: How often the Pushover servers will send + the same notification to the user. Must be at least + 30 seconds. + pattern: ^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$ + type: string + sendResolved: + description: Whether or not to notify about resolved alerts. + type: boolean + sound: + description: The name of one of the sounds supported by + device clients to override the user's default sound + choice + type: string + title: + description: Notification title. + type: string + token: + description: The secret's key that contains the registered + application's API token, see https://pushover.net/apps. + The secret needs to be in the same namespace as the + AlertmanagerConfig object and accessible by the Prometheus + Operator. properties: key: description: The key of the secret to select from. Must @@ -1367,16 +2204,96 @@ spec: - key type: object x-kubernetes-map-type: atomic - sendResolved: - description: Whether or not to notify about resolved alerts. - type: boolean - serviceKey: - description: The secret's key that contains the PagerDuty - service key (when using integration type "Prometheus"). - Either this field or `routingKey` needs to be defined. - The secret needs to be in the same namespace as the - AlertmanagerConfig object and accessible by the Prometheus - Operator. + url: + description: A supplementary URL shown alongside the message. + type: string + urlTitle: + description: A title for supplementary URL, otherwise + just the URL is shown + type: string + userKey: + description: The secret's key that contains the recipient + user's user key. The secret needs to be in the same + namespace as the AlertmanagerConfig object and accessible + by the Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + slackConfigs: + description: List of Slack configurations. + items: + description: SlackConfig configures notifications via Slack. + See https://prometheus.io/docs/alerting/latest/configuration/#slack_config + properties: + actions: + description: A list of Slack actions that are sent with + each notification. + items: + description: SlackAction configures a single Slack action + that is sent with each notification. See https://api.slack.com/docs/message-attachments#action_fields + and https://api.slack.com/docs/message-buttons for + more information. + properties: + confirm: + description: SlackConfirmationField protect users + from destructive actions or particularly distinguished + decisions by asking them to confirm their button + click one more time. See https://api.slack.com/docs/interactive-message-field-guide#confirmation_fields + for more information. + properties: + dismissText: + type: string + okText: + type: string + text: + minLength: 1 + type: string + title: + type: string + required: + - text + type: object + name: + type: string + style: + type: string + text: + minLength: 1 + type: string + type: + minLength: 1 + type: string + url: + type: string + value: + type: string + required: + - text + - type + type: object + type: array + apiURL: + description: The secret's key that contains the Slack + webhook URL. The secret needs to be in the same namespace + as the AlertmanagerConfig object and accessible by the + Prometheus Operator. properties: key: description: The key of the secret to select from. Must @@ -1395,30 +2312,43 @@ spec: - key type: object x-kubernetes-map-type: atomic - severity: - description: Severity of the incident. + callbackId: type: string - url: - description: The URL to send requests to. + channel: + description: The channel or user to send notifications + to. type: string - type: object - type: array - pushoverConfigs: - description: List of Pushover configurations. - items: - description: PushoverConfig configures notifications via Pushover. - See https://prometheus.io/docs/alerting/latest/configuration/#pushover_config - properties: - expire: - description: How long your notification will continue - to be retried for, unless the user acknowledges the - notification. - pattern: ^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$ + color: + type: string + fallback: + type: string + fields: + description: A list of Slack fields that are sent with + each notification. + items: + description: SlackField configures a single Slack field + that is sent with each notification. Each field must + contain a title, value, and optionally, a boolean + value to indicate if the field is short enough to + be displayed next to other fields designated as short. + See https://api.slack.com/docs/message-attachments#fields + for more information. + properties: + short: + type: boolean + title: + minLength: 1 + type: string + value: + minLength: 1 + type: string + required: + - title + - value + type: object + type: array + footer: type: string - html: - description: Whether notification message is HTML or plain - text. - type: boolean httpConfig: description: HTTP client configuration. properties: @@ -1767,198 +2697,53 @@ spec: type: string type: object type: object - message: - description: Notification message. + iconEmoji: type: string - priority: - description: Priority, see https://pushover.net/api#priority + iconURL: type: string - retry: - description: How often the Pushover servers will send - the same notification to the user. Must be at least - 30 seconds. - pattern: ^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$ + imageURL: type: string - sendResolved: - description: Whether or not to notify about resolved alerts. + linkNames: type: boolean - sound: - description: The name of one of the sounds supported by - device clients to override the user's default sound - choice - type: string - title: - description: Notification title. - type: string - token: - description: The secret's key that contains the registered - application's API token, see https://pushover.net/apps. - The secret needs to be in the same namespace as the - AlertmanagerConfig object and accessible by the Prometheus - Operator. - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - 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 - url: - description: A supplementary URL shown alongside the message. - type: string - urlTitle: - description: A title for supplementary URL, otherwise - just the URL is shown - type: string - userKey: - description: The secret's key that contains the recipient - user's user key. The secret needs to be in the same - namespace as the AlertmanagerConfig object and accessible - by the Prometheus Operator. - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - 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 - slackConfigs: - description: List of Slack configurations. - items: - description: SlackConfig configures notifications via Slack. - See https://prometheus.io/docs/alerting/latest/configuration/#slack_config - properties: - actions: - description: A list of Slack actions that are sent with - each notification. - items: - description: SlackAction configures a single Slack action - that is sent with each notification. See https://api.slack.com/docs/message-attachments#action_fields - and https://api.slack.com/docs/message-buttons for - more information. - properties: - confirm: - description: SlackConfirmationField protect users - from destructive actions or particularly distinguished - decisions by asking them to confirm their button - click one more time. See https://api.slack.com/docs/interactive-message-field-guide#confirmation_fields - for more information. - properties: - dismissText: - type: string - okText: - type: string - text: - minLength: 1 - type: string - title: - type: string - required: - - text - type: object - name: - type: string - style: - type: string - text: - minLength: 1 - type: string - type: - minLength: 1 - type: string - url: - type: string - value: - type: string - required: - - text - - type - type: object - type: array - apiURL: - description: The secret's key that contains the Slack - webhook URL. The secret needs to be in the same namespace - as the AlertmanagerConfig object and accessible by the - Prometheus Operator. - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - 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 - callbackId: - type: string - channel: - description: The channel or user to send notifications - to. - type: string - color: - type: string - fallback: - type: string - fields: - description: A list of Slack fields that are sent with - each notification. + mrkdwnIn: items: - description: SlackField configures a single Slack field - that is sent with each notification. Each field must - contain a title, value, and optionally, a boolean - value to indicate if the field is short enough to - be displayed next to other fields designated as short. - See https://api.slack.com/docs/message-attachments#fields - for more information. - properties: - short: - type: boolean - title: - minLength: 1 - type: string - value: - minLength: 1 - type: string - required: - - title - - value - type: object + type: string type: array - footer: + pretext: + type: string + sendResolved: + description: Whether or not to notify about resolved alerts. + type: boolean + shortFields: + type: boolean + text: + type: string + thumbURL: + type: string + title: + type: string + titleLink: + type: string + username: + type: string + type: object + type: array + snsConfigs: + description: List of SNS configurations + items: + description: SNSConfig configures notifications via AWS SNS. + See https://prometheus.io/docs/alerting/latest/configuration/#sns_configs + properties: + apiURL: + description: The SNS API URL i.e. https://sns.us-east-2.amazonaws.com. + If not specified, the SNS API URL from the SNS SDK will + be used. type: string + attributes: + additionalProperties: + type: string + description: SNS message attributes. + type: object httpConfig: description: HTTP client configuration. properties: @@ -2307,53 +3092,136 @@ spec: type: string type: object type: object - iconEmoji: - type: string - iconURL: - type: string - imageURL: + message: + description: The message content of the SNS notification. type: string - linkNames: - type: boolean - mrkdwnIn: - items: - type: string - type: array - pretext: + phoneNumber: + description: Phone number if message is delivered via + SMS in E.164 format. If you don't specify this value, + you must specify a value for the TopicARN or TargetARN. type: string sendResolved: description: Whether or not to notify about resolved alerts. type: boolean - shortFields: - type: boolean - text: - type: string - thumbURL: - type: string - title: + sigv4: + description: Configures AWS's Signature Verification 4 + signing process to sign requests. + properties: + accessKey: + description: AccessKey is the AWS API key. If not + specified, the environment variable `AWS_ACCESS_KEY_ID` + is used. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + profile: + description: Profile is the named AWS profile used + to authenticate. + type: string + region: + description: Region is the AWS region. If blank, the + region from the default credentials chain used. + type: string + roleArn: + description: RoleArn is the named AWS profile used + to authenticate. + type: string + secretKey: + description: SecretKey is the AWS API secret. If not + specified, the environment variable `AWS_SECRET_ACCESS_KEY` + is used. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + subject: + description: Subject line when the message is delivered + to email endpoints. type: string - titleLink: + targetARN: + description: The mobile platform endpoint ARN if message + is delivered via mobile notifications. If you don't + specify this value, you must specify a value for the + topic_arn or PhoneNumber. type: string - username: + topicARN: + description: SNS topic ARN, i.e. arn:aws:sns:us-east-2:698519295917:My-Topic + If you don't specify this value, you must specify a + value for the PhoneNumber or TargetARN. type: string type: object type: array - snsConfigs: - description: List of SNS configurations + telegramConfigs: + description: List of Telegram configurations. items: - description: SNSConfig configures notifications via AWS SNS. - See https://prometheus.io/docs/alerting/latest/configuration/#sns_configs + description: TelegramConfig configures notifications via Telegram. + See https://prometheus.io/docs/alerting/latest/configuration/#telegram_config properties: apiURL: - description: The SNS API URL i.e. https://sns.us-east-2.amazonaws.com. - If not specified, the SNS API URL from the SNS SDK will - be used. + description: The Telegram API URL i.e. https://api.telegram.org. + If not specified, default API URL will be used. type: string - attributes: - additionalProperties: - type: string - description: SNS message attributes. + botToken: + description: Telegram bot token The secret needs to be + in the same namespace as the AlertmanagerConfig object + and accessible by the Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + chatID: + description: The Telegram chat ID. + format: int64 + type: integer + disableNotifications: + description: Disable telegram notifications + type: boolean httpConfig: description: HTTP client configuration. properties: @@ -2692,121 +3560,42 @@ spec: description: Specify whether the Secret or its key must be defined type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - serverName: - description: Used to verify the hostname for the - targets. - type: string - type: object - type: object - message: - description: The message content of the SNS notification. - type: string - phoneNumber: - description: Phone number if message is delivered via - SMS in E.164 format. If you don't specify this value, - you must specify a value for the TopicARN or TargetARN. - type: string - sendResolved: - description: Whether or not to notify about resolved alerts. - type: boolean - sigv4: - description: Configures AWS's Signature Verification 4 - signing process to sign requests. - properties: - accessKey: - description: AccessKey is the AWS API key. If not - specified, the environment variable `AWS_ACCESS_KEY_ID` - is used. - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: - https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - 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 - profile: - description: Profile is the named AWS profile used - to authenticate. - type: string - region: - description: Region is the AWS region. If blank, the - region from the default credentials chain used. - type: string - roleArn: - description: RoleArn is the named AWS profile used - to authenticate. - type: string - secretKey: - description: SecretKey is the AWS API secret. If not - specified, the environment variable `AWS_SECRET_ACCESS_KEY` - is used. - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: - https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' + required: + - key + type: object + x-kubernetes-map-type: atomic + serverName: + description: Used to verify the hostname for the + targets. 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 - subject: - description: Subject line when the message is delivered - to email endpoints. - type: string - targetARN: - description: The mobile platform endpoint ARN if message - is delivered via mobile notifications. If you don't - specify this value, you must specify a value for the - topic_arn or PhoneNumber. + message: + description: Message template type: string - topicARN: - description: SNS topic ARN, i.e. arn:aws:sns:us-east-2:698519295917:My-Topic - If you don't specify this value, you must specify a - value for the PhoneNumber or TargetARN. + parseMode: + description: Parse mode for telegram message + enum: + - MarkdownV2 + - Markdown + - HTML type: string + sendResolved: + description: Whether to notify about resolved alerts. + type: boolean type: object type: array - telegramConfigs: - description: List of Telegram configurations. + victoropsConfigs: + description: List of VictorOps configurations. items: - description: TelegramConfig configures notifications via Telegram. - See https://prometheus.io/docs/alerting/latest/configuration/#telegram_config + description: VictorOpsConfig configures notifications via + VictorOps. See https://prometheus.io/docs/alerting/latest/configuration/#victorops_config properties: - apiURL: - description: The Telegram API URL i.e. https://api.telegram.org. - If not specified, default API URL will be used. - type: string - botToken: - description: Telegram bot token The secret needs to be - in the same namespace as the AlertmanagerConfig object - and accessible by the Prometheus Operator. + apiKey: + description: The secret's key that contains the API key + to use when talking to the VictorOps API. The secret + needs to be in the same namespace as the AlertmanagerConfig + object and accessible by the Prometheus Operator. properties: key: description: The key of the secret to select from. Must @@ -2825,15 +3614,31 @@ spec: - key type: object x-kubernetes-map-type: atomic - chatID: - description: The Telegram chat ID. - format: int64 - type: integer - disableNotifications: - description: Disable telegram notifications - type: boolean + apiUrl: + description: The VictorOps API URL. + type: string + customFields: + description: Additional custom fields for notification. + items: + description: KeyValue defines a (key, value) tuple. + properties: + key: + description: Key of the tuple. + minLength: 1 + type: string + value: + description: Value of the tuple. + type: string + required: + - key + - value + type: object + type: array + entityDisplayName: + description: Contains summary of the alerted problem. + type: string httpConfig: - description: HTTP client configuration. + description: The HTTP client's configuration. properties: authorization: description: Authorization header configuration for @@ -3180,75 +3985,34 @@ spec: type: string type: object type: object - message: - description: Message template + messageType: + description: Describes the behavior of the alert (CRITICAL, + WARNING, INFO). type: string - parseMode: - description: Parse mode for telegram message - enum: - - MarkdownV2 - - Markdown - - HTML + monitoringTool: + description: The monitoring tool the state message is + from. + type: string + routingKey: + description: A key used to map the alert to a team. type: string sendResolved: - description: Whether to notify about resolved alerts. + description: Whether or not to notify about resolved alerts. type: boolean + stateMessage: + description: Contains long explanation of the alerted + problem. + type: string type: object type: array - victoropsConfigs: - description: List of VictorOps configurations. + webhookConfigs: + description: List of webhook configurations. items: - description: VictorOpsConfig configures notifications via - VictorOps. See https://prometheus.io/docs/alerting/latest/configuration/#victorops_config + description: WebhookConfig configures notifications via a + generic receiver supporting the webhook payload. See https://prometheus.io/docs/alerting/latest/configuration/#webhook_config properties: - apiKey: - description: The secret's key that contains the API key - to use when talking to the VictorOps API. The secret - needs to be in the same namespace as the AlertmanagerConfig - object and accessible by the Prometheus Operator. - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - 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 - apiUrl: - description: The VictorOps API URL. - type: string - customFields: - description: Additional custom fields for notification. - items: - description: KeyValue defines a (key, value) tuple. - properties: - key: - description: Key of the tuple. - minLength: 1 - type: string - value: - description: Value of the tuple. - type: string - required: - - key - - value - type: object - type: array - entityDisplayName: - description: Contains summary of the alerted problem. - type: string httpConfig: - description: The HTTP client's configuration. + description: HTTP client configuration. properties: authorization: description: Authorization header configuration for @@ -3595,32 +4359,84 @@ spec: type: string type: object type: object - messageType: - description: Describes the behavior of the alert (CRITICAL, - WARNING, INFO). - type: string - monitoringTool: - description: The monitoring tool the state message is - from. - type: string - routingKey: - description: A key used to map the alert to a team. - type: string + maxAlerts: + description: Maximum number of alerts to be sent per webhook + message. When 0, all alerts are included. + format: int32 + minimum: 0 + type: integer sendResolved: description: Whether or not to notify about resolved alerts. type: boolean - stateMessage: - description: Contains long explanation of the alerted - problem. + url: + description: The URL to send HTTP POST requests to. `urlSecret` + takes precedence over `url`. One of `urlSecret` and + `url` should be defined. + type: string + urlSecret: + description: The secret's key that contains the webhook + URL to send HTTP requests to. `urlSecret` takes precedence + over `url`. One of `urlSecret` and `url` should be defined. + The secret needs to be in the same namespace as the + AlertmanagerConfig object and accessible by the Prometheus + Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + wechatConfigs: + description: List of WeChat configurations. + items: + description: WeChatConfig configures notifications via WeChat. + See https://prometheus.io/docs/alerting/latest/configuration/#wechat_config + properties: + agentID: + type: string + apiSecret: + description: The secret's key that contains the WeChat + API key. The secret needs to be in the same namespace + as the AlertmanagerConfig object and accessible by the + Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + 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 + apiURL: + description: The WeChat API URL. + type: string + corpID: + description: The corp id for authentication. type: string - type: object - type: array - webhookConfigs: - description: List of webhook configurations. - items: - description: WebhookConfig configures notifications via a - generic receiver supporting the webhook payload. See https://prometheus.io/docs/alerting/latest/configuration/#webhook_config - properties: httpConfig: description: HTTP client configuration. properties: @@ -3969,58 +4785,239 @@ spec: type: string type: object type: object - maxAlerts: - description: Maximum number of alerts to be sent per webhook - message. When 0, all alerts are included. - format: int32 - minimum: 0 - type: integer + message: + description: API request data as defined by the WeChat + API. + type: string + messageType: + type: string sendResolved: description: Whether or not to notify about resolved alerts. type: boolean - url: - description: The URL to send HTTP POST requests to. `urlSecret` - takes precedence over `url`. One of `urlSecret` and - `url` should be defined. + toParty: type: string - urlSecret: - description: The secret's key that contains the webhook - URL to send HTTP requests to. `urlSecret` takes precedence - over `url`. One of `urlSecret` and `url` should be defined. - The secret needs to be in the same namespace as the - AlertmanagerConfig object and accessible by the Prometheus - Operator. - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - 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 + toTag: + type: string + toUser: + type: string + type: object + type: array + required: + - name + type: object + type: array + route: + description: The Alertmanager route definition for alerts matching + the resource's namespace. If present, it will be added to the generated + Alertmanager configuration as a first-level route. + properties: + activeTimeIntervals: + description: ActiveTimeIntervals is a list of MuteTimeInterval + names when this route should be active. + items: + type: string + type: array + continue: + description: Boolean indicating whether an alert should continue + matching subsequent sibling nodes. It will always be overridden + to true for the first-level route by the Prometheus operator. + type: boolean + groupBy: + description: List of labels to group by. Labels must not be repeated + (unique list). Special label "..." (aggregate by all possible + labels), if provided, must be the only element in the list. + items: + type: string + type: array + groupInterval: + description: 'How long to wait before sending an updated notification. + Must match the regular expression`^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$` + Example: "5m"' + type: string + groupWait: + description: 'How long to wait before sending the initial notification. + Must match the regular expression`^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$` + Example: "30s"' + type: string + matchers: + description: 'List of matchers that the alert''s labels should + match. For the first level route, the operator removes any existing + equality and regexp matcher on the `namespace` label and adds + a `namespace: ` matcher.' + items: + description: Matcher defines how to match on alert's labels. + properties: + matchType: + description: Match operation available with AlertManager + >= v0.22.0 and takes precedence over Regex (deprecated) + if non-empty. + enum: + - '!=' + - = + - =~ + - '!~' + type: string + name: + description: Label to match. + minLength: 1 + type: string + regex: + description: Whether to match on equality (false) or regular-expression + (true). Deprecated as of AlertManager >= v0.22.0 where + a user should use MatchType instead. + type: boolean + value: + description: Label value to match. + type: string + required: + - name + type: object + type: array + muteTimeIntervals: + description: 'Note: this comment applies to the field definition + above but appears below otherwise it gets included in the generated + manifest. CRD schema doesn''t support self-referential types + for now (see https://github.com/kubernetes/kubernetes/issues/62872). + We have to use an alternative type to circumvent the limitation. + The downside is that the Kube API can''t validate the data beyond + the fact that it is a valid JSON representation. MuteTimeIntervals + is a list of MuteTimeInterval names that will mute this route + when matched,' + items: + type: string + type: array + receiver: + description: Name of the receiver for this route. If not empty, + it should be listed in the `receivers` field. + type: string + repeatInterval: + description: 'How long to wait before repeating the last notification. + Must match the regular expression`^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$` + Example: "4h"' + type: string + routes: + description: Child routes. + items: + x-kubernetes-preserve-unknown-fields: true + type: array + type: object + type: object + required: + - spec + type: object + served: true + storage: true + - name: v1beta1 + schema: + openAPIV3Schema: + description: AlertmanagerConfig defines a namespaced AlertmanagerConfig to + be aggregated across multiple namespaces configuring one Alertmanager cluster. + 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: AlertmanagerConfigSpec is a specification of the desired + behavior of the Alertmanager configuration. By definition, the Alertmanager + configuration only applies to alerts for which the `namespace` label + is equal to the namespace of the AlertmanagerConfig resource. + properties: + inhibitRules: + description: List of inhibition rules. The rules will only apply to + alerts matching the resource's namespace. + items: + description: InhibitRule defines an inhibition rule that allows + to mute alerts when other alerts are already firing. See https://prometheus.io/docs/alerting/latest/configuration/#inhibit_rule + properties: + equal: + description: Labels that must have an equal value in the source + and target alert for the inhibition to take effect. + items: + type: string + type: array + sourceMatch: + description: Matchers for which one or more alerts have to exist + for the inhibition to take effect. The operator enforces that + the alert matches the resource's namespace. + items: + description: Matcher defines how to match on alert's labels. + properties: + matchType: + description: Match operator, one of `=` (equal to), `!=` + (not equal to), `=~` (regex match) or `!~` (not regex + match). Negative operators (`!=` and `!~`) require Alertmanager + >= v0.22.0. + enum: + - '!=' + - = + - =~ + - '!~' + type: string + name: + description: Label to match. + minLength: 1 + type: string + value: + description: Label value to match. + type: string + required: + - name + type: object + type: array + targetMatch: + description: Matchers that have to be fulfilled in the alerts + to be muted. The operator enforces that the alert matches + the resource's namespace. + items: + description: Matcher defines how to match on alert's labels. + properties: + matchType: + description: Match operator, one of `=` (equal to), `!=` + (not equal to), `=~` (regex match) or `!~` (not regex + match). Negative operators (`!=` and `!~`) require Alertmanager + >= v0.22.0. + enum: + - '!=' + - = + - =~ + - '!~' + type: string + name: + description: Label to match. + minLength: 1 + type: string + value: + description: Label value to match. + type: string + required: + - name type: object type: array - wechatConfigs: - description: List of WeChat configurations. + type: object + type: array + receivers: + description: List of receivers. + items: + description: Receiver defines one or more notification integrations. + properties: + discordConfigs: + description: List of Slack configurations. items: - description: WeChatConfig configures notifications via WeChat. - See https://prometheus.io/docs/alerting/latest/configuration/#wechat_config + description: DiscordConfig configures notifications via Discord. + See https://prometheus.io/docs/alerting/latest/configuration/#discord_config properties: - agentID: - type: string - apiSecret: - description: The secret's key that contains the WeChat - API key. The secret needs to be in the same namespace + apiURL: + description: The secret's key that contains the Discord + webhook URL. The secret needs to be in the same namespace as the AlertmanagerConfig object and accessible by the Prometheus Operator. properties: @@ -4041,12 +5038,6 @@ spec: - key type: object x-kubernetes-map-type: atomic - apiURL: - description: The WeChat API URL. - type: string - corpID: - description: The corp id for authentication. - type: string httpConfig: description: HTTP client configuration. properties: @@ -4145,21 +5136,17 @@ spec: key: description: The key of the secret to select from. Must be a valid secret key. + minLength: 1 type: string name: - description: 'Name of the referent. More info: - https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' + description: The name of the secret in the object's + namespace to select from. + minLength: 1 type: string - optional: - description: Specify whether the Secret or its - key must be defined - type: boolean required: - key + - name type: object - x-kubernetes-map-type: atomic followRedirects: description: FollowRedirects specifies whether the client should follow HTTP 3xx redirects. @@ -4396,229 +5383,16 @@ spec: type: object type: object message: - description: API request data as defined by the WeChat - API. - type: string - messageType: + description: The template of the message's body. type: string sendResolved: description: Whether or not to notify about resolved alerts. type: boolean - toParty: - type: string - toTag: - type: string - toUser: - type: string - type: object - type: array - required: - - name - type: object - type: array - route: - description: The Alertmanager route definition for alerts matching - the resource's namespace. If present, it will be added to the generated - Alertmanager configuration as a first-level route. - properties: - activeTimeIntervals: - description: ActiveTimeIntervals is a list of MuteTimeInterval - names when this route should be active. - items: - type: string - type: array - continue: - description: Boolean indicating whether an alert should continue - matching subsequent sibling nodes. It will always be overridden - to true for the first-level route by the Prometheus operator. - type: boolean - groupBy: - description: List of labels to group by. Labels must not be repeated - (unique list). Special label "..." (aggregate by all possible - labels), if provided, must be the only element in the list. - items: - type: string - type: array - groupInterval: - description: 'How long to wait before sending an updated notification. - Must match the regular expression`^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$` - Example: "5m"' - type: string - groupWait: - description: 'How long to wait before sending the initial notification. - Must match the regular expression`^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$` - Example: "30s"' - type: string - matchers: - description: 'List of matchers that the alert''s labels should - match. For the first level route, the operator removes any existing - equality and regexp matcher on the `namespace` label and adds - a `namespace: ` matcher.' - items: - description: Matcher defines how to match on alert's labels. - properties: - matchType: - description: Match operation available with AlertManager - >= v0.22.0 and takes precedence over Regex (deprecated) - if non-empty. - enum: - - '!=' - - = - - =~ - - '!~' - type: string - name: - description: Label to match. - minLength: 1 - type: string - regex: - description: Whether to match on equality (false) or regular-expression - (true). Deprecated as of AlertManager >= v0.22.0 where - a user should use MatchType instead. - type: boolean - value: - description: Label value to match. - type: string - required: - - name - type: object - type: array - muteTimeIntervals: - description: 'Note: this comment applies to the field definition - above but appears below otherwise it gets included in the generated - manifest. CRD schema doesn''t support self-referential types - for now (see https://github.com/kubernetes/kubernetes/issues/62872). - We have to use an alternative type to circumvent the limitation. - The downside is that the Kube API can''t validate the data beyond - the fact that it is a valid JSON representation. MuteTimeIntervals - is a list of MuteTimeInterval names that will mute this route - when matched,' - items: - type: string - type: array - receiver: - description: Name of the receiver for this route. If not empty, - it should be listed in the `receivers` field. - type: string - repeatInterval: - description: 'How long to wait before repeating the last notification. - Must match the regular expression`^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$` - Example: "4h"' - type: string - routes: - description: Child routes. - items: - x-kubernetes-preserve-unknown-fields: true - type: array - type: object - type: object - required: - - spec - type: object - served: true - storage: true - - name: v1beta1 - schema: - openAPIV3Schema: - description: AlertmanagerConfig defines a namespaced AlertmanagerConfig to - be aggregated across multiple namespaces configuring one Alertmanager cluster. - 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: AlertmanagerConfigSpec is a specification of the desired - behavior of the Alertmanager configuration. By definition, the Alertmanager - configuration only applies to alerts for which the `namespace` label - is equal to the namespace of the AlertmanagerConfig resource. - properties: - inhibitRules: - description: List of inhibition rules. The rules will only apply to - alerts matching the resource's namespace. - items: - description: InhibitRule defines an inhibition rule that allows - to mute alerts when other alerts are already firing. See https://prometheus.io/docs/alerting/latest/configuration/#inhibit_rule - properties: - equal: - description: Labels that must have an equal value in the source - and target alert for the inhibition to take effect. - items: - type: string - type: array - sourceMatch: - description: Matchers for which one or more alerts have to exist - for the inhibition to take effect. The operator enforces that - the alert matches the resource's namespace. - items: - description: Matcher defines how to match on alert's labels. - properties: - matchType: - description: Match operator, one of `=` (equal to), `!=` - (not equal to), `=~` (regex match) or `!~` (not regex - match). Negative operators (`!=` and `!~`) require Alertmanager - >= v0.22.0. - enum: - - '!=' - - = - - =~ - - '!~' - type: string - name: - description: Label to match. - minLength: 1 - type: string - value: - description: Label value to match. - type: string - required: - - name - type: object - type: array - targetMatch: - description: Matchers that have to be fulfilled in the alerts - to be muted. The operator enforces that the alert matches - the resource's namespace. - items: - description: Matcher defines how to match on alert's labels. - properties: - matchType: - description: Match operator, one of `=` (equal to), `!=` - (not equal to), `=~` (regex match) or `!~` (not regex - match). Negative operators (`!=` and `!~`) require Alertmanager - >= v0.22.0. - enum: - - '!=' - - = - - =~ - - '!~' - type: string - name: - description: Label to match. - minLength: 1 - type: string - value: - description: Label value to match. + title: + description: The template of the message's title. type: string - required: - - name type: object type: array - type: object - type: array - receivers: - description: List of receivers. - items: - description: Receiver defines one or more notification integrations. - properties: emailConfigs: description: List of Email configurations. items: diff --git a/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml b/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml index 1ee85780a8..080e33b877 100644 --- a/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml +++ b/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml @@ -211,6 +211,394 @@ spec: items: description: Receiver defines one or more notification integrations. properties: + discordConfigs: + description: List of Discord configurations. + items: + description: DiscordConfig configures notifications via Discord. + See https://prometheus.io/docs/alerting/latest/configuration/#discord_config + properties: + apiURL: + description: The secret's key that contains the Discord + webhook URL. The secret needs to be in the same namespace + as the AlertmanagerConfig object and accessible by the + Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its key + must be defined + type: boolean + required: + - key + type: object + httpConfig: + description: HTTP client configuration. + properties: + authorization: + description: Authorization header configuration for + the client. This is mutually exclusive with BasicAuth + and is only available starting from Alertmanager + v0.22+. + properties: + credentials: + description: Selects a key of a Secret in the + namespace that contains the credentials for + authentication. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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: + description: "Defines the authentication type. + The value is case-insensitive. \n \"Basic\" + is not a supported value. \n Default: \"Bearer\"" + type: string + type: object + basicAuth: + description: BasicAuth for the client. This is mutually + exclusive with Authorization. If both are defined, + BasicAuth takes precedence. + properties: + password: + description: The secret in the service monitor + namespace that contains the password for authentication. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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: The secret in the service monitor + namespace that contains the username for authentication. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + bearerTokenSecret: + description: The secret's key that contains the bearer + token to be used by the client for authentication. + The secret needs to be in the same namespace as + the AlertmanagerConfig object and accessible by + the Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + followRedirects: + description: FollowRedirects specifies whether the + client should follow HTTP 3xx redirects. + type: boolean + oauth2: + description: OAuth2 client credentials used to fetch + a token for the targets. + properties: + clientId: + description: The secret or configmap containing + the OAuth2 client id + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + clientSecret: + description: The secret containing the OAuth2 + client secret + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + endpointParams: + additionalProperties: + type: string + description: Parameters to append to the token + URL + type: object + scopes: + description: OAuth2 scopes used for the token + request + items: + type: string + type: array + tokenUrl: + description: The URL to fetch the token from + minLength: 1 + type: string + required: + - clientId + - clientSecret + - tokenUrl + type: object + proxyURL: + description: Optional proxy URL. + type: string + tlsConfig: + description: TLS configuration for the client. + properties: + ca: + description: Certificate authority used when verifying + server certificates. + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + cert: + description: Client certificate to present when + doing client-authentication. + properties: + configMap: + description: ConfigMap containing data to + use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + secret: + description: Secret containing data to use + for the targets. + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + insecureSkipVerify: + description: Disable target certificate validation. + type: boolean + keySecret: + description: Secret containing the client key + file for the targets. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + 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 + serverName: + description: Used to verify the hostname for the + targets. + type: string + type: object + type: object + message: + description: The template of the message's body. + type: string + sendResolved: + description: Whether or not to notify about resolved alerts. + type: boolean + title: + description: The template of the message's title. + type: string + required: + - apiURL + type: object + type: array emailConfigs: description: List of Email configurations. items: diff --git a/jsonnet/prometheus-operator/alertmanagerconfigs-crd.json b/jsonnet/prometheus-operator/alertmanagerconfigs-crd.json index 5725c5095f..10f2ea55e4 100644 --- a/jsonnet/prometheus-operator/alertmanagerconfigs-crd.json +++ b/jsonnet/prometheus-operator/alertmanagerconfigs-crd.json @@ -231,6 +231,407 @@ "items": { "description": "Receiver defines one or more notification integrations.", "properties": { + "discordConfigs": { + "description": "List of Discord configurations.", + "items": { + "description": "DiscordConfig configures notifications via Discord. See https://prometheus.io/docs/alerting/latest/configuration/#discord_config", + "properties": { + "apiURL": { + "description": "The secret's key that contains the Discord webhook URL. The secret needs to be in the same namespace as the AlertmanagerConfig object and accessible by the Prometheus Operator.", + "properties": { + "key": { + "description": "The key of the secret to select from. Must be a valid secret key.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "type": "string" + }, + "optional": { + "description": "Specify whether the Secret or its key must be defined", + "type": "boolean" + } + }, + "required": [ + "key" + ], + "type": "object" + }, + "httpConfig": { + "description": "HTTP client configuration.", + "properties": { + "authorization": { + "description": "Authorization header configuration for the client. This is mutually exclusive with BasicAuth and is only available starting from Alertmanager v0.22+.", + "properties": { + "credentials": { + "description": "Selects a key of a Secret in the namespace that contains the credentials for authentication.", + "properties": { + "key": { + "description": "The key of the secret to select from. Must be a valid secret key.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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": { + "description": "Defines the authentication type. The value is case-insensitive. \n \"Basic\" is not a supported value. \n Default: \"Bearer\"", + "type": "string" + } + }, + "type": "object" + }, + "basicAuth": { + "description": "BasicAuth for the client. This is mutually exclusive with Authorization. If both are defined, BasicAuth takes precedence.", + "properties": { + "password": { + "description": "The secret in the service monitor namespace that contains the password for authentication.", + "properties": { + "key": { + "description": "The key of the secret to select from. Must be a valid secret key.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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": "The secret in the service monitor namespace that contains the username for authentication.", + "properties": { + "key": { + "description": "The key of the secret to select from. Must be a valid secret key.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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" + }, + "bearerTokenSecret": { + "description": "The secret's key that contains the bearer token to be used by the client for authentication. The secret needs to be in the same namespace as the AlertmanagerConfig object and accessible by the Prometheus Operator.", + "properties": { + "key": { + "description": "The key of the secret to select from. Must be a valid secret key.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "type": "string" + }, + "optional": { + "description": "Specify whether the Secret or its key must be defined", + "type": "boolean" + } + }, + "required": [ + "key" + ], + "type": "object" + }, + "followRedirects": { + "description": "FollowRedirects specifies whether the client should follow HTTP 3xx redirects.", + "type": "boolean" + }, + "oauth2": { + "description": "OAuth2 client credentials used to fetch a token for the targets.", + "properties": { + "clientId": { + "description": "The secret or configmap containing the OAuth2 client id", + "properties": { + "configMap": { + "description": "ConfigMap containing data to use for the targets.", + "properties": { + "key": { + "description": "The key to select.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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" + }, + "secret": { + "description": "Secret containing data to use for the targets.", + "properties": { + "key": { + "description": "The key of the secret to select from. Must be a valid secret key.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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" + }, + "clientSecret": { + "description": "The secret containing the OAuth2 client secret", + "properties": { + "key": { + "description": "The key of the secret to select from. Must be a valid secret key.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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" + }, + "endpointParams": { + "additionalProperties": { + "type": "string" + }, + "description": "Parameters to append to the token URL", + "type": "object" + }, + "scopes": { + "description": "OAuth2 scopes used for the token request", + "items": { + "type": "string" + }, + "type": "array" + }, + "tokenUrl": { + "description": "The URL to fetch the token from", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "clientId", + "clientSecret", + "tokenUrl" + ], + "type": "object" + }, + "proxyURL": { + "description": "Optional proxy URL.", + "type": "string" + }, + "tlsConfig": { + "description": "TLS configuration for the client.", + "properties": { + "ca": { + "description": "Certificate authority used when verifying server certificates.", + "properties": { + "configMap": { + "description": "ConfigMap containing data to use for the targets.", + "properties": { + "key": { + "description": "The key to select.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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" + }, + "secret": { + "description": "Secret containing data to use for the targets.", + "properties": { + "key": { + "description": "The key of the secret to select from. Must be a valid secret key.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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" + }, + "cert": { + "description": "Client certificate to present when doing client-authentication.", + "properties": { + "configMap": { + "description": "ConfigMap containing data to use for the targets.", + "properties": { + "key": { + "description": "The key to select.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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" + }, + "secret": { + "description": "Secret containing data to use for the targets.", + "properties": { + "key": { + "description": "The key of the secret to select from. Must be a valid secret key.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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" + }, + "insecureSkipVerify": { + "description": "Disable target certificate validation.", + "type": "boolean" + }, + "keySecret": { + "description": "Secret containing the client key file for the targets.", + "properties": { + "key": { + "description": "The key of the secret to select from. Must be a valid secret key.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?", + "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" + }, + "serverName": { + "description": "Used to verify the hostname for the targets.", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "message": { + "description": "The template of the message's body.", + "type": "string" + }, + "sendResolved": { + "description": "Whether or not to notify about resolved alerts.", + "type": "boolean" + }, + "title": { + "description": "The template of the message's title.", + "type": "string" + } + }, + "required": [ + "apiURL" + ], + "type": "object" + }, + "type": "array" + }, "emailConfigs": { "description": "List of Email configurations.", "items": { diff --git a/jsonnet/prometheus-operator/alertmanagerconfigs-v1beta1-crd.libsonnet b/jsonnet/prometheus-operator/alertmanagerconfigs-v1beta1-crd.libsonnet index 9936c327cf..be49831bb8 100644 --- a/jsonnet/prometheus-operator/alertmanagerconfigs-v1beta1-crd.libsonnet +++ b/jsonnet/prometheus-operator/alertmanagerconfigs-v1beta1-crd.libsonnet @@ -106,6 +106,404 @@ items: { description: 'Receiver defines one or more notification integrations.', properties: { + discordConfigs: { + description: 'List of Slack configurations.', + items: { + description: 'DiscordConfig configures notifications via Discord. See https://prometheus.io/docs/alerting/latest/configuration/#discord_config', + properties: { + apiURL: { + description: "The secret's key that contains the Discord webhook URL. The secret needs to be in the same namespace as the AlertmanagerConfig object and accessible by the Prometheus Operator.", + properties: { + key: { + description: 'The key of the secret to select from. Must be a valid secret key.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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', + }, + httpConfig: { + description: 'HTTP client configuration.', + properties: { + authorization: { + description: 'Authorization header configuration for the client. This is mutually exclusive with BasicAuth and is only available starting from Alertmanager v0.22+.', + properties: { + credentials: { + description: 'Selects a key of a Secret in the namespace that contains the credentials for authentication.', + properties: { + key: { + description: 'The key of the secret to select from. Must be a valid secret key.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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: { + description: 'Defines the authentication type. The value is case-insensitive. \n "Basic" is not a supported value. \n Default: "Bearer"', + type: 'string', + }, + }, + type: 'object', + }, + basicAuth: { + description: 'BasicAuth for the client. This is mutually exclusive with Authorization. If both are defined, BasicAuth takes precedence.', + properties: { + password: { + description: 'The secret in the service monitor namespace that contains the password for authentication.', + properties: { + key: { + description: 'The key of the secret to select from. Must be a valid secret key.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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: 'The secret in the service monitor namespace that contains the username for authentication.', + properties: { + key: { + description: 'The key of the secret to select from. Must be a valid secret key.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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', + }, + bearerTokenSecret: { + description: "The secret's key that contains the bearer token to be used by the client for authentication. The secret needs to be in the same namespace as the AlertmanagerConfig object and accessible by the Prometheus Operator.", + properties: { + key: { + description: 'The key of the secret to select from. Must be a valid secret key.', + minLength: 1, + type: 'string', + }, + name: { + description: "The name of the secret in the object's namespace to select from.", + minLength: 1, + type: 'string', + }, + }, + required: [ + 'key', + 'name', + ], + type: 'object', + }, + followRedirects: { + description: 'FollowRedirects specifies whether the client should follow HTTP 3xx redirects.', + type: 'boolean', + }, + oauth2: { + description: 'OAuth2 client credentials used to fetch a token for the targets.', + properties: { + clientId: { + description: 'The secret or configmap containing the OAuth2 client id', + properties: { + configMap: { + description: 'ConfigMap containing data to use for the targets.', + properties: { + key: { + description: 'The key to select.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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', + }, + secret: { + description: 'Secret containing data to use for the targets.', + properties: { + key: { + description: 'The key of the secret to select from. Must be a valid secret key.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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', + }, + clientSecret: { + description: 'The secret containing the OAuth2 client secret', + properties: { + key: { + description: 'The key of the secret to select from. Must be a valid secret key.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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', + }, + endpointParams: { + additionalProperties: { + type: 'string', + }, + description: 'Parameters to append to the token URL', + type: 'object', + }, + scopes: { + description: 'OAuth2 scopes used for the token request', + items: { + type: 'string', + }, + type: 'array', + }, + tokenUrl: { + description: 'The URL to fetch the token from', + minLength: 1, + type: 'string', + }, + }, + required: [ + 'clientId', + 'clientSecret', + 'tokenUrl', + ], + type: 'object', + }, + proxyURL: { + description: 'Optional proxy URL.', + type: 'string', + }, + tlsConfig: { + description: 'TLS configuration for the client.', + properties: { + ca: { + description: 'Certificate authority used when verifying server certificates.', + properties: { + configMap: { + description: 'ConfigMap containing data to use for the targets.', + properties: { + key: { + description: 'The key to select.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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', + }, + secret: { + description: 'Secret containing data to use for the targets.', + properties: { + key: { + description: 'The key of the secret to select from. Must be a valid secret key.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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', + }, + cert: { + description: 'Client certificate to present when doing client-authentication.', + properties: { + configMap: { + description: 'ConfigMap containing data to use for the targets.', + properties: { + key: { + description: 'The key to select.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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', + }, + secret: { + description: 'Secret containing data to use for the targets.', + properties: { + key: { + description: 'The key of the secret to select from. Must be a valid secret key.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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', + }, + insecureSkipVerify: { + description: 'Disable target certificate validation.', + type: 'boolean', + }, + keySecret: { + description: 'Secret containing the client key file for the targets.', + properties: { + key: { + description: 'The key of the secret to select from. Must be a valid secret key.', + type: 'string', + }, + name: { + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?', + 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', + }, + serverName: { + description: 'Used to verify the hostname for the targets.', + type: 'string', + }, + }, + type: 'object', + }, + }, + type: 'object', + }, + message: { + description: "The template of the message's body.", + type: 'string', + }, + sendResolved: { + description: 'Whether or not to notify about resolved alerts.', + type: 'boolean', + }, + title: { + description: "The template of the message's title.", + type: 'string', + }, + }, + type: 'object', + }, + type: 'array', + }, emailConfigs: { description: 'List of Email configurations.', items: { diff --git a/pkg/alertmanager/amcfg.go b/pkg/alertmanager/amcfg.go index 45b9ed39c0..ac506d144d 100644 --- a/pkg/alertmanager/amcfg.go +++ b/pkg/alertmanager/amcfg.go @@ -508,7 +508,6 @@ func (cb *configBuilder) convertRoute(in *monitoringv1alpha1.Route, crKey types. // convertReceiver converts a monitoringv1alpha1.Receiver to an alertmanager.receiver func (cb *configBuilder) convertReceiver(ctx context.Context, in *monitoringv1alpha1.Receiver, crKey types.NamespacedName) (*receiver, error) { var pagerdutyConfigs []*pagerdutyConfig - if l := len(in.PagerDutyConfigs); l > 0 { pagerdutyConfigs = make([]*pagerdutyConfig, l) for i := range in.PagerDutyConfigs { @@ -520,6 +519,18 @@ func (cb *configBuilder) convertReceiver(ctx context.Context, in *monitoringv1al } } + var discordConfigs []*discordConfig + if l := len(in.DiscordConfigs); l > 0 { + discordConfigs = make([]*discordConfig, l) + for i := range in.DiscordConfigs { + receiver, err := cb.convertDiscordConfig(ctx, in.DiscordConfigs[i], crKey) + if err != nil { + return nil, errors.Wrapf(err, "DiscordConfig[%d]", i) + } + discordConfigs[i] = receiver + } + } + var slackConfigs []*slackConfig if l := len(in.SlackConfigs); l > 0 { slackConfigs = make([]*slackConfig, l) @@ -632,6 +643,7 @@ func (cb *configBuilder) convertReceiver(ctx context.Context, in *monitoringv1al Name: makeNamespacedString(in.Name, crKey), OpsgenieConfigs: opsgenieConfigs, PagerdutyConfigs: pagerdutyConfigs, + DiscordConfigs: discordConfigs, SlackConfigs: slackConfigs, WebhookConfigs: webhookConfigs, WeChatConfigs: weChatConfigs, @@ -677,6 +689,36 @@ func (cb *configBuilder) convertWebhookConfig(ctx context.Context, in monitoring return out, nil } +func (cb *configBuilder) convertDiscordConfig(ctx context.Context, in monitoringv1alpha1.DiscordConfig, crKey types.NamespacedName) (*discordConfig, error) { + out := &discordConfig{ + VSendResolved: in.SendResolved, + } + + if in.Title != nil && *in.Title != "" { + out.Title = *in.Title + } + + if in.Message != nil && *in.Message != "" { + out.Message = *in.Message + } + + url, err := cb.getValidURLFromSecret(ctx, crKey.Namespace, in.APIURL) + if err != nil { + return nil, err + } + out.WebhookURL = url + + if in.HTTPConfig != nil { + httpConfig, err := cb.convertHTTPConfig(ctx, *in.HTTPConfig, crKey) + if err != nil { + return nil, err + } + out.HTTPConfig = httpConfig + } + + return out, nil +} + func (cb *configBuilder) convertSlackConfig(ctx context.Context, in monitoringv1alpha1.SlackConfig, crKey types.NamespacedName) (*slackConfig, error) { out := &slackConfig{ VSendResolved: in.SendResolved, diff --git a/pkg/alertmanager/amcfg_test.go b/pkg/alertmanager/amcfg_test.go index 171da41edb..312a206472 100644 --- a/pkg/alertmanager/amcfg_test.go +++ b/pkg/alertmanager/amcfg_test.go @@ -3758,6 +3758,33 @@ templates: [] Templates: []string{}, }, }, + { + name: "Discord url field", + rawConf: []byte(`route: + receiver: "discord" +receivers: +- name: "discord" + discord_configs: + - webhook_url: http://example.com +templates: [] +`), + expected: &alertmanagerConfig{ + Route: &route{ + Receiver: "discord", + }, + Receivers: []*receiver{ + { + Name: "discord", + DiscordConfigs: []*discordConfig{ + { + WebhookURL: "http://example.com", + }, + }, + }, + }, + Templates: []string{}, + }, + }, } for _, tc := range testCase { diff --git a/pkg/alertmanager/operator.go b/pkg/alertmanager/operator.go index 89c892e0b6..13de073e86 100644 --- a/pkg/alertmanager/operator.go +++ b/pkg/alertmanager/operator.go @@ -1189,6 +1189,12 @@ func checkReceivers(ctx context.Context, amc *monitoringv1alpha1.AlertmanagerCon if err != nil { return err } + + err = checkDiscordConfigs(ctx, receiver.DiscordConfigs, amc.GetNamespace(), amcKey, store, amVersion) + if err != nil { + return err + } + err = checkSlackConfigs(ctx, receiver.SlackConfigs, amc.GetNamespace(), amcKey, store, amVersion) if err != nil { return err @@ -1309,6 +1315,36 @@ func checkOpsGenieResponder(opsgenieResponder []monitoringv1alpha1.OpsGenieConfi return nil } +func checkDiscordConfigs( + ctx context.Context, + configs []monitoringv1alpha1.DiscordConfig, + namespace string, + key string, + store *assets.Store, + amVersion semver.Version, +) error { + if amVersion.LT(semver.MustParse("0.25.0")) { + return fmt.Errorf(`discordConfigs' is available in Alertmanager >= 0.25.0 only - current %s`, amVersion) + } + + for i, config := range configs { + if err := checkHTTPConfig(config.HTTPConfig, amVersion); err != nil { + return err + } + + discordConfigKey := fmt.Sprintf("%s/discord/%d", key, i) + if err := configureHTTPConfigInStore(ctx, config.HTTPConfig, namespace, discordConfigKey, store); err != nil { + return err + } + + if _, err := store.GetSecretKey(ctx, namespace, config.APIURL); err != nil { + return fmt.Errorf("failed to retrieve API URL: %w", err) + } + } + + return nil +} + func checkSlackConfigs( ctx context.Context, configs []monitoringv1alpha1.SlackConfig, @@ -1522,7 +1558,6 @@ func checkTelegramConfigs( if len(configs) == 0 { return nil } - if amVersion.LT(semver.MustParse("0.24.0")) { return fmt.Errorf(`telegramConfigs' is available in Alertmanager >= 0.24.0 only - current %s`, amVersion) } diff --git a/pkg/alertmanager/validation/v1alpha1/validation.go b/pkg/alertmanager/validation/v1alpha1/validation.go index 875cce3c1b..2595463098 100644 --- a/pkg/alertmanager/validation/v1alpha1/validation.go +++ b/pkg/alertmanager/validation/v1alpha1/validation.go @@ -96,6 +96,9 @@ func validateReceivers(receivers []monitoringv1alpha1.Receiver) (map[string]stru return nil, errors.Wrapf(err, "failed to validate 'telegramConfig' - receiver %s", receiver.Name) } + if err := validateDiscordConfigs(receiver.DiscordConfigs); err != nil { + return nil, errors.Wrapf(err, "failed to validate 'discordConfig' - receiver %s", receiver.Name) + } } return receiverNames, nil @@ -137,6 +140,15 @@ func validateOpsGenieConfigs(configs []monitoringv1alpha1.OpsGenieConfig) error return nil } +func validateDiscordConfigs(configs []monitoringv1alpha1.DiscordConfig) error { + for _, config := range configs { + if err := config.HTTPConfig.Validate(); err != nil { + return err + } + } + return nil +} + func validateSlackConfigs(configs []monitoringv1alpha1.SlackConfig) error { for _, config := range configs { if err := config.Validate(); err != nil { diff --git a/pkg/alertmanager/validation/v1beta1/validation.go b/pkg/alertmanager/validation/v1beta1/validation.go index 254ba6b86e..3ff5ab35bd 100644 --- a/pkg/alertmanager/validation/v1beta1/validation.go +++ b/pkg/alertmanager/validation/v1beta1/validation.go @@ -91,6 +91,10 @@ func validateReceivers(receivers []monitoringv1beta1.Receiver) (map[string]struc if err := validateSnsConfigs(receiver.SNSConfigs); err != nil { return nil, errors.Wrapf(err, "failed to validate 'snsConfig' - receiver %s", receiver.Name) } + + if err := validateDiscordConfigs(receiver.DiscordConfigs); err != nil { + return nil, errors.Wrapf(err, "failed to validate 'discordConfig' - receiver %s", receiver.Name) + } } return receiverNames, nil @@ -276,6 +280,15 @@ func validateSnsConfigs(configs []monitoringv1beta1.SNSConfig) error { return nil } +func validateDiscordConfigs(configs []monitoringv1beta1.DiscordConfig) error { + for _, config := range configs { + if err := config.HTTPConfig.Validate(); err != nil { + return err + } + } + return nil +} + // validateAlertManagerRoutes verifies that the given route and all its children are semantically valid. // because of the self-referential issues mentioned in https://github.com/kubernetes/kubernetes/issues/62872 // it is not currently possible to apply OpenAPI validation to a v1beta1.Route diff --git a/pkg/apis/monitoring/v1alpha1/alertmanager_config_types.go b/pkg/apis/monitoring/v1alpha1/alertmanager_config_types.go index 37cd9816e4..f2a3a06c00 100644 --- a/pkg/apis/monitoring/v1alpha1/alertmanager_config_types.go +++ b/pkg/apis/monitoring/v1alpha1/alertmanager_config_types.go @@ -158,6 +158,9 @@ type Receiver struct { OpsGenieConfigs []OpsGenieConfig `json:"opsgenieConfigs,omitempty"` // List of PagerDuty configurations. PagerDutyConfigs []PagerDutyConfig `json:"pagerdutyConfigs,omitempty"` + // List of Discord configurations. + // +optional + DiscordConfigs []DiscordConfig `json:"discordConfigs,omitempty"` // List of Slack configurations. SlackConfigs []SlackConfig `json:"slackConfigs,omitempty"` // List of webhook configurations. @@ -256,6 +259,32 @@ type PagerDutyLinkConfig struct { Text string `json:"alt,omitempty"` } +// DiscordConfig configures notifications via Discord. +// See https://prometheus.io/docs/alerting/latest/configuration/#discord_config +type DiscordConfig struct { + // Whether or not to notify about resolved alerts. + // +optional + SendResolved *bool `json:"sendResolved,omitempty"` + + // The secret's key that contains the Discord webhook URL. + // The secret needs to be in the same namespace as the AlertmanagerConfig + // object and accessible by the Prometheus Operator. + // +required + APIURL v1.SecretKeySelector `json:"apiURL"` + + // The template of the message's title. + // +optional + Title *string `json:"title,omitempty"` + + // The template of the message's body. + // +optional + Message *string `json:"message,omitempty"` + + // HTTP client configuration. + // +optional + HTTPConfig *HTTPConfig `json:"httpConfig,omitempty"` +} + // SlackConfig configures notifications via Slack. // See https://prometheus.io/docs/alerting/latest/configuration/#slack_config type SlackConfig struct { diff --git a/pkg/apis/monitoring/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/monitoring/v1alpha1/zz_generated.deepcopy.go index 956e27ccb8..cb9c90dd32 100644 --- a/pkg/apis/monitoring/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/monitoring/v1alpha1/zz_generated.deepcopy.go @@ -127,6 +127,42 @@ func (in *DayOfMonthRange) DeepCopy() *DayOfMonthRange { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DiscordConfig) DeepCopyInto(out *DiscordConfig) { + *out = *in + if in.SendResolved != nil { + in, out := &in.SendResolved, &out.SendResolved + *out = new(bool) + **out = **in + } + in.APIURL.DeepCopyInto(&out.APIURL) + if in.Title != nil { + in, out := &in.Title, &out.Title + *out = new(string) + **out = **in + } + if in.Message != nil { + in, out := &in.Message, &out.Message + *out = new(string) + **out = **in + } + if in.HTTPConfig != nil { + in, out := &in.HTTPConfig, &out.HTTPConfig + *out = new(HTTPConfig) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscordConfig. +func (in *DiscordConfig) DeepCopy() *DiscordConfig { + if in == nil { + return nil + } + out := new(DiscordConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *EmailConfig) DeepCopyInto(out *EmailConfig) { *out = *in @@ -614,6 +650,13 @@ func (in *Receiver) DeepCopyInto(out *Receiver) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.DiscordConfigs != nil { + in, out := &in.DiscordConfigs, &out.DiscordConfigs + *out = make([]DiscordConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.SlackConfigs != nil { in, out := &in.SlackConfigs, &out.SlackConfigs *out = make([]SlackConfig, len(*in)) diff --git a/pkg/apis/monitoring/v1beta1/alertmanager_config_types.go b/pkg/apis/monitoring/v1beta1/alertmanager_config_types.go index 8035fb08d6..2b8c69d584 100644 --- a/pkg/apis/monitoring/v1beta1/alertmanager_config_types.go +++ b/pkg/apis/monitoring/v1beta1/alertmanager_config_types.go @@ -22,6 +22,7 @@ import ( monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" + v1 "k8s.io/api/core/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -157,6 +158,8 @@ type Receiver struct { // List of PagerDuty configurations. PagerDutyConfigs []PagerDutyConfig `json:"pagerdutyConfigs,omitempty"` // List of Slack configurations. + DiscordConfigs []DiscordConfig `json:"discordConfigs,omitempty"` + // List of Slack configurations. SlackConfigs []SlackConfig `json:"slackConfigs,omitempty"` // List of webhook configurations. WebhookConfigs []WebhookConfig `json:"webhookConfigs,omitempty"` @@ -254,6 +257,32 @@ type PagerDutyLinkConfig struct { Text string `json:"alt,omitempty"` } +// DiscordConfig configures notifications via Discord. +// See https://prometheus.io/docs/alerting/latest/configuration/#discord_config +type DiscordConfig struct { + // Whether or not to notify about resolved alerts. + // +optional + SendResolved *bool `json:"sendResolved,omitempty"` + + // The secret's key that contains the Discord webhook URL. + // The secret needs to be in the same namespace as the AlertmanagerConfig + // object and accessible by the Prometheus Operator. + // +required + APIURL v1.SecretKeySelector `json:"apiURL,omitempty"` + + // The template of the message's title. + // +optional + Title *string `json:"title,omitempty"` + + // The template of the message's body. + // +optional + Message *string `json:"message,omitempty"` + + // HTTP client configuration. + // +optional + HTTPConfig *HTTPConfig `json:"httpConfig,omitempty"` +} + // SlackConfig configures notifications via Slack. // See https://prometheus.io/docs/alerting/latest/configuration/#slack_config type SlackConfig struct { diff --git a/pkg/apis/monitoring/v1beta1/conversion_from.go b/pkg/apis/monitoring/v1beta1/conversion_from.go index f07230e90a..2e325ed2b0 100644 --- a/pkg/apis/monitoring/v1beta1/conversion_from.go +++ b/pkg/apis/monitoring/v1beta1/conversion_from.go @@ -257,6 +257,16 @@ func convertPagerDutyConfigFrom(in v1alpha1.PagerDutyConfig) PagerDutyConfig { } } +func convertDiscordConfigFrom(in v1alpha1.DiscordConfig) DiscordConfig { + return DiscordConfig{ + APIURL: in.APIURL, + HTTPConfig: convertHTTPConfigFrom(in.HTTPConfig), + Title: in.Title, + Message: in.Message, + SendResolved: in.SendResolved, + } +} + func convertSlackFieldsFrom(in []v1alpha1.SlackField) []SlackField { out := make([]SlackField, len(in)) @@ -454,6 +464,13 @@ func (dst *AlertmanagerConfig) ConvertFrom(srcRaw conversion.Hub) error { ) } + for _, in := range in.DiscordConfigs { + out.DiscordConfigs = append( + out.DiscordConfigs, + convertDiscordConfigFrom(in), + ) + } + for _, in := range in.SlackConfigs { out.SlackConfigs = append( out.SlackConfigs, diff --git a/pkg/apis/monitoring/v1beta1/conversion_to.go b/pkg/apis/monitoring/v1beta1/conversion_to.go index edeab0a4ab..37270fb857 100644 --- a/pkg/apis/monitoring/v1beta1/conversion_to.go +++ b/pkg/apis/monitoring/v1beta1/conversion_to.go @@ -253,6 +253,16 @@ func convertPagerDutyConfigTo(in PagerDutyConfig) v1alpha1.PagerDutyConfig { } } +func convertDiscordConfigTo(in DiscordConfig) v1alpha1.DiscordConfig { + return v1alpha1.DiscordConfig{ + APIURL: in.APIURL, + HTTPConfig: convertHTTPConfigTo(in.HTTPConfig), + Title: in.Title, + Message: in.Message, + SendResolved: in.SendResolved, + } +} + func convertSlackFieldsTo(in []SlackField) []v1alpha1.SlackField { out := make([]v1alpha1.SlackField, len(in)) @@ -450,6 +460,13 @@ func (src *AlertmanagerConfig) ConvertTo(dstRaw conversion.Hub) error { ) } + for _, in := range in.DiscordConfigs { + out.DiscordConfigs = append( + out.DiscordConfigs, + convertDiscordConfigTo(in), + ) + } + for _, in := range in.SlackConfigs { out.SlackConfigs = append( out.SlackConfigs, diff --git a/pkg/apis/monitoring/v1beta1/zz_generated.deepcopy.go b/pkg/apis/monitoring/v1beta1/zz_generated.deepcopy.go index a62a633cb1..cb7dd4bc84 100644 --- a/pkg/apis/monitoring/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/monitoring/v1beta1/zz_generated.deepcopy.go @@ -126,6 +126,42 @@ func (in *DayOfMonthRange) DeepCopy() *DayOfMonthRange { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DiscordConfig) DeepCopyInto(out *DiscordConfig) { + *out = *in + if in.SendResolved != nil { + in, out := &in.SendResolved, &out.SendResolved + *out = new(bool) + **out = **in + } + in.APIURL.DeepCopyInto(&out.APIURL) + if in.Title != nil { + in, out := &in.Title, &out.Title + *out = new(string) + **out = **in + } + if in.Message != nil { + in, out := &in.Message, &out.Message + *out = new(string) + **out = **in + } + if in.HTTPConfig != nil { + in, out := &in.HTTPConfig, &out.HTTPConfig + *out = new(HTTPConfig) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscordConfig. +func (in *DiscordConfig) DeepCopy() *DiscordConfig { + if in == nil { + return nil + } + out := new(DiscordConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *EmailConfig) DeepCopyInto(out *EmailConfig) { *out = *in @@ -463,6 +499,13 @@ func (in *Receiver) DeepCopyInto(out *Receiver) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.DiscordConfigs != nil { + in, out := &in.DiscordConfigs, &out.DiscordConfigs + *out = make([]DiscordConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.SlackConfigs != nil { in, out := &in.SlackConfigs, &out.SlackConfigs *out = make([]SlackConfig, len(*in)) diff --git a/pkg/client/applyconfiguration/monitoring/v1alpha1/discordconfig.go b/pkg/client/applyconfiguration/monitoring/v1alpha1/discordconfig.go new file mode 100644 index 0000000000..eb8c269148 --- /dev/null +++ b/pkg/client/applyconfiguration/monitoring/v1alpha1/discordconfig.go @@ -0,0 +1,77 @@ +// Copyright The prometheus-operator Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1 "k8s.io/api/core/v1" +) + +// DiscordConfigApplyConfiguration represents an declarative configuration of the DiscordConfig type for use +// with apply. +type DiscordConfigApplyConfiguration struct { + SendResolved *bool `json:"sendResolved,omitempty"` + APIURL *v1.SecretKeySelector `json:"apiURL,omitempty"` + Title *string `json:"title,omitempty"` + Message *string `json:"message,omitempty"` + HTTPConfig *HTTPConfigApplyConfiguration `json:"httpConfig,omitempty"` +} + +// DiscordConfigApplyConfiguration constructs an declarative configuration of the DiscordConfig type for use with +// apply. +func DiscordConfig() *DiscordConfigApplyConfiguration { + return &DiscordConfigApplyConfiguration{} +} + +// WithSendResolved sets the SendResolved field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SendResolved field is set to the value of the last call. +func (b *DiscordConfigApplyConfiguration) WithSendResolved(value bool) *DiscordConfigApplyConfiguration { + b.SendResolved = &value + return b +} + +// WithAPIURL sets the APIURL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIURL field is set to the value of the last call. +func (b *DiscordConfigApplyConfiguration) WithAPIURL(value v1.SecretKeySelector) *DiscordConfigApplyConfiguration { + b.APIURL = &value + return b +} + +// WithTitle sets the Title field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Title field is set to the value of the last call. +func (b *DiscordConfigApplyConfiguration) WithTitle(value string) *DiscordConfigApplyConfiguration { + b.Title = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *DiscordConfigApplyConfiguration) WithMessage(value string) *DiscordConfigApplyConfiguration { + b.Message = &value + return b +} + +// WithHTTPConfig sets the HTTPConfig field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the HTTPConfig field is set to the value of the last call. +func (b *DiscordConfigApplyConfiguration) WithHTTPConfig(value *HTTPConfigApplyConfiguration) *DiscordConfigApplyConfiguration { + b.HTTPConfig = value + return b +} diff --git a/pkg/client/applyconfiguration/monitoring/v1alpha1/receiver.go b/pkg/client/applyconfiguration/monitoring/v1alpha1/receiver.go index e82fe99856..3309d71fd2 100644 --- a/pkg/client/applyconfiguration/monitoring/v1alpha1/receiver.go +++ b/pkg/client/applyconfiguration/monitoring/v1alpha1/receiver.go @@ -22,6 +22,7 @@ type ReceiverApplyConfiguration struct { Name *string `json:"name,omitempty"` OpsGenieConfigs []OpsGenieConfigApplyConfiguration `json:"opsgenieConfigs,omitempty"` PagerDutyConfigs []PagerDutyConfigApplyConfiguration `json:"pagerdutyConfigs,omitempty"` + DiscordConfigs []DiscordConfigApplyConfiguration `json:"discordConfigs,omitempty"` SlackConfigs []SlackConfigApplyConfiguration `json:"slackConfigs,omitempty"` WebhookConfigs []WebhookConfigApplyConfiguration `json:"webhookConfigs,omitempty"` WeChatConfigs []WeChatConfigApplyConfiguration `json:"wechatConfigs,omitempty"` @@ -72,6 +73,19 @@ func (b *ReceiverApplyConfiguration) WithPagerDutyConfigs(values ...*PagerDutyCo return b } +// WithDiscordConfigs adds the given value to the DiscordConfigs field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the DiscordConfigs field. +func (b *ReceiverApplyConfiguration) WithDiscordConfigs(values ...*DiscordConfigApplyConfiguration) *ReceiverApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithDiscordConfigs") + } + b.DiscordConfigs = append(b.DiscordConfigs, *values[i]) + } + return b +} + // WithSlackConfigs adds the given value to the SlackConfigs field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the SlackConfigs field. diff --git a/pkg/client/applyconfiguration/monitoring/v1beta1/discordconfig.go b/pkg/client/applyconfiguration/monitoring/v1beta1/discordconfig.go new file mode 100644 index 0000000000..5e068a527e --- /dev/null +++ b/pkg/client/applyconfiguration/monitoring/v1beta1/discordconfig.go @@ -0,0 +1,77 @@ +// Copyright The prometheus-operator Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1 "k8s.io/api/core/v1" +) + +// DiscordConfigApplyConfiguration represents an declarative configuration of the DiscordConfig type for use +// with apply. +type DiscordConfigApplyConfiguration struct { + SendResolved *bool `json:"sendResolved,omitempty"` + APIURL *v1.SecretKeySelector `json:"apiURL,omitempty"` + Title *string `json:"title,omitempty"` + Message *string `json:"message,omitempty"` + HTTPConfig *HTTPConfigApplyConfiguration `json:"httpConfig,omitempty"` +} + +// DiscordConfigApplyConfiguration constructs an declarative configuration of the DiscordConfig type for use with +// apply. +func DiscordConfig() *DiscordConfigApplyConfiguration { + return &DiscordConfigApplyConfiguration{} +} + +// WithSendResolved sets the SendResolved field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SendResolved field is set to the value of the last call. +func (b *DiscordConfigApplyConfiguration) WithSendResolved(value bool) *DiscordConfigApplyConfiguration { + b.SendResolved = &value + return b +} + +// WithAPIURL sets the APIURL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIURL field is set to the value of the last call. +func (b *DiscordConfigApplyConfiguration) WithAPIURL(value v1.SecretKeySelector) *DiscordConfigApplyConfiguration { + b.APIURL = &value + return b +} + +// WithTitle sets the Title field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Title field is set to the value of the last call. +func (b *DiscordConfigApplyConfiguration) WithTitle(value string) *DiscordConfigApplyConfiguration { + b.Title = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *DiscordConfigApplyConfiguration) WithMessage(value string) *DiscordConfigApplyConfiguration { + b.Message = &value + return b +} + +// WithHTTPConfig sets the HTTPConfig field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the HTTPConfig field is set to the value of the last call. +func (b *DiscordConfigApplyConfiguration) WithHTTPConfig(value *HTTPConfigApplyConfiguration) *DiscordConfigApplyConfiguration { + b.HTTPConfig = value + return b +} diff --git a/pkg/client/applyconfiguration/monitoring/v1beta1/receiver.go b/pkg/client/applyconfiguration/monitoring/v1beta1/receiver.go index 09d47db997..e0912469a3 100644 --- a/pkg/client/applyconfiguration/monitoring/v1beta1/receiver.go +++ b/pkg/client/applyconfiguration/monitoring/v1beta1/receiver.go @@ -22,6 +22,7 @@ type ReceiverApplyConfiguration struct { Name *string `json:"name,omitempty"` OpsGenieConfigs []OpsGenieConfigApplyConfiguration `json:"opsgenieConfigs,omitempty"` PagerDutyConfigs []PagerDutyConfigApplyConfiguration `json:"pagerdutyConfigs,omitempty"` + DiscordConfigs []DiscordConfigApplyConfiguration `json:"discordConfigs,omitempty"` SlackConfigs []SlackConfigApplyConfiguration `json:"slackConfigs,omitempty"` WebhookConfigs []WebhookConfigApplyConfiguration `json:"webhookConfigs,omitempty"` WeChatConfigs []WeChatConfigApplyConfiguration `json:"wechatConfigs,omitempty"` @@ -72,6 +73,19 @@ func (b *ReceiverApplyConfiguration) WithPagerDutyConfigs(values ...*PagerDutyCo return b } +// WithDiscordConfigs adds the given value to the DiscordConfigs field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the DiscordConfigs field. +func (b *ReceiverApplyConfiguration) WithDiscordConfigs(values ...*DiscordConfigApplyConfiguration) *ReceiverApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithDiscordConfigs") + } + b.DiscordConfigs = append(b.DiscordConfigs, *values[i]) + } + return b +} + // WithSlackConfigs adds the given value to the SlackConfigs field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the SlackConfigs field. diff --git a/pkg/client/applyconfiguration/utils.go b/pkg/client/applyconfiguration/utils.go index 5e04ed1838..54b02d9e2c 100644 --- a/pkg/client/applyconfiguration/utils.go +++ b/pkg/client/applyconfiguration/utils.go @@ -189,6 +189,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &monitoringv1alpha1.AlertmanagerConfigSpecApplyConfiguration{} case v1alpha1.SchemeGroupVersion.WithKind("DayOfMonthRange"): return &monitoringv1alpha1.DayOfMonthRangeApplyConfiguration{} + case v1alpha1.SchemeGroupVersion.WithKind("DiscordConfig"): + return &monitoringv1alpha1.DiscordConfigApplyConfiguration{} case v1alpha1.SchemeGroupVersion.WithKind("EmailConfig"): return &monitoringv1alpha1.EmailConfigApplyConfiguration{} case v1alpha1.SchemeGroupVersion.WithKind("FileSDConfig"): @@ -261,6 +263,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &monitoringv1beta1.AlertmanagerConfigSpecApplyConfiguration{} case v1beta1.SchemeGroupVersion.WithKind("DayOfMonthRange"): return &monitoringv1beta1.DayOfMonthRangeApplyConfiguration{} + case v1beta1.SchemeGroupVersion.WithKind("DiscordConfig"): + return &monitoringv1beta1.DiscordConfigApplyConfiguration{} case v1beta1.SchemeGroupVersion.WithKind("EmailConfig"): return &monitoringv1beta1.EmailConfigApplyConfiguration{} case v1beta1.SchemeGroupVersion.WithKind("HTTPConfig"):