Skip to content

Commit e318d13

Browse files
committed
add storageclass dropdown
1 parent 7d50cb1 commit e318d13

File tree

4 files changed

+49
-12
lines changed

4 files changed

+49
-12
lines changed

client/src/components/apps/new.vue

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -368,16 +368,6 @@
368368

369369
<v-divider class="ma-5"></v-divider>
370370
<!-- EXTRAVOLUMES -->
371-
372-
<!--
373-
# - name: "test-volume"
374-
# emptyDir: false
375-
# storageClass: "standard"
376-
# size: "1Gi"
377-
# accessModes:
378-
# - "ReadWriteMany"
379-
# mountPath: "/test-volume"
380-
-->
381371
<h4 class="text-uppercase">Volumes</h4>
382372
<div v-for="volume in extraVolumes" v-bind:key="volume.id">
383373
<v-row>
@@ -422,10 +412,11 @@
422412
cols="12"
423413
md="3"
424414
>
425-
<v-text-field
415+
<v-select
426416
v-model="volume.storageClass"
417+
:items="storageclasses"
427418
label="Storage Class"
428-
></v-text-field>
419+
></v-select>
429420
</v-col>
430421
<v-col
431422
cols="12"
@@ -705,6 +696,12 @@ export default {
705696
},
706697
*/
707698
],
699+
storageclasses : [
700+
/*
701+
'standard',
702+
'standard-fast',
703+
*/
704+
],
708705
extraVolumes: [
709706
/*
710707
{
@@ -762,6 +759,7 @@ export default {
762759
}
763760
},
764761
mounted() {
762+
this.loadStorageClasses();
765763
this.loadPipeline();
766764
this.loadPodsizeList();
767765
this.loadApp(); // this may lead into a race condition with the buildpacks loaded in loadPipeline
@@ -805,6 +803,13 @@ export default {
805803
806804
});
807805
},
806+
loadStorageClasses() {
807+
axios.get('/api/config/storageclasses').then(response => {
808+
for (let i = 0; i < response.data.length; i++) {
809+
this.storageclasses.push(response.data[i].name);
810+
}
811+
});
812+
},
808813
loadBranches() {
809814
810815
// encode string to base64 (for ssh url)

src/kubero.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,4 +704,8 @@ export class Kubero {
704704
public getNodeMetrics() {
705705
return this.kubectl.getNodeMetrics();
706706
}
707+
708+
public getStorageglasses() {
709+
return this.kubectl.getStorageglasses();
710+
}
707711
}

src/modules/kubectl.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
PodMetric,
2222
PodMetricsList,
2323
NodeMetric,
24+
StorageV1Api
2425
} from '@kubernetes/client-node'
2526
import { IPipeline, IKubectlPipeline, IKubectlPipelineList, IKubectlAppList, IKuberoConfig} from '../types';
2627
import { App, KubectlApp } from './application';
@@ -34,6 +35,7 @@ export class Kubectl {
3435
private coreV1Api: CoreV1Api;
3536
private appsV1Api: AppsV1Api;
3637
private metricsApi: Metrics;
38+
private storageV1Api: StorageV1Api;
3739
private customObjectsApi: CustomObjectsApi;
3840
private kubeVersion: VersionInfo | void;
3941
private patchUtils: PatchUtils;
@@ -66,6 +68,7 @@ export class Kubectl {
6668
this.versionApi = this.kc.makeApiClient(VersionApi);
6769
this.coreV1Api = this.kc.makeApiClient(CoreV1Api);
6870
this.appsV1Api = this.kc.makeApiClient(AppsV1Api);
71+
this.storageV1Api = this.kc.makeApiClient(StorageV1Api);
6972
this.metricsApi = new Metrics(this.kc);
7073
this.patchUtils = new PatchUtils();
7174
this.customObjectsApi = this.kc.makeApiClient(CustomObjectsApi);
@@ -491,4 +494,22 @@ export class Kubectl {
491494
const metrics = await this.metricsApi.getNodeMetrics();
492495
return metrics.items;
493496
}
497+
498+
public async getStorageglasses(): Promise<Object[]> {
499+
const storageClasses = await this.storageV1Api.listStorageClass();
500+
let ret = [];
501+
for (let i = 0; i < storageClasses.body.items.length; i++) {
502+
const sc = storageClasses.body.items[i];
503+
const storageClass = {
504+
name: sc.metadata?.name,
505+
provisioner: sc.provisioner,
506+
reclaimPolicy: sc.reclaimPolicy,
507+
volumeBindingMode: sc.volumeBindingMode,
508+
//allowVolumeExpansion: sc.allowVolumeExpansion,
509+
//parameters: sc.parameters
510+
}
511+
ret.push(storageClass);
512+
}
513+
return ret;
514+
}
494515
}

src/routes/config.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,10 @@ Router.get('/config/repositories', authMiddleware, async function (req: Request,
9999
// #swagger.summary = 'Get the available repositories'
100100
res.send(await req.app.locals.kubero.getRepositories());
101101
});
102+
103+
104+
Router.get('/config/storageclasses', authMiddleware, async function (req: Request, res: Response) {
105+
// #swagger.tags = ['UI']
106+
// #swagger.summary = 'Get the available storageclasses'
107+
res.send(await req.app.locals.kubero.getStorageglasses());
108+
});

0 commit comments

Comments
 (0)