From c3904bbce6d9099720abe56331753c7f70036931 Mon Sep 17 00:00:00 2001 From: Yassine TIJANI Date: Fri, 14 Jun 2019 16:06:01 +0200 Subject: [PATCH] move initsystem to kubeadm Signed-off-by: Yassine TIJANI --- cmd/kubeadm/.import-restrictions | 1 - cmd/kubeadm/app/cmd/phases/reset/BUILD | 2 +- cmd/kubeadm/app/cmd/phases/reset/cleanupnode.go | 2 +- cmd/kubeadm/app/phases/kubelet/BUILD | 2 +- cmd/kubeadm/app/phases/kubelet/kubelet.go | 2 +- cmd/kubeadm/app/preflight/BUILD | 2 +- cmd/kubeadm/app/preflight/checks.go | 2 +- cmd/kubeadm/app/util/BUILD | 1 + {pkg => cmd/kubeadm/app}/util/initsystem/BUILD | 2 +- .../kubeadm/app}/util/initsystem/initsystem.go | 1 + .../app}/util/initsystem/initsystem_unix.go | 16 ++++++++++++++++ .../app}/util/initsystem/initsystem_windows.go | 7 +++++++ hack/.golint_failures | 1 - pkg/util/BUILD | 1 - 14 files changed, 32 insertions(+), 10 deletions(-) rename {pkg => cmd/kubeadm/app}/util/initsystem/BUILD (91%) rename {pkg => cmd/kubeadm/app}/util/initsystem/initsystem.go (94%) rename {pkg => cmd/kubeadm/app}/util/initsystem/initsystem_unix.go (83%) rename {pkg => cmd/kubeadm/app}/util/initsystem/initsystem_windows.go (92%) diff --git a/cmd/kubeadm/.import-restrictions b/cmd/kubeadm/.import-restrictions index a8e7f8f77c9..5380cfc5771 100644 --- a/cmd/kubeadm/.import-restrictions +++ b/cmd/kubeadm/.import-restrictions @@ -78,7 +78,6 @@ "k8s.io/kubernetes/pkg/util/conntrack", "k8s.io/kubernetes/pkg/util/dbus", "k8s.io/kubernetes/pkg/util/hash", - "k8s.io/kubernetes/pkg/util/initsystem", "k8s.io/kubernetes/pkg/util/ipset", "k8s.io/kubernetes/pkg/util/iptables", "k8s.io/kubernetes/pkg/util/ipvs", diff --git a/cmd/kubeadm/app/cmd/phases/reset/BUILD b/cmd/kubeadm/app/cmd/phases/reset/BUILD index 817c8d875f9..ab185270034 100644 --- a/cmd/kubeadm/app/cmd/phases/reset/BUILD +++ b/cmd/kubeadm/app/cmd/phases/reset/BUILD @@ -20,9 +20,9 @@ go_library( "//cmd/kubeadm/app/phases/etcd:go_default_library", "//cmd/kubeadm/app/phases/uploadconfig:go_default_library", "//cmd/kubeadm/app/preflight:go_default_library", + "//cmd/kubeadm/app/util/initsystem:go_default_library", "//cmd/kubeadm/app/util/runtime:go_default_library", "//cmd/kubeadm/app/util/staticpod:go_default_library", - "//pkg/util/initsystem:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/klog:go_default_library", diff --git a/cmd/kubeadm/app/cmd/phases/reset/cleanupnode.go b/cmd/kubeadm/app/cmd/phases/reset/cleanupnode.go index 5b964d57e18..3c880da1f3b 100644 --- a/cmd/kubeadm/app/cmd/phases/reset/cleanupnode.go +++ b/cmd/kubeadm/app/cmd/phases/reset/cleanupnode.go @@ -28,8 +28,8 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" + "k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem" utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime" - "k8s.io/kubernetes/pkg/util/initsystem" utilsexec "k8s.io/utils/exec" ) diff --git a/cmd/kubeadm/app/phases/kubelet/BUILD b/cmd/kubeadm/app/phases/kubelet/BUILD index a200a4c1b36..e1aed46e89d 100644 --- a/cmd/kubeadm/app/phases/kubelet/BUILD +++ b/cmd/kubeadm/app/phases/kubelet/BUILD @@ -17,8 +17,8 @@ go_library( "//cmd/kubeadm/app/images:go_default_library", "//cmd/kubeadm/app/util:go_default_library", "//cmd/kubeadm/app/util/apiclient:go_default_library", + "//cmd/kubeadm/app/util/initsystem:go_default_library", "//pkg/kubelet/apis/config:go_default_library", - "//pkg/util/initsystem:go_default_library", "//pkg/util/node:go_default_library", "//pkg/util/procfs:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", diff --git a/cmd/kubeadm/app/phases/kubelet/kubelet.go b/cmd/kubeadm/app/phases/kubelet/kubelet.go index fec35358d5a..66a0c415660 100644 --- a/cmd/kubeadm/app/phases/kubelet/kubelet.go +++ b/cmd/kubeadm/app/phases/kubelet/kubelet.go @@ -19,7 +19,7 @@ package kubelet import ( "fmt" - "k8s.io/kubernetes/pkg/util/initsystem" + "k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem" ) // TryStartKubelet attempts to bring up kubelet service diff --git a/cmd/kubeadm/app/preflight/BUILD b/cmd/kubeadm/app/preflight/BUILD index f1841b3b79e..f17dcd2ec81 100644 --- a/cmd/kubeadm/app/preflight/BUILD +++ b/cmd/kubeadm/app/preflight/BUILD @@ -21,11 +21,11 @@ go_library( "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/images:go_default_library", + "//cmd/kubeadm/app/util/initsystem:go_default_library", "//cmd/kubeadm/app/util/runtime:go_default_library", "//cmd/kubeadm/app/util/system:go_default_library", "//pkg/master/ports:go_default_library", "//pkg/registry/core/service/ipallocator:go_default_library", - "//pkg/util/initsystem:go_default_library", "//pkg/util/ipvs:go_default_library", "//pkg/version:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", diff --git a/cmd/kubeadm/app/preflight/checks.go b/cmd/kubeadm/app/preflight/checks.go index 5b6448e63f9..9bd1b0db8b5 100644 --- a/cmd/kubeadm/app/preflight/checks.go +++ b/cmd/kubeadm/app/preflight/checks.go @@ -44,11 +44,11 @@ import ( kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/images" + "k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem" utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime" "k8s.io/kubernetes/cmd/kubeadm/app/util/system" "k8s.io/kubernetes/pkg/master/ports" "k8s.io/kubernetes/pkg/registry/core/service/ipallocator" - "k8s.io/kubernetes/pkg/util/initsystem" ipvsutil "k8s.io/kubernetes/pkg/util/ipvs" kubeadmversion "k8s.io/kubernetes/pkg/version" utilsexec "k8s.io/utils/exec" diff --git a/cmd/kubeadm/app/util/BUILD b/cmd/kubeadm/app/util/BUILD index a4de2a1f7a7..ad7cbc62531 100644 --- a/cmd/kubeadm/app/util/BUILD +++ b/cmd/kubeadm/app/util/BUILD @@ -84,6 +84,7 @@ filegroup( "//cmd/kubeadm/app/util/crypto:all-srcs", "//cmd/kubeadm/app/util/dryrun:all-srcs", "//cmd/kubeadm/app/util/etcd:all-srcs", + "//cmd/kubeadm/app/util/initsystem:all-srcs", "//cmd/kubeadm/app/util/kubeconfig:all-srcs", "//cmd/kubeadm/app/util/pkiutil:all-srcs", "//cmd/kubeadm/app/util/pubkeypin:all-srcs", diff --git a/pkg/util/initsystem/BUILD b/cmd/kubeadm/app/util/initsystem/BUILD similarity index 91% rename from pkg/util/initsystem/BUILD rename to cmd/kubeadm/app/util/initsystem/BUILD index 30ab9be3e18..8ddbd5a67be 100644 --- a/pkg/util/initsystem/BUILD +++ b/cmd/kubeadm/app/util/initsystem/BUILD @@ -12,7 +12,7 @@ go_library( "initsystem_unix.go", "initsystem_windows.go", ], - importpath = "k8s.io/kubernetes/pkg/util/initsystem", + importpath = "k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem", deps = select({ "@io_bazel_rules_go//go/platform:windows": [ "//vendor/golang.org/x/sys/windows/svc:go_default_library", diff --git a/pkg/util/initsystem/initsystem.go b/cmd/kubeadm/app/util/initsystem/initsystem.go similarity index 94% rename from pkg/util/initsystem/initsystem.go rename to cmd/kubeadm/app/util/initsystem/initsystem.go index 49266c74f90..48e152f0a9b 100644 --- a/pkg/util/initsystem/initsystem.go +++ b/cmd/kubeadm/app/util/initsystem/initsystem.go @@ -16,6 +16,7 @@ limitations under the License. package initsystem +// InitSystem is the interface that describe behaviors of an init system type InitSystem interface { // return a string describing how to enable a service EnableCommand(service string) string diff --git a/pkg/util/initsystem/initsystem_unix.go b/cmd/kubeadm/app/util/initsystem/initsystem_unix.go similarity index 83% rename from pkg/util/initsystem/initsystem_unix.go rename to cmd/kubeadm/app/util/initsystem/initsystem_unix.go index b6c2f45c9cf..73a133a4441 100644 --- a/pkg/util/initsystem/initsystem_unix.go +++ b/cmd/kubeadm/app/util/initsystem/initsystem_unix.go @@ -24,23 +24,28 @@ import ( "strings" ) +// OpenRCInitSystem defines openrc type OpenRCInitSystem struct{} +// ServiceStart tries to start a specific service func (openrc OpenRCInitSystem) ServiceStart(service string) error { args := []string{service, "start"} return exec.Command("rc-service", args...).Run() } +// ServiceStop tries to stop a specific service func (openrc OpenRCInitSystem) ServiceStop(service string) error { args := []string{service, "stop"} return exec.Command("rc-service", args...).Run() } +// ServiceRestart tries to reload the environment and restart the specific service func (openrc OpenRCInitSystem) ServiceRestart(service string) error { args := []string{service, "restart"} return exec.Command("rc-service", args...).Run() } +// ServiceExists ensures the service is defined for this init system. // openrc writes to stderr if a service is not found or not enabled // this is in contrast to systemd which only writes to stdout. // Hence, we use the Combinedoutput, and ignore the error. @@ -53,6 +58,7 @@ func (openrc OpenRCInitSystem) ServiceExists(service string) bool { return true } +// ServiceIsEnabled ensures the service is enabled to start on each boot. func (openrc OpenRCInitSystem) ServiceIsEnabled(service string) bool { args := []string{"show", "default"} outBytes, _ := exec.Command("rc-update", args...).Output() @@ -62,6 +68,7 @@ func (openrc OpenRCInitSystem) ServiceIsEnabled(service string) bool { return false } +// ServiceIsActive ensures the service is running, or attempting to run. (crash looping in the case of kubelet) func (openrc OpenRCInitSystem) ServiceIsActive(service string) bool { args := []string{service, "status"} outBytes, _ := exec.Command("rc-service", args...).Output() @@ -71,16 +78,20 @@ func (openrc OpenRCInitSystem) ServiceIsActive(service string) bool { return true } +// EnableCommand return a string describing how to enable a service func (openrc OpenRCInitSystem) EnableCommand(service string) string { return fmt.Sprintf("rc-update add %s default", service) } +// SystemdInitSystem defines systemd type SystemdInitSystem struct{} +// EnableCommand return a string describing how to enable a service func (sysd SystemdInitSystem) EnableCommand(service string) string { return fmt.Sprintf("systemctl enable %s.service", service) } +// reloadSystemd reloeads the systemd daemon func (sysd SystemdInitSystem) reloadSystemd() error { if err := exec.Command("systemctl", "daemon-reload").Run(); err != nil { return fmt.Errorf("failed to reload systemd: %v", err) @@ -88,6 +99,7 @@ func (sysd SystemdInitSystem) reloadSystemd() error { return nil } +// ServiceStart tries to start a specific service func (sysd SystemdInitSystem) ServiceStart(service string) error { // Before we try to start any service, make sure that systemd is ready if err := sysd.reloadSystemd(); err != nil { @@ -97,6 +109,7 @@ func (sysd SystemdInitSystem) ServiceStart(service string) error { return exec.Command("systemctl", args...).Run() } +// ServiceRestart tries to reload the environment and restart the specific service func (sysd SystemdInitSystem) ServiceRestart(service string) error { // Before we try to restart any service, make sure that systemd is ready if err := sysd.reloadSystemd(); err != nil { @@ -106,11 +119,13 @@ func (sysd SystemdInitSystem) ServiceRestart(service string) error { return exec.Command("systemctl", args...).Run() } +// ServiceStop tries to stop a specific service func (sysd SystemdInitSystem) ServiceStop(service string) error { args := []string{"stop", service} return exec.Command("systemctl", args...).Run() } +// ServiceExists ensures the service is defined for this init system. func (sysd SystemdInitSystem) ServiceExists(service string) bool { args := []string{"status", service} outBytes, _ := exec.Command("systemctl", args...).Output() @@ -121,6 +136,7 @@ func (sysd SystemdInitSystem) ServiceExists(service string) bool { return true } +// ServiceIsEnabled ensures the service is enabled to start on each boot. func (sysd SystemdInitSystem) ServiceIsEnabled(service string) bool { args := []string{"is-enabled", service} err := exec.Command("systemctl", args...).Run() diff --git a/pkg/util/initsystem/initsystem_windows.go b/cmd/kubeadm/app/util/initsystem/initsystem_windows.go similarity index 92% rename from pkg/util/initsystem/initsystem_windows.go rename to cmd/kubeadm/app/util/initsystem/initsystem_windows.go index ca819450ad9..394272ddcb3 100644 --- a/pkg/util/initsystem/initsystem_windows.go +++ b/cmd/kubeadm/app/util/initsystem/initsystem_windows.go @@ -29,10 +29,12 @@ import ( // WindowsInitSystem is the windows implementation of InitSystem type WindowsInitSystem struct{} +// EnableCommand return a string describing how to enable a service func (sysd WindowsInitSystem) EnableCommand(service string) string { return fmt.Sprintf("Set-Service '%s' -StartupType Automatic", service) } +// ServiceStart tries to start a specific service // Following Windows documentation: https://docs.microsoft.com/en-us/windows/desktop/Services/starting-a-service func (sysd WindowsInitSystem) ServiceStart(service string) error { m, err := mgr.Connect() @@ -94,6 +96,7 @@ func (sysd WindowsInitSystem) ServiceStart(service string) error { return nil } +// ServiceRestart tries to reload the environment and restart the specific service func (sysd WindowsInitSystem) ServiceRestart(service string) error { if err := sysd.ServiceStop(service); err != nil { return fmt.Errorf("couldn't stop service %s: %v", service, err) @@ -105,6 +108,7 @@ func (sysd WindowsInitSystem) ServiceRestart(service string) error { return nil } +// ServiceStop tries to stop a specific service // Following Windows documentation: https://docs.microsoft.com/en-us/windows/desktop/Services/stopping-a-service func (sysd WindowsInitSystem) ServiceStop(service string) error { m, err := mgr.Connect() @@ -170,6 +174,7 @@ func (sysd WindowsInitSystem) ServiceStop(service string) error { return nil } +// ServiceExists ensures the service is defined for this init system. func (sysd WindowsInitSystem) ServiceExists(service string) bool { m, err := mgr.Connect() if err != nil { @@ -185,6 +190,7 @@ func (sysd WindowsInitSystem) ServiceExists(service string) bool { return true } +// ServiceIsEnabled ensures the service is enabled to start on each boot. func (sysd WindowsInitSystem) ServiceIsEnabled(service string) bool { m, err := mgr.Connect() if err != nil { @@ -206,6 +212,7 @@ func (sysd WindowsInitSystem) ServiceIsEnabled(service string) bool { return c.StartType != mgr.StartDisabled } +// ServiceIsActive ensures the service is running, or attempting to run. (crash looping in the case of kubelet) func (sysd WindowsInitSystem) ServiceIsActive(service string) bool { m, err := mgr.Connect() if err != nil { diff --git a/hack/.golint_failures b/hack/.golint_failures index 47574f6b5ca..8469ff3f03f 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -284,7 +284,6 @@ pkg/util/config pkg/util/ebtables pkg/util/env pkg/util/goroutinemap/exponentialbackoff -pkg/util/initsystem pkg/util/iptables pkg/util/iptables/testing pkg/util/labels diff --git a/pkg/util/BUILD b/pkg/util/BUILD index 9198cdad66e..e2c8701ff45 100644 --- a/pkg/util/BUILD +++ b/pkg/util/BUILD @@ -25,7 +25,6 @@ filegroup( "//pkg/util/flock:all-srcs", "//pkg/util/goroutinemap:all-srcs", "//pkg/util/hash:all-srcs", - "//pkg/util/initsystem:all-srcs", "//pkg/util/interrupt:all-srcs", "//pkg/util/ipconfig:all-srcs", "//pkg/util/ipset:all-srcs",