Skip to content

Commit 2e9e559

Browse files
mvcninjajpinkney-aws
authored andcommitted
eslint: fix EOL rule for windows
1 parent 3b6197b commit 2e9e559

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+23929
-17025
lines changed

.eslintrc.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,5 +187,7 @@ module.exports = {
187187
],
188188
},
189189
],
190+
191+
'prettier/prettier': ['error', { endOfLine: 'auto' }],
190192
},
191193
}

package-lock.json

Lines changed: 18963 additions & 17013 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/core/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,8 @@
460460
"dependencies": {
461461
"@amzn/codewhisperer-streaming": "file:../../src.gen/@amzn/codewhisperer-streaming",
462462
"@aws-sdk/client-cognito-identity": "^3.637.0",
463+
"@aws-sdk/client-docdb": "^3.596.0",
464+
"@aws-sdk/client-docdb-elastic": "^3.600.0",
463465
"@aws-sdk/client-lambda": "^3.637.0",
464466
"@aws-sdk/client-sso": "^3.342.0",
465467
"@aws-sdk/client-sso-oidc": "^3.574.0",

packages/core/package.nls.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,17 @@
206206
"AWS.command.apprunner.copyServiceUrl": "Copy Service URL",
207207
"AWS.command.apprunner.open": "Open in Browser",
208208
"AWS.command.apprunner.startDeployment": "Start Deployment",
209+
"AWS.command.docdb.createCluster": "Create DocumentDB Cluster",
210+
"AWS.command.docdb.createInstance": "Add Instance...",
211+
"AWS.command.docdb.modifyInstance": "Modify Class...",
212+
"AWS.command.docdb.rebootInstance": "Reboot Instance",
213+
"AWS.command.docdb.startCluster": "Start Cluster",
214+
"AWS.command.docdb.stopCluster": "Stop Cluster",
215+
"AWS.command.docdb.tags": "Tags...",
216+
"AWS.command.docdb.open": "Open in Browser",
217+
"AWS.command.docdb.openHelp": "Open Getting Started Guide",
218+
"AWS.command.docdb.copyEndpoint": "Copy Endpoint",
219+
"AWS.command.docdb.addRegion": "Add region...",
209220
"AWS.command.resources.copyIdentifier": "Copy Identifier",
210221
"AWS.command.resources.configure": "Show Resources...",
211222
"AWS.command.codewhisperer.introduction": "What is Amazon Q?",
@@ -242,6 +253,7 @@
242253
"AWS.generic.copyUrl": "Copy URL",
243254
"AWS.generic.promptDelete": "Delete...",
244255
"AWS.generic.promptUpdate": "Update...",
256+
"AWS.generic.promptRename": "Rename...",
245257
"AWS.generic.preview": "Preview",
246258
"AWS.generic.viewDocs": "View Documentation",
247259
"AWS.ssmDocument.ssm.maxItemsComputed.desc": "Controls the maximum number of problems produced by the SSM Document language server.",

packages/core/src/awsexplorer/regionNode.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import { StepFunctionsNode } from '../stepFunctions/explorer/stepFunctionsNodes'
2020
import { SsmDocumentNode } from '../ssmDocument/explorer/ssmDocumentNode'
2121
import { ResourcesNode } from '../dynamicResources/explorer/nodes/resourcesNode'
2222
import { AppRunnerNode } from '../awsService/apprunner/explorer/apprunnerNode'
23+
import { DocumentDBNode } from '../docdb/explorer/docdbNode'
24+
import { DefaultDocumentDBClient } from '../shared/clients/docdbClient'
2325
import { DefaultAppRunnerClient } from '../shared/clients/apprunnerClient'
2426
import { DefaultEcrClient } from '../shared/clients/ecrClient'
2527
import { DefaultRedshiftClient } from '../shared/clients/redshiftClient'
@@ -59,6 +61,10 @@ const serviceCandidates: ServiceNode[] = [
5961
serviceId: 'cloudformation',
6062
createFn: (regionCode: string) => new CloudFormationNode(regionCode),
6163
},
64+
{
65+
serviceId: 'docdb',
66+
createFn: (regionCode: string) => new DocumentDBNode(DefaultDocumentDBClient.create(regionCode)),
67+
},
6268
{
6369
serviceId: 'logs',
6470
createFn: (regionCode: string) => new CloudWatchLogsNode(regionCode),
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/*!
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import { Commands } from '../shared'
7+
import { ExtContext } from '../shared/extensions'
8+
import { DBResourceNode } from './explorer/dbResourceNode'
9+
import { DocumentDBNode } from './explorer/docdbNode'
10+
import { DBClusterNode } from './explorer/dbClusterNode'
11+
import { DBInstanceNode } from './explorer/dbInstanceNode'
12+
import { addRegion } from './commands/addRegion'
13+
import { createCluster } from './commands/createCluster'
14+
import { deleteCluster } from './commands/deleteCluster'
15+
import { renameCluster } from './commands/renameCluster'
16+
import { startCluster } from './commands/startCluster'
17+
import { stopCluster } from './commands/stopCluster'
18+
import { createInstance } from './commands/createInstance'
19+
import { deleteInstance } from './commands/deleteInstance'
20+
import { modifyInstance } from './commands/modifyInstance'
21+
import { rebootInstance } from './commands/rebootInstance'
22+
import { renameInstance } from './commands/renameInstance'
23+
import { addTag, listTags, removeTag } from './commands/tagCommands'
24+
import { env, Uri } from 'vscode'
25+
26+
/**
27+
* Activates DocumentDB components.
28+
*/
29+
30+
export async function activate(ctx: ExtContext): Promise<void> {
31+
ctx.extensionContext.subscriptions.push(
32+
Commands.register('aws.docdb.createCluster', async (node?: DocumentDBNode) => {
33+
await createCluster(node)
34+
}),
35+
36+
Commands.register('aws.docdb.deleteCluster', async (node: DBClusterNode) => {
37+
await deleteCluster(node)
38+
}),
39+
40+
Commands.register('aws.docdb.renameCluster', async (node: DBClusterNode) => {
41+
await renameCluster(node)
42+
}),
43+
44+
Commands.register('aws.docdb.startCluster', async (node?: DBClusterNode) => {
45+
await startCluster(node)
46+
}),
47+
48+
Commands.register('aws.docdb.stopCluster', async (node?: DBClusterNode) => {
49+
await stopCluster(node)
50+
}),
51+
52+
Commands.register('aws.docdb.addRegion', async (node: DBClusterNode) => {
53+
await addRegion(node)
54+
}),
55+
56+
Commands.register('aws.docdb.createInstance', async (node: DBClusterNode) => {
57+
await createInstance(node)
58+
}),
59+
60+
Commands.register('aws.docdb.deleteInstance', async (node: DBInstanceNode) => {
61+
await deleteInstance(node)
62+
}),
63+
64+
Commands.register('aws.docdb.modifyInstance', async (node: DBInstanceNode) => {
65+
await modifyInstance(node)
66+
}),
67+
68+
Commands.register('aws.docdb.rebootInstance', async (node: DBInstanceNode) => {
69+
await rebootInstance(node)
70+
}),
71+
72+
Commands.register('aws.docdb.renameInstance', async (node: DBInstanceNode) => {
73+
await renameInstance(node)
74+
}),
75+
76+
Commands.register('aws.docdb.listTags', async (node: DBResourceNode) => {
77+
await listTags(node)
78+
}),
79+
80+
Commands.register('aws.docdb.addTag', async (node: DBResourceNode) => {
81+
await addTag(node)
82+
}),
83+
84+
Commands.register('aws.docdb.removeTag', async (node: DBResourceNode) => {
85+
await removeTag(node)
86+
}),
87+
88+
Commands.register('aws.docdb.openBrowser', async (node?: DBResourceNode) => {
89+
await node?.openInBrowser()
90+
}),
91+
92+
Commands.register('aws.docdb.openHelp', async (node?: DBResourceNode) => {
93+
const url = Uri.parse('https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html')
94+
await env.openExternal(url)
95+
}),
96+
97+
Commands.register('aws.docdb.copyEndpoint', async (node?: DBResourceNode) => {
98+
await node?.copyEndpoint()
99+
})
100+
)
101+
}
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
/*!
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import * as vscode from 'vscode'
7+
import { getLogger } from '../../shared/logger'
8+
import { telemetry } from '../../shared/telemetry'
9+
import { localize } from '../../shared/utilities/vsCodeUtils'
10+
import { DBClusterNode } from '../explorer/dbClusterNode'
11+
import { DBGlobalClusterNode } from '../explorer/dbGlobalClusterNode'
12+
import { DefaultDocumentDBClient } from '../../shared/clients/docdbClient'
13+
import { ToolkitError } from '../../shared'
14+
import { showViewLogsMessage } from '../../shared/utilities/messages'
15+
import { isValidResponse } from '../../shared/wizards/wizard'
16+
import { CancellationError } from '../../shared/utilities/timeoutUtils'
17+
import { CreateGlobalClusterWizard } from '../wizards/createGlobalClusterWizard'
18+
import { CreateDBClusterMessage } from '@aws-sdk/client-docdb'
19+
import { createInstancesForCluster } from './createCluster'
20+
import { isSupportedGlobalInstanceClass } from '../utils'
21+
22+
export async function addRegion(node: DBClusterNode | DBGlobalClusterNode): Promise<void> {
23+
if (!node) {
24+
throw new ToolkitError('No node specified for AddRegion')
25+
}
26+
27+
return telemetry.docdb_addRegion.run(async () => {
28+
let globalClusterName = undefined
29+
30+
if (node.cluster.StorageEncrypted) {
31+
void vscode.window.showErrorMessage('Encrypted clusters are not supported')
32+
return
33+
}
34+
35+
if (node instanceof DBClusterNode) {
36+
if (node.clusterRole !== 'regional') {
37+
void vscode.window.showErrorMessage('Only regional clusters are supported')
38+
return
39+
}
40+
41+
if (node.cluster.DBClusterMembers?.length === 0) {
42+
void vscode.window.showErrorMessage(
43+
localize(
44+
'AWS.docdb.addRegion.noInstances',
45+
'Cluster must have at least one instance to add a region'
46+
)
47+
)
48+
throw new ToolkitError('Cluster must have at least one instance to add a region', { cancelled: true })
49+
}
50+
51+
const unsupportedInstanceFound = node.instances.find(
52+
(instance) => !isSupportedGlobalInstanceClass(instance.DBInstanceClass!)
53+
)
54+
55+
if (unsupportedInstanceFound) {
56+
void vscode.window.showErrorMessage(
57+
localize(
58+
'AWS.docdb.addRegion.unsupportedInstanceClass',
59+
'Instance class {0} not supported for global cluster. Upgrade the instances then try again.',
60+
unsupportedInstanceFound.DBInstanceClass
61+
)
62+
)
63+
throw new ToolkitError('Instance class not supported for global cluster', {
64+
cancelled: true,
65+
code: 'docdbInstanceClassNotSupported',
66+
})
67+
}
68+
} else {
69+
globalClusterName = node.cluster.GlobalClusterIdentifier
70+
71+
if (node.cluster.GlobalClusterMembers!.length > 4) {
72+
void vscode.window.showErrorMessage(
73+
localize('AWS.docdb.addRegion.maxRegions', 'Global clusters can have a maximum of 5 regions')
74+
)
75+
throw new ToolkitError('Global clusters can have a maximum of 5 regions', {
76+
cancelled: true,
77+
code: 'docdbMaxRegionsInUse',
78+
})
79+
}
80+
}
81+
82+
if (!node.isAvailable) {
83+
void vscode.window.showErrorMessage(localize('AWS.docdb.clusterStopped', 'Cluster must be running'))
84+
throw new ToolkitError('Cluster not available', { cancelled: true, code: 'docdbClusterStopped' })
85+
}
86+
87+
const wizard = new CreateGlobalClusterWizard(node.regionCode, node.cluster.EngineVersion, node.client, {
88+
initState: { GlobalClusterName: globalClusterName },
89+
})
90+
const response = await wizard.run()
91+
92+
if (!isValidResponse(response)) {
93+
throw new CancellationError('user')
94+
}
95+
96+
const regionCode = response.RegionCode
97+
let input: CreateDBClusterMessage
98+
let clusterName = response.GlobalClusterName
99+
100+
try {
101+
if (node instanceof DBClusterNode) {
102+
// Create new global cluster from regional cluster
103+
const primaryCluster = node.cluster
104+
105+
getLogger().info(`docdb: Creating global cluster: ${clusterName}`)
106+
const globalCluster = await node.client.createGlobalCluster({
107+
GlobalClusterIdentifier: response.GlobalClusterName,
108+
SourceDBClusterIdentifier: primaryCluster.DBClusterArn,
109+
})
110+
111+
input = {
112+
GlobalClusterIdentifier: globalCluster?.GlobalClusterIdentifier,
113+
DBClusterIdentifier: response.Cluster.DBClusterIdentifier,
114+
DeletionProtection: primaryCluster.DeletionProtection,
115+
Engine: primaryCluster.Engine,
116+
EngineVersion: primaryCluster.EngineVersion,
117+
StorageType: primaryCluster.StorageType,
118+
StorageEncrypted: globalCluster?.StorageEncrypted,
119+
}
120+
} else {
121+
// Add secondary cluster to global cluster
122+
const globalCluster = node.cluster
123+
124+
input = {
125+
GlobalClusterIdentifier: globalClusterName,
126+
DBClusterIdentifier: response.Cluster.DBClusterIdentifier,
127+
DeletionProtection: globalCluster.DeletionProtection,
128+
Engine: globalCluster.Engine,
129+
EngineVersion: globalCluster.EngineVersion,
130+
StorageEncrypted: globalCluster.StorageEncrypted,
131+
}
132+
}
133+
134+
clusterName = response.Cluster.DBClusterIdentifier
135+
getLogger().info(`docdb: Creating secondary cluster: ${clusterName} in region ${regionCode}`)
136+
137+
const client = DefaultDocumentDBClient.create(regionCode)
138+
const newCluster = await client.createCluster(input)
139+
140+
if (response.Cluster.DBInstanceCount) {
141+
await createInstancesForCluster(
142+
client,
143+
clusterName,
144+
response.Cluster.DBInstanceClass,
145+
response.Cluster.DBInstanceCount
146+
)
147+
}
148+
149+
getLogger().info('docdb: Created cluster: %O', newCluster)
150+
void vscode.window.showInformationMessage(localize('AWS.docdb.addRegion.success', 'Region added'))
151+
152+
if (node instanceof DBClusterNode) {
153+
node?.parent.refresh()
154+
} else {
155+
node?.refresh()
156+
}
157+
} catch (e) {
158+
getLogger().error(`docdb: Failed to create cluster ${clusterName}: %s`, e)
159+
void showViewLogsMessage(
160+
localize('AWS.docdb.createCluster.error', 'Failed to create cluster: {0}', clusterName)
161+
)
162+
throw ToolkitError.chain(e, `Failed to create cluster ${clusterName}`)
163+
}
164+
})
165+
}

0 commit comments

Comments
 (0)