Lior Vernia has uploaded a new change for review. Change subject: engine: Consider custom properties in Setup Networks ......................................................................
engine: Consider custom properties in Setup Networks Added code to validate network custom properties as part of the Setup Networks command, to mark networks as modified if their custom properties have changed, and to serialize them for VDSM. Persistence of the custom properties of a network is performed right before sending the VDSM command; the alternative is to persist the data when collecting network data after the VDSM command has finished running, but at the moment VDSM doesn't report custom properties. Change-Id: Ic607fb6073f2c4c0a4790763d9a09dc7879f11ca Signed-off-by: Lior Vernia <lver...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelperTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java M backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/Version.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/customprop/CustomPropertiesUtils.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 11 files changed, 110 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/46/26646/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java index d644bed..b020eb7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java @@ -7,6 +7,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import org.apache.commons.collections.CollectionUtils; @@ -22,10 +23,13 @@ import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkBootProtocol; import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; +import org.ovirt.engine.core.common.config.Config; +import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dao.network.NetworkQoSDao; import org.ovirt.engine.core.utils.NetworkUtils; +import org.ovirt.engine.core.utils.customprop.SimpleCustomPropertiesUtil; public class SetupNetworksHelper { protected static final String VIOLATING_ENTITIES_LIST_FORMAT = "${0}_LIST {1}"; @@ -53,11 +57,15 @@ private Map<String, List<NetworkType>> ifacesWithExclusiveNetwork = new HashMap<String, List<NetworkType>>(); private final boolean hostNetworkQosSupported; + private final boolean networkCustomPropertiesSupported; public SetupNetworksHelper(SetupNetworksParameters parameters, VDS vds) { params = parameters; this.vds = vds; + hostNetworkQosSupported = FeatureSupported.hostNetworkQos(vds.getVdsGroupCompatibilityVersion()); + networkCustomPropertiesSupported = + FeatureSupported.networkCustomProperties(vds.getVdsGroupCompatibilityVersion()); } /** @@ -101,6 +109,7 @@ validateMTU(); validateNetworkQos(); validateNotRemovingLabeledNetworks(); + validateCustomProperties(); return translateViolations(); } @@ -137,9 +146,11 @@ Set<String> existingLabels = NetworkUtils.isLabeled(existingNic) ? existingNic.getLabels() : Collections.<String> emptySet(); if (!CollectionUtils.isEqualCollection(newLabels, existingLabels) - || nic.isQosOverridden() != existingNic.isQosOverridden()) { + || nic.isQosOverridden() != existingNic.isQosOverridden() + || !Objects.equals(nic.getCustomProperties(), existingNic.getCustomProperties())) { existingNic.setLabels(newLabels); existingNic.setQosOverridden(nic.isQosOverridden()); + existingNic.setCustomProperties(nic.getCustomProperties()); modifiedInterfaces.add(existingNic); } } @@ -212,6 +223,26 @@ } if (qosValidator.peakConsistentWithAverage() != ValidationResult.VALID) { addViolation(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_PEAK_LOWER_THAN_AVERAGE, iface.getNetworkName()); + } + } + } + } + + private void validateCustomProperties() { + String version = vds.getVdsGroupCompatibilityVersion().getValue(); + SimpleCustomPropertiesUtil util = SimpleCustomPropertiesUtil.getInstance(); + Map<String, String> validProperties = + util.convertProperties(Config.<String> getValue(ConfigValues.PreDefinedNetworkCustomProperties, version)); + validProperties.putAll(util.convertProperties(Config.<String> getValue(ConfigValues.UserDefinedNetworkCustomProperties, + version))); + for (VdsNetworkInterface iface : params.getInterfaces()) { + if (iface.getCustomProperties() != null) { + if (!networkCustomPropertiesSupported) { + addViolation(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_NOT_SUPPORTED, + iface.getNetworkName()); + } else if (!util.validateProperties(validProperties, iface.getCustomProperties()).isEmpty()) { + addViolation(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_BAD_INPUT, + iface.getNetworkName()); } } } @@ -504,7 +535,8 @@ return !ObjectUtils.equals(iface.getNetworkName(), existingIface.getNetworkName()) || iface.getBootProtocol() != existingIface.getBootProtocol() || staticBootProtoPropertiesChanged(iface, existingIface) - || !ObjectUtils.equals(iface.getQos(), existingIface.getQos()); + || !ObjectUtils.equals(iface.getQos(), existingIface.getQos()) + || !ObjectUtils.equals(iface.getCustomProperties(), existingIface.getCustomProperties()); } /** diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelperTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelperTest.java index b9ca651..1ded9af 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelperTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelperTest.java @@ -13,8 +13,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; @@ -56,7 +58,19 @@ mockConfig(ConfigValues.MultipleGatewaysSupported, Version.v3_2.toString(), false), mockConfig(ConfigValues.HostNetworkQosSupported, Version.v3_2.toString(), false), mockConfig(ConfigValues.HostNetworkQosSupported, Version.v3_3.toString(), false), - mockConfig(ConfigValues.HostNetworkQosSupported, Version.v3_4.toString(), true)); + mockConfig(ConfigValues.HostNetworkQosSupported, Version.v3_4.toString(), true), + mockConfig(ConfigValues.HostNetworkQosSupported, Version.v3_5.toString(), true), + mockConfig(ConfigValues.NetworkCustomPropertiesSupported, Version.v3_3.toString(), false), + mockConfig(ConfigValues.NetworkCustomPropertiesSupported, Version.v3_4.toString(), false), + mockConfig(ConfigValues.NetworkCustomPropertiesSupported, Version.v3_5.toString(), true), + mockConfig(ConfigValues.PreDefinedNetworkCustomProperties, Version.v3_2.toString(), ""), + mockConfig(ConfigValues.PreDefinedNetworkCustomProperties, Version.v3_3.toString(), ""), + mockConfig(ConfigValues.PreDefinedNetworkCustomProperties, Version.v3_4.toString(), ""), + mockConfig(ConfigValues.PreDefinedNetworkCustomProperties, Version.v3_5.toString(), ""), + mockConfig(ConfigValues.UserDefinedNetworkCustomProperties, Version.v3_2.toString(), ""), + mockConfig(ConfigValues.UserDefinedNetworkCustomProperties, Version.v3_3.toString(), ""), + mockConfig(ConfigValues.UserDefinedNetworkCustomProperties, Version.v3_4.toString(), ""), + mockConfig(ConfigValues.UserDefinedNetworkCustomProperties, Version.v3_5.toString(), "foo=^[a-zA-Z0-9]*$")); @Mock private NetworkDao networkDAO; @@ -387,6 +401,39 @@ SetupNetworksHelper helper = createHelper(createParametersForNics(iface), Version.v3_4); validateAndAssertNetworkModified(helper, network); + } + + @Test + public void customPropertiesNotSupported() { + Network network = createNetwork(MANAGEMENT_NETWORK_NAME); + mockExistingNetworks(network); + VdsNetworkInterface iface = createNicSyncedWithNetwork("eth0", network); + mockExistingIfaces(iface); + iface.setCustomProperties(createCustomProperties()); + + SetupNetworksHelper helper = createHelper(createParametersForNics(iface)); + + validateAndExpectViolation(helper, + VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_NOT_SUPPORTED, + MANAGEMENT_NETWORK_NAME); + } + + @Test + public void customPropertiesModified() { + Network network = createNetwork(MANAGEMENT_NETWORK_NAME); + mockExistingNetworks(network); + VdsNetworkInterface iface = createNicSyncedWithNetwork("eth0", network); + mockExistingIfaces(iface); + iface.setCustomProperties(createCustomProperties()); + + SetupNetworksHelper helper = createHelper(createParametersForNics(iface), Version.v3_5); + + validateAndExpectNoViolations(helper); + assertNoBondsModified(helper); + assertNetworkModified(helper, network); + assertNoNetworksRemoved(helper); + assertNoBondsRemoved(helper); + assertInterfaceModified(helper, iface); } /* --- Tests for external networks --- */ @@ -1773,6 +1820,12 @@ return qos; } + private Map<String, String> createCustomProperties() { + Map<String, String> customProperties = new HashMap<String, String>(); + customProperties.put("foo", "bar"); + return customProperties; + } + private void mockExistingNetworks(Network... networks) { when(networkDAO.getAllForCluster(any(Guid.class))).thenReturn(Arrays.asList(networks)); } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java index 9ef0f6c..dd64c99 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java @@ -706,6 +706,8 @@ ACTION_TYPE_FAILED_INVALID_CUSTOM_PROPERTIES_DUPLICATE_KEYS(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_CUSTOM_PROPERTIES_NOT_SUPPORTED_IN_VERSION(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_INVALID_DEVICE_TYPE_FOR_CUSTOM_PROPERTIES(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_NOT_SUPPORTED(ErrorType.NOT_SUPPORTED), + ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_BAD_INPUT(ErrorType.BAD_PARAMETERS), NETWORK_ILEGAL_NETWORK_NAME(ErrorType.BAD_PARAMETERS), NETWORK_ATTACH_ILLEGAL_GATEWAY(ErrorType.BAD_PARAMETERS), diff --git a/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/Version.java b/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/Version.java index 8a918ea..e97b429 100644 --- a/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/Version.java +++ b/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/Version.java @@ -21,6 +21,7 @@ public static final Version v3_2 = new Version(3, 2); public static final Version v3_3 = new Version(3, 3); public static final Version v3_4 = new Version(3, 4); + public static final Version v3_5 = new Version(3, 5); public static final List<Version> ALL = Arrays.asList(v2_2, v3_0, v3_1, v3_2, v3_3, v3_4); 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 176433d..c83a593 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -209,6 +209,8 @@ ACTION_TYPE_FAILED_INVALID_CUSTOM_PROPERTIES_INVALID_KEYS=Cannot ${action} ${type} if some of the specified custom properties are not configured by the system. The keys are: ${MissingKeys} ACTION_TYPE_FAILED_INVALID_CUSTOM_PROPERTIES_INVALID_VALUES=Cannot ${action} ${type} if some of the specified custom properties have illegal values. The keys are: ${WrongValueKeys} ACTION_TYPE_FAILED_CUSTOM_PROPERTIES_NOT_SUPPORTED_IN_VERSION=Cannot ${action} ${type}. Custom properties are not supported in version: ${NotSupportedInVersion} +ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_NOT_SUPPORTED=Cannot ${action} $type}. Network custom properties are not supported in the cluster's compatibility version, but they were supplied for the following network(s): ${ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_NOT_SUPPORTED_LIST}. +ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_BAD_INPUT=Cannot ${action} $type}. Some network custom properties contained errors (bad syntax, non-existing keys or invalid values), please take a closer look at the following network(s): ${ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_BAD_INPUT_LIST}. ACTION_TYPE_FAILED_INVALID_DEVICE_TYPE_FOR_CUSTOM_PROPERTIES=Cannot ${action} ${type}. Custom properties are not supported for device type: ${InvalidDeviceType} ACTION_TYPE_FAILED_VDS_VM_CLUSTER=Cannot ${action} ${type}. There are no available running Hosts in the Host Cluster. ACTION_TYPE_FAILED_VDS_VM_MEMORY=Cannot ${action} ${type}. There are no available running Hosts with sufficient memory in VM's Cluster . diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/customprop/CustomPropertiesUtils.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/customprop/CustomPropertiesUtils.java index 87ba284..cd4a9ae 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/customprop/CustomPropertiesUtils.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/customprop/CustomPropertiesUtils.java @@ -66,7 +66,7 @@ * Regex describing properties definition. They can be in the from of "key=value" or "key1=value1;... key-n=value_n" * (last {@code ;} character can be omitted) */ - protected static final String VALIDATION_STR = KEY_VALUE_REGEX_STR + "(;" + KEY_VALUE_REGEX_STR + ")*;?"; + protected static final String VALIDATION_STR = "(" + KEY_VALUE_REGEX_STR + "(;" + KEY_VALUE_REGEX_STR + ")*;?)?"; /** * Pattern to validation properties definition @@ -141,7 +141,7 @@ /** * Converts properties specification from {@code String} to {@code Map<String, Pattern} */ - protected void parsePropertiesRegex(String properties, Map<String, Pattern> keysToRegex) { + public void parsePropertiesRegex(String properties, Map<String, Pattern> keysToRegex) { if (StringUtils.isEmpty(properties)) { return; } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java index 6209427..48076c14 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java @@ -191,6 +191,7 @@ vdsIface.setId(dbIface.getId()); vdsIface.setLabels(dbIface.getLabels()); vdsIface.setQosOverridden(dbIface.isQosOverridden()); + vdsIface.setCustomProperties(dbIface.getCustomProperties()); dbIfacesToBatch.add(vdsIface); updatedIfaces.add(vdsIface.getName()); } else { @@ -224,6 +225,7 @@ VdsNetworkInterface nic = nicsByName.get(nicForUpdate.getName()); nicForUpdate.setLabels(nic.getLabels()); nicForUpdate.setQosOverridden(nic.isQosOverridden()); + nicForUpdate.setCustomProperties(nic.getCustomProperties()); } } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommand.java index 7b3fbdb..3d0492f 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommand.java @@ -79,6 +79,10 @@ opts.put(DEFAULT_ROUTE, Boolean.TRUE); } + if (iface.getCustomProperties() != null) { + opts.put(VdsProperties.NETWORK_CUSTOM_PROPERTIES, iface.getCustomProperties()); + } + networks.put(network.getName(), opts); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java index 26d8cf2..65c1124 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java @@ -113,6 +113,7 @@ public static final String BRIDGE = "bridge"; public static final String NW_FILTER = "filter"; public static final String MAC_ADDR = "macAddr"; + public static final String NETWORK_CUSTOM_PROPERTIES = "custom"; public static final String supported_cluster_levels = "clusterLevels"; public static final String supported_engines = "supportedENGINEs"; 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 b5c1784..b220f5c 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 @@ -565,6 +565,12 @@ @DefaultStringValue("Cannot ${action} ${type}. Custom properties are not supported in version: ${NotSupportedInVersion}") String ACTION_TYPE_FAILED_CUSTOM_PROPERTIES_NOT_SUPPORTED_IN_VERSION(); + @DefaultStringValue("Cannot ${action} $type}. Network custom properties are not supported in the cluster's compatibility version, but they were supplied for the following network(s): ${ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_NOT_SUPPORTED_LIST}.") + String ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_NOT_SUPPORTED(); + + @DefaultStringValue("Cannot ${action} $type}. Some network custom properties contained errors (bad syntax, non-existing keys or invalid values), please take a closer look at the following network(s): ${ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_BAD_INPUT_LIST}.") + String ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_BAD_INPUT(); + @DefaultStringValue("Cannot ${action} ${type}. Custom properties are not supported for device type: ${InvalidDeviceType}") String ACTION_TYPE_FAILED_INVALID_DEVICE_TYPE_FOR_CUSTOM_PROPERTIES(); 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 be68147..e29267b 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 @@ -208,6 +208,8 @@ ACTION_TYPE_FAILED_INVALID_CUSTOM_PROPERTIES_INVALID_KEYS=Cannot ${action} ${type} if some of the specified custom properties are not configured by the system. The keys are: ${MissingKeys} ACTION_TYPE_FAILED_INVALID_CUSTOM_PROPERTIES_INVALID_VALUES=Cannot ${action} ${type} if some of the specified custom properties have illegal values. The keys are: ${WrongValueKeys} ACTION_TYPE_FAILED_CUSTOM_PROPERTIES_NOT_SUPPORTED_IN_VERSION=Cannot ${action} ${type}. Custom properties are not supported in version: ${NotSupportedInVersion} +ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_NOT_SUPPORTED=Cannot ${action} $type}. Network custom properties are not supported in the cluster's compatibility version, but they were supplied for the following network(s): ${ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_NOT_SUPPORTED_LIST}. +ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_BAD_INPUT=Cannot ${action} $type}. Some network custom properties contained errors (bad syntax, non-existing keys or invalid values), please take a closer look at the following network(s): ${ACTION_TYPE_FAILED_NETWORK_CUSTOM_PROPERTIES_BAD_INPUT_LIST}. ACTION_TYPE_FAILED_INVALID_DEVICE_TYPE_FOR_CUSTOM_PROPERTIES=Cannot ${action} ${type}. Custom properties are not supported for device type: ${InvalidDeviceType} ACTION_TYPE_FAILED_VDS_VM_CLUSTER=Cannot ${action} ${type}. There are no available running Hosts in the Host Cluster. ACTION_TYPE_FAILED_VDS_VM_MEMORY=Cannot ${action} ${type}. There are no available running Hosts with sufficient memory in VM's Cluster . -- To view, visit http://gerrit.ovirt.org/26646 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic607fb6073f2c4c0a4790763d9a09dc7879f11ca Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Lior Vernia <lver...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches