MCPcopy Create free account
hub / github.com/cloudbase/garm / updateInstance

Method updateInstance

database/sql/instances.go:406–472  ·  view source on GitHub ↗
(ctx context.Context, instanceName string, param params.UpdateInstanceParams, force bool)

Source from the content-addressed store, hash-verified

404}
405
406func (s *sqlDatabase) updateInstance(ctx context.Context, instanceName string, param params.UpdateInstanceParams, force bool) (params.Instance, error) {
407 var rowsAffected int64
408 err := s.conn.Transaction(func(tx *gorm.DB) error {
409 instance, err := s.getInstance(ctx, tx, instanceName, "Pool", "ScaleSet")
410 if err != nil {
411 return fmt.Errorf("error updating instance: %w", err)
412 }
413
414 if !force {
415 // Validate transitions
416 if err := s.validateAgentID(instance.AgentID, param.AgentID); err != nil {
417 return err
418 }
419
420 if err := s.validateRunnerStatusTransition(instance.RunnerStatus, param.RunnerStatus); err != nil {
421 return err
422 }
423 if err := s.validateInstanceStatusTransition(instance.Status, param.Status); err != nil {
424 return err
425 }
426 }
427
428 // Apply updates
429 if err := s.applyInstanceUpdates(&instance, param); err != nil {
430 return err
431 }
432
433 // Save instance
434 result := tx.Save(&instance)
435 if result.Error != nil {
436 return fmt.Errorf("error updating instance: %w", result.Error)
437 }
438 rowsAffected = result.RowsAffected
439
440 // Update addresses if provided
441 if len(param.Addresses) > 0 {
442 addrs := make([]Address, 0, len(param.Addresses))
443 for _, addr := range param.Addresses {
444 addrs = append(addrs, Address{
445 Address: addr.Address,
446 Type: string(addr.Type),
447 })
448 }
449 if err := tx.Model(&instance).Association("Addresses").Replace(addrs); err != nil {
450 return fmt.Errorf("error updating addresses: %w", err)
451 }
452 }
453 return nil
454 })
455 if err != nil {
456 return params.Instance{}, fmt.Errorf("error updating instance: %w", err)
457 }
458
459 instance, err := s.getInstance(ctx, s.conn, instanceName, "Pool", "ScaleSet")
460 if err != nil {
461 return params.Instance{}, fmt.Errorf("error updating instance: %w", err)
462 }
463

Callers 2

ForceUpdateInstanceMethod · 0.95
UpdateInstanceMethod · 0.95

Calls 7

getInstanceMethod · 0.95
validateAgentIDMethod · 0.95
applyInstanceUpdatesMethod · 0.95
sqlToParamsInstanceMethod · 0.95
sendNotifyMethod · 0.95

Tested by

no test coverage detected