Skip to content

Commit 2e12000

Browse files
authored
Add an option for tasks to mutate the State object (#2528)
Signed-off-by: Marko Mudrinić <[email protected]> Signed-off-by: Marko Mudrinić <[email protected]>
1 parent 5a489d6 commit 2e12000

File tree

3 files changed

+37
-12
lines changed

3 files changed

+37
-12
lines changed

pkg/state/task.go

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,14 @@ func (s *State) runTask(node *kubeoneapi.HostConfig, task NodeTask) error {
5454
return fail.Runtime(task(s, node, conn), "")
5555
}
5656

57+
type stateMutatorFn func(original *State, tmp *State)
58+
5759
// RunTaskOnNodes runs the given task on the given selection of hosts.
58-
func (s *State) RunTaskOnNodes(nodes []kubeoneapi.HostConfig, task NodeTask, parallel RunModeEnum) error {
60+
func (s *State) RunTaskOnNodes(nodes []kubeoneapi.HostConfig, task NodeTask, parallel RunModeEnum, stateMutator stateMutatorFn) error {
5961
var (
60-
errorsLock sync.Mutex
61-
aggregateErrs []error
62+
stateMutatorLock sync.Mutex
63+
errorsLock sync.Mutex
64+
aggregateErrs []error
6265
)
6366

6467
wg := sync.WaitGroup{}
@@ -79,6 +82,12 @@ func (s *State) RunTaskOnNodes(nodes []kubeoneapi.HostConfig, task NodeTask, par
7982
aggregateErrs = append(aggregateErrs, fail.Runtime(err, "running task on %q", node.PublicAddress))
8083
}
8184

85+
if stateMutator != nil {
86+
stateMutatorLock.Lock()
87+
stateMutator(s, ctx)
88+
stateMutatorLock.Unlock()
89+
}
90+
8291
wg.Done()
8392
}(ctx, &nodes[i])
8493
} else {
@@ -88,6 +97,10 @@ func (s *State) RunTaskOnNodes(nodes []kubeoneapi.HostConfig, task NodeTask, par
8897

8998
break
9099
}
100+
101+
if stateMutator != nil {
102+
stateMutator(s, ctx)
103+
}
91104
}
92105
}
93106

@@ -116,6 +129,16 @@ func (s *State) RunTaskOnAllNodes(task NodeTask, parallel RunModeEnum) error {
116129

117130
// RunTaskOnLeader runs the given task on the leader host.
118131
func (s *State) RunTaskOnLeader(task NodeTask) error {
132+
return s.runTaskOnLeader(task, nil)
133+
}
134+
135+
// RunTaskOnLeaderWithMutator runs the given task on the leader host with a state mutator function.
136+
func (s *State) RunTaskOnLeaderWithMutator(task NodeTask, stateMutator stateMutatorFn) error {
137+
return s.runTaskOnLeader(task, stateMutator)
138+
}
139+
140+
// RunTaskOnLeader runs the given task on the leader host.
141+
func (s *State) runTaskOnLeader(task NodeTask, stateMutator stateMutatorFn) error {
119142
leader, err := s.Cluster.Leader()
120143
if err != nil {
121144
return err
@@ -125,18 +148,18 @@ func (s *State) RunTaskOnLeader(task NodeTask) error {
125148
leader,
126149
}
127150

128-
return s.RunTaskOnNodes(hosts, task, false)
151+
return s.RunTaskOnNodes(hosts, task, false, stateMutator)
129152
}
130153

131154
// RunTaskOnFollowers runs the given task on the follower hosts.
132155
func (s *State) RunTaskOnFollowers(task NodeTask, parallel RunModeEnum) error {
133-
return s.RunTaskOnNodes(s.Cluster.Followers(), task, parallel)
156+
return s.RunTaskOnNodes(s.Cluster.Followers(), task, parallel, nil)
134157
}
135158

136159
func (s *State) RunTaskOnControlPlane(task NodeTask, parallel RunModeEnum) error {
137-
return s.RunTaskOnNodes(s.Cluster.ControlPlane.Hosts, task, parallel)
160+
return s.RunTaskOnNodes(s.Cluster.ControlPlane.Hosts, task, parallel, nil)
138161
}
139162

140163
func (s *State) RunTaskOnStaticWorkers(task NodeTask, parallel RunModeEnum) error {
141-
return s.RunTaskOnNodes(s.Cluster.StaticWorkers.Hosts, task, parallel)
164+
return s.RunTaskOnNodes(s.Cluster.StaticWorkers.Hosts, task, parallel, nil)
142165
}

pkg/tasks/kubeadm_config.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,11 @@ import (
2828
)
2929

3030
func determinePauseImage(s *state.State) error {
31-
if rc := s.Cluster.RegistryConfiguration; rc == nil || rc.OverwriteRegistry == "" {
32-
return nil
33-
}
34-
3531
s.Logger.Infoln("Determining Kubernetes pause image...")
3632

37-
return s.RunTaskOnLeader(determinePauseImageExecutor)
33+
return s.RunTaskOnLeaderWithMutator(determinePauseImageExecutor, func(original *state.State, tmp *state.State) {
34+
original.PauseImage = tmp.PauseImage
35+
})
3836
}
3937

4038
func determinePauseImageExecutor(s *state.State, node *kubeoneapi.HostConfig, conn executor.Interface) error {

pkg/tasks/tasks.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,10 @@ func WithResources(t Tasks) Tasks {
213213
return s.Cluster.CABundle != ""
214214
},
215215
},
216+
{
217+
Fn: determinePauseImage,
218+
Operation: "determining the pause image",
219+
},
216220
{
217221
Fn: patchStaticPods,
218222
Operation: "patching static pods",

0 commit comments

Comments
 (0)