skyline/src/layouts/menu.jsx
zhangjingwei 6fa7e0fb7c feat: support fwaas v2
Support pages and actions for the fwaas v2 service.

Change-Id: Ieecd972ac2c5e9934bba9160681c4e390dc126dc
2024-05-07 15:43:02 +08:00

843 lines
24 KiB
JavaScript

// Copyright 2021 99cloud
//
// Licensed 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.
import React from 'react';
import {
DesktopOutlined,
DatabaseOutlined,
GlobalOutlined,
// ToolOutlined,
HomeOutlined,
DatabaseFilled,
AppstoreOutlined,
SwitcherOutlined,
ContainerOutlined,
} from '@ant-design/icons';
const renderMenu = (t) => {
if (!t) {
return [];
}
const menu = [
{
path: '/base/overview',
name: t('Home'),
key: 'overview',
icon: <HomeOutlined />,
level: 0,
hasBreadcrumb: false,
hasChildren: false,
},
{
path: '/compute',
name: t('Compute'),
key: 'compute',
icon: <DesktopOutlined />,
children: [
{
path: '/compute/instance',
name: t('Instances'),
key: 'instance',
level: 1,
children: [
{
path: /^\/compute\/instance\/detail\/.[^/]+$/,
name: t('Instance Detail'),
key: 'instanceDetail',
level: 2,
routePath: '/compute/instance/detail/:id',
},
{
path: '/compute/instance/create',
name: t('Create Instance'),
key: 'instanceCreate',
level: 2,
},
{
path: '/compute/ironic-instance/create',
name: t('Create Ironic Instance'),
key: 'ironicCreate',
level: 2,
},
],
},
{
path: '/compute/instance-snapshot',
name: t('Instance Snapshots'),
key: 'instanceSnapshot',
level: 1,
children: [
{
path: /^\/compute\/instance-snapshot\/detail\/[^/]+$/,
name: t('Instance Snapshot Detail'),
key: 'instanceSnapshotDetail',
level: 2,
routePath: '/compute/instance-snapshot/detail/:id',
},
],
},
{
path: '/compute/flavor',
name: t('Flavors'),
key: 'flavor',
level: 1,
children: [
{
path: /^\/compute\/flavor\/detail\/.[^/]+$/,
name: t('Flavor Detail'),
key: 'flavorDetail',
level: 2,
routePath: '/compute/flavor/detail/:id',
},
],
},
{
path: '/compute/server-group',
name: t('Server Groups'),
key: 'serverGroup',
level: 1,
children: [
{
path: /^\/compute\/server-group\/detail\/.[^/]+$/,
name: t('Server Group Detail'),
key: 'serverGroupDetail',
level: 2,
routePath: '/compute/server-group/detail/:id',
},
],
},
{
path: '/compute/image',
name: t('Images'),
key: 'image',
level: 1,
children: [
{
path: /^\/compute\/image\/detail\/.[^/]+$/,
name: t('Image Detail'),
key: 'imageDetail',
level: 2,
routePath: '/compute/image/detail/:id',
},
{
path: '/compute/image/create',
name: t('Create Image'),
key: 'imageCreate',
level: 2,
},
],
},
{
path: '/compute/keypair',
name: t('Key Pairs'),
key: 'keypair',
level: 1,
children: [
{
path: /^\/compute\/keypair\/detail\/.[^/]*$/,
name: t('Keypair Detail'),
key: 'keypairDetail',
level: 2,
routePath: '/compute/keypair/detail/:id',
},
],
},
],
},
{
path: '/storage',
name: t('Storage'),
key: 'storage',
icon: <DatabaseOutlined />,
children: [
{
path: '/storage/volume',
name: t('Volumes'),
key: 'volume',
level: 1,
endpoints: 'cinder',
children: [
{
path: '/storage/volume/create',
name: t('Create Volume'),
key: 'volumeCreate',
level: 2,
},
{
path: /^\/storage\/volume\/detail\/.[^/]+$/,
name: t('Volume Detail'),
key: 'volumeDetail',
level: 2,
routePath: '/storage/volume/detail/:id',
},
],
},
{
path: '/storage/backup',
name: t('Volume Backups'),
key: 'backup',
level: 1,
endpoints: 'cinder',
children: [
{
path: /^\/storage\/backup\/detail\/.[^/]+$/,
name: t('Volume Backup Detail'),
key: 'backupDetail',
level: 2,
routePath: '/storage/backup/detail/:id',
},
],
},
{
path: '/storage/snapshot',
name: t('Volume Snapshots'),
key: 'snapshot',
level: 1,
endpoints: 'cinder',
children: [
{
path: /^\/storage\/snapshot\/detail\/.[^/]+$/,
name: t('Volume Snapshot Detail'),
key: 'snapshotDetail',
level: 2,
routePath: '/storage/snapshot/detail/:id',
},
],
},
{
path: '/storage/container',
name: t('Object Storage'),
key: 'containers',
endpoints: 'swift',
level: 1,
children: [
{
path: /^\/storage\/container\/detail\/[^/]+$/,
name: t('Container Detail'),
key: 'containerDetail',
level: 2,
routePath: '/storage/container/detail/:id',
},
{
path: /^\/storage\/container\/detail\/[^/]+\/.+$/,
name: t('Folder Detail'),
key: 'folderDetail',
level: 2,
routePath: '/storage/container/detail/:container/:folder',
},
],
},
],
},
{
path: '/network',
name: t('Network'),
key: '/network',
icon: <GlobalOutlined />,
children: [
{
path: '/network/networks',
name: t('Networks'),
key: 'network',
level: 1,
children: [
{
path: /^\/network\/networks\/detail\/.[^/]+$/,
name: t('Network Detail'),
key: 'networkDetail',
level: 2,
routePath: '/network/networks/detail/:id',
},
{
path: /^\/network\/networks\/detail\/.[^/]+\/subnet\/.[^/]+$/,
name: t('Subnet Detail'),
key: 'subnetDetail',
level: 2,
routePath: '/network/networks/detail/:networkId/subnet/:id',
},
],
},
{
path: '/network/port',
name: t('Ports'),
key: 'port',
level: 1,
children: [
{
path: /^\/network\/port\/detail\/.[^/]+$/,
name: t('Port Detail'),
key: 'portDetail',
level: 2,
routePath: '/network/port/detail/:id',
},
{
path: /^\/network\/networks\/detail\/.[^/]+\/port\/.[^/]+$/,
name: t('Port Detail'),
key: 'networkPortDetail',
level: 2,
routePath: '/network/networks/detail/:networkId/port/:id',
},
{
path: /^\/network\/networks\/detail\/.[^/]+\/subnet\/.[^/]+\/port\/.[^/]+$/,
name: t('Port Detail'),
key: 'subnetPortDetail',
level: 2,
routePath:
'/network/networks/detail/:networkId/subnet/:subnetId/port/:id',
},
{
path: /^\/network\/instance\/detail\/.[^/]+\/port\/.[^/]+$/,
name: t('Port Detail'),
key: 'instancePortDetail',
level: 2,
routePath: '/network/instance/detail/:instanceId/port/:id',
},
],
},
{
path: '/network/qos-policy',
name: t('QoS Policies'),
key: 'networkQos',
endpoints: 'neutron_qos',
level: 1,
children: [
{
path: /^\/network\/qos-policy\/detail\/.[^/]+$/,
name: t('QoS Policy Detail'),
key: 'networkQosDetail',
level: 2,
routePath: '/network/qos-policy/detail/:id',
},
],
},
{
path: '/network/router',
name: t('Routers'),
key: 'router',
level: 1,
children: [
{
path: /^\/network\/router\/detail\/.[^/]+$/,
name: t('Router Detail'),
key: 'routerDetail',
level: 2,
routePath: '/network/router/detail/:id',
},
{
path: /^\/network\/router\/.[^/]+\/port\/.[^/]+$/,
name: t('Port Detail'),
key: 'routerPortDetail',
level: 2,
routePath: '/network/router/:routerId/port/:id',
},
],
},
{
path: '/network/floatingip',
name: t('Floating IPs'),
key: 'fip',
level: 1,
children: [
{
path: /^\/network\/floatingip\/detail\/.[^/]+$/,
name: t('Floating Ip Detail'),
key: 'fipDetail',
level: 2,
routePath: '/network/floatingip/detail/:id',
},
],
},
{
path: '/network/topo',
name: t('Topology'),
key: 'networkTopo',
level: 1,
children: [],
},
{
path: '/network/load-balancers',
name: t('Load Balancers'),
key: 'lb',
endpoints: 'octavia',
level: 1,
children: [
{
path: '/network/load-balancers/create',
name: t('Create Loadbalancer'),
key: 'lbCreate',
level: 2,
},
{
path: /^\/network\/load-balancers\/detail\/.[^/]+$/,
name: t('Load Balancer Detail'),
key: 'lbDetail',
level: 2,
routePath: '/network/load-balancers/detail/:id',
},
{
path: /^\/network\/load-balancers\/.[^/]+\/listener\/.[^/]+$/,
name: t('Listener Detail'),
key: 'lbListenerDetail',
level: 2,
routePath: '/network/load-balancers/:loadBalancerId/listener/:id',
},
],
},
{
path: '/network/certificate',
name: t('Certificates'),
key: 'certificate',
endpoints: 'barbican',
level: 1,
children: [
{
path: /^\/network\/certificate-container\/detail\/.[^/]+$/,
name: t('Certificate Detail'),
key: 'certificateContainerDetail',
level: 2,
routePath: '/network/certificate-container/detail/:id',
},
{
path: /^\/network\/certificate-secret\/detail\/.[^/]+$/,
name: t('Certificate Detail'),
key: 'certificateSecretDetail',
level: 2,
routePath: '/network/certificate-secret/detail/:id',
},
],
},
{
path: '/network/vpn',
name: t('VPNs'),
key: 'vpn',
endpoints: 'neutron_vpn',
level: 1,
children: [
{
path: /^\/network\/ipsec-site-connection\/detail\/.[^/]+$/,
name: t('IPsec site connection Detail'),
key: 'ipsecDetail',
level: 2,
routePath: '/network/ipsec-site-connection/detail/:id',
},
],
},
{
path: '/network/security-group',
name: t('Security Groups'),
key: 'securityGroup',
level: 1,
children: [
{
path: /^\/network\/security-group\/detail\/.[^/]+$/,
name: t('Security Group Detail'),
key: 'securityGroupDetail',
level: 2,
routePath: '/network/security-group/detail/:id',
},
],
},
{
path: '/network/firewall',
name: t('Firewalls'),
key: 'firewall',
level: 1,
endpoints: 'neutron_firewall',
children: [
{
path: /^\/network\/firewall-policy\/detail\/[^/]+$/,
name: t('Policy Detail'),
key: 'firewallPolicyDetail',
level: 2,
routePath: '/network/firewall-policy/detail/:id',
},
{
path: '/network/firewall-rule/create',
name: t('Create Rule'),
key: 'firewallRuleCreate',
level: 2,
},
{
path: '/network/firewall-policy/add',
name: t('Add Policy'),
key: 'firewallPolicyCreate',
level: 2,
},
{
path: '/network/firewall/create',
name: t('Create Firewall'),
key: 'firewallCreate',
level: 2,
},
{
path: /^\/network\/firewall\/[^/]+\/port\/[^/]+$/,
name: t('Firewall Port'),
key: 'firewallPortDetail',
level: 2,
routePath: '/network/firewall/:firewallId/port/:portId',
},
{
path: /^\/network\/firewall-rule\/edit\/[^/]+$/,
name: t('Rule Edit'),
key: 'firewallRuleEdit',
level: 2,
routePath: '/network/firewall-rule/edit/:id',
},
{
path: /^\/network\/firewall\/detail\/[^/]+$/,
name: t('Firewall Detail'),
key: 'firewallDetail',
level: 2,
routePath: '/network/firewall/detail/:id',
},
{
path: /^\/network\/firewall-rule\/detail\/[^/]+$/,
name: t('Rule Detail'),
key: 'firewallRuleDetail',
level: 2,
routePath: '/network/firewall-rule/detail/:id',
},
{
path: /^\/network\/firewall-policy\/edit\/[^/]+$/,
name: t('Policy Edit'),
key: 'firewallPolicyEdit',
level: 2,
routePath: '/network/firewall-policy/edit/:id',
},
],
},
{
path: '/network/dns/zones',
name: t('DNS Zones'),
key: 'dnsZones',
endpoints: 'designate',
level: 1,
children: [
{
path: /^\/network\/dns\/zones\/detail\/.[^/]+$/,
name: t('Zones Detail'),
key: 'dnsZonesDetail',
level: 2,
routePath: '/network/dns/zones/detail/:id',
},
{
path: /^\/network\/dns\/zones\/detail\/.[^/]+\/recordsets\/.[^/]+$/,
name: t('Recordsets Detail'),
key: 'dnsRecordSetDetail',
level: 2,
routePath: '/network/dns/zones/detail/:zoneId/recordsets/:id',
},
],
},
{
path: '/network/dns/reverse',
name: t('DNS Reverse'),
key: 'dnsReverse',
endpoints: 'designate',
level: 1,
children: [
{
path: /^\/network\/dns\/reverse\/detail\/.[^/]+$/,
name: t('Reverse DNS Detail'),
key: 'dnsReverseDetail',
level: 2,
routePath: '/network/dns/reverse/detail/:id',
},
],
},
],
},
{
path: '/share',
name: t('Share File Storage'),
key: 'fileStorage',
endpoints: 'manilav2',
icon: <SwitcherOutlined />,
children: [
{
path: '/share/share',
name: t('Shares'),
key: 'share',
level: 1,
children: [
{
path: /^\/share\/share\/detail\/.[^/]+$/,
name: t('Share Detail'),
key: 'shareDetail',
level: 2,
routePath: '/share/share/detail/:id',
},
{
path: '/share/share/create',
name: t('Create Share'),
key: 'shareCreate',
level: 2,
},
],
},
{
path: '/share/share-network',
name: t('Share Networks'),
key: 'shareNetwork',
level: 1,
children: [
{
path: /^\/share\/share-network\/detail\/.[^/]+$/,
name: t('Share Network Detail'),
key: 'shareNetworkDetail',
level: 2,
routePath: '/share/share-network/detail/:id',
},
],
},
{
path: '/share/share-group',
name: t('Share Groups'),
key: 'shareGroup',
level: 1,
children: [
{
path: /^\/share\/share-group\/detail\/.[^/]+$/,
name: t('Share Group Detail'),
key: 'shareGroupDetail',
level: 2,
routePath: '/share/share-group/detail/:id',
},
],
},
],
},
// {
// path: '/management',
// name: t('Maintenance'),
// key: '/management',
// icon: <ToolOutlined />,
// children: [
// {
// path: '/management/recycle-bin',
// name: t('Recycle Bin'),
// key: 'recycleBin',
// level: 1,
// children: [
// {
// path: /^\/management\/recycle-bin\/detail\/.[^/]+$/,
// name: t('Instance Detail'),
// key: 'recycleBinDetail',
// level: 2,
// routePath: '/management/recycle-bin/detail/:id',
// },
// ],
// },
// ],
// },
{
path: '/heat',
name: t('Orchestration'),
key: 'heat',
endpoints: 'heat',
icon: <AppstoreOutlined />,
children: [
{
path: '/heat/stack',
name: t('Stacks'),
key: 'stack',
level: 1,
children: [
{
path: /^\/heat\/stack\/detail\/.[^/]+\/.[^/]+$/,
name: t('Stack Detail'),
key: 'stackDetail',
level: 2,
routePath: '/heat/stack/detail/:id/:name',
},
{
path: '/heat/stack/create',
name: t('Create Stack'),
key: 'stackCreate',
level: 2,
},
{
path: /^\/heat\/stack\/edit\/.[^/]+\/.[^/]+$/,
name: t('Update Template'),
key: 'stackEdit',
level: 2,
routePath: '/heat/stack/edit/:id/:name',
},
],
},
],
},
{
path: '/database',
name: t('Database'),
key: 'database',
endpoints: 'trove',
icon: <DatabaseFilled />,
children: [
{
path: '/database/instances',
name: t('Database Instances'),
key: 'databaseInstances',
level: 1,
children: [
{
path: /^\/database\/instances\/detail\/.[^/]+$/,
name: t('Database Instance Detail'),
key: 'databaseInstanceDetail',
level: 2,
routePath: '/database/instances/detail/:id',
},
{
path: '/database/instances/create',
name: t('Create Database Instance'),
key: 'databaseInstanceCreate',
level: 2,
},
],
},
{
path: '/database/backups',
name: t('Backups'),
key: 'databaseBackups',
level: 1,
children: [
{
path: /^\/database\/backup\/detail\/.[^/]+$/,
name: t('Backup Detail'),
key: 'databaseBackupDetail',
level: 2,
routePath: '/database/backups/detail/:id',
},
],
},
{
path: '/database/configurations',
name: t('Configuration Groups'),
key: 'configurations',
level: 1,
children: [
{
path: /^\/database\/configuration\/detail\/.[^/]+$/,
name: t('Configuration Detail'),
key: 'configurationsDetail',
level: 2,
routePath: '/database/configurations/detail/:id',
},
],
},
],
},
{
path: '/container',
name: t('Container'),
key: 'container',
icon: <ContainerOutlined />,
children: [
{
path: '/container-service/containers',
name: t('Containers'),
key: 'zunContainers',
endpoints: 'zun',
level: 1,
children: [
{
path: '/container-service/containers/create',
name: t('Create Container'),
key: 'zunContainersCreateContainer',
level: 2,
},
{
path: /^\/container-service\/containers\/detail\/.[^/]+$/,
name: t('Container Detail'),
key: 'zunContainerDetail',
level: 2,
routePath: '/container-service/containers/detail/:id',
},
],
},
{
path: '/container-service/capsules',
name: t('Capsules'),
key: 'zunCapsules',
endpoints: 'zun',
level: 1,
children: [
{
path: /^\/container-service\/capsules\/detail\/.[^/]+$/,
name: t('Capsule Detail'),
key: 'zunCapsuleDetail',
level: 2,
routePath: '/container-service/capsules/detail/:id',
},
],
},
{
path: '/container-infra/clusters',
name: t('Clusters'),
key: 'containerInfraClusters',
endpoints: 'magnum',
level: 1,
children: [
{
path: /^\/container-infra\/clusters\/detail\/.[^/]+$/,
name: t('Cluster Detail'),
key: 'containerInfraClusterDetail',
level: 2,
routePath: '/container-infra/clusters/detail/:id',
},
{
path: '/container-infra/clusters/create',
name: t('Create Cluster'),
key: 'containerInfraCreateCluster',
level: 2,
},
],
},
{
path: '/container-infra/cluster-template',
name: t('Cluster Templates'),
key: 'clusterTemplate',
endpoints: 'magnum',
level: 1,
children: [
{
path: /^\/container-infra\/cluster-template\/detail\/.[^/]+$/,
name: t('Cluster Template Detail'),
key: 'containerInfraClusterTemplateDetail',
level: 2,
routePath: '/container-infra/cluster-template/detail/:id',
},
{
path: '/container-infra/cluster-template/create',
name: t('Create Cluster Template'),
key: 'containerInfraCreateClusterTemplate',
level: 2,
},
{
path: /^\/container-infra\/cluster-template\/update\/.[^/]+$/,
name: t('Update Cluster Template'),
key: 'containerInfraUpdateClusterTemplate',
level: 2,
routePath: '/container-infra/cluster-template/update/:id',
},
],
},
],
},
];
return menu;
};
export default renderMenu;