Skip to content

Commit 0ccccc6

Browse files
committed
geat: Handle TODOs for ecs task
1 parent fcb3ff3 commit 0ccccc6

7 files changed

Lines changed: 97 additions & 9 deletions

File tree

src/services/ecsTask/connections.ts

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import { RawAwsEcsTask } from '../ecsTask/data'
44
import { RawAwsEcsContainer } from '../ecsContainer/data'
55
import { RawAwsEcsCluster } from '../ecsCluster/data'
66
import { RawAwsEcsTaskDefinition } from '../ecsTaskDefinition/data'
7+
import { RawAwsIamRole } from '../iamRole/data'
78
import services from '../../enums/services'
9+
import { globalRegionName } from '../../enums/regions'
810

911
export default ({
10-
account,
1112
service,
1213
data,
1314
region,
@@ -19,7 +20,7 @@ export default ({
1920
}): {
2021
[property: string]: ServiceConnection[]
2122
} => {
22-
const { taskArn: id } = service
23+
const { taskArn: id, overrides } = service
2324
const connections: ServiceConnection[] = []
2425

2526
/**
@@ -30,8 +31,11 @@ export default ({
3031
data: { [property: string]: RawAwsEcsContainer[] }
3132
} = data.find(({ name }) => name === services.ecsContainer)
3233
if (containers?.data?.[region]) {
33-
const containersInRegion: RawAwsEcsContainer[] = containers.data[region].filter(
34-
({ containerInstanceArn }) => containerInstanceArn === service.containerInstanceArn
34+
const containersInRegion: RawAwsEcsContainer[] = containers.data[
35+
region
36+
].filter(
37+
({ containerInstanceArn }) =>
38+
containerInstanceArn === service.containerInstanceArn
3539
)
3640
if (!isEmpty(containersInRegion)) {
3741
for (const container of containersInRegion) {
@@ -60,7 +64,6 @@ export default ({
6064
)
6165
if (!isEmpty(clustersInRegion)) {
6266
for (const instance of clustersInRegion) {
63-
6467
connections.push({
6568
id: instance.clusterArn,
6669
resourceType: services.ecsCluster,
@@ -79,12 +82,13 @@ export default ({
7982
data: { [property: string]: RawAwsEcsTaskDefinition[] }
8083
} = data.find(({ name }) => name === services.ecsTaskDefinition)
8184
if (taskDefinitions?.data?.[region]) {
82-
const taskDefinitionsInRegion: RawAwsEcsTaskDefinition[] = taskDefinitions.data[region].filter(
83-
({ taskDefinitionArn }) => taskDefinitionArn === service.taskDefinitionArn
84-
)
85+
const taskDefinitionsInRegion: RawAwsEcsTaskDefinition[] =
86+
taskDefinitions.data[region].filter(
87+
({ taskDefinitionArn }) =>
88+
taskDefinitionArn === service.taskDefinitionArn
89+
)
8590
if (!isEmpty(taskDefinitionsInRegion)) {
8691
for (const instance of taskDefinitionsInRegion) {
87-
8892
connections.push({
8993
id: instance.taskDefinitionArn,
9094
resourceType: services.ecsTaskDefinition,
@@ -95,6 +99,30 @@ export default ({
9599
}
96100
}
97101

102+
/**
103+
* Find related IAM Roles
104+
*/
105+
const roles: { name: string; data: { [property: string]: any[] } } =
106+
data.find(({ name }) => name === services.iamRole)
107+
if (roles?.data?.[globalRegionName]) {
108+
const dataAtRegion: RawAwsIamRole[] = roles.data[globalRegionName].filter(
109+
({ Arn }: RawAwsIamRole) => overrides?.executionRoleArn === Arn ||
110+
overrides?.taskRoleArn === Arn
111+
)
112+
if (!isEmpty(dataAtRegion)) {
113+
for (const instance of dataAtRegion) {
114+
const { Arn: roleId } = instance
115+
116+
connections.push({
117+
id: roleId,
118+
resourceType: services.iamRole,
119+
relation: 'child',
120+
field: 'iamRoles',
121+
})
122+
}
123+
}
124+
}
125+
98126
const result = {
99127
[id]: connections,
100128
}

src/services/ecsTask/schema.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type awsEcsTask @key(fields: "arn") {
3838
ecsCluster: [awsEcsCluster] @hasInverse(field: ecsTask)
3939
ecsContainer: [awsEcsContainer] @hasInverse(field: ecsTask)
4040
ecsTaskDefinition: [awsEcsTaskDefinition] @hasInverse(field: ecsTask)
41+
iamRoles: [awsIamRole] @hasInverse(field: ecsTask)
4142
}
4243

4344
type awsEcsAttribute
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { ServiceConnection } from '@cloudgraph/sdk'
2+
import { isEmpty } from 'lodash'
3+
import { RawAwsEcsTaskDefinition } from '../ecsTaskDefinition/data'
4+
import { RawAwsIamRole } from '../iamRole/data'
5+
import services from '../../enums/services'
6+
import { globalRegionName } from '../../enums/regions'
7+
8+
export default ({
9+
service,
10+
data,
11+
}: {
12+
account: string
13+
service: RawAwsEcsTaskDefinition
14+
data: { name: string; data: { [property: string]: any[] } }[]
15+
region: string
16+
}): {
17+
[property: string]: ServiceConnection[]
18+
} => {
19+
const { taskDefinitionArn: id, executionRoleArn } = service
20+
const connections: ServiceConnection[] = []
21+
22+
/**
23+
* Find related IAM Roles
24+
*/
25+
const roles: { name: string; data: { [property: string]: any[] } } =
26+
data.find(({ name }) => name === services.iamRole)
27+
if (roles?.data?.[globalRegionName]) {
28+
const dataAtRegion: RawAwsIamRole[] = roles.data[globalRegionName].filter(
29+
({ Arn }: RawAwsIamRole) => executionRoleArn === Arn
30+
)
31+
if (!isEmpty(dataAtRegion)) {
32+
for (const instance of dataAtRegion) {
33+
const { Arn: roleId } = instance
34+
35+
connections.push({
36+
id: roleId,
37+
resourceType: services.iamRole,
38+
relation: 'child',
39+
field: 'iamRole',
40+
})
41+
}
42+
}
43+
}
44+
45+
const result = {
46+
[id]: connections,
47+
}
48+
return result
49+
}

src/services/ecsTaskDefinition/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ import {Service} from '@cloudgraph/sdk'
22
import BaseService from '../base'
33
import format from './format'
44
import getData from './data'
5+
import getConnections from './connections'
56
import mutation from './mutation'
67

78
export default class EcsTaskDefinition extends BaseService implements Service {
89
format = format.bind(this)
910

1011
getData = getData.bind(this)
1112

13+
getConnections = getConnections.bind(this)
14+
1215
mutation = mutation
1316
}

src/services/ecsTaskDefinition/schema.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type awsEcsTaskDefinition @key(fields: "arn") {
2828
ecsService: [awsEcsService] @hasInverse(field: ecsTaskDefinition)
2929
ecsTask: [awsEcsTask] @hasInverse(field: ecsTaskDefinition)
3030
ecsTaskSet: [awsEcsTaskSet] @hasInverse(field: ecsTaskDefinition)
31+
iamRole: [awsIamRole] @hasInverse(field: ecsTaskDefinition)
3132
}
3233

3334
type awsEcsContainerDefinition

src/services/iamRole/schema.graphql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,6 @@ type awsIamRole @key(fields: "id") {
2323
sageMakerNotebookInstances: [awsSageMakerNotebookInstance] @hasInverse(field: iamRole)
2424
systemsManagerInstances: [awsSystemsManagerInstance] @hasInverse(field: iamRole)
2525
iamInstanceProfiles: [awsIamInstanceProfile] @hasInverse(field: iamRole)
26+
ecsTask: [awsEcsTask] @hasInverse(field: iamRoles)
27+
ecsTaskDefinition: [awsEcsTaskDefinition] @hasInverse(field: iamRole)
2628
}

src/types/generated.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2104,6 +2104,7 @@ export type AwsEcsTask = {
21042104
executionStoppedAt?: Maybe<Scalars['String']>;
21052105
group?: Maybe<Scalars['String']>;
21062106
healthStatus?: Maybe<Scalars['String']>;
2107+
iamRoles?: Maybe<Array<Maybe<AwsIamRole>>>;
21072108
id: Scalars['String'];
21082109
inferenceAccelerators?: Maybe<Array<Maybe<AwsEcsInferenceAccelerator>>>;
21092110
lastStatus?: Maybe<Scalars['String']>;
@@ -2136,6 +2137,7 @@ export type AwsEcsTaskDefinition = {
21362137
ephemeralStorage?: Maybe<AwsEcsEphemeralStorage>;
21372138
executionRoleArn?: Maybe<Scalars['String']>;
21382139
family?: Maybe<Scalars['String']>;
2140+
iamRole?: Maybe<Array<Maybe<AwsIamRole>>>;
21392141
id: Scalars['String'];
21402142
inferenceAccelerators?: Maybe<Array<Maybe<AwsEcsInferenceAccelerator>>>;
21412143
ipcMode?: Maybe<Scalars['String']>;
@@ -3191,6 +3193,8 @@ export type AwsIamRole = {
31913193
createdAt?: Maybe<Scalars['String']>;
31923194
description?: Maybe<Scalars['String']>;
31933195
ecsService?: Maybe<Array<Maybe<AwsEcsService>>>;
3196+
ecsTask?: Maybe<Array<Maybe<AwsEcsTask>>>;
3197+
ecsTaskDefinition?: Maybe<Array<Maybe<AwsEcsTaskDefinition>>>;
31943198
eksCluster?: Maybe<Array<Maybe<AwsEksCluster>>>;
31953199
flowLogs?: Maybe<Array<Maybe<AwsFlowLog>>>;
31963200
glueJobs?: Maybe<Array<Maybe<AwsGlueJob>>>;

0 commit comments

Comments
 (0)