diff --git a/core/pkg/ingress/controller/controller.go b/core/pkg/ingress/controller/controller.go index 70fb53be1b..be4ff6a325 100644 --- a/core/pkg/ingress/controller/controller.go +++ b/core/pkg/ingress/controller/controller.go @@ -138,8 +138,9 @@ type Configuration struct { // (for instance NGINX) Backend ingress.Controller - UpdateStatus bool - ElectionID string + UpdateStatus bool + ElectionID string + UpdateStatusOnShutdown bool } // newIngressController creates an Ingress controller @@ -307,12 +308,13 @@ func newIngressController(config *Configuration) *GenericController { if config.UpdateStatus { ic.syncStatus = status.NewStatusSyncer(status.Config{ - Client: config.Client, - PublishService: ic.cfg.PublishService, - IngressLister: ic.ingLister, - ElectionID: config.ElectionID, - IngressClass: config.IngressClass, - DefaultIngressClass: config.DefaultIngressClass, + Client: config.Client, + PublishService: ic.cfg.PublishService, + IngressLister: ic.ingLister, + ElectionID: config.ElectionID, + IngressClass: config.IngressClass, + DefaultIngressClass: config.DefaultIngressClass, + UpdateStatusOnShutdown: config.UpdateStatusOnShutdown, }) } else { glog.Warning("Update of ingress status is disabled (flag --update-status=false was specified)") diff --git a/core/pkg/ingress/controller/launch.go b/core/pkg/ingress/controller/launch.go index 9bb1624880..bb5807fd30 100644 --- a/core/pkg/ingress/controller/launch.go +++ b/core/pkg/ingress/controller/launch.go @@ -89,6 +89,10 @@ func NewIngressController(backend ingress.Controller) *GenericController { forceIsolation = flags.Bool("force-namespace-isolation", false, `Force namespace isolation. This flag is required to avoid the reference of secrets or configmaps located in a different namespace than the specified in the flag --watch-namespace.`) + + UpdateStatusOnShutdown = flags.Bool("update-status-on-shutdown", true, `Indicates if the + ingress controller should update the Ingress status IP/hostname when the controller + is being stopped. Default is true`) ) flags.AddGoFlagSet(flag.CommandLine) @@ -164,6 +168,7 @@ func NewIngressController(backend ingress.Controller) *GenericController { PublishService: *publishSvc, Backend: backend, ForceNamespaceIsolation: *forceIsolation, + UpdateStatusOnShutdown: *UpdateStatusOnShutdown, } ic := newIngressController(config) diff --git a/core/pkg/ingress/status/status.go b/core/pkg/ingress/status/status.go index aa20b47287..dd0742c324 100644 --- a/core/pkg/ingress/status/status.go +++ b/core/pkg/ingress/status/status.go @@ -55,7 +55,10 @@ type Config struct { Client clientset.Interface PublishService string IngressLister store.IngressLister - ElectionID string + + ElectionID string + + UpdateStatusOnShutdown bool DefaultIngressClass string IngressClass string @@ -98,6 +101,11 @@ func (s statusSync) Shutdown() { return } + if !s.UpdateStatusOnShutdown { + glog.Warningf("skipping update of status of Ingress rules") + return + } + glog.Infof("updating status of Ingress rules (remove)") addrs, err := s.runningAddresess() diff --git a/core/pkg/ingress/status/status_test.go b/core/pkg/ingress/status/status_test.go index 4b97c46a94..795aca4a24 100644 --- a/core/pkg/ingress/status/status_test.go +++ b/core/pkg/ingress/status/status_test.go @@ -260,11 +260,12 @@ func TestStatusActions(t *testing.T) { os.Setenv("POD_NAME", "foo1") os.Setenv("POD_NAMESPACE", api_v1.NamespaceDefault) c := Config{ - Client: buildSimpleClientSet(), - PublishService: "", - IngressLister: buildIngressListener(), - DefaultIngressClass: "nginx", - IngressClass: "", + Client: buildSimpleClientSet(), + PublishService: "", + IngressLister: buildIngressListener(), + DefaultIngressClass: "nginx", + IngressClass: "", + UpdateStatusOnShutdown: true, } // create object fkSync := NewStatusSyncer(c)