コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
ファイル: test_neutron.py プロジェクト: openstack/magnum
    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)
コード例 #4
0
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
コード例 #5
0
ファイル: octavia.py プロジェクト: openstack/magnum
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))
コード例 #6
0
ファイル: octavia.py プロジェクト: laashub-soa/magnum
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))
コード例 #7
0
ファイル: test_neutron.py プロジェクト: openstack/magnum
    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)