in executors/internal/autoscaler/acquisition.go [57:129]
func (ref *acquisitionRef) Prepare(
ctx context.Context,
logger buildlogger.Logger,
options common.ExecutorPrepareOptions,
) (executors.Client, error) {
if ref.acq == nil {
return nil, errRefAcqNotSet
}
dialCtx, cancel := ref.acq.WithContext(ctx)
defer cancel()
info, err := ref.acq.InstanceConnectInfo(dialCtx)
if cause := context.Cause(dialCtx); cause != nil {
return nil, &common.BuildError{Inner: cause, FailureReason: reasonFromCause(cause)}
}
if err != nil {
return nil, fmt.Errorf("getting instance connect info: %w", err)
}
useExternalAddr := true
if options.Config != nil && options.Config.Autoscaler != nil {
useExternalAddr = options.Config.Autoscaler.ConnectorConfig.UseExternalAddr
}
options.Build.Log().WithFields(logrus.Fields{
"internal-address": info.InternalAddr,
"external-address": info.ExternalAddr,
"use-external-address": useExternalAddr,
"instance-id": info.ID,
"protocol-port": options.Config.Autoscaler.ConnectorConfig.ProtocolPort,
}).Info("Dialing instance")
fleetingDialOpts := connector.DialOptions{
UseExternalAddr: useExternalAddr,
}
logger.Println(fmt.Sprintf("Dialing instance %s...", info.ID))
fleetingDialer, err := ref.dialAcquisitionInstance(dialCtx, info, fleetingDialOpts)
if cause := context.Cause(dialCtx); cause != nil {
return nil, &common.BuildError{Inner: cause, FailureReason: reasonFromCause(cause)}
}
if err != nil {
return nil, err
}
logger.Println(fmt.Sprintf("Instance %s connected", info.ID))
// if nesting is disabled, return a client for the host instance, for example VM Isolation and VM tunnel not needed
if !options.Config.Autoscaler.VMIsolation.Enabled {
return &client{client: fleetingDialer, cleanup: nil}, nil
}
// Enforce VM Isolation by dialing nesting daemon with gRPC
logger.Println("Enforcing VM Isolation")
nc, conn, err := ref.connectNesting(options.Config.Autoscaler.VMIsolation.NestingHost, logger, fleetingDialer)
if err != nil {
fleetingDialer.Close()
return nil, err
}
logger.Println("Creating nesting VM tunnel")
client, err := ref.createVMTunnel(ctx, logger, nc, fleetingDialer, options)
if err != nil {
nc.Close()
conn.Close()
fleetingDialer.Close()
return nil, fmt.Errorf("creating vm tunnel: %w", err)
}
return client, nil
}