From bc0cff52c002609f86b9046b01948d8a1be1fdf8 Mon Sep 17 00:00:00 2001 From: Maxime Guyot Date: Tue, 30 Apr 2019 21:47:15 -0600 Subject: [PATCH] Add support for all_tenants in OpenStackInventory This would allow for the Ansible inventory plugin to list servers from all tenants. Change-Id: I77c4d6e83cd0761c91609e3ae01a0db08c493b3b --- openstack/cloud/inventory.py | 6 +++-- openstack/tests/unit/cloud/test_inventory.py | 26 ++++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/openstack/cloud/inventory.py b/openstack/cloud/inventory.py index d62bef433..8905ce0a7 100644 --- a/openstack/cloud/inventory.py +++ b/openstack/cloud/inventory.py @@ -57,13 +57,15 @@ class OpenStackInventory(object): for cloud in self.clouds: cloud._cache.invalidate() - def list_hosts(self, expand=True, fail_on_cloud_config=True): + def list_hosts(self, expand=True, fail_on_cloud_config=True, + all_projects=False): hostvars = [] for cloud in self.clouds: try: # Cycle on servers - for server in cloud.list_servers(detailed=expand): + for server in cloud.list_servers(detailed=expand, + all_projects=all_projects): hostvars.append(server) except exceptions.OpenStackCloudException: # Don't fail on one particular cloud as others may work diff --git a/openstack/tests/unit/cloud/test_inventory.py b/openstack/tests/unit/cloud/test_inventory.py index 339fa6695..d44864231 100644 --- a/openstack/tests/unit/cloud/test_inventory.py +++ b/openstack/tests/unit/cloud/test_inventory.py @@ -68,7 +68,8 @@ class TestInventory(base.TestCase): ret = inv.list_hosts() - inv.clouds[0].list_servers.assert_called_once_with(detailed=True) + inv.clouds[0].list_servers.assert_called_once_with(detailed=True, + all_projects=False) self.assertFalse(inv.clouds[0].get_openstack_vars.called) self.assertEqual([server], ret) @@ -88,9 +89,30 @@ class TestInventory(base.TestCase): inv.list_hosts(expand=False) - inv.clouds[0].list_servers.assert_called_once_with(detailed=False) + inv.clouds[0].list_servers.assert_called_once_with(detailed=False, + all_projects=False) self.assertFalse(inv.clouds[0].get_openstack_vars.called) + @mock.patch("openstack.config.loader.OpenStackConfig") + @mock.patch("openstack.connection.Connection") + def test_list_hosts_all_projects(self, mock_cloud, mock_config): + mock_config.return_value.get_all.return_value = [{}] + + inv = inventory.OpenStackInventory() + + server = dict(id='server_id', name='server_name') + self.assertIsInstance(inv.clouds, list) + self.assertEqual(1, len(inv.clouds)) + inv.clouds[0].list_servers.return_value = [server] + inv.clouds[0].get_openstack_vars.return_value = server + + ret = inv.list_hosts(all_projects=True) + + inv.clouds[0].list_servers.assert_called_once_with(detailed=True, + all_projects=True) + self.assertFalse(inv.clouds[0].get_openstack_vars.called) + self.assertEqual([server], ret) + @mock.patch("openstack.config.loader.OpenStackConfig") @mock.patch("openstack.connection.Connection") def test_search_hosts(self, mock_cloud, mock_config):