Expand roles honstname to role mapping
Expand roles is extended to return a hostname to role mapping for all instanced. this map is used to set the 'triple_role=$ROLE_NAME' tag on ports. The intent is to use these this tag in conjunction with the pre-existing tags and neutron network port information to set up the in the tripleo-common code utilized by tripleo-ansible-inventory. Change-Id: I992d7a3cd946e42039ca0819c51f104b1231171b
This commit is contained in:
parent
741e8d3be8
commit
4e8b2f226e
|
@ -171,6 +171,7 @@ def expand(roles, stack_name, expand_provisioned=True, default_image=None,
|
||||||
hostname_map = {}
|
hostname_map = {}
|
||||||
parameter_defaults = {'HostnameMap': hostname_map}
|
parameter_defaults = {'HostnameMap': hostname_map}
|
||||||
role_net_map = {}
|
role_net_map = {}
|
||||||
|
hostname_role_map = {}
|
||||||
for role in roles:
|
for role in roles:
|
||||||
name = role['name']
|
name = role['name']
|
||||||
role_net_map.setdefault(name, set())
|
role_net_map.setdefault(name, set())
|
||||||
|
@ -264,6 +265,7 @@ def expand(roles, stack_name, expand_provisioned=True, default_image=None,
|
||||||
|
|
||||||
role_net_map[name].update(
|
role_net_map[name].update(
|
||||||
[x['network'] for x in inst.get('networks', [])])
|
[x['network'] for x in inst.get('networks', [])])
|
||||||
|
hostname_role_map[inst['hostname']] = name
|
||||||
|
|
||||||
parameter_defaults['%sCount' % name] = (
|
parameter_defaults['%sCount' % name] = (
|
||||||
provisioned_count)
|
provisioned_count)
|
||||||
|
@ -273,7 +275,7 @@ def expand(roles, stack_name, expand_provisioned=True, default_image=None,
|
||||||
env = {'parameter_defaults': parameter_defaults}
|
env = {'parameter_defaults': parameter_defaults}
|
||||||
else:
|
else:
|
||||||
env = {}
|
env = {}
|
||||||
return instances, env, role_net_map
|
return instances, env, role_net_map, hostname_role_map
|
||||||
|
|
||||||
|
|
||||||
def merge_networks_defaults(defaults, instance):
|
def merge_networks_defaults(defaults, instance):
|
||||||
|
|
|
@ -216,7 +216,7 @@ def main():
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if state in ('present', 'all'):
|
if state in ('present', 'all'):
|
||||||
present, env, role_net_map = bd.expand(
|
present, env, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles=module.params['baremetal_deployment'],
|
roles=module.params['baremetal_deployment'],
|
||||||
stack_name=module.params['stack_name'],
|
stack_name=module.params['stack_name'],
|
||||||
expand_provisioned=True,
|
expand_provisioned=True,
|
||||||
|
@ -226,7 +226,7 @@ def main():
|
||||||
ssh_public_keys=module.params['ssh_public_keys'],
|
ssh_public_keys=module.params['ssh_public_keys'],
|
||||||
)
|
)
|
||||||
if state in ('absent', 'all'):
|
if state in ('absent', 'all'):
|
||||||
absent, _, _ = bd.expand(
|
absent, _, _, _ = bd.expand(
|
||||||
roles=module.params['baremetal_deployment'],
|
roles=module.params['baremetal_deployment'],
|
||||||
stack_name=module.params['stack_name'],
|
stack_name=module.params['stack_name'],
|
||||||
expand_provisioned=False,
|
expand_provisioned=False,
|
||||||
|
@ -234,6 +234,7 @@ def main():
|
||||||
)
|
)
|
||||||
env = {}
|
env = {}
|
||||||
role_net_map = {}
|
role_net_map = {}
|
||||||
|
hostname_role_map = {}
|
||||||
if state == 'present':
|
if state == 'present':
|
||||||
instances = present
|
instances = present
|
||||||
elif state == 'absent':
|
elif state == 'absent':
|
||||||
|
@ -246,7 +247,8 @@ def main():
|
||||||
msg='Expanded to %d instances' % len(instances),
|
msg='Expanded to %d instances' % len(instances),
|
||||||
instances=instances,
|
instances=instances,
|
||||||
environment=env,
|
environment=env,
|
||||||
role_net_map=role_net_map
|
role_net_map=role_net_map,
|
||||||
|
hostname_role_map=hostname_role_map,
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
module.fail_json(msg=str(e))
|
module.fail_json(msg=str(e))
|
||||||
|
|
|
@ -102,7 +102,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
{'name': 'Compute'},
|
{'name': 'Compute'},
|
||||||
{'name': 'Controller'},
|
{'name': 'Controller'},
|
||||||
]
|
]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image
|
roles, 'overcloud', True, self.default_image
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -128,13 +128,16 @@ class TestExpandRoles(base.TestCase):
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
environment['parameter_defaults'])
|
environment['parameter_defaults'])
|
||||||
|
self.assertEqual({'overcloud-controller-0': 'Controller',
|
||||||
|
'overcloud-novacompute-0': 'Compute'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_default_network(self):
|
def test_default_network(self):
|
||||||
roles = [
|
roles = [
|
||||||
{'name': 'Compute'},
|
{'name': 'Compute'},
|
||||||
{'name': 'Controller'},
|
{'name': 'Controller'},
|
||||||
]
|
]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image, self.default_network
|
roles, 'overcloud', True, self.default_image, self.default_network
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
@ -149,6 +152,9 @@ class TestExpandRoles(base.TestCase):
|
||||||
'nics': [{'network': 'ctlplane'}]},
|
'nics': [{'network': 'ctlplane'}]},
|
||||||
],
|
],
|
||||||
instances)
|
instances)
|
||||||
|
self.assertEqual({'overcloud-controller-0': 'Controller',
|
||||||
|
'overcloud-novacompute-0': 'Compute'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_networks_set_no_default_network(self):
|
def test_networks_set_no_default_network(self):
|
||||||
roles = [
|
roles = [
|
||||||
|
@ -165,7 +171,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
]}
|
]}
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image, None
|
roles, 'overcloud', True, self.default_image, None
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
@ -180,6 +186,9 @@ class TestExpandRoles(base.TestCase):
|
||||||
'nics': [{'network': 'some_net'}]},
|
'nics': [{'network': 'some_net'}]},
|
||||||
],
|
],
|
||||||
instances)
|
instances)
|
||||||
|
self.assertEqual({'overcloud-controller-0': 'Controller',
|
||||||
|
'overcloud-novacompute-0': 'Compute'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_networks_set_default_appended(self):
|
def test_networks_set_default_appended(self):
|
||||||
roles = [
|
roles = [
|
||||||
|
@ -196,7 +205,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
]}
|
]}
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image, self.default_network
|
roles, 'overcloud', True, self.default_image, self.default_network
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
@ -213,6 +222,9 @@ class TestExpandRoles(base.TestCase):
|
||||||
'nics': [{'network': 'ctlplane'}]},
|
'nics': [{'network': 'ctlplane'}]},
|
||||||
],
|
],
|
||||||
instances)
|
instances)
|
||||||
|
self.assertEqual({'overcloud-controller-0': 'Controller',
|
||||||
|
'overcloud-novacompute-0': 'Compute'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_networks_vif_set_default_appended(self):
|
def test_networks_vif_set_default_appended(self):
|
||||||
roles = [
|
roles = [
|
||||||
|
@ -229,7 +241,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
]}
|
]}
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image, self.default_network
|
roles, 'overcloud', True, self.default_image, self.default_network
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
@ -255,6 +267,9 @@ class TestExpandRoles(base.TestCase):
|
||||||
]},
|
]},
|
||||||
],
|
],
|
||||||
instances)
|
instances)
|
||||||
|
self.assertEqual({'overcloud-controller-0': 'Controller',
|
||||||
|
'overcloud-novacompute-0': 'Compute'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_networks_nics_are_mutually_exclusive(self):
|
def test_networks_nics_are_mutually_exclusive(self):
|
||||||
# Neither 'nics' nor 'networks' - OK
|
# Neither 'nics' nor 'networks' - OK
|
||||||
|
@ -289,7 +304,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
'hostname': 'overcloud-controller-1',
|
'hostname': 'overcloud-controller-1',
|
||||||
}]
|
}]
|
||||||
}]
|
}]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image
|
roles, 'overcloud', True, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
@ -321,7 +336,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
},
|
},
|
||||||
'hostname_format': 'controller-%index%.example.com'
|
'hostname_format': 'controller-%index%.example.com'
|
||||||
}]
|
}]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image,
|
roles, 'overcloud', True, self.default_image,
|
||||||
user_name='heat-admin', ssh_public_keys='aaaa'
|
user_name='heat-admin', ssh_public_keys='aaaa'
|
||||||
)
|
)
|
||||||
|
@ -366,6 +381,12 @@ class TestExpandRoles(base.TestCase):
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
environment['parameter_defaults'])
|
environment['parameter_defaults'])
|
||||||
|
self.assertEqual({'compute-0.example.com': 'Compute',
|
||||||
|
'compute-1.example.com': 'Compute',
|
||||||
|
'controller-0.example.com': 'Controller',
|
||||||
|
'controller-1.example.com': 'Controller',
|
||||||
|
'controller-2.example.com': 'Controller'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_explicit_instances(self):
|
def test_explicit_instances(self):
|
||||||
roles = [{
|
roles = [{
|
||||||
|
@ -397,7 +418,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
'vif': True}]},
|
'vif': True}]},
|
||||||
]},
|
]},
|
||||||
]
|
]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image
|
roles, 'overcloud', True, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
@ -440,6 +461,11 @@ class TestExpandRoles(base.TestCase):
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
environment['parameter_defaults'])
|
environment['parameter_defaults'])
|
||||||
|
self.assertEqual({'compute-0.example.com': 'Compute',
|
||||||
|
'compute-1.example.com': 'Compute',
|
||||||
|
'controller-X.example.com': 'Controller',
|
||||||
|
'node-0': 'Controller'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_count_with_instances(self):
|
def test_count_with_instances(self):
|
||||||
roles = [{
|
roles = [{
|
||||||
|
@ -464,7 +490,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
'nics': [{'subnet': 'leaf-2'}]},
|
'nics': [{'subnet': 'leaf-2'}]},
|
||||||
]},
|
]},
|
||||||
]
|
]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image
|
roles, 'overcloud', True, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
|
@ -508,6 +534,12 @@ class TestExpandRoles(base.TestCase):
|
||||||
'overcloud-controller-2': 'overcloud-controller-2'}
|
'overcloud-controller-2': 'overcloud-controller-2'}
|
||||||
},
|
},
|
||||||
environment['parameter_defaults'])
|
environment['parameter_defaults'])
|
||||||
|
self.assertEqual({'compute-0.example.com': 'Compute',
|
||||||
|
'compute-1.example.com': 'Compute',
|
||||||
|
'controller-X.example.com': 'Controller',
|
||||||
|
'node-0': 'Controller',
|
||||||
|
'overcloud-controller-2': 'Controller'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_unprovisioned(self):
|
def test_unprovisioned(self):
|
||||||
roles = [{
|
roles = [{
|
||||||
|
@ -524,7 +556,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
'provisioned': False
|
'provisioned': False
|
||||||
}]
|
}]
|
||||||
}]
|
}]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image
|
roles, 'overcloud', True, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
|
@ -552,8 +584,11 @@ class TestExpandRoles(base.TestCase):
|
||||||
'overcloud-controller-3': 'overcloud-controller-3'}
|
'overcloud-controller-3': 'overcloud-controller-3'}
|
||||||
},
|
},
|
||||||
environment['parameter_defaults'])
|
environment['parameter_defaults'])
|
||||||
|
self.assertEqual({'overcloud-controller-0': 'Controller',
|
||||||
|
'overcloud-controller-3': 'Controller'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', False, self.default_image
|
roles, 'overcloud', False, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
|
@ -568,6 +603,9 @@ class TestExpandRoles(base.TestCase):
|
||||||
}],
|
}],
|
||||||
instances)
|
instances)
|
||||||
self.assertEqual({}, environment)
|
self.assertEqual({}, environment)
|
||||||
|
self.assertEqual({'overcloud-controller-1': 'Controller',
|
||||||
|
'overcloud-controller-2': 'Controller'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_reprovisioned(self):
|
def test_reprovisioned(self):
|
||||||
roles = [{
|
roles = [{
|
||||||
|
@ -584,7 +622,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
'provisioned': False
|
'provisioned': False
|
||||||
}]
|
}]
|
||||||
}]
|
}]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image
|
roles, 'overcloud', True, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
|
@ -622,8 +660,13 @@ class TestExpandRoles(base.TestCase):
|
||||||
'overcloud-controller-5': 'overcloud-controller-5'}
|
'overcloud-controller-5': 'overcloud-controller-5'}
|
||||||
},
|
},
|
||||||
environment['parameter_defaults'])
|
environment['parameter_defaults'])
|
||||||
|
self.assertEqual({'overcloud-controller-0': 'Controller',
|
||||||
|
'overcloud-controller-3': 'Controller',
|
||||||
|
'overcloud-controller-4': 'Controller',
|
||||||
|
'overcloud-controller-5': 'Controller'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', False, self.default_image
|
roles, 'overcloud', False, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
|
@ -663,7 +706,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
'provisioned': True
|
'provisioned': True
|
||||||
}]
|
}]
|
||||||
}]
|
}]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image
|
roles, 'overcloud', True, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
|
@ -694,7 +737,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
},
|
},
|
||||||
environment['parameter_defaults'])
|
environment['parameter_defaults'])
|
||||||
|
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', False, self.default_image
|
roles, 'overcloud', False, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
|
@ -711,6 +754,8 @@ class TestExpandRoles(base.TestCase):
|
||||||
}],
|
}],
|
||||||
instances)
|
instances)
|
||||||
self.assertEqual({}, environment)
|
self.assertEqual({}, environment)
|
||||||
|
self.assertEqual({'controller-1': 'Controller',
|
||||||
|
'controller-2': 'Controller'}, hostname_role_map)
|
||||||
|
|
||||||
def test_unprovisioned_no_hostname(self):
|
def test_unprovisioned_no_hostname(self):
|
||||||
roles = [{
|
roles = [{
|
||||||
|
@ -732,7 +777,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
'provisioned': True
|
'provisioned': True
|
||||||
}]
|
}]
|
||||||
}]
|
}]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image
|
roles, 'overcloud', True, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
|
@ -762,8 +807,10 @@ class TestExpandRoles(base.TestCase):
|
||||||
'overcloud-controller-3': 'node-3'}
|
'overcloud-controller-3': 'node-3'}
|
||||||
},
|
},
|
||||||
environment['parameter_defaults'])
|
environment['parameter_defaults'])
|
||||||
|
self.assertEqual({'node-0': 'Controller', 'node-3': 'Controller'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', False, self.default_image
|
roles, 'overcloud', False, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
|
@ -780,6 +827,8 @@ class TestExpandRoles(base.TestCase):
|
||||||
}],
|
}],
|
||||||
instances)
|
instances)
|
||||||
self.assertEqual({}, environment)
|
self.assertEqual({}, environment)
|
||||||
|
self.assertEqual({'node-1': 'Controller', 'node-2': 'Controller'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_name_in_defaults(self):
|
def test_name_in_defaults(self):
|
||||||
roles = [{
|
roles = [{
|
||||||
|
@ -836,7 +885,7 @@ class TestExpandRoles(base.TestCase):
|
||||||
'nics': [{'subnet': 'leaf-2'}]},
|
'nics': [{'subnet': 'leaf-2'}]},
|
||||||
]},
|
]},
|
||||||
]
|
]
|
||||||
instances, environment, role_net_map = bd.expand(
|
instances, environment, role_net_map, hostname_role_map = bd.expand(
|
||||||
roles, 'overcloud', True, self.default_image
|
roles, 'overcloud', True, self.default_image
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
@ -854,6 +903,11 @@ class TestExpandRoles(base.TestCase):
|
||||||
'traits': ['CUSTOM_FOO'], 'nics': [{'subnet': 'leaf-2'}]},
|
'traits': ['CUSTOM_FOO'], 'nics': [{'subnet': 'leaf-2'}]},
|
||||||
],
|
],
|
||||||
instances)
|
instances)
|
||||||
|
self.assertEqual({'compute-0.example.com': 'Compute',
|
||||||
|
'compute-1.example.com': 'Compute',
|
||||||
|
'node-0': 'Controller',
|
||||||
|
'overcloud-controller-0': 'Controller'},
|
||||||
|
hostname_role_map)
|
||||||
|
|
||||||
def test_more_instances_than_count(self):
|
def test_more_instances_than_count(self):
|
||||||
roles = [{
|
roles = [{
|
||||||
|
|
Loading…
Reference in New Issue