@@ -259,7 +259,11 @@ func (config ConfigLXC) Update(ctx context.Context, allowRestart bool, vmr *VmRe
259259 if err := config .Validate (current ); err != nil {
260260 return err
261261 }
262- return config .update_Unsafe (ctx , allowRestart , vmr , current , rawStatus .GetState (), c )
262+ version , err := c .Version (ctx )
263+ if err != nil {
264+ return err
265+ }
266+ return config .update_Unsafe (ctx , allowRestart , vmr , current , rawStatus .GetState (), version .Encode (), c )
263267}
264268
265269func (config ConfigLXC ) UpdateNoCheck (ctx context.Context , allowRestart bool , vmr * VmRef , c * Client ) error {
@@ -277,7 +281,11 @@ func (config ConfigLXC) UpdateNoCheck(ctx context.Context, allowRestart bool, vm
277281 if err != nil {
278282 return err
279283 }
280- return config .update_Unsafe (ctx , allowRestart , vmr , raw .get (* vmr ), rawStatus .GetState (), c )
284+ version , err := c .Version (ctx )
285+ if err != nil {
286+ return err
287+ }
288+ return config .update_Unsafe (ctx , allowRestart , vmr , raw .get (* vmr ), rawStatus .GetState (), version .Encode (), c )
281289}
282290
283291func (config ConfigLXC ) update_Unsafe (
@@ -286,6 +294,7 @@ func (config ConfigLXC) update_Unsafe(
286294 vmr * VmRef ,
287295 current * ConfigLXC ,
288296 currentState PowerState ,
297+ version EncodedVersion ,
289298 c * Client ) error {
290299
291300 ca := c .new ().apiGet ()
@@ -313,11 +322,12 @@ func (config ConfigLXC) update_Unsafe(
313322 requiresOffStateForMountActions = markedMounts .offState
314323 }
315324
325+ var err error
316326 if targetState == PowerStateStopped && currentState != PowerStateStopped { // We want the vm to be stopped, better to do this before we start making other api calls
317327 if ! allowRestart {
318328 return errors .New ("guest has to be stopped before applying changes" )
319329 }
320- if _ , err : = c .ShutdownVm (ctx , vmr ); err != nil {
330+ if _ , err = c .ShutdownVm (ctx , vmr ); err != nil {
321331 return err
322332 }
323333 currentState = PowerStateStopped // We assume the guest is stopped now
@@ -328,7 +338,7 @@ func (config ConfigLXC) update_Unsafe(
328338 if ! allowRestart {
329339 return errors .New ("guest has to be stopped before moving disks" )
330340 }
331- if err : = GuestShutdown (ctx , vmr , c , true ); err != nil { // We have to stop the guest before moving disks
341+ if err = GuestShutdown (ctx , vmr , c , true ); err != nil { // We have to stop the guest before moving disks
332342 return err
333343 }
334344 currentState = PowerStateStopped // We assume the guest is stopped now
@@ -338,18 +348,19 @@ func (config ConfigLXC) update_Unsafe(
338348 if len (resize ) > 0 || len (move ) > 0 {
339349
340350 for i := range move { // Move mounts
341- if _ , err : = move [i ].move (ctx , true , vmr , c ); err != nil {
351+ if _ , err = move [i ].move (ctx , true , vmr , c ); err != nil {
342352 return err
343353 }
344354 }
345355
346356 for i := range resize { // Resize mounts
347- if _ , err : = resize [i ].resize (ctx , vmr , c ); err != nil {
357+ if _ , err = resize [i ].resize (ctx , vmr , c ); err != nil {
348358 return err
349359 }
350360 }
351361
352- newCurrent , err := c .new ().guestGetLxcRawConfig (ctx , vmr ) // We have to refetch part of the current config
362+ var newCurrent RawConfigLXC
363+ newCurrent , err = c .new ().guestGetLxcRawConfig (ctx , vmr ) // We have to refetch part of the current config
353364 if err != nil {
354365 return err
355366 }
@@ -366,11 +377,12 @@ func (config ConfigLXC) update_Unsafe(
366377 }
367378
368379 if params := config .mapToApiUpdate (* current ); len (params ) > 0 {
369- if err : = c .Put (ctx , params , url + "/config" ); err != nil {
380+ if err = c .Put (ctx , params , url + "/config" ); err != nil {
370381 return err
371382 }
372383 if currentState == PowerStateRunning || currentState == PowerStateUnknown { // If the guest is running, we have to check if it has pending changes
373- pendingChanges , err := vmr .pendingChanges (ctx , ca )
384+ var pendingChanges bool
385+ pendingChanges , err = vmr .pendingChanges (ctx , ca )
374386 if err != nil {
375387 return fmt .Errorf ("error checking for pending changes: %w" , err )
376388 }
@@ -379,19 +391,22 @@ func (config ConfigLXC) update_Unsafe(
379391 // TODO revert pending changes
380392 return errors .New ("guest has to be restarted to apply changes" )
381393 }
382- if err : = GuestReboot (ctx , vmr , c ); err != nil {
394+ if err = GuestReboot (ctx , vmr , c ); err != nil {
383395 return fmt .Errorf ("error restarting guest: %w" , err )
384396 }
385397 currentState = PowerStateRunning // We assume the guest is running now
386398 }
387399 }
388400 }
389401 if currentState != PowerStateRunning && targetState == PowerStateRunning { // We want the guest to be running, so we start it now
390- if err : = GuestStart (ctx , vmr , c ); err != nil {
402+ if err = GuestStart (ctx , vmr , c ); err != nil {
391403 return err
392404 }
393405 }
394- return nil
406+ if config .Pool != nil {
407+ err = guestSetPoolNoCheck (ctx , c , vmr .vmId , * config .Pool , current .Pool , version )
408+ }
409+ return err
395410}
396411
397412func (config ConfigLXC ) Validate (current * ConfigLXC ) (err error ) {
0 commit comments