Skip to content

Commit 3008405

Browse files
NewtonDerNewton Der
andauthored
fix(sagemaker): Show error message when trying to connect remotely from remote workspace (aws#2158)
## Problem When a user is connected to a remote workspace and clicks the Open Remote Connection button, they see an error message about the Remote SSH extension not being installed, when the real reason is that they cannot connect remotely from a remote workspace. ## Solution Show an error message which states clearly that they cannot connect via deeplink when in a remote workspace. --- - Treat all work as PUBLIC. Private `feature/x` branches will not be squash-merged at release time. - Your code changes must meet the guidelines in [CONTRIBUTING.md](https://github.com/aws/aws-toolkit-vscode/blob/master/CONTRIBUTING.md#guidelines). - License: I confirm that my contribution is made under the terms of the Apache 2.0 license. --------- Co-authored-by: Newton Der <[email protected]>
1 parent cb1b95d commit 3008405

File tree

3 files changed

+33
-17
lines changed

3 files changed

+33
-17
lines changed

packages/core/src/awsService/sagemaker/commands.ts

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import { ExtContext } from '../../shared/extensions'
1818
import { SagemakerClient } from '../../shared/clients/sagemaker'
1919
import { ToolkitError } from '../../shared/errors'
2020
import { showConfirmationMessage } from '../../shared/utilities/messages'
21-
import { InstanceTypeError } from './constants'
21+
import { RemoteSessionError } from '../../shared/remoteSession'
22+
import { ConnectFromRemoteWorkspaceMessage, InstanceTypeError } from './constants'
2223

2324
const localize = nls.loadMessageBundle()
2425

@@ -91,34 +92,36 @@ export async function deeplinkConnect(
9192
)
9293

9394
if (isRemoteWorkspace()) {
94-
void vscode.window.showErrorMessage(
95-
'You are in a remote workspace, skipping deeplink connect. Please open from a local workspace.'
96-
)
95+
void vscode.window.showErrorMessage(ConnectFromRemoteWorkspaceMessage)
9796
return
9897
}
9998

100-
const remoteEnv = await prepareDevEnvConnection(
101-
connectionIdentifier,
102-
ctx.extensionContext,
103-
'sm_dl',
104-
session,
105-
wsUrl,
106-
token,
107-
domain
108-
)
109-
11099
try {
100+
const remoteEnv = await prepareDevEnvConnection(
101+
connectionIdentifier,
102+
ctx.extensionContext,
103+
'sm_dl',
104+
session,
105+
wsUrl,
106+
token,
107+
domain
108+
)
109+
111110
await startVscodeRemote(
112111
remoteEnv.SessionProcess,
113112
remoteEnv.hostname,
114113
'/home/sagemaker-user',
115114
remoteEnv.vscPath,
116115
'sagemaker-user'
117116
)
118-
} catch (err) {
117+
} catch (err: any) {
119118
getLogger().error(
120119
`sm:OpenRemoteConnect: Unable to connect to target space with arn: ${connectionIdentifier} error: ${err}`
121120
)
121+
122+
if (![RemoteSessionError.MissingExtension, RemoteSessionError.ExtensionVersionTooLow].includes(err.code)) {
123+
throw err
124+
}
122125
}
123126
}
124127

@@ -157,6 +160,11 @@ export async function stopSpace(node: SagemakerSpaceNode, ctx: vscode.ExtensionC
157160
}
158161

159162
export async function openRemoteConnect(node: SagemakerSpaceNode, ctx: vscode.ExtensionContext) {
163+
if (isRemoteWorkspace()) {
164+
void vscode.window.showErrorMessage(ConnectFromRemoteWorkspaceMessage)
165+
return
166+
}
167+
160168
if (node.getStatus() === 'Stopped') {
161169
const client = new SagemakerClient(node.regionCode)
162170

packages/core/src/awsService/sagemaker/constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6+
export const ConnectFromRemoteWorkspaceMessage =
7+
'Unable to establish new remote connection. Your last active VS Code window is connected to a remote workspace. To open a new SageMaker Studio connection, select your local VS Code window and try again.'
8+
69
export const InstanceTypeError = 'InstanceTypeError'
710

811
export const InstanceTypeMinimum = 'ml.t3.large'

packages/core/src/shared/remoteSession.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ import { EvaluationResult } from '@aws-sdk/client-iam'
2525

2626
const policyAttachDelay = 5000
2727

28+
export enum RemoteSessionError {
29+
ExtensionVersionTooLow = 'ExtensionVersionTooLow',
30+
MissingExtension = 'MissingExtension',
31+
}
32+
2833
export interface MissingTool {
2934
readonly name: 'code' | 'ssm' | 'ssh'
3035
readonly reason?: string
@@ -114,13 +119,13 @@ export async function ensureRemoteSshInstalled(): Promise<void> {
114119
if (isExtensionInstalled(VSCODE_EXTENSION_ID.remotessh)) {
115120
throw new ToolkitError('Remote SSH extension version is too low', {
116121
cancelled: true,
117-
code: 'ExtensionVersionTooLow',
122+
code: RemoteSessionError.ExtensionVersionTooLow,
118123
details: { expected: vscodeExtensionMinVersion.remotessh },
119124
})
120125
} else {
121126
throw new ToolkitError('Remote SSH extension not installed', {
122127
cancelled: true,
123-
code: 'MissingExtension',
128+
code: RemoteSessionError.MissingExtension,
124129
})
125130
}
126131
}

0 commit comments

Comments
 (0)