mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
UI: Move Backup Repository to Infrastructure (from Configuration) (#11738)
* UI: Move Backup Repository to Infrastructure (from Configuration) * Updated nas doc help link
This commit is contained in:
parent
67250d99d4
commit
df49c4f14b
@ -59,6 +59,7 @@ import org.apache.cloudstack.api.response.StoragePoolResponse;
|
|||||||
import org.apache.cloudstack.api.response.UserVmResponse;
|
import org.apache.cloudstack.api.response.UserVmResponse;
|
||||||
import org.apache.cloudstack.api.response.VolumeResponse;
|
import org.apache.cloudstack.api.response.VolumeResponse;
|
||||||
import org.apache.cloudstack.api.response.ZoneResponse;
|
import org.apache.cloudstack.api.response.ZoneResponse;
|
||||||
|
import org.apache.cloudstack.backup.dao.BackupRepositoryDao;
|
||||||
import org.apache.cloudstack.cluster.ClusterDrsAlgorithm;
|
import org.apache.cloudstack.cluster.ClusterDrsAlgorithm;
|
||||||
import org.apache.cloudstack.context.CallContext;
|
import org.apache.cloudstack.context.CallContext;
|
||||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||||
@ -158,6 +159,8 @@ public class MetricsServiceImpl extends MutualExclusiveIdsManagerBase implements
|
|||||||
@Inject
|
@Inject
|
||||||
private ImageStoreDao imageStoreDao;
|
private ImageStoreDao imageStoreDao;
|
||||||
@Inject
|
@Inject
|
||||||
|
BackupRepositoryDao backupRepositoryDao;
|
||||||
|
@Inject
|
||||||
private VMInstanceDao vmInstanceDao;
|
private VMInstanceDao vmInstanceDao;
|
||||||
@Inject
|
@Inject
|
||||||
private DomainRouterDao domainRouterDao;
|
private DomainRouterDao domainRouterDao;
|
||||||
@ -557,6 +560,7 @@ public class MetricsServiceImpl extends MutualExclusiveIdsManagerBase implements
|
|||||||
response.setHosts(hostCountAndCpuSockets.first());
|
response.setHosts(hostCountAndCpuSockets.first());
|
||||||
response.setStoragePools(storagePoolDao.countAll());
|
response.setStoragePools(storagePoolDao.countAll());
|
||||||
response.setImageStores(imageStoreDao.countAllImageStores());
|
response.setImageStores(imageStoreDao.countAllImageStores());
|
||||||
|
response.setBackupRepositories(backupRepositoryDao.countAll());
|
||||||
response.setObjectStores(objectStoreDao.countAllObjectStores());
|
response.setObjectStores(objectStoreDao.countAllObjectStores());
|
||||||
response.setSystemvms(vmInstanceDao.countByTypes(VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm));
|
response.setSystemvms(vmInstanceDao.countByTypes(VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm));
|
||||||
response.setRouters(domainRouterDao.countAllByRole(VirtualRouter.Role.VIRTUAL_ROUTER));
|
response.setRouters(domainRouterDao.countAllByRole(VirtualRouter.Role.VIRTUAL_ROUTER));
|
||||||
|
|||||||
@ -47,6 +47,10 @@ public class InfrastructureResponse extends BaseResponse {
|
|||||||
@Param(description = "Number of images stores")
|
@Param(description = "Number of images stores")
|
||||||
private Integer imageStores;
|
private Integer imageStores;
|
||||||
|
|
||||||
|
@SerializedName("backuprepositories")
|
||||||
|
@Param(description = "Number of backup repositories", since = "4.22.0")
|
||||||
|
private Integer backupRepositories;
|
||||||
|
|
||||||
@SerializedName("objectstores")
|
@SerializedName("objectstores")
|
||||||
@Param(description = "Number of object stores")
|
@Param(description = "Number of object stores")
|
||||||
private Integer objectStores;
|
private Integer objectStores;
|
||||||
@ -103,6 +107,10 @@ public class InfrastructureResponse extends BaseResponse {
|
|||||||
this.imageStores = imageStores;
|
this.imageStores = imageStores;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setBackupRepositories(Integer backupRepositories) {
|
||||||
|
this.backupRepositories = backupRepositories;
|
||||||
|
}
|
||||||
|
|
||||||
public void setSystemvms(final Integer systemvms) {
|
public void setSystemvms(final Integer systemvms) {
|
||||||
this.systemvms = systemvms;
|
this.systemvms = systemvms;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -133,52 +133,6 @@ export default {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: 'backuprepository',
|
|
||||||
title: 'label.backup.repository',
|
|
||||||
icon: 'inbox-outlined',
|
|
||||||
docHelp: 'adminguide/backup_and_recovery.html',
|
|
||||||
permission: ['listBackupRepositories'],
|
|
||||||
searchFilters: ['zoneid'],
|
|
||||||
columns: ['name', 'provider', 'type', 'address', 'zonename'],
|
|
||||||
details: ['name', 'type', 'address', 'provider', 'zonename', 'crosszoneinstancecreation'],
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
api: 'addBackupRepository',
|
|
||||||
icon: 'plus-outlined',
|
|
||||||
label: 'label.backup.repository.add',
|
|
||||||
listView: true,
|
|
||||||
args: [
|
|
||||||
'name', 'provider', 'address', 'type', 'mountopts', 'zoneid', 'crosszoneinstancecreation'
|
|
||||||
],
|
|
||||||
mapping: {
|
|
||||||
type: {
|
|
||||||
options: ['nfs', 'cifs', 'ceph']
|
|
||||||
},
|
|
||||||
provider: {
|
|
||||||
value: (record) => { return 'nas' }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
api: 'updateBackupRepository',
|
|
||||||
icon: 'edit-outlined',
|
|
||||||
label: 'label.backup.repository.edit',
|
|
||||||
message: 'message.action.edit.backup.repository',
|
|
||||||
args: ['name', 'address', 'mountopts', 'crosszoneinstancecreation'],
|
|
||||||
dataView: true,
|
|
||||||
popup: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
api: 'deleteBackupRepository',
|
|
||||||
icon: 'delete-outlined',
|
|
||||||
label: 'label.backup.repository.remove',
|
|
||||||
message: 'message.action.delete.backup.repository',
|
|
||||||
dataView: true,
|
|
||||||
popup: true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: 'hypervisorcapability',
|
name: 'hypervisorcapability',
|
||||||
title: 'label.hypervisor.capabilities',
|
title: 'label.hypervisor.capabilities',
|
||||||
|
|||||||
@ -23,6 +23,7 @@ import clusters from '@/config/section/infra/clusters'
|
|||||||
import hosts from '@/config/section/infra/hosts'
|
import hosts from '@/config/section/infra/hosts'
|
||||||
import primaryStorages from '@/config/section/infra/primaryStorages'
|
import primaryStorages from '@/config/section/infra/primaryStorages'
|
||||||
import secondaryStorages from '@/config/section/infra/secondaryStorages'
|
import secondaryStorages from '@/config/section/infra/secondaryStorages'
|
||||||
|
import backupRepositories from '@/config/section/infra/backupRepositories'
|
||||||
import objectStorages from '@/config/section/infra/objectStorages'
|
import objectStorages from '@/config/section/infra/objectStorages'
|
||||||
import systemVms from '@/config/section/infra/systemVms'
|
import systemVms from '@/config/section/infra/systemVms'
|
||||||
import routers from '@/config/section/infra/routers'
|
import routers from '@/config/section/infra/routers'
|
||||||
@ -50,6 +51,7 @@ export default {
|
|||||||
hosts,
|
hosts,
|
||||||
primaryStorages,
|
primaryStorages,
|
||||||
secondaryStorages,
|
secondaryStorages,
|
||||||
|
backupRepositories,
|
||||||
objectStorages,
|
objectStorages,
|
||||||
systemVms,
|
systemVms,
|
||||||
routers,
|
routers,
|
||||||
|
|||||||
63
ui/src/config/section/infra/backupRepositories.js
Normal file
63
ui/src/config/section/infra/backupRepositories.js
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
// Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
// or more contributor license agreements. See the NOTICE file
|
||||||
|
// distributed with this work for additional information
|
||||||
|
// regarding copyright ownership. The ASF licenses this file
|
||||||
|
// to you under the Apache License, Version 2.0 (the
|
||||||
|
// "License"); you may not use this file except in compliance
|
||||||
|
// with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing,
|
||||||
|
// software distributed under the License is distributed on an
|
||||||
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
// KIND, either express or implied. See the License for the
|
||||||
|
// specific language governing permissions and limitations
|
||||||
|
// under the License.
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'backuprepository',
|
||||||
|
title: 'label.backup.repository',
|
||||||
|
icon: 'inbox-outlined',
|
||||||
|
docHelp: 'adminguide/nas_plugin.html',
|
||||||
|
permission: ['listBackupRepositories'],
|
||||||
|
searchFilters: ['zoneid'],
|
||||||
|
columns: ['name', 'provider', 'type', 'address', 'zonename'],
|
||||||
|
details: ['name', 'type', 'address', 'provider', 'zonename', 'crosszoneinstancecreation'],
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
api: 'addBackupRepository',
|
||||||
|
icon: 'plus-outlined',
|
||||||
|
label: 'label.backup.repository.add',
|
||||||
|
listView: true,
|
||||||
|
args: [
|
||||||
|
'name', 'provider', 'address', 'type', 'mountopts', 'zoneid', 'crosszoneinstancecreation'
|
||||||
|
],
|
||||||
|
mapping: {
|
||||||
|
type: {
|
||||||
|
options: ['nfs', 'cifs', 'ceph']
|
||||||
|
},
|
||||||
|
provider: {
|
||||||
|
value: (record) => { return 'nas' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
api: 'updateBackupRepository',
|
||||||
|
icon: 'edit-outlined',
|
||||||
|
label: 'label.backup.repository.edit',
|
||||||
|
message: 'message.action.edit.backup.repository',
|
||||||
|
args: ['name', 'address', 'mountopts', 'crosszoneinstancecreation'],
|
||||||
|
dataView: true,
|
||||||
|
popup: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
api: 'deleteBackupRepository',
|
||||||
|
icon: 'delete-outlined',
|
||||||
|
label: 'label.backup.repository.remove',
|
||||||
|
message: 'message.action.delete.backup.repository',
|
||||||
|
dataView: true,
|
||||||
|
popup: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -156,7 +156,7 @@
|
|||||||
v-if="routes[section]">
|
v-if="routes[section]">
|
||||||
<chart-card :loading="loading">
|
<chart-card :loading="loading">
|
||||||
<div class="chart-card-inner">
|
<div class="chart-card-inner">
|
||||||
<router-link :to="{ name: section.substring(0, section.length - 1) }">
|
<router-link :to="{ name: section === 'backuprepositories' ? 'backuprepository' : section.substring(0, section.length - 1) }">
|
||||||
<h2>{{ $t(routes[section].title) }}</h2>
|
<h2>{{ $t(routes[section].title) }}</h2>
|
||||||
<h2><render-icon :icon="routes[section].icon" /> {{ stats[section] }}</h2>
|
<h2><render-icon :icon="routes[section].icon" /> {{ stats[section] }}</h2>
|
||||||
</router-link>
|
</router-link>
|
||||||
@ -187,7 +187,7 @@ export default {
|
|||||||
return {
|
return {
|
||||||
loading: true,
|
loading: true,
|
||||||
routes: {},
|
routes: {},
|
||||||
sections: ['zones', 'pods', 'clusters', 'hosts', 'storagepools', 'imagestores', 'objectstores', 'systemvms', 'routers', 'cpusockets', 'managementservers', 'alerts', 'ilbvms', 'metrics'],
|
sections: ['zones', 'pods', 'clusters', 'hosts', 'storagepools', 'imagestores', 'backuprepositories', 'objectstores', 'systemvms', 'routers', 'cpusockets', 'managementservers', 'alerts', 'ilbvms', 'metrics'],
|
||||||
sslFormVisible: false,
|
sslFormVisible: false,
|
||||||
stats: {},
|
stats: {},
|
||||||
intermediateCertificates: [],
|
intermediateCertificates: [],
|
||||||
@ -216,10 +216,11 @@ export default {
|
|||||||
fetchData () {
|
fetchData () {
|
||||||
this.routes = {}
|
this.routes = {}
|
||||||
for (const section of this.sections) {
|
for (const section of this.sections) {
|
||||||
if (router.resolve('/' + section.substring(0, section.length - 1)).matched[0].redirect === '/exception/404') {
|
const route = section === 'backuprepositories' ? 'backuprepository' : section.substring(0, section.length - 1)
|
||||||
|
if (router.resolve('/' + route).matched[0].redirect === '/exception/404') {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
const node = router.resolve({ name: section.substring(0, section.length - 1) })
|
const node = router.resolve({ name: route })
|
||||||
this.routes[section] = {
|
this.routes[section] = {
|
||||||
title: node.meta.title,
|
title: node.meta.title,
|
||||||
icon: node.meta.icon
|
icon: node.meta.icon
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user