feat: config-file boot for firecracker, eliminates 10 api round-trips

This commit is contained in:
Harivansh Rathi 2026-04-11 14:13:04 +00:00
parent 2ded10a67a
commit 2cef6aace5
4 changed files with 170 additions and 25 deletions

View file

@ -113,7 +113,19 @@ func (r *Runtime) Boot(ctx context.Context, spec MachineSpec, usedNetworks []Net
return nil, err
}
command, err := launchJailedFirecracker(paths, spec.ID, r.firecrackerBinaryPath, r.jailerBinaryPath, r.enablePCI)
jailedSpec, err := stageMachineFiles(spec, paths)
if err != nil {
cleanup(network, paths, nil, 0)
return nil, err
}
configFilePath, err := writeConfigFile(paths.ChrootRootDir, jailedSpec, paths, network)
if err != nil {
cleanup(network, paths, nil, 0)
return nil, fmt.Errorf("write config file: %w", err)
}
command, err := launchJailedFirecracker(paths, spec.ID, r.firecrackerBinaryPath, r.jailerBinaryPath, r.enablePCI, configFilePath)
if err != nil {
cleanup(network, paths, nil, 0)
return nil, err
@ -123,23 +135,7 @@ func (r *Runtime) Boot(ctx context.Context, spec MachineSpec, usedNetworks []Net
cleanup(network, paths, command, 0)
return nil, fmt.Errorf("wait for firecracker pid: %w", err)
}
socketPath := procSocketPath(firecrackerPID)
client := newAPIClient(socketPath)
if err := waitForSocket(ctx, client, socketPath); err != nil {
cleanup(network, paths, command, firecrackerPID)
return nil, fmt.Errorf("wait for firecracker socket: %w", err)
}
jailedSpec, err := stageMachineFiles(spec, paths)
if err != nil {
cleanup(network, paths, command, firecrackerPID)
return nil, err
}
if err := configureMachine(ctx, client, paths, jailedSpec, network); err != nil {
cleanup(network, paths, command, firecrackerPID)
return nil, err
}
now := time.Now().UTC()
state := MachineState{
@ -280,7 +276,7 @@ func (r *Runtime) RestoreBoot(ctx context.Context, loadSpec SnapshotLoadSpec, us
return nil, err
}
command, err := launchJailedFirecracker(paths, loadSpec.ID, r.firecrackerBinaryPath, r.jailerBinaryPath, r.enablePCI)
command, err := launchJailedFirecracker(paths, loadSpec.ID, r.firecrackerBinaryPath, r.jailerBinaryPath, r.enablePCI, "")
if err != nil {
cleanup(network, paths, nil, 0)
return nil, err