@@ -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
3741var 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+
287341func init () {
288342 AddonsCmd .AddCommand (addonsConfigureCmd )
289343}
0 commit comments