Skip to content

Commit cdce2fc

Browse files
committed
add kubero operator Version and debug modal
1 parent 3dcb586 commit cdce2fc

File tree

6 files changed

+134
-3
lines changed

6 files changed

+134
-3
lines changed

client/src/layouts/default/NavDrawer.vue

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,93 @@
9292
</v-list-item>
9393
-->
9494
<v-list-item
95-
link href="https://github.com/kubero-dev/kubero/releases"
96-
target="_blank"
95+
@click="debugDialog = true"
9796
prepend-icon="mdi-star"
9897
:title="''+ kubero.version">
9998
</v-list-item>
10099
</v-list>
101100
</template>
101+
<v-dialog
102+
v-model="debugDialog"
103+
width="auto"
104+
>
105+
<v-card
106+
min-width="400"
107+
prepend-icon="mdi-information-outline"
108+
title="Version and Features"
109+
>
110+
<v-card-text>
111+
<v-row dense>
112+
<v-col cols="12">
113+
<v-textarea
114+
label="Debug"
115+
:model-value="'Kubero UI Version: ' + kubero.version
116+
+ '\nKubero Operator Version: ' + kubero.operatorVersion
117+
+ '\nKubernetes Version: ' + kubero.kubernetesVersion
118+
+ '\nTemplates: ' + kubero.templatesEnabled
119+
+ '\nAdmin: ' + kubero.adminDisabled
120+
+ '\nWeb Console: ' + kubero.consoleEnabled
121+
+ '\nBuild Pipeline: ' + kubero.buildPipeline
122+
+ '\nMetrics: ' + kubero.metricsEnabled
123+
+ '\nAudit: ' + kubero.auditEnabled
124+
+ '\nZeropod Sleep: ' + kubero.sleepEnabled"
125+
readonly
126+
name="debug"
127+
variant="filled"
128+
auto-grow
129+
></v-textarea>
130+
131+
<a href="https://github.com/kubero-dev/kubero/releases" target="_blank">List of latest Kubero releases</a>
132+
</v-col>
133+
<!--
134+
<v-col cols="12">
135+
<v-text-field
136+
label="Kubero UI Version"
137+
v-model="kubero.version"
138+
readonly
139+
density="compact"
140+
variant="plain"
141+
></v-text-field>
142+
</v-col>
143+
<v-col cols="12">
144+
<v-text-field
145+
label="Kubero Operotor Version"
146+
v-model="kubero.operatorVersion"
147+
readonly
148+
density="compact"
149+
variant="plain"
150+
></v-text-field>
151+
</v-col>
152+
<v-col cols="12">
153+
<v-text-field
154+
label="Kubernetes Version"
155+
v-model="kubero.kubernetesVersion"
156+
readonly
157+
density="compact"
158+
variant="plain"
159+
></v-text-field>
160+
</v-col>
161+
<v-col cols="12">
162+
<v-checkbox readonly density="compact" label="Templates" v-model="kubero.templatesEnabled"></v-checkbox>
163+
<v-checkbox readonly density="compact" label="Admin" v-model="kubero.adminDisabled"></v-checkbox>
164+
<v-checkbox readonly density="compact" label="Web Console" v-model="kubero.consoleEnabled"></v-checkbox>
165+
<v-checkbox readonly density="compact" label="Build Pipeline" v-model="kubero.buildPipeline"></v-checkbox>
166+
<v-checkbox readonly density="compact" label="Metrics" v-model="kubero.metricsEnabled"></v-checkbox>
167+
<v-checkbox readonly density="compact" label="Audit" v-model="kubero.auditEnabled"></v-checkbox>
168+
<v-checkbox readonly density="compact" label="Zeropod Sleep" v-model="kubero.sleepEnabled"></v-checkbox>
169+
</v-col>
170+
-->
171+
</v-row>
172+
</v-card-text>
173+
<template v-slot:actions>
174+
<v-btn
175+
class="ms-auto"
176+
text="Ok"
177+
@click="debugDialog = false"
178+
></v-btn>
179+
</template>
180+
</v-card>
181+
</v-dialog>
102182
</v-navigation-drawer>
103183
</template>
104184

