Skip to content

Commit

Permalink
feat(batch): Importing a JobDefinition from name using `fromJobDefi…
Browse files Browse the repository at this point in the history
…nitionName` (#10448)

Add `fromJobDefinitionName` for `JobDefinition` construct. Ref: https://stackoverflow.com/a/55031183

closes #7172 

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
  • Loading branch information
ayush987goyal committed Sep 30, 2020
1 parent 44c1f20 commit 7ce91e8
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 1 deletion.
19 changes: 18 additions & 1 deletion packages/@aws-cdk/aws-batch/README.md
Expand Up @@ -242,10 +242,27 @@ new batch.JobDefinition(stack, 'batch-job-def-from-local', {

### Importing an existing Job Definition

To import an existing batch job definition, call `JobDefinition.fromJobDefinitionArn()`.
#### From ARN

To import an existing batch job definition from its ARN, call `JobDefinition.fromJobDefinitionArn()`.

Below is an example:

```ts
const job = batch.JobDefinition.fromJobDefinitionArn(this, 'imported-job-definition', 'arn:aws:batch:us-east-1:555555555555:job-definition/my-job-definition');
```

#### From Name

To import an existing batch job definition from its name, call `JobDefinition.fromJobDefinitionName()`.
If name is specified without a revision then the latest active revision is used.

Below is an example:

```ts
// Without revision
const job = batch.JobDefinition.fromJobDefinitionName(this, 'imported-job-definition', 'my-job-definition');

// With revision
const job = batch.JobDefinition.fromJobDefinitionName(this, 'imported-job-definition', 'my-job-definition:3');
```
25 changes: 25 additions & 0 deletions packages/@aws-cdk/aws-batch/lib/job-definition.ts
Expand Up @@ -269,6 +269,31 @@ export class JobDefinition extends Resource implements IJobDefinition {
return new Import(scope, id);
}

/**
* Imports an existing batch job definition by its name.
* If name is specified without a revision then the latest active revision is used.
*
* @param scope
* @param id
* @param jobDefinitionName
*/
public static fromJobDefinitionName(scope: Construct, id: string, jobDefinitionName: string): IJobDefinition {
const stack = Stack.of(scope);
const jobDefArn = stack.formatArn({
service: 'batch',
resource: 'job-definition',
sep: '/',
resourceName: jobDefinitionName,
});

class Import extends Resource implements IJobDefinition {
public readonly jobDefinitionArn = jobDefArn;
public readonly jobDefinitionName = jobDefinitionName;
}

return new Import(scope, id);
}

public readonly jobDefinitionArn: string;
public readonly jobDefinitionName: string;
private readonly imageConfig: JobDefinitionImageConfig;
Expand Down
10 changes: 10 additions & 0 deletions packages/@aws-cdk/aws-batch/test/job-definition.test.ts
Expand Up @@ -200,4 +200,14 @@ describe('Batch Job Definition', () => {
expect(importedJob.jobDefinitionName).toEqual('job-def-name:1');
expect(importedJob.jobDefinitionArn).toEqual('arn:aws:batch:us-east-1:123456789012:job-definition/job-def-name:1');
});

test('can be imported from a name', () => {
// WHEN
const importedJob = batch.JobDefinition.fromJobDefinitionName(stack, 'job-def-clone', 'job-def-name');

// THEN
expect(importedJob.jobDefinitionName).toEqual('job-def-name');
expect(importedJob.jobDefinitionArn)
.toEqual('arn:${Token[AWS.Partition.3]}:batch:${Token[AWS.Region.4]}:${Token[AWS.AccountId.0]}:job-definition/job-def-name');
});
});

0 comments on commit 7ce91e8

Please sign in to comment.