Skip to content

Commit

Permalink
testing/kubernetes: add openrc support
Browse files Browse the repository at this point in the history
  • Loading branch information
TBK authored and liske committed Apr 7, 2019
1 parent 1171a7b commit c8941b2
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 0 deletions.
2 changes: 2 additions & 0 deletions testing/kubernetes/APKBUILD
Expand Up @@ -17,6 +17,7 @@ source="$pkgname-$pkgver.tar.gz::https://github.com/kubernetes/kubernetes/archiv
make-e2e_node-run-over-distro-bins.patch
make-test-cmd-run-over-hyperkube-based-kubectl.patch
remove-apiserver-add-kube-prefix-for-hyperkube.patch
add-openrc-support.patch
"

build() {
Expand Down Expand Up @@ -45,3 +46,4 @@ b7710dfe8a80f495e5eeb1d35d03179466bff4a3208d70591d1a9896709ec7383d17314d58eefc6c
06e3e8626b70077eb693da9c53dca3bc566aea4590a27c5dd3997b6d34abec5bf5d749b7be94b60b83361884c29b3a6dbb56c40b18c008b19e7cbd6e0d5c87e6 make-e2e_node-run-over-distro-bins.patch
cf6d9a5e873603462f0b8de60d3c72b10cbe68175f621f814cb5a85c11cb18f408639181227dfae6718671109cd198ef8720ee15a7d4132bba691bbd7224860f make-test-cmd-run-over-hyperkube-based-kubectl.patch
f60cb7006b85cac00b0f18f87cc9196541e359a82ba37b3e0938d5e9a6e178ef964df0695fff3135d4a6cc4f4d91e963bd184e3af140c7c1072735890ff4351d remove-apiserver-add-kube-prefix-for-hyperkube.patch"
8aec0a1cda24fcd7001e34ff6163aee7eaf679dea953068b58df3578c016f70e1406903e032a51519bc16ac0dbe583159d1cf4d504adbb2930d811cc2f762cfe add-openrc-support.patch"
110 changes: 110 additions & 0 deletions testing/kubernetes/add-openrc-support.patch
@@ -0,0 +1,110 @@
Needed for OpenRC support until https://github.com/kubernetes/kubernetes/pull/73101 is merged.

Brought to attention by https://bugs.alpinelinux.org/issues/10179

---------------------------------
--- a/pkg/util/initsystem/initsystem.go
+++ b/pkg/util/initsystem/initsystem.go
@@ -1,5 +1,5 @@
/*
-Copyright 2016 The Kubernetes Authors.
+Copyright 2019 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -23,6 +23,9 @@
)

type InitSystem interface {
+ // return a string describing how to enable a service
+ EnableCommand(service string) string
+
// ServiceStart tries to start a specific service
ServiceStart(service string) error

@@ -42,8 +45,63 @@
ServiceIsActive(service string) bool
}

+type OpenRCInitSystem struct{}
+
+func (openrc OpenRCInitSystem) ServiceStart(service string) error {
+ args := []string{service, "start"}
+ return exec.Command("rc-service", args...).Run()
+}
+
+func (openrc OpenRCInitSystem) ServiceStop(service string) error {
+ args := []string{service, "stop"}
+ return exec.Command("rc-service", args...).Run()
+}
+
+func (openrc OpenRCInitSystem) ServiceRestart(service string) error {
+ args := []string{service, "restart"}
+ return exec.Command("rc-service", args...).Run()
+}
+
+// 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.
+func (openrc OpenRCInitSystem) ServiceExists(service string) bool {
+ args := []string{service, "status"}
+ outBytes, _ := exec.Command("rc-service", args...).CombinedOutput()
+ if strings.Contains(string(outBytes), "does not exist") {
+ return false
+ }
+ return true
+}
+
+func (openrc OpenRCInitSystem) ServiceIsEnabled(service string) bool {
+ args := []string{"show", "default"}
+ outBytes, _ := exec.Command("rc-update", args...).Output()
+ if strings.Contains(string(outBytes), service) {
+ return true
+ }
+ return false
+}
+
+func (openrc OpenRCInitSystem) ServiceIsActive(service string) bool {
+ args := []string{service, "status"}
+ outBytes, _ := exec.Command("rc-service", args...).Output()
+ if strings.Contains(string(outBytes), "stopped") {
+ return false
+ }
+ return true
+}
+
+func (openrc OpenRCInitSystem) EnableCommand(service string) string {
+ return fmt.Sprintf("rc-update add %s default", service)
+}
+
type SystemdInitSystem struct{}

+func (sysd SystemdInitSystem) EnableCommand(service string) string {
+ return fmt.Sprintf("systemctl enable %s.service", service)
+}
+
func (sysd SystemdInitSystem) reloadSystemd() error {
if err := exec.Command("systemctl", "daemon-reload").Run(); err != nil {
return fmt.Errorf("failed to reload systemd: %v", err)
@@ -110,6 +168,10 @@
// WindowsInitSystem is the windows implementation of InitSystem
type WindowsInitSystem struct{}

+func (sysd WindowsInitSystem) EnableCommand(service string) string {
+ return fmt.Sprintf("Set-Service '%s' -StartupType Automatic", service)
+}
+
func (sysd WindowsInitSystem) ServiceStart(service string) error {
args := []string{"Start-Service", service}
err := exec.Command("powershell", args...).Run()
@@ -170,6 +232,10 @@
_, err := exec.LookPath("systemctl")
if err == nil {
return &SystemdInitSystem{}, nil
+ }
+ _, err = exec.LookPath("openrc")
+ if err == nil {
+ return &OpenRCInitSystem{}, nil
}
_, err = exec.LookPath("wininit.exe")
if err == nil {

0 comments on commit c8941b2

Please sign in to comment.