mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
src: fix doclinks and translation across UI (#481)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
parent
1ee5654209
commit
4f97fea9ea
@ -110,7 +110,7 @@ export default {
|
||||
})
|
||||
}
|
||||
}).catch(function (e) {
|
||||
console.log('Error encountered while fetching async job result' + e)
|
||||
console.log(this.$t('error.fetching.async.job.result') + e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
<div>
|
||||
<div style="margin-bottom: 10px;">
|
||||
<strong>{{ $t('label.dedicated') }}</strong>
|
||||
<div>Yes</div>
|
||||
<div>{{ $t('label.yes') }}</div>
|
||||
</div>
|
||||
<p>
|
||||
<strong>{{ $t('label.domainid') }}</strong><br/>
|
||||
@ -38,7 +38,7 @@
|
||||
<a-list-item v-else>
|
||||
<div>
|
||||
<strong>{{ $t('label.dedicated') }}</strong>
|
||||
<div>No</div>
|
||||
<div>{{ $t('label.no') }}</div>
|
||||
<a-button type="primary" style="margin-top: 10px; margin-bottom: 10px;" @click="modalActive = true" :disabled="!dedicateButtonAvailable">
|
||||
{{ dedicatedButtonLabel }}
|
||||
</a-button>
|
||||
@ -71,9 +71,9 @@ export default {
|
||||
return {
|
||||
modalActive: false,
|
||||
dedicateButtonAvailable: true,
|
||||
dedicatedButtonLabel: 'Dedicate',
|
||||
releaseButtonLabel: 'Release',
|
||||
dedicatedModalLabel: 'Dedicate',
|
||||
dedicatedButtonLabel: this.$t('label.dedicate'),
|
||||
releaseButtonLabel: this.$t('label.release'),
|
||||
dedicatedModalLabel: this.$t('label.dedicate'),
|
||||
dedicatedDomainId: null,
|
||||
dedicatedAccountId: null
|
||||
}
|
||||
@ -185,12 +185,12 @@ export default {
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to release dedicated zone',
|
||||
errorMessage: this.$t('error.release.dedicate.zone'),
|
||||
errorMethod: () => {
|
||||
this.parentFetchData()
|
||||
},
|
||||
loadingMessage: this.$t('message.releasing.dedicated.zone'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.parentFetchData()
|
||||
}
|
||||
@ -215,12 +215,12 @@ export default {
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to release dedicated pod',
|
||||
errorMessage: this.$t('error.release.dedicate.pod'),
|
||||
errorMethod: () => {
|
||||
this.parentFetchData()
|
||||
},
|
||||
loadingMessage: this.$t('message.releasing.dedicated.pod'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.parentFetchData()
|
||||
}
|
||||
@ -245,12 +245,12 @@ export default {
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to release dedicated cluster',
|
||||
errorMessage: this.$t('error.release.dedicate.cluster'),
|
||||
errorMethod: () => {
|
||||
this.parentFetchData()
|
||||
},
|
||||
loadingMessage: this.$t('message.releasing.dedicated.cluster'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.parentFetchData()
|
||||
}
|
||||
@ -275,12 +275,12 @@ export default {
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to release dedicated host',
|
||||
errorMessage: this.$t('error.release.dedicate.host'),
|
||||
errorMethod: () => {
|
||||
this.parentFetchData()
|
||||
},
|
||||
loadingMessage: this.$t('message.releasing.dedicated.host'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.parentFetchData()
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
</a-spin>
|
||||
</div>
|
||||
<div class="form__item" v-if="accountsList">
|
||||
<p class="form__label">Account</p>
|
||||
<p class="form__label">{{ $t('label.account') }}</p>
|
||||
<a-select style="width: 100%" @change="handleChangeAccount">
|
||||
<a-select-option v-for="(account, index) in accountsList" :value="account.name" :key="index">
|
||||
{{ account.name }}
|
||||
|
||||
@ -99,18 +99,18 @@ export default {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: this.$t('label.zone.dedicated'),
|
||||
jobid: response.dedicatezoneresponse.jobid,
|
||||
description: `Domain ID: ${this.dedicatedDomainId}`,
|
||||
description: `${this.$t('label.domain.id')} : ${this.dedicatedDomainId}`,
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to dedicate zone',
|
||||
errorMessage: this.$t('error.dedicate.zone.failed'),
|
||||
errorMethod: () => {
|
||||
this.parentFetchData()
|
||||
this.fetchParentData()
|
||||
this.dedicatedDomainModal = false
|
||||
},
|
||||
loadingMessage: this.$t('message.dedicating.zone'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.parentFetchData()
|
||||
this.fetchParentData()
|
||||
@ -143,18 +143,18 @@ export default {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: this.$t('label.pod.dedicated'),
|
||||
jobid: response.dedicatepodresponse.jobid,
|
||||
description: `Domain ID: ${this.dedicatedDomainId}`,
|
||||
description: `${this.$t('label.domainid')}: ${this.dedicatedDomainId}`,
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to dedicate pod',
|
||||
errorMessage: this.$t('error.dedicate.pod.failed'),
|
||||
errorMethod: () => {
|
||||
this.parentFetchData()
|
||||
this.fetchParentData()
|
||||
this.dedicatedDomainModal = false
|
||||
},
|
||||
loadingMessage: this.$t('message.dedicating.pod'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.parentFetchData()
|
||||
this.fetchParentData()
|
||||
@ -187,18 +187,18 @@ export default {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: this.$t('message.cluster.dedicated'),
|
||||
jobid: response.dedicateclusterresponse.jobid,
|
||||
description: `Domain ID: ${this.dedicatedDomainId}`,
|
||||
description: `${this.$t('label.domainid')}: ${this.dedicatedDomainId}`,
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to dedicate cluster',
|
||||
errorMessage: this.$t('error.dedicate.cluster.failed'),
|
||||
errorMethod: () => {
|
||||
this.parentFetchData()
|
||||
this.fetchParentData()
|
||||
this.dedicatedDomainModal = false
|
||||
},
|
||||
loadingMessage: this.$t('message.dedicating.cluster'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.parentFetchData()
|
||||
this.fetchParentData()
|
||||
@ -231,18 +231,18 @@ export default {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: this.$t('message.host.dedicated'),
|
||||
jobid: response.dedicatehostresponse.jobid,
|
||||
description: `Domain ID: ${this.dedicatedDomainId}`,
|
||||
description: `${this.$t('label.domainid')}: ${this.dedicatedDomainId}`,
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to dedicate host',
|
||||
errorMessage: this.$t('error.dedicate.host.failed'),
|
||||
errorMethod: () => {
|
||||
this.parentFetchData()
|
||||
this.fetchParentData()
|
||||
this.dedicatedDomainModal = false
|
||||
},
|
||||
loadingMessage: this.$t('message.dedicating.host'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.parentFetchData()
|
||||
this.fetchParentData()
|
||||
|
||||
@ -85,10 +85,10 @@
|
||||
</div>
|
||||
<div slot="actions" v-if="!disableSettings && 'updateTemplate' in $store.getters.apis && 'updateVirtualMachine' in $store.getters.apis && isAdminOrOwner()">
|
||||
<a-popconfirm
|
||||
title="Delete setting?"
|
||||
:title="`${$t('label.delete.setting')}?`"
|
||||
@confirm="deleteDetail(index)"
|
||||
okText="Yes"
|
||||
cancelText="No"
|
||||
:okText="$t('label.yes')"
|
||||
:cancelText="$t('label.no')"
|
||||
placement="left"
|
||||
>
|
||||
<a-button shape="circle" type="danger" icon="delete" />
|
||||
@ -185,8 +185,8 @@ export default {
|
||||
}
|
||||
if (!(apiName in this.$store.getters.apis)) {
|
||||
this.$notification.error({
|
||||
message: 'Failed to execute API: ' + apiName,
|
||||
description: 'User is not permitted to use the API'
|
||||
message: this.$t('error.execute.api.failed') + ' ' + apiName,
|
||||
description: this.$t('message.user.not.permitted.api')
|
||||
})
|
||||
return
|
||||
}
|
||||
@ -221,7 +221,7 @@ export default {
|
||||
},
|
||||
addDetail () {
|
||||
if (this.newKey === '' || this.newValue === '') {
|
||||
this.error = 'Must provide a valid key and value for setting'
|
||||
this.error = this.$t('message.error.provide.setting')
|
||||
return
|
||||
}
|
||||
this.error = false
|
||||
|
||||
@ -33,6 +33,10 @@
|
||||
<router-link :to="{ path: '/volume/' + volume.uuid }">{{ volume.type }} - {{ volume.path }}</router-link> ({{ parseFloat(volume.size / (1024.0 * 1024.0 * 1024.0)).toFixed(1) }} GB)
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="['name', 'type'].includes(item)">
|
||||
<span v-if="['USER.LOGIN', 'USER.LOGOUT', 'ROUTER.HEALTH.CHECKS', 'FIREWALL.CLOSE', 'ALERT.SERVICE.DOMAINROUTER'].includes(resource[item])">{{ $t(resource[item].toLowerCase()) }}</span>
|
||||
<span v-else>{{ resource[item] }}</span>
|
||||
</div>
|
||||
<div v-else>
|
||||
{{ resource[item] }}
|
||||
</div>
|
||||
|
||||
@ -29,10 +29,13 @@
|
||||
</slot>
|
||||
</div>
|
||||
<slot name="name">
|
||||
<div v-if="['USER.LOGIN', 'USER.LOGOUT', 'ROUTER.HEALTH.CHECKS', 'FIREWALL.CLOSE', 'ALERT.SERVICE.DOMAINROUTER'].includes(resource.name)">{{ $t(resource.name.toLowerCase()) }}</div>
|
||||
<div v-else>
|
||||
<h4 class="name">
|
||||
{{ resource.displayname || resource.displaytext || resource.name || resource.hostname || resource.username || resource.ipaddress || resource.virtualmachinename || resource.templatetype }}
|
||||
</h4>
|
||||
<console style="margin-left: 10px" :resource="resource" size="default" v-if="resource.id" />
|
||||
</div>
|
||||
</slot>
|
||||
</div>
|
||||
<slot name="actions">
|
||||
@ -41,7 +44,10 @@
|
||||
{{ resource.instancename }}
|
||||
</a-tag>
|
||||
<a-tag v-if="resource.type">
|
||||
<span v-if="['USER.LOGIN', 'USER.LOGOUT', 'ROUTER.HEALTH.CHECKS', 'FIREWALL.CLOSE', 'ALERT.SERVICE.DOMAINROUTER'].includes(resource.type)">{{ $t(resource.type.toLowerCase()) }}</span>
|
||||
<span v-else>
|
||||
{{ resource.type }}
|
||||
</span>
|
||||
</a-tag>
|
||||
<a-tag v-if="resource.issourcenat">
|
||||
{{ $t('label.issourcenat') }}
|
||||
@ -94,7 +100,7 @@
|
||||
<div class="resource-detail-item__details">
|
||||
<a-tooltip placement="right" >
|
||||
<template slot="title">
|
||||
<span>Copy ID</span>
|
||||
<span>{{ $t('label.copyid') }}</span>
|
||||
</template>
|
||||
<a-button
|
||||
style="margin-left: -5px"
|
||||
@ -102,7 +108,7 @@
|
||||
icon="barcode"
|
||||
type="dashed"
|
||||
size="small"
|
||||
@click="$message.success('Copied to clipboard')"
|
||||
@click="$message.success($t('label.copied.clipboard'))"
|
||||
v-clipboard:copy="resource.id" />
|
||||
</a-tooltip>
|
||||
<span style="margin-left: 10px;">{{ resource.id }}</span>
|
||||
@ -146,7 +152,7 @@
|
||||
<div class="resource-detail-item" v-if="resource.memory">
|
||||
<div class="resource-detail-item__label">{{ $t('label.memory') }}</div>
|
||||
<div class="resource-detail-item__details">
|
||||
<a-icon type="bulb" />{{ resource.memory }} MB Memory
|
||||
<a-icon type="bulb" />{{ resource.memory + ' ' + $t('label.mb.memory') }}
|
||||
</div>
|
||||
<div>
|
||||
<span v-if="resource.memorykbs && resource.memoryintfreekbs">
|
||||
@ -163,7 +169,7 @@
|
||||
<div class="resource-detail-item" v-else-if="resource.memorytotalgb">
|
||||
<div class="resource-detail-item__label">{{ $t('label.memory') }}</div>
|
||||
<div class="resource-detail-item__details">
|
||||
<a-icon type="bulb" />{{ resource.memorytotalgb }} Memory
|
||||
<a-icon type="bulb" />{{ resource.memorytotalgb + ' ' + $t('label.memory') }}
|
||||
</div>
|
||||
<div>
|
||||
<span v-if="resource.memoryusedgb">
|
||||
@ -191,7 +197,7 @@
|
||||
|
||||
<div style="display: flex; flex-direction: column; width: 100%;">
|
||||
<div>
|
||||
<a-icon type="bulb" />{{ resource.memorytotal }} Memory
|
||||
<a-icon type="bulb" />{{ resource.memorytotal + ' ' + $t('label.memory') }}
|
||||
</div>
|
||||
<div>
|
||||
<span
|
||||
@ -224,10 +230,10 @@
|
||||
<span style="width: 100%;" v-else-if="resource.sizegb || resource.size">{{ resource.sizegb || (resource.size/1024.0) }}</span>
|
||||
</div>
|
||||
<div style="margin-left: 25px; margin-top: 5px" v-if="resource.diskkbsread && resource.diskkbswrite && resource.diskioread && resource.diskiowrite">
|
||||
<a-tag style="margin-bottom: 5px;">Read {{ toSize(resource.diskkbsread) }}</a-tag>
|
||||
<a-tag style="margin-bottom: 5px;">Write {{ toSize(resource.diskkbswrite) }}</a-tag><br/>
|
||||
<a-tag style="margin-bottom: 5px;">Read (IO) {{ resource.diskioread }}</a-tag>
|
||||
<a-tag>Write (IO) {{ resource.diskiowrite }}</a-tag>
|
||||
<a-tag style="margin-bottom: 5px;">{{ $t('label.read') + ' ' + toSize(resource.diskkbsread) }}</a-tag>
|
||||
<a-tag style="margin-bottom: 5px;">{{ $t('label.write') + ' ' + toSize(resource.diskkbswrite) }}</a-tag><br/>
|
||||
<a-tag style="margin-bottom: 5px;">{{ $t('label.read.io') + ' ' + resource.diskioread }}</a-tag>
|
||||
<a-tag>{{ $t('label.writeio') + ' ' + resource.diskiowrite }}</a-tag>
|
||||
</div>
|
||||
</div>
|
||||
<div class="resource-detail-item" v-else-if="resource.disksizetotalgb">
|
||||
@ -259,8 +265,8 @@
|
||||
<a-icon type="wifi" />
|
||||
<div>
|
||||
<div v-if="'networkkbsread' in resource && 'networkkbswrite' in resource">
|
||||
<a-tag><a-icon type="arrow-down" /> RX {{ toSize(resource.networkkbsread) }}</a-tag>
|
||||
<a-tag><a-icon type="arrow-up" /> TX {{ toSize(resource.networkkbswrite) }}</a-tag>
|
||||
<a-tag><a-icon type="arrow-down" />RX {{ toSize(resource.networkkbsread) }}</a-tag>
|
||||
<a-tag><a-icon type="arrow-up" />TX {{ toSize(resource.networkkbswrite) }}</a-tag>
|
||||
</div>
|
||||
<div v-else>{{ resource.nic.length }} NIC(s)</div>
|
||||
<div
|
||||
@ -499,7 +505,7 @@
|
||||
v-if="$router.resolve('/' + item.name).route.name !== '404'"
|
||||
:to="{ path: '/' + item.name + '?' + item.param + '=' + (item.param === 'account' ? resource.name + '&domainid=' + resource.domainid : resource.id) }">
|
||||
<a-button style="margin-right: 10px" :icon="$router.resolve('/' + item.name).route.meta.icon" >
|
||||
View {{ $t(item.title) }}
|
||||
{{ $t('label.view') + ' ' + $t(item.title) }}
|
||||
</a-button>
|
||||
</router-link>
|
||||
</div>
|
||||
@ -513,9 +519,9 @@
|
||||
{{ $t('label.apikey') }}
|
||||
<a-tooltip placement="right" >
|
||||
<template slot="title">
|
||||
<span>Copy {{ $t('label.apikey') }}</span>
|
||||
<span>{{ $t('label.copy') + ' ' + $t('label.apikey') }}</span>
|
||||
</template>
|
||||
<a-button shape="circle" type="dashed" size="small" @click="$message.success('Copied to clipboard')" v-clipboard:copy="resource.apikey">
|
||||
<a-button shape="circle" type="dashed" size="small" @click="$message.success($t('label.copied.clipboard'))" v-clipboard:copy="resource.apikey">
|
||||
<a-icon type="copy"/>
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
@ -530,9 +536,9 @@
|
||||
{{ $t('label.secretkey') }}
|
||||
<a-tooltip placement="right" >
|
||||
<template slot="title">
|
||||
<span>Copy {{ $t('label.secretkey') }}</span>
|
||||
<span>{{ $t('label.copy') + ' ' + $t('label.secretkey') }}</span>
|
||||
</template>
|
||||
<a-button shape="circle" type="dashed" size="small" @click="$message.success('Copied to clipboard')" v-clipboard:copy="resource.secretkey">
|
||||
<a-button shape="circle" type="dashed" size="small" @click="$message.success($t('label.copied.clipboard'))" v-clipboard:copy="resource.secretkey">
|
||||
<a-icon type="copy"/>
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
|
||||
@ -56,8 +56,8 @@
|
||||
:current="options.page"
|
||||
:pageSize="options.pageSize"
|
||||
:total="total"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40']"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="device === 'desktop' ? ['20', '50', '100', '500'] : ['10', '20', '50', '100', '500']"
|
||||
@change="handleTableChange"
|
||||
@showSizeChange="handlePageSizeChange"
|
||||
showSizeChanger>
|
||||
@ -72,6 +72,7 @@
|
||||
|
||||
<script>
|
||||
import { api } from '@/api'
|
||||
import { mixinDevice } from '@/utils/mixin.js'
|
||||
import Status from '@/components/widgets/Status'
|
||||
|
||||
export default {
|
||||
@ -79,6 +80,7 @@ export default {
|
||||
components: {
|
||||
Status
|
||||
},
|
||||
mixins: [mixinDevice],
|
||||
props: {
|
||||
resource: {
|
||||
type: Object,
|
||||
|
||||
@ -69,6 +69,10 @@
|
||||
<console :resource="record" size="small" style="margin-right: 5px" />
|
||||
|
||||
<span v-if="$route.path.startsWith('/globalsetting')">{{ text }}</span>
|
||||
<span v-if="$route.path.startsWith('/alert')">
|
||||
<router-link :to="{ path: $route.path + '/' + record.id }" v-if="record.id">{{ $t(text.toLowerCase()) }}</router-link>
|
||||
<router-link :to="{ path: $route.path + '/' + record.name }" v-else>{{ $t(text.toLowerCase()) }}</router-link>
|
||||
</span>
|
||||
<span v-else>
|
||||
<router-link :to="{ path: $route.path + '/' + record.id }" v-if="record.id">{{ text }}</router-link>
|
||||
<router-link :to="{ path: $route.path + '/' + record.name }" v-else>{{ text }}</router-link>
|
||||
@ -78,6 +82,10 @@
|
||||
<a slot="templatetype" slot-scope="text, record" href="javascript:;">
|
||||
<router-link :to="{ path: $route.path + '/' + record.templatetype }">{{ text }}</router-link>
|
||||
</a>
|
||||
<template slot="type" slot-scope="text">
|
||||
<span v-if="['USER.LOGIN', 'USER.LOGOUT', 'ROUTER.HEALTH.CHECKS', 'FIREWALL.CLOSE', 'ALERT.SERVICE.DOMAINROUTER'].includes(text)">{{ $t(text.toLowerCase()) }}</span>
|
||||
<span v-else>{{ text }}</span>
|
||||
</template>
|
||||
<a slot="displayname" slot-scope="text, record" href="javascript:;">
|
||||
<router-link :to="{ path: $route.path + '/' + record.id }">{{ text }}</router-link>
|
||||
</a>
|
||||
@ -182,7 +190,7 @@
|
||||
|
||||
<div slot="order" slot-scope="text, record" class="shift-btns">
|
||||
<a-tooltip placement="top">
|
||||
<template slot="title">Move to top</template>
|
||||
<template slot="title">{{ $t('label.move.to.top') }}</template>
|
||||
<a-button
|
||||
shape="round"
|
||||
@click="moveItemTop(record)"
|
||||
@ -191,7 +199,7 @@
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
<a-tooltip placement="top">
|
||||
<template slot="title">Move to bottom</template>
|
||||
<template slot="title">{{ $t('label.move.to.bottom') }}</template>
|
||||
<a-button
|
||||
shape="round"
|
||||
@click="moveItemBottom(record)"
|
||||
@ -200,13 +208,13 @@
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
<a-tooltip placement="top">
|
||||
<template slot="title">Move up one row</template>
|
||||
<template slot="title">{{ $t('label.move.up.row') }}</template>
|
||||
<a-button shape="round" @click="moveItemUp(record)" class="shift-btn">
|
||||
<a-icon type="caret-up" class="shift-btn" />
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
<a-tooltip placement="top">
|
||||
<template slot="title">Move down one row</template>
|
||||
<template slot="title">{{ $t('label.move.down.row') }}</template>
|
||||
<a-button shape="round" @click="moveItemDown(record)" class="shift-btn">
|
||||
<a-icon type="caret-down" class="shift-btn" />
|
||||
</a-button>
|
||||
@ -328,7 +336,7 @@ export default {
|
||||
changeProject (project) {
|
||||
this.$store.dispatch('SetProject', project)
|
||||
this.$store.dispatch('ToggleTheme', project.id === undefined ? 'light' : 'dark')
|
||||
this.$message.success(`Switched to "${project.name}"`)
|
||||
this.$message.success(this.$t('message.switch.to') + ' ' + project.name)
|
||||
this.$router.push({ name: 'dashboard' })
|
||||
},
|
||||
saveValue (record) {
|
||||
@ -338,7 +346,7 @@ export default {
|
||||
}).then(json => {
|
||||
this.editableValueKey = null
|
||||
|
||||
this.$message.success('Setting Updated: ' + record.name)
|
||||
this.$message.success(`${this.$t('message.setting.updated')} ${record.name}`)
|
||||
if (json.updateconfigurationresponse &&
|
||||
json.updateconfigurationresponse.configuration &&
|
||||
!json.updateconfigurationresponse.configuration.isdynamic &&
|
||||
@ -350,7 +358,7 @@ export default {
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error(error)
|
||||
this.$message.error('There was an error saving this setting.')
|
||||
this.$message.error(this.$t('message.error.save.setting'))
|
||||
}).finally(() => {
|
||||
this.$emit('refresh')
|
||||
})
|
||||
|
||||
@ -25,10 +25,10 @@
|
||||
<strong>
|
||||
{{ $t('label.' + item + 'limit') }}
|
||||
</strong>
|
||||
({{ resource[item + 'available'] === '-1' ? 'Unlimited' : resource[item + 'available'] }} {{ $t('label.available') }})
|
||||
({{ resource[item + 'available'] === '-1' ? $t('label.unlimited') : resource[item + 'available'] }} {{ $t('label.available') }})
|
||||
<div class="list-item__vals">
|
||||
<div class="list-item__data">
|
||||
{{ $t('label.used') }} / {{ $t('label.limit') }} : {{ resource[item + 'total'] }} / {{ resource[item + 'limit'] === '-1' ? 'Unlimited' : resource[item + 'limit'] }}
|
||||
{{ $t('label.used') }} / {{ $t('label.limit') }} : {{ resource[item + 'total'] }} / {{ resource[item + 'limit'] === '-1' ? $t('label.unlimited') : resource[item + 'limit'] }}
|
||||
</div>
|
||||
<a-progress
|
||||
status="normal"
|
||||
|
||||
@ -105,7 +105,7 @@ export default {
|
||||
this.formLoading = false
|
||||
} catch (e) {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: e
|
||||
})
|
||||
this.formLoading = false
|
||||
@ -134,7 +134,7 @@ export default {
|
||||
this.formLoading = true
|
||||
|
||||
Promise.all(arrAsync).then(() => {
|
||||
this.$message.success('Apply Successful')
|
||||
this.$message.success(this.$t('message.apply.success'))
|
||||
this.fetchData()
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
|
||||
@ -126,7 +126,7 @@ export default {
|
||||
this.items = response.listconfigurationsresponse.configuration
|
||||
}).catch(error => {
|
||||
console.error(error)
|
||||
this.$message.error('There was an error loading these settings.')
|
||||
this.$message.error(this.$t('message.error.loading.setting'))
|
||||
}).finally(() => {
|
||||
this.tabLoading = false
|
||||
if (!callback) return
|
||||
@ -140,13 +140,14 @@ export default {
|
||||
name: item.name,
|
||||
value: this.editableValue
|
||||
}).then(() => {
|
||||
this.$message.success('Setting ' + item.name + ' updated to ' + this.editableValue)
|
||||
const message = `${this.$t('label.setting')} ${item.name} ${this.$t('label.update.to')} ${this.editableValue}`
|
||||
this.$message.success(message)
|
||||
}).catch(error => {
|
||||
console.error(error)
|
||||
this.$message.error('There was an error saving this setting.')
|
||||
this.$message.error(this.$t('message.error.save.setting'))
|
||||
this.$notification.error({
|
||||
message: this.$t('label.error'),
|
||||
description: 'There was an error saving this setting. Please try again later.'
|
||||
description: this.$t('message.error.try.save.setting')
|
||||
})
|
||||
}).finally(() => {
|
||||
this.tabLoading = false
|
||||
|
||||
@ -26,7 +26,13 @@
|
||||
{{ $t(item.meta.title) }}
|
||||
</router-link>
|
||||
<span v-else-if="$route.params.id">
|
||||
<label v-if="'name' in resource">
|
||||
<span v-if="['USER.LOGIN', 'USER.LOGOUT', 'ROUTER.HEALTH.CHECKS', 'FIREWALL.CLOSE', 'ALERT.SERVICE.DOMAINROUTER'].includes(resource.name)">{{ $t(resource.name.toLowerCase()) }}</span>
|
||||
<span v-else>{{ resource.name }}</span>
|
||||
</label>
|
||||
<label v-else>
|
||||
{{ resource.name || resource.displayname || resource.displaytext || resource.hostname || resource.username || resource.ipaddress || $route.params.id }}
|
||||
</label>
|
||||
</span>
|
||||
<span v-else>
|
||||
{{ $t(item.meta.title) }}
|
||||
|
||||
@ -143,7 +143,6 @@ export default {
|
||||
icon: 'sync',
|
||||
label: 'label.reinstall.vm',
|
||||
message: 'message.reinstall.vm',
|
||||
docHelp: 'adminguide/virtual_machines.html#virtual-machine-snapshots',
|
||||
dataView: true,
|
||||
args: ['virtualmachineid', 'templateid'],
|
||||
show: (record) => { return ['Running', 'Stopped'].includes(record.state) },
|
||||
|
||||
@ -28,6 +28,7 @@ export default {
|
||||
name: 'template',
|
||||
title: 'label.templates',
|
||||
icon: 'save',
|
||||
docHelp: 'adminguide/templates.html',
|
||||
permission: ['listTemplates'],
|
||||
params: { templatefilter: 'self', showunique: 'true' },
|
||||
resourceType: 'Template',
|
||||
@ -273,6 +274,7 @@ export default {
|
||||
name: 'kubernetesiso',
|
||||
title: 'label.kubernetes.isos',
|
||||
icon: kubernetes,
|
||||
docHelp: 'plugins/cloudstack-kubernetes-service.html#kubernetes-supported-versions',
|
||||
permission: ['listKubernetesSupportedVersions'],
|
||||
columns: ['name', 'state', 'semanticversion', 'isostate', 'mincpunumber', 'minmemory', 'zonename'],
|
||||
details: ['name', 'semanticversion', 'zoneid', 'zonename', 'isoid', 'isoname', 'isostate', 'mincpunumber', 'minmemory', 'supportsha', 'state'],
|
||||
|
||||
@ -50,6 +50,7 @@ export default {
|
||||
{
|
||||
api: 'createStoragePool',
|
||||
icon: 'plus',
|
||||
docHelp: 'installguide/configuration.html#add-primary-storage',
|
||||
label: 'label.add.primary.storage',
|
||||
listView: true,
|
||||
popup: true,
|
||||
|
||||
@ -34,6 +34,7 @@ export default {
|
||||
{
|
||||
api: 'addImageStore',
|
||||
icon: 'plus',
|
||||
docHelp: 'installguide/configuration.html#add-secondary-storage',
|
||||
label: 'label.add.secondary.storage',
|
||||
listView: true,
|
||||
popup: true,
|
||||
|
||||
@ -250,6 +250,7 @@ export default {
|
||||
name: 'vpcoffering',
|
||||
title: 'label.vpc.offerings',
|
||||
icon: 'deployment-unit',
|
||||
docHelp: 'plugins/nuage-plugin.html?#vpc-offerings',
|
||||
permission: ['listVPCOfferings', 'listInfrastructure'],
|
||||
params: { isrecursive: 'true' },
|
||||
resourceType: 'VpcOffering',
|
||||
@ -263,6 +264,7 @@ export default {
|
||||
actions: [{
|
||||
api: 'createVPCOffering',
|
||||
icon: 'plus',
|
||||
docHelp: 'plugins/nuage-plugin.html?#optional-create-and-enable-vpc-offering',
|
||||
label: 'label.add.vpc.offering',
|
||||
listView: true,
|
||||
popup: true,
|
||||
|
||||
@ -48,6 +48,7 @@ export default {
|
||||
{
|
||||
api: 'quotaCredits',
|
||||
icon: 'plus',
|
||||
docHelp: 'plugins/quota.html#quota-credits',
|
||||
label: 'label.quota.add.credits',
|
||||
dataView: true,
|
||||
args: ['value', 'min_balance', 'quota_enforce'],
|
||||
|
||||
@ -58,7 +58,7 @@ export default {
|
||||
api: 'updateProjectInvitation',
|
||||
icon: 'key',
|
||||
label: 'label.enter.token',
|
||||
docHelp: 'adminguide/projects.html#setting-up-invitations',
|
||||
docHelp: 'adminguide/projects.html#accepting-a-membership-invitation',
|
||||
listView: true,
|
||||
popup: true,
|
||||
component: () => import('@/views/project/InvitationTokenTemplate.vue')
|
||||
@ -67,7 +67,7 @@ export default {
|
||||
api: 'listProjectInvitations',
|
||||
icon: 'team',
|
||||
label: 'label.project.invitation',
|
||||
docHelp: 'adminguide/projects.html#setting-up-invitations',
|
||||
docHelp: 'adminguide/projects.html#accepting-a-membership-invitation',
|
||||
listView: true,
|
||||
popup: true,
|
||||
showBadge: true,
|
||||
@ -102,7 +102,7 @@ export default {
|
||||
icon: 'pause-circle',
|
||||
label: 'label.suspend.project',
|
||||
message: 'message.suspend.project',
|
||||
docHelp: 'adminguide/projects.html#suspending-or-deleting-a-project',
|
||||
docHelp: 'adminguide/projects.html#sending-project-membership-invitations',
|
||||
dataView: true,
|
||||
show: (record, store) => {
|
||||
return (record.account === store.userInfo.account || ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype)) && record.state !== 'Suspended'
|
||||
|
||||
@ -26,6 +26,7 @@ export default {
|
||||
name: 'volume',
|
||||
title: 'label.volumes',
|
||||
icon: 'hdd',
|
||||
docHelp: 'adminguide/storage.html#working-with-volumes',
|
||||
permission: ['listVolumesMetrics'],
|
||||
resourceType: 'Volume',
|
||||
columns: () => {
|
||||
@ -66,6 +67,7 @@ export default {
|
||||
{
|
||||
api: 'createVolume',
|
||||
icon: 'plus',
|
||||
docHelp: 'adminguide/storage.html#creating-a-new-volume',
|
||||
label: 'label.action.create.volume',
|
||||
listView: true,
|
||||
popup: true,
|
||||
@ -74,6 +76,7 @@ export default {
|
||||
{
|
||||
api: 'createVolume',
|
||||
icon: 'cloud-upload',
|
||||
docHelp: 'adminguide/storage.html#uploading-an-existing-volume-to-a-virtual-machine',
|
||||
label: 'label.upload.volume.from.local',
|
||||
listView: true,
|
||||
popup: true,
|
||||
@ -82,6 +85,7 @@ export default {
|
||||
{
|
||||
api: 'uploadVolume',
|
||||
icon: 'link',
|
||||
docHelp: 'adminguide/storage.html#uploading-an-existing-volume-to-a-virtual-machine',
|
||||
label: 'label.upload.volume.from.url',
|
||||
listView: true,
|
||||
args: ['url', 'name', 'zoneid', 'format', 'diskofferingid', 'checksum'],
|
||||
@ -111,6 +115,7 @@ export default {
|
||||
{
|
||||
api: 'createSnapshot',
|
||||
icon: 'camera',
|
||||
docHelp: 'adminguide/storage.html#working-with-volume-snapshots',
|
||||
label: 'label.action.take.snapshot',
|
||||
dataView: true,
|
||||
show: (record) => { return record.state === 'Ready' },
|
||||
@ -120,6 +125,7 @@ export default {
|
||||
{
|
||||
api: 'createSnapshotPolicy',
|
||||
icon: 'clock-circle',
|
||||
docHelp: 'adminguide/storage.html#working-with-volume-snapshots',
|
||||
label: 'label.action.recurring.snapshot',
|
||||
dataView: true,
|
||||
show: (record) => { return record.state === 'Ready' },
|
||||
@ -137,6 +143,7 @@ export default {
|
||||
{
|
||||
api: 'resizeVolume',
|
||||
icon: 'fullscreen',
|
||||
docHelp: 'adminguide/storage.html#resizing-volumes',
|
||||
label: 'label.action.resize.volume',
|
||||
dataView: true,
|
||||
popup: true,
|
||||
@ -146,6 +153,7 @@ export default {
|
||||
{
|
||||
api: 'migrateVolume',
|
||||
icon: 'drag',
|
||||
docHelp: 'adminguide/storage.html#id2',
|
||||
label: 'label.migrate.volume',
|
||||
args: ['volumeid', 'storageid', 'livemigrate'],
|
||||
dataView: true,
|
||||
@ -225,6 +233,7 @@ export default {
|
||||
name: 'snapshot',
|
||||
title: 'label.snapshots',
|
||||
icon: 'build',
|
||||
docHelp: 'adminguide/storage.html#working-with-volume-snapshots',
|
||||
permission: ['listSnapshots'],
|
||||
resourceType: 'Snapshot',
|
||||
columns: () => {
|
||||
@ -284,6 +293,7 @@ export default {
|
||||
name: 'vmsnapshot',
|
||||
title: 'label.vm.snapshots',
|
||||
icon: 'camera',
|
||||
docHelp: 'adminguide/storage.html#working-with-volume-snapshots',
|
||||
permission: ['listVMSnapshot'],
|
||||
resourceType: 'VMSnapshot',
|
||||
columns: () => {
|
||||
@ -336,6 +346,7 @@ export default {
|
||||
{
|
||||
api: 'restoreBackup',
|
||||
icon: 'sync',
|
||||
docHelp: 'adminguide/virtual_machines.html#restoring-vm-backups',
|
||||
label: 'label.backup.restore',
|
||||
message: 'message.backup.restore',
|
||||
dataView: true
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -48,7 +48,7 @@ router.beforeEach((to, from, next) => {
|
||||
if (Object.keys(store.getters.apis).length === 0) {
|
||||
const cachedApis = Vue.ls.get(APIS, {})
|
||||
if (Object.keys(cachedApis).length > 0) {
|
||||
message.loading('Loading...', 1.5)
|
||||
message.loading(`${i18n.t('label.loading')}...`, 1.5)
|
||||
}
|
||||
store
|
||||
.dispatch('GetInfo')
|
||||
@ -66,7 +66,7 @@ router.beforeEach((to, from, next) => {
|
||||
.catch(() => {
|
||||
notification.error({
|
||||
message: 'Error',
|
||||
description: 'Exception caught while discoverying features'
|
||||
description: i18n.t('message.error.discovering.feature')
|
||||
})
|
||||
store.dispatch('Logout').then(() => {
|
||||
next({ path: '/user/login', query: { redirect: to.fullPath } })
|
||||
|
||||
@ -22,6 +22,7 @@ import message from 'ant-design-vue/es/message'
|
||||
import router from '@/router'
|
||||
import store from '@/store'
|
||||
import { login, logout, api } from '@/api'
|
||||
import i18n from '@/locales'
|
||||
import { ACCESS_TOKEN, CURRENT_PROJECT, DEFAULT_THEME, APIS, ASYNC_JOB_IDS } from '@/store/mutation-types'
|
||||
|
||||
const user = {
|
||||
@ -124,7 +125,7 @@ const user = {
|
||||
commit('SET_APIS', cachedApis)
|
||||
resolve(cachedApis)
|
||||
} else {
|
||||
const hide = message.loading('Discovering features, please wait...', 0)
|
||||
const hide = message.loading(i18n.t('message.discovering.feature'), 0)
|
||||
api('listApis').then(response => {
|
||||
const apis = {}
|
||||
const apiList = response.listapisresponse.api
|
||||
@ -142,7 +143,7 @@ const user = {
|
||||
router.addRoutes(store.getters.addRouters)
|
||||
})
|
||||
hide()
|
||||
message.success('Discovered all available features!')
|
||||
message.success(i18n.t('message.sussess.discovering.feature'))
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
|
||||
@ -38,12 +38,12 @@ export const pollJobPlugin = {
|
||||
const {
|
||||
jobId,
|
||||
name = '',
|
||||
successMessage = 'Success',
|
||||
successMessage = i18n.t('label.success'),
|
||||
successMethod = () => {},
|
||||
errorMessage = 'Error',
|
||||
errorMessage = i18n.t('label.error'),
|
||||
errorMethod = () => {},
|
||||
loadingMessage = 'Loading...',
|
||||
catchMessage = 'Error caught',
|
||||
loadingMessage = `${i18n.t('label.loading')}...`,
|
||||
catchMessage = i18n.t('label.error.caught'),
|
||||
catchMethod = () => {},
|
||||
action = null
|
||||
} = options
|
||||
@ -98,7 +98,7 @@ export const pollJobPlugin = {
|
||||
}).catch(e => {
|
||||
console.error(`${catchMessage} - ${e}`)
|
||||
notification.error({
|
||||
message: this.$t('label.error'),
|
||||
message: i18n.t('label.error'),
|
||||
description: catchMessage,
|
||||
duration: 0
|
||||
})
|
||||
@ -113,11 +113,11 @@ export const notifierPlugin = {
|
||||
install (Vue) {
|
||||
Vue.prototype.$notifyError = function (error) {
|
||||
console.log(error)
|
||||
var msg = 'Request Failed'
|
||||
var msg = i18n.t('message.request.failed')
|
||||
var desc = ''
|
||||
if (error && error.response) {
|
||||
if (error.response.status) {
|
||||
msg = `Request Failed (${error.response.status})`
|
||||
msg = `${i18n.t('message.request.failed')} (${error.response.status})`
|
||||
}
|
||||
if (error.message) {
|
||||
desc = error.message
|
||||
|
||||
@ -22,6 +22,7 @@ import store from '@/store'
|
||||
import { VueAxios } from './axios'
|
||||
import notification from 'ant-design-vue/es/notification'
|
||||
import { CURRENT_PROJECT } from '@/store/mutation-types'
|
||||
import i18n from '@/locales'
|
||||
|
||||
const service = axios.create({
|
||||
timeout: 600000
|
||||
@ -33,15 +34,15 @@ const err = (error) => {
|
||||
console.log(response)
|
||||
if (response.status === 403) {
|
||||
const data = response.data
|
||||
notification.error({ message: 'Forbidden', description: data.message })
|
||||
notification.error({ message: i18n.t('label.forbidden'), description: data.message })
|
||||
}
|
||||
if (response.status === 401) {
|
||||
if (response.config && response.config.params && ['listIdps'].includes(response.config.params.command)) {
|
||||
return
|
||||
}
|
||||
notification.error({
|
||||
message: 'Unauthorized',
|
||||
description: 'Session expired, authorization verification failed',
|
||||
message: i18n.t('label.unauthorized'),
|
||||
description: i18n.t('message.authorization.failed'),
|
||||
key: 'http-401'
|
||||
})
|
||||
store.dispatch('Logout').then(() => {
|
||||
@ -51,14 +52,14 @@ const err = (error) => {
|
||||
})
|
||||
}
|
||||
if (response.status === 404) {
|
||||
notification.error({ message: 'Not Found', description: 'Resource not found' })
|
||||
notification.error({ message: i18n.t('label.not.found'), description: i18n.t('message.resource.not.found') })
|
||||
router.push({ path: '/exception/404' })
|
||||
}
|
||||
}
|
||||
if (error.isAxiosError && !error.response) {
|
||||
notification.warn({
|
||||
message: error.message || 'Network Error',
|
||||
description: 'Unable to reach the management server or a browser extension may be blocking the network request.',
|
||||
message: error.message || i18n.t('message.network.error'),
|
||||
description: i18n.t('message.network.error.description'),
|
||||
key: 'network-error'
|
||||
})
|
||||
}
|
||||
|
||||
@ -439,7 +439,7 @@ export default {
|
||||
const project = json.listprojectsresponse.project[0]
|
||||
this.$store.dispatch('SetProject', project)
|
||||
this.$store.dispatch('ToggleTheme', project.id === undefined ? 'light' : 'dark')
|
||||
this.$message.success(`Switched to "${project.name}"`)
|
||||
this.$message.success(`${this.$t('message.switch.to')} "${project.name}"`)
|
||||
const query = Object.assign({}, this.$route.query)
|
||||
delete query.projectid
|
||||
this.$router.replace({ query })
|
||||
@ -767,7 +767,7 @@ export default {
|
||||
},
|
||||
errorMethod: () => this.fetchData(),
|
||||
loadingMessage: `${this.$t(action.label)} - ${resourceName}`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
action
|
||||
})
|
||||
},
|
||||
|
||||
@ -42,7 +42,7 @@
|
||||
:placeholder="$t('label.username')"
|
||||
v-decorator="[
|
||||
'username',
|
||||
{rules: [{ required: true, message: 'Enter your username' }, { validator: handleUsernameOrEmail }], validateTrigger: 'change'}
|
||||
{rules: [{ required: true, message: $t('message.error.username') }, { validator: handleUsernameOrEmail }], validateTrigger: 'change'}
|
||||
]"
|
||||
>
|
||||
<a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/>
|
||||
@ -57,7 +57,7 @@
|
||||
:placeholder="$t('label.password')"
|
||||
v-decorator="[
|
||||
'password',
|
||||
{rules: [{ required: true, message: 'Enter your password' }], validateTrigger: 'blur'}
|
||||
{rules: [{ required: true, message: $t('message.error.password') }], validateTrigger: 'blur'}
|
||||
]"
|
||||
>
|
||||
<a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/>
|
||||
@ -71,7 +71,7 @@
|
||||
:placeholder="$t('label.domain')"
|
||||
v-decorator="[
|
||||
'domain',
|
||||
{rules: [{ required: false, message: 'Enter your domain, leave empty for ROOT domain' }], validateTrigger: 'change'}
|
||||
{rules: [{ required: false, message: $t('message.error.domain') }], validateTrigger: 'change'}
|
||||
]"
|
||||
>
|
||||
<a-icon slot="prefix" type="block" :style="{ color: 'rgba(0,0,0,.25)' }"/>
|
||||
@ -212,9 +212,10 @@ export default {
|
||||
},
|
||||
requestFailed (err) {
|
||||
if (err && err.response && err.response.data && err.response.data.loginresponse) {
|
||||
this.$message.error('Error ' + err.response.data.loginresponse.errorcode + ': ' + err.response.data.loginresponse.errortext)
|
||||
const error = err.response.data.loginresponse.errorcode + ': ' + err.response.data.loginresponse.errortext
|
||||
this.$message.error(`${this.$t('label.error')} ${error}`)
|
||||
} else {
|
||||
this.$message.error('Login Failed')
|
||||
this.$message.error(this.$t('message.login.failed'))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,7 +148,7 @@ export default {
|
||||
affinitygroupids: this.selectedRowKeys.join(',')
|
||||
}).then(response => {
|
||||
this.$notification.success({
|
||||
message: 'Successfully changed affinity groups'
|
||||
message: this.$t('message.success.change.affinity.group')
|
||||
})
|
||||
this.$parent.$parent.close()
|
||||
this.parentFetchData()
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
</span>
|
||||
<a-input
|
||||
v-decorator="['name', {
|
||||
rules: [{ required: true, message: 'Please enter Kubernetes cluster name' }]
|
||||
rules: [{ required: true, message: $t('message.error.kubecluster.name') }]
|
||||
}]"
|
||||
:placeholder="apiParams.name.description"/>
|
||||
</a-form-item>
|
||||
@ -44,7 +44,7 @@
|
||||
</span>
|
||||
<a-input
|
||||
v-decorator="['description', {
|
||||
rules: [{ required: true, message: 'Please enter Kubernetes cluster description' }]
|
||||
rules: [{ required: true, message: $t('message.error.cluster.description') }]
|
||||
}]"
|
||||
:placeholder="apiParams.description.description"/>
|
||||
</a-form-item>
|
||||
@ -58,7 +58,7 @@
|
||||
<a-select
|
||||
id="zone-selection"
|
||||
v-decorator="['zoneid', {
|
||||
rules: [{ required: true, message: 'Please select zone for Kubernetes cluster' }]
|
||||
rules: [{ required: true, message: $t('message.error.zone.for.cluster') }]
|
||||
}]"
|
||||
showSearch
|
||||
optionFilterProp="children"
|
||||
@ -83,7 +83,7 @@
|
||||
<a-select
|
||||
id="version-selection"
|
||||
v-decorator="['kubernetesversionid', {
|
||||
rules: [{ required: true, message: 'Please select Kubernetes version for Kubernetes cluster' }]
|
||||
rules: [{ required: true, message: $t('message.error.version.for.cluster') }]
|
||||
}]"
|
||||
showSearch
|
||||
optionFilterProp="children"
|
||||
@ -108,7 +108,7 @@
|
||||
<a-select
|
||||
id="offering-selection"
|
||||
v-decorator="['serviceofferingid', {
|
||||
rules: [{ required: true, message: 'Please select service offering for Kubernetes cluster' }]
|
||||
rules: [{ required: true, message: $t('message.error.serviceoffering.for.cluster') }]
|
||||
}]"
|
||||
showSearch
|
||||
optionFilterProp="children"
|
||||
@ -134,7 +134,7 @@
|
||||
rules: [{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value && (isNaN(value) || value <= 0)) {
|
||||
callback('Please enter a valid number')
|
||||
callback(this.$t('message.validate.number'))
|
||||
}
|
||||
callback()
|
||||
}
|
||||
@ -177,11 +177,11 @@
|
||||
<a-input
|
||||
v-decorator="['masternodes', {
|
||||
initialValue: '1',
|
||||
rules: [{ required: true, message: 'Please enter value' },
|
||||
rules: [{ required: true, message: $t('message.error.input.value') },
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value && (isNaN(value) || value <= 0)) {
|
||||
callback('Please enter a valid number')
|
||||
callback(this.$t('message.validate.number'))
|
||||
}
|
||||
callback()
|
||||
}
|
||||
@ -211,11 +211,11 @@
|
||||
<a-input
|
||||
v-decorator="['size', {
|
||||
initialValue: '1',
|
||||
rules: [{ required: true, message: 'Please enter size for Kubernetes cluster' },
|
||||
rules: [{ required: true, message: $t('message.error.size.for.cluster') },
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value && (isNaN(value) || value <= 0)) {
|
||||
callback('Please enter a valid number')
|
||||
callback(this.$t('message.validate.number'))
|
||||
}
|
||||
callback()
|
||||
}
|
||||
@ -478,9 +478,9 @@ export default {
|
||||
})
|
||||
this.$pollJob({
|
||||
jobId,
|
||||
loadingMessage: `Create Kubernetes cluster ${values.name} in progress`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
successMessage: `Successfully created Kubernetes cluster ${values.name}`,
|
||||
loadingMessage: `${this.$t('label.kubernetes.cluster.create')} ${values.name} ${this.$t('label.in.progress')}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
successMessage: this.$t('message.success.create.kubernetes.cluter') + ' ' + values.name,
|
||||
successMethod: result => {
|
||||
this.$emit('refresh-data')
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
<a-form-item :label="$t('label.name')">
|
||||
<a-input
|
||||
v-decorator="['name', {
|
||||
rules: [{ required: true, message: 'Please enter name' }]
|
||||
rules: [{ required: true, message: $t('message.error.name') }]
|
||||
}]"
|
||||
:placeholder="apiParams.name.description"/>
|
||||
</a-form-item>
|
||||
@ -67,8 +67,8 @@
|
||||
<div v-if="isSubmitted">
|
||||
<p v-html="$t('message.desc.created.ssh.key.pair')"></p>
|
||||
<div :span="24" class="action-button">
|
||||
<a-button @click="notifyCopied" v-clipboard:copy="hiddenElement.innerHTML" type="primary">{{ 'Copy to clipboard' }}</a-button>
|
||||
<a-button @click="downloadKey" type="primary">{{ this.$t('Download') }}</a-button>
|
||||
<a-button @click="notifyCopied" v-clipboard:copy="hiddenElement.innerHTML" type="primary">{{ $t('label.copy.clipboard') }}</a-button>
|
||||
<a-button @click="downloadKey" type="primary">{{ this.$t('label.download') }}</a-button>
|
||||
<a-button @click="closeAction">{{ this.$t('label.close') }}</a-button>
|
||||
</div>
|
||||
</div>
|
||||
@ -174,7 +174,7 @@ export default {
|
||||
if (this.isValidValueForKey(values, 'publickey') && values.publickey.length > 0) {
|
||||
params.publickey = values.publickey
|
||||
api('registerSSHKeyPair', params).then(json => {
|
||||
this.$message.success('Successfully registered SSH key pair: ' + values.name)
|
||||
this.$message.success(this.$t('message.success.register.keypair') + ' ' + values.name)
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
}).finally(() => {
|
||||
@ -184,7 +184,7 @@ export default {
|
||||
})
|
||||
} else {
|
||||
api('createSSHKeyPair', params).then(json => {
|
||||
this.$message.success('Successfully created SSH key pair: ' + values.name)
|
||||
this.$message.success(this.$t('message.success.create.keypair') + ' ' + values.name)
|
||||
if (json.createsshkeypairresponse && json.createsshkeypairresponse.keypair && json.createsshkeypairresponse.keypair.privatekey) {
|
||||
this.isSubmitted = true
|
||||
const key = json.createsshkeypairresponse.keypair.privatekey
|
||||
@ -208,7 +208,7 @@ export default {
|
||||
},
|
||||
notifyCopied () {
|
||||
this.$notification.info({
|
||||
message: this.$t('Copied Successfully to cilpboard')
|
||||
message: this.$t('message.success.copy.clipboard')
|
||||
})
|
||||
},
|
||||
closeAction () {
|
||||
|
||||
@ -1031,14 +1031,14 @@ export default {
|
||||
|
||||
if (!values.templateid && !values.isoid) {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: this.$t('message.template.iso')
|
||||
})
|
||||
return
|
||||
} else if (values.isoid && (!values.diskofferingid || values.diskofferingid === '0')) {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
description: this.$t('Please select a Disk Offering to continue')
|
||||
message: this.$t('message.request.failed'),
|
||||
description: this.$t('message.step.3.continue')
|
||||
})
|
||||
return
|
||||
}
|
||||
@ -1148,14 +1148,14 @@ export default {
|
||||
const name = vm.displayname || vm.name || vm.id
|
||||
if (vm.password) {
|
||||
this.$notification.success({
|
||||
message: password + ' for ' + name,
|
||||
message: password + ` ${this.$t('label.for')} ` + name,
|
||||
description: vm.password,
|
||||
duration: 0
|
||||
})
|
||||
}
|
||||
},
|
||||
loadingMessage: `${title} in progress`,
|
||||
catchMessage: 'Error encountered while fetching async job result'
|
||||
loadingMessage: `${title} ${this.$t('label.in.progress')}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result')
|
||||
})
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: title,
|
||||
|
||||
@ -132,9 +132,9 @@ export default {
|
||||
})
|
||||
this.$pollJob({
|
||||
jobId,
|
||||
loadingMessage: `Deleting VM ${this.resource.name}`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
successMessage: `Successfully Deleted VM ${this.resource.name}`
|
||||
loadingMessage: `${this.$t('message.deleting.vm')} ${this.resource.name}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
successMessage: `${this.$t('message.success.delete.vm')} ${this.resource.name}`
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
|
||||
@ -70,8 +70,8 @@
|
||||
<a-popconfirm
|
||||
:title="$t('label.set.default.nic')"
|
||||
@confirm="setAsDefault(record.nic)"
|
||||
okText="Yes"
|
||||
cancelText="No"
|
||||
:okText="$t('label.yes')"
|
||||
:cancelText="$t('label.no')"
|
||||
v-if="!record.nic.isdefault"
|
||||
>
|
||||
<a-button
|
||||
@ -81,7 +81,7 @@
|
||||
</a-popconfirm>
|
||||
<a-tooltip placement="bottom" v-if="record.nic.type !== 'L2'">
|
||||
<template slot="title">
|
||||
{{ "Change IP Address" }}
|
||||
{{ $t('label.change.ip.addess') }}
|
||||
</template>
|
||||
<a-button
|
||||
icon="swap"
|
||||
@ -91,7 +91,7 @@
|
||||
</a-tooltip>
|
||||
<a-tooltip placement="bottom" v-if="record.nic.type !== 'L2'">
|
||||
<template slot="title">
|
||||
{{ "Manage Secondary IP Addresses" }}
|
||||
{{ $t('label.edit.secondary.ips') }}
|
||||
</template>
|
||||
<a-button
|
||||
icon="environment"
|
||||
@ -102,8 +102,8 @@
|
||||
<a-popconfirm
|
||||
:title="$t('message.network.removenic')"
|
||||
@confirm="removeNIC(record.nic)"
|
||||
okText="Yes"
|
||||
cancelText="No"
|
||||
:okText="$t('label.yes')"
|
||||
:cancelText="$t('label.no')"
|
||||
v-if="!record.nic.isdefault"
|
||||
>
|
||||
<a-button
|
||||
@ -183,20 +183,20 @@
|
||||
{{ $t('message.network.secondaryip') }}
|
||||
</p>
|
||||
<a-divider />
|
||||
<a-input placeholder="Enter new secondary IP address" v-model="newSecondaryIp"></a-input>
|
||||
<a-input :placeholder="$t('label.new.secondaryip.description')" v-model="newSecondaryIp"></a-input>
|
||||
<div style="margin-top: 10px; display: flex; justify-content:flex-end;">
|
||||
<a-button @click="submitSecondaryIP" type="primary" style="margin-right: 10px;">Add Secondary IP</a-button>
|
||||
<a-button @click="closeModals">Close</a-button>
|
||||
<a-button @click="submitSecondaryIP" type="primary" style="margin-right: 10px;">{{ $t('label.add.secondary.ip') }}</a-button>
|
||||
<a-button @click="closeModals">{{ $t('label.close') }}</a-button>
|
||||
</div>
|
||||
|
||||
<a-divider />
|
||||
<a-list itemLayout="vertical">
|
||||
<a-list-item v-for="(ip, index) in secondaryIPs" :key="index">
|
||||
<a-popconfirm
|
||||
title="Release IP?"
|
||||
:title="`${$t('label.action.release.ip')}?`"
|
||||
@confirm="removeSecondaryIP(ip.id)"
|
||||
okText="Yes"
|
||||
cancelText="No"
|
||||
:okText="$t('label.yes')"
|
||||
:cancelText="$t('label.no')"
|
||||
>
|
||||
<a-button
|
||||
type="danger"
|
||||
@ -359,20 +359,20 @@ export default {
|
||||
api('addNicToVirtualMachine', params).then(response => {
|
||||
this.$pollJob({
|
||||
jobId: response.addnictovirtualmachineresponse.jobid,
|
||||
successMessage: `Successfully added network`,
|
||||
successMessage: this.$t('message.success.add.network'),
|
||||
successMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.closeModals()
|
||||
this.parentFetchData()
|
||||
},
|
||||
errorMessage: 'Adding network failed',
|
||||
errorMessage: this.$t('message.add.network.failed'),
|
||||
errorMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.closeModals()
|
||||
this.parentFetchData()
|
||||
},
|
||||
loadingMessage: `Adding network...`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.add.network.processing'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.closeModals()
|
||||
@ -392,18 +392,18 @@ export default {
|
||||
}).then(response => {
|
||||
this.$pollJob({
|
||||
jobId: response.updatedefaultnicforvirtualmachineresponse.jobid,
|
||||
successMessage: `Successfully set ${item.networkname} to default. Please manually update the default NIC on the VM now.`,
|
||||
successMessage: `${this.$t('label.success.set')} ${item.networkname} ${this.$t('label.to.default')}. ${this.$t('message.set.default.nic.manual')}.`,
|
||||
successMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.parentFetchData()
|
||||
},
|
||||
errorMessage: `Error setting ${item.networkname} to default`,
|
||||
errorMessage: `${this.$t('label.error.setting')} ${item.networkname} ${this.$t('label.to.default')}`,
|
||||
errorMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.parentFetchData()
|
||||
},
|
||||
loadingMessage: `Setting ${item.networkname} to default...`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: `${this.$t('label.setting')} ${item.networkname} ${this.$t('label.to.default')}...`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.parentFetchData()
|
||||
@ -423,20 +423,20 @@ export default {
|
||||
}).then(response => {
|
||||
this.$pollJob({
|
||||
jobId: response.updatevmnicipresponse.jobid,
|
||||
successMessage: `Successfully updated IP Address`,
|
||||
successMessage: this.$t('message.success.update.ipaddress'),
|
||||
successMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.closeModals()
|
||||
this.parentFetchData()
|
||||
},
|
||||
errorMessage: `Error`,
|
||||
errorMessage: this.$t('label.error'),
|
||||
errorMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.closeModals()
|
||||
this.parentFetchData()
|
||||
},
|
||||
loadingMessage: `Updating IP Address...`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.update.ipaddress.processing'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.closeModals()
|
||||
@ -458,18 +458,18 @@ export default {
|
||||
}).then(response => {
|
||||
this.$pollJob({
|
||||
jobId: response.removenicfromvirtualmachineresponse.jobid,
|
||||
successMessage: `Successfully removed`,
|
||||
successMessage: this.$t('message.success.remove.nic'),
|
||||
successMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.parentFetchData()
|
||||
},
|
||||
errorMessage: `There was an error`,
|
||||
errorMessage: this.$t('message.error.remove.nic'),
|
||||
errorMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.parentFetchData()
|
||||
},
|
||||
loadingMessage: `Removing NIC...`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.remove.nic.processing'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.parentFetchData()
|
||||
@ -493,20 +493,20 @@ export default {
|
||||
api('addIpToNic', params).then(response => {
|
||||
this.$pollJob({
|
||||
jobId: response.addiptovmnicresponse.jobid,
|
||||
successMessage: `Successfully added secondary IP Address`,
|
||||
successMessage: this.$t('message.success.add.secondary.ipaddress'),
|
||||
successMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.fetchSecondaryIPs(this.selectedNicId)
|
||||
this.parentFetchData()
|
||||
},
|
||||
errorMessage: `There was an error adding the secondary IP Address`,
|
||||
errorMessage: this.$t('message.error.add.secondary.ipaddress'),
|
||||
errorMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.fetchSecondaryIPs(this.selectedNicId)
|
||||
this.parentFetchData()
|
||||
},
|
||||
loadingMessage: `Add Secondary IP address...`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.add.secondary.ipaddress.processing'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.fetchSecondaryIPs(this.selectedNicId)
|
||||
@ -524,20 +524,20 @@ export default {
|
||||
api('removeIpFromNic', { id }).then(response => {
|
||||
this.$pollJob({
|
||||
jobId: response.removeipfromnicresponse.jobid,
|
||||
successMessage: `Successfully removed secondary IP Address`,
|
||||
successMessage: this.$t('message.success.remove.secondary.ipaddress'),
|
||||
successMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.fetchSecondaryIPs(this.selectedNicId)
|
||||
this.parentFetchData()
|
||||
},
|
||||
errorMessage: `There was an error removing the secondary IP Address`,
|
||||
errorMessage: this.$t('message.error.remove.secondary.ipaddress'),
|
||||
errorMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.fetchSecondaryIPs(this.selectedNicId)
|
||||
this.parentFetchData()
|
||||
},
|
||||
loadingMessage: `Removing Secondary IP address...`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.remove.secondary.ipaddress.processing'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.loadingNic = false
|
||||
this.fetchSecondaryIPs(this.selectedNicId)
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
<DetailsTab :resource="resource" :loading="loading" />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane :tab="$t('label.access')" key="access">
|
||||
<a-card title="Kubernetes Cluster Config" :loading="this.versionLoading">
|
||||
<a-card :title="$t('label.kubeconfig.cluster')" :loading="this.versionLoading">
|
||||
<div v-if="this.clusterConfig !== ''">
|
||||
<a-textarea :value="this.clusterConfig" :rows="5" readonly />
|
||||
<div :span="24" class="action-button">
|
||||
@ -34,62 +34,61 @@
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<p>Kubernetes cluster kubeconfig not available currently</p>
|
||||
<p>{{ $t('message.kubeconfig.cluster.not.available') }}</p>
|
||||
</div>
|
||||
</a-card>
|
||||
<a-card title="Using CLI" :loading="this.versionLoading">
|
||||
<a-card :title="$t('label.using.cli')" :loading="this.versionLoading">
|
||||
<a-timeline>
|
||||
<a-timeline-item>
|
||||
<p>
|
||||
Download kubeconfig for the cluster<br><br>
|
||||
The <code>kubectl</code> command-line tool uses kubeconfig files to find the information it needs to choose a cluster and communicate with the API server of a cluster.
|
||||
{{ $t('label.download.kubeconfig.cluster') }}
|
||||
</p>
|
||||
</a-timeline-item>
|
||||
<a-timeline-item>
|
||||
<p>
|
||||
Download <code>kubectl</code> tool for cluster's Kubernetes version<br><br>
|
||||
Linux: <a :href="this.kubectlLinuxLink">{{ this.kubectlLinuxLink }}</a><br>
|
||||
MacOS: <a :href="this.kubectlMacLink">{{ this.kubectlMacLink }}</a><br>
|
||||
Windows: <a :href="this.kubectlWindowsLink">{{ this.kubectlWindowsLink }}</a>
|
||||
{{ $t('label.download.kubectl') }} <br><br>
|
||||
{{ $t('label.linux') }}: <a :href="this.kubectlLinuxLink">{{ this.kubectlLinuxLink }}</a><br>
|
||||
{{ $t('label.macos') }}: <a :href="this.kubectlMacLink">{{ this.kubectlMacLink }}</a><br>
|
||||
{{ $t('label.windows') }}: <a :href="this.kubectlWindowsLink">{{ this.kubectlWindowsLink }}</a>
|
||||
</p>
|
||||
</a-timeline-item>
|
||||
<a-timeline-item>
|
||||
<p>
|
||||
Use <code>kubectl</code> and <code>kubeconfig</code> file to access cluster<br><br>
|
||||
{{ $t('label.use.kubectl.access.cluster') }}<br><br>
|
||||
<code><b>kubectl --kubeconfig /custom/path/kube.conf {COMMAND}</b></code><br><br>
|
||||
|
||||
<em>List pods</em><br>
|
||||
<em>{{ $t('label.list.pods') }}</em><br>
|
||||
<code>kubectl --kubeconfig /custom/path/kube.conf get pods --all-namespaces</code><br>
|
||||
<em>List nodes</em><br>
|
||||
<em>{{ $t('label.list.nodes') }}</em><br>
|
||||
<code>kubectl --kubeconfig /custom/path/kube.conf get nodes --all-namespaces</code><br>
|
||||
<em>List services</em><br>
|
||||
<em>{{ $t('label.list.services') }}</em><br>
|
||||
<code>kubectl --kubeconfig /custom/path/kube.conf get services --all-namespaces</code>
|
||||
</p>
|
||||
</a-timeline-item>
|
||||
</a-timeline>
|
||||
</a-card>
|
||||
<a-card title="Kubernetes Dashboard UI">
|
||||
<a-card :title="$t('label.kubernetes.dashboard')">
|
||||
<a-timeline>
|
||||
<a-timeline-item>
|
||||
<p>
|
||||
Run proxy locally<br><br>
|
||||
{{ $t('label.run.proxy.locally') }}<br><br>
|
||||
<code><b>kubectl --kubeconfig /custom/path/kube.conf proxy</b></code>
|
||||
</p>
|
||||
</a-timeline-item>
|
||||
<a-timeline-item>
|
||||
<p>
|
||||
Open URL in browser<br><br>
|
||||
{{ $t('label.open.url') }}<br><br>
|
||||
<a href="http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/"><code>http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/</code></a>
|
||||
</p>
|
||||
</a-timeline-item>
|
||||
<a-timeline-item>
|
||||
<p>
|
||||
Token for dashboard login can be retrieved using following command<br><br>
|
||||
{{ $t('label.token.for.dashboard.login') }}<br><br>
|
||||
<code><b>kubectl --kubeconfig /custom/path/kube.conf describe secret $(kubectl --kubeconfig /custom/path/kube.conf get secrets -n kubernetes-dashboard | grep kubernetes-dashboard-token | awk '{print $1}') -n kubernetes-dashboard</b></code>
|
||||
</p>
|
||||
</a-timeline-item>
|
||||
</a-timeline>
|
||||
<p>More about accessing dashboard UI, <a href="https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui">https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui</a></p>
|
||||
<p>{{ $t('label.more.access.dashboard.ui') }}, <a href="https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui">https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui</a></p>
|
||||
</a-card>
|
||||
</a-tab-pane>
|
||||
<a-tab-pane :tab="$t('label.instances')" key="instances">
|
||||
@ -247,8 +246,8 @@ export default {
|
||||
this.clusterConfig = config.configdata
|
||||
} else {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
description: 'Unable to retrieve Kubernetes cluster config'
|
||||
message: this.$t('message.request.failed'),
|
||||
description: this.$t('message.error.retrieve.kubeconfig')
|
||||
})
|
||||
}
|
||||
}).finally(() => {
|
||||
|
||||
@ -61,7 +61,7 @@
|
||||
:current="page"
|
||||
:pageSize="pageSize"
|
||||
:total="totalCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100']"
|
||||
@change="handleChangePage"
|
||||
@showSizeChange="handleChangePageSize"
|
||||
@ -142,7 +142,7 @@ export default {
|
||||
this.totalCount -= 1
|
||||
}
|
||||
}).catch(error => {
|
||||
this.$message.error('Failed to load hosts: ' + error)
|
||||
this.$message.error(`${this.$t('message.load.host.failed')}: ${error}`)
|
||||
}).finally(() => {
|
||||
this.loading = false
|
||||
})
|
||||
@ -154,23 +154,23 @@ export default {
|
||||
virtualmachineid: this.resource.id
|
||||
}).then(response => {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: `Migrating ${this.resource.name}`,
|
||||
title: `${this.$t('label.migrating')} ${this.resource.name}`,
|
||||
jobid: response.migratevirtualmachineresponse.jobid,
|
||||
description: this.resource.name,
|
||||
status: 'progress'
|
||||
})
|
||||
this.$pollJob({
|
||||
jobId: response.migratevirtualmachineresponse.jobid,
|
||||
successMessage: `Migration completed successfully for ${this.resource.name}`,
|
||||
successMessage: `${this.$t('message.success.migrating')} ${this.resource.name}`,
|
||||
successMethod: () => {
|
||||
this.$parent.$parent.close()
|
||||
},
|
||||
errorMessage: 'Migration failed',
|
||||
errorMessage: this.$t('message.migrating.failed'),
|
||||
errorMethod: () => {
|
||||
this.$parent.$parent.close()
|
||||
},
|
||||
loadingMessage: `Migration in progress for ${this.resource.name}`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: `${this.$t('message.migrating.processing')} ${this.resource.name}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.$parent.$parent.close()
|
||||
}
|
||||
@ -178,7 +178,7 @@ export default {
|
||||
this.$parent.$parent.close()
|
||||
}).catch(error => {
|
||||
console.error(error)
|
||||
this.$message.error(`Failed to migrate VM to host ${this.selectedHost.name}`)
|
||||
this.$message.error(`${this.$t('message.migrating.vm.to.host.failed')} ${this.selectedHost.name}`)
|
||||
})
|
||||
},
|
||||
handleChangePage (page, pageSize) {
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
rules: [{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value && (isNaN(value) || value <= 0)) {
|
||||
callback('Please enter a valid number')
|
||||
callback(this.$t('message.error.number'))
|
||||
}
|
||||
callback()
|
||||
}
|
||||
@ -191,9 +191,9 @@ export default {
|
||||
})
|
||||
this.$pollJob({
|
||||
jobId,
|
||||
loadingMessage: `Scale Kubernetes cluster ${this.resource.name} in progress`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
successMessage: `Successfully scaled Kubernetes cluster ${this.resource.name}`,
|
||||
loadingMessage: `${this.$t('label.kubernetes.cluster.scale')} ${this.resource.name} ${this.$t('label.in.progress')}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
successMessage: `${this.$t('message.success.scale.kubernetes')} ${this.resource.name}`,
|
||||
successMethod: result => {
|
||||
this.$emit('refresh-data')
|
||||
}
|
||||
|
||||
@ -187,16 +187,16 @@ export default {
|
||||
jobId,
|
||||
successMethod: result => {
|
||||
this.$notification.success({
|
||||
message: 'Successfully changed offering'
|
||||
message: this.$t('message.success.change.offering')
|
||||
})
|
||||
},
|
||||
loadingMessage: 'Scale in progress',
|
||||
catchMessage: 'Error encountered while fetching async job result'
|
||||
loadingMessage: this.$t('message.scale.processing'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result')
|
||||
})
|
||||
}
|
||||
} else {
|
||||
this.$notification.success({
|
||||
message: 'Successfully changed offering'
|
||||
message: this.$t('message.success.change.offering')
|
||||
})
|
||||
}
|
||||
this.$parent.$parent.close()
|
||||
|
||||
@ -163,12 +163,11 @@ export default {
|
||||
})
|
||||
this.$pollJob({
|
||||
jobId,
|
||||
loadingMessage: `Upgrade Kubernetes cluster ${this.resource.name} in progress`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
successMessage: `Successfully upgraded Kubernetes cluster ${this.resource.name}`,
|
||||
loadingMessage: `${this.$t('label.kubernetes.cluster.upgrade')} ${this.resource.name} ${this.$t('label.in.progress')}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
successMessage: `${this.$t('message.success.upgrade.kubernetes')} ${this.resource.name}`,
|
||||
successMethod: result => {
|
||||
this.$emit('refresh-data')
|
||||
console.log('hello!')
|
||||
}
|
||||
})
|
||||
}).catch(error => {
|
||||
|
||||
@ -48,10 +48,10 @@
|
||||
</div>
|
||||
<div slot="interval" slot-scope="text, record">
|
||||
<span v-if="record.intervaltype==='WEEKLY'">
|
||||
{{ $t('label.interval.weekly').replace('{number}', $t(listDayOfWeek[record.schedule.split(':')[2] - 1])) }}
|
||||
{{ `${$t('label.every')} ${$t(listDayOfWeek[record.schedule.split(':')[2] - 1])}` }}
|
||||
</span>
|
||||
<span v-else-if="record.intervaltype==='MONTHLY'">
|
||||
{{ $t('label.interval.monthly').replace('{number}', record.schedule.split(':')[2]) }}
|
||||
{{ `${$t('label.day')} ${record.schedule.split(':')[2]} ${$t('label.of.month')}` }}
|
||||
</span>
|
||||
</div>
|
||||
<div slot="timezone" slot-scope="text, record">
|
||||
@ -159,7 +159,7 @@ export default {
|
||||
if (json.deletebackupscheduleresponse.success) {
|
||||
this.$notification.success({
|
||||
message: this.$t('label.scheduled.backups'),
|
||||
description: 'Successfully deleted Configure VM backup schedule'
|
||||
description: this.$t('message.success.delete.backup.schedule')
|
||||
})
|
||||
}
|
||||
this.refreshSchedule()
|
||||
|
||||
@ -58,7 +58,7 @@
|
||||
<a-input-number
|
||||
style="width: 100%"
|
||||
v-decorator="['time', {
|
||||
rules: [{required: true, message: 'Please enter input'}]
|
||||
rules: [{required: true, message: $t('message.error.required.input')}]
|
||||
}]"
|
||||
:min="1"
|
||||
:max="59"/>
|
||||
@ -76,7 +76,7 @@
|
||||
rules: [{
|
||||
type: 'object',
|
||||
required: true,
|
||||
message: 'Please select time'
|
||||
message: $t('message.error.time')
|
||||
}]
|
||||
}]" />
|
||||
</a-form-item>
|
||||
@ -269,7 +269,7 @@ export default {
|
||||
api('createBackupSchedule', params).then(json => {
|
||||
this.$notification.success({
|
||||
message: this.$t('label.scheduled.backups'),
|
||||
description: 'Successfully Configure VM backup schedule'
|
||||
description: this.$t('message.success.config.backup.schedule')
|
||||
})
|
||||
this.refreshSchedule()
|
||||
this.resetForm()
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
:current="options.page"
|
||||
:pageSize="options.pageSize"
|
||||
:total="rowCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100', '500']"
|
||||
@change="onChangePage"
|
||||
@showSizeChange="onChangePageSize"
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
:current="options.page"
|
||||
:pageSize="options.pageSize"
|
||||
:total="rowCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100', '500']"
|
||||
@change="onChangePage"
|
||||
@showSizeChange="onChangePageSize"
|
||||
|
||||
@ -228,7 +228,7 @@ export default {
|
||||
|
||||
if (!this.checkValidRange(value, min, max)) {
|
||||
this.errors[input].status = 'error'
|
||||
this.errors[input].message = this.$t('message.error.invalid.range', { min: min, max: max })
|
||||
this.errors[input].message = `${this.$t('message.please.enter.value')} ${this.$t('label.from')} ${min} ${this.$t('label.to')} ${max})`
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
@ -52,7 +52,7 @@
|
||||
:current="options.page"
|
||||
:pageSize="options.pageSize"
|
||||
:total="rowCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100', '500']"
|
||||
@change="onChangePage"
|
||||
@showSizeChange="onChangePageSize"
|
||||
|
||||
@ -81,7 +81,7 @@ export default {
|
||||
updateDiskSize (value) {
|
||||
if (value < this.minDiskSize) {
|
||||
this.inputValue = this.minDiskSize
|
||||
this.error = 'The value must not be less than ' + this.minDiskSize + ' GB'
|
||||
this.error = `${this.$t('message.error.limit.value')} ` + this.minDiskSize + ' GB'
|
||||
return
|
||||
}
|
||||
this.error = false
|
||||
|
||||
@ -57,7 +57,7 @@
|
||||
:current="options.page"
|
||||
:pageSize="options.pageSize"
|
||||
:total="rowCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100', '500']"
|
||||
@change="onChangePage"
|
||||
@showSizeChange="onChangePageSize"
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
:current="options.page"
|
||||
:pageSize="options.pageSize"
|
||||
:total="rowCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100', '500']"
|
||||
@change="onChangePage"
|
||||
@showSizeChange="onChangePageSize"
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
:current="page"
|
||||
:pageSize="pageSize"
|
||||
:total="itemCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100', '500']"
|
||||
@change="onChangePage"
|
||||
@showSizeChange="onChangePageSize"
|
||||
|
||||
@ -109,7 +109,7 @@
|
||||
:key="event.id"
|
||||
:color="getEventColour(event)">
|
||||
<span :style="{ color: '#999' }"><small>{{ event.created }}</small></span><br/>
|
||||
<span :style="{ color: '#666' }"><small>{{ event.type }}</small></span><br/>
|
||||
<span :style="{ color: '#666' }"><small>{{ $t(event.type.toLowerCase()) }}</small></span><br/>
|
||||
<span :style="{ color: '#aaa' }">({{ event.username }}) {{ event.description }}</span>
|
||||
</a-timeline-item>
|
||||
</a-timeline>
|
||||
|
||||
@ -187,14 +187,14 @@ export default {
|
||||
if (json && json.listvolumesresponse) {
|
||||
count = json.listvolumesresponse.count
|
||||
}
|
||||
this.stats.splice(3, 1, { name: 'Total Volumes', count: count, icon: 'database', path: '/volume' })
|
||||
this.stats.splice(3, 1, { name: this.$t('label.total.volume'), count: count, icon: 'database', path: '/volume' })
|
||||
})
|
||||
api('listNetworks', { listall: true }).then(json => {
|
||||
var count = 0
|
||||
if (json && json.listnetworksresponse) {
|
||||
count = json.listnetworksresponse.count
|
||||
}
|
||||
this.stats.splice(4, 1, { name: 'Total Networks', count: count, icon: 'apartment', path: '/guestnetwork' })
|
||||
this.stats.splice(4, 1, { name: this.$t('label.total.network'), count: count, icon: 'apartment', path: '/guestnetwork' })
|
||||
})
|
||||
api('listPublicIpAddresses', { listall: true }).then(json => {
|
||||
var count = 0
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
<h1>{{ config[type].title }}</h1>
|
||||
<div class="desc">{{ config[type].desc }}</div>
|
||||
<div class="action">
|
||||
<a-button type="primary" @click="handleToHome">Go Back</a-button>
|
||||
<a-button type="primary" @click="handleToHome">{{ $t('label.go.back') }}</a-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -207,8 +207,8 @@
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div :span="24" class="action-button">
|
||||
<a-button @click="closeAction">{{ this.$t('Cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
|
||||
<a-button @click="closeAction">{{ $t('label.cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ $t('label.ok') }}</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
@ -295,7 +295,7 @@ export default {
|
||||
this.selectedDomain = this.domainsList[0].id || ''
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: `Error ${error.response.status}`,
|
||||
message: `${this.$t('label.error')} ${error.response.status}`,
|
||||
description: error.response.data.errorresponse.errortext
|
||||
})
|
||||
}).finally(() => {
|
||||
@ -358,8 +358,8 @@ export default {
|
||||
api('createAccount', params).then(response => {
|
||||
this.$emit('refresh-data')
|
||||
this.$notification.success({
|
||||
message: 'Create Account',
|
||||
description: 'Successfully created account ' + params.username
|
||||
message: this.$t('label.create.account'),
|
||||
description: `${this.$t('message.success.create.account')} ${params.username}`
|
||||
})
|
||||
const users = response.createaccountresponse.account.user
|
||||
if (values.samlenable && users) {
|
||||
@ -371,11 +371,11 @@ export default {
|
||||
}).then(response => {
|
||||
this.$notification.success({
|
||||
message: this.$t('samlenable'),
|
||||
description: 'Successfully enabled SAML Authorization'
|
||||
description: this.$t('message.success.enable.saml.auth')
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message,
|
||||
duration: 0
|
||||
})
|
||||
@ -387,7 +387,7 @@ export default {
|
||||
}
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message,
|
||||
duration: 0
|
||||
})
|
||||
|
||||
@ -122,7 +122,7 @@
|
||||
initialValue: selectedIdp,
|
||||
rules: [{ required: samlEnable, message: `${this.$t('message.error.select')}` }]
|
||||
}]"
|
||||
placeholder="Choose SAML identity provider"
|
||||
:placeholder="$t('label.choose.saml.indentity')"
|
||||
:loading="loading">
|
||||
<a-select-option v-for="(idp, idx) in listIdps" :key="idx">
|
||||
{{ idp.orgName }}
|
||||
@ -210,7 +210,7 @@ export default {
|
||||
scopedSlots: { customRender: 'email' }
|
||||
},
|
||||
{
|
||||
title: this.$t('Conflict'),
|
||||
title: this.$t('label.user.conflict'),
|
||||
dataIndex: 'conflictingusersource',
|
||||
scopedSlots: { customRender: 'conflictingusersource' }
|
||||
}
|
||||
@ -387,8 +387,8 @@ export default {
|
||||
}
|
||||
} else if (apiName === 'importLdapUsers' && response.ldapuserresponse && values.samlEnable) {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
description: 'Unable to find users IDs to enable SAML Single Sign On, kindly enable it manually.'
|
||||
message: this.$t('message.request.failed'),
|
||||
description: this.$t('message.error.enable.saml')
|
||||
})
|
||||
} else {
|
||||
if (apiName === 'ldapCreateAccount') {
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
</span>
|
||||
<a-input-password
|
||||
v-decorator="['currentpassword', {
|
||||
rules: [{ required: true, message: 'Please enter current password' }]
|
||||
rules: [{ required: true, message: $t('message.error.current.password') }]
|
||||
}]"
|
||||
:placeholder="apiParams.currentpassword.description"/>
|
||||
</a-form-item>
|
||||
@ -44,7 +44,7 @@
|
||||
</span>
|
||||
<a-input-password
|
||||
v-decorator="['password', {
|
||||
rules: [{ required: true, message: 'Please enter new password' }]
|
||||
rules: [{ required: true, message: $t('message.error.new.password') }]
|
||||
}]"
|
||||
:placeholder="apiParams.password.description"/>
|
||||
</a-form-item>
|
||||
@ -60,7 +60,7 @@
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please confirm new password'
|
||||
message: $t('message.error.confirm.password')
|
||||
},
|
||||
{
|
||||
validator: validateTwoPassword
|
||||
@ -143,7 +143,7 @@ export default {
|
||||
api('updateUser', params).then(json => {
|
||||
this.$notification.success({
|
||||
message: this.$t('label.action.change.password'),
|
||||
description: 'Successfully changed password for user "' + this.resource.username + '"'
|
||||
description: `${this.$t('message.success.change.password')} ${this.resource.username}`
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
|
||||
@ -38,7 +38,7 @@
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<div class="card-footer">
|
||||
<a-button @click="handleClose">{{ $t('Close') }}</a-button>
|
||||
<a-button @click="handleClose">{{ $t('label.close') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ $t('label.ok') }}</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
@ -102,12 +102,12 @@ export default {
|
||||
}).then(response => {
|
||||
this.$notification.success({
|
||||
message: values.samlEnable ? this.$t('label.saml.enable') : this.$t('label.saml.disable'),
|
||||
description: values.samlEnable ? `Successfully enabled SAML Authorization for ${this.resource.username}`
|
||||
: `Successfully disabled SAML Authorization for ${this.resource.username}`
|
||||
description: values.samlEnable ? `${this.$t('message.success.enable.saml.auth')} ${this.$t('label.for')} ${this.resource.username}`
|
||||
: `${this.$t('message.success.disable.saml.auth')} ${this.$t('label.for')} ${this.resource.username}`
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message,
|
||||
duration: 0
|
||||
})
|
||||
|
||||
@ -169,8 +169,8 @@ export default {
|
||||
}
|
||||
},
|
||||
errorMethod: () => this.parentFetchData(),
|
||||
loadingMessage: `${this.$t(action.label)} in progress for ${this.resource.name}`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: `${this.$t(action.label)} ${this.$t('label.in.progress')} ${this.$t('label.for')} ${this.resource.name}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
action
|
||||
})
|
||||
},
|
||||
@ -255,7 +255,7 @@ export default {
|
||||
}
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}).finally(f => {
|
||||
|
||||
@ -176,7 +176,7 @@ export default {
|
||||
this.treeSelected = domains[0] || {}
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: error.response.headers['x-description'],
|
||||
duration: 0
|
||||
})
|
||||
|
||||
@ -19,8 +19,8 @@
|
||||
<a-select
|
||||
:value="defaultValue"
|
||||
@change="handleChange">
|
||||
<a-select-option value="allow">Allow</a-select-option>
|
||||
<a-select-option value="deny">Deny</a-select-option>
|
||||
<a-select-option value="allow">{{ $t('label.allow') }}</a-select-option>
|
||||
<a-select-option value="deny">{{ $t('label.deny') }}</a-select-option>
|
||||
</a-select>
|
||||
</template>
|
||||
|
||||
|
||||
@ -48,13 +48,13 @@
|
||||
@change="onPermissionChange(null, $event)" />
|
||||
</div>
|
||||
<div class="rules-table__col rules-table__col--description">
|
||||
<a-input v-model="newRuleDescription" placeholder="Description"></a-input>
|
||||
<a-input v-model="newRuleDescription" :placeholder="$t('label.description')"></a-input>
|
||||
</div>
|
||||
<div class="rules-table__col rules-table__col--actions">
|
||||
<a-tooltip
|
||||
placement="bottom">
|
||||
<template slot="title">
|
||||
Save new Rule
|
||||
{{ $t('label.save.new.rule') }}
|
||||
</template>
|
||||
<a-button
|
||||
:disabled="!('createRolePermission' in $store.getters.apis)"
|
||||
@ -96,7 +96,7 @@
|
||||
{{ record.description }}
|
||||
</template>
|
||||
<div v-else class="no-description">
|
||||
No description entered.
|
||||
{{ $t('message.no.description') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="rules-table__col rules-table__col--actions">
|
||||
|
||||
@ -18,10 +18,10 @@
|
||||
<template>
|
||||
<a-tooltip placement="bottom">
|
||||
<template slot="title">
|
||||
Delete rule
|
||||
{{ $t('label.delete.rule') }}
|
||||
</template>
|
||||
<a-popconfirm
|
||||
title="Delete Rule?"
|
||||
:title="`${$t('label.delete.rule')}?`"
|
||||
@confirm="handleDelete"
|
||||
:disabled="disabled">
|
||||
<a-button type="danger" shape="circle" :disabled="disabled">
|
||||
|
||||
@ -182,7 +182,8 @@ export default {
|
||||
params.id = row.id
|
||||
|
||||
// show loading
|
||||
const loading = this.$message.loading('Delete certificate in progress for ' + row.name, 0)
|
||||
const message = `${this.$t('label.delete.certificate')} ${this.$t('label.in.progress.for')} ${row.name}`
|
||||
const loading = this.$message.loading(message, 0)
|
||||
|
||||
api('deleteSslCert', params).then(json => {
|
||||
const jsonResponse = json.deletesslcertresponse
|
||||
@ -191,10 +192,10 @@ export default {
|
||||
setTimeout(loading)
|
||||
|
||||
if (jsonResponse.success) {
|
||||
this.$message.success('Delete success', 3)
|
||||
this.$message.success(this.$t('message.success.delete'), 3)
|
||||
this.fetchData()
|
||||
} else {
|
||||
this.$message.error('Delete fail', 3)
|
||||
this.$message.error(this.$t('message.delete.failed'), 3)
|
||||
}
|
||||
}).catch(error => {
|
||||
// hide loading
|
||||
@ -206,14 +207,13 @@ export default {
|
||||
},
|
||||
onShowConfirm (row) {
|
||||
const self = this
|
||||
let title = this.$t('label.deleteconfirm')
|
||||
title = title.replace('{name}', this.$t('label.certificate'))
|
||||
const title = `${this.$t('label.deleteconfirm')} ${this.$t('label.certificate')}`
|
||||
|
||||
this.$confirm({
|
||||
title: title,
|
||||
okText: 'OK',
|
||||
okText: this.$t('label.ok'),
|
||||
okType: 'danger',
|
||||
cancelText: 'Cancel',
|
||||
cancelText: this.$t('label.cancel'),
|
||||
onOk () {
|
||||
self.onDelete(row)
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
</span>
|
||||
<a-input
|
||||
v-decorator="['semanticversion', {
|
||||
rules: [{ required: true, message: 'Please enter Kubernetes semantic version' }]
|
||||
rules: [{ required: true, message: $t('message.error.kuberversion') }]
|
||||
}]"
|
||||
:placeholder="apiParams.semanticversion.description"/>
|
||||
</a-form-item>
|
||||
@ -44,7 +44,7 @@
|
||||
</span>
|
||||
<a-input
|
||||
v-decorator="['name', {
|
||||
rules: [{ message: 'Please enter name' }]
|
||||
rules: [{ message: $t('message.error.name') }]
|
||||
}]"
|
||||
:placeholder="$t('label.name')"/>
|
||||
</a-form-item>
|
||||
@ -62,7 +62,7 @@
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value && value.length > 1 && value.indexOf(0) !== -1) {
|
||||
callback('All Zones cannot be combined with any other zone')
|
||||
callback(this.$t('message.error.zone.combined'))
|
||||
}
|
||||
callback()
|
||||
}
|
||||
@ -90,7 +90,7 @@
|
||||
</span>
|
||||
<a-input
|
||||
v-decorator="['url', {
|
||||
rules: [{ required: true, message: 'Please enter binaries ISO URL' }]
|
||||
rules: [{ required: true, message: $t('message.error.binaries.iso.url') }]
|
||||
}]"
|
||||
:placeholder="apiParams.url.description" />
|
||||
</a-form-item>
|
||||
@ -103,7 +103,7 @@
|
||||
</span>
|
||||
<a-input
|
||||
v-decorator="['checksum', {
|
||||
rules: [{ required: false, message: 'Please enter input' }]
|
||||
rules: [{ required: false, message: $t('message.error.required.input') }]
|
||||
}]"
|
||||
:placeholder="apiParams.checksum.description" />
|
||||
</a-form-item>
|
||||
@ -116,11 +116,11 @@
|
||||
</span>
|
||||
<a-input
|
||||
v-decorator="['mincpunumber', {
|
||||
rules: [{ required: true, message: 'Please enter value' },
|
||||
rules: [{ required: true, message: $t('message.please.enter.value') },
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value && (isNaN(value) || value <= 0)) {
|
||||
callback('Please enter a valid number')
|
||||
callback(this.$t('message.validate.number'))
|
||||
}
|
||||
callback()
|
||||
}
|
||||
@ -138,11 +138,11 @@
|
||||
</span>
|
||||
<a-input
|
||||
v-decorator="['minmemory', {
|
||||
rules: [{ required: true, message: 'Please enter value' },
|
||||
rules: [{ required: true, message: $t('message.please.enter.value') },
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value && (isNaN(value) || value <= 0)) {
|
||||
callback('Please enter a valid number')
|
||||
callback(this.$t('message.validate.number'))
|
||||
}
|
||||
callback()
|
||||
}
|
||||
@ -246,7 +246,7 @@ export default {
|
||||
params.minmemory = values.minmemory
|
||||
}
|
||||
api('addKubernetesSupportedVersion', params).then(json => {
|
||||
this.$message.success('Successfully added Kubernetes version: ' + values.semanticversion)
|
||||
this.$message.success(`${this.$t('message.success.add.kuberversion')}: ${values.semanticversion}`)
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
}).finally(() => {
|
||||
|
||||
@ -62,7 +62,7 @@
|
||||
:current="page"
|
||||
:pageSize="pageSize"
|
||||
:total="itemCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100']"
|
||||
@change="handleChangePage"
|
||||
@showSizeChange="handleChangePageSize"
|
||||
@ -259,8 +259,8 @@ export default {
|
||||
}
|
||||
},
|
||||
errorMethod: () => this.fetchData(),
|
||||
loadingMessage: `Deleting ISO ${this.resource.name} in progress`,
|
||||
catchMessage: 'Error encountered while fetching async job result'
|
||||
loadingMessage: `${this.$t('label.deleting.iso')} ${this.resource.name} ${this.$t('label.in.progress')}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result')
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
@ -317,12 +317,12 @@ export default {
|
||||
this.fetchData()
|
||||
},
|
||||
errorMethod: () => this.fetchData(),
|
||||
loadingMessage: `Copy ISO ${this.resource.name} in progress`,
|
||||
catchMessage: 'Error encountered while fetching async job result'
|
||||
loadingMessage: `${this.$t('label.action.copy.iso')} ${this.resource.name} ${this.$t('label.in.progress')}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result')
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}).finally(() => {
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
<div class="form-layout">
|
||||
<span v-if="uploadPercentage > 0">
|
||||
<a-icon type="loading" />
|
||||
Do not close this form, file upload is in progress...
|
||||
{{ $t('message.upload.file.processing') }}
|
||||
<a-progress :percent="uploadPercentage" />
|
||||
</span>
|
||||
<a-spin :spinning="loading" v-else>
|
||||
@ -47,7 +47,7 @@
|
||||
<a-icon type="cloud-upload" />
|
||||
</p>
|
||||
<p class="ant-upload-text" v-if="fileList.length === 0">
|
||||
Click or drag file to this area to upload
|
||||
{{ $t('label.volume.volumefileupload.description') }}
|
||||
</p>
|
||||
</a-upload-dragger>
|
||||
</a-form-item>
|
||||
@ -265,8 +265,8 @@ export default {
|
||||
const { fileList } = this
|
||||
if (this.fileList.length > 1) {
|
||||
this.$notification.error({
|
||||
message: 'ISO Upload Failed',
|
||||
description: 'Only one ISO can be uploaded at a time',
|
||||
message: this.$t('message.upload.iso.failed'),
|
||||
description: this.$t('message.error.upload.iso.description'),
|
||||
duration: 0
|
||||
})
|
||||
}
|
||||
@ -290,14 +290,14 @@ export default {
|
||||
timeout: 86400000
|
||||
}).then((json) => {
|
||||
this.$notification.success({
|
||||
message: 'Upload Successful',
|
||||
description: 'This ISO file has been uploaded. Please check its status at Templates menu'
|
||||
message: this.$t('message.success.upload'),
|
||||
description: this.$t('message.success.upload.description')
|
||||
})
|
||||
this.closeAction()
|
||||
}).catch(e => {
|
||||
this.$notification.error({
|
||||
message: 'Upload Failed',
|
||||
description: `Failed to upload ISO - ${e}`,
|
||||
message: this.$t('message.upload.failed'),
|
||||
description: `${this.$t('message.upload.iso.failed.description')} - ${e}`,
|
||||
duration: 0
|
||||
})
|
||||
this.closeAction()
|
||||
@ -338,8 +338,8 @@ export default {
|
||||
api('registerIso', params).then(json => {
|
||||
this.$emit('refresh-data')
|
||||
this.$notification.success({
|
||||
message: this.$t('label.action.register.iso'),
|
||||
description: 'Sucessfully registered ISO ' + params.name
|
||||
message: 'label.action.register.iso',
|
||||
description: `${this.$t('message.success.register.iso')} ${params.name}`
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
@ -358,8 +358,8 @@ export default {
|
||||
const response = this.handleUpload()
|
||||
if (response === 'upload successful') {
|
||||
this.$notification.success({
|
||||
message: 'Upload Successful',
|
||||
description: 'This ISO file has been uploaded. Please check its status in the Images > ISOs menu'
|
||||
message: this.$t('message.success.upload'),
|
||||
description: this.$t('message.success.upload.iso.description')
|
||||
})
|
||||
}
|
||||
}).catch(error => {
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
<div class="form-layout">
|
||||
<span v-if="uploadPercentage > 0">
|
||||
<a-icon type="loading" />
|
||||
Do not close this form, file upload is in progress...
|
||||
{{ $t('message.upload.file.processing') }}
|
||||
<a-progress :percent="uploadPercentage" />
|
||||
</span>
|
||||
<a-spin :spinning="loading" v-else>
|
||||
@ -52,7 +52,7 @@
|
||||
<a-icon type="cloud-upload" />
|
||||
</p>
|
||||
<p class="ant-upload-text" v-if="fileList.length === 0">
|
||||
Click or drag file to this area to upload
|
||||
{{ $t('label.volume.volumefileupload.description') }}
|
||||
</p>
|
||||
</a-upload-dragger>
|
||||
</a-form-item>
|
||||
@ -476,14 +476,14 @@ export default {
|
||||
timeout: 86400000
|
||||
}).then((json) => {
|
||||
this.$notification.success({
|
||||
message: 'Upload Successful',
|
||||
description: 'This template file has been uploaded. Please check its status at Templates menu'
|
||||
message: this.$t('message.success.upload'),
|
||||
description: this.$t('message.success.upload.template.description')
|
||||
})
|
||||
this.closeAction()
|
||||
}).catch(e => {
|
||||
this.$notification.error({
|
||||
message: 'Upload Failed',
|
||||
description: `Failed to upload Template - ${e}`,
|
||||
message: this.$t('message.upload.failed'),
|
||||
description: `${this.$t('message.upload.template.failed.description')} - ${e}`,
|
||||
duration: 0
|
||||
})
|
||||
this.closeAction()
|
||||
@ -854,8 +854,8 @@ export default {
|
||||
api('registerTemplate', params).then(json => {
|
||||
this.$emit('refresh-data')
|
||||
this.$notification.success({
|
||||
message: 'Register Template',
|
||||
description: 'Successfully registered template ' + params.name
|
||||
message: this.$t('label.register.template'),
|
||||
description: `${this.$t('message.success.register.template')} ${params.name}`
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
@ -867,8 +867,8 @@ export default {
|
||||
this.loading = true
|
||||
if (this.fileList.length > 1) {
|
||||
this.$notification.error({
|
||||
message: 'Template Upload Failed',
|
||||
description: 'Only one template can be uploaded at a time',
|
||||
message: this.$t('message.error.upload.template'),
|
||||
description: this.$t('message.error.upload.template.description'),
|
||||
duration: 0
|
||||
})
|
||||
}
|
||||
@ -894,7 +894,7 @@ export default {
|
||||
|
||||
if (allZoneExists.length > 0 && zones.length > 1) {
|
||||
this.zoneError = 'error'
|
||||
this.zoneErrorMessage = this.$t('label.error.zone.combined')
|
||||
this.zoneErrorMessage = this.$t('message.error.zone.combined')
|
||||
}
|
||||
},
|
||||
closeAction () {
|
||||
|
||||
@ -54,7 +54,7 @@
|
||||
:current="page"
|
||||
:pageSize="pageSize"
|
||||
:total="itemCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100']"
|
||||
@change="handleChangePage"
|
||||
@showSizeChange="handleChangePageSize"
|
||||
@ -270,8 +270,8 @@ export default {
|
||||
}
|
||||
},
|
||||
errorMethod: () => this.fetchData(),
|
||||
loadingMessage: `Deleting template ${this.resource.name} in progress`,
|
||||
catchMessage: 'Error encountered while fetching async job result'
|
||||
loadingMessage: `${this.$t('label.deleting.template')} ${this.resource.name} ${this.$t('label.in.progress')}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result')
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
@ -335,12 +335,12 @@ export default {
|
||||
this.fetchData()
|
||||
},
|
||||
errorMethod: () => this.fetchData(),
|
||||
loadingMessage: `Copy template ${this.resource.name} in progress`,
|
||||
catchMessage: 'Error encountered while fetching async job result'
|
||||
loadingMessage: `${this.$t('label.action.copy.template')} ${this.resource.name} ${this.$t('label.in.progress')}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result')
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}).finally(() => {
|
||||
|
||||
@ -129,7 +129,7 @@ export default {
|
||||
params.state = this.states[values.state].id
|
||||
}
|
||||
api('updateKubernetesSupportedVersion', params).then(json => {
|
||||
this.$message.success('Successfully updated Kubernetes supported version: ' + this.resource.name)
|
||||
this.$message.success(`${this.$t('message.success.update.kubeversion')}: ${this.resource.name}`)
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
}).finally(() => {
|
||||
|
||||
@ -23,26 +23,26 @@
|
||||
|
||||
<div class="form__item">
|
||||
<p class="form__label">{{ $t('label.operation') }}</p>
|
||||
<a-select v-model="selectedOperation" defaultValue="Add" @change="fetchData">
|
||||
<a-select v-model="selectedOperation" :defaultValue="$t('label.add')" @change="fetchData">
|
||||
<a-select-option :value="$t('label.add')">{{ $t('label.add') }}</a-select-option>
|
||||
<a-select-option :value="$t('label.remove')">{{ $t('label.remove') }}</a-select-option>
|
||||
<a-select-option :value="$t('label.reset')">{{ $t('label.reset') }}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
|
||||
<template v-if="selectedOperation !== 'Reset'">
|
||||
<template v-if="selectedOperation !== $t('label.reset')">
|
||||
<div class="form__item">
|
||||
<p class="form__label">
|
||||
<span class="required">*</span>
|
||||
{{ $t('label.sharewith') }}
|
||||
</p>
|
||||
<a-select v-model="selectedShareWith" defaultValue="Account" @change="fetchData">
|
||||
<a-select v-model="selectedShareWith" :defaultValue="$t('label.account')" @change="fetchData">
|
||||
<a-select-option :value="$t('label.account')">{{ $t('label.account') }}</a-select-option>
|
||||
<a-select-option :value="$t('label.project')">{{ $t('label.project') }}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
|
||||
<template v-if="selectedShareWith === 'Account'">
|
||||
<template v-if="selectedShareWith === $t('label.account')">
|
||||
<div class="form__item">
|
||||
<p class="form__label">
|
||||
{{ $t('label.account') }}
|
||||
@ -55,11 +55,12 @@
|
||||
@change="handleChange"
|
||||
style="width: 100%">
|
||||
<a-select-option v-for="account in accountsList" :key="account.name">
|
||||
{{ account.name }}</a-select-option>
|
||||
{{ account.name }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
<div v-else>
|
||||
<a-input v-model="selectedAccountsList" placeholder="Enter comma-separated list of commands"></a-input>
|
||||
<a-input v-model="selectedAccountsList" :placeholder="$t('label.comma.separated.list.description')"></a-input>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -71,12 +72,13 @@
|
||||
</p>
|
||||
<a-select
|
||||
mode="multiple"
|
||||
placeholder="Select Projects"
|
||||
:placeholder="$t('label.select.projects')"
|
||||
:value="selectedProjects"
|
||||
@change="handleChange"
|
||||
style="width: 100%">
|
||||
<a-select-option v-for="project in projectsList" :key="project.name">
|
||||
{{ project.name }}</a-select-option>
|
||||
{{ project.name }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
</template>
|
||||
@ -112,7 +114,7 @@ export default {
|
||||
selectedAccounts: [],
|
||||
selectedProjects: [],
|
||||
selectedAccountsList: '',
|
||||
selectedOperation: 'Add',
|
||||
selectedOperation: this.$t('label.add'),
|
||||
selectedShareWith: this.$t('label.account'),
|
||||
accountError: false,
|
||||
projectError: false,
|
||||
@ -125,7 +127,7 @@ export default {
|
||||
accountsList () {
|
||||
return this.accounts.length > 0 ? this.accounts
|
||||
.filter(a =>
|
||||
this.selectedOperation === 'Add'
|
||||
this.selectedOperation === this.$t('label.add')
|
||||
? !this.permittedAccounts.includes(a.name)
|
||||
: this.permittedAccounts.includes(a.name)
|
||||
) : this.accounts
|
||||
@ -133,7 +135,7 @@ export default {
|
||||
projectsList () {
|
||||
return this.projects > 0 ? this.projects
|
||||
.filter(p =>
|
||||
this.selectedOperation === 'Add'
|
||||
this.selectedOperation === this.$t('label.add')
|
||||
? !this.permittedProjects.includes(p.id)
|
||||
: this.permittedProjects.includes(p.id)
|
||||
) : this.projects
|
||||
@ -150,7 +152,7 @@ export default {
|
||||
} else {
|
||||
this.fetchTemplatePermissions()
|
||||
}
|
||||
if (this.selectedShareWith === 'Account') {
|
||||
if (this.selectedShareWith === this.$t('label.account')) {
|
||||
this.selectedAccounts = []
|
||||
this.fetchAccounts()
|
||||
} else {
|
||||
@ -212,8 +214,8 @@ export default {
|
||||
})
|
||||
},
|
||||
handleChange (selectedItems) {
|
||||
if (this.selectedOperation === 'Add' || this.selectedOperation === 'Remove') {
|
||||
if (this.selectedShareWith === 'Account') {
|
||||
if (this.selectedOperation === this.$t('label.add') || this.selectedOperation === this.$t('label.remove')) {
|
||||
if (this.selectedShareWith === this.$t('label.account')) {
|
||||
this.selectedAccounts = selectedItems
|
||||
} else {
|
||||
this.selectedProjects = selectedItems
|
||||
@ -226,7 +228,7 @@ export default {
|
||||
submitData () {
|
||||
let variableKey = ''
|
||||
let variableValue = ''
|
||||
if (this.selectedShareWith === 'Account') {
|
||||
if (this.selectedShareWith === this.$t('label.account')) {
|
||||
variableKey = 'accounts'
|
||||
if (this.showAccountSelect) {
|
||||
variableValue = this.selectedAccounts.map(account => account).join(',')
|
||||
@ -250,7 +252,7 @@ export default {
|
||||
})
|
||||
.then(response => {
|
||||
this.$notification.success({
|
||||
message: 'Successfully updated ' + resourceType + ' permissions'
|
||||
message: `${this.$t('label.success.updated')} ${resourceType} ${this.$t('label.permissions')}`
|
||||
})
|
||||
})
|
||||
.catch(error => {
|
||||
@ -266,7 +268,6 @@ export default {
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
|
||||
.form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
<img v-if="imageUrl" :src="imageUrl" alt="avatar" />
|
||||
<div v-else>
|
||||
<a-icon :type="loading ? 'loading' : 'plus'" />
|
||||
<div class="ant-upload-text">Upload</div>
|
||||
<div class="ant-upload-text">{{ $t('label.upload') }}</div>
|
||||
</div>
|
||||
</a-upload>
|
||||
</div>
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
<img v-if="imageUrl" :src="imageUrl" alt="avatar" />
|
||||
<div v-else>
|
||||
<a-icon :type="loading ? 'loading' : 'plus'" />
|
||||
<div class="ant-upload-text">Upload</div>
|
||||
<div class="ant-upload-text">{{ $t('label.upload') }}</div>
|
||||
</div>
|
||||
</a-upload>
|
||||
</div>
|
||||
|
||||
@ -38,7 +38,7 @@
|
||||
</div>
|
||||
<a-form-item :label="$t('label.zoneid')">
|
||||
<a-select
|
||||
v-decorator="['zone', { initialValue: this.zoneSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
|
||||
v-decorator="['zone', { initialValue: this.zoneSelected, rules: [{ required: true, message: `${$t('label.required')}`}] }]"
|
||||
@change="val => changeZone(val)">
|
||||
<a-select-option :value="zone.id" v-for="(zone) in zones" :key="zone.id">
|
||||
{{ zone.name }}
|
||||
@ -48,7 +48,7 @@
|
||||
<div v-if="this.scope === 'cluster' || this.scope === 'host'">
|
||||
<a-form-item :label="$t('label.podid')">
|
||||
<a-select
|
||||
v-decorator="['pod', { initialValue: this.podSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
|
||||
v-decorator="['pod', { initialValue: this.podSelected, rules: [{ required: true, message: `${$t('label.required')}`}] }]"
|
||||
@change="val => changePod(val)">
|
||||
<a-select-option :value="pod.id" v-for="(pod) in pods" :key="pod.id">
|
||||
{{ pod.name }}
|
||||
@ -57,7 +57,7 @@
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.clusterid')">
|
||||
<a-select
|
||||
v-decorator="['cluster', { initialValue: this.clusterSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
|
||||
v-decorator="['cluster', { initialValue: this.clusterSelected, rules: [{ required: true, message: `${$t('label.required')}`}] }]"
|
||||
@change="val => fetchHypervisor(val)">
|
||||
<a-select-option :value="cluster.id" v-for="cluster in clusters" :key="cluster.id">
|
||||
{{ cluster.name }}
|
||||
@ -68,7 +68,7 @@
|
||||
<div v-if="this.scope === 'host'">
|
||||
<a-form-item :label="$t('label.hostid')">
|
||||
<a-select
|
||||
v-decorator="['host', { initialValue: this.hostSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
|
||||
v-decorator="['host', { initialValue: this.hostSelected, rules: [{ required: true, message: `${$t('label.required')}`}] }]"
|
||||
@change="val => this.hostSelected = val">
|
||||
<a-select-option :value="host.id" v-for="host in hosts" :key="host.id">
|
||||
{{ host.name }}
|
||||
@ -77,11 +77,11 @@
|
||||
</a-form-item>
|
||||
</div>
|
||||
<a-form-item :label="$t('label.name')">
|
||||
<a-input v-decorator="['name', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
|
||||
<a-input v-decorator="['name', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.protocol')">
|
||||
<a-select
|
||||
v-decorator="['protocol', { initialValue: this.protocols[0], rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
|
||||
v-decorator="['protocol', { initialValue: this.protocols[0], rules: [{ required: true, message: `${$t('label.required')}`}] }]"
|
||||
@change="val => this.protocolSelected = val">
|
||||
<a-select-option :value="protocol" v-for="(protocol,idx) in protocols" :key="idx">
|
||||
{{ protocol }}
|
||||
@ -91,44 +91,44 @@
|
||||
<div
|
||||
v-if="protocolSelected === 'nfs' || protocolSelected === 'SMB' || protocolSelected === 'iscsi' || protocolSelected === 'vmfs'|| protocolSelected === 'Gluster'">
|
||||
<a-form-item :label="$t('label.server')">
|
||||
<a-input v-decorator="['server', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]" />
|
||||
<a-input v-decorator="['server', { rules: [{ required: true, message: `${$t('label.required')}` }] }]" />
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div v-if="protocolSelected === 'nfs' || protocolSelected === 'SMB' || protocolSelected === 'ocfs2' || protocolSelected === 'preSetup'|| protocolSelected === 'SharedMountPoint'">
|
||||
<a-form-item :label="$t('label.path')">
|
||||
<a-input v-decorator="['path', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]" />
|
||||
<a-input v-decorator="['path', { rules: [{ required: true, message: `${$t('label.required')}` }] }]" />
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div v-if="protocolSelected === 'SMB'">
|
||||
<a-form-item :label="$t('label.smbusername')">
|
||||
<a-input v-decorator="['smbUsername', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
|
||||
<a-input v-decorator="['smbUsername', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.smbpassword')">
|
||||
<a-input-password v-decorator="['smbPassword', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
|
||||
<a-input-password v-decorator="['smbPassword', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.smbdomain')">
|
||||
<a-input v-decorator="['smbDomain', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
|
||||
<a-input v-decorator="['smbDomain', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div v-if="protocolSelected === 'iscsi'">
|
||||
<a-form-item :label="$t('label.iqn')">
|
||||
<a-input v-decorator="['iqn', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
|
||||
<a-input v-decorator="['iqn', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.lun')">
|
||||
<a-input v-decorator="['lun', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
|
||||
<a-input v-decorator="['lun', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div v-if="protocolSelected === 'vmfs'">
|
||||
<a-form-item :label="$t('label.vcenterdatacenter')">
|
||||
<a-input v-decorator="['vCenterDataCenter', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
|
||||
<a-input v-decorator="['vCenterDataCenter', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.vcenterdatastore')">
|
||||
<a-input v-decorator="['vCenterDataStore', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
|
||||
<a-input v-decorator="['vCenterDataStore', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<a-form-item :label="$t('label.providername')">
|
||||
<a-select
|
||||
v-decorator="['provider', { initialValue: providerSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
|
||||
v-decorator="['provider', { initialValue: providerSelected, rules: [{ required: true, message: `${$t('label.required')}`}] }]"
|
||||
@change="val => this.providerSelected = val">
|
||||
<a-select-option :value="provider" v-for="(provider,idx) in providers" :key="idx">
|
||||
{{ provider }}
|
||||
@ -166,7 +166,7 @@
|
||||
</div>
|
||||
<div v-if="protocolSelected === 'CLVM'">
|
||||
<a-form-item :label="$t('label.volumegroup')">
|
||||
<a-input v-decorator="['volumegroup', { rules: [{ required: true, message: `${this.$t('label.required')}`}] }]" />
|
||||
<a-input v-decorator="['volumegroup', { rules: [{ required: true, message: `${$t('label.required')}`}] }]" />
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div v-if="protocolSelected === 'Gluster'">
|
||||
|
||||
@ -45,7 +45,7 @@
|
||||
'zone',
|
||||
{
|
||||
initialValue: this.zoneSelected,
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}`}]
|
||||
rules: [{ required: true, message: `${$t('label.required')}`}]
|
||||
}]"
|
||||
@change="val => { zoneSelected = val }"
|
||||
>
|
||||
@ -61,7 +61,7 @@
|
||||
v-decorator="[
|
||||
'server',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -70,7 +70,7 @@
|
||||
v-decorator="[
|
||||
'path',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -81,7 +81,7 @@
|
||||
v-decorator="[
|
||||
'smbUsername',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -90,7 +90,7 @@
|
||||
v-decorator="[
|
||||
'smbPassword',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -99,7 +99,7 @@
|
||||
v-decorator="[
|
||||
'smbDomain',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -110,7 +110,7 @@
|
||||
v-decorator="[
|
||||
'url',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -119,7 +119,7 @@
|
||||
v-decorator="[
|
||||
'account',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -128,7 +128,7 @@
|
||||
v-decorator="[
|
||||
'username',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -137,7 +137,7 @@
|
||||
v-decorator="[
|
||||
'key',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
|
||||
@ -56,7 +56,7 @@
|
||||
|
||||
<div class="form__item">
|
||||
<div class="form__label"><span class="required">* </span>{{ $t('label.clusternamelabel') }}</div>
|
||||
<span class="required required-label" ref="requiredCluster">Required</span>
|
||||
<span class="required required-label" ref="requiredCluster">{{ $t('label.required') }}</span>
|
||||
<a-input :placeholder="placeholder.clustername" v-model="clustername"></a-input>
|
||||
</div>
|
||||
|
||||
@ -242,7 +242,7 @@ export default {
|
||||
}
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: `Error ${error.response.status}`,
|
||||
message: `${this.$t('label.error')} ${error.response.status}`,
|
||||
description: error.response.data.addclusterresponse.errortext,
|
||||
duration: 0
|
||||
})
|
||||
@ -268,23 +268,23 @@ export default {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: this.$t('message.cluster.dedicated'),
|
||||
jobid: response.dedicateclusterresponse.jobid,
|
||||
description: `Domain ID: ${this.dedicatedDomainId}`,
|
||||
description: `${this.$t('label.domainid')} : ${this.dedicatedDomainId}`,
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to dedicate cluster',
|
||||
errorMessage: this.$t('error.dedicate.cluster.failed'),
|
||||
errorMethod: () => {
|
||||
this.loading = false
|
||||
},
|
||||
loadingMessage: this.$t('message.dedicate.zone'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: `Error ${error.response.status}`,
|
||||
message: `${this.$t('label.error')} ${error.response.status}`,
|
||||
description: error.response.data.errorresponse.errortext,
|
||||
duration: 0
|
||||
})
|
||||
|
||||
@ -57,19 +57,19 @@
|
||||
|
||||
<div class="form__item required-field">
|
||||
<div class="form__label"><span class="required">* </span>{{ selectedClusterHyperVisorType === 'VMware' ? $t('label.vcenterhost') : $t('label.hostnamelabel') }}</div>
|
||||
<span class="required required-label">Required</span>
|
||||
<span class="required required-label">{{ $t('label.required') }}</span>
|
||||
<a-input v-model="hostname"></a-input>
|
||||
</div>
|
||||
|
||||
<div class="form__item required-field" v-if="selectedClusterHyperVisorType !== 'VMware'">
|
||||
<div class="form__label"><span class="required">* </span>{{ $t('label.username') }}</div>
|
||||
<span class="required required-label">Required</span>
|
||||
<span class="required required-label">{{ $t('label.required') }}</span>
|
||||
<a-input :placeholder="placeholder.username" v-model="username"></a-input>
|
||||
</div>
|
||||
|
||||
<div class="form__item required-field" v-if="selectedClusterHyperVisorType !== 'VMware'">
|
||||
<div class="form__label"><span class="required">* </span>{{ $t('label.password') }}</div>
|
||||
<span class="required required-label">Required</span>
|
||||
<span class="required required-label">{{ $t('label.required') }}</span>
|
||||
<a-input :placeholder="placeholder.password" type="password" v-model="password"></a-input>
|
||||
</div>
|
||||
|
||||
@ -80,7 +80,7 @@
|
||||
</div>
|
||||
<div class="form__item required-field">
|
||||
<div class="form__label"><span class="required">* </span>{{ $t('label.agent.password') }}</div>
|
||||
<span class="required required-label">Required</span>
|
||||
<span class="required required-label">{{ $t('label.required') }}</span>
|
||||
<a-input type="password" v-model="agentpassword"></a-input>
|
||||
</div>
|
||||
<div class="form__item">
|
||||
@ -296,7 +296,7 @@ export default {
|
||||
}
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: `Error ${error.response.status}`,
|
||||
message: `${this.$t('label.error')} ${error.response.status}`,
|
||||
description: error.response.data.addhostresponse.errortext,
|
||||
duration: 0
|
||||
})
|
||||
@ -321,23 +321,23 @@ export default {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: this.$t('message.host.dedicated'),
|
||||
jobid: response.dedicatehostresponse.jobid,
|
||||
description: `Domain ID: ${this.dedicatedDomainId}`,
|
||||
description: `${this.$t('label.domainid')} : ${this.dedicatedDomainId}`,
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to dedicate host',
|
||||
errorMessage: this.$t('error.dedicate.host.failed'),
|
||||
errorMethod: () => {
|
||||
this.loading = false
|
||||
},
|
||||
loadingMessage: this.$t('message.dedicate.host'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.dedicating.host'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: `Error ${error.response.status}`,
|
||||
message: `${this.$t('label.error')} ${error.response.status}`,
|
||||
description: error.response.data.errorresponse.errortext,
|
||||
duration: 0
|
||||
})
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
:footer="null"
|
||||
@cancel="sslModalClose">
|
||||
<p>
|
||||
Please submit a new X.509 compliant SSL certificate chain to be updated to each console proxy and secondary storage virtual instance:
|
||||
{{ $t('message.update.ssl') }}
|
||||
</p>
|
||||
|
||||
<a-form @submit.prevent="handleSslFormSubmit" ref="sslForm" :form="form">
|
||||
@ -63,7 +63,7 @@
|
||||
name="rootCert"
|
||||
v-decorator="[
|
||||
'root',
|
||||
{rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
|
||||
{rules: [{ required: true, message: `${$t('label.required')}` }], validateTrigger:'change'}
|
||||
]"
|
||||
></a-textarea>
|
||||
</a-form-item>
|
||||
@ -95,7 +95,7 @@
|
||||
<a-form-item>
|
||||
<a-button @click="addIntermediateCert">
|
||||
<a-icon type="plus-circle" />
|
||||
Add intermediate certificate
|
||||
{{ $t('label.add.intermediate.certificate') }}
|
||||
</a-button>
|
||||
</a-form-item>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
name="serverCert"
|
||||
v-decorator="[
|
||||
'server',
|
||||
{rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
|
||||
{rules: [{ required: true, message: `${$t('label.required')}` }], validateTrigger:'change'}
|
||||
]"
|
||||
></a-textarea>
|
||||
</a-form-item>
|
||||
@ -132,7 +132,7 @@
|
||||
name="pkcsKey"
|
||||
v-decorator="[
|
||||
'pkcs',
|
||||
{rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
|
||||
{rules: [{ required: true, message: `${$t('label.required')}` }], validateTrigger:'change'}
|
||||
]"
|
||||
></a-textarea>
|
||||
</a-form-item>
|
||||
@ -150,7 +150,7 @@
|
||||
name="dnsSuffix"
|
||||
v-decorator="[
|
||||
'dns',
|
||||
{rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
|
||||
{rules: [{ required: true, message: `${$t('label.required')}` }], validateTrigger:'change'}
|
||||
]"
|
||||
></a-input>
|
||||
</a-form-item>
|
||||
@ -265,24 +265,24 @@ export default {
|
||||
api('queryAsyncJobResult', { jobid: jobId }).then(json => {
|
||||
const result = json.queryasyncjobresultresponse
|
||||
if (result.jobstatus === 1 && this.maxCerts === count) {
|
||||
this.$message.success('Certificate Uploaded: ' + result.jobresult.customcertificate.message)
|
||||
this.$message.success(`${this.$t('label.certificate.upload')}: ${result.jobresult.customcertificate.message}`)
|
||||
this.$notification.success({
|
||||
message: 'Certificate Uploaded',
|
||||
description: result.jobresult.customcertificate.message || 'Certificate successfully uploaded'
|
||||
message: this.$t('label.certificate.upload'),
|
||||
description: result.jobresult.customcertificate.message || this.$t('message.success.certificate.upload')
|
||||
})
|
||||
} else if (result.jobstatus === 2) {
|
||||
this.$notification.error({
|
||||
message: 'Certificate Upload Failed',
|
||||
description: result.jobresult.errortext || 'Failed to update SSL Certificate. Failed to pass certificate validation check',
|
||||
message: this.$t('label.certificate.upload.failed'),
|
||||
description: result.jobresult.errortext || this.$t('label.certificate.upload.failed.description'),
|
||||
duration: 0
|
||||
})
|
||||
} else if (result.jobstatus === 0) {
|
||||
this.$message
|
||||
.loading('Certificate upload in progress: ' + count, 2)
|
||||
.loading(`${this.$t('message.certificate.upload.processing')}: ${count}`, 2)
|
||||
.then(() => this.pollActionCompletion(jobId, count))
|
||||
}
|
||||
}).catch(e => {
|
||||
console.log('Error encountered while fetching async job result' + e)
|
||||
console.log(this.$t('error.fetching.async.job.result') + e)
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
<a-select
|
||||
v-decorator="['zoneid', {
|
||||
initialValue: this.zoneId,
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }] }
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }] }
|
||||
]">
|
||||
<a-select-option
|
||||
v-for="zone in zonesList"
|
||||
@ -40,7 +40,7 @@
|
||||
v-decorator="[
|
||||
'name',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -51,7 +51,7 @@
|
||||
v-decorator="[
|
||||
'gateway',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -62,7 +62,7 @@
|
||||
v-decorator="[
|
||||
'netmask',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -73,7 +73,7 @@
|
||||
v-decorator="[
|
||||
'startip',
|
||||
{
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
/>
|
||||
</a-form-item>
|
||||
@ -194,7 +194,7 @@ export default {
|
||||
this.$parent.$parent.close()
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: `Error ${error.response.status}`,
|
||||
message: `${this.$t('label.error')} ${error.response.status}`,
|
||||
description: error.response.data.createpodresponse.errortext,
|
||||
duration: 0
|
||||
})
|
||||
@ -219,23 +219,23 @@ export default {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: this.$t('message.pod.dedicated'),
|
||||
jobid: response.dedicatepodresponse.jobid,
|
||||
description: `Domain ID: ${this.dedicatedDomainId}`,
|
||||
description: `${this.$t('label.domainid')} : ${this.dedicatedDomainId}`,
|
||||
status: 'progress'
|
||||
})
|
||||
},
|
||||
errorMessage: 'Failed to dedicate pod',
|
||||
errorMessage: this.$t('error.dedicate.pod.failed'),
|
||||
errorMethod: () => {
|
||||
this.loading = false
|
||||
},
|
||||
loadingMessage: this.$t('message.dedicate.pod'),
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.dedicating.pod'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: `Error ${error.response.status}`,
|
||||
message: `${this.$t('label.error')} ${error.response.status}`,
|
||||
description: error.response.data.errorresponse.errortext,
|
||||
duration: 0
|
||||
})
|
||||
|
||||
@ -35,8 +35,8 @@
|
||||
<a-popconfirm
|
||||
:title="`${$t('label.delete')}?`"
|
||||
@confirm="handleDelete(record)"
|
||||
okText="Yes"
|
||||
cancelText="No"
|
||||
:okText="$t('label.yes')"
|
||||
:cancelText="$t('label.no')"
|
||||
placement="top"
|
||||
>
|
||||
<a-button :disabled="!('releaseDedicatedGuestVlanRange' in $store.getters.apis)" icon="delete" type="danger" shape="circle"></a-button>
|
||||
@ -49,7 +49,7 @@
|
||||
:current="page"
|
||||
:pageSize="pageSize"
|
||||
:total="totalCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100']"
|
||||
@change="handleChangePage"
|
||||
@showSizeChange="handleChangePageSize"
|
||||
@ -68,7 +68,7 @@
|
||||
<a-form-item :label="$t('label.vlanrange')">
|
||||
<a-input
|
||||
v-decorator="['range', {
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
></a-input>
|
||||
</a-form-item>
|
||||
@ -84,7 +84,7 @@
|
||||
<a-select
|
||||
@change="handleDomainChange"
|
||||
v-decorator="['domain', {
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
>
|
||||
<a-select-option v-for="domain in domains" :key="domain.id" :value="domain.id">{{ domain.name }}</a-select-option>
|
||||
@ -94,7 +94,7 @@
|
||||
<a-form-item :label="$t('label.account')" v-if="selectedScope === 'account'">
|
||||
<a-select
|
||||
v-decorator="['account', {
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
>
|
||||
<a-select-option
|
||||
@ -109,7 +109,7 @@
|
||||
<a-form-item :label="$t('label.project')" v-if="selectedScope === 'project'">
|
||||
<a-select
|
||||
v-decorator="['project', {
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
>
|
||||
<a-select-option
|
||||
@ -202,7 +202,7 @@ export default {
|
||||
this.totalCount = response.listdedicatedguestvlanrangesresponse.count || 0
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: `Error ${error.response.status}`,
|
||||
message: `${this.$t('label.error')} ${error.response.status}`,
|
||||
description: error.response.data.errorresponse.errortext,
|
||||
duration: 0
|
||||
})
|
||||
@ -286,7 +286,7 @@ export default {
|
||||
id: item.id
|
||||
}).then(response => {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: `Deleted dedicated VLAN/VNI range ${item.guestvlanrange} for ${item.account}`,
|
||||
title: `${this.$t('label.delete.dedicated.vlan.range')} ${item.guestvlanrange} ${this.$t('label.for')} ${item.account}`,
|
||||
jobid: response.releasededicatedguestvlanrangeresponse.jobid,
|
||||
status: 'progress'
|
||||
})
|
||||
@ -296,13 +296,13 @@ export default {
|
||||
this.fetchData()
|
||||
this.parentFinishLoading()
|
||||
},
|
||||
errorMessage: 'Deleting failed',
|
||||
errorMessage: this.$t('label.deleting.failed'),
|
||||
errorMethod: () => {
|
||||
this.fetchData()
|
||||
this.parentFinishLoading()
|
||||
},
|
||||
loadingMessage: `Deleting ${item.id}`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: `${this.$t('label.deleting')} ${item.id}`,
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.fetchData()
|
||||
this.parentFinishLoading()
|
||||
@ -310,7 +310,7 @@ export default {
|
||||
})
|
||||
}).catch(error => {
|
||||
console.log(error)
|
||||
this.$message.error('Failed to delete.')
|
||||
this.$message.error(this.$t('message.fail.to.delete'))
|
||||
this.fetchData()
|
||||
this.parentFinishLoading()
|
||||
})
|
||||
|
||||
@ -58,7 +58,7 @@
|
||||
:current="page"
|
||||
:pageSize="pageSize"
|
||||
:total="items.length"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100']"
|
||||
@change="changePage"
|
||||
@showSizeChange="changePageSize"
|
||||
@ -78,7 +78,7 @@
|
||||
<a-form-item :label="$t('label.podid')" class="form__item">
|
||||
<a-select
|
||||
v-decorator="['pod', {
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
>
|
||||
<a-select-option v-for="item in items" :key="item.id" :value="item.id">{{ item.name }}</a-select-option>
|
||||
@ -86,12 +86,12 @@
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.gateway')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['gateway', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['gateway', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.netmask')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['netmask', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['netmask', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.vlan')" class="form__item">
|
||||
@ -101,12 +101,12 @@
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.startip')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['startip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['startip', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.endip')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['endip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['endip', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.system.vms')" class="form__item">
|
||||
@ -249,7 +249,7 @@ export default {
|
||||
vlan: record.vlanid
|
||||
}).then(response => {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: `Successfully removed IP Range`,
|
||||
title: this.$t('message.success.remove.iprange'),
|
||||
jobid: response.deletemanagementnetworkiprangeresponse.jobid,
|
||||
status: 'progress'
|
||||
})
|
||||
@ -259,13 +259,13 @@ export default {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
},
|
||||
errorMessage: 'Removing failed',
|
||||
errorMessage: this.$t('message.remove.failed'),
|
||||
errorMethod: () => {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
},
|
||||
loadingMessage: `Removing IP Range...`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.remove.iprange.processing'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
@ -293,7 +293,7 @@ export default {
|
||||
vlan: values.vlan || null
|
||||
}).then(response => {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: `Successfully added IP Range`,
|
||||
title: this.$t('message.success.add.iprange'),
|
||||
jobid: response.createmanagementnetworkiprangeresponse.jobid,
|
||||
status: 'progress'
|
||||
})
|
||||
@ -303,13 +303,13 @@ export default {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
},
|
||||
errorMessage: 'Adding failed',
|
||||
errorMessage: this.$t('message.add.failed'),
|
||||
errorMethod: () => {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
},
|
||||
loadingMessage: `Adding IP Range...`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.add.iprange.processing'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
|
||||
@ -77,7 +77,7 @@
|
||||
:current="page"
|
||||
:pageSize="pageSize"
|
||||
:total="items.length"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100']"
|
||||
@change="changePage"
|
||||
@showSizeChange="changePageSize"
|
||||
@ -132,12 +132,12 @@
|
||||
>
|
||||
<a-form-item :label="$t('label.gateway')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['gateway', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['gateway', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.netmask')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['netmask', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['netmask', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.vlan')" class="form__item">
|
||||
@ -147,12 +147,12 @@
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.startip')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['startip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['startip', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.endip')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['endip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['endip', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<div class="form__item">
|
||||
@ -160,8 +160,7 @@
|
||||
<a-switch @change="handleShowAccountFields"></a-switch>
|
||||
</div>
|
||||
<div v-if="showAccountFields" style="margin-top: 20px;">
|
||||
<p>(optional) Please specify an account to be associated with this IP range.</p>
|
||||
<p>System VMs: Enable dedication of public IP range for SSVM and CPVM, account field disabled. Reservation strictness defined on 'system.vm.public.ip.reservation.mode.strictness'.</p>
|
||||
<div v-html="$t('label.set.reservation.desc')"></div>
|
||||
<a-form-item :label="$t('label.system.vms')" class="form__item">
|
||||
<a-switch v-decorator="['forsystemvms']"></a-switch>
|
||||
</a-form-item>
|
||||
@ -384,11 +383,11 @@ export default {
|
||||
forvirtualnetwork: true
|
||||
}).then(() => {
|
||||
this.$notification.success({
|
||||
message: 'Successfully added IP Range'
|
||||
message: this.$t('message.success.add.iprange')
|
||||
})
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: `Error ${error.response.status}`,
|
||||
message: `${this.$t('label.error')} ${error.response.status}`,
|
||||
description: error.response.data.createvlaniprangeresponse
|
||||
? error.response.data.createvlaniprangeresponse.errortext : error.response.data.errorresponse.errortext,
|
||||
duration: 0
|
||||
|
||||
@ -56,7 +56,7 @@
|
||||
:current="page"
|
||||
:pageSize="pageSize"
|
||||
:total="items.length"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100']"
|
||||
@change="changePage"
|
||||
@showSizeChange="changePageSize"
|
||||
@ -76,7 +76,7 @@
|
||||
<a-form-item :label="$t('label.podid')" class="form__item">
|
||||
<a-select
|
||||
v-decorator="['pod', {
|
||||
rules: [{ required: true, message: `${this.$t('label.required')}` }]
|
||||
rules: [{ required: true, message: `${$t('label.required')}` }]
|
||||
}]"
|
||||
>
|
||||
<a-select-option v-for="pod in pods" :key="pod.id" :value="pod.id">{{ pod.name }}</a-select-option>
|
||||
@ -84,12 +84,12 @@
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.gateway')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['gateway', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['gateway', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.netmask')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['netmask', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['netmask', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.vlan')" class="form__item">
|
||||
@ -99,12 +99,12 @@
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.startip')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['startip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['startip', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('label.endip')" class="form__item">
|
||||
<a-input
|
||||
v-decorator="['endip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
|
||||
v-decorator="['endip', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
@ -231,7 +231,7 @@ export default {
|
||||
this.componentLoading = true
|
||||
api('deleteStorageNetworkIpRange', { id }).then(response => {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: `Successfully removed IP Range`,
|
||||
title: this.$t('message.success.remove.iprange'),
|
||||
jobid: response.deletestoragenetworkiprangeresponse.jobid,
|
||||
status: 'progress'
|
||||
})
|
||||
@ -241,13 +241,13 @@ export default {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
},
|
||||
errorMessage: 'Removing failed',
|
||||
errorMessage: this.$t('message.remove.failed'),
|
||||
errorMethod: () => {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
},
|
||||
loadingMessage: `Removing IP Range...`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.remove.iprange.processing'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
@ -275,7 +275,7 @@ export default {
|
||||
vlan: values.vlan || null
|
||||
}).then(response => {
|
||||
this.$store.dispatch('AddAsyncJob', {
|
||||
title: `Successfully added IP Range`,
|
||||
title: this.$t('message.success.add.iprange'),
|
||||
jobid: response.createstoragenetworkiprangeresponse.jobid,
|
||||
status: 'progress'
|
||||
})
|
||||
@ -285,13 +285,13 @@ export default {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
},
|
||||
errorMessage: 'Adding failed',
|
||||
errorMessage: this.$t('message.add.failed'),
|
||||
errorMethod: () => {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
},
|
||||
loadingMessage: `Adding IP Range...`,
|
||||
catchMessage: 'Error encountered while fetching async job result',
|
||||
loadingMessage: this.$t('message.add.iprange.processing'),
|
||||
catchMessage: this.$t('error.fetching.async.job.result'),
|
||||
catchMethod: () => {
|
||||
this.componentLoading = false
|
||||
this.fetchData()
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
:key="item.title">
|
||||
<span slot="tab">
|
||||
{{ $t(item.title) }}
|
||||
<status :text="item.title in nsps ? nsps[item.title].state : 'Disabled'" style="margin-bottom: 6px; margin-left: 6px" />
|
||||
<status :text="item.title in nsps ? nsps[item.title].state : $t('label.disabled')" style="margin-bottom: 6px; margin-left: 6px" />
|
||||
</span>
|
||||
<provider-item
|
||||
v-if="tabKey===item.title"
|
||||
@ -1198,7 +1198,7 @@ export default {
|
||||
} catch (error) {
|
||||
this.actionLoading = false
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: error
|
||||
})
|
||||
}
|
||||
@ -1334,7 +1334,7 @@ export default {
|
||||
} catch (message) {
|
||||
this.actionLoading = false
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: message
|
||||
})
|
||||
}
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
:key="idx"
|
||||
style="margin-bottom: 10px;">
|
||||
<div><strong>{{ $t(type) }}</strong></div>
|
||||
<div>{{ item[type] || 'Use default gateway' }}</div>
|
||||
<div>{{ item[type] || $t('label.network.label.display.for.blank.value') }}</div>
|
||||
</div>
|
||||
<div v-if="item.traffictype === 'Public'">
|
||||
<div style="margin-bottom: 10px;">
|
||||
|
||||
@ -105,8 +105,8 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div :span="24" class="action-button">
|
||||
<a-button :loading="loading" @click="onCloseAction">{{ this.$t('Cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
|
||||
<a-button :loading="loading" @click="onCloseAction">{{ this.$t('label.cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('label.ok') }}</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
</div>
|
||||
@ -255,7 +255,7 @@ export default {
|
||||
} catch (error) {
|
||||
this.loading = false
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}
|
||||
|
||||
@ -129,8 +129,8 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div :span="24" class="action-button">
|
||||
<a-button :loading="loading" @click="onCloseAction">{{ this.$t('Cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
|
||||
<a-button :loading="loading" @click="onCloseAction">{{ this.$t('label.cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('label.ok') }}</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
</div>
|
||||
@ -290,7 +290,7 @@ export default {
|
||||
} catch (error) {
|
||||
this.loading = false
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}
|
||||
|
||||
@ -85,8 +85,8 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div :span="24" class="action-button">
|
||||
<a-button :loading="loading" @click="onCloseAction">{{ this.$t('Cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
|
||||
<a-button :loading="loading" @click="onCloseAction">{{ this.$t('label.cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('label.ok') }}</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
</div>
|
||||
@ -167,7 +167,7 @@ export default {
|
||||
} catch (error) {
|
||||
this.loading = false
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}
|
||||
|
||||
@ -152,8 +152,8 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div :span="24" class="action-button">
|
||||
<a-button :loading="loading" @click="onCloseAction">{{ this.$t('Cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
|
||||
<a-button :loading="loading" @click="onCloseAction">{{ this.$t('label.cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('label.ok') }}</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
</div>
|
||||
@ -379,7 +379,7 @@ export default {
|
||||
} catch (error) {
|
||||
this.loading = false
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}
|
||||
|
||||
@ -130,8 +130,8 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div :span="24" class="action-button">
|
||||
<a-button :loading="loading" @click="onCloseAction">{{ this.$t('Cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
|
||||
<a-button :loading="loading" @click="onCloseAction">{{ this.$t('label.cancel') }}</a-button>
|
||||
<a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('label.ok') }}</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
</div>
|
||||
@ -324,7 +324,7 @@ export default {
|
||||
} catch (error) {
|
||||
this.loading = false
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}
|
||||
|
||||
@ -196,7 +196,7 @@ export default {
|
||||
} catch (error) {
|
||||
this.listData[args.title].loading = false
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@
|
||||
:current="page"
|
||||
:pageSize="pageSize"
|
||||
:total="itemCount"
|
||||
:showTotal="total => `Total ${total} ${$t('label.items')}`"
|
||||
:showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
|
||||
:pageSizeOptions="['10', '20', '40', '80', '100']"
|
||||
@change="changePage"
|
||||
@showSizeChange="changePageSize"
|
||||
@ -301,7 +301,7 @@ export default {
|
||||
} catch (error) {
|
||||
this.actionLoading = false
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}
|
||||
@ -337,7 +337,7 @@ export default {
|
||||
} catch (error) {
|
||||
this.actionLoading = false
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}
|
||||
|
||||
@ -94,7 +94,7 @@ export default {
|
||||
},
|
||||
description: {
|
||||
type: String,
|
||||
default: 'Creating IP Ranges'
|
||||
default: 'label.creating.iprange'
|
||||
},
|
||||
isFixError: {
|
||||
type: Boolean,
|
||||
@ -142,7 +142,7 @@ export default {
|
||||
}
|
||||
if (!this.checkFromTo(values.vlanRangeStart, values.vlanRangeEnd)) {
|
||||
this.validStatus = 'error'
|
||||
this.validMessage = 'Please enter a valid VLAN/VNI range'
|
||||
this.validMessage = this.$t('message.error.vlan.range')
|
||||
return
|
||||
}
|
||||
if (this.isFixError) {
|
||||
@ -169,7 +169,7 @@ export default {
|
||||
}
|
||||
if (!this.checkFromTo(fromVal, toVal)) {
|
||||
this.validStatus = 'error'
|
||||
this.validMessage = 'Please enter a valid VLAN/VNI range'
|
||||
this.validMessage = this.$t('message.error.vlan.range')
|
||||
}
|
||||
callback()
|
||||
},
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
<a-form-item :style="{ display: 'inline-block', width: '14%' }">
|
||||
<a-input
|
||||
v-decorator="[ 'gateway', {
|
||||
rules: [{ required: true, message: 'Please enter Gateway' }]
|
||||
rules: [{ required: true, message: $t('message.error.gateway') }]
|
||||
}]"
|
||||
:placeholder="$t('label.gateway')"
|
||||
/>
|
||||
@ -47,7 +47,7 @@
|
||||
<a-form-item :style="{ display: 'inline-block', width: '14%' }">
|
||||
<a-input
|
||||
v-decorator="[ 'netmask', {
|
||||
rules: [{ required: true, message: 'Please enter Netmask' }]
|
||||
rules: [{ required: true, message: $t('message.error.netmask') }]
|
||||
}]"
|
||||
:placeholder="$t('label.netmask')"
|
||||
/>
|
||||
@ -64,12 +64,12 @@
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please enter Start IP'
|
||||
message: $t('message.error.startip')
|
||||
},
|
||||
{
|
||||
validator: checkIpFormat,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IPv4 address.'
|
||||
message: $t('message.error.ipv4.address')
|
||||
}
|
||||
]
|
||||
}]"
|
||||
@ -82,12 +82,12 @@
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please enter End IP'
|
||||
message: $t('message.error.endip')
|
||||
},
|
||||
{
|
||||
validator: checkIpFormat,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IPv4 address.'
|
||||
message: $t('message.error.ipv4.address')
|
||||
}]
|
||||
}]"
|
||||
:placeholder="$t('label.end.ip')"
|
||||
@ -130,7 +130,7 @@ export default {
|
||||
},
|
||||
description: {
|
||||
type: String,
|
||||
default: 'Creating IP Ranges'
|
||||
default: 'label.creating.iprange'
|
||||
},
|
||||
prefillContent: {
|
||||
type: Object,
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
rules: [
|
||||
{
|
||||
required: field.required,
|
||||
message: field.placeHolder,
|
||||
message: $t(field.placeHolder),
|
||||
initialValue: getPrefilled(field.key)
|
||||
}
|
||||
]
|
||||
@ -66,7 +66,7 @@
|
||||
rules: [
|
||||
{
|
||||
required: field.required,
|
||||
message: field.placeHolder,
|
||||
message: $t(field.placeHolder),
|
||||
initialValue: getPrefilled(field.key)
|
||||
}
|
||||
]
|
||||
@ -78,14 +78,14 @@
|
||||
rules: [
|
||||
{
|
||||
required: field.required,
|
||||
message: field.placeHolder,
|
||||
message: $t(field.placeHolder),
|
||||
initialValue: getPrefilled(field.key)
|
||||
},
|
||||
{
|
||||
validator: checkIpFormat,
|
||||
ipV4: field.ipV4,
|
||||
ipV6: field.ipV6,
|
||||
message: field.message
|
||||
message: $t(field.message)
|
||||
}
|
||||
]
|
||||
}]"
|
||||
@ -123,7 +123,7 @@ export default {
|
||||
},
|
||||
description: {
|
||||
type: String,
|
||||
default: 'Creating IP Ranges'
|
||||
default: 'label.creating.iprange'
|
||||
},
|
||||
isFixError: {
|
||||
type: Boolean,
|
||||
|
||||
@ -35,14 +35,14 @@
|
||||
</div>
|
||||
<div class="list__col">
|
||||
<div class="list__label">{{ $t('label.agentstate') }}</div>
|
||||
<div><status :text="vm.agentstate || 'Unknown'" displayText></status></div>
|
||||
<div><status :text="vm.agentstate || $t('label.unknown')" displayText></status></div>
|
||||
</div>
|
||||
<div class="list__col">
|
||||
<div class="list__label">
|
||||
{{ $t('label.type') }}
|
||||
</div>
|
||||
<div>
|
||||
{{ vm.systemvmtype == 'consoleproxy' ? 'Console Proxy VM' : 'Secondary Storage VM' }}
|
||||
{{ vm.systemvmtype == 'consoleproxy' ? $t('label.console.proxy.vm') : $t('label.secondary.storage.vm') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="list__col">
|
||||
|
||||
@ -104,32 +104,32 @@ export default {
|
||||
{
|
||||
title: 'label.zone.type',
|
||||
step: [],
|
||||
description: 'Select type of zone basic/advanced.',
|
||||
hint: 'This is the type of zone deployement that you want to use. Basic zone: provides a single network where each VM instance is assigned an IP directly from the network. Guest isolation can be provided through layer-3 means such as security groups (IP address source filtering). Advanced zone: For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks and providing custom network offerings such as firewall, VPN, or load balancer support.'
|
||||
description: this.$t('message.select.zone.description'),
|
||||
hint: this.$t('message.select.zone.hint')
|
||||
},
|
||||
{
|
||||
title: 'label.zone.details',
|
||||
step: ['stepAddZone', 'dedicateZone'],
|
||||
description: 'Populate zone details',
|
||||
hint: 'A zone is the largest organizational unit in CloudStack, and it typically corresponds to a single datacenter. Zones provide physical isolation and redundancy. A zone consists of one or more pods (each of which contains hosts and primary storage servers) and a secondary storage server which is shared by all pods in the zone.'
|
||||
description: this.$t('message.zone.detail.description'),
|
||||
hint: this.$t('message.zone.detail.hint')
|
||||
},
|
||||
{
|
||||
title: 'label.network',
|
||||
step: ['physicalNetwork', 'netscaler', 'pod', 'guestTraffic', 'storageTraffic', 'publicTraffic'],
|
||||
description: 'Setup network and traffic',
|
||||
hint: 'Configure network components and public/guest/management traffic including IP addresses.'
|
||||
description: this.$t('message.network.description'),
|
||||
hint: this.$t('message.network.hint')
|
||||
},
|
||||
{
|
||||
title: 'label.add.resources',
|
||||
step: ['clusterResource', 'hostResource', 'primaryResource', 'secondaryResource'],
|
||||
description: 'Add infrastructure resources',
|
||||
hint: 'Add infrastructure resources - pods, clusters, primary/secondary storages.'
|
||||
description: this.$t('message.add.resource.description'),
|
||||
hint: this.$t('message.add.resource.hint')
|
||||
},
|
||||
{
|
||||
title: 'label.launch',
|
||||
step: ['launchZone'],
|
||||
description: 'Zone is ready to launch; please proceed to the next step.',
|
||||
hint: 'Configure network components and traffic including IP addresses.'
|
||||
description: this.$t('message.launch.zone.description'),
|
||||
hint: this.$t('message.launch.zone.hint')
|
||||
}
|
||||
],
|
||||
zoneConfig: {}
|
||||
@ -155,7 +155,7 @@ export default {
|
||||
this.$emit('close-action')
|
||||
},
|
||||
onRefreshData () {
|
||||
this.$message.success('Processing complete!')
|
||||
this.$message.success(this.$t('message.processing.complete'))
|
||||
this.$emit('refresh-data')
|
||||
this.onCloseAction()
|
||||
},
|
||||
|
||||
@ -160,13 +160,13 @@ export default {
|
||||
{
|
||||
title: 'label.cluster.name',
|
||||
key: 'clusterName',
|
||||
placeHolder: 'Please enter cluster name',
|
||||
placeHolder: 'message.error.cluster.name',
|
||||
required: true
|
||||
},
|
||||
{
|
||||
title: 'label.vcenter.host',
|
||||
key: 'vCenterHost',
|
||||
placeHolder: 'Please enter vCenter Host',
|
||||
placeHolder: 'message.error.vcenter.host',
|
||||
required: true,
|
||||
display: {
|
||||
hypervisor: ['VMware', 'Ovm3']
|
||||
@ -175,7 +175,7 @@ export default {
|
||||
{
|
||||
title: 'label.vcenter.username',
|
||||
key: 'vCenterUsername',
|
||||
placeHolder: 'Please enter vCenter Username',
|
||||
placeHolder: 'message.error.vcenter.username',
|
||||
required: true,
|
||||
display: {
|
||||
hypervisor: ['VMware', 'Ovm3']
|
||||
@ -184,7 +184,7 @@ export default {
|
||||
{
|
||||
title: 'label.vcenter.password',
|
||||
key: 'vCenterPassword',
|
||||
placeHolder: 'Please enter vCenter Password',
|
||||
placeHolder: 'message.error.vcenter.password',
|
||||
required: true,
|
||||
password: true,
|
||||
display: {
|
||||
@ -194,7 +194,7 @@ export default {
|
||||
{
|
||||
title: 'label.vcenter.datacenter',
|
||||
key: 'vCenterDatacenter',
|
||||
placeHolder: 'Please enter vCenter Datacenter',
|
||||
placeHolder: 'message.error.vcenter.datacenter',
|
||||
required: true,
|
||||
display: {
|
||||
hypervisor: ['VMware', 'Ovm3']
|
||||
@ -221,7 +221,7 @@ export default {
|
||||
{
|
||||
title: 'label.cisco.nexus1000v.ip.address',
|
||||
key: 'vsmipaddress',
|
||||
placeHolder: 'Please enter Nexus 1000v IP Address',
|
||||
placeHolder: 'message.error.nexus1000v.ipaddess',
|
||||
required: false,
|
||||
display: {
|
||||
vSwitchEnabled: true
|
||||
@ -230,7 +230,7 @@ export default {
|
||||
{
|
||||
title: 'label.cisco.nexus1000v.username',
|
||||
key: 'vsmusername',
|
||||
placeHolder: 'Please enter Nexus 1000v Username',
|
||||
placeHolder: 'message.error.nexus1000v.username',
|
||||
required: false,
|
||||
display: {
|
||||
vSwitchEnabled: true
|
||||
@ -239,7 +239,7 @@ export default {
|
||||
{
|
||||
title: 'label.cisco.nexus1000v.password',
|
||||
key: 'vsmpassword',
|
||||
placeHolder: 'Please enter Nexus 1000v Password',
|
||||
placeHolder: 'message.error.nexus1000v.password',
|
||||
required: false,
|
||||
display: {
|
||||
vSwitchEnabled: true
|
||||
@ -252,7 +252,7 @@ export default {
|
||||
{
|
||||
title: 'label.host.name',
|
||||
key: 'hostName',
|
||||
placeHolder: 'Please enter host name',
|
||||
placeHolder: 'message.error.host.name',
|
||||
required: true,
|
||||
display: {
|
||||
hypervisor: ['VMware', 'BareMetal', 'Ovm', 'Hyperv', 'KVM', 'XenServer', 'LXC', 'Simulator']
|
||||
@ -261,7 +261,7 @@ export default {
|
||||
{
|
||||
title: 'label.username',
|
||||
key: 'hostUserName',
|
||||
placeHolder: 'Please enter host username',
|
||||
placeHolder: 'message.error.host.username',
|
||||
required: true,
|
||||
display: {
|
||||
hypervisor: ['VMware', 'BareMetal', 'Ovm', 'Hyperv', 'KVM', 'XenServer', 'LXC', 'Simulator']
|
||||
@ -270,7 +270,7 @@ export default {
|
||||
{
|
||||
title: 'label.password',
|
||||
key: 'hostPassword',
|
||||
placeHolder: 'Please enter host password',
|
||||
placeHolder: 'message.error.host.password',
|
||||
required: true,
|
||||
password: true,
|
||||
display: {
|
||||
@ -280,7 +280,7 @@ export default {
|
||||
{
|
||||
title: 'label.agent.username',
|
||||
key: 'agentUserName',
|
||||
placeHolder: 'Please enter Agent username',
|
||||
placeHolder: 'message.error.agent.username',
|
||||
required: false,
|
||||
defaultValue: 'Oracle',
|
||||
display: {
|
||||
@ -290,7 +290,7 @@ export default {
|
||||
{
|
||||
title: 'label.agent.password',
|
||||
key: 'agentPassword',
|
||||
placeHolder: 'Please enter Agent password',
|
||||
placeHolder: 'message.error.agent.password',
|
||||
required: true,
|
||||
password: true,
|
||||
display: {
|
||||
@ -300,7 +300,7 @@ export default {
|
||||
{
|
||||
title: 'label.tags',
|
||||
key: 'hostTags',
|
||||
placeHolder: 'Please enter host tags',
|
||||
placeHolder: 'message.error.host.tags',
|
||||
required: false
|
||||
}
|
||||
]
|
||||
@ -310,7 +310,7 @@ export default {
|
||||
{
|
||||
title: 'label.name',
|
||||
key: 'primaryStorageName',
|
||||
placeHolder: 'Please enter name',
|
||||
placeHolder: 'message.error.name',
|
||||
required: true
|
||||
},
|
||||
{
|
||||
@ -323,7 +323,7 @@ export default {
|
||||
{
|
||||
title: 'label.protocol',
|
||||
key: 'primaryStorageProtocol',
|
||||
placeHolder: 'Please select option',
|
||||
placeHolder: 'message.error.select',
|
||||
required: true,
|
||||
select: true,
|
||||
options: this.primaryStorageProtocols
|
||||
@ -331,7 +331,7 @@ export default {
|
||||
{
|
||||
title: 'label.server',
|
||||
key: 'primaryStorageServer',
|
||||
placeHolder: 'Please enter server',
|
||||
placeHolder: 'message.error.server',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: ['nfs', 'iscsi', 'gluster', 'SMB']
|
||||
@ -340,7 +340,7 @@ export default {
|
||||
{
|
||||
title: 'label.path',
|
||||
key: 'primaryStoragePath',
|
||||
placeHolder: 'Please enter path',
|
||||
placeHolder: 'message.error.path',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: ['nfs', 'SMB', 'SharedMountPoint', 'ocfs2']
|
||||
@ -349,7 +349,7 @@ export default {
|
||||
{
|
||||
title: 'label.SR.name',
|
||||
key: 'primaryStorageSRLabel',
|
||||
placeHolder: 'Please enter SR Name-Label',
|
||||
placeHolder: 'message.error.sr.namelabel',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: 'PreSetup'
|
||||
@ -358,7 +358,7 @@ export default {
|
||||
{
|
||||
title: 'label.target.iqn',
|
||||
key: 'primaryStorageTargetIQN',
|
||||
placeHolder: 'Please enter Target IQN',
|
||||
placeHolder: 'message.error.target.iqn',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: 'iscsi'
|
||||
@ -367,7 +367,7 @@ export default {
|
||||
{
|
||||
title: 'label.LUN.number',
|
||||
key: 'primaryStorageLUN',
|
||||
placeHolder: 'Please enter LUN #',
|
||||
placeHolder: 'message.error.lun',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: 'iscsi'
|
||||
@ -376,7 +376,7 @@ export default {
|
||||
{
|
||||
title: 'label.smb.domain',
|
||||
key: 'primaryStorageSMBDomain',
|
||||
placeHolder: 'Please enter SMB Domain',
|
||||
placeHolder: 'message.error.sbdomain',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: 'SMB'
|
||||
@ -385,7 +385,7 @@ export default {
|
||||
{
|
||||
title: 'label.smb.username',
|
||||
key: 'primaryStorageSMBUsername',
|
||||
placeHolder: 'Please enter SMB Username',
|
||||
placeHolder: 'message.error.sbdomain.username',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: 'SMB'
|
||||
@ -394,7 +394,7 @@ export default {
|
||||
{
|
||||
title: 'label.smb.password',
|
||||
key: 'primaryStorageSMBPassword',
|
||||
placeHolder: 'Please enter SMB Password',
|
||||
placeHolder: 'message.error.sbdomain.password',
|
||||
required: true,
|
||||
password: true,
|
||||
display: {
|
||||
@ -404,7 +404,7 @@ export default {
|
||||
{
|
||||
title: 'label.rados.monitor',
|
||||
key: 'primaryStorageRADOSMonitor',
|
||||
placeHolder: 'Please enter RADOS Monitor',
|
||||
placeHolder: 'message.error.rados.monitor',
|
||||
required: false,
|
||||
display: {
|
||||
primaryStorageProtocol: ['rbd']
|
||||
@ -413,7 +413,7 @@ export default {
|
||||
{
|
||||
title: 'label.rados.pool',
|
||||
key: 'primaryStorageRADOSPool',
|
||||
placeHolder: 'Please enter RADOS Pool',
|
||||
placeHolder: 'message.error.rados.pool',
|
||||
required: false,
|
||||
display: {
|
||||
primaryStorageProtocol: ['rbd']
|
||||
@ -422,7 +422,7 @@ export default {
|
||||
{
|
||||
title: 'label.rados.user',
|
||||
key: 'primaryStorageRADOSUser',
|
||||
placeHolder: 'Please enter RADOS User',
|
||||
placeHolder: 'message.error.rados.user',
|
||||
required: false,
|
||||
display: {
|
||||
primaryStorageProtocol: ['rbd']
|
||||
@ -431,7 +431,7 @@ export default {
|
||||
{
|
||||
title: 'label.rados.secret',
|
||||
key: 'primaryStorageRADOSSecret',
|
||||
placeHolder: 'Please enter RADOS Secret',
|
||||
placeHolder: 'message.error.rados.secret',
|
||||
required: false,
|
||||
display: {
|
||||
primaryStorageProtocol: ['rbd']
|
||||
@ -440,7 +440,7 @@ export default {
|
||||
{
|
||||
title: 'label.volgroup',
|
||||
key: 'primaryStorageVolumeGroup',
|
||||
placeHolder: 'Please enter Volume Group',
|
||||
placeHolder: 'message.error.volumne.group',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: 'clvm'
|
||||
@ -449,7 +449,7 @@ export default {
|
||||
{
|
||||
title: 'label.volume',
|
||||
key: 'primaryStorageVolume',
|
||||
placeHolder: 'Please enter Volume',
|
||||
placeHolder: 'message.error.volumne',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: 'gluster'
|
||||
@ -458,7 +458,7 @@ export default {
|
||||
{
|
||||
title: 'label.vcenter.datacenter',
|
||||
key: 'primaryStorageVmfsDatacenter',
|
||||
placeHolder: 'Please enter vCenter Datacenter',
|
||||
placeHolder: 'message.error.vcenter.datacenter',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: 'vmfs'
|
||||
@ -467,7 +467,7 @@ export default {
|
||||
{
|
||||
title: 'label.vcenter.datastore',
|
||||
key: 'primaryStorageVmfsDatastore',
|
||||
placeHolder: 'Please enter vCenter Datastore',
|
||||
placeHolder: 'message.error.vcenter.datastore',
|
||||
required: true,
|
||||
display: {
|
||||
primaryStorageProtocol: 'vmfs'
|
||||
@ -476,7 +476,7 @@ export default {
|
||||
{
|
||||
title: 'label.storage.tags',
|
||||
key: 'primaryStorageTags',
|
||||
placeHolder: 'Please enter storage tags',
|
||||
placeHolder: 'message.error.storage.tags',
|
||||
required: false
|
||||
}
|
||||
]
|
||||
@ -502,7 +502,7 @@ export default {
|
||||
title: 'label.server',
|
||||
key: 'secondaryStorageServer',
|
||||
required: true,
|
||||
placeHolder: 'Please enter Server',
|
||||
placeHolder: 'message.error.server',
|
||||
display: {
|
||||
secondaryStorageProvider: ['NFS', 'SMB']
|
||||
}
|
||||
@ -511,7 +511,7 @@ export default {
|
||||
title: 'label.path',
|
||||
key: 'secondaryStoragePath',
|
||||
required: true,
|
||||
placeHolder: 'Please enter Path',
|
||||
placeHolder: 'message.error.path',
|
||||
display: {
|
||||
secondaryStorageProvider: ['NFS', 'SMB']
|
||||
}
|
||||
@ -520,7 +520,7 @@ export default {
|
||||
title: 'label.smb.domain',
|
||||
key: 'secondaryStorageSMBDomain',
|
||||
required: true,
|
||||
placeHolder: 'Please enter SMB Domain',
|
||||
placeHolder: 'message.error.sbdomain',
|
||||
display: {
|
||||
secondaryStorageProvider: ['SMB']
|
||||
}
|
||||
@ -529,7 +529,7 @@ export default {
|
||||
title: 'label.smb.username',
|
||||
key: 'secondaryStorageSMBUsername',
|
||||
required: true,
|
||||
placeHolder: 'Please enter SMB Username',
|
||||
placeHolder: 'message.error.smb.username',
|
||||
display: {
|
||||
secondaryStorageProvider: ['SMB']
|
||||
}
|
||||
@ -539,7 +539,7 @@ export default {
|
||||
key: 'secondaryStorageSMBPassword',
|
||||
required: true,
|
||||
password: true,
|
||||
placeHolder: 'Please enter SMB Password',
|
||||
placeHolder: 'message.error.smb.password',
|
||||
display: {
|
||||
secondaryStorageProvider: ['SMB']
|
||||
}
|
||||
@ -548,7 +548,7 @@ export default {
|
||||
title: 'label.s3.access_key',
|
||||
key: 'secondaryStorageAccessKey',
|
||||
required: true,
|
||||
placeHolder: 'Please enter Access Key',
|
||||
placeHolder: 'message.error.access.key',
|
||||
display: {
|
||||
secondaryStorageProvider: ['S3']
|
||||
}
|
||||
@ -557,7 +557,7 @@ export default {
|
||||
title: 'label.s3.secret_key',
|
||||
key: 'secondaryStorageSecretKey',
|
||||
required: true,
|
||||
placeHolder: 'Please enter Secret Key',
|
||||
placeHolder: 'message.error.secret.key',
|
||||
display: {
|
||||
secondaryStorageProvider: ['S3']
|
||||
}
|
||||
@ -566,7 +566,7 @@ export default {
|
||||
title: 'label.s3.bucket',
|
||||
key: 'secondaryStorageBucket',
|
||||
required: true,
|
||||
placeHolder: 'Please enter Bucket',
|
||||
placeHolder: 'message.error.bucket',
|
||||
display: {
|
||||
secondaryStorageProvider: ['S3']
|
||||
}
|
||||
@ -626,7 +626,7 @@ export default {
|
||||
title: 'label.s3.nfs.server',
|
||||
key: 'secondaryStorageNFSServer',
|
||||
required: true,
|
||||
placeHolder: 'Please enter S3 NFS Server',
|
||||
placeHolder: 'message.error.s3nfs.server',
|
||||
display: {
|
||||
secondaryStorageProvider: ['S3']
|
||||
}
|
||||
@ -635,7 +635,7 @@ export default {
|
||||
title: 'label.s3.nfs.path',
|
||||
key: 'secondaryStorageNFSPath',
|
||||
required: true,
|
||||
placeHolder: 'Please enter S3 NFS Path',
|
||||
placeHolder: 'message.error.s3nfs.path',
|
||||
display: {
|
||||
secondaryStorageProvider: ['S3']
|
||||
}
|
||||
@ -644,7 +644,7 @@ export default {
|
||||
title: 'label.url',
|
||||
key: 'secondaryStorageURL',
|
||||
required: true,
|
||||
placeHolder: 'Please enter URL',
|
||||
placeHolder: 'message.error.url',
|
||||
display: {
|
||||
secondaryStorageProvider: ['Swift']
|
||||
}
|
||||
|
||||
@ -1533,7 +1533,7 @@ export default {
|
||||
} catch (e) {
|
||||
this.loading = false
|
||||
await this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
message: this.$t('message.request.failed'),
|
||||
description: e
|
||||
})
|
||||
}
|
||||
@ -1587,7 +1587,7 @@ export default {
|
||||
if (jobId) {
|
||||
const result = await this.pollJob(jobId)
|
||||
if (result.jobstatus === 2) {
|
||||
message = 'createPhysicalNetwork failed. Error: ' + result.jobresult.errortext
|
||||
message = `createPhysicalNetwork ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
@ -1616,7 +1616,9 @@ export default {
|
||||
const result = await this.pollJob(jobId)
|
||||
if (result.jobstatus === 2) {
|
||||
this.setStepStatus(STATUS_FAILED)
|
||||
message = 'Failed to add ' + trafficType + ' traffic type to basic zone. Error: ' + result.jobresult.errortext
|
||||
message = `${this.$t('message.failed.to.add')} ` + trafficType +
|
||||
` ${this.$t('message.traffic.type.to.basic.zone')}. ${this.$t('label.error')}: ` +
|
||||
result.jobresult.errortext
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
@ -1637,7 +1639,7 @@ export default {
|
||||
if (jobId) {
|
||||
const result = await this.pollJob(jobId)
|
||||
if (result.jobstatus === 2) {
|
||||
message = 'updatePhysicalNetwork failed. Error:' + result.jobresult.errortext
|
||||
message = `updatePhysicalNetwork ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
@ -1660,7 +1662,7 @@ export default {
|
||||
providerId = items[0].id
|
||||
}
|
||||
if (!type && providerId == null) {
|
||||
message = 'error: listNetworkServiceProviders API doesn\'t return VirtualRouter provider ID'
|
||||
message = this.$t('message.listnsp.not.return.providerid')
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
@ -1682,7 +1684,7 @@ export default {
|
||||
virtualRouterElementId = items[0].id
|
||||
}
|
||||
if (virtualRouterElementId === null) {
|
||||
message = 'error: listVirtualRouterElements API doesn\'t return Virtual Router Element Id'
|
||||
message = this.$t('message.virtual.router.not.return.elementid')
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
@ -1705,7 +1707,7 @@ export default {
|
||||
if (jobId) {
|
||||
const result = await this.pollJob(jobId)
|
||||
if (result.jobstatus === 2) {
|
||||
message = 'configureVirtualRouterElement failed. Error: ' + result.jobresult.errortext
|
||||
message = `configureVirtualRouterElement ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
@ -1730,13 +1732,13 @@ export default {
|
||||
if (jobId) {
|
||||
const result = await this.pollJob(jobId)
|
||||
if (result.jobstatus === 2) {
|
||||
message = 'updateNetworkServiceProvider failed. Error: '
|
||||
message = `updateNetworkServiceProvider ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: `
|
||||
switch (type) {
|
||||
case 'netscalerProvider':
|
||||
message = 'failed to enable Netscaler provider. Error: '
|
||||
message = `${this.$t('message.enable.netsacler.provider.failed')}. ${this.$t('label.error')}: `
|
||||
break
|
||||
case 'enableSecurityGroupProvider':
|
||||
message = 'failed to enable security group provider. Error: '
|
||||
message = `${this.$t('message.enable.securitygroup.provider.failed')}. ${this.$t('label.error')}: `
|
||||
break
|
||||
}
|
||||
message += result.jobresult.errortext
|
||||
@ -1777,7 +1779,7 @@ export default {
|
||||
if (jobId) {
|
||||
const result = await this.pollJob(jobId)
|
||||
if (result.jobstatus === 2) {
|
||||
message = 'configureOvsElement failed. Error: ' + result.jobresult.errortext
|
||||
message = `configureOvsElement ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
@ -1800,7 +1802,7 @@ export default {
|
||||
internalLbElementId = items[0].id
|
||||
}
|
||||
if (internalLbElementId == null) {
|
||||
message = 'error: listInternalLoadBalancerElements API doesn\'t return Internal LB Element Id'
|
||||
message = this.$t('message.interloadbalance.not.return.elementid')
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
@ -1819,7 +1821,7 @@ export default {
|
||||
if (jobId) {
|
||||
const result = await this.pollJob(jobId)
|
||||
if (result.jobstatus === 2) {
|
||||
message = 'configureVirtualRouterElement failed. Error: ' + result.jobresult.errortext
|
||||
message = `configureVirtualRouterElement ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
@ -1840,7 +1842,7 @@ export default {
|
||||
if (jobId) {
|
||||
const result = await this.pollJob(jobId)
|
||||
if (result.jobstatus === 2) {
|
||||
message = 'addNetworkServiceProvider&name=Netscaler failed. Error: ' + result.jobresult.errortext
|
||||
message = `addNetworkServiceProvider&name=Netscaler ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
@ -2006,7 +2008,7 @@ export default {
|
||||
if (jobId) {
|
||||
const result = await this.pollJob(jobId)
|
||||
if (result.jobstatus === 2) {
|
||||
message = 'addNetscalerDevice' + result.jobresult.errortext
|
||||
message = 'addNetscalerDevice ' + result.jobresult.errortext
|
||||
reject(message)
|
||||
return
|
||||
}
|
||||
|
||||
@ -199,7 +199,7 @@ export default {
|
||||
key: 'netscalerIp',
|
||||
required: false,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: 'message.error.ipv4.address'
|
||||
},
|
||||
{
|
||||
title: 'label.username',
|
||||
@ -240,14 +240,14 @@ export default {
|
||||
key: 'gslbproviderpublicip',
|
||||
required: false,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: 'message.error.ipv4.address'
|
||||
},
|
||||
{
|
||||
title: 'label.gslb.service.private.ip',
|
||||
key: 'gslbproviderprivateip',
|
||||
required: false,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: 'message.error.ipv4.address'
|
||||
},
|
||||
{
|
||||
title: 'label.numretries',
|
||||
@ -305,7 +305,7 @@ export default {
|
||||
placeHolder: 'message.installwizard.tooltip.addpod.reservedsystemstartip',
|
||||
required: true,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: 'message.error.ipv4.address'
|
||||
},
|
||||
{
|
||||
title: 'label.end.reserved.system.ip',
|
||||
@ -313,7 +313,7 @@ export default {
|
||||
placeHolder: 'message.installwizard.tooltip.addpod.reservedsystemendip',
|
||||
required: false,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: 'message.error.ipv4.address'
|
||||
}
|
||||
],
|
||||
guestTrafficFields: [
|
||||
@ -335,7 +335,7 @@ export default {
|
||||
placeHolder: 'message.installwizard.tooltip.configureguesttraffic.gueststartip',
|
||||
required: false,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: 'message.error.ipv4.address'
|
||||
},
|
||||
{
|
||||
title: 'label.guest.end.ip',
|
||||
@ -343,7 +343,7 @@ export default {
|
||||
placeHolder: 'message.installwizard.tooltip.configureguesttraffic.guestendip',
|
||||
required: false,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: 'message.error.ipv4.address'
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
<a-card
|
||||
class="ant-form-text"
|
||||
style="text-align: justify; margin: 10px 0; padding: 20px;"
|
||||
v-html="zoneType !== null ? $t(zoneDescription[zoneType]) : 'Please select zone type below.'">
|
||||
v-html="zoneType !== null ? $t(zoneDescription[zoneType]) : $t('message.error.select.zone.type')">
|
||||
</a-card>
|
||||
<a-table
|
||||
bordered
|
||||
@ -68,13 +68,13 @@
|
||||
centered
|
||||
>
|
||||
<a-form :form="form">
|
||||
<span class="ant-form-text"> Please specify the traffic label you want associated with this traffic type. </span>
|
||||
<span class="ant-form-text"> {{ $t('message.edit.traffic.type') }} </span>
|
||||
<a-form-item v-bind="formItemLayout" style="margin-top:16px;" :label="$t('label.traffic.label')">
|
||||
<a-input
|
||||
v-decorator="['trafficLabel', {
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'Please enter traffic label',
|
||||
message: $t('message.error.traffic.label'),
|
||||
}]
|
||||
}]"
|
||||
/>
|
||||
@ -148,7 +148,7 @@
|
||||
</div>
|
||||
<a-modal
|
||||
:visible="showError"
|
||||
title="Error!"
|
||||
:title="`${$t('label.error')}!`"
|
||||
@ok="() => { showError = false }"
|
||||
@cancel="() => { showError = false }"
|
||||
centered
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
v-decorator="['name', {
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'Please enter zone name',
|
||||
message: $t('message.error.zone.name'),
|
||||
initialValue: name
|
||||
}]
|
||||
}]"
|
||||
@ -46,13 +46,13 @@
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please enter IpV4 DNS 1',
|
||||
message: $t('message.error.ipv4.dns1'),
|
||||
initialValue: ipv4Dns1
|
||||
},
|
||||
{
|
||||
validator: checkIpFormat,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: $t('message.error.ipv4.address')
|
||||
}
|
||||
]
|
||||
}]"
|
||||
@ -66,13 +66,13 @@
|
||||
v-decorator="['ipv4Dns2', {
|
||||
rules: [
|
||||
{
|
||||
message: 'Please enter IpV4 DNS 2',
|
||||
message: $t('message.error.ipv4.dns2'),
|
||||
initialValue: ipv4Dns2
|
||||
},
|
||||
{
|
||||
validator: checkIpFormat,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: $t('message.error.ipv4.address')
|
||||
}
|
||||
]
|
||||
}]"
|
||||
@ -87,13 +87,13 @@
|
||||
v-decorator="['ipv6Dns1', {
|
||||
rules: [
|
||||
{
|
||||
message: 'Please enter IpV6 DNS 1',
|
||||
message: $t('message.error.ipv6.dns1'),
|
||||
initialValue: ipv6Dns1
|
||||
},
|
||||
{
|
||||
validator: checkIpFormat,
|
||||
ipV6: true,
|
||||
message: 'Please enter a valid IP v6 address.'
|
||||
message: $t('message.error.ipv6.address')
|
||||
}
|
||||
]
|
||||
}]"
|
||||
@ -108,13 +108,13 @@
|
||||
v-decorator="['ipv6Dns2', {
|
||||
rules: [
|
||||
{
|
||||
message: 'Please enter IpV6 DNS 2',
|
||||
message: $t('message.error.ipv6.dns2'),
|
||||
initialValue: ipv6Dns2
|
||||
},
|
||||
{
|
||||
validator: checkIpFormat,
|
||||
ipV6: true,
|
||||
message: 'Please enter a valid IP v6 address.'
|
||||
message: $t('message.error.ipv6.address')
|
||||
}
|
||||
]
|
||||
}]"
|
||||
@ -129,7 +129,7 @@
|
||||
v-decorator="['ipv6Cidr', {
|
||||
rules: [
|
||||
{
|
||||
message: 'Please enter IpV6 CIDR',
|
||||
message: $t('message.error.ipv6.cidr'),
|
||||
initialValue: ip6cidr
|
||||
}
|
||||
]
|
||||
@ -145,13 +145,13 @@
|
||||
v-decorator="['ip6gateway', {
|
||||
rules: [
|
||||
{
|
||||
message: 'Please enter IpV6 Gateway',
|
||||
message: $t('message.error.ipv6.gateway'),
|
||||
initialValue: ip6gateway
|
||||
},
|
||||
{
|
||||
validator: checkIpFormat,
|
||||
ipV6: true,
|
||||
message: 'Please enter a valid IPv6 Gatweay.'
|
||||
message: $t('message.error.ipv6.gateway.format')
|
||||
}
|
||||
]
|
||||
}]"
|
||||
@ -166,13 +166,13 @@
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please enter Internal DNS 1',
|
||||
message: $t('message.error.internal.dns1'),
|
||||
initialValue: internalDns1
|
||||
},
|
||||
{
|
||||
validator: checkIpFormat,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: $t('message.error.ipv4.address')
|
||||
}
|
||||
]
|
||||
}]"
|
||||
@ -186,13 +186,13 @@
|
||||
v-decorator="['internalDns2', {
|
||||
rules: [
|
||||
{
|
||||
message: 'Please enter Internal DNS 2',
|
||||
message: $t('message.error.internal.dns2'),
|
||||
initialValue: internalDns2
|
||||
},
|
||||
{
|
||||
validator: checkIpFormat,
|
||||
ipV4: true,
|
||||
message: 'Please enter a valid IP v4 address.'
|
||||
message: $t('message.error.ipv4.address')
|
||||
}
|
||||
]
|
||||
}]"
|
||||
@ -208,11 +208,11 @@
|
||||
v-decorator="['hypervisor',{
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'Please select hypervisor type',
|
||||
message: $t('message.error.hypervisor.type'),
|
||||
initialValue: currentHypervisor
|
||||
}]
|
||||
}]"
|
||||
placeholder="Please select hypervisor type"
|
||||
:placeholder="$t('message.error.hypervisor.type')"
|
||||
>
|
||||
<a-select-option v-for="hypervisor in hypervisors" :key="hypervisor.name">
|
||||
{{ hypervisor.name }}
|
||||
@ -228,11 +228,11 @@
|
||||
:loading="availableNetworkOfferings === null"
|
||||
v-decorator="['networkOfferingId', {
|
||||
rules: [{
|
||||
message: 'Please select network offering',
|
||||
message: $t('message.error.network.offering'),
|
||||
initialValue: currentNetworkOfferingId
|
||||
}]
|
||||
}]"
|
||||
placeholder="Please select network offering"
|
||||
:placeholder="$t('message.error.network.offering')"
|
||||
>
|
||||
<a-select-option
|
||||
v-for="networkOffering in availableNetworkOfferings"
|
||||
@ -248,7 +248,7 @@
|
||||
<a-input
|
||||
v-decorator="['networkDomain', {
|
||||
rules: [{
|
||||
message: 'Please enter Network domain',
|
||||
message: $t('message.error.network.domain'),
|
||||
intialValue: networkDomain
|
||||
}]
|
||||
}]"
|
||||
@ -287,7 +287,7 @@
|
||||
initialValue: domain
|
||||
}]
|
||||
}]"
|
||||
placeholder="Please select domain to dedicate to"
|
||||
:placeholder="$t('message.error.select.domain.to.dedicate')"
|
||||
>
|
||||
<a-select-option v-for="dom in domains" :key="dom.id">
|
||||
{{ dom.path }}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user