aws-cdk-lib
Version: 
Version 2 of the AWS Cloud Development Kit library
129 lines (128 loc) • 4.6 kB
TypeScript
import { Construct } from 'constructs';
import { AlbScheme } from './alb-controller';
import { ICluster } from './cluster';
/**
 * Options for `KubernetesManifest`.
 */
export interface KubernetesManifestOptions {
    /**
     * When a resource is removed from a Kubernetes manifest, it no longer appears
     * in the manifest, and there is no way to know that this resource needs to be
     * deleted. To address this, `kubectl apply` has a `--prune` option which will
     * query the cluster for all resources with a specific label and will remove
     * all the labeld resources that are not part of the applied manifest. If this
     * option is disabled and a resource is removed, it will become "orphaned" and
     * will not be deleted from the cluster.
     *
     * When this option is enabled (default), the construct will inject a label to
     * all Kubernetes resources included in this manifest which will be used to
     * prune resources when the manifest changes via `kubectl apply --prune`.
     *
     * The label name will be `aws.cdk.eks/prune-<ADDR>` where `<ADDR>` is the
     * 42-char unique address of this construct in the construct tree. Value is
     * empty.
     *
     * @see
     * https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/#alternative-kubectl-apply-f-directory-prune-l-your-label
     *
     * @default - based on the prune option of the cluster, which is `true` unless
     * otherwise specified.
     */
    readonly prune?: boolean;
    /**
     * A flag to signify if the manifest validation should be skipped
     *
     * @default false
     */
    readonly skipValidation?: boolean;
    /**
     * Automatically detect `Ingress` resources in the manifest and annotate them so they
     * are picked up by an ALB Ingress Controller.
     *
     * @default false
     */
    readonly ingressAlb?: boolean;
    /**
     * Specify the ALB scheme that should be applied to `Ingress` resources.
     * Only applicable if `ingressAlb` is set to `true`.
     *
     * @default AlbScheme.INTERNAL
     */
    readonly ingressAlbScheme?: AlbScheme;
}
/**
 * Properties for KubernetesManifest
 */
export interface KubernetesManifestProps extends KubernetesManifestOptions {
    /**
     * The EKS cluster to apply this manifest to.
     *
     * [disable-awslint:ref-via-interface]
     */
    readonly cluster: ICluster;
    /**
     * The manifest to apply.
     *
     * Consists of any number of child resources.
     *
     * When the resources are created/updated, this manifest will be applied to the
     * cluster through `kubectl apply` and when the resources or the stack is
     * deleted, the resources in the manifest will be deleted through `kubectl delete`.
     *
     * @example
     *
     * [{
     *   apiVersion: 'v1',
     *   kind: 'Pod',
     *   metadata: { name: 'mypod' },
     *   spec: {
     *     containers: [ { name: 'hello', image: 'paulbouwer/hello-kubernetes:1.5', ports: [ { containerPort: 8080 } ] } ]
     *   }
     * }]
     *
     */
    readonly manifest: Record<string, any>[];
    /**
     * Overwrite any existing resources.
     *
     * If this is set, we will use `kubectl apply` instead of `kubectl create`
     * when the resource is created. Otherwise, if there is already a resource
     * in the cluster with the same name, the operation will fail.
     *
     * @default false
     */
    readonly overwrite?: boolean;
}
/**
 * Represents a manifest within the Kubernetes system.
 *
 * Alternatively, you can use `cluster.addManifest(resource[, resource, ...])`
 * to define resources on this cluster.
 *
 * Applies/deletes the manifest using `kubectl`.
 */
export declare class KubernetesManifest extends Construct {
    /**
     * Uniquely identifies this class.
     */
    static readonly PROPERTY_INJECTION_ID: string;
    /**
     * The CloudFormation resource type.
     */
    static readonly RESOURCE_TYPE = "Custom::AWSCDK-EKS-KubernetesResource";
    constructor(scope: Construct, id: string, props: KubernetesManifestProps);
    /**
     * Injects a generated prune label to all resources in this manifest. The
     * label name will be `awscdk.eks/manifest-ADDR` where `ADDR` is the address
     * of the construct in the construct tree.
     *
     * @returns the label name
     */
    private injectPruneLabel;
    /**
     * Inject the necessary ingress annotations if possible (and requested).
     *
     * @see https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/ingress/annotations/
     */
    private injectIngressAlbAnnotations;
}