def _check_redundancy_setting(self, redundancy, setting): """ Check that DeviceProvider.Redundancy matches Setting. Return None if so or string with error message if it does not match. """ # Too many return statements, but it has a purpose. # pylint: disable-msg=R0911 drmax = setting.get('DataRedundancyMax', None) drmin = setting.get('DataRedundancyMin', None) drgoal = setting.get('DataRedundancyGoal', None) if drmax is not None and int(drmax) < redundancy.data_redundancy: return "DataRedundancyMax is too low." if drmin is not None and int(drmin) > redundancy.data_redundancy: return "DataRedundancyMin is too high." if (drmax is None and drmin is None and drgoal is not None and int(drgoal) != redundancy.data_redundancy): # only goal is set - it must match return "DataRedundancyGoal does not match." esmax = setting.get('ExtentStripeLengthMax', None) esmin = setting.get('ExtentStripeLengthMin', None) esgoal = setting.get('ExtentStripeLength', None) if esmax is not None and int(esmax) < redundancy.stripe_length: return "ExtentStripeLengthMax is too low." if esmin is not None and int(esmin) > redundancy.stripe_length: return "ExtentStripeLengthMin is too high." if (esmax is None and esmin is None and esgoal is not None and int(esgoal) != redundancy.stripe_length): # only goal is set - it must match return "ExtentStripeLength does not match." prmax = setting.get('PackageRedundancyMax', None) prmin = setting.get('PackageRedundancyMin', None) prgoal = setting.get('PackageRedundancyGoal', None) if prmax is not None and int(prmax) < redundancy.package_redundancy: return "PackageRedundancyMax is too low." if prmin is not None and int(prmin) > redundancy.package_redundancy: return "PackageRedundancyMin is too high." if (prmax is None and prmin is None and prgoal is not None and prgoal != redundancy.package_redundancy): # only goal is set - it must match return "PackageRedundancyGoal does not match." nspof = setting.get('NoSinglePointOfFailure', None) if (nspof is not None and SettingProvider.string_to_bool(nspof) != redundancy.no_single_point_of_failure): return "NoSinglePointOfFailure does not match." parity = setting.get('ParityLayout', None) if (parity is not None and int(parity) != redundancy.parity_layout): return "ParityLayout does not match." return None
def _check_redundancy_goal_setting(self, redundancy, setting): """ Check that DeviceProvider.Redundancy matches Setting['*Goal']. Return None if so or string with error message if it does not match. If any of the *Goal property is missing, the min/max is checked if it fits. """ drgoal = setting.get('DataRedundancyGoal', None) if (drgoal is not None and int(drgoal) != redundancy.data_redundancy): return "DataRedundancyGoal does not match." esgoal = setting.get('ExtentStripeLength', None) if (esgoal is not None and int(esgoal) != redundancy.stripe_length): return "ExtentStripeLength does not match." prgoal = setting.get('PackageRedundancyGoal', None) if (prgoal is not None and prgoal != redundancy.package_redundancy): return "PackageRedundancyGoal does not match." nspof = setting.get('NoSinglePointOfFailure', None) if (nspof is not None and SettingProvider.string_to_bool(nspof) != redundancy.no_single_point_of_failure): return "NoSinglePointOfFailure does not match." parity = setting.get('ParityLayout', None) if (parity is not None and int(parity) != redundancy.parity_layout): return "ParityLayout does not match." return self._check_redundancy_setting(redundancy, setting)