Skip to content

Commit 493c8a4

Browse files
authored
Merge pull request #15 from cloudgraphdev/feature/CG-1131-add-tencent-cam-group
feat(camGroup): add camGroup service
2 parents 291df6d + 86643b0 commit 493c8a4

10 files changed

+108
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ CloudGraph Tencent Provider will ask you what regions you would like to crawl an
5656

5757
| Service | Relations |
5858
| ------------------- | ------------------- |
59+
| camGroup | |
5960
| camPolicy | |
6061
| camUser | |
6162
| ccn | ccnAttachment |

src/enums/schemasMap.ts

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import services from './services'
44
* schemasMap is an object that contains schemas name by resource
55
*/
66
export default {
7+
[services.camGroup]: 'tencentCamGroup',
78
[services.camPolicy]: 'tencentCamPolicy',
89
[services.camUser]: 'tencentCamUser',
910
[services.ccn]: 'tencentCcn',

src/enums/serviceAliases.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export default {
2+
camGroup: 'camGroups',
23
camPolicy: 'camPolicies',
34
ccn: 'ccns',
45
ccnAttachment: 'ccnAttachments',

src/enums/serviceMap.ts

+2
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ import TencentVpnGatewayRoute from '../services/vpnGatewayRoute'
1515
import TencentCustomerGateway from '../services/customerGateway'
1616
import TencentCamUser from '../services/camUser'
1717
import TencentVpnConnection from '../services/vpnConnection'
18+
import TencentCamGroup from '../services/camGroup'
1819

1920
/**
2021
* serviceMap is an object that contains all currently supported services
2122
* serviceMap is used by the serviceFactory to produce instances of service classes
2223
*/
2324
export default {
25+
[services.camGroup]: TencentCamGroup,
2426
[services.camPolicy]: TencentCamPolicy,
2527
[services.camUser]: TencentCamUser,
2628
[services.ccn]: TencentCcn,

src/enums/services.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export default {
2+
camGroup: 'camGroup',
23
camPolicy: 'camPolicy',
34
camUser: 'camUser',
45
ccn: 'ccn',

src/services/camGroup/data.ts

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import * as tencentcloud from 'tencentcloud-sdk-nodejs'
2+
import { ClientConfig } from 'tencentcloud-sdk-nodejs/tencentcloud/common/interface'
3+
import CloudGraph from '@cloudgraph/sdk'
4+
import groupBy from 'lodash/groupBy'
5+
import isEmpty from 'lodash/isEmpty'
6+
import { GroupInfo } from 'tencentcloud-sdk-nodejs/tencentcloud/services/cam/v20190116/cam_models'
7+
import loggerText from '../../properties/logger'
8+
import { TencentServiceInput } from '../../types'
9+
import { initTestEndpoint, generateTencentErrorLog } from '../../utils'
10+
import { GLOBAL_REGION } from '../../config/constants'
11+
12+
const lt = { ...loggerText }
13+
const { logger } = CloudGraph
14+
export const serviceName = 'CamGroup'
15+
const apiEndpoint = initTestEndpoint(serviceName)
16+
17+
export interface RawTencentCamGroup extends GroupInfo {
18+
id: string
19+
region: string
20+
}
21+
22+
export default async ({
23+
config,
24+
}: TencentServiceInput): Promise<{
25+
[region: string]: RawTencentCamGroup[]
26+
}> =>
27+
new Promise(async resolve => {
28+
const camGroupList: RawTencentCamGroup[] = []
29+
30+
try {
31+
const CamClient = tencentcloud.cam.v20190116.Client
32+
const clientConfig: ClientConfig = { credential: config, profile: { httpProfile: { endpoint: apiEndpoint } } }
33+
const cam = new CamClient(clientConfig)
34+
35+
const response = await cam.ListGroups(null)
36+
37+
if (response && !isEmpty(response.GroupInfo)) {
38+
for (const instance of response.GroupInfo) {
39+
camGroupList.push({
40+
id: `${instance.GroupId}`,
41+
...instance,
42+
region: GLOBAL_REGION,
43+
})
44+
}
45+
}
46+
} catch (error) {
47+
generateTencentErrorLog(serviceName, 'cam:ListGroups', error)
48+
}
49+
50+
logger.debug(lt.foundResources(serviceName, camGroupList.length))
51+
resolve(groupBy(camGroupList, 'region'))
52+
})

src/services/camGroup/format.ts

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { TencentCamGroup } from '../../types/generated'
2+
import { RawTencentCamGroup } from './data'
3+
4+
export default ({
5+
service,
6+
}: {
7+
service: RawTencentCamGroup
8+
}): TencentCamGroup => {
9+
const {
10+
id,
11+
region,
12+
GroupName: name,
13+
CreateTime: createTime,
14+
Remark: remark
15+
} = service
16+
17+
return {
18+
id,
19+
region,
20+
name,
21+
createTime,
22+
remark,
23+
}
24+
}

src/services/camGroup/index.ts

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Service } from '@cloudgraph/sdk'
2+
import BaseService from '../base'
3+
import format from './format'
4+
import getData from './data'
5+
import { getMutation } from '../../utils'
6+
import services from '../../enums/services'
7+
import schemasMap from '../../enums/schemasMap'
8+
9+
export default class TencentCamGroup extends BaseService implements Service {
10+
format = format.bind(this)
11+
12+
getData = getData.bind(this)
13+
14+
mutation = getMutation(schemasMap[services.camGroup])
15+
}

src/services/camGroup/schema.graphql

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type tencentCamGroup implements tencentBaseService @key(fields: "id") {
2+
name: String @search(by: [hash, regexp])
3+
createTime: String @search(by: [hash, regexp])
4+
remark: String @search(by: [hash, regexp])
5+
}

src/types/generated.ts

+6
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ export type TencentBaseService = {
1717
region?: Maybe<Scalars['String']>;
1818
};
1919

20+
export type TencentCamGroup = TencentBaseService & {
21+
createTime?: Maybe<Scalars['String']>;
22+
name?: Maybe<Scalars['String']>;
23+
remark?: Maybe<Scalars['String']>;
24+
};
25+
2026
export type TencentCamPolicy = TencentBaseService & {
2127
addTime?: Maybe<Scalars['String']>;
2228
attachEntityBoundaryCount?: Maybe<Scalars['Int']>;

0 commit comments

Comments
 (0)