Merge pull request #54778 from Akm0d/master_openstack_query_fix

fix broken salt-cloud openstack query
This commit is contained in:
Daniel Wozniak 2019-10-01 02:23:26 -07:00 committed by GitHub
commit 435b40c6e5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 146 additions and 7 deletions

View file

@ -260,10 +260,14 @@ def get_configured_provider():
'''
Return the first configured instance.
'''
return config.is_provider_configured(
provider = config.is_provider_configured(
__opts__, __active_provider_name__ or __virtualname__,
('auth', 'region_name'), log_message=False,
) or config.is_provider_configured(
('auth', 'region_name')
)
if provider:
return provider
return config.is_provider_configured(
__opts__, __active_provider_name__ or __virtualname__,
('cloud', 'region_name')
)
@ -280,8 +284,8 @@ def get_dependencies():
log.warning(HAS_SHADE[1])
return False
deps = {
'shade': shade[0],
'os_client_config': shade[0],
'shade': HAS_SHADE[0],
'os_client_config': HAS_SHADE[0],
}
return config.check_driver_dependencies(
__virtualname__,
@ -420,7 +424,10 @@ def list_nodes_full(conn=None, call=None):
ret[node.name]['public_ips'] = _get_ips(node, 'public')
ret[node.name]['floating_ips'] = _get_ips(node, 'floating')
ret[node.name]['fixed_ips'] = _get_ips(node, 'fixed')
ret[node.name]['image'] = node.image.name
if isinstance(node.image, six.string_types):
ret[node.name]['image'] = node.image
else:
ret[node.name]['image'] = getattr(conn.get_image(node.image.id), 'name', node.image.id)
return ret
@ -479,7 +486,7 @@ def show_instance(name, conn=None, call=None):
if isinstance(node.image, six.string_types):
ret['image'] = node.image
else:
ret['image'] = conn.get_image(node.image.id).name
ret['image'] = getattr(conn.get_image(node.image.id), 'name', node.image.id)
return ret

View file

@ -0,0 +1,132 @@
# -*- coding: utf-8 -*-
'''
:codeauthor: `Tyler Johnson <tjohnson@saltstack.com>`
tests.unit.cloud.clouds.openstack_test
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'''
# Import Python libs
from __future__ import absolute_import, print_function, unicode_literals
# Import Salt Libs
from salt.cloud.clouds import openstack
# Import Salt Testing Libs
from tests.support.mixins import LoaderModuleMockMixin
from tests.support.unit import TestCase, skipIf
from tests.support.mock import NO_MOCK, NO_MOCK_REASON, patch
class MockImage(object):
name = 'image name'
id = 'image id'
class MockNode(object):
name = 'node name'
id = 'node id'
flavor = MockImage()
status = 'node status'
def __init__(self, image):
self.image = image
def __iter__(self):
return iter(())
class MockConn(object):
def __init__(self, image):
self.node = MockNode(image)
def get_image(self, *args, **kwargs):
return self.node.image
def get_flavor(self, *args, **kwargs):
return self.node.flavor
def get_server(self, *args, **kwargs):
return self.node
def list_servers(self, *args, **kwargs):
return [self.node]
@skipIf(NO_MOCK, NO_MOCK_REASON)
class OpenstackTestCase(TestCase, LoaderModuleMockMixin):
'''
Unit TestCase for salt.cloud.clouds.openstack module.
'''
def setup_loader_modules(self):
return {
openstack: {
'__active_provider_name__': '',
'__opts__': {
'providers': {
'my-openstack-cloud': {
'openstack': {
'auth': 'daenerys',
'region_name': 'westeros',
'cloud': 'openstack',
}
}
}
}
}
}
def test_get_configured_provider_bad(self):
with patch.dict(openstack.__opts__, {'providers': {}}):
result = openstack.get_configured_provider()
self.assertEqual(result, False)
def test_get_configured_provider_auth(self):
config = {
'region_name': 'westeros',
'auth': 'daenerys',
}
with patch.dict(openstack.__opts__, {'providers': {'my-openstack-cloud': {'openstack': config}}}):
result = openstack.get_configured_provider()
self.assertEqual(config, result)
def test_get_configured_provider_cloud(self):
config = {
'region_name': 'westeros',
'cloud': 'foo',
}
with patch.dict(openstack.__opts__, {'providers': {'my-openstack-cloud': {'openstack': config}}}):
result = openstack.get_configured_provider()
self.assertEqual(config, result)
def test_get_dependencies(self):
HAS_SHADE = (True, 'Please install newer version of shade: >= 1.19.0')
with patch('salt.cloud.clouds.openstack.HAS_SHADE', HAS_SHADE):
result = openstack.get_dependencies()
self.assertEqual(result, True)
def test_get_dependencies_no_shade(self):
HAS_SHADE = (False, 'Install pypi module shade >= 1.19.0')
with patch('salt.cloud.clouds.openstack.HAS_SHADE', HAS_SHADE):
result = openstack.get_dependencies()
self.assertEqual(result, False)
def test_list_nodes_full_image_str(self):
node_image = 'node image'
conn = MockConn(node_image)
with patch('salt.cloud.clouds.openstack._get_ips', return_value=[]):
ret = openstack.list_nodes_full(conn=conn)
self.assertEqual(ret[conn.node.name]['image'], node_image)
def test_list_nodes_full_image_obj(self):
conn = MockConn(MockImage())
with patch('salt.cloud.clouds.openstack._get_ips', return_value=[]):
ret = openstack.list_nodes_full(conn=conn)
self.assertEqual(ret[conn.node.name]['image'], MockImage.name)
def test_show_instance(self):
conn = MockConn(MockImage())
with patch('salt.cloud.clouds.openstack._get_ips', return_value=[]):
ret = openstack.show_instance(conn.node.name, conn=conn, call='action')
self.assertEqual(ret['image'], MockImage.name)