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

Reply via email to