diff --git a/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepNetworks/index.jsx b/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepNetworks/index.jsx index a2f55f4b..f0e9b0b1 100644 --- a/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepNetworks/index.jsx +++ b/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepNetworks/index.jsx @@ -12,113 +12,95 @@ // See the License for the specific language governing permissions and // limitations under the License. -import Base from "components/Form"; -import { inject, observer } from "mobx-react"; -import globalNetworkStore from "src/stores/neutron/network"; +import Base from 'components/Form'; +import { inject, observer } from 'mobx-react'; export class StepNetworks extends Base { - - init() { - this.getNetworks(); - } - get title() { - return t("Cluster Network") + return t('Cluster Network'); } get name() { - return t("Cluster Network") + return t('Cluster Network'); } allowed = () => Promise.resolve(); get defaultValue() { return { - enableNetwork: true + enableNetwork: true, }; } get nameForStateUpdate() { - return ['enableNetwork'] - } - - async getNetworks() { - globalNetworkStore.fetchList(); - } - - get getNetworkList() { - return (globalNetworkStore.list.data || []).map((it) => ({ - value: it.id, - label: it.name, - })); + return ['enableNetwork']; } get formItems() { - const { enableNetwork } = this.state; return [ { - name: "enableLoadBalancer", - label: t("Enable Load Balancer"), - type: "check", - content: t("Enabled Load Balancer for Master Nodes"), + name: 'enableLoadBalancer', + label: t('Enable Load Balancer'), + type: 'check', + content: t('Enabled Load Balancer for Master Nodes'), }, { - name: "enableNetwork", - label: t("Enabled Network"), - type: "check", - content: t("Create New Network"), + name: 'enableNetwork', + label: t('Enabled Network'), + type: 'check', + content: t('Create New Network'), }, { - name: "network", - label: t("Use an Existing Network"), + name: 'network', + label: t('Use an Existing Network'), type: 'network-select-table', - hidden: enableNetwork + hidden: enableNetwork, }, { - type: "divider" + type: 'divider', }, { - name: "floating_ip_enabled", - label: t("Cluster API"), - type: "select", + name: 'floating_ip_enabled', + label: t('Cluster API'), + type: 'select', options: [ { - label: t("Accessible on private network only"), - value: "networkOnly" + label: t('Accessible on private network only'), + value: 'networkOnly', }, { - label: t("Accessible on the public internet"), - value: "publicInternet" - } + label: t('Accessible on the public internet'), + value: 'publicInternet', + }, ], }, { - type: "divider" + type: 'divider', }, { - name: "ingress_controller", - label: t("Ingress Controller"), - type: "select", + name: 'ingress_controller', + label: t('Ingress Controller'), + type: 'select', options: [ { - label: t("octavia"), - value: "octavia" + label: t('octavia'), + value: 'octavia', }, { - label: t("nginx"), - value: "nginx" + label: t('nginx'), + value: 'nginx', }, { - label: t("traefik"), - value: "traefik" - } + label: t('traefik'), + value: 'traefik', + }, ], - placeholder: t("Choose an ingress controller"), - } - ] + placeholder: t('Choose an ingress controller'), + }, + ]; } } -export default inject("rootStore")(observer(StepNetworks)) \ No newline at end of file +export default inject('rootStore')(observer(StepNetworks)); diff --git a/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepSize/index.jsx b/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepSize/index.jsx index 4c47626f..91adabe9 100644 --- a/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepSize/index.jsx +++ b/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepSize/index.jsx @@ -13,17 +13,17 @@ // limitations under the License. import React from 'react'; -import { inject, observer } from "mobx-react"; -import Base from "components/Form"; +import { inject, observer } from 'mobx-react'; +import Base from 'components/Form'; import FlavorSelectTable from 'src/pages/compute/containers/Instance/components/FlavorSelectTable'; export class StepSize extends Base { get title() { - return t("Cluster Size") + return t('Cluster Size'); } get name() { - return t("Cluster Size") + return t('Cluster Size'); } allowed = () => Promise.resolve(); @@ -41,38 +41,38 @@ export class StepSize extends Base { get formItems() { return [ { - name: "numberOfMasterNodes", - label: t("Number of Master Nodes"), - type: "input-number", + name: 'numberOfMasterNodes', + label: t('Number of Master Nodes'), + type: 'input-int', min: 1, - required: true + required: true, }, { - name: "flavorOfMasterNodes", - label: t("Flavor of Master Nodes"), + name: 'flavorOfMasterNodes', + label: t('Flavor of Master Nodes'), type: 'select-table', component: this.getFlavorComponent(), required: true, }, { - type: "divider" + type: 'divider', }, { - name: "numberOfWorkerNodes", - label: t("Number of Worker Nodes"), - type: "input-number", + name: 'numberOfWorkerNodes', + label: t('Number of Worker Nodes'), + type: 'input-int', min: 1, required: true, }, { - name: "flavorOfWorkerNodes", - label: t("Flavor of Worker Nodes"), + name: 'flavorOfWorkerNodes', + label: t('Flavor of Worker Nodes'), type: 'select-table', component: this.getFlavorComponent(), - required: true - } - ] + required: true, + }, + ]; } } -export default inject('rootStore')(observer(StepSize)); \ No newline at end of file +export default inject('rootStore')(observer(StepSize)); diff --git a/src/pages/container-infra/containers/Clusters/actions/StepCreate/index.jsx b/src/pages/container-infra/containers/Clusters/actions/StepCreate/index.jsx index 3241b07a..4b0718ec 100644 --- a/src/pages/container-infra/containers/Clusters/actions/StepCreate/index.jsx +++ b/src/pages/container-infra/containers/Clusters/actions/StepCreate/index.jsx @@ -10,38 +10,38 @@ // See the License for the specific language governing permissions and // limitations under the License. -import StepDetails from "./StepDetails"; +import { inject, observer } from 'mobx-react'; +import { StepAction } from 'src/containers/Action'; +import globalClustersStore from 'src/stores/magnum/clusters'; +import StepDetails from './StepDetails'; import StepSize from './StepSize'; import StepNetworks from './StepNetworks'; import StepManagement from './StepManagement'; import StepAdvanced from './StepAdvanced'; -import { inject, observer } from "mobx-react"; -import { StepAction } from "src/containers/Action"; -import globalClustersStore from "src/stores/magnum/clusters"; export class StepCreate extends StepAction { init() { - this.store = globalClustersStore + this.store = globalClustersStore; } - static id = "create-cluster"; + static id = 'create-cluster'; - static title = t("Create Cluster"); + static title = t('Create Cluster'); - static path = "/container-infra/clusters/create"; + static path = '/container-infra/clusters/create'; - static policy = "container-infra:cluster:create"; + static policy = 'container-infra:cluster:create'; static allowed() { return Promise.resolve(true); } get name() { - return t("Create Instance"); + return t('Create Instance'); } get listUrl() { - return this.getRoutePath("containerInfraClusters"); + return this.getRoutePath('containerInfraClusters'); } get hasConfirmStep() { @@ -51,31 +51,31 @@ export class StepCreate extends StepAction { get steps() { return [ { - title: t("Details *"), - component: StepDetails + title: t('Details *'), + component: StepDetails, }, { - title: t("Size: *"), - component: StepSize + title: t('Size: *'), + component: StepSize, }, { - title: t("Networks"), - component: StepNetworks + title: t('Networks'), + component: StepNetworks, }, { - title: t("Management"), - component: StepManagement + title: t('Management'), + component: StepManagement, }, { - title: t("Advanced"), - component: StepAdvanced - } - ] + title: t('Advanced'), + component: StepAdvanced, + }, + ]; } onSubmit = (values) => { - - const { additionalLabels, auto_healing_enabled, auto_scaling_enabled } = values; + const { additionalLabels, auto_healing_enabled, auto_scaling_enabled } = + values; const requestLabels = {}; if (additionalLabels) { @@ -83,34 +83,36 @@ export class StepCreate extends StepAction { const labelKey = item.value.key.toLowerCase().trim(); const labelValue = item.value.value.toLowerCase().trim(); requestLabels[labelKey] = labelValue; - }) + }); } const data = { name: values.clusterName, labels: { ...requestLabels, - auto_healing_enabled: auto_healing_enabled, - auto_scaling_enabled: auto_scaling_enabled, - admission_control_list: 'NodeRestriction,NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,TaintNodesByCondition,Priority,DefaultTolerationSeconds,DefaultStorageClass,StorageObjectInUseProtection,PersistentVolumeClaimResize,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,RuntimeClass' + auto_healing_enabled, + auto_scaling_enabled, + admission_control_list: + 'NodeRestriction,NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,TaintNodesByCondition,Priority,DefaultTolerationSeconds,DefaultStorageClass,StorageObjectInUseProtection,PersistentVolumeClaimResize,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,RuntimeClass', }, cluster_template_id: values.clusterTemplateId, create_timeout: 60, master_count: values.numberOfMasterNodes, node_count: values.numberOfWorkerNodes, keypair: values.keypair, - master_flavor_id: values.flavorOfMasterNodes, - flavor_id: values.flavorOfWorkerNodes, + master_flavor_id: values.flavorOfMasterNodes.selectedRowKeys[0], + flavor_id: values.flavorOfWorkerNodes.selectedRowKeys[0], master_lb_enabled: values.enableLoadBalancer, - floating_ip_enabled: values.floating_ip_enabled === 'networkOnly' ? false : true, + floating_ip_enabled: values.floating_ip_enabled !== 'networkOnly', }; - if (!values.enableNetwork) { - data.fixed_network = values.network; + if (!values.enableNetwork && values.network) { + const { selectedRowKeys = [] } = values.network; + data.fixed_network = selectedRowKeys[0]; } return this.store.create(data); - } + }; } -export default inject("rootStore")(observer(StepCreate)) \ No newline at end of file +export default inject('rootStore')(observer(StepCreate)); diff --git a/src/pages/container-infra/routes/index.js b/src/pages/container-infra/routes/index.js index 0520d457..8adace4b 100644 --- a/src/pages/container-infra/routes/index.js +++ b/src/pages/container-infra/routes/index.js @@ -19,8 +19,8 @@ import ClustersDetail from '../containers/Clusters/Detail'; import ClusterTemplates from '../containers/ClusterTemplates'; import ClusterTemplateDetail from '../containers/ClusterTemplates/Detail'; import ClustersCreate from '../containers/Clusters/actions/StepCreate'; -import ClustersTemplateCreate from '../containers/ClusterTemplates/actions/StepCreate' -import StepUpdateClusterTemplate from '../containers/ClusterTemplates/actions/EditStep' +import ClustersTemplateCreate from '../containers/ClusterTemplates/actions/StepCreate'; +import StepUpdateClusterTemplate from '../containers/ClusterTemplates/actions/EditStep'; const PATH = '/container-infra'; export default [ @@ -29,20 +29,36 @@ export default [ component: BaseLayout, routes: [ { path: `${PATH}/clusters`, component: Clusters, exact: true }, - { path: `${PATH}/clusters/detail/:id`, component: ClustersDetail, exact: true }, - { path: `${PATH}/cluster-template`, component: ClusterTemplates, exact: true }, - { path: `${PATH}/cluster-template/detail/:id`, component: ClusterTemplateDetail, exact: true }, + { + path: `${PATH}/clusters/detail/:id`, + component: ClustersDetail, + exact: true, + }, + { + path: `${PATH}/cluster-template`, + component: ClusterTemplates, + exact: true, + }, + { + path: `${PATH}/cluster-template/detail/:id`, + component: ClusterTemplateDetail, + exact: true, + }, { path: `${PATH}/clusters/create`, component: ClustersCreate, exact: true, }, { - path: `${PATH}/clusters-template/create`, + path: `${PATH}/cluster-template/create`, component: ClustersTemplateCreate, exact: true, }, - { path: `${PATH}/cluster-template/update/:id`, component: StepUpdateClusterTemplate, exact: true }, + { + path: `${PATH}/cluster-template/update/:id`, + component: StepUpdateClusterTemplate, + exact: true, + }, { path: '*', component: E404 }, ], }, diff --git a/src/pages/container-service/containers/Containers/actions/StepCreate/StepNetworks/index.jsx b/src/pages/container-service/containers/Containers/actions/StepCreate/StepNetworks/index.jsx index 5cb1c3fb..6c521c7f 100644 --- a/src/pages/container-service/containers/Containers/actions/StepCreate/StepNetworks/index.jsx +++ b/src/pages/container-service/containers/Containers/actions/StepCreate/StepNetworks/index.jsx @@ -14,7 +14,6 @@ import { SecurityGroupStore } from 'stores/neutron/security-group'; import { VirtualAdapterStore } from 'stores/neutron/virtual-adapter'; import Base from 'components/Form'; import { inject, observer } from 'mobx-react'; -import globalNetworkStore from 'src/stores/neutron/network'; import { portColumns, portFilters } from 'src/resources/neutron/port'; import { securityGroupColumns, @@ -23,7 +22,6 @@ import { export class StepNetworks extends Base { init() { - this.getNetworkStore(); this.portStore = new VirtualAdapterStore(); this.securityGroupStore = new SecurityGroupStore(); } @@ -36,17 +34,6 @@ export class StepNetworks extends Base { return t('Networks'); } - async getNetworkStore() { - await globalNetworkStore.fetchList({ project_id: this.currentProjectId }); - } - - get networking() { - return (globalNetworkStore.list.data || []).map((it) => ({ - label: it.name, - value: it.id, - })); - } - get formItems() { return [ { diff --git a/src/pages/database/containers/Instances/actions/StepCreate/StepDetails/index.jsx b/src/pages/database/containers/Instances/actions/StepCreate/StepDetails/index.jsx index a429e192..b2a5ff1e 100644 --- a/src/pages/database/containers/Instances/actions/StepCreate/StepDetails/index.jsx +++ b/src/pages/database/containers/Instances/actions/StepCreate/StepDetails/index.jsx @@ -149,7 +149,7 @@ export class StepDetails extends Base { { name: 'size', label: t('Size (GiB)'), - type: 'input-number', + type: 'input-int', min: 1, max: 50, placeholder: t('Size'), diff --git a/src/pages/database/containers/Instances/actions/StepCreate/StepNetworking/index.jsx b/src/pages/database/containers/Instances/actions/StepCreate/StepNetworking/index.jsx index eb525439..69005a2f 100644 --- a/src/pages/database/containers/Instances/actions/StepCreate/StepNetworking/index.jsx +++ b/src/pages/database/containers/Instances/actions/StepCreate/StepNetworking/index.jsx @@ -14,14 +14,8 @@ import { inject, observer } from 'mobx-react'; import Base from 'components/Form'; -import globalNetworkStore from 'stores/neutron/network'; export class StepNetworking extends Base { - init() { - this.getNetworkStore(); - this.selectedNetwork = []; - } - get title() { return t('Networking *'); } @@ -30,23 +24,8 @@ export class StepNetworking extends Base { return 'Networking'; } - get networking() { - return (globalNetworkStore.list.data || []).map((it) => ({ - label: it.name, - value: it.id, - })); - } - allowed = () => Promise.resolve(); - async getNetworkStore() { - await globalNetworkStore.fetchList(); - } - - onChangeNetworkGroup = (checkedValues) => { - this.selectedNetwork = checkedValues; - }; - get defaultValue() { const values = { project: this.currentProjectName, @@ -66,9 +45,9 @@ export class StepNetworking extends Base { }, { name: 'network', - label: t('Options'), + label: t('Network'), type: 'network-select-table', - options: this.networking, + required: true, }, ]; } diff --git a/src/pages/network/containers/Certificate/Certificate.jsx b/src/pages/network/containers/Certificate/Certificate.jsx index a33cd50f..7ef52e99 100644 --- a/src/pages/network/containers/Certificate/Certificate.jsx +++ b/src/pages/network/containers/Certificate/Certificate.jsx @@ -121,6 +121,7 @@ export class Certificate extends Base { : '-'; }, isHideable: true, + stringify: (value = []) => value.map((it) => it.name).join(',') || '-', }, { title: t('Status'),