diff --git a/api/src/main/java/com/cloud/vm/NicProfile.java b/api/src/main/java/com/cloud/vm/NicProfile.java
index 7ac5342ee16..ebbe6d88bfe 100644
--- a/api/src/main/java/com/cloud/vm/NicProfile.java
+++ b/api/src/main/java/com/cloud/vm/NicProfile.java
@@ -147,7 +147,7 @@ public class NicProfile implements InternalIdentity, Serializable {
return networkId;
}
- public void setNetworId(long networkId){
+ public void setNetworkId(long networkId){
this.networkId = networkId;
}
diff --git a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
index c2f08c86199..580484bba7a 100644
--- a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
+++ b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
@@ -2052,7 +2052,6 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
//Create nic profile for migration
s_logger.debug("Creating nic profile for migration. BroadcastUri: "+broadcastUri.toString()+" NetworkId: "+ntwkId+" Vm: "+vm.getId());
final NetworkVO network = _networksDao.findById(ntwkId);
- _networkModel.getNetworkRate(network.getId(), vm.getId());
final NetworkGuru guru = AdapterBase.getAdapterByName(networkGurus, network.getGuruName());
final NicProfile profile = new NicProfile();
profile.setDeviceId(255); //dummyId
@@ -2066,7 +2065,8 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
profile.setIsolationUri(Networks.IsolationType.Vlan.toUri(publicIp.getVlanTag()));
profile.setSecurityGroupEnabled(_networkModel.isSecurityGroupSupportedInNetwork(network));
profile.setName(_networkModel.getNetworkTag(vm.getHypervisorType(), network));
- profile.setNetworId(network.getId());
+ profile.setNetworkRate(_networkModel.getNetworkRate(network.getId(), vm.getId()));
+ profile.setNetworkId(network.getId());
guru.updateNicProfile(profile, network);
vm.addNic(profile);
diff --git a/server/src/main/java/com/cloud/network/Ipv6AddressManager.java b/server/src/main/java/com/cloud/network/Ipv6AddressManager.java
index 7dcba11a00a..60770415c66 100644
--- a/server/src/main/java/com/cloud/network/Ipv6AddressManager.java
+++ b/server/src/main/java/com/cloud/network/Ipv6AddressManager.java
@@ -31,6 +31,6 @@ public interface Ipv6AddressManager extends Manager {
public String acquireGuestIpv6Address(Network network, String requestedIpv6) throws InsufficientAddressCapacityException;
- public void setNicIp6Address(final NicProfile nic, final DataCenter dc, final Network network);
+ public void setNicIp6Address(final NicProfile nic, final DataCenter dc, final Network network) throws InsufficientAddressCapacityException;
}
diff --git a/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java b/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java
index adfc3d29dce..c1f3f39dced 100644
--- a/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java
@@ -195,13 +195,15 @@ public class Ipv6AddressManagerImpl extends ManagerBase implements Ipv6AddressMa
* address information.
*/
@Override
- public void setNicIp6Address(final NicProfile nic, final DataCenter dc, final Network network) {
+ public void setNicIp6Address(final NicProfile nic, final DataCenter dc, final Network network) throws InsufficientAddressCapacityException {
if (network.getIp6Gateway() != null) {
if (nic.getIPv6Address() == null) {
s_logger.debug("Found IPv6 CIDR " + network.getIp6Cidr() + " for Network " + network);
nic.setIPv6Cidr(network.getIp6Cidr());
nic.setIPv6Gateway(network.getIp6Gateway());
+ setNicPropertiesFromNetwork(nic, network);
+
IPv6Address ipv6addr = NetUtils.EUI64Address(network.getIp6Cidr(), nic.getMacAddress());
s_logger.info("Calculated IPv6 address " + ipv6addr + " using EUI-64 for NIC " + nic.getUuid());
nic.setIPv6Address(ipv6addr.toString());
@@ -217,4 +219,15 @@ public class Ipv6AddressManagerImpl extends ManagerBase implements Ipv6AddressMa
}
}
+ private void setNicPropertiesFromNetwork(NicProfile nic, Network network) throws InsufficientAddressCapacityException {
+ if (nic.getBroadcastType() == null) {
+ nic.setBroadcastType(network.getBroadcastDomainType());
+ }
+ if (nic.getBroadCastUri() == null) {
+ nic.setBroadcastUri(network.getBroadcastUri());
+ }
+ if (nic.getMacAddress() == null) {
+ nic.setMacAddress(_networkModel.getNextAvailableMacAddressInNetwork(network.getId()));
+ }
+ }
}
diff --git a/server/src/test/java/com/cloud/network/Ipv6AddressManagerTest.java b/server/src/test/java/com/cloud/network/Ipv6AddressManagerTest.java
index 3f082d53516..bd1484d588a 100644
--- a/server/src/test/java/com/cloud/network/Ipv6AddressManagerTest.java
+++ b/server/src/test/java/com/cloud/network/Ipv6AddressManagerTest.java
@@ -229,7 +229,7 @@ public class Ipv6AddressManagerTest {
}
@Test
- public void setNICIPv6AddressTest() {
+ public void setNICIPv6AddressTest() throws InsufficientAddressCapacityException {
NicProfile nic = new NicProfile();
Network network = mock(Network.class);
DataCenter dc = mock(DataCenter.class);
diff --git a/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py b/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py
index 964cf7a860d..bfa17404697 100755
--- a/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py
+++ b/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py
@@ -111,7 +111,7 @@ class CsDhcp(CsDataBag):
if self.config.is_dhcp() and not self.config.use_extdns():
guest_ip = self.config.address().get_guest_ip()
if guest_ip and guest_ip in dns_list and ip not in dns_list:
- ## Replace the default guest IP in VR with the ip in additional IP ranges, if shared network has multiple IP ranges.
+ # Replace the default guest IP in VR with the ip in additional IP ranges, if shared network has multiple IP ranges.
dns_list.remove(guest_ip)
dns_list.insert(0, ip)
line = "dhcp-option=tag:interface-%s-%s,6,%s" % (device, idx, ','.join(dns_list))
diff --git a/ui/src/components/view/ResourceLimitTab.vue b/ui/src/components/view/ResourceLimitTab.vue
index fefe93770f7..93cce68fd7b 100644
--- a/ui/src/components/view/ResourceLimitTab.vue
+++ b/ui/src/components/view/ResourceLimitTab.vue
@@ -119,7 +119,7 @@ export default {
if (this.formLoading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/components/view/SearchView.vue b/ui/src/components/view/SearchView.vue
index 9d5271bafd9..6876c2009be 100644
--- a/ui/src/components/view/SearchView.vue
+++ b/ui/src/components/view/SearchView.vue
@@ -512,7 +512,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
this.paramsFilter = {}
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue
index 24eedf9f49b..4c128a78090 100644
--- a/ui/src/views/AutogenView.vue
+++ b/ui/src/views/AutogenView.vue
@@ -1201,7 +1201,7 @@ export default {
this.modalInfo.title = this.currentAction.label
this.modalInfo.docHelp = this.currentAction.docHelp
}
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (!err) {
this.actionLoading = true
const itemsNameMap = {}
@@ -1295,7 +1295,7 @@ export default {
},
execSubmit (e) {
e.preventDefault()
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
@@ -1528,7 +1528,7 @@ export default {
if (!confirmPasswordVal || confirmPasswordVal.length === 0) {
callback()
} else if (value && this.confirmDirty) {
- form.validateFields(['confirmpassword'], { force: true })
+ form.validateFieldsAndScroll(['confirmpassword'], { force: true })
callback()
} else {
callback()
diff --git a/ui/src/views/auth/Login.vue b/ui/src/views/auth/Login.vue
index c43f434bc45..95630d0253b 100644
--- a/ui/src/views/auth/Login.vue
+++ b/ui/src/views/auth/Login.vue
@@ -229,7 +229,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
const {
- form: { validateFields },
+ form: { validateFieldsAndScroll },
state,
customActiveKey,
Login
@@ -238,9 +238,9 @@ export default {
state.loginBtn = true
- const validateFieldsKey = customActiveKey === 'cs' ? ['username', 'password', 'domain'] : ['idp']
+ const validateFieldsAndScrollKey = customActiveKey === 'cs' ? ['username', 'password', 'domain'] : ['idp']
- validateFields(validateFieldsKey, { force: true }, (err, values) => {
+ validateFieldsAndScroll(validateFieldsAndScrollKey, { force: true }, (err, values) => {
if (!err) {
if (this.$config.multipleServer) {
this.axios.defaults.baseURL = (this.server.apiHost || '') + this.server.apiBase
diff --git a/ui/src/views/compute/AttachIso.vue b/ui/src/views/compute/AttachIso.vue
index b4c52e22caf..3410e494b2b 100644
--- a/ui/src/views/compute/AttachIso.vue
+++ b/ui/src/views/compute/AttachIso.vue
@@ -117,7 +117,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/compute/CreateKubernetesCluster.vue b/ui/src/views/compute/CreateKubernetesCluster.vue
index 9bd9516f6c5..6b6b81f6791 100644
--- a/ui/src/views/compute/CreateKubernetesCluster.vue
+++ b/ui/src/views/compute/CreateKubernetesCluster.vue
@@ -432,7 +432,12 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ const options = {
+ scroll: {
+ offsetTop: 10
+ }
+ }
+ this.form.validateFieldsAndScroll(options, (err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/compute/CreateSSHKeyPair.vue b/ui/src/views/compute/CreateSSHKeyPair.vue
index 2aa67314676..15a6f9797e8 100644
--- a/ui/src/views/compute/CreateSSHKeyPair.vue
+++ b/ui/src/views/compute/CreateSSHKeyPair.vue
@@ -146,7 +146,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/compute/CreateSnapshotWizard.vue b/ui/src/views/compute/CreateSnapshotWizard.vue
index af2765f44b0..ed4fbc9e975 100644
--- a/ui/src/views/compute/CreateSnapshotWizard.vue
+++ b/ui/src/views/compute/CreateSnapshotWizard.vue
@@ -112,7 +112,7 @@ export default {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) return
const params = {}
diff --git a/ui/src/views/compute/DeployVM.vue b/ui/src/views/compute/DeployVM.vue
index 00ed65f6c20..bb480b50dca 100644
--- a/ui/src/views/compute/DeployVM.vue
+++ b/ui/src/views/compute/DeployVM.vue
@@ -1475,9 +1475,14 @@ export default {
},
handleSubmit (e) {
console.log('wizard submit')
+ const options = {
+ scroll: {
+ offsetTop: 90
+ }
+ }
e.preventDefault()
if (this.loading.deploy) return
- this.form.validateFields(async (err, values) => {
+ this.form.validateFieldsAndScroll(options, async (err, values) => {
if (err) {
if (err.licensesaccepted) {
this.$notification.error({
diff --git a/ui/src/views/compute/DestroyVM.vue b/ui/src/views/compute/DestroyVM.vue
index 8cd8d8dfc0e..166e4ca56a5 100644
--- a/ui/src/views/compute/DestroyVM.vue
+++ b/ui/src/views/compute/DestroyVM.vue
@@ -104,7 +104,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/compute/EditVM.vue b/ui/src/views/compute/EditVM.vue
index 19afdc36c61..656c13a0589 100644
--- a/ui/src/views/compute/EditVM.vue
+++ b/ui/src/views/compute/EditVM.vue
@@ -200,7 +200,7 @@ export default {
},
handleSubmit (e) {
e.preventDefault()
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) return
const params = {}
diff --git a/ui/src/views/compute/InstanceTab.vue b/ui/src/views/compute/InstanceTab.vue
index 437410a092d..e9e599a2737 100644
--- a/ui/src/views/compute/InstanceTab.vue
+++ b/ui/src/views/compute/InstanceTab.vue
@@ -159,7 +159,7 @@
@@ -588,7 +590,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/AddSecondaryStorage.vue b/ui/src/views/infra/AddSecondaryStorage.vue
index e229bb78f3d..0d34e6f4575 100644
--- a/ui/src/views/infra/AddSecondaryStorage.vue
+++ b/ui/src/views/infra/AddSecondaryStorage.vue
@@ -245,7 +245,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/InfraSummary.vue b/ui/src/views/infra/InfraSummary.vue
index 81f4a2d33ee..5656dc58a44 100644
--- a/ui/src/views/infra/InfraSummary.vue
+++ b/ui/src/views/infra/InfraSummary.vue
@@ -136,7 +136,7 @@
{{ $t('label.cancel' ) }}
-
+
{{ $t('label.submit' ) }}
@@ -265,7 +265,7 @@ export default {
if (this.sslFormSubmitting) return
this.sslFormSubmitting = true
- this.form.validateFields(errors => {
+ this.form.validateFieldsAndScroll(errors => {
if (errors) {
this.sslFormSubmitting = false
return
diff --git a/ui/src/views/infra/MigrateData.vue b/ui/src/views/infra/MigrateData.vue
index a1cb693bb32..6ebe6531969 100644
--- a/ui/src/views/infra/MigrateData.vue
+++ b/ui/src/views/infra/MigrateData.vue
@@ -127,7 +127,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/PodAdd.vue b/ui/src/views/infra/PodAdd.vue
index b1fe3152284..1fffa560f08 100644
--- a/ui/src/views/infra/PodAdd.vue
+++ b/ui/src/views/infra/PodAdd.vue
@@ -187,7 +187,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) return
this.loading = true
diff --git a/ui/src/views/infra/network/DedicatedVLANTab.vue b/ui/src/views/infra/network/DedicatedVLANTab.vue
index 74fd444956d..a2b5e55c2ed 100644
--- a/ui/src/views/infra/network/DedicatedVLANTab.vue
+++ b/ui/src/views/infra/network/DedicatedVLANTab.vue
@@ -371,7 +371,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.formLoading) return
- this.form.validateFields(errors => {
+ this.form.validateFieldsAndScroll(errors => {
if (errors) return
this.formLoading = true
diff --git a/ui/src/views/infra/network/EditTrafficLabel.vue b/ui/src/views/infra/network/EditTrafficLabel.vue
index 706131bc682..a56165ed19e 100644
--- a/ui/src/views/infra/network/EditTrafficLabel.vue
+++ b/ui/src/views/infra/network/EditTrafficLabel.vue
@@ -150,7 +150,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/network/IpRangesTabManagement.vue b/ui/src/views/infra/network/IpRangesTabManagement.vue
index 22ef9ff4cbd..f8a75d8b4c4 100644
--- a/ui/src/views/infra/network/IpRangesTabManagement.vue
+++ b/ui/src/views/infra/network/IpRangesTabManagement.vue
@@ -298,7 +298,7 @@ export default {
},
handleAddIpRange (e) {
if (this.componentLoading) return
- this.form.validateFields((error, values) => {
+ this.form.validateFieldsAndScroll((error, values) => {
if (error) return
this.componentLoading = true
diff --git a/ui/src/views/infra/network/IpRangesTabPublic.vue b/ui/src/views/infra/network/IpRangesTabPublic.vue
index 1e4e03c8804..ff1976f71e6 100644
--- a/ui/src/views/infra/network/IpRangesTabPublic.vue
+++ b/ui/src/views/infra/network/IpRangesTabPublic.vue
@@ -516,7 +516,7 @@ export default {
},
handleAddIpRange (e) {
if (this.componentLoading) return
- this.form.validateFields((error, values) => {
+ this.form.validateFieldsAndScroll((error, values) => {
if (error) return
this.componentLoading = true
diff --git a/ui/src/views/infra/network/IpRangesTabStorage.vue b/ui/src/views/infra/network/IpRangesTabStorage.vue
index 7b6735f7fa4..7250c51e005 100644
--- a/ui/src/views/infra/network/IpRangesTabStorage.vue
+++ b/ui/src/views/infra/network/IpRangesTabStorage.vue
@@ -279,7 +279,7 @@ export default {
},
handleAddIpRange (e) {
if (this.componentLoading) return
- this.form.validateFields((error, values) => {
+ this.form.validateFieldsAndScroll((error, values) => {
if (error) return
this.componentLoading = true
diff --git a/ui/src/views/infra/network/ServiceProvidersTab.vue b/ui/src/views/infra/network/ServiceProvidersTab.vue
index 5c7f0d682f7..101762197c1 100644
--- a/ui/src/views/infra/network/ServiceProvidersTab.vue
+++ b/ui/src/views/infra/network/ServiceProvidersTab.vue
@@ -1170,7 +1170,7 @@ export default {
await this.executeConfirmAction()
return
}
- await this.form.validateFields(async (err, values) => {
+ await this.form.validateFieldsAndScroll(async (err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/network/providers/AddF5LoadBalancer.vue b/ui/src/views/infra/network/providers/AddF5LoadBalancer.vue
index 0332ad2b15b..227520c8880 100644
--- a/ui/src/views/infra/network/providers/AddF5LoadBalancer.vue
+++ b/ui/src/views/infra/network/providers/AddF5LoadBalancer.vue
@@ -166,7 +166,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields(async (err, values) => {
+ this.form.validateFieldsAndScroll(async (err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/network/providers/AddNetscalerLoadBalancer.vue b/ui/src/views/infra/network/providers/AddNetscalerLoadBalancer.vue
index aa0699acbe8..7e12f545d46 100644
--- a/ui/src/views/infra/network/providers/AddNetscalerLoadBalancer.vue
+++ b/ui/src/views/infra/network/providers/AddNetscalerLoadBalancer.vue
@@ -198,7 +198,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields(async (err, values) => {
+ this.form.validateFieldsAndScroll(async (err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/network/providers/AddNiciraNvpDevice.vue b/ui/src/views/infra/network/providers/AddNiciraNvpDevice.vue
index 01c21fb3fd7..60a33b52f3a 100644
--- a/ui/src/views/infra/network/providers/AddNiciraNvpDevice.vue
+++ b/ui/src/views/infra/network/providers/AddNiciraNvpDevice.vue
@@ -130,7 +130,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields(async (err, values) => {
+ this.form.validateFieldsAndScroll(async (err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/network/providers/AddPaloAltoFirewall.vue b/ui/src/views/infra/network/providers/AddPaloAltoFirewall.vue
index fe6a11378d3..aff9d57f3ed 100644
--- a/ui/src/views/infra/network/providers/AddPaloAltoFirewall.vue
+++ b/ui/src/views/infra/network/providers/AddPaloAltoFirewall.vue
@@ -213,7 +213,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields(async (err, values) => {
+ this.form.validateFieldsAndScroll(async (err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/network/providers/AddSrxFirewall.vue b/ui/src/views/infra/network/providers/AddSrxFirewall.vue
index e50e14f0909..8a61d5fd5d6 100644
--- a/ui/src/views/infra/network/providers/AddSrxFirewall.vue
+++ b/ui/src/views/infra/network/providers/AddSrxFirewall.vue
@@ -191,7 +191,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields(async (err, values) => {
+ this.form.validateFieldsAndScroll(async (err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/routers/RouterHealthCheck.vue b/ui/src/views/infra/routers/RouterHealthCheck.vue
index 2ddccb79fe1..e01d26e0cab 100644
--- a/ui/src/views/infra/routers/RouterHealthCheck.vue
+++ b/ui/src/views/infra/routers/RouterHealthCheck.vue
@@ -151,7 +151,7 @@ export default {
handleGetHealthChecksSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue b/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue
index 916c5025861..86fa78d0e65 100644
--- a/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue
+++ b/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue
@@ -135,7 +135,7 @@ export default {
},
handleSubmit (e) {
e.preventDefault()
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
this.validStatus = ''
this.validMessage = ''
if (err) {
diff --git a/ui/src/views/infra/zone/IpAddressRangeForm.vue b/ui/src/views/infra/zone/IpAddressRangeForm.vue
index 21e27ab3f28..3480a1b334d 100644
--- a/ui/src/views/infra/zone/IpAddressRangeForm.vue
+++ b/ui/src/views/infra/zone/IpAddressRangeForm.vue
@@ -229,7 +229,7 @@ export default {
methods: {
handleAddRange (e) {
e.preventDefault()
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (!err) {
this.ipRanges.push({
key: this.ipRanges.length.toString(),
diff --git a/ui/src/views/infra/zone/StaticInputsForm.vue b/ui/src/views/infra/zone/StaticInputsForm.vue
index 565557f3db8..97590a320ab 100644
--- a/ui/src/views/infra/zone/StaticInputsForm.vue
+++ b/ui/src/views/infra/zone/StaticInputsForm.vue
@@ -187,7 +187,7 @@ export default {
},
handleSubmit (e) {
e.preventDefault()
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue b/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue
index 69e61bb271d..eb18181aa88 100644
--- a/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue
+++ b/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue
@@ -1340,6 +1340,7 @@ export default {
url = this.rbdURL(rbdmonitor, rbdpool, rbdid, rbdsecret)
} else if (protocol === 'Linstor') {
url = this.linstorURL(server)
+ params.provider = 'Linstor'
params['details[0].resourceGroup'] = this.prefillContent.primaryStorageLinstorResourceGroup.value
} else if (protocol === 'vmfs' || protocol === 'datastorecluster') {
let path = this.prefillContent.primaryStorageVmfsDatacenter.value
diff --git a/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue b/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue
index 52f891a1515..6c8bdf06fd0 100644
--- a/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue
+++ b/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue
@@ -489,7 +489,7 @@ export default {
this.emitPhysicalNetworks()
},
updateTrafficLabel (trafficInEdit) {
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (!err) {
this.showEditTraffic = false
if (this.hypervisor === 'VMware') {
diff --git a/ui/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue b/ui/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue
index d81af54e1f3..641f6356f7a 100644
--- a/ui/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue
+++ b/ui/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue
@@ -548,7 +548,7 @@ export default {
},
handleSubmit (e) {
e.preventDefault()
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/infra/zone/ZoneWizardZoneTypeStep.vue b/ui/src/views/infra/zone/ZoneWizardZoneTypeStep.vue
index 9c20651b6d6..3df2a7045e7 100644
--- a/ui/src/views/infra/zone/ZoneWizardZoneTypeStep.vue
+++ b/ui/src/views/infra/zone/ZoneWizardZoneTypeStep.vue
@@ -127,7 +127,7 @@ export default {
methods: {
handleSubmit (e) {
e.preventDefault()
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (!err) {
this.$emit('nextPressed')
}
diff --git a/ui/src/views/network/AclListRulesTab.vue b/ui/src/views/network/AclListRulesTab.vue
index dbe11caee15..673d33862a7 100644
--- a/ui/src/views/network/AclListRulesTab.vue
+++ b/ui/src/views/network/AclListRulesTab.vue
@@ -385,7 +385,7 @@ export default {
this.tagsLoading = true
e.preventDefault()
- this.newTagsForm.validateFields((err, values) => {
+ this.newTagsForm.validateFieldsAndScroll((err, values) => {
if (err) {
this.tagsLoading = false
return
@@ -471,7 +471,7 @@ export default {
},
handleEditRule (e) {
e.preventDefault()
- this.ruleForm.validateFields((err, values) => {
+ this.ruleForm.validateFieldsAndScroll((err, values) => {
if (err) return
this.fetchLoading = true
@@ -561,7 +561,7 @@ export default {
},
handleAddRule (e) {
e.preventDefault()
- this.ruleForm.validateFields((err, values) => {
+ this.ruleForm.validateFieldsAndScroll((err, values) => {
if (err) return
this.fetchLoading = true
diff --git a/ui/src/views/network/CreateIsolatedNetworkForm.vue b/ui/src/views/network/CreateIsolatedNetworkForm.vue
index 9ebde9a36c3..292e33fc449 100644
--- a/ui/src/views/network/CreateIsolatedNetworkForm.vue
+++ b/ui/src/views/network/CreateIsolatedNetworkForm.vue
@@ -403,7 +403,12 @@ export default {
},
handleSubmit (e) {
if (this.actionLoading) return
- this.form.validateFields((error, values) => {
+ const options = {
+ scroll: {
+ offsetTop: 10
+ }
+ }
+ this.form.validateFieldsAndScroll(options, (error, values) => {
if (error) {
return
}
diff --git a/ui/src/views/network/CreateL2NetworkForm.vue b/ui/src/views/network/CreateL2NetworkForm.vue
index 7109c2664c5..7fdcd6f9466 100644
--- a/ui/src/views/network/CreateL2NetworkForm.vue
+++ b/ui/src/views/network/CreateL2NetworkForm.vue
@@ -365,7 +365,7 @@ export default {
},
handleSubmit (e) {
if (this.actionLoading) return
- this.form.validateFields((error, values) => {
+ this.form.validateFieldsAndScroll((error, values) => {
if (error) {
return
}
diff --git a/ui/src/views/network/CreateSharedNetworkForm.vue b/ui/src/views/network/CreateSharedNetworkForm.vue
index 19a6e1796d6..4b06b8a089f 100644
--- a/ui/src/views/network/CreateSharedNetworkForm.vue
+++ b/ui/src/views/network/CreateSharedNetworkForm.vue
@@ -694,7 +694,12 @@ export default {
},
handleSubmit (e) {
if (this.actionLoading) return
- this.form.validateFields((error, values) => {
+ const options = {
+ scroll: {
+ offsetTop: 10
+ }
+ }
+ this.form.validateFieldsAndScroll(options, (error, values) => {
if (error) {
return
}
diff --git a/ui/src/views/network/CreateVlanIpRange.vue b/ui/src/views/network/CreateVlanIpRange.vue
index 61f7f87560b..71a7f06dbb8 100644
--- a/ui/src/views/network/CreateVlanIpRange.vue
+++ b/ui/src/views/network/CreateVlanIpRange.vue
@@ -224,7 +224,7 @@ export default {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/network/CreateVpc.vue b/ui/src/views/network/CreateVpc.vue
index 53f3cace9ac..72f202cda83 100644
--- a/ui/src/views/network/CreateVpc.vue
+++ b/ui/src/views/network/CreateVpc.vue
@@ -173,7 +173,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/network/CreateVpnCustomerGateway.vue b/ui/src/views/network/CreateVpnCustomerGateway.vue
index b931645ee8b..56dfceede00 100644
--- a/ui/src/views/network/CreateVpnCustomerGateway.vue
+++ b/ui/src/views/network/CreateVpnCustomerGateway.vue
@@ -325,7 +325,12 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.isSubmitted) return
- this.form.validateFields((err, values) => {
+ const options = {
+ scroll: {
+ offsetTop: 10
+ }
+ }
+ this.form.validateFieldsAndScroll(options, (err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/network/FirewallRules.vue b/ui/src/views/network/FirewallRules.vue
index 21f9f951b97..c290f1f7dd4 100644
--- a/ui/src/views/network/FirewallRules.vue
+++ b/ui/src/views/network/FirewallRules.vue
@@ -448,7 +448,7 @@ export default {
if (this.addTagLoading) return
this.addTagLoading = true
- this.newTagsForm.validateFields((err, values) => {
+ this.newTagsForm.validateFieldsAndScroll((err, values) => {
if (err) {
this.tagsLoading = false
return
diff --git a/ui/src/views/network/IngressEgressRuleConfigure.vue b/ui/src/views/network/IngressEgressRuleConfigure.vue
index 060399b68de..babc7b8ed93 100644
--- a/ui/src/views/network/IngressEgressRuleConfigure.vue
+++ b/ui/src/views/network/IngressEgressRuleConfigure.vue
@@ -415,7 +415,7 @@ export default {
this.tagsLoading = true
e.preventDefault()
- this.newTagsForm.validateFields((err, values) => {
+ this.newTagsForm.validateFieldsAndScroll((err, values) => {
if (err) {
this.tagsLoading = false
return
diff --git a/ui/src/views/network/LoadBalancing.vue b/ui/src/views/network/LoadBalancing.vue
index 8f1582bd4e1..b86c91ee569 100644
--- a/ui/src/views/network/LoadBalancing.vue
+++ b/ui/src/views/network/LoadBalancing.vue
@@ -765,7 +765,7 @@ export default {
this.tagsModalLoading = true
e.preventDefault()
- this.newTagsForm.validateFields((err, values) => {
+ this.newTagsForm.validateFieldsAndScroll((err, values) => {
if (err) {
this.tagsModalLoading = false
return
@@ -926,7 +926,7 @@ export default {
if (this.stickinessModalLoading) return
this.stickinessModalLoading = true
e.preventDefault()
- this.stickinessPolicyForm.validateFields((err, values) => {
+ this.stickinessPolicyForm.validateFieldsAndScroll((err, values) => {
if (err) {
this.stickinessModalLoading = false
return
diff --git a/ui/src/views/network/PortForwarding.vue b/ui/src/views/network/PortForwarding.vue
index 81e2fe8faad..361708ed531 100644
--- a/ui/src/views/network/PortForwarding.vue
+++ b/ui/src/views/network/PortForwarding.vue
@@ -664,7 +664,7 @@ export default {
this.tagsModalLoading = true
e.preventDefault()
- this.newTagsForm.validateFields((err, values) => {
+ this.newTagsForm.validateFieldsAndScroll((err, values) => {
if (err) {
this.tagsModalLoading = false
return
diff --git a/ui/src/views/network/StaticRoutesTab.vue b/ui/src/views/network/StaticRoutesTab.vue
index bf93d30fd64..154594e8fcf 100644
--- a/ui/src/views/network/StaticRoutesTab.vue
+++ b/ui/src/views/network/StaticRoutesTab.vue
@@ -251,7 +251,7 @@ export default {
this.tagsLoading = true
e.preventDefault()
- this.newTagsForm.validateFields((err, values) => {
+ this.newTagsForm.validateFieldsAndScroll((err, values) => {
if (err) {
this.tagsLoading = false
return
diff --git a/ui/src/views/network/VpcTab.vue b/ui/src/views/network/VpcTab.vue
index a295cf1b261..7d5fedcad02 100644
--- a/ui/src/views/network/VpcTab.vue
+++ b/ui/src/views/network/VpcTab.vue
@@ -637,7 +637,7 @@ export default {
if (this.modals.gatewayLoading) return
this.modals.gatewayLoading = true
- this.gatewayForm.validateFields(errors => {
+ this.gatewayForm.validateFieldsAndScroll(errors => {
if (errors) {
this.modals.gatewayLoading = false
return
@@ -693,7 +693,7 @@ export default {
this.fetchLoading = true
this.modals.vpnConnection = false
- this.vpnConnectionForm.validateFields((errors, values) => {
+ this.vpnConnectionForm.validateFieldsAndScroll((errors, values) => {
if (errors) {
this.fetchLoading = false
return
@@ -737,7 +737,7 @@ export default {
this.fetchLoading = true
this.modals.networkAcl = false
- this.networkAclForm.validateFields((errors, values) => {
+ this.networkAclForm.validateFieldsAndScroll((errors, values) => {
if (errors) {
this.fetchLoading = false
}
diff --git a/ui/src/views/network/VpcTiersTab.vue b/ui/src/views/network/VpcTiersTab.vue
index e6a4b798e62..25dee1260cd 100644
--- a/ui/src/views/network/VpcTiersTab.vue
+++ b/ui/src/views/network/VpcTiersTab.vue
@@ -637,7 +637,7 @@ export default {
this.fetchLoading = true
this.modalLoading = true
- this.form.validateFields((errors, values) => {
+ this.form.validateFieldsAndScroll((errors, values) => {
if (errors) {
this.fetchLoading = false
this.modalLoading = false
@@ -681,7 +681,7 @@ export default {
if (this.modalLoading) return
this.fetchLoading = true
this.modalLoading = true
- this.form.validateFields((errors, values) => {
+ this.form.validateFieldsAndScroll((errors, values) => {
if (errors) {
this.fetchLoading = false
this.modalLoading = false
diff --git a/ui/src/views/offering/AddComputeOffering.vue b/ui/src/views/offering/AddComputeOffering.vue
index 2778e5558d6..be4081640f1 100644
--- a/ui/src/views/offering/AddComputeOffering.vue
+++ b/ui/src/views/offering/AddComputeOffering.vue
@@ -735,7 +735,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/offering/AddDiskOffering.vue b/ui/src/views/offering/AddDiskOffering.vue
index 4c398a1ce09..71d5c2d10c8 100644
--- a/ui/src/views/offering/AddDiskOffering.vue
+++ b/ui/src/views/offering/AddDiskOffering.vue
@@ -483,7 +483,12 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ const options = {
+ scroll: {
+ offsetTop: 10
+ }
+ }
+ this.form.validateFieldsAndScroll(options, (err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/offering/AddNetworkOffering.vue b/ui/src/views/offering/AddNetworkOffering.vue
index aa2bbb3235c..d0263caf04d 100644
--- a/ui/src/views/offering/AddNetworkOffering.vue
+++ b/ui/src/views/offering/AddNetworkOffering.vue
@@ -707,7 +707,12 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ const options = {
+ scroll: {
+ offsetTop: 10
+ }
+ }
+ this.form.validateFieldsAndScroll(options, (err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/offering/AddVpcOffering.vue b/ui/src/views/offering/AddVpcOffering.vue
index 826c3cc2150..e889b9d2749 100644
--- a/ui/src/views/offering/AddVpcOffering.vue
+++ b/ui/src/views/offering/AddVpcOffering.vue
@@ -312,7 +312,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/offering/ImportBackupOffering.vue b/ui/src/views/offering/ImportBackupOffering.vue
index d675059ca1c..24f83909e14 100644
--- a/ui/src/views/offering/ImportBackupOffering.vue
+++ b/ui/src/views/offering/ImportBackupOffering.vue
@@ -155,7 +155,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/offering/UpdateOfferingAccess.vue b/ui/src/views/offering/UpdateOfferingAccess.vue
index e35c305b19a..8234b2f30f1 100644
--- a/ui/src/views/offering/UpdateOfferingAccess.vue
+++ b/ui/src/views/offering/UpdateOfferingAccess.vue
@@ -259,7 +259,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/plugins/quota/EditTariffValueWizard.vue b/ui/src/views/plugins/quota/EditTariffValueWizard.vue
index 250a79e31e0..ef02b0c8164 100644
--- a/ui/src/views/plugins/quota/EditTariffValueWizard.vue
+++ b/ui/src/views/plugins/quota/EditTariffValueWizard.vue
@@ -102,7 +102,7 @@ export default {
submitTariff (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((error, values) => {
+ this.form.validateFieldsAndScroll((error, values) => {
if (error) return
const params = {}
diff --git a/ui/src/views/project/AddAccountOrUserToProject.vue b/ui/src/views/project/AddAccountOrUserToProject.vue
index b7fe75d1883..32ae8dc4124 100644
--- a/ui/src/views/project/AddAccountOrUserToProject.vue
+++ b/ui/src/views/project/AddAccountOrUserToProject.vue
@@ -230,7 +230,7 @@ export default {
addAccountToProject (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
@@ -264,7 +264,7 @@ export default {
addUserToProject (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/project/InvitationTokenTemplate.vue b/ui/src/views/project/InvitationTokenTemplate.vue
index 2a140553999..10121d318b9 100644
--- a/ui/src/views/project/InvitationTokenTemplate.vue
+++ b/ui/src/views/project/InvitationTokenTemplate.vue
@@ -67,7 +67,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/project/iam/ProjectRoleTab.vue b/ui/src/views/project/iam/ProjectRoleTab.vue
index 2ac2349c450..befbd69b3c3 100644
--- a/ui/src/views/project/iam/ProjectRoleTab.vue
+++ b/ui/src/views/project/iam/ProjectRoleTab.vue
@@ -213,7 +213,7 @@ export default {
updateProjectRole (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
@@ -253,7 +253,7 @@ export default {
createProjectRole (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/storage/AttachVolume.vue b/ui/src/views/storage/AttachVolume.vue
index ce3af4bce02..d6f2a08f984 100644
--- a/ui/src/views/storage/AttachVolume.vue
+++ b/ui/src/views/storage/AttachVolume.vue
@@ -105,7 +105,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/storage/CreateSnapshotFromVMSnapshot.vue b/ui/src/views/storage/CreateSnapshotFromVMSnapshot.vue
index d9ed976f4f2..84f04883f73 100644
--- a/ui/src/views/storage/CreateSnapshotFromVMSnapshot.vue
+++ b/ui/src/views/storage/CreateSnapshotFromVMSnapshot.vue
@@ -98,7 +98,7 @@ export default {
},
handleSubmit (e) {
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/storage/CreateVolume.vue b/ui/src/views/storage/CreateVolume.vue
index 67cdd9b0234..045b500b0db 100644
--- a/ui/src/views/storage/CreateVolume.vue
+++ b/ui/src/views/storage/CreateVolume.vue
@@ -194,7 +194,7 @@ export default {
},
handleSubmit (e) {
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/storage/FormSchedule.vue b/ui/src/views/storage/FormSchedule.vue
index 273a62f51ac..441632860ea 100644
--- a/ui/src/views/storage/FormSchedule.vue
+++ b/ui/src/views/storage/FormSchedule.vue
@@ -351,7 +351,7 @@ export default {
},
handleSubmit (e) {
if (this.actionLoading) return
- this.form.validateFields((error, values) => {
+ this.form.validateFieldsAndScroll((error, values) => {
if (error) {
return
}
diff --git a/ui/src/views/storage/ResizeVolume.vue b/ui/src/views/storage/ResizeVolume.vue
index 9b0771a3295..8c23fa3606b 100644
--- a/ui/src/views/storage/ResizeVolume.vue
+++ b/ui/src/views/storage/ResizeVolume.vue
@@ -99,7 +99,7 @@ export default {
},
handleSubmit (e) {
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/storage/RestoreAttachBackupVolume.vue b/ui/src/views/storage/RestoreAttachBackupVolume.vue
index 4b92f58ea04..07b18d9ed20 100644
--- a/ui/src/views/storage/RestoreAttachBackupVolume.vue
+++ b/ui/src/views/storage/RestoreAttachBackupVolume.vue
@@ -137,7 +137,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.actionLoading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/storage/TakeSnapshot.vue b/ui/src/views/storage/TakeSnapshot.vue
index 26afc9e87e8..b726e7c0645 100644
--- a/ui/src/views/storage/TakeSnapshot.vue
+++ b/ui/src/views/storage/TakeSnapshot.vue
@@ -139,7 +139,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.actionLoading) return
- this.form.validateFields((error, values) => {
+ this.form.validateFieldsAndScroll((error, values) => {
if (error) {
return
}
diff --git a/ui/src/views/storage/UploadLocalVolume.vue b/ui/src/views/storage/UploadLocalVolume.vue
index dfb2cb0bfdb..c4f1d569014 100644
--- a/ui/src/views/storage/UploadLocalVolume.vue
+++ b/ui/src/views/storage/UploadLocalVolume.vue
@@ -171,7 +171,7 @@ export default {
handleSubmit (e) {
e.preventDefault()
if (this.loading) return
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}
diff --git a/ui/src/views/tools/ImportUnmanagedInstance.vue b/ui/src/views/tools/ImportUnmanagedInstance.vue
index 6edb065ef14..ecde62fb4e4 100644
--- a/ui/src/views/tools/ImportUnmanagedInstance.vue
+++ b/ui/src/views/tools/ImportUnmanagedInstance.vue
@@ -621,7 +621,7 @@ export default {
},
handleSubmit (e) {
e.preventDefault()
- this.form.validateFields((err, values) => {
+ this.form.validateFieldsAndScroll((err, values) => {
if (err) {
return
}