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

Method GetRunnerInstallScript

runner/metadata.go:359–472  ·  view source on GitHub ↗
(ctx context.Context)

Source from the content-addressed store, hash-verified

357}
358
359func (r *Runner) GetRunnerInstallScript(ctx context.Context) ([]byte, error) {
360 instance, err := validateInstanceState(ctx)
361 if err != nil {
362 slog.With(slog.Any("error", err)).ErrorContext(
363 ctx, "failed to get instance params")
364 return nil, runnerErrors.ErrUnauthorized
365 }
366
367 entity, err := auth.InstanceEntity(ctx)
368 if err != nil {
369 return nil, fmt.Errorf("failed to get instance entity: %w", err)
370 }
371
372 token, err := auth.InstanceAuthToken(ctx)
373 if err != nil {
374 return nil, fmt.Errorf("failed to get instance token: %w", err)
375 }
376
377 var templateID uint
378 var specs cloudconfig.CloudConfigSpec
379 var extraSpecs json.RawMessage
380 var enableShell bool
381 switch {
382 case instance.PoolID != "":
383 pool, err := r.store.GetPoolByID(r.ctx, instance.PoolID)
384 if err != nil {
385 return nil, fmt.Errorf("failed to get pool for instance: %w", err)
386 }
387 specs, err = garmUtil.GetCloudConfigSpecFromExtraSpecs(pool.ExtraSpecs)
388 if err != nil {
389 return nil, fmt.Errorf("failed to extract extra specs from pool: %w", err)
390 }
391 extraSpecs = pool.ExtraSpecs
392 templateID = pool.TemplateID
393 enableShell = pool.EnableShell
394 case instance.ScaleSetID > 0:
395 scaleSet, err := r.store.GetScaleSetByID(r.ctx, instance.ScaleSetID)
396 if err != nil {
397 return nil, fmt.Errorf("failed to get scale set for instance: %w", err)
398 }
399 specs, err = garmUtil.GetCloudConfigSpecFromExtraSpecs(scaleSet.ExtraSpecs)
400 if err != nil {
401 return nil, fmt.Errorf("failed to extract extra specs from scale set: %w", err)
402 }
403 extraSpecs = scaleSet.ExtraSpecs
404 templateID = scaleSet.TemplateID
405 enableShell = scaleSet.EnableShell
406 default:
407 return nil, fmt.Errorf("instance is not part of a pool or scale set")
408 }
409
410 if templateID == 0 && len(specs.RunnerInstallTemplate) == 0 {
411 return nil, runnerErrors.NewConflictError("pool or scale set has no template associated and no template is defined in extra_specs")
412 }
413
414 if specs.ExtraContext == nil {
415 specs.ExtraContext = map[string]string{}
416 }

Calls 11

getInstanceAgentToolMethod · 0.95
GetAgentJWTTokenMethod · 0.95
InstanceEntityFunction · 0.92
InstanceAuthTokenFunction · 0.92
ControllerInfoFunction · 0.92
validateInstanceStateFunction · 0.85
GetPoolByIDMethod · 0.65
GetScaleSetByIDMethod · 0.65
GetTemplateMethod · 0.65