mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-05-18 06:59:19 -07:00
nso_config handle data.not_found in exists for nested lists (#35267)
Recent NSO can return data.not_found error on exists when parent list entries does not exist. Handle this and return as false. Fixes: #35264
This commit is contained in:
parent
b8e8fb48a8
commit
b7f815ba89
2 changed files with 38 additions and 2 deletions
|
@ -140,8 +140,16 @@ class JsonRpc(object):
|
||||||
|
|
||||||
def exists(self, path):
|
def exists(self, path):
|
||||||
payload = {'method': 'exists', 'params': {'path': path}}
|
payload = {'method': 'exists', 'params': {'path': path}}
|
||||||
|
try:
|
||||||
resp, resp_json = self._read_call(payload)
|
resp, resp_json = self._read_call(payload)
|
||||||
return resp_json['result']['exists']
|
return resp_json['result']['exists']
|
||||||
|
except NsoException as ex:
|
||||||
|
# calling exists on a sub-list when the parent list does
|
||||||
|
# not exists will cause data.not_found errors on recent
|
||||||
|
# NSO
|
||||||
|
if 'type' in ex.error and ex.error['type'] == 'data.not_found':
|
||||||
|
return False
|
||||||
|
raise
|
||||||
|
|
||||||
def create(self, th, path):
|
def create(self, th, path):
|
||||||
payload = {'method': 'create', 'params': {'th': th, 'path': path}}
|
payload = {'method': 'create', 'params': {'th': th, 'path': path}}
|
||||||
|
|
|
@ -256,6 +256,34 @@ def get_schema_response(path):
|
||||||
SCHEMA_DATA[path]))
|
SCHEMA_DATA[path]))
|
||||||
|
|
||||||
|
|
||||||
|
class TestJsonRpc(unittest.TestCase):
|
||||||
|
@patch('ansible.module_utils.network.nso.nso.open_url')
|
||||||
|
def test_exists(self, open_url_mock):
|
||||||
|
calls = [
|
||||||
|
MockResponse('new_trans', {}, 200, '{"result": {"th": 1}}'),
|
||||||
|
MockResponse('exists', {'path': '/exists'}, 200, '{"result": {"exists": true}}'),
|
||||||
|
MockResponse('exists', {'path': '/not-exists'}, 200, '{"result": {"exists": false}}')
|
||||||
|
]
|
||||||
|
open_url_mock.side_effect = lambda *args, **kwargs: mock_call(calls, *args, **kwargs)
|
||||||
|
client = nso.JsonRpc('http://localhost:8080/jsonrpc')
|
||||||
|
self.assertEquals(True, client.exists('/exists'))
|
||||||
|
self.assertEquals(False, client.exists('/not-exists'))
|
||||||
|
|
||||||
|
self.assertEqual(0, len(calls))
|
||||||
|
|
||||||
|
@patch('ansible.module_utils.network.nso.nso.open_url')
|
||||||
|
def test_exists_data_not_found(self, open_url_mock):
|
||||||
|
calls = [
|
||||||
|
MockResponse('new_trans', {}, 200, '{"result": {"th": 1}}'),
|
||||||
|
MockResponse('exists', {'path': '/list{missing-parent}/list{child}'}, 200, '{"error":{"type":"data.not_found"}}')
|
||||||
|
]
|
||||||
|
open_url_mock.side_effect = lambda *args, **kwargs: mock_call(calls, *args, **kwargs)
|
||||||
|
client = nso.JsonRpc('http://localhost:8080/jsonrpc')
|
||||||
|
self.assertEquals(False, client.exists('/list{missing-parent}/list{child}'))
|
||||||
|
|
||||||
|
self.assertEqual(0, len(calls))
|
||||||
|
|
||||||
|
|
||||||
class TestValueBuilder(unittest.TestCase):
|
class TestValueBuilder(unittest.TestCase):
|
||||||
@patch('ansible.module_utils.network.nso.nso.open_url')
|
@patch('ansible.module_utils.network.nso.nso.open_url')
|
||||||
def test_identityref_leaf(self, open_url_mock):
|
def test_identityref_leaf(self, open_url_mock):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue