mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Add MutatingWebhookConfiguration api
Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
parent
9ea01a4062
commit
626fe1a890
@ -0,0 +1,240 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import type { LabelSelector, NamespaceScopedMetadata } from "../kube-object";
|
||||
import { KubeObject } from "../kube-object";
|
||||
|
||||
interface MutatingWebhookConfigurationStatus {
|
||||
// The latest generation observed by the webhook.
|
||||
observedGeneration?: number;
|
||||
|
||||
// Conditions for the MutatingWebhookConfiguration.
|
||||
conditions?: {
|
||||
// Type of MutatingWebhookConfiguration condition.
|
||||
type: string;
|
||||
|
||||
// Status of the condition, one of True, False, Unknown.
|
||||
status: string;
|
||||
|
||||
// Reason for the current status of the condition.
|
||||
reason?: string;
|
||||
|
||||
// Message describing the current status of the condition.
|
||||
message?: string;
|
||||
}[];
|
||||
|
||||
// Webhooks that failed to be registered.
|
||||
failedWebhooks?: {
|
||||
// Name of the failed webhook.
|
||||
name: string;
|
||||
|
||||
// Failure type of the webhook.
|
||||
failureType: string;
|
||||
|
||||
// Reason for the failure.
|
||||
reason?: string;
|
||||
|
||||
// Message describing the failure.
|
||||
message?: string;
|
||||
}[];
|
||||
|
||||
// Webhooks that are not registered yet.
|
||||
webhookConfigurations?: {
|
||||
// Name of the webhook configuration.
|
||||
name: string;
|
||||
|
||||
// Namespace of the webhook configuration.
|
||||
namespace: string;
|
||||
|
||||
// API version of the webhook configuration.
|
||||
apiVersion: string;
|
||||
|
||||
// Kind of the webhook configuration.
|
||||
kind: string;
|
||||
|
||||
// Object reference to the webhook configuration.
|
||||
objectReference?: {
|
||||
// API version of the object reference.
|
||||
apiVersion?: string;
|
||||
|
||||
// Kind of the object reference.
|
||||
kind: string;
|
||||
|
||||
// Name of the object reference.
|
||||
name: string;
|
||||
|
||||
// Namespace of the object reference.
|
||||
namespace?: string;
|
||||
|
||||
// UID of the object reference.
|
||||
uid?: string;
|
||||
};
|
||||
}[];
|
||||
}
|
||||
|
||||
interface WebhookClientConfig {
|
||||
// `url` gives the location of the webhook
|
||||
url?: string;
|
||||
|
||||
// `service` is a reference to the service for this webhook. Either `service` or `url` must be specified.
|
||||
service?: ServiceReference;
|
||||
|
||||
// `caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate.
|
||||
// If unspecified, system trust roots on the apiserver are used.
|
||||
caBundle?: string;
|
||||
}
|
||||
|
||||
interface RuleWithOperations {
|
||||
// APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one.
|
||||
apiGroups: string[];
|
||||
|
||||
// APIVersions is the API versions the resources belong to. '*' is all versions.
|
||||
apiVersions?: string[];
|
||||
|
||||
// Resources is a list of resources this rule applies to.
|
||||
// For example: 'pods' means pods.
|
||||
// '*' means all resources, but not subresources.
|
||||
// 'pods/' means all subresources of pods.
|
||||
// '*/scale' means all scale subresources. Allowed values are "Resource" / "Resource/Scale" / "Resource/Status".
|
||||
resources: string[];
|
||||
|
||||
// Operations is a list of operations this rule applies to.
|
||||
// The valid values are: "CREATE" / "UPDATE" / "DELETE" / "CONNECT".
|
||||
operations: string[];
|
||||
|
||||
// Scope specifies the scope of this rule. Valid values are "Cluster" / "Namespace".
|
||||
// Default is "Cluster".
|
||||
scope?: string;
|
||||
}
|
||||
|
||||
interface MutatingWebhook {
|
||||
// The name of the webhook configuration.
|
||||
name: string;
|
||||
|
||||
// ClientConfig defines how to communicate with the hook.
|
||||
clientConfig: WebhookClientConfig;
|
||||
|
||||
// Rules describes what operations on what resources/subresources the webhook cares about.
|
||||
// The webhook cares about an operation if it matches _any_ Rule.
|
||||
rules?: RuleWithOperations[];
|
||||
|
||||
// AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions
|
||||
// the webhook expects. API server will try to use first version in the list which it
|
||||
// supports. If none of the versions specified in this list supported by API server,
|
||||
// validation will fail for this object.
|
||||
admissionReviewVersions?: string[];
|
||||
|
||||
// TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored
|
||||
// or the API call will fail depending on the failure policy.
|
||||
timeoutSeconds?: number;
|
||||
|
||||
// FailurePolicy specifies how unrecognized errors from the webhook are handled - allowed values are Ignore or Fail.
|
||||
// Defaults to Fail.
|
||||
failurePolicy?: string;
|
||||
|
||||
// matchPolicy defines how the "rules" list is used to match incoming requests. Allowed values are "Exact" or "Equivalent".
|
||||
// - Exact: match a request only if it exactly matches a specified rule.
|
||||
// - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version.
|
||||
// Defaults to "Equivalent".
|
||||
matchPolicy?: string;
|
||||
|
||||
// NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object
|
||||
// matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels.
|
||||
// If both the object and the webhook configuration specify namespaceSelector, they must match.
|
||||
namespaceSelector?: LabelSelector;
|
||||
|
||||
// ObjectSelector decides whether to run the webhook based on if the object has matching labels.
|
||||
// objectSelector and namespaceSelector are ANDed. An empty objectSelector matches all objects.
|
||||
// A null objectSelector matches no objects.
|
||||
objectSelector?: LabelSelector;
|
||||
|
||||
// SideEffects states whether this webhookk should run when no mutating or validating webhook
|
||||
// needs to run. This should be false when the webhook only applies to resources that have
|
||||
// the sideEffects field set to None. Defaults to true.
|
||||
sideEffects?: string;
|
||||
}
|
||||
|
||||
interface ServiceReference {
|
||||
// `namespace` is the namespace of the service.
|
||||
namespace: string;
|
||||
|
||||
// `name` is the name of the service.
|
||||
name: string;
|
||||
|
||||
// `path` is an optional URL path which will be sent in any request to this service.
|
||||
path?: string;
|
||||
|
||||
// `port` is an optional service port which will be used when accessing the service.
|
||||
port?: number | string;
|
||||
}
|
||||
|
||||
interface MutatingWebhookConfigurationSpec {
|
||||
// Webhooks to be applied.
|
||||
webhooks: MutatingWebhook[];
|
||||
|
||||
// CABundle is a PEM encoded CA bundle which will be used to validate webhook's server certificate.
|
||||
// If unspecified, system trust roots on the apiserver are used.
|
||||
caBundle?: string;
|
||||
|
||||
// Determines the admission success of the MutatingWebhook. Allowed values are "Ignore"/"Fail"/"DryRun".
|
||||
// If Ignore, any webhook failure or timeout will be ignored and the API request will be allowed to continue
|
||||
// as if the webhook was not configured. You should use this option with caution and only for debugging
|
||||
// purposes. If Fail, any webhook failure or timeout will cause the API request to fail. If DryRun,
|
||||
// MutatingWebhook will be executed without really modifying the object. This is useful for testing webhook
|
||||
// without really modifying objects.
|
||||
// Defaults to "Fail".
|
||||
failurePolicy?: string;
|
||||
|
||||
// Indicates whether the webhook should be called on the request before or after the object mutation.
|
||||
// Allowed values are "None"/"Before"/"After". Mutating admission webhook and validating admission
|
||||
// webhook can be configured to perform the mutation changes before or after the resource mutation respectively.
|
||||
// If no phases are specified, the webhook is assumed to support all phases.
|
||||
sideEffects?: string;
|
||||
|
||||
// ReinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission
|
||||
// evaluation. Allowed values are "Never"/"IfNeeded".
|
||||
reinvocationPolicy?: string;
|
||||
}
|
||||
|
||||
export class MutatingWebhookConfiguration extends KubeObject<
|
||||
NamespaceScopedMetadata,
|
||||
MutatingWebhookConfigurationStatus,
|
||||
MutatingWebhookConfigurationSpec
|
||||
> {
|
||||
static kind = "MutatingWebhookConfiguration";
|
||||
static namespaced = true;
|
||||
static apiBase = "/apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations";
|
||||
|
||||
getWebhooks(): MutatingWebhook[] {
|
||||
return this.spec?.webhooks ?? [];
|
||||
}
|
||||
|
||||
getClientConfig(serviceName: string, serviceNamespace: string): WebhookClientConfig | undefined {
|
||||
const webhooks = this.getWebhooks();
|
||||
|
||||
for (const webhook of webhooks) {
|
||||
if (webhook.clientConfig.service?.name === serviceName && webhook.clientConfig.service?.namespace === serviceNamespace) {
|
||||
return webhook.clientConfig;
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
getCaBundle(): string | undefined {
|
||||
return this.spec?.caBundle;
|
||||
}
|
||||
|
||||
getFailurePolicy(): string | undefined {
|
||||
return this.spec?.failurePolicy;
|
||||
}
|
||||
|
||||
getSideEffects(): string | undefined {
|
||||
return this.spec?.sideEffects;
|
||||
}
|
||||
|
||||
getReinvocationPolicy(): string | undefined {
|
||||
return this.spec?.reinvocationPolicy;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user