diff options
author | Adam Dobrawy <ad-m@users.noreply.github.com> | 2020-03-31 19:37:12 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-31 13:37:12 -0400 |
commit | ed350acb7a941ef16b2f9e19b223b58901e6b431 (patch) | |
tree | 738f08e7c9881243d599a885ec26c26819258f8f | |
parent | d00126c167fc06d913d99cfc184bf3402cb8cf53 (diff) | |
download | vyos-cloud-init-ed350acb7a941ef16b2f9e19b223b58901e6b431.tar.gz vyos-cloud-init-ed350acb7a941ef16b2f9e19b223b58901e6b431.zip |
rbxcloud: gracefully handle arping errors (#262)
-rw-r--r-- | cloudinit/sources/DataSourceRbxCloud.py | 17 | ||||
-rw-r--r-- | tests/unittests/test_datasource/test_rbx.py | 30 |
2 files changed, 42 insertions, 5 deletions
diff --git a/cloudinit/sources/DataSourceRbxCloud.py b/cloudinit/sources/DataSourceRbxCloud.py index c3cd5c79..084cb7d5 100644 --- a/cloudinit/sources/DataSourceRbxCloud.py +++ b/cloudinit/sources/DataSourceRbxCloud.py @@ -55,11 +55,18 @@ def gratuitous_arp(items, distro): if distro.name in ['fedora', 'centos', 'rhel']: source_param = '-s' for item in items: - _sub_arp([ - '-c', '2', - source_param, item['source'], - item['destination'] - ]) + try: + _sub_arp([ + '-c', '2', + source_param, item['source'], + item['destination'] + ]) + except util.ProcessExecutionError as error: + # warning, because the system is able to function properly + # despite no success - some ARP table may be waiting for + # expiration, but the system may continue + LOG.warning('Failed to arping from "%s" to "%s": %s', + item['source'], item['destination'], error) def get_md(): diff --git a/tests/unittests/test_datasource/test_rbx.py b/tests/unittests/test_datasource/test_rbx.py index aabf1f18..553af62e 100644 --- a/tests/unittests/test_datasource/test_rbx.py +++ b/tests/unittests/test_datasource/test_rbx.py @@ -4,6 +4,7 @@ from cloudinit import helpers from cloudinit import distros from cloudinit.sources import DataSourceRbxCloud as ds from cloudinit.tests.helpers import mock, CiTestCase, populate_dir +from cloudinit import util DS_PATH = "cloudinit.sources.DataSourceRbxCloud" @@ -199,6 +200,35 @@ class TestRbxDataSource(CiTestCase): m_subp.call_args_list ) + @mock.patch( + DS_PATH + '.util.subp', + side_effect=util.ProcessExecutionError() + ) + def test_continue_on_arping_error(self, m_subp): + """Continue when command error""" + items = [ + { + 'destination': '172.17.0.2', + 'source': '172.16.6.104' + }, + { + 'destination': '172.17.0.2', + 'source': '172.16.6.104', + }, + ] + ds.gratuitous_arp(items, self._fetch_distro('ubuntu')) + self.assertEqual([ + mock.call([ + 'arping', '-c', '2', '-S', + '172.16.6.104', '172.17.0.2' + ]), + mock.call([ + 'arping', '-c', '2', '-S', + '172.16.6.104', '172.17.0.2' + ]) + ], m_subp.call_args_list + ) + def populate_cloud_metadata(path, data): populate_dir(path, {'cloud.json': json.dumps(data)}) |