def test_multiple_vars(self): specs = [ ('disk', 'vda', 'size', '8'), ('disk', 'vdb', 'size', '16'), ] specs2 = [ ('disk', 'vda', 'size', '8'), ('disk', 'vdb', 'size', '8'), ] lines = [ ('disk', 'vda', 'size', '8'), ('disk', 'vdb', 'size', '8'), ] arr = {} self.assert_(not matcher.match_all(lines, specs, arr, {})) self.assert_(matcher.match_all(lines, specs2, arr, {}), lines)
def test_in2(self): specs = [('disk', '$disk=in("vda", "vdb")', 'size', '20')] lines = [ ('disk', 'vda', 'size', '20'), ] arr = {} self.assert_(matcher.match_all(lines, specs, arr, {})) self.assertEqual(arr['disk'], 'vda')
def test_in(self): specs = [('disk', '$disk', 'size', 'in(10, 20, 30)')] lines = [ ('disk', 'vda', 'size', '20'), ] arr = {} self.assert_(matcher.match_all(lines, specs, arr, {})) self.assertEqual(arr['disk'], 'vda')
def test_le(self): specs = [('disk', '$disk', 'size', 'le(20)')] lines = [ ('disk', 'vda', 'size', '20'), ] arr = {} self.assertTrue(matcher.match_all(lines, specs, arr, {})) self.assertEqual(arr['disk'], 'vda')
def test_network(self): specs = [('network', '$eth', 'ipv4', 'network(192.168.2.0/24)')] lines = [ ('network', 'eth0', 'ipv4', '192.168.2.2'), ] arr = {} if matcher._HAS_IPADDR: self.assert_(matcher.match_all(lines, specs, arr, {})) self.assertEqual(arr['eth'], 'eth0')
def test_2vars(self): specs = [ ('disk', '$disk', 'size', '$size'), ] lines = [ ('disk', 'vda', 'size', '8'), ] arr = {} self.assert_(matcher.match_all(lines, specs, arr, {})) self.assertEqual(arr, {'size': '8', 'disk': 'vda', })
def test_backtrack3(self): specs = [ ('disk', '$disk', 'size', '8'), ('disk', '$disk', 'type', 'c'), ('disk', '$disk2', 'size', '8'), ] lines = [ ('disk', 'vda', 'size', '8'), ('disk', 'vda', 'type', 'a'), ('disk', 'vdb', 'size', '8'), ('disk', 'vdb', 'type', 'b'), ] arr = {} self.assertFalse(matcher.match_all(lines, specs, arr, {}))
def test_backtrack(self): specs = [ ('disk', '$disk', 'size', '8'), ('disk', '$disk', 'type', 'b'), ] lines = [ ('disk', 'vda', 'size', '8'), ('disk', 'vda', 'type', 'a'), ('disk', 'vdb', 'size', '8'), ('disk', 'vdb', 'type', 'b'), ] arr = {} self.assertTrue(matcher.match_all(lines, specs, arr, {})) self.assertEqual(arr['disk'], 'vdb', arr)
def test_vars(self): lines = [ ('system', 'product', 'serial', 'CZJ31402CD'), ('disk', '1I:1:1', 'size', '1000GB'), ('disk', '1I:1:1', 'type', 'SATA'), ('disk', '1I:1:1', 'control', 'hpa'), ('disk', '1I:1:2', 'size', '1000GB'), ('disk', '1I:1:2', 'type', 'SATA'), ('disk', '1I:1:2', 'control', 'hpa'), ('disk', '1I:1:3', 'size', '1000GB'), ('disk', '1I:1:3', 'type', 'SATA'), ('disk', '1I:1:3', 'control', 'hpa'), ('disk', '1I:1:4', 'size', '1000GB'), ('disk', '1I:1:4', 'type', 'SATA'), ('disk', '1I:1:4', 'control', 'hpa'), ('disk', '2I:1:5', 'size', '1000GB'), ('disk', '2I:1:5', 'type', 'SATA'), ('disk', '2I:1:5', 'control', 'hpa'), ('disk', '2I:1:6', 'size', '1000GB'), ('disk', '2I:1:6', 'type', 'SATA'), ('disk', '2I:1:6', 'control', 'hpa'), ('disk', '2I:1:7', 'size', '100GB'), ('disk', '2I:1:7', 'type', 'SSDSATA'), ('disk', '2I:1:7', 'control', 'hpa'), ('disk', '2I:1:8', 'size', '100GB'), ('disk', '2I:1:8', 'type', 'SSDSATA'), ('disk', '2I:1:8', 'control', 'hpa'), ] specs = [('system', 'product', 'serial', 'CZJ31402CD'), ('disk', '$disk1', 'size', '100GB'), ('disk', '$disk2', 'size', '100GB'), ('disk', '$disk3', 'size', '1000GB'), ('disk', '$disk4', 'size', '1000GB'), ('disk', '$disk5', 'size', '1000GB'), ('disk', '$disk6', 'size', '1000GB'), ('disk', '$disk7', 'size', '1000GB'), ('disk', '$disk8', 'size', '1000GB')] arr = {} self.assert_(matcher.match_all(lines, specs, arr, {})) self.assertEqual(arr, {'disk1': '2I:1:7', 'disk2': '2I:1:8', 'disk3': '1I:1:1', 'disk4': '1I:1:2', 'disk5': '1I:1:3', 'disk6': '1I:1:4', 'disk7': '2I:1:5', 'disk8': '2I:1:6', } )
def test_order(self): specs = [ ('disk', '$disk1', 'size', '100'), ('disk', '$disk1', 'slot', '$slot1'), ('disk', '$disk2', 'size', '1000'), ('disk', '$disk2', 'slot', '$slot2'), ] lines = [ ('disk', '1I:1:1', 'size', '1000'), ('disk', '1I:1:1', 'control', 'hpa'), ('disk', '1I:1:1', 'slot', '2'), ('disk', '2I:1:8', 'size', '100'), ('disk', '2I:1:8', 'control', 'hpa'), ('disk', '2I:1:8', 'slot', '2'), ] arr = {} self.assert_(matcher.match_all(lines, specs, arr, {}))
def test_2dollars(self): specs = [ ('disk', '$$disk', 'size', '$size'), ] lines = [ ('disk', 'vda', 'size', '8'), ] arr = {} arr2 = {} self.assertTrue(matcher.match_all(lines, specs, arr, arr2)) self.assertEqual(arr, { 'size': '8', 'disk': 'vda', }) self.assertEqual(arr2, { 'disk': 'vda', })
def test_2dollars(self): specs = [ ('disk', '$$disk', 'size', '$size'), ] lines = [ ('disk', 'vda', 'size', '8'), ] arr = {} arr2 = {} self.assertTrue(matcher.match_all(lines, specs, arr, arr2)) self.assertEqual(arr, {'size': '8', 'disk': 'vda', }) self.assertEqual(arr2, {'disk': 'vda', })
def test_already_bound(self): lines = [ ('disk', '1I:1:2', 'size', '100GB'), ('disk', '1I:1:1', 'size', '1000GB'), ('disk', '1I:1:1', 'control', 'hpa'), ('disk', '1I:1:2', 'control', 'hpa'), ] specs = [ ('disk', '$disk1', 'size', '100GB'), ('disk', '$disk1', 'control', 'hpa'), ('disk', '$disk2', 'size', '1000GB'), ] arr = {} self.assert_(matcher.match_all(lines, specs, arr, {})) self.assertEqual(arr, {'disk1': '1I:1:2', 'disk2': '1I:1:1', })
names = eval(open(state_filename).read(-1)) idx = 0 times = '*' name = None valid_roles = "" for name, times in names: if times == '*' or int(times) > 0: if len(valid_roles) == 0: valid_roles += " %s" % (name) else: valid_roles += ", %s" % (name) specs = eval(open(cfg_dir + name + '.specs', 'r').read(-1)) var = {} var2 = {} if matcher.match_all(hw_items, specs, var, var2): break idx += 1 else: fatal_error('Unable to match requirements on the following roles : %s' % valid_roles) forced = (var2 != {}) if var2 == {}: var2 = var if times != '*': names[idx] = (name, int(times) - 1) cmdb = load_cmdb(cfg_dir, name) if cmdb:
pprint.pprint(names, stream=state_file) break idx += 1 sys.exit(0) idx = 0 times = '*' name = None valid_roles = [] for name, times in names: if times == '*' or int(times) > 0: valid_roles.append(name) specs = eval(open(cfg_dir + name + '.specs', 'r').read(-1)) var = {} var2 = {} if matcher.match_all(hw_items, specs, var, var2): log('Specs %s matches' % name) forced = (var2 != {}) if var2 == {}: var2 = var if times != '*': names[idx] = (name, int(times) - 1) log('Decrementing %s to %d' % (name, int(times) - 1)) cmdb = load_cmdb(cfg_dir, name) if cmdb: if update_cmdb(cmdb, var, var2, forced): save_cmdb(cfg_dir, name, cmdb)