From 37bcc4cb5b2aebec4f8af06e42fb71f134a9eb05 Mon Sep 17 00:00:00 2001 From: David Hilton Date: Thu, 26 Sep 2019 15:04:18 -0600 Subject: [PATCH 1/2] fix dns_check to return uri-compatible ipv6 addresses, add tests --- salt/utils/network.py | 89 ++++++++++++++------------------ tests/unit/utils/test_network.py | 78 +++++++++++++++++++--------- 2 files changed, 95 insertions(+), 72 deletions(-) diff --git a/salt/utils/network.py b/salt/utils/network.py index 61c4a918b1c0..d6fc6a98c6ee 100644 --- a/salt/utils/network.py +++ b/salt/utils/network.py @@ -1899,61 +1899,25 @@ def refresh_dns(): @jinja_filter('dns_check') def dns_check(addr, port, safe=False, ipv6=None): ''' - Return the ip resolved by dns, but do not exit on failure, only raise an - exception. Obeys system preference for IPv4/6 address resolution - this - can be overridden by the ipv6 flag. - Tries to connect to the address before considering it useful. If no address - can be reached, the first one resolved is used as a fallback. - ''' - error = False - lookup = addr - seen_ipv6 = False + Return an ip address resolved by dns in a format usable in URLs (ipv6 in brackets). + Obeys system preference for IPv4/6 address resolution - this can be overridden by + the ipv6 flag. Tries to connect to the address before considering it useful. If no + address can be reached, the first one resolved is used as a fallback. + Does not exit on failure, raises an exception. + ''' + ip_addrs = [] family = socket.AF_INET6 if ipv6 else socket.AF_INET if ipv6 is False else socket.AF_UNSPEC try: refresh_dns() - hostnames = socket.getaddrinfo(addr, port, family, socket.SOCK_STREAM) - if not hostnames: - error = True - else: - resolved = False - candidates = [] - for h in hostnames: - # Input is IP address, passed through unchanged, just return it - if h[4][0] == addr: - resolved = salt.utils.zeromq.ip_bracket(addr) - break - - if h[0] == socket.AF_INET and ipv6 is True: - continue - if h[0] == socket.AF_INET6 and ipv6 is False: - continue - - candidate_addr = h[4][0] - - if h[0] != socket.AF_INET6 or ipv6 is not None: - candidates.append(candidate_addr) - - try: - s = socket.socket(h[0], socket.SOCK_STREAM) - s.connect((candidate_addr, port)) - s.close() - - resolved = candidate_addr - break - except socket.error: - pass - if not resolved: - if len(candidates) > 0: - resolved = candidates[0] - else: - error = True + addrinfo = socket.getaddrinfo(addr, port, family, socket.SOCK_STREAM) + ip_addrs = _test_addrs(addrinfo, port) except TypeError: - err = ('Attempt to resolve address \'{0}\' failed. Invalid or unresolveable address').format(lookup) + err = ('Attempt to resolve address \'{0}\' failed. Invalid or unresolveable address').format(addr) raise SaltSystemExit(code=42, msg=err) except socket.error: - error = True + pass - if error: + if not ip_addrs: err = ('DNS lookup or connection check of \'{0}\' failed.').format(addr) if safe: if salt.log.is_console_configured(): @@ -1963,7 +1927,34 @@ def dns_check(addr, port, safe=False, ipv6=None): log.error(err) raise SaltClientError() raise SaltSystemExit(code=42, msg=err) - return resolved + + return salt.utils.zeromq.ip_bracket(ip_addrs[0]) + + +def _test_addrs(addrinfo, port): + ''' + Attempt to connect to all addresses, return one if it succeeds. + Otherwise, return all addrs. + ''' + ip_addrs = [] + # test for connectivity, short circuit on success + for a in addrinfo: + ip_family = a[0] + ip_addr = a[4][0] + if ip_addr in ip_addrs: + continue + ip_addrs.append(ip_addr) + + try: + s = socket.socket(ip_family, socket.SOCK_STREAM) + s.connect((ip_addr, port)) + s.close() + + ip_addrs = [ip_addr] + break + except socket.error: + pass + return ip_addrs def parse_host_port(host_port): diff --git a/tests/unit/utils/test_network.py b/tests/unit/utils/test_network.py index 5790dd7ac213..af5cbbab2b59 100644 --- a/tests/unit/utils/test_network.py +++ b/tests/unit/utils/test_network.py @@ -11,6 +11,7 @@ from tests.support.mock import ( MagicMock, mock_open, + create_autospec, patch, NO_MOCK, NO_MOCK_REASON, @@ -18,6 +19,7 @@ # Import salt libs import salt.utils.network as network +import salt.exceptions from salt._compat import ipaddress log = logging.getLogger(__name__) @@ -248,25 +250,6 @@ def test_parse_host_port(self): raise _e_ def test_dns_check(self): - class MockSocket(object): - def __init__(self, *args, **kwargs): - pass - - def __call__(self, *args, **kwargs): - pass - - def setsockopt(self, *args, **kwargs): - pass - - def sendto(self, *args, **kwargs): - pass - - def connect(self, *args, **kwargs): - pass - - def close(self, *args, **kwargs): - pass - hosts = [ {'host': '10.10.0.3', 'port': '', @@ -279,22 +262,71 @@ def close(self, *args, **kwargs): {'host': '2001:0db8:85a3::8a2e:0370:7334', 'port': '', 'mocked': [(10, 1, 6, '', ('2001:db8:85a3::8a2e:370:7334', 0, 0, 0))], - 'ret': '2001:db8:85a3::8a2e:370:7334'}, + 'ret': '[2001:db8:85a3::8a2e:370:7334]'}, {'host': '2001:0db8:85a3::8a2e:370:7334', 'port': '1234', 'mocked': [(10, 1, 6, '', ('2001:db8:85a3::8a2e:370:7334', 0, 0, 0))], - 'ret': '2001:db8:85a3::8a2e:370:7334'}, + 'ret': '[2001:db8:85a3::8a2e:370:7334]'}, {'host': 'salt-master', 'port': '1234', 'mocked': [(2, 1, 6, '', ('127.0.0.1', 0))], 'ret': '127.0.0.1'}, ] for host in hosts: - with patch.object(socket, 'getaddrinfo', MagicMock(return_value=host['mocked'])): - with patch('socket.socket', MockSocket): + with patch.object(socket, 'getaddrinfo', create_autospec(socket.getaddrinfo, return_value=host['mocked'])): + with patch('socket.socket', create_autospec(socket.socket)): ret = network.dns_check(host['host'], host['port']) self.assertEqual(ret, host['ret']) + def test_dns_check_ipv6_filter(self): + # raise exception to skip everything after the getaddrinfo call + with patch.object(socket, 'getaddrinfo', + create_autospec(socket.getaddrinfo, side_effect=Exception)) as getaddrinfo: + for ipv6, param in [ + (None, socket.AF_UNSPEC), + (True, socket.AF_INET6), + (False, socket.AF_INET), + ]: + with self.assertRaises(Exception): + network.dns_check('foo', '1', ipv6=ipv6) + getaddrinfo.assert_called_with('foo', '1', param, socket.SOCK_STREAM) + + def test_dns_check_errors(self): + with patch.object(socket, 'getaddrinfo', create_autospec(socket.getaddrinfo, return_value=[])): + with self.assertRaisesRegex(salt.exceptions.SaltSystemExit, + "DNS lookup or connection check of 'foo' failed"): + network.dns_check('foo', '1') + + with patch.object(socket, 'getaddrinfo', create_autospec(socket.getaddrinfo, side_effect=TypeError)): + with self.assertRaisesRegex(salt.exceptions.SaltSystemExit, + "Invalid or unresolveable address"): + network.dns_check('foo', '1') + + def test_test_addrs(self): + # subset of real data from getaddrinfo against saltstack.com + addrinfo = [(30, 2, 17, '', ('2600:9000:21eb:a800:8:1031:abc0:93a1', 0, 0, 0)), + (30, 1, 6, '', ('2600:9000:21eb:a800:8:1031:abc0:93a1', 0, 0, 0)), + (30, 2, 17, '', ('2600:9000:21eb:b400:8:1031:abc0:93a1', 0, 0, 0)), + (30, 1, 6, '', ('2600:9000:21eb:b400:8:1031:abc0:93a1', 0, 0, 0)), + (2, 1, 6, '', ('13.35.99.52', 0)), (2, 2, 17, '', ('13.35.99.85', 0)), + (2, 1, 6, '', ('13.35.99.85', 0)), (2, 2, 17, '', ('13.35.99.122', 0))] + with patch('socket.socket', create_autospec(socket.socket)) as s: + # we connect to the first address + addrs = network._test_addrs(addrinfo, 80) + self.assertTrue(len(addrs) == 1) + self.assertTrue(addrs[0] == addrinfo[0][4][0]) + + # the first lookup fails, succeeds on next check + s.side_effect = [socket.error, MagicMock()] + addrs = network._test_addrs(addrinfo, 80) + self.assertTrue(len(addrs) == 1) + self.assertTrue(addrs[0] == addrinfo[2][4][0]) + + # nothing can connect, but we've eliminated duplicates + s.side_effect = socket.error + addrs = network._test_addrs(addrinfo, 80) + self.assertTrue(len(addrs) == 5) + def test_is_subnet(self): for subnet_data in (IPV4_SUBNETS, IPV6_SUBNETS): for item in subnet_data[True]: From 93ebd0984a7cbac5c4378cebfb2b3d6364d0a62f Mon Sep 17 00:00:00 2001 From: David Hilton Date: Fri, 27 Sep 2019 05:33:09 -0600 Subject: [PATCH 2/2] update mock (py2) from 2.0.0 to 3.0.5 --- requirements/static/py2.7/raet-amzn-2.txt | 2 +- requirements/static/py2.7/raet-amzn-2018.03.txt | 2 +- requirements/static/py2.7/raet-arch.txt | 2 +- requirements/static/py2.7/raet-centos-6.txt | 2 +- requirements/static/py2.7/raet-centos-7.txt | 2 +- requirements/static/py2.7/raet-debian-8.txt | 2 +- requirements/static/py2.7/raet-debian-9.txt | 2 +- requirements/static/py2.7/raet-fedora-29.txt | 2 +- requirements/static/py2.7/raet-fedora-30.txt | 2 +- requirements/static/py2.7/raet-opensuse-leap-15.txt | 2 +- requirements/static/py2.7/raet-osx.txt | 2 +- requirements/static/py2.7/raet-ubuntu-16.04.txt | 2 +- requirements/static/py2.7/raet-ubuntu-18.04.txt | 2 +- requirements/static/py2.7/raet-windows.txt | 2 +- requirements/static/py2.7/zeromq-amzn-2.txt | 2 +- requirements/static/py2.7/zeromq-amzn-2018.03.txt | 2 +- requirements/static/py2.7/zeromq-arch.txt | 2 +- requirements/static/py2.7/zeromq-centos-6.txt | 2 +- requirements/static/py2.7/zeromq-centos-7.txt | 2 +- requirements/static/py2.7/zeromq-debian-8.txt | 2 +- requirements/static/py2.7/zeromq-debian-9.txt | 2 +- requirements/static/py2.7/zeromq-fedora-29.txt | 2 +- requirements/static/py2.7/zeromq-fedora-30.txt | 2 +- requirements/static/py2.7/zeromq-opensuse-leap-15.txt | 2 +- requirements/static/py2.7/zeromq-osx.txt | 2 +- requirements/static/py2.7/zeromq-ubuntu-16.04.txt | 2 +- requirements/static/py2.7/zeromq-ubuntu-18.04.txt | 2 +- requirements/static/py2.7/zeromq-windows.txt | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/requirements/static/py2.7/raet-amzn-2.txt b/requirements/static/py2.7/raet-amzn-2.txt index d67b2f708d65..cb17aec479b8 100644 --- a/requirements/static/py2.7/raet-amzn-2.txt +++ b/requirements/static/py2.7/raet-amzn-2.txt @@ -60,7 +60,7 @@ libnacl==1.6.1 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-amzn-2018.03.txt b/requirements/static/py2.7/raet-amzn-2018.03.txt index 341c819db012..3412cd5f4d86 100644 --- a/requirements/static/py2.7/raet-amzn-2018.03.txt +++ b/requirements/static/py2.7/raet-amzn-2018.03.txt @@ -60,7 +60,7 @@ libnacl==1.6.1 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-arch.txt b/requirements/static/py2.7/raet-arch.txt index 248e1de65fed..1c6be649902c 100644 --- a/requirements/static/py2.7/raet-arch.txt +++ b/requirements/static/py2.7/raet-arch.txt @@ -56,7 +56,7 @@ kubernetes==3.0.0 libnacl==1.6.1 markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-centos-6.txt b/requirements/static/py2.7/raet-centos-6.txt index 83162d714825..ba01e16b1ed2 100644 --- a/requirements/static/py2.7/raet-centos-6.txt +++ b/requirements/static/py2.7/raet-centos-6.txt @@ -60,7 +60,7 @@ libnacl==1.6.1 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-centos-7.txt b/requirements/static/py2.7/raet-centos-7.txt index 57f4e338e4e4..dec0e49c5173 100644 --- a/requirements/static/py2.7/raet-centos-7.txt +++ b/requirements/static/py2.7/raet-centos-7.txt @@ -60,7 +60,7 @@ libnacl==1.6.1 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-debian-8.txt b/requirements/static/py2.7/raet-debian-8.txt index 9cec2638bd4d..2ba032f72c5c 100644 --- a/requirements/static/py2.7/raet-debian-8.txt +++ b/requirements/static/py2.7/raet-debian-8.txt @@ -59,7 +59,7 @@ libnacl==1.6.1 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-debian-9.txt b/requirements/static/py2.7/raet-debian-9.txt index 813624c60727..29a240ceabb9 100644 --- a/requirements/static/py2.7/raet-debian-9.txt +++ b/requirements/static/py2.7/raet-debian-9.txt @@ -59,7 +59,7 @@ libnacl==1.6.1 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-fedora-29.txt b/requirements/static/py2.7/raet-fedora-29.txt index ea1bc7530d93..7adcd60391f6 100644 --- a/requirements/static/py2.7/raet-fedora-29.txt +++ b/requirements/static/py2.7/raet-fedora-29.txt @@ -60,7 +60,7 @@ libnacl==1.6.1 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-fedora-30.txt b/requirements/static/py2.7/raet-fedora-30.txt index 8ff9810ca0f8..2b542f64f38b 100644 --- a/requirements/static/py2.7/raet-fedora-30.txt +++ b/requirements/static/py2.7/raet-fedora-30.txt @@ -60,7 +60,7 @@ libnacl==1.6.1 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-opensuse-leap-15.txt b/requirements/static/py2.7/raet-opensuse-leap-15.txt index d11e9c7e948e..cb8a97d885ea 100644 --- a/requirements/static/py2.7/raet-opensuse-leap-15.txt +++ b/requirements/static/py2.7/raet-opensuse-leap-15.txt @@ -57,7 +57,7 @@ kubernetes==3.0.0 libnacl==1.6.1 markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-osx.txt b/requirements/static/py2.7/raet-osx.txt index 2b369dc8512d..d226f5364bc8 100644 --- a/requirements/static/py2.7/raet-osx.txt +++ b/requirements/static/py2.7/raet-osx.txt @@ -65,7 +65,7 @@ lxml==4.3.3 # via junos-eznc, ncclient mako==1.0.7 markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-ubuntu-16.04.txt b/requirements/static/py2.7/raet-ubuntu-16.04.txt index 71ad576db38c..8277cade6bea 100644 --- a/requirements/static/py2.7/raet-ubuntu-16.04.txt +++ b/requirements/static/py2.7/raet-ubuntu-16.04.txt @@ -59,7 +59,7 @@ libnacl==1.6.1 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-ubuntu-18.04.txt b/requirements/static/py2.7/raet-ubuntu-18.04.txt index 1f2d4be1dc3e..66d2008c4b48 100644 --- a/requirements/static/py2.7/raet-ubuntu-18.04.txt +++ b/requirements/static/py2.7/raet-ubuntu-18.04.txt @@ -59,7 +59,7 @@ libnacl==1.6.1 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/raet-windows.txt b/requirements/static/py2.7/raet-windows.txt index 7dbbf70f0ecb..8344c43822b7 100644 --- a/requirements/static/py2.7/raet-windows.txt +++ b/requirements/static/py2.7/raet-windows.txt @@ -60,7 +60,7 @@ lxml==4.3.0 mako==1.0.7 markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-amzn-2.txt b/requirements/static/py2.7/zeromq-amzn-2.txt index 5676329ac08f..ba67e6d4f78a 100644 --- a/requirements/static/py2.7/zeromq-amzn-2.txt +++ b/requirements/static/py2.7/zeromq-amzn-2.txt @@ -58,7 +58,7 @@ kubernetes==3.0.0 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-amzn-2018.03.txt b/requirements/static/py2.7/zeromq-amzn-2018.03.txt index 07ed28ce4064..d3776c741abc 100644 --- a/requirements/static/py2.7/zeromq-amzn-2018.03.txt +++ b/requirements/static/py2.7/zeromq-amzn-2018.03.txt @@ -58,7 +58,7 @@ kubernetes==3.0.0 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-arch.txt b/requirements/static/py2.7/zeromq-arch.txt index 0fb16e6452e8..31e7467a9363 100644 --- a/requirements/static/py2.7/zeromq-arch.txt +++ b/requirements/static/py2.7/zeromq-arch.txt @@ -54,7 +54,7 @@ keyring==5.7.1 kubernetes==3.0.0 markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-centos-6.txt b/requirements/static/py2.7/zeromq-centos-6.txt index c71c3f67ba25..ea957f8b62b2 100644 --- a/requirements/static/py2.7/zeromq-centos-6.txt +++ b/requirements/static/py2.7/zeromq-centos-6.txt @@ -58,7 +58,7 @@ kubernetes==3.0.0 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-centos-7.txt b/requirements/static/py2.7/zeromq-centos-7.txt index 28436d076c02..9638a2c5e77d 100644 --- a/requirements/static/py2.7/zeromq-centos-7.txt +++ b/requirements/static/py2.7/zeromq-centos-7.txt @@ -58,7 +58,7 @@ kubernetes==3.0.0 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-debian-8.txt b/requirements/static/py2.7/zeromq-debian-8.txt index 573d9c0b0654..1d894827c521 100644 --- a/requirements/static/py2.7/zeromq-debian-8.txt +++ b/requirements/static/py2.7/zeromq-debian-8.txt @@ -57,7 +57,7 @@ kubernetes==3.0.0 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-debian-9.txt b/requirements/static/py2.7/zeromq-debian-9.txt index 08726d02f5b6..2b023543102b 100644 --- a/requirements/static/py2.7/zeromq-debian-9.txt +++ b/requirements/static/py2.7/zeromq-debian-9.txt @@ -57,7 +57,7 @@ kubernetes==3.0.0 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-fedora-29.txt b/requirements/static/py2.7/zeromq-fedora-29.txt index 0eb173ed0227..de9fb20ec82a 100644 --- a/requirements/static/py2.7/zeromq-fedora-29.txt +++ b/requirements/static/py2.7/zeromq-fedora-29.txt @@ -58,7 +58,7 @@ kubernetes==3.0.0 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-fedora-30.txt b/requirements/static/py2.7/zeromq-fedora-30.txt index 6822501e11ce..fee4b1ad5d04 100644 --- a/requirements/static/py2.7/zeromq-fedora-30.txt +++ b/requirements/static/py2.7/zeromq-fedora-30.txt @@ -58,7 +58,7 @@ kubernetes==3.0.0 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-opensuse-leap-15.txt b/requirements/static/py2.7/zeromq-opensuse-leap-15.txt index 287d5981ee3b..0d5b830a5318 100644 --- a/requirements/static/py2.7/zeromq-opensuse-leap-15.txt +++ b/requirements/static/py2.7/zeromq-opensuse-leap-15.txt @@ -55,7 +55,7 @@ keyring==5.7.1 kubernetes==3.0.0 markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-osx.txt b/requirements/static/py2.7/zeromq-osx.txt index 9a778c8c751a..85e739a768ee 100644 --- a/requirements/static/py2.7/zeromq-osx.txt +++ b/requirements/static/py2.7/zeromq-osx.txt @@ -63,7 +63,7 @@ lxml==4.3.3 # via junos-eznc, ncclient mako==1.0.7 markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-ubuntu-16.04.txt b/requirements/static/py2.7/zeromq-ubuntu-16.04.txt index 5c2b1652de81..6cac17e43ffa 100644 --- a/requirements/static/py2.7/zeromq-ubuntu-16.04.txt +++ b/requirements/static/py2.7/zeromq-ubuntu-16.04.txt @@ -57,7 +57,7 @@ kubernetes==3.0.0 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-ubuntu-18.04.txt b/requirements/static/py2.7/zeromq-ubuntu-18.04.txt index 16472d2dac3c..c2140d4107f8 100644 --- a/requirements/static/py2.7/zeromq-ubuntu-18.04.txt +++ b/requirements/static/py2.7/zeromq-ubuntu-18.04.txt @@ -57,7 +57,7 @@ kubernetes==3.0.0 lxml==4.3.3 # via junos-eznc, ncclient markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6 diff --git a/requirements/static/py2.7/zeromq-windows.txt b/requirements/static/py2.7/zeromq-windows.txt index 2d73db18f6db..514834743a75 100644 --- a/requirements/static/py2.7/zeromq-windows.txt +++ b/requirements/static/py2.7/zeromq-windows.txt @@ -59,7 +59,7 @@ lxml==4.3.0 mako==1.0.7 markupsafe==1.1.1 meld3==1.0.2 # via supervisor -mock==2.0.0 ; python_version < "3.6" +mock==3.0.5 ; python_version < "3.6" more-itertools==5.0.0 moto==1.3.7 msgpack-python==0.5.6