Adapt selfLink calculation for Service objects.

Implements: blueprint selflink
Change-Id: Id0933b837f4dc856c800bfb003f4aa8096a3176c
This commit is contained in:
Roman Dobosz 2020-12-23 14:30:55 +01:00
parent b38f0584a0
commit 94e5f92791
4 changed files with 35 additions and 16 deletions

View File

@ -133,7 +133,7 @@ class ServiceHandler(k8s_base.ResourceEventHandler):
if len(subnet_ids) != 1: if len(subnet_ids) != 1:
raise k_exc.IntegrityError(_( raise k_exc.IntegrityError(_(
"Found %(num)s subnets for service %(link)s IP %(ip)s") % { "Found %(num)s subnets for service %(link)s IP %(ip)s") % {
'link': service['metadata']['selfLink'], 'link': utils.get_res_link(service),
'ip': ip, 'ip': ip,
'num': len(subnet_ids)}) 'num': len(subnet_ids)})
@ -214,7 +214,7 @@ class ServiceHandler(k8s_base.ResourceEventHandler):
utils.has_port_changes(service, loadbalancer_crd)) utils.has_port_changes(service, loadbalancer_crd))
def _has_ip_changes(self, service, loadbalancer_crd): def _has_ip_changes(self, service, loadbalancer_crd):
link = service['metadata']['selfLink'] link = utils.get_res_link(service)
svc_ip = self._get_service_ip(service) svc_ip = self._get_service_ip(service)
if loadbalancer_crd['spec'].get('ip') is None: if loadbalancer_crd['spec'].get('ip') is None:

View File

