diff --git a/package.json b/package.json index 3b970c755..ae9f3a3a0 100644 --- a/package.json +++ b/package.json @@ -760,6 +760,11 @@ "title": "Create Deployment from Container Image URL", "category": "OpenShift" }, + { + "command": "openshift.deployment.shell", + "title": "Open Shell to Container", + "category": "OpenShift" + }, { "command": "openshift.resource.load", "title": "Load", @@ -1265,6 +1270,10 @@ "command": "openshift.resource.watchLogs", "when": "false" }, + { + "command": "openshift.deployment.shell", + "when": "false" + }, { "command": "openshift.resource.unInstall", "when": "false" @@ -1778,15 +1787,19 @@ }, { "command": "openshift.resource.load", - "when": "view == openshiftProjectExplorer && viewItem == openshift.k8sObject || viewItem == openshift.k8sObject.route" + "when": "view == openshiftProjectExplorer && viewItem =~ /^openshift\\.k8sObject\\.(?!helm)/" }, { "command": "openshift.resource.delete", - "when": "view == openshiftProjectExplorer && viewItem == openshift.k8sObject || viewItem == openshift.k8sObject.route" + "when": "view == openshiftProjectExplorer && viewItem =~ /^openshift\\.k8sObject\\.(?!helm)/" }, { "command": "openshift.resource.watchLogs", - "when": "view == openshiftProjectExplorer && viewItem == openshift.k8sObject || viewItem == openshift.k8sObject.route" + "when": "view == openshiftProjectExplorer && viewItem =~ /^openshift\\.k8sObject\\.(?!helm)/" + }, + { + "command": "openshift.deployment.shell", + "when": "view == openshiftProjectExplorer && viewItem =~ /^openshift\\.k8sObject\\.Deployment/" }, { "command": "openshift.resource.unInstall", @@ -1794,11 +1807,11 @@ }, { "command": "openshift.resource.openInDeveloperConsole", - "when": "view == openshiftProjectExplorer && (viewItem == openshift.k8sObject || openshift.k8sObject.helm || viewItem == openshift.k8sObject.route) && isOpenshiftCluster" + "when": "view == openshiftProjectExplorer && viewItem =~ /^openshift\\.k8sObject/ && isOpenshiftCluster" }, { "command": "openshift.resource.openInBrowser", - "when": "view == openshiftProjectExplorer && viewItem == openshift.k8sObject.route && isOpenshiftCluster" + "when": "view == openshiftProjectExplorer && viewItem =~ /^openshift\\.k8sObject\\..*route$/ && isOpenshiftCluster" }, { "command": "openshift.Serverless.buildAndRun", diff --git a/src/deployment.ts b/src/deployment.ts index 16209d240..e5638c7a0 100644 --- a/src/deployment.ts +++ b/src/deployment.ts @@ -3,14 +3,17 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ +import { KubernetesObject } from '@kubernetes/client-node'; import * as path from 'path'; import validator from 'validator'; import { Disposable, QuickInputButtons, ThemeIcon, TreeItem, window } from 'vscode'; +import { CommandText } from './base/command'; import { OpenShiftExplorer } from './explorer'; import { Oc } from './oc/ocWrapper'; import { validateRFC1123DNSLabel } from './openshift/nameValidator'; import { quickBtn } from './util/inputValue'; import { vsCommand } from './vscommand'; +import { OpenShiftTerminalManager } from './webview/openshift-terminal/openShiftTerminal'; export class Deployment { @@ -78,6 +81,12 @@ export class Deployment { } + @vsCommand('openshift.deployment.shell') + static shellIntoDeployment(component: KubernetesObject): Promise { + void OpenShiftTerminalManager.getInstance().createTerminal(new CommandText('oc', `exec -it ${component.kind}/${component.metadata.name} -- /bin/sh`), `Shell to '${component.metadata.name}'`); + return Promise.resolve(); + } + /** * Prompt the user for the URL of a container image. * diff --git a/src/explorer.ts b/src/explorer.ts index f6e6d8f38..303e0e98c 100644 --- a/src/explorer.ts +++ b/src/explorer.ts @@ -200,7 +200,7 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos const routeURL = await Oc.Instance.getRouteURL(element.metadata.name); return { - contextValue: !routeURL ? 'openshift.k8sObject' : 'openshift.k8sObject.route', + contextValue: `openshift.k8sObject.${element.kind}${routeURL ? '.route' : ''}`, label: element.metadata.name, description: `${element.kind.substring(0, 1).toLocaleUpperCase()}${element.kind.substring(1)}`, collapsibleState: TreeItemCollapsibleState.None,