@@ -127,7 +207,8 @@ export default defineComponent({
127207
return {
128208
version: '0.0.1',
129209
templatesEnabled: false,
130-
session: false
210+
session: false,
211+
debugDialog: false
131212
}
132213
},
133214
computed: {

client/src/layouts/default/View.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export default defineComponent({
2929
templatesEnabled: true,
3030
version: "dev",
3131
kubernetesVersion: "unknown",
32+
operatorVersion: "unknown",
3233
}),
3334
methods: {
3435
checkSession() {
@@ -41,6 +42,7 @@ export default defineComponent({
4142
// safe version to vuetufy gloabl scope for use in components
4243
this.kubero.templatesEnabled = result.data.templatesEnabled;
4344
this.kubero.version = result.data.version;
45+
this.kubero.operatorVersion = result.data.operatorVersion;
4446
this.kubero.kubernetesVersion = result.data.kubernetesVersion;
4547
this.kubero.isAuthenticated = result.data.isAuthenticated;
4648
this.kubero.adminDisabled = result.data.adminDisabled;

client/src/stores/kubero.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const useKuberoStore = defineStore('kubero', {
44
state: () => ({
55
kubero: {
66
version: "dev",
7+
operatorVersion: "unknown",
78
session: false,
89
kubernetesVersion: "",
910
isAuthenticated: false,

server/src/kubero.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ export class Kubero {
100100
}
101101
}
102102

103+
public getOperatorVersion() {
104+
if (this.kubectl.kuberoOperatorVersion) {
105+
return this.kubectl.kuberoOperatorVersion;
106+
} else {
107+
return 'unknown';
108+
}
109+
}
110+
103111
public updateState() {
104112
this.pipelineStateList = [];
105113
this.appStateList = [];

server/src/modules/kubectl.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export class Kubectl {
4747
private customObjectsApi: CustomObjectsApi = {} as CustomObjectsApi;
4848
private networkingV1Api: NetworkingV1Api = {} as NetworkingV1Api;
4949
public kubeVersion: VersionInfo | void;
50+
public kuberoOperatorVersion: string | undefined;
5051
private patchUtils: PatchUtils = {} as PatchUtils;
5152
public log: KubeLog;
5253
//public config: IKuberoConfig;
@@ -100,6 +101,16 @@ export class Kubectl {
100101
.then(v => {
101102
this.kubeVersion = v;
102103
})
104+
.catch(error => {
105+
debug.log("❌ Error getting kube version");
106+
debug.log(error);
107+
});
108+
109+
this.getOperatorVersion()
110+
.then(v => {
111+
debug.log("ℹ️ Operator version: " + v);
112+
this.kuberoOperatorVersion = v || 'unknown';
113+
})
103114

104115
}
105116

@@ -115,6 +126,29 @@ export class Kubectl {
115126
}
116127
}
117128

129+
private async getOperatorVersion(): Promise<string | void> {
130+
const contextName = this.getCurrentContext();
131+
const namespace = "kubero-operator-system";
132+
133+
if (contextName) {
134+
const pods = await this.getPods(namespace, contextName)
135+
.catch(error => {
136+
debug.log("Failed to get Operator Version", error);
137+
//return 'error';
138+
});
139+
if (pods) {
140+
for (const pod of pods) {
141+
if (pod?.metadata?.name?.startsWith('kubero-operator-controller-manager')) {
142+
const container = pod?.spec?.containers.filter((c: any) => c.name == 'manager')[0];
143+
return container?.image?.split(':')[1] || 'unknown';
144+
}
145+
}
146+
}else{
147+
return 'error getting operator version';
148+
}
149+
}
150+
}
151+
118152
public getContexts() {
119153
return this.kc.getContexts()
120154
}
@@ -123,6 +157,10 @@ export class Kubectl {
123157
this.kc.setCurrentContext(context)
124158
}
125159

160+
public getCurrentContext() {
161+
return this.kc.getCurrentContext()
162+
}
163+
126164
public async getNamespaces(): Promise<V1Namespace[]> {
127165
const namespaces = await this.coreV1Api.listNamespace();
128166
return namespaces.body.items;

server/src/routes/auth.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Router.all("/session", (req: Request, res: Response) => {
2525
"isAuthenticated": isAuthenticated,
2626
"version": process.env.npm_package_version,
2727
"kubernetesVersion": req.app.locals.kubero.getKubernetesVersion(),
28+
"operatorVersion": req.app.locals.kubero.getOperatorVersion(),
2829
"buildPipeline": req.app.locals.kubero.getBuildpipelineEnabled(),
2930
"templatesEnabled": req.app.locals.kubero.getTemplateEnabled(),
3031
"auditEnabled": req.app.locals.audit.getAuditEnabled(),

0 commit comments

Comments
 (0)