Cleanup and add test coverage for inventory without overcloud
This should generate an inventory containing just the Undercloud group. There are a few vars being set that do not make sense in this case e.g plan/plans and overcloud admin password. Clean this up and add unit tests. Change-Id: I98dbbaaea25a0d61674e989eca8d2daf6090ebc4 (cherry picked from commit43fa36d3c2
) (cherry picked from commit9d292a63e1
)
This commit is contained in:
parent
527448a90a
commit
6be18f31ff
@ -59,6 +59,7 @@ class TripleoInventories(object):
|
||||
|
||||
# save the plan for this stack in the plans list
|
||||
plan = inv['Undercloud']['vars']['plan']
|
||||
if plan is not None:
|
||||
inventory['Undercloud']['vars']['plans'].append(plan)
|
||||
|
||||
for key in inv.keys():
|
||||
|
@ -148,6 +148,8 @@ class TripleoInventory(object):
|
||||
return alist
|
||||
|
||||
def _get_stack(self):
|
||||
if self.plan_name is None:
|
||||
return None
|
||||
try:
|
||||
stack = self.hclient.stacks.get(self.plan_name)
|
||||
except HTTPNotFound:
|
||||
@ -168,7 +170,7 @@ class TripleoInventory(object):
|
||||
# see https://github.com/ansible/ansible/issues/41808
|
||||
'ansible_remote_tmp': '/tmp/ansible-${USER}',
|
||||
'auth_url': self.auth_url,
|
||||
'plan': self.plan_name,
|
||||
'plan': None,
|
||||
'project_name': self.project_name,
|
||||
'username': self.username,
|
||||
},
|
||||
@ -193,12 +195,6 @@ class TripleoInventory(object):
|
||||
ret['Undercloud']['vars']['undercloud_service_list'] = \
|
||||
self.get_undercloud_service_list()
|
||||
|
||||
admin_password = self.get_overcloud_environment().get(
|
||||
'parameter_defaults', {}).get('AdminPassword')
|
||||
if admin_password:
|
||||
ret['Undercloud']['vars']['overcloud_admin_password'] =\
|
||||
admin_password
|
||||
|
||||
if dynamic:
|
||||
# Prevent Ansible from repeatedly calling us to get empty host
|
||||
# details
|
||||
@ -207,6 +203,14 @@ class TripleoInventory(object):
|
||||
self.stack = self._get_stack()
|
||||
if not self.stack:
|
||||
return ret
|
||||
|
||||
ret['Undercloud']['vars']['plan'] = self.plan_name
|
||||
admin_password = self.get_overcloud_environment().get(
|
||||
'parameter_defaults', {}).get('AdminPassword')
|
||||
if admin_password:
|
||||
ret['Undercloud']['vars']['overcloud_admin_password'] =\
|
||||
admin_password
|
||||
|
||||
self.stack_outputs = StackOutputs(self.stack)
|
||||
|
||||
keystone_url = self.stack_outputs.get('KeystoneURL')
|
||||
|
32
tripleo_common/tests/inventory_data/undercloud_dynamic.json
Normal file
32
tripleo_common/tests/inventory_data/undercloud_dynamic.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hostvars": {}
|
||||
},
|
||||
"Undercloud": {
|
||||
"hosts": [
|
||||
"undercloud"
|
||||
],
|
||||
"vars": {
|
||||
"ansible_host": "localhost",
|
||||
"ansible_python_interpreter": "/usr/bin/python3",
|
||||
"ansible_connection": "local",
|
||||
"ansible_remote_tmp": "/tmp/ansible-${USER}",
|
||||
"auth_url": "https://192.168.24.2:13000",
|
||||
"cacert": null,
|
||||
"os_auth_token": "gAAAAABfyhfVBvn9GwTNPKCgjTLtBAMW4_8JVMUj4n9GTrt8Ns2_YrJiAK9E3E9V0ABixQ2TRICTgZtHGgl4qfIcJMvbbLjH84oL4QxuyQ4LfcNIF7WBcnvoo3qvkCYfTNbzEJChFYiId8W0lyXiTGE80Dhr13PXrHuYDeejs4jShuFGSP_8BeQ",
|
||||
"plan": null,
|
||||
"project_name": "admin",
|
||||
"username": "admin",
|
||||
"undercloud_swift_url": "https://192.168.24.2:13808/v1/AUTH_ad15d77254c94b03b1534a261059cd76",
|
||||
"undercloud_service_list": [
|
||||
"tripleo_nova_compute",
|
||||
"tripleo_heat_engine",
|
||||
"tripleo_ironic_conductor",
|
||||
"tripleo_swift_container_server",
|
||||
"tripleo_swift_object_server",
|
||||
"tripleo_mistral_engine"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,33 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hostvars": {}
|
||||
},
|
||||
"Undercloud": {
|
||||
"hosts": [
|
||||
"undercloud"
|
||||
],
|
||||
"vars": {
|
||||
"ansible_host": "localhost",
|
||||
"ansible_python_interpreter": "/usr/bin/python3",
|
||||
"ansible_connection": "local",
|
||||
"ansible_remote_tmp": "/tmp/ansible-${USER}",
|
||||
"auth_url": "https://192.168.24.2:13000",
|
||||
"cacert": null,
|
||||
"os_auth_token": "gAAAAABfyhfVBvn9GwTNPKCgjTLtBAMW4_8JVMUj4n9GTrt8Ns2_YrJiAK9E3E9V0ABixQ2TRICTgZtHGgl4qfIcJMvbbLjH84oL4QxuyQ4LfcNIF7WBcnvoo3qvkCYfTNbzEJChFYiId8W0lyXiTGE80Dhr13PXrHuYDeejs4jShuFGSP_8BeQ",
|
||||
"plan": null,
|
||||
"plans": [],
|
||||
"project_name": "admin",
|
||||
"username": "admin",
|
||||
"undercloud_swift_url": "https://192.168.24.2:13808/v1/AUTH_ad15d77254c94b03b1534a261059cd76",
|
||||
"undercloud_service_list": [
|
||||
"tripleo_nova_compute",
|
||||
"tripleo_heat_engine",
|
||||
"tripleo_ironic_conductor",
|
||||
"tripleo_swift_container_server",
|
||||
"tripleo_swift_object_server",
|
||||
"tripleo_mistral_engine"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
17
tripleo_common/tests/inventory_data/undercloud_static.yaml
Normal file
17
tripleo_common/tests/inventory_data/undercloud_static.yaml
Normal file
@ -0,0 +1,17 @@
|
||||
Undercloud:
|
||||
hosts:
|
||||
undercloud: {}
|
||||
vars:
|
||||
ansible_connection: local
|
||||
ansible_host: localhost
|
||||
ansible_python_interpreter: /usr/bin/python3
|
||||
ansible_remote_tmp: /tmp/ansible-${USER}
|
||||
auth_url: https://192.168.24.2:13000
|
||||
cacert: null
|
||||
os_auth_token: gAAAAABfyheSpP9F_O2zpn_zMgPANBpl10eMR4QWL3tfBDJYhDEP_iEoPBjP0H0kCfkoDBldnlmkf9LRIWqSRJ1Z6FJOQdMp--DjJE4lpvWk6_swo2NpSt3IGW9Kudc7xNm-WA9R7xBujF4DtZ_WjWw7H_Ue0VfF6eKfo2HLP6Y9VS2IY3m9HZQ
|
||||
plan: null
|
||||
project_name: admin
|
||||
undercloud_service_list: [tripleo_nova_compute, tripleo_heat_engine, tripleo_ironic_conductor,
|
||||
tripleo_swift_container_server, tripleo_swift_object_server, tripleo_mistral_engine]
|
||||
undercloud_swift_url: https://192.168.24.2:13808/v1/AUTH_ad15d77254c94b03b1534a261059cd76
|
||||
username: admin
|
@ -0,0 +1,18 @@
|
||||
Undercloud:
|
||||
hosts:
|
||||
undercloud: {}
|
||||
vars:
|
||||
ansible_connection: local
|
||||
ansible_host: localhost
|
||||
ansible_python_interpreter: /usr/bin/python3
|
||||
ansible_remote_tmp: /tmp/ansible-${USER}
|
||||
auth_url: https://192.168.24.2:13000
|
||||
cacert: null
|
||||
os_auth_token: gAAAAABfyheSpP9F_O2zpn_zMgPANBpl10eMR4QWL3tfBDJYhDEP_iEoPBjP0H0kCfkoDBldnlmkf9LRIWqSRJ1Z6FJOQdMp--DjJE4lpvWk6_swo2NpSt3IGW9Kudc7xNm-WA9R7xBujF4DtZ_WjWw7H_Ue0VfF6eKfo2HLP6Y9VS2IY3m9HZQ
|
||||
plan: null
|
||||
plans: []
|
||||
project_name: admin
|
||||
undercloud_service_list: [tripleo_nova_compute, tripleo_heat_engine, tripleo_ironic_conductor,
|
||||
tripleo_swift_container_server, tripleo_swift_object_server, tripleo_mistral_engine]
|
||||
undercloud_swift_url: https://192.168.24.2:13808/v1/AUTH_ad15d77254c94b03b1534a261059cd76
|
||||
username: admin
|
@ -42,7 +42,10 @@ class _TestInventoriesBase(base.TestCase):
|
||||
'merged_static.yaml',
|
||||
'single_dynamic.json',
|
||||
'single_static.yaml',
|
||||
|
||||
'undercloud_dynamic.json',
|
||||
'undercloud_static.yaml',
|
||||
'undercloud_dynamic_merged.json',
|
||||
'undercloud_static_merged.yaml',
|
||||
):
|
||||
name = os.path.basename(datafile).split('.')[0]
|
||||
path = os.path.join(inventory_dir, datafile)
|
||||
@ -145,3 +148,39 @@ class TestInventorySingleDynamic(_TestInventoriesBase):
|
||||
actual = self.inventories.list()
|
||||
expected = self.inventory_data['single_dynamic']
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
|
||||
class TestInventoryUndercloudStatic(_TestInventoriesBase):
|
||||
def setUp(self):
|
||||
super(TestInventoryUndercloudStatic, self).setUp()
|
||||
mock_inv_undercloud = MagicMock()
|
||||
mock_inv_undercloud.list.return_value = self.inventory_data[
|
||||
'undercloud_static'
|
||||
]
|
||||
stack_to_inv_obj_map = {
|
||||
'foobar': mock_inv_undercloud
|
||||
}
|
||||
self.inventories = TripleoInventories(stack_to_inv_obj_map)
|
||||
|
||||
def test_list(self):
|
||||
actual = self.inventories.list(dynamic=False)
|
||||
expected = self.inventory_data['undercloud_static_merged']
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
|
||||
class TestInventoryUndercloudDynamic(_TestInventoriesBase):
|
||||
def setUp(self):
|
||||
super(TestInventoryUndercloudDynamic, self).setUp()
|
||||
mock_inv_undercloud = MagicMock()
|
||||
mock_inv_undercloud.list.return_value = self.inventory_data[
|
||||
'undercloud_dynamic'
|
||||
]
|
||||
stack_to_inv_obj_map = {
|
||||
'foobar': mock_inv_undercloud
|
||||
}
|
||||
self.inventories = TripleoInventories(stack_to_inv_obj_map)
|
||||
|
||||
def test_list(self):
|
||||
actual = self.inventories.list()
|
||||
expected = self.inventory_data['undercloud_dynamic_merged']
|
||||
self.assertEqual(expected, actual)
|
||||
|
@ -309,6 +309,36 @@ class TestInventory(base.TestCase):
|
||||
for k in expected:
|
||||
self.assertEqual(expected[k], inv_list[k])
|
||||
|
||||
def test_inventory_list_undercloud_only(self):
|
||||
self.inventory.plan_name = None
|
||||
self.inventory.undercloud_connection = 'local'
|
||||
expected = {
|
||||
'Undercloud': {
|
||||
'hosts': ['undercloud'],
|
||||
'vars': {
|
||||
'ansible_connection': 'local',
|
||||
'ansible_host': 'localhost',
|
||||
'ansible_python_interpreter': sys.executable,
|
||||
'ansible_remote_tmp': '/tmp/ansible-${USER}',
|
||||
'auth_url': 'xyz://keystone.local',
|
||||
'cacert': 'acacert',
|
||||
'project_name': 'admin',
|
||||
'plan': None,
|
||||
'undercloud_service_list': [
|
||||
'tripleo_nova_compute',
|
||||
'tripleo_heat_engine',
|
||||
'tripleo_ironic_conductor',
|
||||
'tripleo_swift_container_server',
|
||||
'tripleo_swift_object_server',
|
||||
'tripleo_mistral_engine'
|
||||
],
|
||||
'username': 'admin'
|
||||
}
|
||||
},
|
||||
'_meta': {'hostvars': {}},
|
||||
}
|
||||
self.assertEqual(expected, self.inventory.list())
|
||||
|
||||
def test_ansible_ssh_user(self):
|
||||
self._try_alternative_args(
|
||||
ansible_ssh_user='my-custom-admin', undercloud_connection='ssh')
|
||||
|
Loading…
Reference in New Issue
Block a user