mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 17:09:03 +00:00
dda283e811
Add multiple functions to interact with the Netbox API.
109 lines
3.3 KiB
Python
109 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
'''
|
|
:codeauthor: :email:`Zach Moody <zmoody@do.co>`
|
|
'''
|
|
|
|
# Import Python Libs
|
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
|
|
try:
|
|
import pynetbox # pylint: disable=unused-import
|
|
HAS_PYNETBOX = True
|
|
except ImportError:
|
|
HAS_PYNETBOX = False
|
|
|
|
# Import Salt Testing Libs
|
|
from tests.support.mixins import LoaderModuleMockMixin
|
|
from tests.support.unit import TestCase, skipIf
|
|
from tests.support.mock import (
|
|
patch,
|
|
MagicMock,
|
|
call,
|
|
NO_MOCK,
|
|
NO_MOCK_REASON
|
|
)
|
|
import salt.modules.netbox as netbox
|
|
|
|
NETBOX_RESPONSE_STUB = {
|
|
'device_name': 'test1-router1',
|
|
'url': 'http://test/',
|
|
'device_role': {
|
|
'name': 'router',
|
|
'url': 'http://test/'
|
|
}
|
|
}
|
|
|
|
|
|
def mocked_clean_kwargs_filter(**kwargs):
|
|
'''
|
|
Mocked args.clean_kwargs for filter tests
|
|
'''
|
|
return {'site': u'test'}
|
|
|
|
|
|
def mocked_clean_kwargs_get(**kwargs):
|
|
'''
|
|
Mocked args.clean_kwargs for get tests
|
|
'''
|
|
return {'name': u'test'}
|
|
|
|
|
|
@skipIf(HAS_PYNETBOX is False, 'pynetbox lib not installed')
|
|
@skipIf(NO_MOCK, NO_MOCK_REASON)
|
|
@patch('salt.modules.netbox._config', MagicMock())
|
|
class NetBoxTestCase(TestCase, LoaderModuleMockMixin):
|
|
|
|
def setup_loader_modules(self):
|
|
return {
|
|
netbox: {},
|
|
}
|
|
|
|
def test_get_by_id(self):
|
|
with patch('pynetbox.api', MagicMock()) as mock:
|
|
with patch.dict(netbox.__utils__, {'args.clean_kwargs': mocked_clean_kwargs_get}):
|
|
netbox.get_('dcim', 'devices', id=1)
|
|
self.assertEqual(
|
|
mock.mock_calls[1],
|
|
call().dcim.devices.get(1)
|
|
)
|
|
|
|
def test_get_by_name(self):
|
|
with patch('pynetbox.api', MagicMock()) as mock:
|
|
with patch.dict(netbox.__utils__, {'args.clean_kwargs': mocked_clean_kwargs_get}):
|
|
netbox.get_('dcim', 'devices', name='test')
|
|
self.assertEqual(
|
|
mock.mock_calls[1],
|
|
call().dcim.devices.get(name='test')
|
|
)
|
|
|
|
def test_filter_by_site(self):
|
|
with patch('pynetbox.api', MagicMock()) as mock:
|
|
with patch.dict(netbox.__utils__, {'args.clean_kwargs': mocked_clean_kwargs_filter}):
|
|
netbox.filter_('dcim', 'devices', site='test')
|
|
self.assertEqual(
|
|
mock.mock_calls[1],
|
|
call().dcim.devices.filter(site='test')
|
|
)
|
|
|
|
def test_filter_url(self):
|
|
strip_url = netbox._strip_url_field(NETBOX_RESPONSE_STUB)
|
|
self.assertTrue(
|
|
'url' not in strip_url and 'url' not in strip_url['device_role']
|
|
)
|
|
|
|
def test_get_secret(self):
|
|
with patch('pynetbox.api', MagicMock()) as mock:
|
|
with patch.dict(netbox.__utils__, {'args.clean_kwargs': mocked_clean_kwargs_get}):
|
|
netbox.get_('secrets', 'secrets', name='test')
|
|
self.assertTrue(
|
|
'token' and 'private_key_file' in mock.call_args[1]
|
|
)
|
|
|
|
def test_token_present(self):
|
|
with patch('pynetbox.api', MagicMock()) as mock:
|
|
with patch.dict(netbox.__utils__, {'args.clean_kwargs': mocked_clean_kwargs_get}):
|
|
netbox.get_('dcim', 'devices', name='test')
|
|
self.assertTrue(
|
|
'token' in mock.call_args[1]
|
|
)
|