Skip to content

Commit 2afe32b

Browse files
vrubezhnydatho7561
authored andcommitted
Fix Action labels for kubernetes clusters #3918
Fixes: #3918 Signed-off-by: Victor Rubezhny <[email protected]>
1 parent b94ad6a commit 2afe32b

File tree

11 files changed

+168
-51
lines changed

11 files changed

+168
-51
lines changed

package.json

+77-7
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,10 @@
207207
"onCommand:openshift.project.set",
208208
"onCommand:openshift.project.delete",
209209
"onCommand:openshift.project.delete.palette",
210+
"onCommand:openshift.namespace.create",
211+
"onCommand:openshift.namespace.set",
212+
"onCommand:openshift.namespace.delete",
213+
"onCommand:openshift.namespace.delete.palette",
210214
"onCommand:openshift.component.openCreateComponent",
211215
"onCommand:openshift.component.createFromRootWorkspaceFolder",
212216
"onCommand:openshift.component.describe",
@@ -382,6 +386,11 @@
382386
"title": "New Project",
383387
"category": "OpenShift"
384388
},
389+
{
390+
"command": "openshift.namespace.create",
391+
"title": "New Namespace",
392+
"category": "OpenShift"
393+
},
385394
{
386395
"command": "openshift.helm.openView",
387396
"title": "Browse and Install Helm Charts",
@@ -424,14 +433,24 @@
424433
},
425434
{
426435
"command": "openshift.project.delete",
427-
"title": "Delete",
436+
"title": "Delete Project",
437+
"category": "OpenShift"
438+
},
439+
{
440+
"command": "openshift.namespace.delete",
441+
"title": "Delete Namespace",
428442
"category": "OpenShift"
429443
},
430444
{
431445
"command": "openshift.project.delete.palette",
432446
"title": "Delete Project",
433447
"category": "OpenShift"
434448
},
449+
{
450+
"command": "openshift.namespace.delete.palette",
451+
"title": "Delete Namespace",
452+
"category": "OpenShift"
453+
},
435454
{
436455
"command": "openshift.open.configFile",
437456
"title": "Open in editor",
@@ -447,11 +466,25 @@
447466
"light": "images/title/light/set-project.svg"
448467
}
449468
},
469+
{
470+
"command": "openshift.namespace.set",
471+
"title": "Change Active Namespace",
472+
"category": "OpenShift",
473+
"icon": {
474+
"dark": "images/title/dark/set-project.svg",
475+
"light": "images/title/light/set-project.svg"
476+
}
477+
},
450478
{
451479
"command": "openshift.project.set.palette",
452480
"title": "Set Active Project",
453481
"category": "OpenShift"
454482
},
483+
{
484+
"command": "openshift.namespace.set.palette",
485+
"title": "Set Active Namespace",
486+
"category": "OpenShift"
487+
},
455488
{
456489
"command": "openshift.component.openCreateComponent",
457490
"title": "Create Component",
@@ -1075,7 +1108,11 @@
10751108
},
10761109
{
10771110
"command": "openshift.project.set",
1078-
"when": "view == openshiftProjectExplorer"
1111+
"when": "view == openshiftProjectExplorer && isOpenshiftCluster"
1112+
},
1113+
{
1114+
"command": "openshift.namespace.set",
1115+
"when": "view == openshiftProjectExplorer && !isOpenshiftCluster"
10791116
},
10801117
{
10811118
"command": "openshift.open.configFile",
@@ -1428,6 +1465,14 @@
14281465
{
14291466
"command": "openshift.Serverless.removeSession",
14301467
"when": "false"
1468+
},
1469+
{
1470+
"command": "openshift.project.delete",
1471+
"when": "false"
1472+
},
1473+
{
1474+
"command": "openshift.namespace.delete",
1475+
"when": "false"
14311476
}
14321477
],
14331478
"view/title": [
@@ -1658,12 +1703,22 @@
16581703
},
16591704
{
16601705
"command": "openshift.project.create",
1661-
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace",
1706+
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace && isOpenshiftCluster",
1707+
"group": "c1@1"
1708+
},
1709+
{
1710+
"command": "openshift.namespace.create",
1711+
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace && !isOpenshiftCluster",
16621712
"group": "c1@1"
16631713
},
16641714
{
16651715
"command": "openshift.project.set",
1666-
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace",
1716+
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace && isOpenshiftCluster",
1717+
"group": "c1@2"
1718+
},
1719+
{
1720+
"command": "openshift.namespace.set",
1721+
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace && !isOpenshiftCluster",
16671722
"group": "c1@2"
16681723
},
16691724
{
@@ -1688,17 +1743,32 @@
16881743
},
16891744
{
16901745
"command": "openshift.project.set",
1691-
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace",
1746+
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace && isOpenshiftCluster",
1747+
"group": "p3@1"
1748+
},
1749+
{
1750+
"command": "openshift.namespace.set",
1751+
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace && !isOpenshiftCluster",
16921752
"group": "p3@1"
16931753
},
16941754
{
16951755
"command": "openshift.project.delete",
1696-
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*.can-delete/i",
1756+
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*.can-delete/i && isOpenshiftCluster",
1757+
"group": "p3@2"
1758+
},
1759+
{
1760+
"command": "openshift.namespace.delete",
1761+
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*.can-delete/i && !isOpenshiftCluster",
16971762
"group": "p3@2"
16981763
},
16991764
{
17001765
"command": "openshift.project.set",
1701-
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace",
1766+
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace && isOpenshiftCluster",
1767+
"group": "inline"
1768+
},
1769+
{
1770+
"command": "openshift.namespace.set",
1771+
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace && !isOpenshiftCluster",
17021772
"group": "inline"
17031773
},
17041774
{

src/explorer.ts

+9-8
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { HelmRepo } from './helm/helmChartType';
2828
import { Oc } from './oc/ocWrapper';
2929
import { Component } from './openshift/component';
3030
import { getServiceKindStubs } from './openshift/serviceHelpers';
31-
import { KubeConfigUtils, getKubeConfigFiles } from './util/kubeUtils';
31+
import { KubeConfigUtils, getKubeConfigFiles, getNamespaceKind } from './util/kubeUtils';
3232
import { Platform } from './util/platform';
3333
import { Progress } from './util/progress';
3434
import { FileContentChangeNotifier, WatchUtil } from './util/watch';
@@ -60,14 +60,15 @@ type PackageJSON = {
6060
bugs: string;
6161
};
6262

63-
function createOrSetProjectItem(projectName: string): ExplorerItem {
63+
async function createOrSetProjectItem(projectName: string): Promise<ExplorerItem> {
64+
const kind = await getNamespaceKind();
6465
return {
6566
label: `${projectName}`,
66-
description: 'Missing project. Create new or set active Project',
67-
tooltip: `${projectName} - Missing project. Create new or set active Project`,
67+
description: `Missing ${kind}. Create new or set active ${kind}`,
68+
tooltip: `${projectName} - Missing ${kind}. Create new or set active ${kind}`,
6869
iconPath: new ThemeIcon('warning'),
6970
command: {
70-
title: 'Create new or set active Project',
71+
title: `Create new or set active ${kind}`,
7172
command: 'openshift.project.set'
7273
}
7374
};
@@ -287,9 +288,9 @@ export class OpenShiftExplorer implements TreeDataProvider<ExplorerItem>, Dispos
287288
metadata: {
288289
name: this.kubeContext.namespace,
289290
},
290-
} as KubernetesObject]
291+
} as KubernetesObject];
291292
} else {
292-
result = [createOrSetProjectItem(this.kubeContext.namespace)];
293+
result = [await createOrSetProjectItem(this.kubeContext.namespace)];
293294
}
294295
} else {
295296
// get list of projects or namespaces
@@ -303,7 +304,7 @@ export class OpenShiftExplorer implements TreeDataProvider<ExplorerItem>, Dispos
303304
} as KubernetesObject]
304305
} else {
305306
const projectName = this.kubeConfig.extractProjectNameFromCurrentContext() || 'default';
306-
result = [createOrSetProjectItem(projectName)];
307+
result = [await createOrSetProjectItem(projectName)];
307308
}
308309
}
309310

