mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge pull request #54778 from Akm0d/master_openstack_query_fix
fix broken salt-cloud openstack query
This commit is contained in:
commit
435b40c6e5
2 changed files with 146 additions and 7 deletions
|
@ -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
|
||||
|
||||
|
||||
|
|
132
tests/unit/cloud/clouds/test_openstack.py
Normal file
132
tests/unit/cloud/clouds/test_openstack.py
Normal 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)
|
Loading…
Add table
Reference in a new issue