Skip to content

Commit c81da22

Browse files
bexsoftBenjamin Perez
andauthored
Added storage class selector to add pool modal (#699)
Co-authored-by: Benjamin Perez <[email protected]>
1 parent c07b7b4 commit c81da22

File tree

8 files changed

+58
-254
lines changed

8 files changed

+58
-254
lines changed

portal-ui/build/asset-manifest.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"files": {
33
"main.css": "/static/css/main.a19f3d53.chunk.css",
4-
"main.js": "/static/js/main.a8ae7284.chunk.js",
5-
"main.js.map": "/static/js/main.a8ae7284.chunk.js.map",
4+
"main.js": "/static/js/main.fb87f627.chunk.js",
5+
"main.js.map": "/static/js/main.fb87f627.chunk.js.map",
66
"runtime-main.js": "/static/js/runtime-main.f48e99e5.js",
77
"runtime-main.js.map": "/static/js/runtime-main.f48e99e5.js.map",
88
"static/css/2.f324abd6.chunk.css": "/static/css/2.f324abd6.chunk.css",
@@ -20,6 +20,6 @@
2020
"static/css/2.f324abd6.chunk.css",
2121
"static/js/2.26e254ca.chunk.js",
2222
"static/css/main.a19f3d53.chunk.css",
23-
"static/js/main.a8ae7284.chunk.js"
23+
"static/js/main.fb87f627.chunk.js"
2424
]
2525
}

portal-ui/build/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="MinIO Console"/><link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;500;700;900&display=swap" rel="stylesheet"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png"/><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/><link rel="manifest" href="/manifest.json"/><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#3a4e54"/><title>MinIO Console</title><link href="/static/css/2.f324abd6.chunk.css" rel="stylesheet"><link href="/static/css/main.a19f3d53.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,l,i=r[0],a=r[1],p=r[2],c=0,s=[];c<i.length;c++)l=i[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,p||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var a=t[i];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var i=this["webpackJsonpportal-ui"]=this["webpackJsonpportal-ui"]||[],a=i.push.bind(i);i.push=r,i=i.slice();for(var p=0;p<i.length;p++)r(i[p]);var f=a;t()}([])</script><script src="/static/js/2.26e254ca.chunk.js"></script><script src="/static/js/main.a8ae7284.chunk.js"></script></body></html>
1+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="MinIO Console"/><link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;500;700;900&display=swap" rel="stylesheet"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png"/><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/><link rel="manifest" href="/manifest.json"/><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#3a4e54"/><title>MinIO Console</title><link href="/static/css/2.f324abd6.chunk.css" rel="stylesheet"><link href="/static/css/main.a19f3d53.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,l,i=r[0],a=r[1],p=r[2],c=0,s=[];c<i.length;c++)l=i[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,p||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var a=t[i];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var i=this["webpackJsonpportal-ui"]=this["webpackJsonpportal-ui"]||[],a=i.push.bind(i);i.push=r,i=i.slice();for(var p=0;p<i.length;p++)r(i[p]);var f=a;t()}([])</script><script src="/static/js/2.26e254ca.chunk.js"></script><script src="/static/js/main.fb87f627.chunk.js"></script></body></html>

portal-ui/build/static/js/main.a8ae7284.chunk.js.map

Lines changed: 0 additions & 1 deletion
This file was deleted.

portal-ui/build/static/js/main.a8ae7284.chunk.js renamed to portal-ui/build/static/js/main.fb87f627.chunk.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

portal-ui/build/static/js/main.fb87f627.chunk.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

portal-ui/src/screens/Console/Tenants/ListTenants/PoolsMultiSelector.tsx

Lines changed: 0 additions & 244 deletions
This file was deleted.

