Support iprange while creating remote access vpn (#12063)

This commit is contained in:
Manoj Kumar 2025-12-09 16:26:16 +05:30 committed by GitHub
parent e4414d1c44
commit 951649c420
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 94 additions and 57 deletions

View File

@ -1879,6 +1879,7 @@
"label.release.dedicated.pod": "Release dedicated Pod", "label.release.dedicated.pod": "Release dedicated Pod",
"label.release.dedicated.zone": "Release dedicated Zone", "label.release.dedicated.zone": "Release dedicated Zone",
"label.releasing.ip": "Releasing IP", "label.releasing.ip": "Releasing IP",
"label.remote.access.vpn.specify.iprange": "Specify IP Range of remote VPN",
"label.remote.instances": "Remote Instances", "label.remote.instances": "Remote Instances",
"label.remove": "Remove", "label.remove": "Remove",
"label.remove.annotation": "Remove comment", "label.remove.annotation": "Remove comment",
@ -3055,6 +3056,7 @@
"message.enable.vpn.processing": "Enabling VPN...", "message.enable.vpn.processing": "Enabling VPN...",
"message.enabled.vpn": "Your remote access VPN is currently enabled and can be accessed via the IP.", "message.enabled.vpn": "Your remote access VPN is currently enabled and can be accessed via the IP.",
"message.enabled.vpn.ip.sec": "Your IPSec pre-shared key is", "message.enabled.vpn.ip.sec": "Your IPSec pre-shared key is",
"message.enabled.vpn.ip.range": "Your VPN IP Range is",
"message.enabling.security.group.provider": "Enabling security group provider", "message.enabling.security.group.provider": "Enabling security group provider",
"message.enter.valid.nic.ip": "Please enter a valid IP address for NIC", "message.enter.valid.nic.ip": "Please enter a valid IP address for NIC",
"message.error.access.key": "Please enter access key.", "message.error.access.key": "Please enter access key.",
@ -3380,6 +3382,7 @@
"message.releasing.dedicated.host": "Releasing dedicated host...", "message.releasing.dedicated.host": "Releasing dedicated host...",
"message.releasing.dedicated.pod": "Releasing dedicated Pod...", "message.releasing.dedicated.pod": "Releasing dedicated Pod...",
"message.releasing.dedicated.zone": "Releasing dedicated Zone...", "message.releasing.dedicated.zone": "Releasing dedicated Zone...",
"message.remote.access.vpn.iprange.description": "The range of IP addresses to allocate to VPN clients. The first IP in the range will be taken by the VPN server. (Optional)",
"message.remove.annotation": "Are you sure you want to delete the comment?", "message.remove.annotation": "Are you sure you want to delete the comment?",
"message.remove.egress.rule.failed": "Removing egress rule failed", "message.remove.egress.rule.failed": "Removing egress rule failed",
"message.remove.egress.rule.processing": "Deleting egress rule...", "message.remove.egress.rule.processing": "Deleting egress rule...",

View File

@ -16,10 +16,12 @@
// under the License. // under the License.
<template> <template>
<div class="vpn-details">
<div v-if="remoteAccessVpn"> <div v-if="remoteAccessVpn">
<div> <div>
<p>{{ $t('message.enabled.vpn') }} <strong>{{ remoteAccessVpn.publicip }}</strong></p> <p>{{ $t('message.enabled.vpn') }} <strong>{{ remoteAccessVpn.publicip }}</strong></p>
<p>{{ $t('message.enabled.vpn.ip.sec') }} <strong>{{ remoteAccessVpn.presharedkey }}</strong></p> <p>{{ $t('message.enabled.vpn.ip.sec') }} <strong>{{ remoteAccessVpn.presharedkey }}</strong></p>
<p>{{ $t('message.enabled.vpn.ip.range') }} <strong>{{ remoteAccessVpn.iprange }}</strong></p>
<a-divider/> <a-divider/>
<a-button><router-link :to="{ path: '/vpnuser'}">{{ $t('label.manage.vpn.user') }}</router-link></a-button> <a-button><router-link :to="{ path: '/vpnuser'}">{{ $t('label.manage.vpn.user') }}</router-link></a-button>
<a-button <a-button
@ -66,6 +68,24 @@
@cancel="enableVpn = false"> @cancel="enableVpn = false">
<div v-ctrl-enter="handleCreateVpn"> <div v-ctrl-enter="handleCreateVpn">
<p>{{ $t('message.enable.vpn') }}</p> <p>{{ $t('message.enable.vpn') }}</p>
<a-form-item>
<a-checkbox v-model:checked="specifyIpRange">
{{ $t('label.remote.access.vpn.specify.iprange') }}
</a-checkbox>
</a-form-item>
<a-form-item
v-if="specifyIpRange"
name="iprange"
:colon="false"
ref="iprange">
<template #label>
<tooltip-label :title="$t('label.ip.range')" :tooltip="$t('message.remote.access.vpn.iprange.description')"/>
</template>
<a-input
v-model:value="vpnIpRange"
:placeholder="'10.1.2.1-10.1.2.8'"
/>
</a-form-item>
<a-divider /> <a-divider />
@ -77,10 +97,12 @@
</a-modal> </a-modal>
</div> </div>
</div>
</template> </template>
<script> <script>
import { api } from '@/api' import { api } from '@/api'
import TooltipLabel from '@/components/widgets/TooltipLabel'
export default { export default {
props: { props: {
@ -89,12 +111,17 @@ export default {
required: true required: true
} }
}, },
components: {
TooltipLabel
},
data () { data () {
return { return {
remoteAccessVpn: null, remoteAccessVpn: null,
enableVpn: false, enableVpn: false,
disableVpn: false, disableVpn: false,
isSubmitted: false isSubmitted: false,
specifyIpRange: false,
vpnIpRange: ''
} }
}, },
inject: ['parentFetchData', 'parentToggleLoading'], inject: ['parentFetchData', 'parentToggleLoading'],
@ -130,11 +157,15 @@ export default {
this.isSubmitted = true this.isSubmitted = true
this.parentToggleLoading() this.parentToggleLoading()
this.enableVpn = false this.enableVpn = false
api('createRemoteAccessVpn', { const params = {
publicipid: this.resource.id, publicipid: this.resource.id,
domainid: this.resource.domainid, domainid: this.resource.domainid,
account: this.resource.account account: this.resource.account
}).then(response => { }
if (this.specifyIpRange && this.vpnIpRange?.trim()) {
params.iprange = this.vpnIpRange.trim()
}
api('createRemoteAccessVpn', params).then(response => {
this.$pollJob({ this.$pollJob({
jobId: response.createremoteaccessvpnresponse.jobid, jobId: response.createremoteaccessvpnresponse.jobid,
successMethod: result => { successMethod: result => {
@ -227,4 +258,7 @@ export default {
} }
} }
} }
.vpn-details {
padding: 8px 0;
}
</style> </style>