diff --git a/kuryr_kubernetes/controller/drivers/lbaasv2.py b/kuryr_kubernetes/controller/drivers/lbaasv2.py index 9ff5f595d..fbfd97974 100644 --- a/kuryr_kubernetes/controller/drivers/lbaasv2.py +++ b/kuryr_kubernetes/controller/drivers/lbaasv2.py @@ -835,7 +835,7 @@ class LBaaSv2Driver(base.LBaaSDriver): {'status': status, 'lb': loadbalancer, 'rem': remaining}) - raise k_exc.ResourceNotReady(loadbalancer) + raise k_exc.LoadBalancerNotReady(loadbalancer['id'], status) def _wait_for_deletion(self, loadbalancer, timeout, interval=_LB_STS_POLL_FAST_INTERVAL): diff --git a/kuryr_kubernetes/controller/drivers/nested_vlan_vif.py b/kuryr_kubernetes/controller/drivers/nested_vlan_vif.py index 72a9938da..4e025e60e 100644 --- a/kuryr_kubernetes/controller/drivers/nested_vlan_vif.py +++ b/kuryr_kubernetes/controller/drivers/nested_vlan_vif.py @@ -122,7 +122,7 @@ class NestedVlanPodVIFDriver(nested_vif.NestedPodVIFDriver): def activate_vif(self, vif, pod=None, retry_info=None): try: super().activate_vif(vif) - except k_exc.ResourceNotReady: + except k_exc.PortNotReady: if retry_info and retry_info.get('elapsed', 0) > ACTIVE_TIMEOUT: parent_port = self._get_parent_port(pod) trunk_id = self._get_trunk_id(parent_port) diff --git a/kuryr_kubernetes/controller/drivers/neutron_vif.py b/kuryr_kubernetes/controller/drivers/neutron_vif.py index 6701d493e..2a14b5052 100644 --- a/kuryr_kubernetes/controller/drivers/neutron_vif.py +++ b/kuryr_kubernetes/controller/drivers/neutron_vif.py @@ -105,7 +105,7 @@ class NeutronPodVIFDriver(base.PodVIFDriver): raise k_exc.ResourceNotReady(vif) if port['status'] != kl_const.PORT_STATUS_ACTIVE: - raise k_exc.ResourceNotReady(vif) + raise k_exc.PortNotReady(vif.id, port['status']) vif.active = True diff --git a/kuryr_kubernetes/exceptions.py b/kuryr_kubernetes/exceptions.py index b6a7f5e08..5bc028278 100644 --- a/kuryr_kubernetes/exceptions.py +++ b/kuryr_kubernetes/exceptions.py @@ -38,6 +38,23 @@ class ResourceNotReady(Exception): super(ResourceNotReady, self).__init__("Resource not ready: %r" % msg) +class LoadBalancerNotReady(ResourceNotReady): + def __init__(self, loadbalancer_id, status): + super().__init__( + 'Loadbalancer %s is stuck in %s status for several minutes. This ' + 'is unexpected and indicates problem with OpenStack Octavia. ' + 'Please contact your OpenStack administrator.' % ( + loadbalancer_id, status)) + + +class PortNotReady(ResourceNotReady): + def __init__(self, port_id, status): + super().__init__( + 'Port %s is stuck in %s status for several minutes. This ' + 'is unexpected and indicates problem with OpenStack Neutron. ' + 'Please contact your OpenStack administrator.' % (port_id, status)) + + class K8sResourceNotFound(K8sClientException): def __init__(self, resource): super(K8sResourceNotFound, self).__init__("Resource not "