func instanceReadyUp()

in executors/internal/autoscaler/provider.go [374:421]


func instanceReadyUp(ctx context.Context, config *common.RunnerConfig) taskscaler.UpFunc {
	return func(ts taskscaler.Taskscaler, instance taskscaler.UpFuncInstance) error {
		if len(instance.Acquisitions) > 0 {
			// We currently have no way to resume acquisitions, so for now we remove them
			for _, key := range instance.Acquisitions {
				ts.Release(key)
			}

			if !config.Autoscaler.StateStorage.KeepInstanceWithAcquisitions {
				return fmt.Errorf("pre-existing instance has acquisition so removing for safety")
			}
		}

		// If the instance pre-existed, and VMIsolation and the instance wasn't
		// restored from saved state, then we cannot trust the instance.
		if instance.Cause == fleeting.CausePreexisted &&
			!instance.Restored && !config.Autoscaler.VMIsolation.Enabled {
			return fmt.Errorf("no data on pre-existing instance so removing for safety")
		}

		useExternalAddr := true
		if config.Autoscaler != nil {
			useExternalAddr = config.Autoscaler.ConnectorConfig.UseExternalAddr
		}

		// run instance ready command on instance
		if config.Autoscaler.InstanceReadyCommand != "" {
			err := connector.Run(ctx, instance.Info, connector.ConnectorOptions{
				RunOptions: connector.RunOptions{
					Command: config.Autoscaler.InstanceReadyCommand,
				},
				DialOptions: connector.DialOptions{
					UseExternalAddr: useExternalAddr,
				},
			})

			if err != nil {
				return fmt.Errorf("ready command: %w", err)
			}
		}

		if !config.Autoscaler.VMIsolation.Enabled {
			return nil
		}

		return readyNestingHost(ctx, config, instance, useExternalAddr)
	}
}