diff --git a/ui/src/views/extension/CreateExtension.vue b/ui/src/views/extension/CreateExtension.vue
index 11d0c776e4d..0dfde238279 100644
--- a/ui/src/views/extension/CreateExtension.vue
+++ b/ui/src/views/extension/CreateExtension.vue
@@ -135,7 +135,7 @@ export default {
if (!value || value.length === 0) {
return ''
}
- return value.replace(/[^a-zA-Z0-9._-]/g, '').toLowerCase()
+ return value.replace(/[^a-zA-Z0-9._-]/g, '_').toLowerCase()
},
extenstionBasePath () {
return (this.$store.getters.features.extensionspath || '[EXTENSIONS_PATH]') + '/' + this.safeName + '/'
diff --git a/ui/src/views/infra/network/ServiceProvidersTab.vue b/ui/src/views/infra/network/ServiceProvidersTab.vue
index 1aff9db5f32..f659ce1f016 100644
--- a/ui/src/views/infra/network/ServiceProvidersTab.vue
+++ b/ui/src/views/infra/network/ServiceProvidersTab.vue
@@ -535,65 +535,6 @@ export default {
],
details: ['name', 'state', 'id', 'servicelist', 'physicalnetworkid']
},
- {
- title: 'F5BigIp',
- actions: [
- {
- api: 'addF5LoadBalancer',
- listView: true,
- icon: 'plus-outlined',
- label: 'label.add.f5.device',
- component: shallowRef(defineAsyncComponent(() => import('@/views/infra/network/providers/AddF5LoadBalancer.vue')))
- },
- {
- api: 'updateNetworkServiceProvider',
- icon: 'stop-outlined',
- listView: true,
- label: 'label.disable.provider',
- confirm: 'message.confirm.disable.provider',
- show: (record) => { return record && record.id && record.state === 'Enabled' },
- mapping: {
- state: {
- value: (record) => { return 'Disabled' }
- }
- }
- },
- {
- api: 'updateNetworkServiceProvider',
- icon: 'play-circle-outlined',
- listView: true,
- label: 'label.enable.provider',
- confirm: 'message.confirm.enable.provider',
- show: (record) => { return record && record.id && record.state === 'Disabled' },
- mapping: {
- state: {
- value: (record) => { return 'Enabled' }
- }
- }
- },
- {
- api: 'deleteNetworkServiceProvider',
- listView: true,
- icon: 'poweroff-outlined',
- label: 'label.shutdown.provider',
- confirm: 'message.confirm.delete.provider',
- show: (record) => { return record && record.id }
- }
- ],
- details: ['name', 'state', 'id', 'servicelist'],
- lists: [
- {
- title: 'label.devices',
- api: 'listF5LoadBalancers',
- mapping: {
- physicalnetworkid: {
- value: (record) => { return record.physicalnetworkid }
- }
- },
- columns: ['ipaddress', 'lbdevicestate', 'actions']
- }
- ]
- },
{
title: 'GloboDns',
actions: [
diff --git a/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue b/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue
index 3655ace799d..0334b38515f 100644
--- a/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue
+++ b/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue
@@ -2211,7 +2211,11 @@ export default {
resolve(result)
}).catch(error => {
message = error.response.headers['x-description']
- reject(message)
+ if (message.includes('is already in the database')) {
+ resolve()
+ } else {
+ reject(message)
+ }
})
})
},
@@ -2223,11 +2227,7 @@ export default {
resolve()
}).catch(error => {
message = error.response.headers['x-description']
- if (message.includes('is already in the database')) {
- resolve()
- } else {
- reject(message)
- }
+ reject(message)
})
})
},
diff --git a/ui/src/views/network/CreateVpc.vue b/ui/src/views/network/CreateVpc.vue
index 0b251364a92..98e8bb408c1 100644
--- a/ui/src/views/network/CreateVpc.vue
+++ b/ui/src/views/network/CreateVpc.vue
@@ -72,7 +72,7 @@
:placeholder="apiParams.cidr.description"/>
@@ -276,6 +276,9 @@ export default {
return sourcenatService && sourcenatService.length === 1
}
return false
+ },
+ selectedVpcOfferingHavingRoutedNetworkMode () {
+ return this.selectedVpcOffering && this.selectedVpcOffering.networkmode === 'ROUTED'
}
},
methods: {
@@ -397,6 +400,7 @@ export default {
handleVpcOfferingChange (value) {
this.selectedVpcOffering = {}
if (!value) {
+ this.updateCidrRule()
return
}
for (var offering of this.vpcOfferings) {
@@ -406,9 +410,17 @@ export default {
if (this.isASNumberRequired()) {
this.fetchZoneASNumbers()
}
- return
+ break
}
}
+ this.updateCidrRule()
+ },
+ updateCidrRule () {
+ if (!this.selectedVpcOfferingHavingRoutedNetworkMode) {
+ this.rules.cidr = [{ required: true, message: this.$t('message.error.required.input') }]
+ } else {
+ delete this.rules.cidr
+ }
},
handleASNumberChange (selectedIndex) {
this.selectedAsNumber = this.asNumbersZone[selectedIndex].asnumber
diff --git a/usage/pom.xml b/usage/pom.xml
index cfc9317d597..632becca598 100644
--- a/usage/pom.xml
+++ b/usage/pom.xml
@@ -24,7 +24,7 @@
org.apache.cloudstack
cloudstack
- 4.21.0.0-SNAPSHOT
+ 4.22.0.0-SNAPSHOT
diff --git a/utils/pom.xml b/utils/pom.xml
index 1f7235ea97e..f38a1a58910 100755
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -24,7 +24,7 @@
org.apache.cloudstack
cloudstack
- 4.21.0.0-SNAPSHOT
+ 4.22.0.0-SNAPSHOT
../pom.xml
diff --git a/utils/src/main/java/com/cloud/utils/UuidUtils.java b/utils/src/main/java/com/cloud/utils/UuidUtils.java
index 42604e5c8a0..6f62bd4a952 100644
--- a/utils/src/main/java/com/cloud/utils/UuidUtils.java
+++ b/utils/src/main/java/com/cloud/utils/UuidUtils.java
@@ -22,6 +22,8 @@ package com.cloud.utils;
import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.xerces.impl.xpath.regex.RegularExpression;
+import java.util.UUID;
+
public class UuidUtils {
private static final RegularExpression uuidRegex = new RegularExpression("[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}");
@@ -64,4 +66,9 @@ public class UuidUtils {
public static RegularExpression getUuidRegex() {
return uuidRegex;
}
+
+
+ public static UUID nameUUIDFromBytes(byte[] name) {
+ return UUID.nameUUIDFromBytes(name);
+ }
}
diff --git a/vmware-base/pom.xml b/vmware-base/pom.xml
index fda4d25b6bf..dc1ed486956 100644
--- a/vmware-base/pom.xml
+++ b/vmware-base/pom.xml
@@ -24,7 +24,7 @@
org.apache.cloudstack
cloudstack
- 4.21.0.0-SNAPSHOT
+ 4.22.0.0-SNAPSHOT
diff --git a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
index 402dcf2bcc3..0989c4856e1 100644
--- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
+++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
@@ -67,6 +67,7 @@ import com.cloud.utils.ActionDelegate;
import com.cloud.utils.LogUtils;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
+import com.cloud.utils.UuidUtils;
import com.cloud.utils.cisco.n1kv.vsm.NetconfHelper;
import com.cloud.utils.cisco.n1kv.vsm.PolicyMap;
import com.cloud.utils.cisco.n1kv.vsm.PortProfile;
@@ -247,7 +248,7 @@ public class HypervisorHostHelper {
}
public static String getSecondaryDatastoreUUID(String storeUrl) {
- return UUID.nameUUIDFromBytes(storeUrl.getBytes()).toString();
+ return UuidUtils.nameUUIDFromBytes(storeUrl.getBytes()).toString();
}
public static DatastoreMO getHyperHostDatastoreMO(VmwareHypervisorHost hyperHost, String datastoreName) throws Exception {