UNPKG

kubernetes-fluent-client

Version:

A @kubernetes/client-node fluent API wrapper that leverages K8s Server Side Apply.

568 lines (567 loc) 20 kB
// SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023-Present The Kubernetes Fluent Client Authors const gvkMap = { /** * Represents a K8s Event resource (new Event in the events.k8s.io API) * Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system. * Events have a limited retention time and triggers and messages may evolve with time. Event consumers should not * rely on the timing of an event with a given Reason reflecting a consistent underlying trigger, or the continued * existence of events with that Reason. Events should be treated as informative, best-effort, supplemental data. * * @see {@link https://kubernetes.io/docs/reference/kubernetes-api/cluster-resources/event-v1/} */ EventsV1Event: { kind: "Event", version: "v1", group: "events.k8s.io", }, /** * Represents a K8s Event resource (legacy core v1 Event, use the above one instead, it is more complete) * Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system. * Events have a limited retention time and triggers and messages may evolve with time. Event consumers should not * rely on the timing of an event with a given Reason reflecting a consistent underlying trigger, or the continued * existence of events with that Reason. Events should be treated as informative, best-effort, supplemental data. * * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#event-v1-core} */ CoreV1Event: { kind: "Event", version: "v1", group: "", }, /** * Represents a K8s ClusterRole resource. * ClusterRole is a set of permissions that can be bound to a user or group in a cluster-wide scope. * * @see {@link https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole} */ V1ClusterRole: { kind: "ClusterRole", version: "v1", group: "rbac.authorization.k8s.io", }, /** * Represents a K8s ClusterRoleBinding resource. * ClusterRoleBinding binds a ClusterRole to a user or group in a cluster-wide scope. * * @see {@link https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding} */ V1ClusterRoleBinding: { kind: "ClusterRoleBinding", version: "v1", group: "rbac.authorization.k8s.io", }, /** * Represents a K8s Role resource. * Role is a set of permissions that can be bound to a user or group in a namespace scope. * * @see {@link https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole} */ V1Role: { kind: "Role", version: "v1", group: "rbac.authorization.k8s.io", }, /** * Represents a K8s RoleBinding resource. * RoleBinding binds a Role to a user or group in a namespace scope. * * @see {@link https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding} */ V1RoleBinding: { kind: "RoleBinding", version: "v1", group: "rbac.authorization.k8s.io", }, /** * Represents a K8s ConfigMap resource. * ConfigMap holds configuration data for pods to consume. * * @see {@link https://kubernetes.io/docs/concepts/configuration/configmap/} */ V1ConfigMap: { kind: "ConfigMap", version: "v1", group: "", }, /** * Represents a K8s Endpoints resource. * Endpoints expose a service's IP addresses and ports to other resources. * * @see {@link https://kubernetes.io/docs/concepts/services-networking/service/#endpoints} */ // https://github.com/defenseunicorns/kubernetes-fluent-client/issues/618 // The endpoint generated type is not correct and is registered elsewhere V1Endpoints: { kind: "Endpoints", version: "v1", group: "", plural: "endpoints", }, /** * Represents a K8s LimitRange resource. * LimitRange enforces constraints on the resource consumption of objects in a namespace. * * @see {@link https://kubernetes.io/docs/concepts/policy/limit-range/} */ V1LimitRange: { kind: "LimitRange", version: "v1", group: "", }, /** * Represents a K8s Namespace resource. * Namespace is a way to divide cluster resources between multiple users. * * @see {@link https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/} */ V1Namespace: { kind: "Namespace", version: "v1", group: "", }, /** * Represents a K8s Node resource. * Node is a worker machine in Kubernetes. * * @see {@link https://kubernetes.io/docs/concepts/architecture/nodes/} */ V1Node: { kind: "Node", version: "v1", group: "", }, /** * Represents a K8s PersistentVolumeClaim resource. * PersistentVolumeClaim is a user's request for and claim to a persistent volume. * * @see {@link https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims} */ V1PersistentVolumeClaim: { kind: "PersistentVolumeClaim", version: "v1", group: "", }, /** * Represents a K8s PersistentVolume resource. * PersistentVolume is a piece of storage in the cluster that has been provisioned by an administrator. * * @see {@link https://kubernetes.io/docs/concepts/storage/persistent-volumes/} */ V1PersistentVolume: { kind: "PersistentVolume", version: "v1", group: "", }, /** * Represents a K8s Pod resource. * Pod is the smallest and simplest unit in the Kubernetes object model. * * @see {@link https://kubernetes.io/docs/concepts/workloads/pods/} */ V1Pod: { kind: "Pod", version: "v1", group: "", }, /** * Represents a K8s PodTemplate resource. * PodTemplate is an object that describes the pod that will be created from a higher level abstraction. * * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/#pod-template} */ V1PodTemplate: { kind: "PodTemplate", version: "v1", group: "", }, /** * Represents a K8s ReplicationController resource. * ReplicationController ensures that a specified number of pod replicas are running at any given time. * * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/} */ V1ReplicationController: { kind: "ReplicationController", version: "v1", group: "", }, /** * Represents a K8s ResourceQuota resource. * ResourceQuota provides constraints that limit resource consumption per namespace. * * @see {@link https://kubernetes.io/docs/concepts/policy/resource-quotas/} */ V1ResourceQuota: { kind: "ResourceQuota", version: "v1", group: "", }, /** * Represents a K8s Secret resource. * Secret holds secret data of a certain type. * * @see {@link https://kubernetes.io/docs/concepts/configuration/secret/} */ V1Secret: { kind: "Secret", version: "v1", group: "", }, /** * Represents a K8s ServiceAccount resource. * ServiceAccount is an identity that processes in a pod can use to access the Kubernetes API. * * @see {@link https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/} */ V1ServiceAccount: { kind: "ServiceAccount", version: "v1", group: "", }, /** * Represents a K8s Service resource. * Service is an abstraction which defines a logical set of Pods and a policy by which to access them. * * @see {@link https://kubernetes.io/docs/concepts/services-networking/service/} */ V1Service: { kind: "Service", version: "v1", group: "", }, /** * Represents a K8s MutatingWebhookConfiguration resource. * MutatingWebhookConfiguration configures a mutating admission webhook. * * @see {@link https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#configure-admission-webhooks-on-the-fly} */ V1MutatingWebhookConfiguration: { kind: "MutatingWebhookConfiguration", version: "v1", group: "admissionregistration.k8s.io", }, /** * Represents a K8s ValidatingWebhookConfiguration resource. * ValidatingWebhookConfiguration configures a validating admission webhook. * * @see {@link https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#configure-admission-webhooks-on-the-fly} */ V1ValidatingWebhookConfiguration: { kind: "ValidatingWebhookConfiguration", version: "v1", group: "admissionregistration.k8s.io", }, /** * Represents a K8s CustomResourceDefinition resource. * CustomResourceDefinition is a custom resource in a Kubernetes cluster. * * @see {@link https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/} */ V1CustomResourceDefinition: { kind: "CustomResourceDefinition", version: "v1", group: "apiextensions.k8s.io", }, /** * Represents a K8s APIService resource. * APIService represents a server for a particular API version and group. * * @see {@link https://kubernetes.io/docs/tasks/access-kubernetes-api/setup-extension-api-server/} */ V1APIService: { kind: "APIService", version: "v1", group: "apiregistration.k8s.io", }, /** * Represents a K8s ControllerRevision resource. * ControllerRevision is used to manage the history of a StatefulSet or DaemonSet. * * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#revision-history} */ V1ControllerRevision: { kind: "ControllerRevision", version: "v1", group: "apps", }, /** * Represents a K8s DaemonSet resource. * DaemonSet ensures that all (or some) nodes run a copy of a Pod. * * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/} */ V1DaemonSet: { kind: "DaemonSet", version: "v1", group: "apps", }, /** * Represents a K8s Deployment resource. * Deployment provides declarative updates for Pods and ReplicaSets. * * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/deployment/} */ V1Deployment: { kind: "Deployment", version: "v1", group: "apps", }, /** * Represents a K8s ReplicaSet resource. * ReplicaSet ensures that a specified number of pod replicas are running at any given time. * * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/} */ V1ReplicaSet: { kind: "ReplicaSet", version: "v1", group: "apps", }, /** * Represents a K8s StatefulSet resource. * StatefulSet is used to manage stateful applications. * * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/} */ V1StatefulSet: { kind: "StatefulSet", version: "v1", group: "apps", }, /** * Represents a K8s TokenReview resource. * TokenReview attempts to authenticate a token to a known user. * * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#tokenreview-v1-authentication-k8s-io} */ V1TokenReview: { kind: "TokenReview", version: "v1", group: "authentication.k8s.io", }, /** * Represents a K8s LocalSubjectAccessReview resource. * LocalSubjectAccessReview checks whether a specific user can perform a specific action in a specific namespace. * * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#localsubjectaccessreview-v1-authorization-k8s-io} */ V1LocalSubjectAccessReview: { kind: "LocalSubjectAccessReview", version: "v1", group: "authorization.k8s.io", }, /** * Represents a K8s SelfSubjectAccessReview resource. * SelfSubjectAccessReview checks whether the current user can perform a specific action. * * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#selfsubjectaccessreview-v1-authorization-k8s-io} */ V1SelfSubjectAccessReview: { kind: "SelfSubjectAccessReview", version: "v1", group: "authorization.k8s.io", }, /** * Represents a K8s SelfSubjectRulesReview resource. * SelfSubjectRulesReview lists the permissions a specific user has within a namespace. * * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#selfsubjectrulesreview-v1-authorization-k8s-io} */ V1SelfSubjectRulesReview: { kind: "SelfSubjectRulesReview", version: "v1", group: "authorization.k8s.io", }, /** * Represents a K8s SubjectAccessReview resource. * SubjectAccessReview checks whether a specific user can perform a specific action. * * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#subjectaccessreview-v1-authorization-k8s-io} */ V1SubjectAccessReview: { kind: "SubjectAccessReview", version: "v1", group: "authorization.k8s.io", }, /** * Represents a K8s HorizontalPodAutoscaler resource. * HorizontalPodAutoscaler automatically scales the number of Pods in a replication controller, deployment, or replica set. * * @see {@link https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/} */ V1HorizontalPodAutoscaler: { kind: "HorizontalPodAutoscaler", version: "v2", group: "autoscaling", }, /** * Represents a K8s CronJob resource. * CronJob manages time-based jobs, specifically those that run periodically and complete after a successful execution. * * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/} */ V1CronJob: { kind: "CronJob", version: "v1", group: "batch", }, /** * Represents a K8s Job resource. * Job represents the configuration of a single job. * * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/job/} */ V1Job: { kind: "Job", version: "v1", group: "batch", }, /** * Represents a K8s CertificateSigningRequest resource. * CertificateSigningRequest represents a certificate signing request. * * @see {@link https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/} */ V1CertificateSigningRequest: { kind: "CertificateSigningRequest", version: "v1", group: "certificates.k8s.io", }, /** * Represents a K8s EndpointSlice resource. * EndpointSlice represents a scalable set of network endpoints for a Kubernetes Service. * * @see {@link https://kubernetes.io/docs/concepts/services-networking/endpoint-slices/} */ V1EndpointSlice: { kind: "EndpointSlice", version: "v1", group: "discovery.k8s.io", }, /** * Represents a K8s IngressClass resource. * IngressClass represents the class of the Ingress, referenced by the Ingress spec. * * @see {@link https://kubernetes.io/docs/concepts/services-networking/ingress/} */ V1IngressClass: { kind: "IngressClass", version: "v1", group: "networking.k8s.io", }, /** * Represents a K8s Ingress resource. * Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. * * @see {@link https://kubernetes.io/docs/concepts/services-networking/ingress/} */ V1Ingress: { kind: "Ingress", version: "v1", group: "networking.k8s.io", plural: "ingresses", }, /** * Represents a K8s NetworkPolicy resource. * NetworkPolicy defines a set of rules for how pods communicate with each other. * * @see {@link https://kubernetes.io/docs/concepts/services-networking/network-policies/} */ V1NetworkPolicy: { kind: "NetworkPolicy", version: "v1", group: "networking.k8s.io", plural: "networkpolicies", }, /** * Represents a K8s RuntimeClass resource. * RuntimeClass is a cluster-scoped resource that surfaces container runtime properties to the control plane. * * @see {@link https://kubernetes.io/docs/concepts/containers/runtime-class/} */ V1RuntimeClass: { kind: "RuntimeClass", version: "v1", group: "node.k8s.io", }, /** * Represents a K8s PodDisruptionBudget resource. * PodDisruptionBudget is an API object that limits the number of pods of a replicated application that are down simultaneously. * * @see {@link https://kubernetes.io/docs/concepts/workloads/pods/disruptions/} */ V1PodDisruptionBudget: { kind: "PodDisruptionBudget", version: "v1", group: "policy", }, /** * Represents a K8s VolumeAttachment resource. * VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node. * * @see {@link https://kubernetes.io/docs/concepts/storage/storage-classes/} */ V1VolumeAttachment: { kind: "VolumeAttachment", version: "v1", group: "storage.k8s.io", }, /** * Represents a K8s CSIDriver resource. * CSIDriver captures information about a Container Storage Interface (CSI) volume driver. * * @see {@link https://kubernetes.io/docs/concepts/storage/volumes/} */ V1CSIDriver: { kind: "CSIDriver", version: "v1", group: "storage.k8s.io", }, /** * Represents a K8s CSIStorageCapacity resource. * CSIStorageCapacity stores the reported storage capacity of a CSI node or storage class. * * @see {@link https://kubernetes.io/docs/concepts/storage/csi/} */ V1CSIStorageCapacity: { kind: "CSIStorageCapacity", version: "v1", group: "storage.k8s.io", }, /** * Represents a K8s StorageClass resource. * StorageClass is a cluster-scoped resource that provides a way for administrators to describe the classes of storage they offer. * * @see {@link https://kubernetes.io/docs/concepts/storage/storage-classes/} */ V1StorageClass: { kind: "StorageClass", version: "v1", group: "storage.k8s.io", }, }; /** * Converts a model name to a GroupVersionKind * * @param key The name of the model * @returns The GroupVersionKind for the model */ export function modelToGroupVersionKind(key) { return gvkMap[key]; } /** * Registers a new model and GroupVersionKind to be used within the fluent API. * * @param model Used to match the GroupVersionKind and define the type-data for the request * @param groupVersionKind Contains the match parameters to determine the request should be handled */ export const RegisterKind = (model, groupVersionKind) => { const name = model.name; // Do not allow overwriting existing GVKs if (gvkMap[name]) { throw new Error(`GVK ${name} already registered`); } // Set the GVK gvkMap[name] = groupVersionKind; };