diff --git a/shaker/engine/deploy.py b/shaker/engine/deploy.py index 98ccfaf..9ce37fa 100644 --- a/shaker/engine/deploy.py +++ b/shaker/engine/deploy.py @@ -61,7 +61,9 @@ def generate_agents(compute_nodes, accommodation, unique): zones = accommodation.get('zones') if zones: - compute_nodes = [c for c in compute_nodes if c['zone'] in zones] + compute_nodes = [ + c for c in compute_nodes if c['zone'] in zones or + ':'.join(filter(None, [c['zone'], c['host']])) in zones] if 'cross_az' in accommodation: # sort nodes to interleave hosts from different zones compute_nodes = prepare_for_cross_az(compute_nodes, zones) diff --git a/shaker/tests/test_deploy.py b/shaker/tests/test_deploy.py index 2eb5ab6..33410e7 100644 --- a/shaker/tests/test_deploy.py +++ b/shaker/tests/test_deploy.py @@ -72,6 +72,24 @@ class TestDeploy(testtools.TestCase): unique) self.assertEqual(expected, actual) + def test_generate_agents_alone_single_room_az_host(self): + unique = 'UU1D' + expected = { + 'UU1D_agent_0': { + 'id': 'UU1D_agent_0', + 'mode': 'alone', + 'availability_zone': '%s:uno' % ZONE, + 'zone': ZONE, + 'node': 'uno'}, + } + zones = ['%s:uno' % ZONE] + accommodation = deploy.normalize_accommodation( + ['single_room', {'zones': zones}]) + actual = deploy.generate_agents(nodes_helper('uno', 'dos'), + accommodation, + unique) + self.assertEqual(expected, actual) + def test_generate_agents_pair_single_room(self): unique = 'UU1D' expected = { @@ -96,6 +114,32 @@ class TestDeploy(testtools.TestCase): unique) self.assertEqual(expected, actual) + def test_generate_agents_pair_single_room_az_host(self): + unique = 'UU1D' + expected = { + 'UU1D_master_0': { + 'id': 'UU1D_master_0', + 'mode': 'master', + 'availability_zone': '%s:uno' % ZONE, + 'node': 'uno', + 'zone': ZONE, + 'slave_id': 'UU1D_slave_0'}, + 'UU1D_slave_0': { + 'id': 'UU1D_slave_0', + 'master_id': 'UU1D_master_0', + 'mode': 'slave', + 'availability_zone': '%s:dos' % ZONE, + 'zone': ZONE, + 'node': 'dos'}, + } + zones = ['%s:uno' % ZONE, '%s:dos' % ZONE] + accommodation = deploy.normalize_accommodation( + ['pair', 'single_room', {'zones': zones}]) + actual = deploy.generate_agents(nodes_helper('uno', 'dos', 'tre'), + accommodation, + unique) + self.assertEqual(expected, actual) + def test_generate_agents_pair_single_room_not_enough(self): unique = 'UU1D' accommodation = deploy.normalize_accommodation(['pair', 'single_room']) @@ -161,6 +205,46 @@ class TestDeploy(testtools.TestCase): unique) self.assertEqual(expected, actual) + def test_generate_agents_pair_double_room_az_host(self): + unique = 'UU1D' + expected = { + 'UU1D_master_0': { + 'id': 'UU1D_master_0', + 'mode': 'master', + 'availability_zone': '%s:uno' % ZONE, + 'node': 'uno', + 'zone': ZONE, + 'slave_id': 'UU1D_slave_0'}, + 'UU1D_slave_0': { + 'id': 'UU1D_slave_0', + 'master_id': 'UU1D_master_0', + 'mode': 'slave', + 'availability_zone': '%s:uno' % ZONE, + 'zone': ZONE, + 'node': 'uno'}, + 'UU1D_master_1': { + 'id': 'UU1D_master_1', + 'mode': 'master', + 'availability_zone': '%s:dos' % ZONE, + 'node': 'dos', + 'zone': ZONE, + 'slave_id': 'UU1D_slave_1'}, + 'UU1D_slave_1': { + 'id': 'UU1D_slave_1', + 'master_id': 'UU1D_master_1', + 'mode': 'slave', + 'availability_zone': '%s:dos' % ZONE, + 'zone': ZONE, + 'node': 'dos'}, + } + zones = ['%s:uno' % ZONE, '%s:dos' % ZONE] + accommodation = deploy.normalize_accommodation( + ['pair', 'double_room', {'zones': zones}]) + actual = deploy.generate_agents(nodes_helper('uno', 'dos', 'tre'), + accommodation, + unique) + self.assertEqual(expected, actual) + def test_generate_agents_pair_mixed_room(self): unique = 'UU1D' expected = {