Skip to content

Commit 123b8dd

Browse files
feat(camPolicy): add tencent cam policy
1 parent 1cd7716 commit 123b8dd

File tree

10 files changed

+161
-9
lines changed

10 files changed

+161
-9
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ CloudGraph Tencent Provider will ask you what regions you would like to crawl an
5656

5757
| Service | Relations |
5858
| ------------------- | ------------------- |
59-
| securityGroup | |
60-
| securityGroupRule | |
59+
| camPolicy | |
6160
| ccn | ccnAttachment |
6261
| ccnAttachment | ccn |
62+
| securityGroup | |
63+
| securityGroupRule | |
6364
| subnet | vpc |
6465
| vpc | subnet, vpnGateway |
6566
| vpnGateway | vpc |

src/enums/schemasMap.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import services from './services'
44
* schemasMap is an object that contains schemas name by resource
55
*/
66
export default {
7-
[services.securityGroup]: 'tencentSecurityGroup',
8-
[services.securityGroupRule]: 'tencentSecurityGroupRule',
7+
[services.camPolicy]: 'tencentCamPolicy',
98
[services.ccn]: 'tencentCcn',
109
[services.ccnAttachment]: 'tencentCcnAttachment',
10+
[services.securityGroup]: 'tencentSecurityGroup',
11+
[services.securityGroupRule]: 'tencentSecurityGroupRule',
1112
[services.subnet]: 'tencentSubnet',
1213
[services.vpc]: 'tencentVpc',
1314
[services.vpnGateway]: 'tencentVpnGateway',

src/enums/serviceAliases.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
export default {
2-
securityGroup: 'securityGroups',
2+
camPolicy: 'camPolicies',
33
ccn: 'ccns',
44
ccnAttachment: 'ccnAttachments',
5+
securityGroup: 'securityGroups',
56
subnet: 'subnets',
67
vpc: 'vpcInstances',
78
vpnGateway: 'vpnGateways',

src/enums/serviceMap.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,18 @@ import TencentSubnet from '../services/subnet'
77
import TencentVpc from '../services/vpc'
88
import TencentTag from '../services/tag'
99
import TencentVpnGateway from '../services/vpnGateway'
10+
import TencentCamPolicy from '../services/camPolicy'
1011

1112
/**
1213
* serviceMap is an object that contains all currently supported services
1314
* serviceMap is used by the serviceFactory to produce instances of service classes
1415
*/
1516
export default {
16-
[services.securityGroup]: TencentSecurityGroup,
17-
[services.securityGroupRule]: TencentSecurityGroupRule,
17+
[services.camPolicy]: TencentCamPolicy,
1818
[services.ccn]: TencentCcn,
1919
[services.ccnAttachment]: TencentCcnAttachment,
20+
[services.securityGroup]: TencentSecurityGroup,
21+
[services.securityGroupRule]: TencentSecurityGroupRule,
2022
[services.subnet]: TencentSubnet,
2123
[services.vpc]: TencentVpc,
2224
[services.vpnGateway]: TencentVpnGateway,

src/enums/services.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
export default {
2-
securityGroup: 'securityGroup',
3-
securityGroupRule: 'securityGroupRule',
2+
camPolicy: 'camPolicy',
43
ccn: 'ccn',
54
ccnAttachment: 'ccnAttachment',
5+
securityGroup: 'securityGroup',
6+
securityGroupRule: 'securityGroupRule',
67
subnet: 'subnet',
78
vpc: 'vpc',
89
vpnGateway: 'vpnGateway',

src/services/camPolicy/data.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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 { StrategyInfo } 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+
11+
const lt = { ...loggerText }
12+
const { logger } = CloudGraph
13+
export const serviceName = 'CamPolicy'
14+
const apiEndpoint = initTestEndpoint(serviceName)
15+
16+
export interface RawTencentCamPolicy extends StrategyInfo {
17+
id: number
18+
region: string
19+
}
20+
21+
export default async ({
22+
regions,
23+
config,
24+
}: TencentServiceInput): Promise<{
25+
[region: string]: RawTencentCamPolicy[]
26+
}> =>
27+
new Promise(async resolve => {
28+
const camPolicyList: RawTencentCamPolicy[] = []
29+
30+
for (const region of regions.split(',')) {
31+
try {
32+
const CamClient = tencentcloud.cam.v20190116.Client
33+
const clientConfig: ClientConfig = { credential: config, region, profile: { httpProfile: { endpoint: apiEndpoint } } }
34+
const cam = new CamClient(clientConfig)
35+
36+
const response = await cam.ListPolicies(null)
37+
38+
if (response && !isEmpty(response.List)) {
39+
for (const instance of response.List) {
40+
camPolicyList.push({
41+
id: instance.PolicyId,
42+
...instance,
43+
region,
44+
})
45+
}
46+
}
47+
} catch (error) {
48+
generateTencentErrorLog(serviceName, 'cam:ListPolicies', error)
49+
}
50+
}
51+
logger.debug(lt.foundResources(serviceName, camPolicyList.length))
52+
resolve(groupBy(camPolicyList, 'region'))
53+
})

src/services/camPolicy/format.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { TencentCamPolicy } from '../../types/generated'
2+
import { RawTencentCamPolicy } from './data'
3+
4+
export default ({
5+
service,
6+
region,
7+
}: {
8+
service: RawTencentCamPolicy
9+
region: string
10+
}): TencentCamPolicy => {
11+
const {
12+
id,
13+
PolicyName: name,
14+
AddTime: addTime,
15+
Type: type,
16+
Description: description,
17+
CreateMode: createMode,
18+
Attachments: attachments,
19+
ServiceType: serviceType,
20+
IsAttached: isAttached = 0,
21+
Deactived: deactived,
22+
DeactivedDetail: deactivedDetail,
23+
IsServiceLinkedPolicy: isServiceLinkedPolicy,
24+
AttachEntityCount: attachEntityCount,
25+
AttachEntityBoundaryCount: attachEntityBoundaryCount,
26+
UpdateTime: updateTime,
27+
} = service
28+
29+
return {
30+
id: `${id}`,
31+
region,
32+
name,
33+
addTime,
34+
type,
35+
description,
36+
createMode,
37+
attachments,
38+
serviceType,
39+
isAttached,
40+
deactived,
41+
deactivedDetail,
42+
isServiceLinkedPolicy,
43+
attachEntityCount,
44+
attachEntityBoundaryCount,
45+
updateTime,
46+
}
47+
}

src/services/camPolicy/index.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {Service} from '@cloudgraph/sdk'
2+
import BaseService from '../base'
3+
import format from './format'
4+
import getData, { serviceName } from './data'
5+
import { getMutation } from '../../utils'
6+
7+
export default class TencentCamPolicy extends BaseService implements Service {
8+
format = format.bind(this)
9+
10+
getData = getData.bind(this)
11+
12+
mutation = getMutation(serviceName)
13+
}

src/services/camPolicy/schema.graphql

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
type tencentCamPolicy implements tencentBaseService @key(fields: "id") {
2+
name: String @search(by: [hash, regexp])
3+
addTime: String @search(by: [hash, regexp])
4+
type: Int @search
5+
description: String @search(by: [hash, regexp])
6+
createMode: Int @search
7+
attachments: Int @search
8+
serviceType: String @search(by: [hash, regexp])
9+
isAttached: Int @search
10+
deactived: Int @search
11+
deactivedDetail: [String] @search(by: [hash])
12+
isServiceLinkedPolicy: Int @search
13+
attachEntityCount: Int @search
14+
attachEntityBoundaryCount: Int @search
15+
updateTime: String @search(by: [hash, regexp])
16+
}

src/types/generated.ts

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

20+
export type TencentCamPolicy = TencentBaseService & {
21+
addTime?: Maybe<Scalars['String']>;
22+
attachEntityBoundaryCount?: Maybe<Scalars['Int']>;
23+
attachEntityCount?: Maybe<Scalars['Int']>;
24+
attachments?: Maybe<Scalars['Int']>;
25+
createMode?: Maybe<Scalars['Int']>;
26+
deactived?: Maybe<Scalars['Int']>;
27+
deactivedDetail?: Maybe<Array<Maybe<Scalars['String']>>>;
28+
description?: Maybe<Scalars['String']>;
29+
isAttached?: Maybe<Scalars['Int']>;
30+
isServiceLinkedPolicy?: Maybe<Scalars['Int']>;
31+
name?: Maybe<Scalars['String']>;
32+
serviceType?: Maybe<Scalars['String']>;
33+
type?: Maybe<Scalars['Int']>;
34+
updateTime?: Maybe<Scalars['String']>;
35+
};
36+
2037
export type TencentCcn = TencentBaseService & {
2138
bandwidthLimitType?: Maybe<Scalars['String']>;
2239
ccnAttachments?: Maybe<Array<Maybe<TencentCcnAttachment>>>;

0 commit comments

Comments
 (0)