@atomist/sdm
Version:
Atomist Software Delivery Machine SDK
148 lines • 6.26 kB
TypeScript
import * as k8s from "@kubernetes/client-node";
import { DeepPartial } from "ts-essentials";
import { KubernetesClients } from "./clients";
/**
* Information used to construct resources when creating or updating
* an application in a Kubernetes cluster. This structure is designed
* for a typical microservice-type deployment of one container
* optionally providing a service on a single port. If you need
* anything more complicated than that, you can use the various
* partial specs in this structure to manage more elaborate
* applications and the `applicationData` callback on the
* [[KubernetesDeploymentRegistration]].
*/
export interface KubernetesApplication {
/** Atomist workspace ID */
workspaceId: string;
/**
* Name of resources to create. It can be overriden for
* individual resources in the partial specs.
*/
name: string;
/** Namespace to create resources in. */
ns: string;
/** Full image name and tag for deployment pod template container. */
image: string;
/**
* Mode of operation. If not provided, the "full" mode is used,
* making calls to the Kubernetes API and, if configured,
* persisting changes to the sync/GitOps repo. If set to "sync",
* it will only persist changes to the configured sync/GitOps
* repo, making no calls to the Kubernetes API.
*/
mode?: "full" | "sync";
/**
* Port the service listens on, if not provided, no service
* resource is created.
*/
port?: number;
/**
* Ingress rule URL path, if not provided no ingress rule is
* added. Typically ingress paths start with a forward slash
* ("/") but do not end with one, unless the path is just "/".
*/
path?: string;
/**
* Partial deployment spec for this application that is overlaid
* on top of the default deployment spec template. It can be used
* to provide custom resource specifications, liveness and
* readiness checks, etc.
*/
deploymentSpec?: DeepPartial<k8s.V1Deployment>;
/**
* Partial service spec for this application that is overlaid on
* top of the default service spec template.
*/
serviceSpec?: DeepPartial<k8s.V1Service>;
/**
* Partial ingress spec for this application that is overlaid on
* top of the default ingress spec template.
*/
ingressSpec?: DeepPartial<k8s.NetworkingV1beta1Ingress>;
/**
* Secrets to upsert prior to creating deployment.
*/
secrets?: k8s.V1Secret[];
/**
* Partial role to create for binding to service account. If
* provided, this partial spec is overlaid onto the default role
* spec, which is just metadata with no rules. If this is not
* defined, this deployment will not create a role and therefore
* not bind a role to a service account.
*/
roleSpec?: DeepPartial<k8s.V1Role> | DeepPartial<k8s.V1ClusterRole>;
/**
* Partial service account spec to create and use in the
* deployment. This partial spec is overlaid onto the default
* service account spec. If the `serviceAccountSpec` is provided,
* the resulting service account spec is upserted during
* deployment. If a `roleSpec` is provided, the resulting service
* account spec is upserted during deployment and a role binding
* is created between the role and service account. If neither
* the `serviceAccountSpec` nor `roleSpec` are created, no service
* account is managed by the deployment. If this spec contains a
* name, it is used in the role binding and deployment specs.
*/
serviceAccountSpec?: DeepPartial<k8s.V1ServiceAccount>;
/**
* Partial role binding spec for the role to service account.
* This partial spec is overlaid onto the default role binding
* spec, which contains metadata and the role and service account
* names. The role binding is only created if the `roleSpec` is
* also provided.
*/
roleBindingSpec?: DeepPartial<k8s.V1RoleBinding> | DeepPartial<k8s.V1ClusterRoleBinding>;
/**
* Strategy to use when patching resources for this application.
* Supported values are "application/merge-patch+json" and
* "application/strategic-merge-patch+json". The default is
* "application/strategic-merge-patch+json". See
* https://kubernetes.io/docs/tasks/run-application/update-api-object-kubectl-patch/
* for details.
*/
patchStrategy?: "application/merge-patch+json" | "application/strategic-merge-patch+json";
}
/**
* Information needed to delete resources related to an application in
* a Kubernetes cluster.
*/
export declare type KubernetesDelete = Pick<KubernetesApplication, "name" | "ns" | "workspaceId" | "mode">;
/**
* Intermediate interface for use in combination with other
* interfaces.
*/
export interface KubernetesClientsContainer {
/** Kubernetes API group clients. */
clients: KubernetesClients;
}
export interface KubernetesSdm {
/** Name of SDM fulfilling the goal. */
sdmFulfiller: string;
}
/**
* Internal application structure used to create or update resources
* in a Kubernetes cluster.
*/
export declare type KubernetesResourceRequest = KubernetesApplication & KubernetesClientsContainer & KubernetesSdm;
/**
* Internal application structure used to delete resources from a
* Kubernetes cluster.
*/
export declare type KubernetesDeleteResourceRequest = KubernetesDelete & KubernetesClientsContainer;
/** Qualified name of Kubernetes application */
export declare function appName(k: Pick<KubernetesApplication, "name" | "ns">): string;
/**
* Test if the object is a valid [[KubernetesApplication]] by checking
* if it has all required properties.
*
* @param o Putative Kubernetes application data
* @return `true` if all required properties are present, `false` otherwise.
*/
export declare function isKubernetesApplication(o: {
[key: string]: any;
}): o is KubernetesApplication;
/** Stringify filter for a Kubernetes request object. */
export declare function reqFilter<T>(k: string, v: T): T | undefined;
/** Stringify a Kubernetes request object. */
export declare function reqString(req: any): string;
//# sourceMappingURL=request.d.ts.map