def test_delete_floatingip_empty(self, mock_clients): mock_nclient = mock.MagicMock() fake_port_id = "b4518944-c2cf-4c69-a1e3-774041fd5d14" mock_nclient.list_floatingips.return_value = {'floatingips': []} osc = mock.MagicMock() mock_clients.return_value = osc osc.neutron.return_value = mock_nclient neutron.delete_floatingip(self.context, fake_port_id, self.cluster) self.assertFalse(mock_nclient.delete_floatingip.called)
def test_delete_floatingip(self, mock_clients): mock_nclient = mock.MagicMock() fake_port_id = "b4518944-c2cf-4c69-a1e3-774041fd5d14" fake_fip_id = "0f8c6849-af85-424c-aa8e-745ade9a46a7" mock_nclient.list_floatingips.return_value = { 'floatingips': [{ 'router_id': '6ed4f7ef-b8c3-4711-93cf-d53cf0e8bdf5', 'status': 'ACTIVE', 'description': 'Floating IP for Kubernetes external ' 'service ad3080723f1c211e88adbfa163ee1203 ' 'from cluster %s' % self.cluster.uuid, 'tags': [], 'tenant_id': 'cd08a539b7c845ddb92c5d08752101d1', 'floating_network_id': 'd0b9a8c5-33e5-4ce1-869a-1e2ec7c2f' '74b', 'port_details': { 'status': 'ACTIVE', 'name': 'test-k8s-master', 'admin_state_up': True, 'network_id': '7b9110b5-90a2-40bc-b892-07d641387760 ', 'device_owner': 'compute:nova', 'mac_address': 'fa:16:3e:6f:ad:6c', 'device_id': 'a5c1689f-dd76-4164-8562-6990071701cd' }, 'fixed_ip_address': '10.0.0.4', 'floating_ip_address': '172.24.4.74', 'revision_number': 14, 'project_id': 'cd08a539b7c845ddb92c5d08752101d1', 'port_id': fake_port_id, 'id': fake_fip_id }] } osc = mock.MagicMock() mock_clients.return_value = osc osc.neutron.return_value = mock_nclient neutron.delete_floatingip(self.context, fake_port_id, self.cluster) mock_nclient.delete_floatingip.assert_called_once_with(fake_fip_id)
def test_delete_floatingip_empty(self, mock_clients): mock_nclient = mock.MagicMock() fake_port_id = "b4518944-c2cf-4c69-a1e3-774041fd5d14" mock_nclient.list_floatingips.return_value = { 'floatingips': [] } osc = mock.MagicMock() mock_clients.return_value = osc osc.neutron.return_value = mock_nclient neutron.delete_floatingip(self.context, fake_port_id, self.cluster) self.assertFalse(mock_nclient.delete_floatingip.called)
def _delete_loadbalancers(context, lbs, cluster, octavia_client, remove_fip=False, cascade=True): candidates = set() for lb in lbs: status = lb["provisioning_status"] if status not in ["PENDING_DELETE", "DELETED"]: LOG.info("Deleting load balancer %s for cluster %s", lb["id"], cluster.uuid) octavia_client.load_balancer_delete(lb["id"], cascade=cascade) candidates.add(lb["id"]) if remove_fip: neutron.delete_floatingip(context, lb["vip_port_id"], cluster) return candidates
def delete_loadbalancers(context, cluster): """Delete loadbalancers for kubernetes resources. This method only works for the k8s cluster with cloud-provider-openstack manager or controller-manager patched with this PR: https://github.com/kubernetes/cloud-provider-openstack/pull/223 The load balancers created for kubernetes services and ingresses are deleted. """ pattern = (r'Kubernetes .+ from cluster %s$' % cluster.uuid) valid_status = ["ACTIVE", "ERROR", "PENDING_DELETE", "DELETED"] try: o_client = clients.OpenStackClients(context).octavia() lbs = o_client.load_balancer_list().get("loadbalancers", []) candidates = set() invalids = set() for lb in lbs: if re.match(pattern, lb["description"]): if lb["provisioning_status"] not in valid_status: invalids.add(lb["id"]) continue if lb["provisioning_status"] in ["ACTIVE", "ERROR"]: # Delete VIP floating ip if needed. neutron.delete_floatingip(context, lb["vip_port_id"], cluster) LOG.debug("Deleting load balancer %s for cluster %s", lb["id"], cluster.uuid) o_client.load_balancer_delete(lb["id"], cascade=True) candidates.add(lb["id"]) if invalids: raise Exception("Cannot delete load balancers %s in transitional " "status." % invalids) if not candidates: return wait_for_lb_deleted(o_client, candidates) except Exception as e: raise exception.PreDeletionFailed(cluster_uuid=cluster.uuid, msg=str(e))
def delete_loadbalancers(context, cluster): """Delete loadbalancers for kubernetes resources. This method only works for the k8s cluster with cloud-provider-openstack manager or controller-manager patched with this PR: https://github.com/kubernetes/cloud-provider-openstack/pull/223 The load balancers created for kubernetes services and ingresses are deleted. """ pattern = (r'Kubernetes .+ from cluster %s' % cluster.uuid) valid_status = ["ACTIVE", "ERROR", "PENDING_DELETE", "DELETED"] try: o_client = clients.OpenStackClients(context).octavia() lbs = o_client.load_balancer_list().get("loadbalancers", []) candidates = set() invalids = set() for lb in lbs: if re.match(pattern, lb["description"]): if lb["provisioning_status"] not in valid_status: invalids.add(lb["id"]) continue if lb["provisioning_status"] in ["ACTIVE", "ERROR"]: # Delete VIP floating ip if needed. neutron.delete_floatingip(context, lb["vip_port_id"], cluster) LOG.debug("Deleting load balancer %s for cluster %s", lb["id"], cluster.uuid) o_client.load_balancer_delete(lb["id"], cascade=True) candidates.add(lb["id"]) if invalids: raise Exception("Cannot delete load balancers %s in transitional " "status." % invalids) if not candidates: return wait_for_lb_deleted(o_client, candidates) except Exception as e: raise exception.PreDeletionFailed(cluster_uuid=cluster.uuid, msg=str(e))
def test_delete_floatingip(self, mock_clients): mock_nclient = mock.MagicMock() fake_port_id = "b4518944-c2cf-4c69-a1e3-774041fd5d14" fake_fip_id = "0f8c6849-af85-424c-aa8e-745ade9a46a7" mock_nclient.list_floatingips.return_value = { 'floatingips': [ { 'router_id': '6ed4f7ef-b8c3-4711-93cf-d53cf0e8bdf5', 'status': 'ACTIVE', 'description': 'Floating IP for Kubernetes external ' 'service ad3080723f1c211e88adbfa163ee1203 ' 'from cluster %s' % self.cluster.uuid, 'tags': [], 'tenant_id': 'cd08a539b7c845ddb92c5d08752101d1', 'floating_network_id': 'd0b9a8c5-33e5-4ce1-869a-1e2ec7c2f' '74b', 'port_details': { 'status': 'ACTIVE', 'name': 'test-k8s-master', 'admin_state_up': True, 'network_id': '7b9110b5-90a2-40bc-b892-07d641387760 ', 'device_owner': 'compute:nova', 'mac_address': 'fa:16:3e:6f:ad:6c', 'device_id': 'a5c1689f-dd76-4164-8562-6990071701cd' }, 'fixed_ip_address': '10.0.0.4', 'floating_ip_address': '172.24.4.74', 'revision_number': 14, 'project_id': 'cd08a539b7c845ddb92c5d08752101d1', 'port_id': fake_port_id, 'id': fake_fip_id } ] } osc = mock.MagicMock() mock_clients.return_value = osc osc.neutron.return_value = mock_nclient neutron.delete_floatingip(self.context, fake_port_id, self.cluster) mock_nclient.delete_floatingip.assert_called_once_with(fake_fip_id)