Mike Kolesnik has uploaded a new change for review. Change subject: engine: Added checks for external network on cluster ......................................................................
engine: Added checks for external network on cluster 1. External network cannot be used as a display network. 2. External network cannot be a required network. Change-Id: I65510537d10ad970f40a717ca8709ef737326b44 Signed-off-by: Mike Kolesnik <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 8 files changed, 71 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/69/13569/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java index 3945eab..d034dbf 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java @@ -21,6 +21,8 @@ public class AttachNetworkToVdsGroupCommand<T extends AttachNetworkToVdsGroupParameter> extends VdsGroupCommandBase<T> { + private Network persistedNetwork; + public AttachNetworkToVdsGroupCommand(T parameters) { super(parameters); setVdsGroupId(parameters.getVdsGroupId()); @@ -72,12 +74,20 @@ private boolean validateAttachment() { NetworkClusterValidator validator = new NetworkClusterValidator(getNetworkCluster(), getVdsGroup().getcompatibility_version()); - return (!NetworkUtils.isManagementNetwork(getNetwork()) || validate(validator.managementNetworkAttachment(getNetworkName()))) - && validate(validator.migrationPropertySupported(getNetworkName())); + return (!NetworkUtils.isManagementNetwork(getNetwork()) + || validate(validator.managementNetworkAttachment(getNetworkName()))) + && validate(validator.migrationPropertySupported(getNetworkName())) + && (getPersistedNetwork().getProvidedBy() == null + || validateExternalNetwork(validator)); + } + + private boolean validateExternalNetwork(NetworkClusterValidator validator) { + return validate(validator.externalNetworkNotDisplay(getNetworkName())) + && validate(validator.externalNetworkNotRequired(getNetworkName())); } private boolean logicalNetworkExists() { - if (getNetworkDAO().get(getNetworkCluster().getNetworkId()) != null) { + if (getPersistedNetwork() != null) { return true; } @@ -85,6 +95,13 @@ return false; } + private Network getPersistedNetwork() { + if (persistedNetwork == null) { + persistedNetwork = getNetworkDAO().get(getNetworkCluster().getNetworkId()); + } + return persistedNetwork; + } + private boolean changesAreClusterCompatible() { if (getParameters().getNetwork().isVmNetwork() == false) { if (!FeatureSupported.nonVmNetwork(getVdsGroup().getcompatibility_version())) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java index a40e726..151b4e1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java @@ -44,4 +44,32 @@ return !networkCluster.isMigration() || FeatureSupported.migrationNetwork(version) ? ValidationResult.VALID : new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MIGRATION_NETWORK_IS_NOT_SUPPORTED); } + + /** + * Make sure the external network attachment is valid: The network cannot be used as a display network. + * + * @param networkName + * The network's name. + * @return Error iff the external network attachment is not valid. + */ + public ValidationResult externalNetworkNotDisplay(String networkName) { + return networkCluster.isDisplay() ? + new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_DISPLAY, + String.format(NETWORK_NAME_REPLACEMENT, networkName)) + : ValidationResult.VALID; + } + + /** + * Make sure the external network attachment is valid: The network cannot be required. + * + * @param networkName + * The network's name. + * @return Error iff the external network attachment is not valid. + */ + public ValidationResult externalNetworkNotRequired(String networkName) { + return networkCluster.isRequired() ? + new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_REQUIRED, + String.format(NETWORK_NAME_REPLACEMENT, networkName)) + : ValidationResult.VALID; + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java index 0f18997..af7bdeb 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java @@ -75,8 +75,15 @@ getVdsGroupDAO().get(getNetworkCluster().getClusterId()).getcompatibility_version(); NetworkClusterValidator validator = new NetworkClusterValidator(getNetworkCluster(), clusterVersion); - return (!NetworkUtils.isManagementNetwork(getNetwork()) || validate(validator.managementNetworkAttachment(getNetworkName()))) - && validate(validator.migrationPropertySupported(getNetworkName())); + return (!NetworkUtils.isManagementNetwork(getNetwork()) + || validate(validator.managementNetworkAttachment(getNetworkName()))) + && validate(validator.migrationPropertySupported(getNetworkName())) + && (getNetwork().getProvidedBy() == null || validateExternalNetwork(validator)); + } + + private boolean validateExternalNetwork(NetworkClusterValidator validator) { + return validate(validator.externalNetworkNotDisplay(getNetworkName())) + && validate(validator.externalNetworkNotRequired(getNetworkName())); } private ValidationResult networkClusterAttachmentExists() { diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java index e88b5f0..cb76460 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java @@ -440,6 +440,8 @@ ACTION_TYPE_FAILED_EXTERNAL_NETWORK_ALREADY_EXISTS, ACTION_TYPE_FAILED_EXTERNAL_NETWORK_MUST_BE_VM_NETWORK, ACTION_TYPE_FAILED_EXTERNAL_NETWORK_DETAILS_CANNOT_BE_EDITED, + ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_DISPLAY, + ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_REQUIRED, ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED, ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_ADDRESS_CANNOT_BE_CHANGED, ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_IN_STORAGE_POOL, diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties index cf87410..c50ac60 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -464,6 +464,8 @@ ACTION_TYPE_FAILED_EXTERNAL_NETWORK_ALREADY_EXISTS=Cannot ${action} ${type}. The external network already exists as '${NetworkName}' in the data center. ACTION_TYPE_FAILED_EXTERNAL_NETWORK_MUST_BE_VM_NETWORK=Cannot ${action} ${type}. An external network cannot be a non-VM network. ACTION_TYPE_FAILED_EXTERNAL_NETWORK_DETAILS_CANNOT_BE_EDITED=Cannot ${action} ${type}. External network details (except name and description) cannot be changed. +ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_DISPLAY=Cannot ${action} ${type}. External network cannot be used as a display network. +ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_REQUIRED=Cannot ${action} ${type}. External network cannot be set as required in the cluster. ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED=Cannot ${action} ${type}. The management network '${NetworkName}' must be required, please change the network to be required and try again. ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_ADDRESS_CANNOT_BE_CHANGED=Cannot ${action} ${type}. The management network address cannot be modified without reinstalling the host, since this address was used to create the host's certification. CANNOT_PREIEW_CURRENT_IMAGE=The currently used VM Snapshot Image cannot be used in Preview command. diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java index 10663af..25ad4d0 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java @@ -1249,6 +1249,12 @@ @DefaultStringValue("Cannot ${action} ${type}. External network details (except name and description) cannot be changed.") String ACTION_TYPE_FAILED_EXTERNAL_NETWORK_DETAILS_CANNOT_BE_EDITED(); + @DefaultStringValue("Cannot ${action} ${type}. External network cannot be used as a display network.") + String ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_DISPLAY(); + + @DefaultStringValue("Cannot ${action} ${type}. External network cannot be set as required in the cluster.") + String ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_REQUIRED(); + @DefaultStringValue("Cannot ${action} ${type}. The management network '${NetworkName}' must be required, please change the network to be required and try again.") String ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index fba5ffa..ec3c9fc 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -461,6 +461,8 @@ ACTION_TYPE_FAILED_EXTERNAL_NETWORK_ALREADY_EXISTS=Cannot ${action} ${type}. The external network already exists as '${NetworkName}' in the data center. ACTION_TYPE_FAILED_EXTERNAL_NETWORK_MUST_BE_VM_NETWORK=Cannot ${action} ${type}. An external network cannot be a non-VM network. ACTION_TYPE_FAILED_EXTERNAL_NETWORK_DETAILS_CANNOT_BE_EDITED=Cannot ${action} ${type}. External network details (except name and description) cannot be changed. +ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_DISPLAY=Cannot ${action} ${type}. External network cannot be used as a display network. +ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_REQUIRED=Cannot ${action} ${type}. External network cannot be set as required in the cluster. ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED=Cannot ${action} ${type}. The management network '${NetworkName}' must be required, please change the network to be required and try again. ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_ADDRESS_CANNOT_BE_CHANGED=Cannot ${action} ${type}. The management network address cannot be modified without reinstalling the host, since this address was used to create the host's certification. CANNOT_PREIEW_CURRENT_IMAGE=The currently used VM Snapshot Image cannot be used in Preview command. diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index 22865c7..8da1b25 100644 --- a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -458,6 +458,8 @@ ACTION_TYPE_FAILED_EXTERNAL_NETWORK_ALREADY_EXISTS=Cannot ${action} ${type}. The external network already exists as '${NetworkName}' in the data center. ACTION_TYPE_FAILED_EXTERNAL_NETWORK_MUST_BE_VM_NETWORK=Cannot ${action} ${type}. An external network cannot be a non-VM network. ACTION_TYPE_FAILED_EXTERNAL_NETWORK_DETAILS_CANNOT_BE_EDITED=Cannot ${action} ${type}. External network details (except name and description) cannot be changed. +ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_DISPLAY=Cannot ${action} ${type}. External network cannot be used as a display network. +ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_REQUIRED=Cannot ${action} ${type}. External network cannot be set as required in the cluster. ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED=Cannot ${action} ${type}. The management network '${NetworkName}' must be required, please change the network to be required and try again. ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_ADDRESS_CANNOT_BE_CHANGED=Cannot ${action} ${type}. The management network address cannot be modified without reinstalling the host, since this address was used to create the host's certification. CANNOT_PREIEW_CURRENT_IMAGE=The currently used VM Snapshot Image cannot be used in Preview command. -- To view, visit http://gerrit.ovirt.org/13569 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I65510537d10ad970f40a717ca8709ef737326b44 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Mike Kolesnik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
