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

Method handleInstanceAdded

workers/provider/provider.go:413–466  ·  view source on GitHub ↗
(instance params.Instance)

Source from the content-addressed store, hash-verified

411}
412
413func (p *Provider) handleInstanceAdded(instance params.Instance) {
414 // If an entry already exists, update its instance data and let the
415 // retry loop handle restarting it if needed.
416 if val, ok := p.runners.Load(instance.Name); ok {
417 entry := val.(*runnerEntry)
418 entry.mux.Lock()
419 running := entry.manager != nil && entry.manager.running.Load()
420 entry.mux.Unlock()
421
422 if running {
423 slog.DebugContext(p.ctx, "instance manager already running", "instance_name", instance.Name)
424 return
425 }
426 entry.SetInstance(instance)
427 p.backoff.RecordSuccess(instance.Name)
428 return
429 }
430
431 entry := &runnerEntry{instance: instance}
432
433 val, ok := p.scaleSets.Load(instance.ScaleSetID)
434 if !ok {
435 slog.ErrorContext(p.ctx, "scale set not found for instance", "instance_name", instance.Name, "scale_set_id", instance.ScaleSetID)
436 p.runners.Store(instance.Name, entry)
437 p.backoff.RecordFailure(instance.Name)
438 return
439 }
440 scaleSet := val.(params.ScaleSet)
441
442 provider, ok := p.providers[scaleSet.ProviderName]
443 if !ok {
444 // The provider map is static — no point storing an entry that will never work.
445 slog.ErrorContext(p.ctx, "provider not configured, skipping instance", "instance_name", instance.Name, "provider_name", scaleSet.ProviderName)
446 return
447 }
448
449 manager, err := newInstanceManager(
450 p.ctx, instance, scaleSet, provider, p)
451 if err != nil {
452 slog.ErrorContext(p.ctx, "creating instance manager", "instance_name", instance.Name, "error", err)
453 p.runners.Store(instance.Name, entry)
454 p.backoff.RecordFailure(instance.Name)
455 return
456 }
457 if err := manager.Start(); err != nil {
458 slog.ErrorContext(p.ctx, "starting instance manager", "instance_name", instance.Name, "error", err)
459 p.runners.Store(instance.Name, entry)
460 p.backoff.RecordFailure(instance.Name)
461 return
462 }
463
464 entry.SetManager(manager)
465 p.runners.Store(instance.Name, entry)
466}
467
468func (p *Provider) stopAndDeleteInstance(instance params.Instance) {
469 if instance.Status != commonParams.InstanceDeleted {

Callers 1

handleInstanceEventMethod · 0.95

Implementers 4

externalrunner/providers/v0.1.0/external.go
externalrunner/providers/v0.1.1/external.go
Providerrunner/common/mocks/Provider.go
Provider_Expecterrunner/common/mocks/Provider.go

Calls 8

SetInstanceMethod · 0.95
SetManagerMethod · 0.95
newInstanceManagerFunction · 0.85
RecordSuccessMethod · 0.80
LockMethod · 0.65
UnlockMethod · 0.65
RecordFailureMethod · 0.65
StartMethod · 0.65

Tested by

no test coverage detected