mirror of https://github.com/apache/cloudstack.git
NE: UI cleanup
This commit is contained in:
parent
eb300ca1e7
commit
cc3049d91d
|
|
@ -1096,6 +1096,7 @@
|
|||
"label.external.details.tooltip": "Details that will be passed to the external provisioner while deploying an instance",
|
||||
"label.externalprovisioner": "External provisioner",
|
||||
"label.external.link": "External link",
|
||||
"label.external.network.provider": "External Network Provider",
|
||||
"label.externalid": "External Id",
|
||||
"label.externalloadbalanceripaddress": "External load balancer IP address.",
|
||||
"label.extra": "Extra arguments",
|
||||
|
|
@ -4241,21 +4242,5 @@
|
|||
"Compute*Month": "Compute * Month",
|
||||
"GB*Month": "GB * Month",
|
||||
"IP*Month": "IP * Month",
|
||||
"Policy*Month": "Policy * Month",
|
||||
"ExternalNetwork": "External Network",
|
||||
"label.external.network": "External Network",
|
||||
"label.external.network.provider": "External Network Provider",
|
||||
"label.extension": "Extension",
|
||||
"label.services": "Services",
|
||||
"label.add.external.network.provider": "Add External Network Provider",
|
||||
"label.not.added": "Not Added",
|
||||
"label.refresh": "Refresh",
|
||||
"label.run.action": "Run Action",
|
||||
"label.enable.provider": "Enable Provider",
|
||||
"label.disable.provider": "Disable Provider",
|
||||
"label.external.network.service": "External Network Service",
|
||||
"message.confirm.disable.external.network.provider": "Are you sure you want to disable the External Network provider?",
|
||||
"message.no.network.orchestrator.extensions": "No NetworkOrchestrator extensions found. Please create one first via createExtension API.",
|
||||
"message.extension.services.from.capabilities": "Services are derived automatically from the extension's network.service.capabilities detail.",
|
||||
"message.select.extension": "Please select an extension."
|
||||
"Policy*Month": "Policy * Month"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ export default {
|
|||
{
|
||||
api: 'runCustomAction',
|
||||
icon: 'thunderbolt-outlined',
|
||||
label: 'label.run.action',
|
||||
label: 'label.run.custom.action',
|
||||
dataView: true,
|
||||
show: (record) => {
|
||||
return 'runCustomAction' in store.getters.apis &&
|
||||
|
|
|
|||
|
|
@ -18,16 +18,6 @@
|
|||
<template>
|
||||
<div>
|
||||
<a-spin :spinning="fetchLoading">
|
||||
<!-- Add Extension Provider button: only shown when extension is registered but NSP not yet created -->
|
||||
<a-button
|
||||
v-if="isExtensionTab && !nsps[tabKey]"
|
||||
:disabled="!('addNetworkServiceProvider' in $store.getters.apis)"
|
||||
type="dashed"
|
||||
style="width: 100%; margin-bottom: 12px;"
|
||||
@click="handleAddExternalNetworkProvider">
|
||||
<template #icon><plus-outlined /></template>
|
||||
{{ $t('label.add.external.network.provider') }}
|
||||
</a-button>
|
||||
<a-tabs
|
||||
:tabPosition="device === 'mobile' ? 'top' : 'left'"
|
||||
:animated="false"
|
||||
|
|
@ -75,44 +65,6 @@
|
|||
</a-tabs>
|
||||
</a-spin>
|
||||
|
||||
<!-- Add External Network Provider modal: selects extension (services come from extension capabilities) -->
|
||||
<a-modal
|
||||
:visible="showAddExtNetProviderModal"
|
||||
:title="$t('label.add.external.network.provider')"
|
||||
:maskClosable="false"
|
||||
:footer="null"
|
||||
@cancel="showAddExtNetProviderModal = false">
|
||||
<a-spin :spinning="extensionProviderLoading">
|
||||
<a-form layout="vertical">
|
||||
<a-form-item :label="$t('label.extension')">
|
||||
<a-select
|
||||
v-model:value="extNetProviderForm.extensionId"
|
||||
showSearch
|
||||
optionFilterProp="label"
|
||||
:filterOption="(input, option) => option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0">
|
||||
<a-select-option
|
||||
v-for="ext in availableExtensions"
|
||||
:key="ext.id"
|
||||
:value="ext.id"
|
||||
:label="ext.name">
|
||||
{{ ext.name }} <span style="color: #aaa">({{ ext.state }})</span>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
<div v-if="availableExtensions.length === 0" style="color: #faad14; margin-top: 4px;">
|
||||
{{ $t('message.no.network.orchestrator.extensions') }}
|
||||
</div>
|
||||
<div v-else style="color: #8c8c8c; font-size: 12px; margin-top: 4px;">
|
||||
{{ $t('message.extension.services.from.capabilities') }}
|
||||
</div>
|
||||
</a-form-item>
|
||||
<div class="action-button">
|
||||
<a-button @click="showAddExtNetProviderModal = false">{{ $t('label.cancel') }}</a-button>
|
||||
<a-button type="primary" :disabled="!extNetProviderForm.extensionId" @click="handleAddExtNetProvider">{{ $t('label.ok') }}</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
|
||||
<div v-if="showFormAction">
|
||||
<keep-alive v-if="currentAction.component">
|
||||
<a-modal
|
||||
|
|
@ -241,12 +193,6 @@ export default {
|
|||
showFormAction: false,
|
||||
currentAction: {},
|
||||
tabKey: 'BaremetalDhcpProvider',
|
||||
showAddExtNetProviderModal: false,
|
||||
extensionProviderLoading: false,
|
||||
availableExtensions: [],
|
||||
extNetProviderForm: {
|
||||
extensionId: null
|
||||
},
|
||||
registeredExtensions: []
|
||||
}
|
||||
},
|
||||
|
|
@ -1223,56 +1169,9 @@ export default {
|
|||
this.form = reactive({})
|
||||
this.rules = reactive({})
|
||||
},
|
||||
handleAddExternalNetworkProvider () {
|
||||
// Open the extension picker modal — services come from extension capabilities
|
||||
this.extNetProviderForm = { extensionId: null }
|
||||
this.extensionProviderLoading = true
|
||||
this.showAddExtNetProviderModal = true
|
||||
getAPI('listExtensions', { type: 'NetworkOrchestrator' }).then(json => {
|
||||
this.availableExtensions = (json.listextensionsresponse && json.listextensionsresponse.extension) || []
|
||||
if (this.availableExtensions.length > 0) {
|
||||
this.extNetProviderForm.extensionId = this.availableExtensions[0].id
|
||||
}
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
}).finally(() => {
|
||||
this.extensionProviderLoading = false
|
||||
})
|
||||
},
|
||||
_updateServicesFromExtension (extensionId) {
|
||||
// No longer needed — services are derived from extension capabilities server-side
|
||||
},
|
||||
async handleAddExtNetProvider () {
|
||||
if (this.extensionProviderLoading) return
|
||||
const extensionId = this.extNetProviderForm.extensionId
|
||||
if (!extensionId) {
|
||||
this.$message.error(this.$t('message.select.extension'))
|
||||
return
|
||||
}
|
||||
const ext = this.availableExtensions.find(e => e.id === extensionId)
|
||||
const extName = ext ? ext.name : ''
|
||||
if (!extName) {
|
||||
this.$message.error(this.$t('message.select.extension'))
|
||||
return
|
||||
}
|
||||
|
||||
this.extensionProviderLoading = true
|
||||
try {
|
||||
// registerExtension auto-creates the NSP (Enabled) with services from network.service.capabilities
|
||||
await postAPI('registerExtension', {
|
||||
extensionid: extensionId,
|
||||
resourceid: this.resource.id,
|
||||
resourcetype: 'PhysicalNetwork'
|
||||
})
|
||||
this.$message.success(this.$t('label.add.external.network.provider') + ': ' + extName)
|
||||
this.showAddExtNetProviderModal = false
|
||||
this.fetchData()
|
||||
} catch (error) {
|
||||
this.$notifyError(error)
|
||||
} finally {
|
||||
this.extensionProviderLoading = false
|
||||
}
|
||||
},
|
||||
fetchData () {
|
||||
if (!this.resource || !('id' in this.resource)) {
|
||||
return
|
||||
|
|
|
|||
|
|
@ -138,15 +138,6 @@
|
|||
<a-select-option key="" >{{ }}</a-select-option>
|
||||
<a-select-option :value="'NSX'" :label="$t('label.nsx')"> {{ $t('label.nsx') }} </a-select-option>
|
||||
<a-select-option :value="'Netris'" :label="$t('label.netris')"> {{ $t('label.netris') }} </a-select-option>
|
||||
<!-- Dynamic extension-based providers registered to guest physical networks.
|
||||
The value is the extension/NSP name so the provider is correctly resolved. -->
|
||||
<a-select-option
|
||||
v-for="ext in availableExtensionProviders"
|
||||
:key="ext.name"
|
||||
:value="ext.name"
|
||||
:label="ext.name">
|
||||
{{ ext.name }} <span style="color: #aaa">({{ $t('label.external.network.provider') }})</span>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
|
|
|||
|
|
@ -86,15 +86,6 @@
|
|||
<a-select-option key="" >{{ }}</a-select-option>
|
||||
<a-select-option :value="'NSX'" :label="$t('label.nsx')"> {{ $t('label.nsx') }} </a-select-option>
|
||||
<a-select-option :value="'Netris'" :label="$t('label.netris')"> {{ $t('label.netris') }} </a-select-option>
|
||||
<!-- Dynamic extension-based providers registered to guest physical networks.
|
||||
The value is the extension/NSP name for correct provider resolution. -->
|
||||
<a-select-option
|
||||
v-for="ext in availableExtensionProviders"
|
||||
:key="ext.name"
|
||||
:value="ext.name"
|
||||
:label="ext.name">
|
||||
{{ ext.name }} <span style="color: #aaa">({{ $t('label.external.network.provider') }})</span>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
|
@ -161,8 +152,8 @@
|
|||
<CheckBoxSelectPair
|
||||
:resourceKey="item.name"
|
||||
:checkBoxLabel="item.description"
|
||||
:forExternalNetProvider="form.provider === 'NSX' || form.provider === 'Netris' || isExternalNetworkProvider"
|
||||
:defaultCheckBoxValue="form.provider === 'NSX' || form.provider === 'Netris' || isExternalNetworkProvider"
|
||||
:forExternalNetProvider="form.provider === 'NSX' || form.provider === 'Netris'"
|
||||
:defaultCheckBoxValue="form.provider === 'NSX' || form.provider === 'Netris'"
|
||||
:selectOptions="item.provider"
|
||||
@handle-checkselectpair-change="handleSupportedServiceChange"/>
|
||||
</a-list-item>
|
||||
|
|
|
|||
Loading…
Reference in New Issue