Skip to content

Commit 60cf663

Browse files
committed
fix(services): default PORT change error
1 parent 3cea166 commit 60cf663

3 files changed

Lines changed: 31 additions & 7 deletions

File tree

rootfs/api/models/app.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,9 @@ def _create_default_ingress(self, procfile_type, target_port):
825825
service = Service(owner=self.owner, app=self, procfile_type=procfile_type)
826826
service.add_port(port, "TCP", target_port)
827827
service.save()
828+
else:
829+
if service.update_port(port, "TCP", target_port):
830+
service.save()
828831
# create default gateway
829832
try:
830833
gateway = self.gateway_set.filter(name=self.id).latest()

rootfs/api/models/service.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ def as_dict(self):
4343
def port_name(self, port, protocol):
4444
return "-".join([self.app.id, self.procfile_type, protocol, str(port)]).lower()
4545

46+
def get_port(self, port, protocol):
47+
for port in self.ports:
48+
if port["port"] == port and port["protocol"] == protocol:
49+
return port
50+
return None
51+
4652
def add_port(self, port, protocol, target_port):
4753
self.ports.append({
4854
"name": self.port_name(port, protocol),
@@ -51,6 +57,25 @@ def add_port(self, port, protocol, target_port):
5157
"targetPort": target_port,
5258
})
5359

60+
def update_port(self, port, protocol, target_port):
61+
port = self.get_port(port, "TCP")
62+
if not port or port["targetPort"] != target_port:
63+
if port and port["targetPort"] != target_port:
64+
self.remove_port(port, "TCP")
65+
self.add_port(port, "TCP", target_port)
66+
return True
67+
return False
68+
69+
def remove_port(self, port, protocol):
70+
ports = []
71+
for item in self.ports:
72+
if item["port"] != port or item["protocol"] != protocol:
73+
ports.append(item)
74+
if len(self.ports) > len(ports):
75+
self.ports = ports
76+
return True
77+
return False
78+
5479
def refresh_k8s_svc(self):
5580
if self.canary:
5681
self._refresh_k8s_svc(self._svc_name(False))

rootfs/api/views.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -452,14 +452,10 @@ def delete(self, request, **kwargs):
452452
procfile_type = self.get_serializer().validate_procfile_type(
453453
request.data.get('procfile_type'))
454454
service = get_object_or_404(self.get_queryset(**kwargs), procfile_type=procfile_type)
455-
ports = []
456-
for item in service.ports:
457-
if item["port"] != port or item["protocol"] != protocol:
458-
ports.append(item)
459-
if len(ports) == 0:
455+
removed = service.remove_port(port, protocol)
456+
if len(service.ports) == 0:
460457
service.delete()
461-
elif len(ports) < len(service.ports):
462-
service.ports = ports
458+
elif removed:
463459
service.save()
464460
return Response(status=status.HTTP_204_NO_CONTENT)
465461

0 commit comments

Comments
 (0)