From 68d6a58dd13a314e56f7ad27b85191923359bdbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awek=20Kap=C5=82o=C5=84ski?= Date: Tue, 20 Mar 2018 21:42:26 +0100 Subject: [PATCH] Don't raise error when removing not existing IP address When privileged delete_ip_address function is called to delete IP address which is already not configured on device, it should not fail with any error. Conflicts: neutron/tests/functional/agent/linux/test_ip_lib.py Change-Id: I9247ac899a76e5d9a2962d2cb81279f2d6f16c0b Closes-Bug: #1757259 (cherry picked from commit bbe1bac3f78eb15190289b6bc8d6b3a9ae77b412) --- neutron/privileged/agent/linux/ip_lib.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/neutron/privileged/agent/linux/ip_lib.py b/neutron/privileged/agent/linux/ip_lib.py index 776dbbecc15..801f8fb62b9 100644 --- a/neutron/privileged/agent/linux/ip_lib.py +++ b/neutron/privileged/agent/linux/ip_lib.py @@ -139,12 +139,21 @@ def add_ip_address(ip_version, ip, prefixlen, device, namespace, scope, @privileged.default.entrypoint def delete_ip_address(ip_version, ip, prefixlen, device, namespace): family = _IP_VERSION_FAMILY_MAP[ip_version] - _run_iproute_addr("delete", - device, - namespace, - address=ip, - mask=prefixlen, - family=family) + try: + _run_iproute_addr("delete", + device, + namespace, + address=ip, + mask=prefixlen, + family=family) + except NetlinkError as e: + # when trying to delete a non-existent IP address, pyroute2 raises + # NetlinkError with code EADDRNOTAVAIL (99, 'Cannot assign requested + # address') + # this shouldn't raise an error + if e.code == errno.EADDRNOTAVAIL: + return + raise @privileged.default.entrypoint