@ -45,6 +45,8 @@ class TestServiceHandler(test_base.TestCase):
@mock.patch('kuryr_kubernetes.clients.get_kubernetes_client') @mock.patch('kuryr_kubernetes.clients.get_kubernetes_client')
def test_on_present(self, get_k8s_client): def test_on_present(self, get_k8s_client):
svc_event = { svc_event = {
'apiVersion': 'v1',
'kind': 'Service',
"metadata": { "metadata": {
"creationTimestamp": "2020-07-25T18:15:12Z", "creationTimestamp": "2020-07-25T18:15:12Z",
"finalizers": [ "finalizers": [
@ -56,7 +58,6 @@ class TestServiceHandler(test_base.TestCase):
"name": "test", "name": "test",
"namespace": "test", "namespace": "test",
"resourceVersion": "413753", "resourceVersion": "413753",
"selfLink": "",
"uid": "a026ae48-6141-4029-b743-bac48dae7f06" "uid": "a026ae48-6141-4029-b743-bac48dae7f06"
}, },
"spec": { "spec": {
@ -120,6 +121,8 @@ class TestServiceHandler(test_base.TestCase):
@mock.patch('kuryr_kubernetes.clients.get_kubernetes_client') @mock.patch('kuryr_kubernetes.clients.get_kubernetes_client')
def test_on_present_no_changes(self, get_k8s_client): def test_on_present_no_changes(self, get_k8s_client):
svc_event = { svc_event = {
'apiVersion': 'v1',
'kind': 'Service',
"metadata": { "metadata": {
"creationTimestamp": "2020-07-25T18:15:12Z", "creationTimestamp": "2020-07-25T18:15:12Z",
"finalizers": [ "finalizers": [
@ -131,7 +134,6 @@ class TestServiceHandler(test_base.TestCase):
"name": "test", "name": "test",
"namespace": "test", "namespace": "test",
"resourceVersion": "413753", "resourceVersion": "413753",
"selfLink": "",
"uid": "a026ae48-6141-4029-b743-bac48dae7f06" "uid": "a026ae48-6141-4029-b743-bac48dae7f06"
}, },
"spec": { "spec": {
@ -232,7 +234,10 @@ class TestServiceHandler(test_base.TestCase):
def test_has_ip_changes(self): def test_has_ip_changes(self):
m_handler = mock.Mock(spec=h_lbaas.ServiceHandler) m_handler = mock.Mock(spec=h_lbaas.ServiceHandler)
m_service = mock.MagicMock() m_service = {'apiVersion': 'v1',
'kind': 'Service',
"metadata": {"name": "test",
"namespace": "test"}}
m_handler._get_service_ip.return_value = '1.1.1.1' m_handler._get_service_ip.return_value = '1.1.1.1'
m_lbaas_spec = mock.MagicMock() m_lbaas_spec = mock.MagicMock()
m_lbaas_spec.ip.__str__.return_value = '2.2.2.2' m_lbaas_spec.ip.__str__.return_value = '2.2.2.2'
@ -243,6 +248,8 @@ class TestServiceHandler(test_base.TestCase):
def test_has_ip_changes__no_changes(self): def test_has_ip_changes__no_changes(self):
service = { service = {
'apiVersion': 'v1',
'kind': 'Service',
"metadata": { "metadata": {
"creationTimestamp": "2020-07-25T18:15:12Z", "creationTimestamp": "2020-07-25T18:15:12Z",
"finalizers": [ "finalizers": [
@ -254,7 +261,6 @@ class TestServiceHandler(test_base.TestCase):
"name": "test", "name": "test",
"namespace": "test", "namespace": "test",
"resourceVersion": "413753", "resourceVersion": "413753",
"selfLink": "",
"uid": "a026ae48-6141-4029-b743-bac48dae7f06" "uid": "a026ae48-6141-4029-b743-bac48dae7f06"
}, },
"spec": { "spec": {
@ -283,6 +289,8 @@ class TestServiceHandler(test_base.TestCase):
m_handler = mock.Mock(spec=h_lbaas.ServiceHandler) m_handler = mock.Mock(spec=h_lbaas.ServiceHandler)
m_handler._get_service_ip.return_value = '1.1.1.1' m_handler._get_service_ip.return_value = '1.1.1.1'
service = { service = {
'apiVersion': 'v1',
'kind': 'Service',
"metadata": { "metadata": {
"creationTimestamp": "2020-07-25T18:15:12Z", "creationTimestamp": "2020-07-25T18:15:12Z",
"finalizers": [ "finalizers": [
@ -294,7 +302,6 @@ class TestServiceHandler(test_base.TestCase):
"name": "test", "name": "test",
"namespace": "test", "namespace": "test",
"resourceVersion": "413753", "resourceVersion": "413753",
"selfLink": "",
"uid": "a026ae48-6141-4029-b743-bac48dae7f06" "uid": "a026ae48-6141-4029-b743-bac48dae7f06"
}, },
"spec": { "spec": {
@ -314,6 +321,8 @@ class TestServiceHandler(test_base.TestCase):
def test_has_ip_changes__no_nothing(self): def test_has_ip_changes__no_nothing(self):
m_handler = mock.Mock(spec=h_lbaas.ServiceHandler) m_handler = mock.Mock(spec=h_lbaas.ServiceHandler)
service = { service = {
'apiVersion': 'v1',
'kind': 'Service',
"metadata": { "metadata": {
"creationTimestamp": "2020-07-25T18:15:12Z", "creationTimestamp": "2020-07-25T18:15:12Z",
"finalizers": [ "finalizers": [
@ -325,7 +334,6 @@ class TestServiceHandler(test_base.TestCase):
"name": "test", "name": "test",
"namespace": "test", "namespace": "test",
"resourceVersion": "413753", "resourceVersion": "413753",
"selfLink": "",
"uid": "a026ae48-6141-4029-b743-bac48dae7f06" "uid": "a026ae48-6141-4029-b743-bac48dae7f06"
}, },
"spec": { "spec": {

View File

@ -164,8 +164,10 @@ class TestUtils(test_base.TestCase):
kubernetes.get.assert_called_once() kubernetes.get.assert_called_once()
def test_get_endpoints_link(self): def test_get_endpoints_link(self):
service = {'metadata': { service = {'apiVersion': 'v1',
'selfLink': "/api/v1/namespaces/default/services/test"}} 'kind': 'Service',
'metadata': {'namespace': 'default',
'name': 'test'}}
ret = utils.get_endpoints_link(service) ret = utils.get_endpoints_link(service)
expected_link = "/api/v1/namespaces/default/endpoints/test" expected_link = "/api/v1/namespaces/default/endpoints/test"
self.assertEqual(expected_link, ret) self.assertEqual(expected_link, ret)
@ -187,8 +189,11 @@ class TestUtils(test_base.TestCase):
@mock.patch('kuryr_kubernetes.utils.get_service_ports') @mock.patch('kuryr_kubernetes.utils.get_service_ports')
def test_has_port_changes(self, m_get_service_ports): def test_has_port_changes(self, m_get_service_ports):
service = { service = {
'apiVersion': 'v1',
'kind': 'Service',
'metadata': { 'metadata': {
'selfLink': "" 'name': 'serv-1',
'namespace': 'ns1'
}, },
'spec': { 'spec': {
'ports': [ 'ports': [
@ -219,8 +224,11 @@ class TestUtils(test_base.TestCase):
@mock.patch('kuryr_kubernetes.utils.get_service_ports') @mock.patch('kuryr_kubernetes.utils.get_service_ports')
def test_has_port_changes_more_ports(self, m_get_service_ports): def test_has_port_changes_more_ports(self, m_get_service_ports):
service = { service = {
'apiVersion': 'v1',
'kind': 'Service',
'metadata': { 'metadata': {
'selfLink': "" 'name': 'serv-1',
'namespace': 'ns1'
}, },
'spec': { 'spec': {
'ports': [ 'ports': [
@ -259,8 +267,11 @@ class TestUtils(test_base.TestCase):
def test_has_port_changes_no_changes(self, m_get_service_ports): def test_has_port_changes_no_changes(self, m_get_service_ports):
service = { service = {
'apiVersion': 'v1',
'kind': 'Service',
'metadata': { 'metadata': {
'selfLink': "" 'name': 'serv-1',
'namespace': 'ns1'
}, },
'spec': { 'spec': {
'ports': [ 'ports': [

View File

@ -376,7 +376,7 @@ def set_lbaas_spec(service, lbaas_spec):
LOG.debug("Setting LBaaSServiceSpec annotation: %r", lbaas_spec) LOG.debug("Setting LBaaSServiceSpec annotation: %r", lbaas_spec)
annotation = jsonutils.dumps(lbaas_spec.obj_to_primitive(), annotation = jsonutils.dumps(lbaas_spec.obj_to_primitive(),
sort_keys=True) sort_keys=True)
svc_link = service['metadata']['selfLink'] svc_link = get_res_link(service)
ep_link = get_endpoints_link(service) ep_link = get_endpoints_link(service)
k8s = clients.get_kubernetes_client() k8s = clients.get_kubernetes_client()
@ -430,7 +430,7 @@ def set_lbaas_state(endpoints, lbaas_state):
def get_endpoints_link(service): def get_endpoints_link(service):
svc_link = service['metadata']['selfLink'] svc_link = get_res_link(service)
link_parts = svc_link.split('/') link_parts = svc_link.split('/')
if link_parts[-2] != 'services': if link_parts[-2] != 'services':
@ -456,7 +456,7 @@ def get_service_link(endpoints):
def has_port_changes(service, loadbalancer_crd): def has_port_changes(service, loadbalancer_crd):
if not loadbalancer_crd: if not loadbalancer_crd:
return False return False
link = service['metadata']['selfLink'] link = get_res_link(service)
svc_port_set = service['spec'].get('ports') svc_port_set = service['spec'].get('ports')
for port in svc_port_set: for port in svc_port_set: