@@ -38,19 +38,38 @@ func (p *Provisioner) scaleDockerByRole(
3838 return p .removeDockerNodes (ctx , clusterName , role , - delta , result )
3939}
4040
41+ // nodeResult describes a single container operation outcome.
42+ type nodeResult interface {
43+ nodeName () string
44+ nodeErr () error
45+ action () string
46+ successLog () string
47+ }
48+
4149// nodeCreationResult records the outcome of a single container creation attempt.
4250type nodeCreationResult struct {
4351 name string
4452 ip netip.Addr
4553 err error
4654}
4755
56+ func (r nodeCreationResult ) nodeName () string { return r .name }
57+ func (r nodeCreationResult ) nodeErr () error { return r .err }
58+ func (r nodeCreationResult ) action () string { return "create" }
59+
60+ func (r nodeCreationResult ) successLog () string { return fmt .Sprintf ("Added (IP: %s)" , r .ip .String ()) }
61+
4862// nodeRemovalResult records the outcome of a single container removal attempt.
4963type nodeRemovalResult struct {
5064 name string
5165 err error
5266}
5367
68+ func (r nodeRemovalResult ) nodeName () string { return r .name }
69+ func (r nodeRemovalResult ) nodeErr () error { return r .err }
70+ func (r nodeRemovalResult ) action () string { return "remove" }
71+ func (r nodeRemovalResult ) successLog () string { return "Removed" }
72+
5473// nodeSpec holds the pre-calculated name and IP for a node to be created.
5574type nodeSpec struct {
5675 name string
@@ -110,7 +129,7 @@ func (p *Provisioner) addDockerNodes(
110129 return err
111130 }
112131
113- return p .collectCreationResults (results , role , result )
132+ return p .collectResults (results , role , result )
114133}
115134
116135// preCalculateNodeSpecs determines the name and static IP for each node to be created.
@@ -143,8 +162,8 @@ func (p *Provisioner) createNodesInParallel(
143162 clusterName , role string ,
144163 specs []nodeSpec ,
145164 config talosconfig.Provider ,
146- ) ([]nodeCreationResult , error ) {
147- results := make ([]nodeCreationResult , len (specs ))
165+ ) ([]nodeResult , error ) {
166+ results := make ([]nodeResult , len (specs ))
148167
149168 group , _ := errgroup .WithContext (ctx )
150169 group .SetLimit (maxConcurrentContainerOps )
@@ -195,7 +214,7 @@ func (p *Provisioner) removeDockerNodes(
195214
196215 // Worker nodes have no etcd dependency and can be removed in parallel.
197216 toRemove := existing [len (existing )- count :]
198- results := make ([]nodeRemovalResult , len (toRemove ))
217+ results := make ([]nodeResult , len (toRemove ))
199218
200219 group , _ := errgroup .WithContext (ctx )
201220 group .SetLimit (maxConcurrentContainerOps )
@@ -219,7 +238,7 @@ func (p *Provisioner) removeDockerNodes(
219238 )
220239 }
221240
222- return p .collectRemovalResults (results , role , result )
241+ return p .collectResults (results , role , result )
223242}
224243
225244// removeControlPlaneNodesSequentially removes control-plane nodes one at a time,
@@ -258,61 +277,30 @@ func (p *Provisioner) removeControlPlaneNodesSequentially(
258277 return nil
259278}
260279
261- // collectCreationResults records creation outcomes and returns the first error encountered.
262- func (p * Provisioner ) collectCreationResults (
263- results []nodeCreationResult ,
264- role string ,
265- updateResult * clusterupdate.UpdateResult ,
266- ) error {
267- var firstErr error
268-
269- for _ , res := range results {
270- if res .err != nil {
271- recordFailedChange (updateResult , role , res .name , res .err )
272-
273- if firstErr == nil {
274- firstErr = fmt .Errorf (
275- "failed to create %s node %s: %w" ,
276- role , res .name , res .err ,
277- )
278- }
279- } else {
280- recordAppliedChange (updateResult , role , res .name , "added" )
281-
282- _ , _ = fmt .Fprintf (
283- p .logWriter , " ✓ Added %s node %s (IP: %s)\n " ,
284- role , res .name , res .ip .String (),
285- )
286- }
287- }
288-
289- return firstErr
290- }
291-
292- // collectRemovalResults records removal outcomes and returns the first error encountered.
293- func (p * Provisioner ) collectRemovalResults (
294- results []nodeRemovalResult ,
280+ // collectResults records operation outcomes and returns the first error encountered.
281+ func (p * Provisioner ) collectResults (
282+ results []nodeResult ,
295283 role string ,
296284 updateResult * clusterupdate.UpdateResult ,
297285) error {
298286 var firstErr error
299287
300288 for _ , res := range results {
301- if res .err != nil {
302- recordFailedChange (updateResult , role , res .name , res .err )
289+ if res .nodeErr () != nil {
290+ recordFailedChange (updateResult , role , res .nodeName () , res .nodeErr () )
303291
304292 if firstErr == nil {
305293 firstErr = fmt .Errorf (
306- "failed to remove %s node %s: %w" ,
307- role , res .name , res .err ,
294+ "failed to %s %s node %s: %w" ,
295+ res . action (), role , res .nodeName () , res .nodeErr () ,
308296 )
309297 }
310298 } else {
311- recordAppliedChange (updateResult , role , res .name , "removed " )
299+ recordAppliedChange (updateResult , role , res .nodeName (), res . action () + "d " )
312300
313301 _ , _ = fmt .Fprintf (
314- p .logWriter , " ✓ Removed %s node %s\n " ,
315- role , res .name ,
302+ p .logWriter , " ✓ %s %s node %s\n " ,
303+ res . successLog (), role , res .nodeName () ,
316304 )
317305 }
318306 }
0 commit comments