mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Enhance VPC Network Tier form to auto-populate Gateway, and Netmask (#10617)
This commit is contained in:
parent
3afab9a703
commit
ee94ae575b
@ -576,9 +576,9 @@
|
||||
"label.create.template": "Create Template",
|
||||
"label.create.tier.aclid.description": "The ACL associated with the Network Tier.",
|
||||
"label.create.tier.externalid.description": "ID of the Network in an external system.",
|
||||
"label.create.tier.gateway.description": "The Network Tier's gateway in the super CIDR range, not overlapping with the CIDR of other Network Tiers in this VPC.",
|
||||
"label.create.tier.gateway.description": "Gateway IP must be within VPC CIDR ({value})",
|
||||
"label.create.tier.name.description": "A unique name for the Network Tier.",
|
||||
"label.create.tier.netmask.description": "The Network Tier's netmask. For example 255.255.255.0",
|
||||
"label.create.tier.netmask.description": "Network Tier's netmask must be more restrictive than {value}",
|
||||
"label.create.tier.networkofferingid.description": "The Network offering for the Network Tier.",
|
||||
"label.create.tungsten.routing.policy": "Create Tungsten-Fabric routing policy",
|
||||
"label.create.user": "Create User",
|
||||
|
||||
51
ui/src/utils/network.js
Normal file
51
ui/src/utils/network.js
Normal file
@ -0,0 +1,51 @@
|
||||
// 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.
|
||||
|
||||
// Parsing CIDR into Gateway,Netmask Placeholders
|
||||
|
||||
export function getNetmaskFromCidr (cidr) {
|
||||
if (!cidr?.includes('/')) return undefined
|
||||
const [, maskBits] = cidr.split('/')
|
||||
const subnetMasks = {
|
||||
8: '255.0.0.0',
|
||||
9: '255.128.0.0',
|
||||
10: '255.192.0.0',
|
||||
11: '255.224.0.0',
|
||||
12: '255.240.0.0',
|
||||
13: '255.248.0.0',
|
||||
14: '255.252.0.0',
|
||||
15: '255.254.0.0',
|
||||
16: '255.255.0.0',
|
||||
17: '255.255.128.0',
|
||||
18: '255.255.192.0',
|
||||
19: '255.255.224.0',
|
||||
20: '255.255.240.0',
|
||||
21: '255.255.248.0',
|
||||
22: '255.255.252.0',
|
||||
23: '255.255.254.0',
|
||||
24: '255.255.255.0',
|
||||
25: '255.255.255.128',
|
||||
26: '255.255.255.192',
|
||||
27: '255.255.255.224',
|
||||
28: '255.255.255.240',
|
||||
29: '255.255.255.248',
|
||||
30: '255.255.255.252',
|
||||
31: '255.255.255.254',
|
||||
32: '255.255.255.255'
|
||||
}
|
||||
return subnetMasks[+maskBits] || '255.255.255.0'
|
||||
}
|
||||
@ -223,18 +223,18 @@
|
||||
</a-form-item>
|
||||
<a-form-item ref="gateway" name="gateway" :colon="false">
|
||||
<template #label>
|
||||
<tooltip-label :title="$t('label.gateway')" :tooltip="$t('label.create.tier.gateway.description')"/>
|
||||
<tooltip-label :title="$t('label.gateway')" :tooltip="gatewayPlaceholder"/>
|
||||
</template>
|
||||
<a-input
|
||||
:placeholder="$t('label.create.tier.gateway.description')"
|
||||
:placeholder="gatewayPlaceholder"
|
||||
v-model:value="form.gateway"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item ref="netmask" name="netmask" :colon="false">
|
||||
<template #label>
|
||||
<tooltip-label :title="$t('label.netmask')" :tooltip="$t('label.create.tier.netmask.description')"/>
|
||||
<tooltip-label :title="$t('label.netmask')" :tooltip="netmaskPlaceholder"/>
|
||||
</template>
|
||||
<a-input
|
||||
:placeholder="$t('label.create.tier.netmask.description')"
|
||||
:placeholder="netmaskPlaceholder"
|
||||
v-model:value="form.netmask"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item ref="externalId" name="externalId" :colon="false">
|
||||
@ -344,6 +344,7 @@ import { api } from '@/api'
|
||||
import { mixinForm } from '@/utils/mixin'
|
||||
import Status from '@/components/widgets/Status'
|
||||
import TooltipLabel from '@/components/widgets/TooltipLabel'
|
||||
import { getNetmaskFromCidr } from '@/utils/network'
|
||||
|
||||
export default {
|
||||
name: 'VpcTiersTab',
|
||||
@ -381,6 +382,8 @@ export default {
|
||||
selectedNetworkOffering: {},
|
||||
privateMtuMax: 1500,
|
||||
errorPrivateMtu: '',
|
||||
gatewayPlaceholder: '',
|
||||
netmaskPlaceholder: '',
|
||||
algorithms: {
|
||||
Source: 'source',
|
||||
'Round-robin': 'roundrobin',
|
||||
@ -617,6 +620,13 @@ export default {
|
||||
this.initForm()
|
||||
this.fetchNetworkAclList()
|
||||
this.fetchNetworkOfferings()
|
||||
const cidr = this.resource.cidr
|
||||
const netmask = getNetmaskFromCidr(cidr)
|
||||
if (netmask) {
|
||||
this.gatewayPlaceholder = this.$t('label.create.tier.gateway.description', { value: cidr })
|
||||
this.netmaskPlaceholder = this.$t('label.create.tier.netmask.description', { value: netmask })
|
||||
}
|
||||
|
||||
this.showCreateNetworkModal = true
|
||||
this.rules = {
|
||||
name: [{ required: true, message: this.$t('label.required') }],
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user