diff --git a/lib/objects.py b/lib/objects.py index 1a6178d6553002645a96a3ba38de97c0ade6e1cb..73f89d1af10eb0bb890639bf44e564873c32b2f5 100644 --- a/lib/objects.py +++ b/lib/objects.py @@ -312,6 +312,24 @@ class NIC(ConfigObject): """Config object representing a network card.""" __slots__ = ["mac", "ip", "bridge"] + @classmethod + def CheckParameterSyntax(cls, nicparams): + """Check the given parameters for validity. + + @type nicparams: dict + @param nicparams: dictionary with parameter names/value + @raise errors.ConfigurationError: when a parameter is not valid + + """ + if nicparams[constants.NIC_MODE] not in constants.NIC_VALID_MODES: + err = "Invalid nic mode: %s" % nicparams[constants.NIC_MODE] + raise errors.ConfigurationError(err) + + if (nicparams[constants.NIC_MODE] is constants.NIC_MODE_BRIDGED and + not nicparams[constants.NIC_LINK]): + err = "Missing bridged nic link" + raise errors.ConfigurationError(err) + class Disk(ConfigObject): """Config object representing a block device.""" diff --git a/test/ganeti.config_unittest.py b/test/ganeti.config_unittest.py index 24c9491ca435724f8613cc845e2a3615ac3aa448..b9b293eb7222b721bd045a502f886ca5ed284a9c 100755 --- a/test/ganeti.config_unittest.py +++ b/test/ganeti.config_unittest.py @@ -152,6 +152,24 @@ class TestConfigRunner(unittest.TestCase): # but the fake_instance update should still fail self.failUnlessRaises(errors.ConfigurationError, cfg.Update, fake_instance) + def testNICParameterSyntaxCheck(self): + """Test the NIC's CheckParameterSyntax function""" + mode = constants.NIC_MODE + link = constants.NIC_LINK + m_bridged = constants.NIC_MODE_BRIDGED + m_routed = constants.NIC_MODE_ROUTED + CheckSyntax = objects.NIC.CheckParameterSyntax + + CheckSyntax(constants.NICC_DEFAULTS) + CheckSyntax({mode: m_bridged, link: 'br1'}) + CheckSyntax({mode: m_routed, link: 'default'}) + self.assertRaises(errors.ConfigurationError, + CheckSyntax, {mode: '000invalid', link: 'any'}) + self.assertRaises(errors.ConfigurationError, + CheckSyntax, {mode: m_bridged, link: None}) + self.assertRaises(errors.ConfigurationError, + CheckSyntax, {mode: m_bridged, link: ''}) + if __name__ == '__main__': unittest.main()