| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| |
| <template> |
| <div class="form-layout" v-ctrl-enter="handleSubmit"> |
| <a-spin :spinning="loading"> |
| <DiskOfferingForm |
| ref="formRef" |
| :initialValues="form" |
| :apiParams="apiParams" |
| :isAdmin="isAdmin" |
| @submit="handleSubmit"> |
| <template #form-actions> |
| <div :span="24" class="action-button"> |
| <a-button @click="closeAction">{{ $t('label.cancel') }}</a-button> |
| <a-button :loading="loading" ref="submit" type="primary" @click="handleSubmit">{{ $t('label.ok') }}</a-button> |
| </div> |
| </template> |
| </DiskOfferingForm> |
| </a-spin> |
| </div> |
| </template> |
| |
| <script> |
| import DiskOfferingForm from '@/components/offering/DiskOfferingForm' |
| import { reactive } from 'vue' |
| import { postAPI } from '@/api' |
| import { isAdmin } from '@/role' |
| |
| export default { |
| name: 'AddDiskOffering', |
| components: { |
| DiskOfferingForm |
| }, |
| data () { |
| return { |
| formRef: null, |
| form: reactive({}), |
| loading: false |
| } |
| }, |
| beforeCreate () { |
| this.apiParams = this.$getApiParams('createDiskOffering') |
| }, |
| created () { |
| }, |
| methods: { |
| isAdmin () { |
| return isAdmin() |
| }, |
| handleSubmit (e) { |
| if (e && e.preventDefault) { |
| e.preventDefault() |
| } |
| if (this.loading) return |
| |
| this.$refs.formRef.validate().then((values) => { |
| var params = { |
| name: values.name, |
| displaytext: values.displaytext, |
| storageType: values.storagetype, |
| cacheMode: values.writecachetype, |
| provisioningType: values.provisioningtype, |
| customized: values.customdisksize, |
| disksizestrictness: values.disksizestrictness, |
| encrypt: values.encryptdisk |
| } |
| if (values.customdisksize !== true) { |
| params.disksize = values.disksize |
| } |
| if (values.qostype === 'storage') { |
| var customIops = values.iscustomizeddiskiops === true |
| params.customizediops = customIops |
| if (!customIops) { |
| if (values.diskiopsmin != null && values.diskiopsmin.length > 0) { |
| params.miniops = values.diskiopsmin |
| } |
| if (values.diskiopsmax != null && values.diskiopsmax.length > 0) { |
| params.maxiops = values.diskiopsmax |
| } |
| if (values.hypervisorsnapshotreserve != null && values.hypervisorsnapshotreserve.length > 0) { |
| params.hypervisorsnapshotreserve = values.hypervisorsnapshotreserve |
| } |
| } |
| } else if (values.qostype === 'hypervisor') { |
| if (values.diskbytesreadrate != null && values.diskbytesreadrate.length > 0) { |
| params.bytesreadrate = values.diskbytesreadrate |
| } |
| if (values.diskbytesreadratemax != null && values.diskbytesreadratemax.length > 0) { |
| params.bytesreadratemax = values.diskbytesreadratemax |
| } |
| if (values.diskbyteswriterate != null && values.diskbyteswriterate.length > 0) { |
| params.byteswriterate = values.diskbyteswriterate |
| } |
| if (values.diskbyteswriteratemax != null && values.diskbyteswriteratemax.length > 0) { |
| params.byteswriteratemax = values.diskbyteswriteratemax |
| } |
| if (values.diskiopsreadrate != null && values.diskiopsreadrate.length > 0) { |
| params.iopsreadrate = values.diskiopsreadrate |
| } |
| if (values.diskiopswriterate != null && values.diskiopswriterate.length > 0) { |
| params.iopswriterate = values.diskiopswriterate |
| } |
| } |
| if (values.tags != null && values.tags.length > 0) { |
| var tags = values.tags.join(',') |
| params.tags = tags |
| } |
| if (values.ispublic !== true) { |
| var domainIndexes = values.domainid |
| var domainId = null |
| if (domainIndexes && domainIndexes.length > 0) { |
| var domainIds = [] |
| const domains = this.$refs.formRef.domains |
| for (var i = 0; i < domainIndexes.length; i++) { |
| domainIds.push(domains[domainIndexes[i]].id) |
| } |
| domainId = domainIds.join(',') |
| } |
| if (domainId) { |
| params.domainid = domainId |
| } |
| } |
| var zoneIndexes = values.zoneid |
| var zoneId = null |
| if (zoneIndexes && zoneIndexes.length > 0) { |
| var zoneIds = [] |
| const zones = this.$refs.formRef.zones |
| for (var j = 0; j < zoneIndexes.length; j++) { |
| zoneIds.push(zones[zoneIndexes[j]].id) |
| } |
| zoneId = zoneIds.join(',') |
| } |
| if (zoneId) { |
| params.zoneid = zoneId |
| } |
| if (values.storagepolicy) { |
| params.storagepolicy = values.storagepolicy |
| } |
| |
| this.loading = true |
| postAPI('createDiskOffering', params).then(json => { |
| this.$emit('publish-disk-offering-id', json?.creatediskofferingresponse?.diskoffering?.id) |
| this.$message.success(`${this.$t('message.disk.offering.created')} ${values.name}`) |
| this.$emit('refresh-data') |
| this.closeAction() |
| }).catch(error => { |
| this.$notifyError(error) |
| }).finally(() => { |
| this.loading = false |
| }) |
| }) |
| }, |
| closeAction () { |
| this.$emit('close-action') |
| } |
| } |
| } |
| </script> |
| |
| <style scoped lang="scss"> |
| .form-layout { |
| width: 80vw; |
| |
| @media (min-width: 800px) { |
| width: 480px; |
| } |
| } |
| </style> |