diff --git a/packages/aws-rfdk/lib/deadline/lib/configure-spot-event-plugin.ts b/packages/aws-rfdk/lib/deadline/lib/configure-spot-event-plugin.ts index 4cc4ee39a..fcf85e92f 100644 --- a/packages/aws-rfdk/lib/deadline/lib/configure-spot-event-plugin.ts +++ b/packages/aws-rfdk/lib/deadline/lib/configure-spot-event-plugin.ts @@ -568,6 +568,7 @@ export class ConfigureSpotEventPlugin extends Construct { ValidUntil: fleet.validUntil?.date.toISOString(), // Need to convert from IResolvable to bypass TypeScript TagSpecifications: (spotFleetRequestTagsToken as unknown) as SpotFleetTagSpecification[], + Context: fleet.context, }; const spotFleetRequestConfigurations = fleet.deadlineGroups.map(group => { diff --git a/packages/aws-rfdk/lib/deadline/lib/spot-event-plugin-fleet.ts b/packages/aws-rfdk/lib/deadline/lib/spot-event-plugin-fleet.ts index c0d05936a..8a6174e4f 100644 --- a/packages/aws-rfdk/lib/deadline/lib/spot-event-plugin-fleet.ts +++ b/packages/aws-rfdk/lib/deadline/lib/spot-event-plugin-fleet.ts @@ -23,7 +23,6 @@ import { ISecurityGroup, IVpc, LaunchTemplate, - LaunchTemplateSpecialVersions, OperatingSystemType, Port, SecurityGroup, @@ -207,6 +206,13 @@ export interface SpotEventPluginFleetProps { */ readonly validUntil?: Expiration; + /** + * Reserved + * + * @default - No context string + */ + readonly context?: string; + /** * Properties for setting up the Deadline Worker's LogGroup * @default - LogGroup will be created with all properties' default values and a prefix of "/renderfarm/". @@ -429,6 +435,13 @@ export class SpotEventPluginFleet extends Construct implements ISpotEventPluginF */ public readonly validUntil?: Expiration; + /** + * Reserved + * + * @default - No context string + */ + public readonly context?: string; + /** * The Block devices that will be attached to your workers. * @@ -488,6 +501,7 @@ export class SpotEventPluginFleet extends Construct implements ISpotEventPluginF this.maxCapacity = props.maxCapacity; this.validUntil = props.validUntil; this.keyName = props.keyName; + this.context = props.context; const imageConfig = props.workerMachineImage.getImage(this); this.osType = imageConfig.osType; @@ -563,7 +577,7 @@ export class SpotEventPluginFleet extends Construct implements ISpotEventPluginF this.subnets.subnetIds.forEach(subnetId => { launchTemplateConfigs.push({ LaunchTemplateSpecification: { - Version: LaunchTemplateSpecialVersions.LATEST_VERSION, + Version: this.launchTemplate.versionNumber, LaunchTemplateId: this.launchTemplate.launchTemplateId, LaunchTemplateName: this.launchTemplate.launchTemplateName, }, diff --git a/packages/aws-rfdk/lib/deadline/test/configure-spot-event-plugin.test.ts b/packages/aws-rfdk/lib/deadline/test/configure-spot-event-plugin.test.ts index 393eb7ada..527a0ce60 100644 --- a/packages/aws-rfdk/lib/deadline/test/configure-spot-event-plugin.test.ts +++ b/packages/aws-rfdk/lib/deadline/test/configure-spot-event-plugin.test.ts @@ -228,7 +228,7 @@ describe('ConfigureSpotEventPlugin', () => { LaunchTemplateConfigs: Match.arrayWith([ Match.objectLike({ LaunchTemplateSpecification: { - Version: '$Latest', + Version: stack.resolve(fleet.launchTemplate.versionNumber), LaunchTemplateId: stack.resolve(fleet.launchTemplate.launchTemplateId), }, }), @@ -407,6 +407,42 @@ describe('ConfigureSpotEventPlugin', () => { }), })); }); + + test('fleet with context', () => { + // GIVEN + const context = 'context-abcdef'; + const fleetWithCustomProps = new SpotEventPluginFleet(stack, 'SpotEventPluginFleet', { + vpc, + renderQueue, + deadlineGroups: [ + groupName, + ], + instanceTypes: [ + InstanceType.of(InstanceClass.T3, InstanceSize.LARGE), + ], + workerMachineImage, + maxCapacity: 1, + context, + }); + + // WHEN + new ConfigureSpotEventPlugin(stack, 'ConfigureSpotEventPlugin', { + vpc, + renderQueue: renderQueue, + spotFleets: [ + fleetWithCustomProps, + ], + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('Custom::RFDK_ConfigureSpotEventPlugin', Match.objectLike({ + spotFleetRequestConfigurations: Match.objectLike({ + [groupName]: Match.objectLike({ + Context: context, + }), + }), + })); + }); }); test('only one object allowed per render queue', () => { diff --git a/packages/aws-rfdk/lib/lambdas/nodejs/configure-spot-event-plugin/conversion.ts b/packages/aws-rfdk/lib/lambdas/nodejs/configure-spot-event-plugin/conversion.ts index ecf33e1f1..96078ea0c 100644 --- a/packages/aws-rfdk/lib/lambdas/nodejs/configure-spot-event-plugin/conversion.ts +++ b/packages/aws-rfdk/lib/lambdas/nodejs/configure-spot-event-plugin/conversion.ts @@ -34,6 +34,7 @@ export function convertSpotFleetRequestConfiguration(spotFleetRequestConfigs: Sp Type: validateString(sfrConfigs.Type, `${group_name}.Type`), ValidUntil: validateStringOptional(sfrConfigs.ValidUntil, `${group_name}.ValidUntil`), TagSpecifications: convertTagSpecifications(sfrConfigs.TagSpecifications, `${group_name}.TagSpecifications`), + Context: validateStringOptional(sfrConfigs.Context, `${group_name}.Context`), }; convertedSpotFleetRequestConfigs[group_name] = convertedSpotFleetRequestProps; } diff --git a/packages/aws-rfdk/lib/lambdas/nodejs/configure-spot-event-plugin/types.ts b/packages/aws-rfdk/lib/lambdas/nodejs/configure-spot-event-plugin/types.ts index c56994a31..2069764a5 100644 --- a/packages/aws-rfdk/lib/lambdas/nodejs/configure-spot-event-plugin/types.ts +++ b/packages/aws-rfdk/lib/lambdas/nodejs/configure-spot-event-plugin/types.ts @@ -191,6 +191,13 @@ export interface SpotFleetRequestProps { * @default - the Spot Fleet request remains until you cancel it. */ readonly ValidUntil?: string; + + /** + * Reserved + * + * @default - No context string + */ + readonly Context?: string; } /**