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)
}
}