diff --git a/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAML2AuthManager.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAML2AuthManager.java index a5dae36581c..27f17cee6b1 100644 --- a/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAML2AuthManager.java +++ b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAML2AuthManager.java @@ -70,7 +70,7 @@ public interface SAML2AuthManager extends PluggableAPIAuthenticator, PluggableSe ConfigKey SAMLTimeout = new ConfigKey("Advanced", Integer.class, "saml2.timeout", "1800", "SAML2 IDP Metadata refresh interval in seconds, minimum value is set to 300", true); - ConfigKey SAMLCheckSignature = new ConfigKey("Advanced", Boolean.class, "saml2.check.signature", "false", + ConfigKey SAMLCheckSignature = new ConfigKey("Advanced", Boolean.class, "saml2.check.signature", "true", "Whether SAML2 signature must be checked, when enforced and when the SAML response does not have a signature would lead to login exception", true); public SAMLProviderMetadata getSPMetadata(); diff --git a/test/integration/smoke/test_cluster_drs.py b/test/integration/smoke/test_cluster_drs.py index 8b4801849fd..f1eb48f92f5 100644 --- a/test/integration/smoke/test_cluster_drs.py +++ b/test/integration/smoke/test_cluster_drs.py @@ -100,7 +100,9 @@ class TestClusterDRS(cloudstackTestCase): ) cls._cleanup.append(cls.network) - cls.migrateSvms(cls.cluster) + cls.hypervisor = cls.testClient.getHypervisorInfo() + if cls.hypervisor.lower() not in ['simulator']: + cls.migrateSvms(cls.cluster) @classmethod def migrateSvms(cls, cluster): diff --git a/ui/src/components/view/SearchView.vue b/ui/src/components/view/SearchView.vue index b81f1b3c800..f642ddf938d 100644 --- a/ui/src/components/view/SearchView.vue +++ b/ui/src/components/view/SearchView.vue @@ -66,12 +66,13 @@ return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 }" :loading="field.loading" - @input="onchange($event, field.name)"> + @input="onchange($event, field.name)" + @change="onSelectFieldChange(field.name)"> + :value="['account'].includes(field.name) ? opt.name : opt.id" + :label="$t((['storageid'].includes(field.name) || !opt.path) ? opt.name : opt.path)">
@@ -88,7 +89,7 @@ - {{ $t(opt.path || opt.name) }} + {{ $t((['storageid'].includes(field.name) || !opt.path) ? opt.name : opt.path) }}
@@ -242,6 +243,11 @@ export default { onchange: async function (event, fieldname) { this.fetchDynamicFieldData(fieldname, event.target.value) }, + onSelectFieldChange (fieldname) { + if (fieldname === 'domainid') { + this.fetchDynamicFieldData('account') + } + }, onVisibleForm () { this.visibleFilter = !this.visibleFilter if (!this.visibleFilter) return @@ -585,6 +591,9 @@ export default { if (domainIndex > -1) { this.fields[domainIndex].loading = false } + if (accountIndex > -1) { + this.fields[accountIndex].loading = false + } if (imageStoreIndex > -1) { this.fields[imageStoreIndex].loading = false } @@ -609,7 +618,9 @@ export default { if (diskOfferingIndex > -1) { this.fields[diskOfferingIndex].loading = false } - this.fillFormFieldValues() + if (Array.isArray(arrayField)) { + this.fillFormFieldValues() + } }) }, initFormFieldData () { @@ -620,6 +631,9 @@ export default { this.fetchDynamicFieldData(arrayField) }, sortArray (data, key = 'name') { + if (!data) { + return [] + } return data.sort(function (a, b) { if (a[key] < b[key]) { return -1 } if (a[key] > b[key]) { return 1 } @@ -669,8 +683,15 @@ export default { }, fetchAccounts (searchKeyword) { return new Promise((resolve, reject) => { - api('listAccounts', { listAll: true, showicon: true, keyword: searchKeyword }).then(json => { - const account = json.listaccountsresponse.account + const params = { listAll: true, isrecursive: false, showicon: true, keyword: searchKeyword } + if (this.form.domainid) { + params.domainid = this.form.domainid + } + api('listAccounts', params).then(json => { + var account = json.listaccountsresponse.account + if (this.form.domainid) { + account = account.filter(a => a.domainid === this.form.domainid) + } resolve({ type: 'account', data: account diff --git a/ui/src/views/network/CreateIsolatedNetworkForm.vue b/ui/src/views/network/CreateIsolatedNetworkForm.vue index 0c81a69057c..483268737fd 100644 --- a/ui/src/views/network/CreateIsolatedNetworkForm.vue +++ b/ui/src/views/network/CreateIsolatedNetworkForm.vue @@ -382,6 +382,9 @@ export default { }) }, fetchData () { + if (this.isAdminOrDomainAdmin()) { + this.fetchDomainData() + } this.fetchZoneData() this.allowSettingMTU() },