From cd719d97df62765407ab1e6e1986e8da81a69327 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9na=C3=AFc=20Huard?= Date: Fri, 27 Feb 2015 18:00:18 +0100 Subject: [PATCH] Fix `kubernetes` and `kubernetes-ro` services creation If `kube-apiserver` is started before `etcd` is reachable, `kube-apiserver` fails to create those services. However, in the `Create` function, an IP has already been reserved for them. When `etcd` comes back, the `Create` function fails because it considers that the IP is already used. If the service couldn't be created, the reserved IP should be released. --- pkg/registry/service/rest.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/registry/service/rest.go b/pkg/registry/service/rest.go index 7e76fece859..2aa907726ea 100644 --- a/pkg/registry/service/rest.go +++ b/pkg/registry/service/rest.go @@ -110,11 +110,13 @@ func (rs *REST) Create(ctx api.Context, obj runtime.Object) (runtime.Object, err if service.Spec.CreateExternalLoadBalancer { err := rs.createExternalLoadBalancer(ctx, service) if err != nil { + rs.portalMgr.Release(net.ParseIP(service.Spec.PortalIP)) return nil, err } } if err := rs.registry.CreateService(ctx, service); err != nil { + rs.portalMgr.Release(net.ParseIP(service.Spec.PortalIP)) err = rest.CheckGeneratedNameError(rest.Services, err, service) return nil, err }