mirror of https://github.com/k3s-io/k3s
os exit when option is true
parent
c72a5b2c10
commit
932060ca1d
|
@ -92,6 +92,7 @@ const (
|
|||
// proxyRun defines the interface to run a specified ProxyServer
|
||||
type proxyRun interface {
|
||||
Run() error
|
||||
CleanupAndExit() error
|
||||
}
|
||||
|
||||
// Options contains everything necessary to create and run a proxy server.
|
||||
|
@ -306,6 +307,11 @@ func (o *Options) Run() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if o.CleanupAndExit {
|
||||
return proxyServer.CleanupAndExit()
|
||||
}
|
||||
|
||||
o.proxyServer = proxyServer
|
||||
return o.runLoop()
|
||||
}
|
||||
|
@ -499,7 +505,6 @@ type ProxyServer struct {
|
|||
Conntracker Conntracker // if nil, ignored
|
||||
ProxyMode string
|
||||
NodeRef *v1.ObjectReference
|
||||
CleanupAndExit bool
|
||||
CleanupIPVS bool
|
||||
MetricsBindAddress string
|
||||
EnableProfiling bool
|
||||
|
@ -551,19 +556,10 @@ func createClients(config componentbaseconfig.ClientConnectionConfiguration, mas
|
|||
}
|
||||
|
||||
// Run runs the specified ProxyServer. This should never exit (unless CleanupAndExit is set).
|
||||
// TODO: At the moment, Run() cannot return a nil error, otherwise it's caller will never exit. Update callers of Run to handle nil errors.
|
||||
func (s *ProxyServer) Run() error {
|
||||
// To help debugging, immediately log version
|
||||
klog.Infof("Version: %+v", version.Get())
|
||||
// remove iptables rules and exit
|
||||
if s.CleanupAndExit {
|
||||
encounteredError := userspace.CleanupLeftovers(s.IptInterface)
|
||||
encounteredError = iptables.CleanupLeftovers(s.IptInterface) || encounteredError
|
||||
encounteredError = ipvs.CleanupLeftovers(s.IpvsInterface, s.IptInterface, s.IpsetInterface, s.CleanupIPVS) || encounteredError
|
||||
if encounteredError {
|
||||
return errors.New("encountered an error while tearing down rules.")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// TODO(vmarmol): Use container config for this.
|
||||
var oomAdjuster *oom.OOMAdjuster
|
||||
|
@ -709,3 +705,15 @@ func getConntrackMax(config kubeproxyconfig.KubeProxyConntrackConfiguration) (in
|
|||
}
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
// CleanupAndExit remove iptables rules and exit if success return nil
|
||||
func (s *ProxyServer) CleanupAndExit() error {
|
||||
encounteredError := userspace.CleanupLeftovers(s.IptInterface)
|
||||
encounteredError = iptables.CleanupLeftovers(s.IptInterface) || encounteredError
|
||||
encounteredError = ipvs.CleanupLeftovers(s.IpvsInterface, s.IptInterface, s.IpsetInterface, s.CleanupIPVS) || encounteredError
|
||||
if encounteredError {
|
||||
return errors.New("encountered an error while tearing down rules")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -103,7 +103,6 @@ func newProxyServer(
|
|||
IptInterface: iptInterface,
|
||||
IpvsInterface: ipvsInterface,
|
||||
IpsetInterface: ipsetInterface,
|
||||
CleanupAndExit: cleanupAndExit,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
|||
package app
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
@ -108,7 +109,6 @@ func TestProxyServerWithCleanupAndExit(t *testing.T) {
|
|||
assert.Nil(t, err, "unexpected error in NewProxyServer, addr: %s", addr)
|
||||
assert.NotNil(t, proxyserver, "nil proxy server obj, addr: %s", addr)
|
||||
assert.NotNil(t, proxyserver.IptInterface, "nil iptables intf, addr: %s", addr)
|
||||
assert.True(t, proxyserver.CleanupAndExit, "false CleanupAndExit, addr: %s", addr)
|
||||
|
||||
// Clean up config for next test case
|
||||
configz.Delete(kubeproxyconfig.GroupName)
|
||||
|
@ -540,6 +540,11 @@ func (s *fakeProxyServerLongRun) Run() error {
|
|||
}
|
||||
}
|
||||
|
||||
// CleanupAndExit runs in the specified ProxyServer.
|
||||
func (s *fakeProxyServerLongRun) CleanupAndExit() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
type fakeProxyServerError struct{}
|
||||
|
||||
// Run runs the specified ProxyServer.
|
||||
|
@ -549,3 +554,8 @@ func (s *fakeProxyServerError) Run() error {
|
|||
return fmt.Errorf("mocking error from ProxyServer.Run()")
|
||||
}
|
||||
}
|
||||
|
||||
// CleanupAndExit runs in the specified ProxyServer.
|
||||
func (s *fakeProxyServerError) CleanupAndExit() error {
|
||||
return errors.New("mocking error from ProxyServer.CleanupAndExit()")
|
||||
}
|
||||
|
|
|
@ -24,6 +24,8 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
|
||||
// Enable pprof HTTP handlers.
|
||||
_ "net/http/pprof"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
|
@ -63,7 +65,7 @@ func newProxyServer(config *proxyconfigapi.KubeProxyConfiguration, cleanupAndExi
|
|||
|
||||
// We omit creation of pretty much everything if we run in cleanup mode
|
||||
if cleanupAndExit {
|
||||
return &ProxyServer{CleanupAndExit: cleanupAndExit}, nil
|
||||
return &ProxyServer{}, nil
|
||||
}
|
||||
|
||||
client, eventClient, err := createClients(config.ClientConnection, master)
|
||||
|
|
Loading…
Reference in New Issue