Merge "Cleanup and add test coverage for inventory without overcloud"

This commit is contained in:
Zuul 2020-12-10 16:59:17 +00:00 committed by Gerrit Code Review
commit 29d5bf69f8
8 changed files with 183 additions and 9 deletions

View File

@ -59,7 +59,8 @@ class TripleoInventories(object):
# save the plan for this stack in the plans list
plan = inv['Undercloud']['vars']['plan']
inventory['Undercloud']['vars']['plans'].append(plan)
if plan is not None:
inventory['Undercloud']['vars']['plans'].append(plan)
for key in inv.keys():
if key != 'Undercloud':

View File

@ -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')

View 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"
]
}
}
}

View File

@ -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"
]
}
}
}

View 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

View File

@ -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

View File

@ -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)

View File

@ -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')