Skip to content

Commit

Permalink
Fix Action labels for kubernetes clusters #3918
Browse files Browse the repository at this point in the history
Fixes: #3918

Signed-off-by: Victor Rubezhny <vrubezhny@redhat.com>
  • Loading branch information
vrubezhny committed Mar 4, 2024
1 parent ec7c844 commit b5ae7bf
Show file tree
Hide file tree
Showing 11 changed files with 168 additions and 51 deletions.
84 changes: 77 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,10 @@
"onCommand:openshift.project.set",
"onCommand:openshift.project.delete",
"onCommand:openshift.project.delete.palette",
"onCommand:openshift.namespace.create",
"onCommand:openshift.namespace.set",
"onCommand:openshift.namespace.delete",
"onCommand:openshift.namespace.delete.palette",
"onCommand:openshift.component.openCreateComponent",
"onCommand:openshift.component.createFromRootWorkspaceFolder",
"onCommand:openshift.component.describe",
Expand Down Expand Up @@ -382,6 +386,11 @@
"title": "New Project",
"category": "OpenShift"
},
{
"command": "openshift.namespace.create",
"title": "New Namespace",
"category": "OpenShift"
},
{
"command": "openshift.helm.openView",
"title": "Browse and Install Helm Charts",
Expand Down Expand Up @@ -424,14 +433,24 @@
},
{
"command": "openshift.project.delete",
"title": "Delete",
"title": "Delete Project",
"category": "OpenShift"
},
{
"command": "openshift.namespace.delete",
"title": "Delete Namespace",
"category": "OpenShift"
},
{
"command": "openshift.project.delete.palette",
"title": "Delete Project",
"category": "OpenShift"
},
{
"command": "openshift.namespace.delete.palette",
"title": "Delete Namespace",
"category": "OpenShift"
},
{
"command": "openshift.open.configFile",
"title": "Open in editor",
Expand All @@ -447,11 +466,25 @@
"light": "images/title/light/set-project.svg"
}
},
{
"command": "openshift.namespace.set",
"title": "Change Active Namespace",
"category": "OpenShift",
"icon": {
"dark": "images/title/dark/set-project.svg",
"light": "images/title/light/set-project.svg"
}
},
{
"command": "openshift.project.set.palette",
"title": "Set Active Project",
"category": "OpenShift"
},
{
"command": "openshift.namespace.set.palette",
"title": "Set Active Namespace",
"category": "OpenShift"
},
{
"command": "openshift.component.openCreateComponent",
"title": "Create Component",
Expand Down Expand Up @@ -1075,7 +1108,11 @@
},
{
"command": "openshift.project.set",
"when": "view == openshiftProjectExplorer"
"when": "view == openshiftProjectExplorer && isOpenshiftCluster"
},
{
"command": "openshift.namespace.set",
"when": "view == openshiftProjectExplorer && !isOpenshiftCluster"
},
{
"command": "openshift.open.configFile",
Expand Down Expand Up @@ -1428,6 +1465,14 @@
{
"command": "openshift.Serverless.removeSession",
"when": "false"
},
{
"command": "openshift.project.delete",
"when": "false"
},
{
"command": "openshift.namespace.delete",
"when": "false"
}
],
"view/title": [
Expand Down Expand Up @@ -1658,12 +1703,22 @@
},
{
"command": "openshift.project.create",
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace",
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace && isOpenshiftCluster",
"group": "c1@1"
},
{
"command": "openshift.namespace.create",
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace && !isOpenshiftCluster",
"group": "c1@1"
},
{
"command": "openshift.project.set",
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace",
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace && isOpenshiftCluster",
"group": "c1@2"
},
{
"command": "openshift.namespace.set",
"when": "view == openshiftProjectExplorer && viewItem == openshift.k8sContext && canCreateNamespace && !isOpenshiftCluster",
"group": "c1@2"
},
{
Expand All @@ -1688,17 +1743,32 @@
},
{
"command": "openshift.project.set",
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace",
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace && isOpenshiftCluster",
"group": "p3@1"
},
{
"command": "openshift.namespace.set",
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace && !isOpenshiftCluster",
"group": "p3@1"
},
{
"command": "openshift.project.delete",
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*.can-delete/i",
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*.can-delete/i && isOpenshiftCluster",
"group": "p3@2"
},
{
"command": "openshift.namespace.delete",
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*.can-delete/i && !isOpenshiftCluster",
"group": "p3@2"
},
{
"command": "openshift.project.set",
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace",
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace && isOpenshiftCluster",
"group": "inline"
},
{
"command": "openshift.namespace.set",
"when": "view == openshiftProjectExplorer && viewItem =~ /openshift.project.*/i && canCreateNamespace && !isOpenshiftCluster",
"group": "inline"
},
{
Expand Down
17 changes: 9 additions & 8 deletions src/explorer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import { HelmRepo } from './helm/helmChartType';
import { Oc } from './oc/ocWrapper';
import { Component } from './openshift/component';
import { getServiceKindStubs } from './openshift/serviceHelpers';
import { KubeConfigUtils, getKubeConfigFiles } from './util/kubeUtils';
import { KubeConfigUtils, getKubeConfigFiles, getNamespaceKind } from './util/kubeUtils';
import { Platform } from './util/platform';
import { Progress } from './util/progress';
import { FileContentChangeNotifier, WatchUtil } from './util/watch';
Expand Down Expand Up @@ -60,14 +60,15 @@ type PackageJSON = {
bugs: string;
};

function createOrSetProjectItem(projectName: string): ExplorerItem {
async function createOrSetProjectItem(projectName: string): Promise<ExplorerItem> {
const kind = await getNamespaceKind();

Check warning on line 64 in src/explorer.ts

View check run for this annotation

Codecov / codecov/patch

src/explorer.ts#L64

Added line #L64 was not covered by tests
return {
label: `${projectName}`,
description: 'Missing project. Create new or set active Project',
tooltip: `${projectName} - Missing project. Create new or set active Project`,
description: `Missing ${kind}. Create new or set active ${kind}`,
tooltip: `${projectName} - Missing ${kind}. Create new or set active ${kind}`,
iconPath: new ThemeIcon('warning'),
command: {
title: 'Create new or set active Project',
title: `Create new or set active ${kind}`,
command: 'openshift.project.set'
}
};
Expand Down Expand Up @@ -287,9 +288,9 @@ export class OpenShiftExplorer implements TreeDataProvider<ExplorerItem>, Dispos
metadata: {
name: this.kubeContext.namespace,
},
} as KubernetesObject]
} as KubernetesObject];
} else {
result = [createOrSetProjectItem(this.kubeContext.namespace)];
result = [await createOrSetProjectItem(this.kubeContext.namespace)];

Check warning on line 293 in src/explorer.ts

View check run for this annotation

Codecov / codecov/patch

src/explorer.ts#L293

Added line #L293 was not covered by tests
}
} else {
// get list of projects or namespaces
Expand All @@ -303,7 +304,7 @@ export class OpenShiftExplorer implements TreeDataProvider<ExplorerItem>, Dispos
} as KubernetesObject]
} else {
const projectName = this.kubeConfig.extractProjectNameFromCurrentContext() || 'default';
result = [createOrSetProjectItem(projectName)];
result = [await createOrSetProjectItem(projectName)];

Check warning on line 307 in src/explorer.ts

View check run for this annotation

Codecov / codecov/patch

src/explorer.ts#L307

Added line #L307 was not covered by tests
}
}

