mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
743 lines
24 KiB
Vue
743 lines
24 KiB
Vue
// 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>
|
|
<div>
|
|
<a-alert type="info" v-if="resource.state !== 'DISABLED'">
|
|
<template #message>
|
|
<div
|
|
v-html="$t('message.autoscale.vmprofile.update')" />
|
|
</template>
|
|
</a-alert>
|
|
|
|
<a-divider/>
|
|
<div class="form">
|
|
<div class="form__item" v-if="resource.lbprovider === 'Netscaler'">
|
|
<div class="form__label">{{ $t('label.user') }}</div>
|
|
<a-select
|
|
:disabled="true"
|
|
style="width: 100%"
|
|
showSearch
|
|
optionFilterProp="label"
|
|
:filterOption="(input, option) => {
|
|
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
|
}"
|
|
v-focus="true"
|
|
v-model:value="autoscaleuserid">
|
|
<a-select-option
|
|
v-for="(user, index) in usersList"
|
|
:value="user.id"
|
|
:key="index"
|
|
:label="user.username">
|
|
{{ user.username }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
</div>
|
|
<div class="form">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.expungevmgraceperiod')" :tooltip="createAutoScaleVmProfileApiParams.expungevmgraceperiod.description"/>
|
|
</div>
|
|
{{ expungevmgraceperiod }}
|
|
</div>
|
|
</div>
|
|
<div class="form">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.templatename')" :tooltip="createAutoScaleVmProfileApiParams.templateid.description"/>
|
|
</div>
|
|
{{ getTemplateName(templateid) }}
|
|
</div>
|
|
</div>
|
|
<div class="form">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.serviceofferingid')" :tooltip="createAutoScaleVmProfileApiParams.serviceofferingid.description"/>
|
|
</div>
|
|
{{ getServiceOfferingName(serviceofferingid) }}
|
|
</div>
|
|
</div>
|
|
<div class="form" v-if="userdataid">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.userdataid')"/>
|
|
</div>
|
|
{{ userdataid }}
|
|
</div>
|
|
</div>
|
|
<div class="form" v-if="userdataname">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.userdataname')"/>
|
|
</div>
|
|
{{ userdataname }}
|
|
</div>
|
|
</div>
|
|
<div class="form" v-if="userdatadetails">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.userdatadetails')"/>
|
|
</div>
|
|
{{ userdatadetails }}
|
|
</div>
|
|
</div>
|
|
<div class="form" v-if="userdatapolicy">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.userdatapolicy')"/>
|
|
</div>
|
|
{{ userdatapolicy }}
|
|
</div>
|
|
</div>
|
|
<div class="form">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.userdata')" :tooltip="createAutoScaleVmProfileApiParams.userdata.description"/>
|
|
</div>
|
|
<a-textarea v-model:value="userdata" rows="5" :disabled="true">
|
|
</a-textarea>
|
|
</div>
|
|
</div>
|
|
<div class="form">
|
|
<div class="form__item">
|
|
<a-button ref="submit" :disabled="!('updateAutoScaleVmProfile' in $store.getters.apis) || resource.state !== 'DISABLED'" type="primary" @click="editProfileModalVisible = true">
|
|
<template #icon><edit-outlined /></template>
|
|
{{ $t('label.edit.autoscale.vmprofile') }}
|
|
</a-button>
|
|
</div>
|
|
<div class="form__item">
|
|
<a-button ref="submit" :disabled="!('updateAutoScaleVmProfile' in $store.getters.apis) || resource.state !== 'DISABLED'" type="primary" @click="showUpdateUserDataForm = true">
|
|
<template #icon><solution-outlined /></template>
|
|
{{ $t('label.reset.userdata.on.autoscale.vm.group') }}
|
|
</a-button>
|
|
</div>
|
|
</div>
|
|
|
|
<a-divider/>
|
|
<div class="title">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.params')" :tooltip="createAutoScaleVmProfileApiParams.otherdeployparams.description"/>
|
|
</div>
|
|
</div>
|
|
<div class="form" v-ctrl-enter="addParam">
|
|
<div class="form__item" ref="newParamName">
|
|
<div class="form__label"><span class="form__required">*</span>{{ $t('label.param.name') }}</div>
|
|
<a-select
|
|
style="width: 100%"
|
|
showSearch
|
|
optionFilterProp="value"
|
|
:filterOption="(input, option) => {
|
|
return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
|
}"
|
|
v-focus="true"
|
|
v-model:value="newParam.name">
|
|
<a-select-option v-for="(param, index) in paramNameList" :value="param" :key="index">
|
|
{{ param }}
|
|
</a-select-option>
|
|
</a-select>
|
|
<span class="error-text">{{ $t('label.required') }}</span>
|
|
</div>
|
|
<div class="form__item" ref="newParamValue">
|
|
<div class="form__label"><span class="form__required">*</span>{{ $t('label.param.value') }}</div>
|
|
<a-input v-model:value="newParam.value"></a-input>
|
|
<span class="error-text">{{ $t('label.required') }}</span>
|
|
</div>
|
|
<div class="form__item">
|
|
<div class="form__label">{{ $t('label.action') }}</div>
|
|
<a-button ref="submit" :disabled="!('updateAutoScaleVmProfile' in $store.getters.apis) || resource.state !== 'DISABLED'" type="primary" @click="addParam">
|
|
<template #icon><plus-outlined /></template>
|
|
{{ $t('label.add.param') }}
|
|
</a-button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<a-divider/>
|
|
<a-table
|
|
size="small"
|
|
style="overflow-y: auto"
|
|
:loading="loading"
|
|
:columns="columns"
|
|
:dataSource="allParams"
|
|
:pagination="false"
|
|
:rowKey="record => record.name">
|
|
<template #bodyCell="{ column, record }">
|
|
<template v-if="column.key === 'actions'">
|
|
<a-popconfirm
|
|
:title="$t('label.delete') + '?'"
|
|
@confirm="deleteParam(record.name)"
|
|
:okText="$t('label.yes')"
|
|
:cancelText="$t('label.no')"
|
|
>
|
|
<tooltip-button
|
|
:tooltip="$t('label.delete')"
|
|
:disabled="!('deleteCondition' in $store.getters.apis) || resource.state !== 'DISABLED'"
|
|
type="primary"
|
|
:danger="true"
|
|
icon="delete-outlined" />
|
|
</a-popconfirm>
|
|
</template>
|
|
</template>
|
|
</a-table>
|
|
|
|
<a-modal
|
|
:title="$t('label.edit.autoscale.vmprofile')"
|
|
:visible="editProfileModalVisible"
|
|
:afterClose="closeModal"
|
|
:maskClosable="false"
|
|
:closable="true"
|
|
:footer="null"
|
|
@cancel="editProfileModalVisible = false">
|
|
|
|
<div class="form">
|
|
<div class="form__item" v-if="resource.lbprovider === 'Netscaler'">
|
|
<div class="form__label">{{ $t('label.user') }}</div>
|
|
<a-select
|
|
style="width: 100%"
|
|
showSearch
|
|
optionFilterProp="label"
|
|
:filterOption="(input, option) => {
|
|
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
|
}"
|
|
v-focus="true"
|
|
v-model:value="autoscaleuserid">
|
|
<a-select-option
|
|
v-for="(user, index) in usersList"
|
|
:value="user.id"
|
|
:key="index"
|
|
:label="user.username">
|
|
{{ user.username }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
</div>
|
|
<div class="form">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.expungevmgraceperiod')" :tooltip="createAutoScaleVmProfileApiParams.expungevmgraceperiod.description"/>
|
|
</div>
|
|
<a-input v-model:value="expungevmgraceperiod" type="number"></a-input>
|
|
</div>
|
|
</div>
|
|
<div class="form">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.templatename')" :tooltip="createAutoScaleVmProfileApiParams.templateid.description"/>
|
|
</div>
|
|
<a-select
|
|
style="width: 100%"
|
|
showSearch
|
|
optionFilterProp="label"
|
|
:filterOption="(input, option) => {
|
|
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
|
}"
|
|
v-focus="true"
|
|
v-model:value="templateid">
|
|
<a-select-option
|
|
v-for="(template, index) in templatesList"
|
|
:value="template.id"
|
|
:key="index"
|
|
:label="template.name">
|
|
{{ template.name }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
</div>
|
|
<div class="form">
|
|
<div class="form__item">
|
|
<div class="form__label">
|
|
<tooltip-label :title="$t('label.serviceofferingid')" :tooltip="createAutoScaleVmProfileApiParams.serviceofferingid.description"/>
|
|
</div>
|
|
<a-select
|
|
style="width: 100%"
|
|
showSearch
|
|
optionFilterProp="label"
|
|
:filterOption="(input, option) => {
|
|
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
|
}"
|
|
v-focus="true"
|
|
v-model:value="serviceofferingid">
|
|
<a-select-option
|
|
v-for="(offering, index) in serviceOfferingsList"
|
|
:value="offering.id"
|
|
:key="index"
|
|
:label="offering.name">
|
|
{{ offering.name }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
</div>
|
|
<div :span="24" class="action-button">
|
|
<a-button :loading="loading" @click="closeModal">{{ $t('label.cancel') }}</a-button>
|
|
<a-button :loading="loading" ref="submit" type="primary" @click="updateAutoScaleVmProfile">{{ $t('label.ok') }}</a-button>
|
|
</div>
|
|
</a-modal>
|
|
|
|
<a-modal
|
|
:visible="showUpdateUserDataForm"
|
|
:title="$t('label.reset.userdata.on.autoscale.vm.group')"
|
|
:closable="true"
|
|
:maskClosable="false"
|
|
:footer="null"
|
|
@cancel="showUpdateUserDataForm = false"
|
|
centered
|
|
width="auto">
|
|
<reset-user-data
|
|
:resource="{ ...resource, ...{ resetUserDataApiName: 'updateAutoScaleVmProfile', resetUserDataResourceId: this.resource.vmprofileid, templateid: this.templateid}}"
|
|
@close-action="showUpdateUserDataForm = false"
|
|
/>
|
|
</a-modal>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { api } from '@/api'
|
|
import { isAdmin, isAdminOrDomainAdmin } from '@/role'
|
|
import Status from '@/components/widgets/Status'
|
|
import TooltipButton from '@/components/widgets/TooltipButton'
|
|
import TooltipLabel from '@/components/widgets/TooltipLabel'
|
|
import ResetUserData from '@views/compute/ResetUserData'
|
|
|
|
export default {
|
|
name: 'conditionsTab',
|
|
components: {
|
|
ResetUserData,
|
|
Status,
|
|
TooltipButton,
|
|
TooltipLabel
|
|
},
|
|
props: {
|
|
resource: {
|
|
type: Object,
|
|
required: true
|
|
}
|
|
},
|
|
data () {
|
|
return {
|
|
filterColumns: ['Actions'],
|
|
loading: true,
|
|
editProfileModalVisible: false,
|
|
showUpdateUserDataForm: false,
|
|
profileid: null,
|
|
autoscaleuserid: null,
|
|
expungevmgraceperiod: null,
|
|
templateid: null,
|
|
serviceofferingid: null,
|
|
userdata: null,
|
|
userdataid: null,
|
|
userdataname: null,
|
|
userdatadetails: null,
|
|
userdatapolicy: null,
|
|
usersList: [],
|
|
templatesList: [],
|
|
serviceOfferingsList: [],
|
|
allParams: [],
|
|
newParam: {
|
|
name: null,
|
|
value: null
|
|
},
|
|
counterParams: [],
|
|
deployParams: [],
|
|
columns: [
|
|
{
|
|
title: this.$t('label.param.name'),
|
|
dataIndex: 'name'
|
|
},
|
|
{
|
|
title: this.$t('label.param.value'),
|
|
dataIndex: 'value'
|
|
},
|
|
{
|
|
title: this.$t('label.actions'),
|
|
key: 'actions'
|
|
}
|
|
]
|
|
}
|
|
},
|
|
beforeCreate () {
|
|
this.createAutoScaleVmProfileApi = this.$store.getters.apis.createAutoScaleVmProfile || {}
|
|
this.createAutoScaleVmProfileApiParams = {}
|
|
this.createAutoScaleVmProfileApi.params.forEach(param => {
|
|
this.createAutoScaleVmProfileApiParams[param.name] = param
|
|
})
|
|
},
|
|
created () {
|
|
this.fetchInitData()
|
|
},
|
|
watch: {
|
|
resource: {
|
|
deep: true,
|
|
handler (newItem) {
|
|
if (!newItem || !newItem.id) {
|
|
return
|
|
}
|
|
this.fetchData()
|
|
}
|
|
}
|
|
},
|
|
inject: ['parentFetchData'],
|
|
methods: {
|
|
fetchInitData () {
|
|
this.counterParams = ['snmpcommunity', 'snmpport']
|
|
this.deployParams = ['overridediskofferingid', 'rootdisksize', 'diskofferingid', 'disksize',
|
|
'keypairs', 'affinitygroupids', 'networkids', 'securitygroupids']
|
|
if (this.resource.lbprovider === 'Netscaler') {
|
|
this.paramNameList = this.counterParams.concat(this.deployParams)
|
|
} else if (('VirtualRouter', 'VpcVirtualRouter').includes(this.resource.lbprovider)) {
|
|
this.paramNameList = this.deployParams
|
|
}
|
|
this.paramNameList = this.paramNameList.sort()
|
|
this.fetchUserData()
|
|
this.fetchTemplateData()
|
|
this.fetchServiceOfferingData()
|
|
this.fetchData()
|
|
},
|
|
fetchUserData () {
|
|
api('listUsers', {
|
|
domainid: this.resource.domainid,
|
|
account: this.resource.account
|
|
}).then(json => {
|
|
this.usersList = json.listusersresponse?.user || []
|
|
})
|
|
},
|
|
fetchTemplateData () {
|
|
const params = {
|
|
listall: 'true',
|
|
domainid: this.resource.domainid,
|
|
account: this.resource.account
|
|
}
|
|
if (isAdmin()) {
|
|
params.templatefilter = 'all'
|
|
} else {
|
|
params.templatefilter = 'executable'
|
|
}
|
|
api('listTemplates', params).then(json => {
|
|
this.templatesList = json.listtemplatesresponse?.template || []
|
|
})
|
|
},
|
|
fetchServiceOfferingData () {
|
|
const params = {
|
|
listall: 'true',
|
|
issystem: 'false'
|
|
}
|
|
if (isAdminOrDomainAdmin()) {
|
|
params.isrecursive = 'true'
|
|
}
|
|
api('listServiceOfferings', params).then(json => {
|
|
this.serviceOfferingsList = json.listserviceofferingsresponse?.serviceoffering || []
|
|
this.serviceOfferingsList = this.serviceOfferingsList.filter(offering => !offering.iscustomized)
|
|
})
|
|
},
|
|
fetchData () {
|
|
this.loading = true
|
|
api('listAutoScaleVmProfiles', {
|
|
listAll: true,
|
|
id: this.resource.vmprofileid
|
|
}).then(response => {
|
|
this.profileid = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.id
|
|
this.autoscaleuserid = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.autoscaleuserid
|
|
this.expungevmgraceperiod = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.expungevmgraceperiod
|
|
this.serviceofferingid = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.serviceofferingid
|
|
this.templateid = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.templateid
|
|
this.userdata = this.decodeUserData(decodeURIComponent(response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.userdata || ''))
|
|
this.userdataid = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.userdataid
|
|
this.userdataname = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.userdataname
|
|
this.userdatadetails = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.userdatadetails
|
|
this.userdatapolicy = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.userdatapolicy
|
|
|
|
const counterparam = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.counterparam || {}
|
|
const otherdeployparams = response.listautoscalevmprofilesresponse?.autoscalevmprofile?.[0]?.otherdeployparams || {}
|
|
this.finalizeParams(counterparam, otherdeployparams)
|
|
}).finally(() => {
|
|
this.loading = false
|
|
})
|
|
},
|
|
getTemplateName (templateid) {
|
|
for (const template of this.templatesList) {
|
|
if (template.id === templateid) {
|
|
return template.name
|
|
}
|
|
}
|
|
return ''
|
|
},
|
|
getServiceOfferingName (serviceofferingid) {
|
|
for (const serviceoffering of this.serviceOfferingsList) {
|
|
if (serviceoffering.id === serviceofferingid) {
|
|
return serviceoffering.name
|
|
}
|
|
}
|
|
return ''
|
|
},
|
|
handleCancel () {
|
|
this.parentFetchData()
|
|
},
|
|
finalizeParams (counterparam, otherdeployparams) {
|
|
this.allParams = []
|
|
if (counterparam.snmpcommunity) {
|
|
this.allParams.push({ name: 'snmpcommunity', value: counterparam.snmpcommunity })
|
|
}
|
|
if (counterparam.snmpport) {
|
|
this.allParams.push({ name: 'snmpport', value: counterparam.snmpport })
|
|
}
|
|
if (otherdeployparams.diskofferingid) {
|
|
this.allParams.push({ name: 'diskofferingid', value: otherdeployparams.diskofferingid })
|
|
}
|
|
if (otherdeployparams.securitygroupids) {
|
|
this.allParams.push({ name: 'securitygroupids', value: otherdeployparams.securitygroupids })
|
|
}
|
|
if (otherdeployparams.rootdisksize) {
|
|
this.allParams.push({ name: 'rootdisksize', value: otherdeployparams.rootdisksize })
|
|
}
|
|
if (otherdeployparams.disksize) {
|
|
this.allParams.push({ name: 'disksize', value: otherdeployparams.disksize })
|
|
}
|
|
if (otherdeployparams.overridediskofferingid) {
|
|
this.allParams.push({ name: 'overridediskofferingid', value: otherdeployparams.overridediskofferingid })
|
|
}
|
|
if (otherdeployparams.keypairs) {
|
|
this.allParams.push({ name: 'keypairs', value: otherdeployparams.keypairs })
|
|
}
|
|
if (otherdeployparams.affinitygroupids) {
|
|
this.allParams.push({ name: 'affinitygroupids', value: otherdeployparams.affinitygroupids })
|
|
}
|
|
if (otherdeployparams.networkids) {
|
|
this.allParams.push({ name: 'networkids', value: otherdeployparams.networkids })
|
|
}
|
|
},
|
|
deleteParam (paramName) {
|
|
this.updateAutoScaleVmProfileWithParam(null, null, paramName)
|
|
},
|
|
addParam () {
|
|
if (this.loading) return
|
|
if (!this.newParam.name) {
|
|
this.$refs.newParamName.classList.add('error')
|
|
} else {
|
|
this.$refs.newParamName.classList.remove('error')
|
|
}
|
|
if (!this.newParam.value) {
|
|
this.$refs.newParamValue.classList.add('error')
|
|
} else {
|
|
this.$refs.newParamValue.classList.remove('error')
|
|
}
|
|
if (!this.newParam.name || !this.newParam.value) {
|
|
return
|
|
}
|
|
this.updateAutoScaleVmProfileWithParam(this.newParam.name, this.newParam.value, null)
|
|
},
|
|
updateAutoScaleVmProfileWithParam (paramNameToAdd, paramValueToAdd, paramNameToRemove) {
|
|
if (this.loading) return
|
|
this.loading = true
|
|
|
|
var params = {
|
|
id: this.profileid
|
|
}
|
|
var i = 0
|
|
var j = 0
|
|
for (var index = 0; index < this.allParams.length; index++) {
|
|
var param = { ...this.allParams[index] }
|
|
if (this.counterParams.includes(param.name) && param.name !== paramNameToAdd && param.name !== paramNameToRemove) {
|
|
params['counterparam[' + i + '].name'] = param.name
|
|
params['counterparam[' + i + '].value'] = param.value
|
|
i++
|
|
}
|
|
if (this.deployParams.includes(param.name) && param.name !== paramNameToAdd && param.name !== paramNameToRemove) {
|
|
params['otherdeployparams[' + j + '].name'] = param.name
|
|
params['otherdeployparams[' + j + '].value'] = param.value
|
|
j++
|
|
}
|
|
}
|
|
if (paramNameToAdd && this.counterParams.includes(paramNameToAdd) && paramValueToAdd) {
|
|
params['counterparam[' + i + '].name'] = paramNameToAdd
|
|
params['counterparam[' + i + '].value'] = paramValueToAdd
|
|
}
|
|
|
|
if (paramNameToAdd && this.deployParams.includes(paramNameToAdd) && paramValueToAdd) {
|
|
params['otherdeployparams[' + j + '].name'] = paramNameToAdd
|
|
params['otherdeployparams[' + j + '].value'] = paramValueToAdd
|
|
}
|
|
|
|
api('updateAutoScaleVmProfile', params).then(response => {
|
|
this.$pollJob({
|
|
jobId: response.updateautoscalevmprofileresponse.jobid,
|
|
successMethod: (result) => {
|
|
},
|
|
errorMessage: this.$t('message.update.autoscale.vm.profile.failed'),
|
|
errorMethod: () => {
|
|
}
|
|
})
|
|
}).finally(() => {
|
|
this.loading = false
|
|
})
|
|
},
|
|
updateAutoScaleVmProfile () {
|
|
const params = {
|
|
id: this.profileid,
|
|
expungevmgraceperiod: this.expungevmgraceperiod,
|
|
serviceofferingid: this.serviceofferingid,
|
|
templateid: this.templateid
|
|
}
|
|
if (this.autoscaleuserid) {
|
|
params.autoscaleuserid = this.autoscaleuserid
|
|
}
|
|
|
|
const httpMethod = 'GET'
|
|
const args = params
|
|
const data = {}
|
|
|
|
api('updateAutoScaleVmProfile', args, httpMethod, data).then(response => {
|
|
this.$pollJob({
|
|
jobId: response.updateautoscalevmprofileresponse.jobid,
|
|
successMethod: (result) => {
|
|
},
|
|
errorMessage: this.$t('message.update.autoscale.vm.profile.failed'),
|
|
errorMethod: () => {
|
|
}
|
|
})
|
|
}).finally(() => {
|
|
this.loading = false
|
|
})
|
|
},
|
|
decodeUserData (userdata) {
|
|
const decodedData = Buffer.from(userdata, 'base64')
|
|
return decodedData.toString('utf-8')
|
|
},
|
|
closeModal () {
|
|
this.editProfileModalVisible = false
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.condition {
|
|
|
|
&-container {
|
|
display: flex;
|
|
width: 100%;
|
|
flex-wrap: wrap;
|
|
margin-right: -20px;
|
|
margin-bottom: -10px;
|
|
}
|
|
|
|
&__item {
|
|
padding-right: 20px;
|
|
margin-bottom: 20px;
|
|
|
|
@media (min-width: 760px) {
|
|
flex: 1;
|
|
}
|
|
|
|
}
|
|
|
|
&__title {
|
|
font-weight: bold;
|
|
}
|
|
|
|
}
|
|
|
|
.title {
|
|
margin-bottom: 5px;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.add-btn {
|
|
width: 100%;
|
|
padding-top: 15px;
|
|
padding-bottom: 15px;
|
|
height: auto;
|
|
}
|
|
|
|
.add-actions {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
margin-right: -20px;
|
|
margin-bottom: 20px;
|
|
|
|
@media (min-width: 760px) {
|
|
margin-top: 20px;
|
|
}
|
|
|
|
button {
|
|
margin-right: 20px;
|
|
}
|
|
|
|
}
|
|
|
|
.form {
|
|
display: flex;
|
|
margin-right: -20px;
|
|
margin-bottom: 20px;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
|
|
@media (min-width: 760px) {
|
|
flex-direction: row;
|
|
}
|
|
|
|
&__item {
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex: 1;
|
|
padding-right: 20px;
|
|
margin-bottom: 20px;
|
|
|
|
@media (min-width: 760px) {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
input,
|
|
.ant-select {
|
|
margin-top: auto;
|
|
}
|
|
|
|
}
|
|
|
|
&__label {
|
|
font-weight: bold;
|
|
}
|
|
|
|
&__required {
|
|
margin-right: 5px;
|
|
color: red;
|
|
}
|
|
|
|
.error-text {
|
|
display: none;
|
|
color: red;
|
|
font-size: 0.8rem;
|
|
}
|
|
|
|
.error {
|
|
|
|
input {
|
|
border-color: red;
|
|
}
|
|
|
|
.error-text {
|
|
display: block;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
.pagination {
|
|
margin-top: 20px;
|
|
}
|
|
</style>
|