Merge "Cleanup and add test coverage for inventory without overcloud" into stable/train
This commit is contained in:
commit
a8cddad16c
|
@ -59,7 +59,8 @@ class TripleoInventories(object):
|
||||||
|
|
||||||
# save the plan for this stack in the plans list
|
# save the plan for this stack in the plans list
|
||||||
plan = inv['Undercloud']['vars']['plan']
|
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():
|
for key in inv.keys():
|
||||||
if key != 'Undercloud':
|
if key != 'Undercloud':
|
||||||
|
|
|
@ -149,6 +149,8 @@ class TripleoInventory(object):
|
||||||
return alist
|
return alist
|
||||||
|
|
||||||
def _get_stack(self):
|
def _get_stack(self):
|
||||||
|
if self.plan_name is None:
|
||||||
|
return None
|
||||||
try:
|
try:
|
||||||
stack = self.hclient.stacks.get(self.plan_name)
|
stack = self.hclient.stacks.get(self.plan_name)
|
||||||
except HTTPNotFound:
|
except HTTPNotFound:
|
||||||
|
@ -172,7 +174,7 @@ class TripleoInventory(object):
|
||||||
'cacert': self.cacert,
|
'cacert': self.cacert,
|
||||||
'os_auth_token':
|
'os_auth_token':
|
||||||
self.session.get_token() if self.session else None,
|
self.session.get_token() if self.session else None,
|
||||||
'plan': self.plan_name,
|
'plan': None,
|
||||||
'project_name': self.project_name,
|
'project_name': self.project_name,
|
||||||
'username': self.username,
|
'username': self.username,
|
||||||
},
|
},
|
||||||
|
@ -199,12 +201,6 @@ class TripleoInventory(object):
|
||||||
ret['Undercloud']['vars']['undercloud_service_list'] = \
|
ret['Undercloud']['vars']['undercloud_service_list'] = \
|
||||||
self.get_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:
|
if dynamic:
|
||||||
# Prevent Ansible from repeatedly calling us to get empty host
|
# Prevent Ansible from repeatedly calling us to get empty host
|
||||||
# details
|
# details
|
||||||
|
@ -213,6 +209,14 @@ class TripleoInventory(object):
|
||||||
self.stack = self._get_stack()
|
self.stack = self._get_stack()
|
||||||
if not self.stack:
|
if not self.stack:
|
||||||
return ret
|
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)
|
self.stack_outputs = StackOutputs(self.stack)
|
||||||
|
|
||||||
keystone_url = self.stack_outputs.get('KeystoneURL')
|
keystone_url = self.stack_outputs.get('KeystoneURL')
|
||||||
|
|
|
@ -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,36 @@
|
||||||
|
{
|
||||||
|
"_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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overcloud": {
|
||||||
|
"children": ["foobar"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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,21 @@
|
||||||
|
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
|
||||||
|
overcloud:
|
||||||
|
children:
|
||||||
|
foobar: {}
|
|
@ -41,7 +41,10 @@ class _TestInventoriesBase(base.TestCase):
|
||||||
'merged_static.yaml',
|
'merged_static.yaml',
|
||||||
'single_dynamic.json',
|
'single_dynamic.json',
|
||||||
'single_static.yaml',
|
'single_static.yaml',
|
||||||
|
'undercloud_dynamic.json',
|
||||||
|
'undercloud_static.yaml',
|
||||||
|
'undercloud_dynamic_merged.json',
|
||||||
|
'undercloud_static_merged.yaml',
|
||||||
):
|
):
|
||||||
name = os.path.basename(datafile).split('.')[0]
|
name = os.path.basename(datafile).split('.')[0]
|
||||||
path = os.path.join(inventory_dir, datafile)
|
path = os.path.join(inventory_dir, datafile)
|
||||||
|
@ -144,3 +147,39 @@ class TestInventorySingleDynamic(_TestInventoriesBase):
|
||||||
actual = self.inventories.list()
|
actual = self.inventories.list()
|
||||||
expected = self.inventory_data['single_dynamic']
|
expected = self.inventory_data['single_dynamic']
|
||||||
self.assertEqual(expected, actual)
|
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)
|
||||||
|
|
|
@ -248,6 +248,38 @@ class TestInventory(base.TestCase):
|
||||||
for k in expected:
|
for k in expected:
|
||||||
self.assertEqual(expected[k], inv_list[k])
|
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',
|
||||||
|
'os_auth_token': 'atoken',
|
||||||
|
'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'
|
||||||
|
],
|
||||||
|
'undercloud_swift_url': 'anendpoint',
|
||||||
|
'username': 'admin'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'_meta': {'hostvars': {}},
|
||||||
|
}
|
||||||
|
self.assertEqual(expected, self.inventory.list())
|
||||||
|
|
||||||
def test_ansible_ssh_user(self):
|
def test_ansible_ssh_user(self):
|
||||||
self._try_alternative_args(
|
self._try_alternative_args(
|
||||||
ansible_ssh_user='my-custom-admin',
|
ansible_ssh_user='my-custom-admin',
|
||||||
|
|
Loading…
Reference in New Issue