Skip to content

Commit 3ea6062

Browse files
authored
fix(batch): jobDefinitionName returns ARN instead of name (#25207)
`EcsJobDefinition.jobDefinitionName` returns the ARN. This fix will return the name. Closes #25197. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent 9d472a9 commit 3ea6062

File tree

2 files changed

+62
-6
lines changed

2 files changed

+62
-6
lines changed

packages/@aws-cdk/aws-batch-alpha/lib/ecs-job-definition.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,21 @@ export class EcsJobDefinition extends JobDefinitionBase implements IEcsJobDefini
5858
* Import a JobDefinition by its arn.
5959
*/
6060
public static fromJobDefinitionArn(scope: Construct, id: string, jobDefinitionArn: string): IJobDefinition {
61-
const stack = Stack.of(scope);
62-
const jobDefinitionName = stack.splitArn(jobDefinitionArn, ArnFormat.SLASH_RESOURCE_NAME).resourceName!;
63-
6461
class Import extends JobDefinitionBase implements IEcsJobDefinition {
6562
public readonly jobDefinitionArn = jobDefinitionArn;
66-
public readonly jobDefinitionName = jobDefinitionName;
63+
public readonly jobDefinitionName = EcsJobDefinition.getJobDefinitionName(this, jobDefinitionArn);
6764
public readonly enabled = true;
6865
container = {} as any;
6966
}
7067

7168
return new Import(scope, id);
7269
}
7370

71+
private static getJobDefinitionName(scope: Construct, jobDefinitionArn: string) {
72+
const resourceName = Stack.of(scope).splitArn(jobDefinitionArn, ArnFormat.SLASH_RESOURCE_NAME).resourceName!;
73+
return resourceName.split(':')[0];
74+
}
75+
7476
readonly container: IEcsContainerDefinition
7577
public readonly propagateTags?: boolean;
7678

@@ -97,7 +99,7 @@ export class EcsJobDefinition extends JobDefinitionBase implements IEcsJobDefini
9799
resource: 'job-definition',
98100
resourceName: this.physicalName,
99101
});
100-
this.jobDefinitionName = this.getResourceNameAttribute(resource.ref);
102+
this.jobDefinitionName = EcsJobDefinition.getJobDefinitionName(scope, this.jobDefinitionArn);
101103
}
102104

103105
private renderPlatformCapabilities() {

packages/@aws-cdk/aws-batch-alpha/test/ecs-job-definition.test.ts

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Template } from 'aws-cdk-lib/assertions';
22
import * as ecs from 'aws-cdk-lib/aws-ecs';
3-
import { Size, Stack } from 'aws-cdk-lib';
3+
import { DefaultTokenResolver, Size, StringConcat, Stack, Tokenization } from 'aws-cdk-lib';
44
import { Compatibility, EcsEc2ContainerDefinition, EcsFargateContainerDefinition, EcsJobDefinition } from '../lib';
55

66

@@ -74,3 +74,57 @@ test('can be imported from ARN', () => {
7474
expect(importedJob.jobDefinitionArn).toEqual('arn:aws:batch:us-east-1:123456789012:job-definition/job-def-name:1');
7575
});
7676

77+
test('JobDefinitionName is parsed from arn', () => {
78+
// GIVEN
79+
const stack = new Stack();
80+
81+
// WHEN
82+
const jobDefinition = new EcsJobDefinition(stack, 'JobDefn', {
83+
propagateTags: true,
84+
container: new EcsEc2ContainerDefinition(stack, 'EcsContainer', {
85+
cpu: 256,
86+
image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'),
87+
memory: Size.mebibytes(2048),
88+
}),
89+
});
90+
91+
// THEN
92+
expect(Tokenization.resolve(jobDefinition.jobDefinitionName, {
93+
scope: stack,
94+
resolver: new DefaultTokenResolver(new StringConcat()),
95+
})).toEqual({
96+
'Fn::Select': [
97+
1,
98+
{
99+
'Fn::Split': [
100+
'/',
101+
{
102+
'Fn::Select': [
103+
5,
104+
{
105+
'Fn::Split': [
106+
':',
107+
{
108+
Ref: 'JobDefnA747EE6E',
109+
},
110+
],
111+
},
112+
],
113+
},
114+
],
115+
},
116+
],
117+
});
118+
});
119+
120+
test('JobDefinitionName is parsed from arn in imported job', () => {
121+
// GIVEN
122+
const stack = new Stack();
123+
124+
// WHEN
125+
const importedJob = EcsJobDefinition.fromJobDefinitionArn(stack, 'importedJobDefinition',
126+
'arn:aws:batch:us-east-1:123456789012:job-definition/job-def-name:1');
127+
128+
// THEN
129+
expect(importedJob.jobDefinitionName).toEqual('job-def-name');
130+
});

0 commit comments

Comments
 (0)