Skip to content

Commit 8cfb0e8

Browse files
auto-pause: restart service after configuration
1 parent 4957e70 commit 8cfb0e8

File tree

2 files changed

+67
-8
lines changed

2 files changed

+67
-8
lines changed

cmd/minikube/cmd/config/configure.go

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,17 @@ import (
2525
"github.com/spf13/cobra"
2626
"k8s.io/minikube/pkg/addons"
2727
"k8s.io/minikube/pkg/minikube/assets"
28+
"k8s.io/minikube/pkg/minikube/cluster"
2829
"k8s.io/minikube/pkg/minikube/config"
30+
"k8s.io/minikube/pkg/minikube/cruntime"
2931
"k8s.io/minikube/pkg/minikube/exit"
32+
"k8s.io/minikube/pkg/minikube/machine"
3033
"k8s.io/minikube/pkg/minikube/mustload"
3134
"k8s.io/minikube/pkg/minikube/out"
3235
"k8s.io/minikube/pkg/minikube/reason"
3336
"k8s.io/minikube/pkg/minikube/service"
3437
"k8s.io/minikube/pkg/minikube/style"
38+
"k8s.io/minikube/pkg/minikube/sysinit"
3539
)
3640

3741
var posResponses = []string{"yes", "y"}
@@ -255,7 +259,7 @@ var addonsConfigureCmd = &cobra.Command{
255259
}
256260
}
257261
case "auto-pause":
258-
_, cfg := mustload.Partial(profile)
262+
lapi, cfg := mustload.Partial(profile)
259263
intervalInput := AskForStaticValue("-- Enter interval time of auto-pause-interval (ex. 1m0s): ")
260264
intervalTime, err := time.ParseDuration(intervalInput)
261265
if err != nil {
@@ -270,9 +274,25 @@ var addonsConfigureCmd = &cobra.Command{
270274
}
271275
addon := assets.Addons["auto-pause"]
272276
if addon.IsEnabled(cfg) {
273-
// Re-enable auto-pause addon in order to update interval time
274-
if err := addons.EnableOrDisableAddon(cfg, "auto-pause", "true"); err != nil {
275-
out.ErrT(style.Fatal, "Failed to configure auto-pause {{.profile}}", out.V{"profile": profile})
277+
278+
// see #17945: restart auto-pause service
279+
p, err := config.LoadProfile(profile)
280+
if err != nil {
281+
out.ErrT(style.Fatal, "failed to load profile: {{.error}}", out.V{"error": err})
282+
}
283+
if profileStatus(p, lapi).StatusCode/100 == 2 { // 2xx code
284+
co := mustload.Running(profile)
285+
// first unpause all nodes cluster immediately
286+
unpauseWholeCluster(co)
287+
// Re-enable auto-pause addon in order to update interval time
288+
if err := addons.EnableOrDisableAddon(cfg, "auto-pause", "true"); err != nil {
289+
out.ErrT(style.Fatal, "Failed to configure auto-pause {{.profile}}", out.V{"profile": profile})
290+
}
291+
// restart auto-pause service
292+
if err := sysinit.New(co.CP.Runner).Restart("auto-pause"); err != nil {
293+
out.ErrT(style.Fatal, "failed to restart auto-pause: {{.error}}", out.V{"error": err})
294+
}
295+
276296
}
277297
}
278298
default:
@@ -284,6 +304,40 @@ var addonsConfigureCmd = &cobra.Command{
284304
},
285305
}
286306

307+
func unpauseWholeCluster(co mustload.ClusterController) {
308+
for _, n := range co.Config.Nodes {
309+
310+
// Use node-name if available, falling back to cluster name
311+
name := n.Name
312+
if n.Name == "" {
313+
name = co.Config.Name
314+
}
315+
316+
out.Step(style.Pause, "Unpausing node {{.name}} ... ", out.V{"name": name})
317+
318+
machineName := config.MachineName(*co.Config, n)
319+
host, err := machine.LoadHost(co.API, machineName)
320+
if err != nil {
321+
exit.Error(reason.GuestLoadHost, "Error getting host", err)
322+
}
323+
324+
r, err := machine.CommandRunner(host)
325+
if err != nil {
326+
exit.Error(reason.InternalCommandRunner, "Failed to get command runner", err)
327+
}
328+
329+
cr, err := cruntime.New(cruntime.Config{Type: co.Config.KubernetesConfig.ContainerRuntime, Runner: r})
330+
if err != nil {
331+
exit.Error(reason.InternalNewRuntime, "Failed runtime", err)
332+
}
333+
334+
_, err = cluster.Unpause(cr, r, nil) // nil means all namespaces
335+
if err != nil {
336+
exit.Error(reason.GuestUnpause, "Pause", err)
337+
}
338+
}
339+
}
340+
287341
func init() {
288342
AddonsCmd.AddCommand(addonsConfigureCmd)
289343
}

cmd/minikube/cmd/config/profile_list.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,23 +104,28 @@ func updateProfilesStatus(profiles []*config.Profile) {
104104
defer api.Close()
105105

106106
for _, p := range profiles {
107-
p.Status = profileStatus(p, api)
107+
p.Status = profileStatus(p, api).StatusName
108108
}
109109
}
110110

111-
func profileStatus(p *config.Profile, api libmachine.API) string {
111+
func profileStatus(p *config.Profile, api libmachine.API) cluster.State {
112112
cps := config.ControlPlanes(*p.Config)
113113
if len(cps) == 0 {
114114
exit.Message(reason.GuestCpConfig, "No control-plane nodes found.")
115115
}
116116
statuses, err := cluster.GetStatus(api, p.Config)
117117
if err != nil {
118118
klog.Errorf("error getting statuses: %v", err)
119-
return "Unknown"
119+
return cluster.State{
120+
BaseState: cluster.BaseState{
121+
Name: "Unknown",
122+
StatusCode: 520,
123+
},
124+
}
120125
}
121126
clusterStatus := cluster.GetState(statuses, ClusterFlagValue(), p.Config)
122127

123-
return clusterStatus.StatusName
128+
return clusterStatus
124129
}
125130

126131
func renderProfilesTable(ps [][]string) {

0 commit comments

Comments
 (0)