src/extension.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { ServerlessFunctionView } from './serverlessFunction/view';
2525
import { startTelemetry } from './telemetry';
2626
import { ToolsConfig } from './tools';
2727
import { TokenStore } from './util/credentialManager';
28-
import { KubeConfigUtils, setKubeConfig } from './util/kubeUtils';
28+
import { getNamespaceKind, KubeConfigUtils, setKubeConfig } from './util/kubeUtils';
2929
import { Context as KcuContext } from '@kubernetes/client-node/dist/config_types';
3030
import { Platform } from './util/platform';
3131
import { setupWorkspaceDevfileContext } from './util/workspace';
@@ -245,9 +245,10 @@ export async function activate(extensionContext: ExtensionContext): Promise<unkn
245245
}
246246
}
247247

248-
OpenShiftExplorer.getInstance().onDidChangeContextEmitter.event((context) => {
248+
OpenShiftExplorer.getInstance().onDidChangeContextEmitter.event(async (context) => {
249+
const kind = await getNamespaceKind();
249250
void Oc.Instance.getActiveProject().then((namespace) =>
250-
updateContextStatusBarItem(activeNamespaceStatusBarItem, 'project-node', namespace, `Current namespace: ${namespace}`,
251+
updateContextStatusBarItem(activeNamespaceStatusBarItem, 'project-node', namespace, `Current ${kind}: ${namespace}`,
251252
!isNamespaceInfoStatusBarDisabled()));
252253

253254
const kcu: KubeConfigUtils = new KubeConfigUtils();
@@ -257,8 +258,9 @@ export async function activate(extensionContext: ExtensionContext): Promise<unkn
257258
});
258259

259260
const kcu: KubeConfigUtils = new KubeConfigUtils();
261+
const kind = await getNamespaceKind();
260262
const currentContext: KcuContext = kcu.findContext(kcu.currentContext);
261-
updateContextStatusBarItem(activeNamespaceStatusBarItem, 'project-node', null, 'Current namespace',
263+
updateContextStatusBarItem(activeNamespaceStatusBarItem, 'project-node', null, `Current ${kind}`,
262264
!isNamespaceInfoStatusBarDisabled());
263265
updateContextStatusBarItem(activeContextStatusBarItem, 'current-context', currentContext?.name, `${currentContext?.name}\nCluster: ${currentContext?.cluster}`,
264266
!isContextInfoStatusBarDisabled());

src/k8s/clusterExplorer.ts

+1-10
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,12 @@ import { Build } from './build';
99
import { DeploymentConfig } from './deploymentConfig';
1010
import path = require('path');
1111
import { ClusterServiceVersion } from './csv';
12+
import { isOpenShift } from '../util/kubeUtils';
1213

1314
let clusterExplorer: k8s.ClusterExplorerV1 | undefined;
1415

1516
let lastNamespace = '';
1617

17-
export async function isOpenShift(): Promise<boolean> {
18-
const kubectl = await k8s.extension.kubectl.v1;
19-
let isOS = false;
20-
if (kubectl.available) {
21-
const sr = await kubectl.api.invokeCommand('api-versions');
22-
isOS = sr && sr.code === 0 && sr.stdout.includes('apps.openshift.io/v1');
23-
}
24-
return isOS;
25-
}
26-
2718
async function initNamespaceName(node: k8s.ClusterExplorerV1.ClusterExplorerResourceNode): Promise<string | undefined> {
2819
const kubectl = await k8s.extension.kubectl.v1;
2920
if (kubectl.available) {

src/openshift/openshiftItem.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { Project } from '../oc/project';
99
import { ServerlessFunctionView } from '../serverlessFunction/view';
1010
import { inputValue } from '../util/inputValue';
1111
import * as NameValidator from './nameValidator';
12+
import { getNamespaceKind } from '../util/kubeUtils';
1213

1314
export class QuickPickCommand implements QuickPickItem {
1415
constructor (public label: string,
@@ -109,8 +110,9 @@ export function projectRequired() {
109110
if (activeProjectExists) {
110111
return fn.apply(this, args);
111112
}
112-
const SELECT_PROJECT = 'Select or Create Project';
113-
const result = await window.showWarningMessage('The current project doesn\'t exist. Please select an existing project to work with or create a new project', SELECT_PROJECT, 'Cancel');
113+
const kind = await getNamespaceKind();
114+
const SELECT_PROJECT = `Select or Create ${kind}`;
115+
const result = await window.showWarningMessage(`The current ${kind} doesn't exist. Please select an existing ${kind} to work with or create a new ${kind}`, SELECT_PROJECT, 'Cancel');
114116
if (result === SELECT_PROJECT) {
115117
await commands.executeCommand('openshift.project.set');
116118
projects = await Oc.Instance.getProjects();

0 commit comments

Comments
 (0)