forked from alpinelinux/aports
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
testing/kubernetes: add openrc support
- Loading branch information
Showing
2 changed files
with
112 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 { |