diff --git a/package.json b/package.json index be17da5c5..10bb27495 100644 --- a/package.json +++ b/package.json @@ -204,6 +204,7 @@ "onCommand:openshift.explorer.refresh", "onCommand:openshift.componentTypesView.refresh", "onCommand:openshift.project.create", + "onCommand:openshift.project.set", "onCommand:openshift.project.delete", "onCommand:openshift.project.delete.palette", "onCommand:openshift.component.openCreateComponent", @@ -250,6 +251,22 @@ "onWalkthrough:serverlessFunctionWalkthrough" ], "contributes": { + "configurationDefaults": { + "vs-kubernetes": { + "vs-kubernetes.disable-context-info-status-bar": true, + "vs-kubernetes.disable-namespace-info-status-bar": true + } + }, + "icons": { + "current-context": { + "description": "context", + "default":"selection" + }, + "project-node": { + "description": "project node", + "default":"project" + } + }, "commands": [ { "command": "openshift.about", @@ -1632,7 +1649,12 @@ { "command": "openshift.project.create", "when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace", - "group": "c1" + "group": "c1@1" + }, + { + "command": "openshift.project.set", + "when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace", + "group": "c1@2" }, { "command": "openshift.explorer.logout", @@ -1654,10 +1676,20 @@ "when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && isLoggedIn", "group": "p2" }, + { + "command": "openshift.project.set", + "when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace", + "group": "p3@1" + }, { "command": "openshift.project.delete", "when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*.can-delete/i", - "group": "p3" + "group": "p3@2" + }, + { + "command": "openshift.project.set", + "when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace", + "group": "inline" }, { "command": "openshift.component.describe", @@ -1775,11 +1807,6 @@ "when": "view == openshiftProjectExplorer && viewItem == openshift.openConfigFile", "group": "inline" }, - { - "command": "openshift.project.set", - "when": "view == openshiftProjectExplorer && (viewItem == openshift.k8sContext || viewItem =~ /openshift.project.*/i) && canCreateNamespace", - "group": "inline" - }, { "command": "openshift.component.revealInExplorer", "when": "view == openshiftComponentsView && viewItem =~ /openshift\\.component.*/", @@ -2087,6 +2114,21 @@ "order": 1, "title": "OpenShift Toolkit", "properties": { + "openshiftToolkit": { + "type": "object", + "title": "Additional settings", + "description": "OpenShift Toolkit configuration", + "properties": { + "openshiftToolkit.disable-context-info-status-bar": { + "type": "boolean", + "description": "Disable displaying the current Kubernetes context in VS Code's status bar." + }, + "openshiftToolkit.disable-namespace-info-status-bar": { + "type": "boolean", + "description": "Disable displaying the active namespace in VS Code's status bar." + } + } + }, "openshiftToolkit.showWelcomePage": { "type": "boolean", "default": true, diff --git a/src/explorer.ts b/src/explorer.ts index 1dce6be35..d2d152f38 100644 --- a/src/explorer.ts +++ b/src/explorer.ts @@ -78,6 +78,8 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos readonly onDidChangeTreeData: Event = this .eventEmitter.event; + public onDidChangeContextEmitter = new EventEmitter(); + private constructor() { try { this.kubeConfig = new KubeConfigUtils(); @@ -100,6 +102,7 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos || this.kubeContext.user !== newCtx.user || this.kubeContext.namespace !== newCtx.namespace)) { this.refresh(); + this.onDidChangeContextEmitter.fire(newCtx.name); } this.kubeContext = newCtx; this.kubeConfig = ku2; @@ -234,6 +237,7 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos } catch (err) { // ignore because ether server is not accessible or user is logged out } + OpenShiftExplorer.getInstance().onDidChangeContextEmitter.fire(new KubeConfigUtils().currentContext); } else if ('name' in element) { // we are dealing with context here // user is logged into cluster from current context // and project should be show as child node of current context diff --git a/src/extension.ts b/src/extension.ts index 6bac3b26e..47223ee66 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -25,7 +25,8 @@ import { ServerlessFunctionView } from './serverlessFunction/view'; import { startTelemetry } from './telemetry'; import { ToolsConfig } from './tools'; import { TokenStore } from './util/credentialManager'; -import { setKubeConfig } from './util/kubeUtils'; +import { KubeConfigUtils, setKubeConfig } from './util/kubeUtils'; +import { Context as KcuContext } from '@kubernetes/client-node/dist/config_types'; import { Platform } from './util/platform'; import { setupWorkspaceDevfileContext } from './util/workspace'; import { registerCommands } from './vscommand'; @@ -34,6 +35,7 @@ import { WelcomePage } from './welcomePage'; import { registerYamlHandlers } from './yaml/yamlDocumentFeatures'; import fsx = require('fs-extra'); +import { Oc } from './oc/ocWrapper'; // eslint-disable-next-line @typescript-eslint/no-empty-function // this method is called when your extension is deactivated @@ -79,6 +81,13 @@ export async function activate(extensionContext: ExtensionContext): Promise { + void Oc.Instance.getActiveProject().then((namespace) => + updateContextStatusBarItem(activeNamespaceStatusBarItem, 'project-node', namespace, `Current namespace: ${namespace}`, + !isNamespaceInfoStatusBarDisabled())); + + const kcu: KubeConfigUtils = new KubeConfigUtils(); + const currentContext: KcuContext = kcu.findContext(context); + updateContextStatusBarItem(activeContextStatusBarItem, 'current-context', currentContext?.name, `${currentContext?.name}\nCluster: ${currentContext?.cluster}`, + !isContextInfoStatusBarDisabled()); + }); + + const kcu: KubeConfigUtils = new KubeConfigUtils(); + const currentContext: KcuContext = kcu.findContext(kcu.currentContext); + updateContextStatusBarItem(activeNamespaceStatusBarItem, 'project-node', null, 'Current namespace', + !isNamespaceInfoStatusBarDisabled()); + updateContextStatusBarItem(activeContextStatusBarItem, 'current-context', currentContext?.name, `${currentContext?.name}\nCluster: ${currentContext?.cluster}`, + !isContextInfoStatusBarDisabled()); + updateStatusBarItem(crcStatusItem, 'Stop CRC'); void extendClusterExplorer();