@aws-cdk/aws-eks-v2-alpha
Version:
This module is deprecated. All constructs are now available under aws-cdk-lib/aws-eks-v2
115 lines • 19.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FargateProfile = void 0;
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const ec2 = require("aws-cdk-lib/aws-ec2");
const aws_eks_1 = require("aws-cdk-lib/aws-eks");
const iam = require("aws-cdk-lib/aws-iam");
const core_1 = require("aws-cdk-lib/core");
const constructs_1 = require("constructs");
/**
* Fargate profiles allows an administrator to declare which pods run on
* Fargate. This declaration is done through the profile’s selectors. Each
* profile can have up to five selectors that contain a namespace and optional
* labels. You must define a namespace for every selector. The label field
* consists of multiple optional key-value pairs. Pods that match a selector (by
* matching a namespace for the selector and all of the labels specified in the
* selector) are scheduled on Fargate. If a namespace selector is defined
* without any labels, Amazon EKS will attempt to schedule all pods that run in
* that namespace onto Fargate using the profile. If a to-be-scheduled pod
* matches any of the selectors in the Fargate profile, then that pod is
* scheduled on Fargate.
*
* If a pod matches multiple Fargate profiles, Amazon EKS picks one of the
* matches at random. In this case, you can specify which profile a pod should
* use by adding the following Kubernetes label to the pod specification:
* eks.amazonaws.com/fargate-profile: profile_name. However, the pod must still
* match a selector in that profile in order to be scheduled onto Fargate.
*/
class FargateProfile extends constructs_1.Construct {
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-eks-v2-alpha.FargateProfile", version: "2.240.0-alpha.0" };
/**
* The full Amazon Resource Name (ARN) of the Fargate profile.
*
* @attribute
*/
fargateProfileArn;
/**
* The name of the Fargate profile.
*
* @attribute
*/
fargateProfileName;
/**
* Resource tags.
*/
tags;
/**
* The pod execution role to use for pods that match the selectors in the
* Fargate profile. The pod execution role allows Fargate infrastructure to
* register with your cluster as a node, and it provides read access to Amazon
* ECR image repositories.
*/
podExecutionRole;
constructor(scope, id, props) {
super(scope, id);
try {
jsiiDeprecationWarnings.print("@aws-cdk/aws-eks-v2-alpha.FargateProfile", "");
jsiiDeprecationWarnings._aws_cdk_aws_eks_v2_alpha_FargateProfileProps(props);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, FargateProfile);
}
throw error;
}
this.podExecutionRole = props.podExecutionRole ?? new iam.Role(this, 'PodExecutionRole', {
assumedBy: new iam.ServicePrincipal('eks-fargate-pods.amazonaws.com'),
managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonEKSFargatePodExecutionRolePolicy')],
});
if (props.subnetSelection && !props.vpc) {
core_1.Annotations.of(this).addWarningV2('@aws-cdk/aws-eks:fargateProfileDefaultToPrivateSubnets', 'Vpc must be defined to use a custom subnet selection. All private subnets belonging to the EKS cluster will be used by default');
}
let subnets;
if (props.vpc) {
const selection = props.subnetSelection ?? { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS };
subnets = props.vpc.selectSubnets(selection).subnetIds;
}
if (props.selectors.length < 1) {
throw new core_1.ValidationError('Fargate profile requires at least one selector', this);
}
if (props.selectors.length > 5) {
throw new core_1.ValidationError('Fargate profile supports up to five selectors', this);
}
this.tags = new core_1.TagManager(core_1.TagType.MAP, 'AWS::EKS::FargateProfile');
const resource = new aws_eks_1.CfnFargateProfile(this, 'Resource', {
clusterName: props.cluster.clusterName,
fargateProfileName: props.fargateProfileName,
podExecutionRoleArn: this.podExecutionRole.roleArn,
selectors: props.selectors.map((s) => ({
namespace: s.namespace,
labels: Object.entries(s.labels ?? {}).map((e) => ({
key: e[0],
value: e[1],
})),
})),
subnets,
tags: this.tags.renderTags(),
});
this.fargateProfileArn = resource.attrArn;
this.fargateProfileName = resource.ref;
if (props.removalPolicy) {
core_1.RemovalPolicies.of(this).apply(props.removalPolicy);
}
// Fargate profiles must be created sequentially. If other profile(s) already
// exist on the same cluster, create a dependency to force sequential creation.
const clusterFargateProfiles = props.cluster._attachFargateProfile(this);
if (clusterFargateProfiles.length > 1) {
const previousProfile = clusterFargateProfiles[clusterFargateProfiles.length - 2];
resource.node.addDependency(previousProfile);
}
}
}
exports.FargateProfile = FargateProfile;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFyZ2F0ZS1wcm9maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmFyZ2F0ZS1wcm9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQTJDO0FBQzNDLGlEQUF3RDtBQUN4RCwyQ0FBMkM7QUFFM0MsMkNBQXNHO0FBQ3RHLDJDQUF1QztBQXVHdkM7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQWEsY0FBZSxTQUFRLHNCQUFTOztJQUMzQzs7OztPQUlHO0lBQ2EsaUJBQWlCLENBQVM7SUFFMUM7Ozs7T0FJRztJQUNhLGtCQUFrQixDQUFTO0lBRTNDOztPQUVHO0lBQ2EsSUFBSSxDQUFhO0lBRWpDOzs7OztPQUtHO0lBQ2EsZ0JBQWdCLENBQVk7SUFFNUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7OytDQTdCUixjQUFjOzs7O1FBK0J2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDdkYsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxDQUFDO1lBQ3JFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsd0NBQXdDLENBQUMsQ0FBQztTQUN4RyxDQUFDLENBQUM7UUFFSCxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDeEMsa0JBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLHdEQUF3RCxFQUFFLGdJQUFnSSxDQUFDLENBQUM7UUFDaE8sQ0FBQztRQUVELElBQUksT0FBNkIsQ0FBQztRQUNsQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE1BQU0sU0FBUyxHQUF3QixLQUFLLENBQUMsZUFBZSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNuSCxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3pELENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxzQkFBZSxDQUFDLGdEQUFnRCxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxzQkFBZSxDQUFDLCtDQUErQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksaUJBQVUsQ0FBQyxjQUFPLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFFcEUsTUFBTSxRQUFRLEdBQUcsSUFBSSwyQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDdEMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtZQUM1QyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTztZQUNsRCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztnQkFDdEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2pELEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNULEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNaLENBQUMsQ0FBQzthQUNKLENBQUMsQ0FBQztZQUNILE9BQU87WUFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFFdkMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsc0JBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsNkVBQTZFO1FBQzdFLCtFQUErRTtRQUMvRSxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekUsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7S0FDRjs7QUFyRkgsd0NBc0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ2ZuRmFyZ2F0ZVByb2ZpbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWtzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB0eXBlIHsgSVRhZ2dhYmxlLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBBbm5vdGF0aW9ucywgUmVtb3ZhbFBvbGljaWVzLCBUYWdNYW5hZ2VyLCBUYWdUeXBlLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBDbHVzdGVyIH0gZnJvbSAnLi9jbHVzdGVyJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBkZWZpbmluZyBFS1MgRmFyZ2F0ZSBQcm9maWxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYXJnYXRlUHJvZmlsZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEZhcmdhdGUgcHJvZmlsZS5cbiAgICogQGRlZmF1bHQgLSBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGZhcmdhdGVQcm9maWxlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvZCBleGVjdXRpb24gcm9sZSB0byB1c2UgZm9yIHBvZHMgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3JzIGluIHRoZVxuICAgKiBGYXJnYXRlIHByb2ZpbGUuIFRoZSBwb2QgZXhlY3V0aW9uIHJvbGUgYWxsb3dzIEZhcmdhdGUgaW5mcmFzdHJ1Y3R1cmUgdG9cbiAgICogcmVnaXN0ZXIgd2l0aCB5b3VyIGNsdXN0ZXIgYXMgYSBub2RlLCBhbmQgaXQgcHJvdmlkZXMgcmVhZCBhY2Nlc3MgdG8gQW1hem9uXG4gICAqIEVDUiBpbWFnZSByZXBvc2l0b3JpZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vrcy9sYXRlc3QvdXNlcmd1aWRlL3BvZC1leGVjdXRpb24tcm9sZS5odG1sXG4gICAqIEBkZWZhdWx0IC0gYSByb2xlIHdpbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBwb2RFeGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZWN0b3JzIHRvIG1hdGNoIGZvciBwb2RzIHRvIHVzZSB0aGlzIEZhcmdhdGUgcHJvZmlsZS4gRWFjaCBzZWxlY3RvclxuICAgKiBtdXN0IGhhdmUgYW4gYXNzb2NpYXRlZCBuYW1lc3BhY2UuIE9wdGlvbmFsbHksIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGxhYmVsc1xuICAgKiBmb3IgYSBuYW1lc3BhY2UuXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBzZWxlY3RvciBpcyByZXF1aXJlZCBhbmQgeW91IG1heSBzcGVjaWZ5IHVwIHRvIGZpdmUgc2VsZWN0b3JzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0b3JzOiBTZWxlY3RvcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIGZyb20gd2hpY2ggdG8gc2VsZWN0IHN1Ym5ldHMgdG8gbGF1bmNoIHlvdXIgcG9kcyBpbnRvLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgcHJpdmF0ZSBzdWJuZXRzIGFyZSBzZWxlY3RlZC4gWW91IGNhbiBjdXN0b21pemUgdGhpcyB1c2luZ1xuICAgKiBgc3VibmV0U2VsZWN0aW9uYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbGwgcHJpdmF0ZSBzdWJuZXRzIHVzZWQgYnkgdGhlIEVLUyBjbHVzdGVyXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcblxuICAvKipcbiAgICogU2VsZWN0IHdoaWNoIHN1Ym5ldHMgdG8gbGF1bmNoIHlvdXIgcG9kcyBpbnRvLiBBdCB0aGlzIHRpbWUsIHBvZHMgcnVubmluZ1xuICAgKiBvbiBGYXJnYXRlIGFyZSBub3QgYXNzaWduZWQgcHVibGljIElQIGFkZHJlc3Nlcywgc28gb25seSBwcml2YXRlIHN1Ym5ldHNcbiAgICogKHdpdGggbm8gZGlyZWN0IHJvdXRlIHRvIGFuIEludGVybmV0IEdhdGV3YXkpIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBWUEMgdG8gY3VzdG9taXplIHRoZSBzdWJuZXQgc2VsZWN0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHByaXZhdGUgc3VibmV0cyBvZiB0aGUgVlBDIGFyZSBzZWxlY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldFNlbGVjdGlvbj86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSByZW1vdmFsIHBvbGljeSBhcHBsaWVkIHRvIHRoZSBjdXN0b20gcmVzb3VyY2UgdGhhdCBtYW5hZ2VzIHRoZSBGYXJnYXRlIHByb2ZpbGUuXG4gICAqXG4gICAqIFRoZSByZW1vdmFsIHBvbGljeSBjb250cm9scyB3aGF0IGhhcHBlbnMgdG8gdGhlIHJlc291cmNlIGlmIGl0IHN0b3BzIGJlaW5nIG1hbmFnZWQgYnkgQ2xvdWRGb3JtYXRpb24uXG4gICAqIFRoaXMgY2FuIGhhcHBlbiBpbiBvbmUgb2YgdGhyZWUgc2l0dWF0aW9uczpcbiAgICpcbiAgICogLSBUaGUgcmVzb3VyY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0ZW1wbGF0ZSwgc28gQ2xvdWRGb3JtYXRpb24gc3RvcHMgbWFuYWdpbmcgaXRcbiAgICogLSBBIGNoYW5nZSB0byB0aGUgcmVzb3VyY2UgaXMgbWFkZSB0aGF0IHJlcXVpcmVzIGl0IHRvIGJlIHJlcGxhY2VkLCBzbyBDbG91ZEZvcm1hdGlvbiBzdG9wcyBtYW5hZ2luZyBpdFxuICAgKiAtIFRoZSBzdGFjayBpcyBkZWxldGVkLCBzbyBDbG91ZEZvcm1hdGlvbiBzdG9wcyBtYW5hZ2luZyBhbGwgcmVzb3VyY2VzIGluIGl0XG4gICAqXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wcyBmb3IgRUtTIEZhcmdhdGUgUHJvZmlsZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFyZ2F0ZVByb2ZpbGVQcm9wcyBleHRlbmRzIEZhcmdhdGVQcm9maWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgRUtTIGNsdXN0ZXIgdG8gYXBwbHkgdGhlIEZhcmdhdGUgcHJvZmlsZSB0by5cbiAgICogW2Rpc2FibGUtYXdzbGludDpyZWYtdmlhLWludGVyZmFjZV1cbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXI6IENsdXN0ZXI7XG59XG5cbi8qKlxuICogRmFyZ2F0ZSBwcm9maWxlIHNlbGVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdG9yIHtcbiAgLyoqXG4gICAqIFRoZSBLdWJlcm5ldGVzIG5hbWVzcGFjZSB0aGF0IHRoZSBzZWxlY3RvciBzaG91bGQgbWF0Y2guXG4gICAqXG4gICAqIFlvdSBtdXN0IHNwZWNpZnkgYSBuYW1lc3BhY2UgZm9yIGEgc2VsZWN0b3IuIFRoZSBzZWxlY3RvciBvbmx5IG1hdGNoZXMgcG9kc1xuICAgKiB0aGF0IGFyZSBjcmVhdGVkIGluIHRoaXMgbmFtZXNwYWNlLCBidXQgeW91IGNhbiBjcmVhdGUgbXVsdGlwbGUgc2VsZWN0b3JzXG4gICAqIHRvIHRhcmdldCBtdWx0aXBsZSBuYW1lc3BhY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBLdWJlcm5ldGVzIGxhYmVscyB0aGF0IHRoZSBzZWxlY3RvciBzaG91bGQgbWF0Y2guIEEgcG9kIG11c3QgY29udGFpblxuICAgKiBhbGwgb2YgdGhlIGxhYmVscyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIHNlbGVjdG9yIGZvciBpdCB0byBiZVxuICAgKiBjb25zaWRlcmVkIGEgbWF0Y2guXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHBvZHMgd2l0aGluIHRoZSBuYW1lc3BhY2Ugd2lsbCBiZSBzZWxlY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVscz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogRmFyZ2F0ZSBwcm9maWxlcyBhbGxvd3MgYW4gYWRtaW5pc3RyYXRvciB0byBkZWNsYXJlIHdoaWNoIHBvZHMgcnVuIG9uXG4gKiBGYXJnYXRlLiBUaGlzIGRlY2xhcmF0aW9uIGlzIGRvbmUgdGhyb3VnaCB0aGUgcHJvZmlsZeKAmXMgc2VsZWN0b3JzLiBFYWNoXG4gKiBwcm9maWxlIGNhbiBoYXZlIHVwIHRvIGZpdmUgc2VsZWN0b3JzIHRoYXQgY29udGFpbiBhIG5hbWVzcGFjZSBhbmQgb3B0aW9uYWxcbiAqIGxhYmVscy4gWW91IG11c3QgZGVmaW5lIGEgbmFtZXNwYWNlIGZvciBldmVyeSBzZWxlY3Rvci4gVGhlIGxhYmVsIGZpZWxkXG4gKiBjb25zaXN0cyBvZiBtdWx0aXBsZSBvcHRpb25hbCBrZXktdmFsdWUgcGFpcnMuIFBvZHMgdGhhdCBtYXRjaCBhIHNlbGVjdG9yIChieVxuICogbWF0Y2hpbmcgYSBuYW1lc3BhY2UgZm9yIHRoZSBzZWxlY3RvciBhbmQgYWxsIG9mIHRoZSBsYWJlbHMgc3BlY2lmaWVkIGluIHRoZVxuICogc2VsZWN0b3IpIGFyZSBzY2hlZHVsZWQgb24gRmFyZ2F0ZS4gSWYgYSBuYW1lc3BhY2Ugc2VsZWN0b3IgaXMgZGVmaW5lZFxuICogd2l0aG91dCBhbnkgbGFiZWxzLCBBbWF6b24gRUtTIHdpbGwgYXR0ZW1wdCB0byBzY2hlZHVsZSBhbGwgcG9kcyB0aGF0IHJ1biBpblxuICogdGhhdCBuYW1lc3BhY2Ugb250byBGYXJnYXRlIHVzaW5nIHRoZSBwcm9maWxlLiBJZiBhIHRvLWJlLXNjaGVkdWxlZCBwb2RcbiAqIG1hdGNoZXMgYW55IG9mIHRoZSBzZWxlY3RvcnMgaW4gdGhlIEZhcmdhdGUgcHJvZmlsZSwgdGhlbiB0aGF0IHBvZCBpc1xuICogc2NoZWR1bGVkIG9uIEZhcmdhdGUuXG4gKlxuICogSWYgYSBwb2QgbWF0Y2hlcyBtdWx0aXBsZSBGYXJnYXRlIHByb2ZpbGVzLCBBbWF6b24gRUtTIHBpY2tzIG9uZSBvZiB0aGVcbiAqIG1hdGNoZXMgYXQgcmFuZG9tLiBJbiB0aGlzIGNhc2UsIHlvdSBjYW4gc3BlY2lmeSB3aGljaCBwcm9maWxlIGEgcG9kIHNob3VsZFxuICogdXNlIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIEt1YmVybmV0ZXMgbGFiZWwgdG8gdGhlIHBvZCBzcGVjaWZpY2F0aW9uOlxuICogZWtzLmFtYXpvbmF3cy5jb20vZmFyZ2F0ZS1wcm9maWxlOiBwcm9maWxlX25hbWUuIEhvd2V2ZXIsIHRoZSBwb2QgbXVzdCBzdGlsbFxuICogbWF0Y2ggYSBzZWxlY3RvciBpbiB0aGF0IHByb2ZpbGUgaW4gb3JkZXIgdG8gYmUgc2NoZWR1bGVkIG9udG8gRmFyZ2F0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZhcmdhdGVQcm9maWxlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVRhZ2dhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBGYXJnYXRlIHByb2ZpbGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmYXJnYXRlUHJvZmlsZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgRmFyZ2F0ZSBwcm9maWxlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmFyZ2F0ZVByb2ZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIHRhZ3MuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnczogVGFnTWFuYWdlcjtcblxuICAvKipcbiAgICogVGhlIHBvZCBleGVjdXRpb24gcm9sZSB0byB1c2UgZm9yIHBvZHMgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3JzIGluIHRoZVxuICAgKiBGYXJnYXRlIHByb2ZpbGUuIFRoZSBwb2QgZXhlY3V0aW9uIHJvbGUgYWxsb3dzIEZhcmdhdGUgaW5mcmFzdHJ1Y3R1cmUgdG9cbiAgICogcmVnaXN0ZXIgd2l0aCB5b3VyIGNsdXN0ZXIgYXMgYSBub2RlLCBhbmQgaXQgcHJvdmlkZXMgcmVhZCBhY2Nlc3MgdG8gQW1hem9uXG4gICAqIEVDUiBpbWFnZSByZXBvc2l0b3JpZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcG9kRXhlY3V0aW9uUm9sZTogaWFtLklSb2xlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGYXJnYXRlUHJvZmlsZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucG9kRXhlY3V0aW9uUm9sZSA9IHByb3BzLnBvZEV4ZWN1dGlvblJvbGUgPz8gbmV3IGlhbS5Sb2xlKHRoaXMsICdQb2RFeGVjdXRpb25Sb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2Vrcy1mYXJnYXRlLXBvZHMuYW1hem9uYXdzLmNvbScpLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdBbWF6b25FS1NGYXJnYXRlUG9kRXhlY3V0aW9uUm9sZVBvbGljeScpXSxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5zdWJuZXRTZWxlY3Rpb24gJiYgIXByb3BzLnZwYykge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKCdAYXdzLWNkay9hd3MtZWtzOmZhcmdhdGVQcm9maWxlRGVmYXVsdFRvUHJpdmF0ZVN1Ym5ldHMnLCAnVnBjIG11c3QgYmUgZGVmaW5lZCB0byB1c2UgYSBjdXN0b20gc3VibmV0IHNlbGVjdGlvbi4gQWxsIHByaXZhdGUgc3VibmV0cyBiZWxvbmdpbmcgdG8gdGhlIEVLUyBjbHVzdGVyIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0Jyk7XG4gICAgfVxuXG4gICAgbGV0IHN1Ym5ldHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy52cGMpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbjogZWMyLlN1Ym5ldFNlbGVjdGlvbiA9IHByb3BzLnN1Ym5ldFNlbGVjdGlvbiA/PyB7IHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfTtcbiAgICAgIHN1Ym5ldHMgPSBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyhzZWxlY3Rpb24pLnN1Ym5ldElkcztcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2VsZWN0b3JzLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0ZhcmdhdGUgcHJvZmlsZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgc2VsZWN0b3InLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2VsZWN0b3JzLmxlbmd0aCA+IDUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0ZhcmdhdGUgcHJvZmlsZSBzdXBwb3J0cyB1cCB0byBmaXZlIHNlbGVjdG9ycycsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMudGFncyA9IG5ldyBUYWdNYW5hZ2VyKFRhZ1R5cGUuTUFQLCAnQVdTOjpFS1M6OkZhcmdhdGVQcm9maWxlJyk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5GYXJnYXRlUHJvZmlsZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjbHVzdGVyTmFtZTogcHJvcHMuY2x1c3Rlci5jbHVzdGVyTmFtZSxcbiAgICAgIGZhcmdhdGVQcm9maWxlTmFtZTogcHJvcHMuZmFyZ2F0ZVByb2ZpbGVOYW1lLFxuICAgICAgcG9kRXhlY3V0aW9uUm9sZUFybjogdGhpcy5wb2RFeGVjdXRpb25Sb2xlLnJvbGVBcm4sXG4gICAgICBzZWxlY3RvcnM6IHByb3BzLnNlbGVjdG9ycy5tYXAoKHMpID0+ICh7XG4gICAgICAgIG5hbWVzcGFjZTogcy5uYW1lc3BhY2UsXG4gICAgICAgIGxhYmVsczogT2JqZWN0LmVudHJpZXMocy5sYWJlbHMgPz8ge30pLm1hcCgoZSkgPT4gKHtcbiAgICAgICAgICBrZXk6IGVbMF0sXG4gICAgICAgICAgdmFsdWU6IGVbMV0sXG4gICAgICAgIH0pKSxcbiAgICAgIH0pKSxcbiAgICAgIHN1Ym5ldHMsXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MucmVuZGVyVGFncygpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mYXJnYXRlUHJvZmlsZUFybiA9IHJlc291cmNlLmF0dHJBcm47XG4gICAgdGhpcy5mYXJnYXRlUHJvZmlsZU5hbWUgPSByZXNvdXJjZS5yZWY7XG5cbiAgICBpZiAocHJvcHMucmVtb3ZhbFBvbGljeSkge1xuICAgICAgUmVtb3ZhbFBvbGljaWVzLm9mKHRoaXMpLmFwcGx5KHByb3BzLnJlbW92YWxQb2xpY3kpO1xuICAgIH1cblxuICAgIC8vIEZhcmdhdGUgcHJvZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHNlcXVlbnRpYWxseS4gSWYgb3RoZXIgcHJvZmlsZShzKSBhbHJlYWR5XG4gICAgLy8gZXhpc3Qgb24gdGhlIHNhbWUgY2x1c3RlciwgY3JlYXRlIGEgZGVwZW5kZW5jeSB0byBmb3JjZSBzZXF1ZW50aWFsIGNyZWF0aW9uLlxuICAgIGNvbnN0IGNsdXN0ZXJGYXJnYXRlUHJvZmlsZXMgPSBwcm9wcy5jbHVzdGVyLl9hdHRhY2hGYXJnYXRlUHJvZmlsZSh0aGlzKTtcbiAgICBpZiAoY2x1c3RlckZhcmdhdGVQcm9maWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1Byb2ZpbGUgPSBjbHVzdGVyRmFyZ2F0ZVByb2ZpbGVzW2NsdXN0ZXJGYXJnYXRlUHJvZmlsZXMubGVuZ3RoIC0gMl07XG4gICAgICByZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kocHJldmlvdXNQcm9maWxlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==