portal-ui/src/screens/Console/Tenants/ListTenants/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export interface IAddPoolRequest {
3838

3939
export interface IVolumeConfiguration {
4040
size: number;
41-
storage_class: string;
41+
storage_class_name: string;
4242
labels: { [key: string]: any } | null;
4343
}
4444

portal-ui/src/screens/Console/Tenants/TenantDetails/AddPoolModal.tsx

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import React, { useState } from "react";
1+
import React, { useState, useEffect } from "react";
2+
import get from "lodash/get";
23
import ModalWrapper from "../../Common/ModalWrapper/ModalWrapper";
34
import { createStyles, Theme, withStyles } from "@material-ui/core/styles";
45
import { modalBasic } from "../../Common/FormComponents/common/styleLibrary";
@@ -10,6 +11,8 @@ import api from "../../../../common/api";
1011
import { IAddPoolRequest, ITenant } from "../ListTenants/types";
1112
import { IAffinityModel } from "../../../../common/types";
1213
import { getHardcodedAffinity } from "./utils";
14+
import SelectWrapper from "../../Common/FormComponents/SelectWrapper/SelectWrapper";
15+
import { IQuotaElement, IQuotas, Opts } from "../ListTenants/utils";
1316

1417
interface IAddPoolProps {
1518
tenant: ITenant;
@@ -67,10 +70,42 @@ const AddPoolModal = ({
6770
const [numberOfNodes, setNumberOfNodes] = useState<number>(0);
6871
const [volumeSize, setVolumeSize] = useState<number>(0);
6972
const [volumesPerServer, setVolumesPerSever] = useState<number>(0);
73+
const [selectedStorageClass, setSelectedStorageClass] = useState<string>("");
74+
const [storageClasses, setStorageClasses] = useState<Opts[]>([]);
7075

7176
const instanceCapacity: number = volumeSize * 1073741824 * volumesPerServer;
7277
const totalCapacity: number = instanceCapacity * numberOfNodes;
7378

79+
useEffect(() => {
80+
setSelectedStorageClass("");
81+
82+
setStorageClasses([]);
83+
api
84+
.invoke(
85+
"GET",
86+
`/api/v1/namespaces/${tenant.namespace}/resourcequotas/${tenant.namespace}-storagequota`
87+
)
88+
.then((res: IQuotas) => {
89+
const elements: IQuotaElement[] = get(res, "elements", []);
90+
91+
const newStorage = elements.map((storageClass: any) => {
92+
const name = get(storageClass, "name", "").split(
93+
".storageclass.storage.k8s.io/requests.storage"
94+
)[0];
95+
96+
return { label: name, value: name };
97+
});
98+
99+
setStorageClasses(newStorage);
100+
if (newStorage.length > 0) {
101+
setSelectedStorageClass(newStorage[0].value);
102+
}
103+
})
104+
.catch((err: any) => {
105+
console.error(err);
106+
});
107+
}, [tenant]);
108+
74109
return (
75110
<ModalWrapper
76111
onClose={() => onClosePoolAndReload(false)}
@@ -97,7 +132,7 @@ const AddPoolModal = ({
97132
volumes_per_server: volumesPerServer,
98133
volume_configuration: {
99134
size: volumeSize * 1073741824,
100-
storage_class: "",
135+
storage_class_name: selectedStorageClass,
101136
labels: null,
102137
},
103138
affinity: hardCodedAffinity,
@@ -155,6 +190,19 @@ const AddPoolModal = ({
155190
value={volumesPerServer.toString(10)}
156191
/>
157192
</Grid>
193+
<Grid item xs={12}>
194+
<SelectWrapper
195+
id="storage_class"
196+
name="storage_class"
197+
onChange={(e: React.ChangeEvent<{ value: unknown }>) => {
198+
setSelectedStorageClass(e.target.value as string);
199+
}}
200+
label="Storage Class"
201+
value={selectedStorageClass}
202+
options={storageClasses}
203+
disabled={storageClasses.length < 1}
204+
/>
205+
</Grid>
158206
<Grid item xs={12}>
159207
<Grid item xs={12} className={classes.bottomContainer}>
160208
<div className={classes.factorElements}>

0 commit comments

Comments
 (0)