Expand Down
10 changes: 6 additions & 4 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import { ServerlessFunctionView } from './serverlessFunction/view';
import { startTelemetry } from './telemetry';
import { ToolsConfig } from './tools';
import { TokenStore } from './util/credentialManager';
import { KubeConfigUtils, setKubeConfig } from './util/kubeUtils';
import { getNamespaceKind, 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';
Expand Down Expand Up @@ -245,9 +245,10 @@ export async function activate(extensionContext: ExtensionContext): Promise<unkn
}
}

OpenShiftExplorer.getInstance().onDidChangeContextEmitter.event((context) => {
OpenShiftExplorer.getInstance().onDidChangeContextEmitter.event(async (context) => {
const kind = await getNamespaceKind();

Check warning on line 249 in src/extension.ts

View check run for this annotation

Codecov / codecov/patch

src/extension.ts#L249

Added line #L249 was not covered by tests
void Oc.Instance.getActiveProject().then((namespace) =>
updateContextStatusBarItem(activeNamespaceStatusBarItem, 'project-node', namespace, `Current namespace: ${namespace}`,
updateContextStatusBarItem(activeNamespaceStatusBarItem, 'project-node', namespace, `Current ${kind}: ${namespace}`,

Check warning on line 251 in src/extension.ts

View check run for this annotation

Codecov / codecov/patch

src/extension.ts#L251

Added line #L251 was not covered by tests
!isNamespaceInfoStatusBarDisabled()));

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

const kcu: KubeConfigUtils = new KubeConfigUtils();
const kind = await getNamespaceKind();
const currentContext: KcuContext = kcu.findContext(kcu.currentContext);
updateContextStatusBarItem(activeNamespaceStatusBarItem, 'project-node', null, 'Current namespace',
updateContextStatusBarItem(activeNamespaceStatusBarItem, 'project-node', null, `Current ${kind}`,
!isNamespaceInfoStatusBarDisabled());
updateContextStatusBarItem(activeContextStatusBarItem, 'current-context', currentContext?.name, `${currentContext?.name}\nCluster: ${currentContext?.cluster}`,
!isContextInfoStatusBarDisabled());
Expand Down
11 changes: 1 addition & 10 deletions src/k8s/clusterExplorer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,12 @@ import { Build } from './build';
import { DeploymentConfig } from './deploymentConfig';
import path = require('path');
import { ClusterServiceVersion } from './csv';
import { isOpenShift } from '../util/kubeUtils';

let clusterExplorer: k8s.ClusterExplorerV1 | undefined;

let lastNamespace = '';

export async function isOpenShift(): Promise<boolean> {
const kubectl = await k8s.extension.kubectl.v1;
let isOS = false;
if (kubectl.available) {
const sr = await kubectl.api.invokeCommand('api-versions');
isOS = sr && sr.code === 0 && sr.stdout.includes('apps.openshift.io/v1');
}
return isOS;
}

async function initNamespaceName(node: k8s.ClusterExplorerV1.ClusterExplorerResourceNode): Promise<string | undefined> {
const kubectl = await k8s.extension.kubectl.v1;
if (kubectl.available) {
Expand Down
6 changes: 4 additions & 2 deletions src/openshift/openshiftItem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { Project } from '../oc/project';
import { ServerlessFunctionView } from '../serverlessFunction/view';
import { inputValue } from '../util/inputValue';
import * as NameValidator from './nameValidator';
import { getNamespaceKind } from '../util/kubeUtils';

export class QuickPickCommand implements QuickPickItem {
constructor (public label: string,
Expand Down Expand Up @@ -109,8 +110,9 @@ export function projectRequired() {
if (activeProjectExists) {
return fn.apply(this, args);
}
const SELECT_PROJECT = 'Select or Create Project';
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');
const kind = await getNamespaceKind();
const SELECT_PROJECT = `Select or Create ${kind}`;
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');
if (result === SELECT_PROJECT) {
await commands.executeCommand('openshift.project.set');
projects = await Oc.Instance.getProjects();
Expand Down
Loading

0 comments on commit b5ae7bf

Please sign in to comment.