in options.go [79:163]
func (opts *options) getFirecrackerConfig() (firecracker.Config, error) {
// validate metadata json
if opts.FcMetadata != "" {
if err := json.Unmarshal([]byte(opts.FcMetadata), &opts.validMetadata); err != nil {
return firecracker.Config{},
errors.Wrap(err, errInvalidMetadata.Error())
}
}
//setup NICs
NICs, err := opts.getNetwork()
if err != nil {
return firecracker.Config{}, err
}
// BlockDevices
blockDevices, err := opts.getBlockDevices()
if err != nil {
return firecracker.Config{}, err
}
// vsocks
vsocks, err := parseVsocks(opts.FcVsockDevices)
if err != nil {
return firecracker.Config{}, err
}
//fifos
fifo, err := opts.handleFifos()
if err != nil {
return firecracker.Config{}, err
}
var (
socketPath string
jail *firecracker.JailerConfig
)
if opts.JailerBinary != "" {
jail = &firecracker.JailerConfig{
GID: firecracker.Int(opts.Gid),
UID: firecracker.Int(opts.Uid),
ID: opts.Id,
NumaNode: firecracker.Int(opts.NumaNode),
ExecFile: opts.ExecFile,
JailerBinary: opts.JailerBinary,
ChrootBaseDir: opts.ChrootBaseDir,
Daemonize: opts.Daemonize,
ChrootStrategy: firecracker.NewNaiveChrootStrategy(opts.FcKernelImage),
Stdout: os.Stdout,
Stderr: os.Stderr,
Stdin: os.Stdin,
}
} else {
// if no jail is active, either use the path from the arguments
if opts.FcSocketPath != "" {
socketPath = opts.FcSocketPath
} else {
// or generate a default socket path
socketPath = getSocketPath()
}
}
htEnabled := !opts.FcDisableHt
return firecracker.Config{
SocketPath: socketPath,
LogFifo: opts.FcLogFifo,
LogLevel: opts.FcLogLevel,
MetricsFifo: opts.FcMetricsFifo,
FifoLogWriter: fifo,
KernelImagePath: opts.FcKernelImage,
KernelArgs: opts.FcKernelCmdLine,
Drives: blockDevices,
NetworkInterfaces: NICs,
VsockDevices: vsocks,
MachineCfg: models.MachineConfiguration{
VcpuCount: firecracker.Int64(opts.FcCPUCount),
CPUTemplate: models.CPUTemplate(opts.FcCPUTemplate),
HtEnabled: firecracker.Bool(htEnabled),
MemSizeMib: firecracker.Int64(opts.FcMemSz),
},
JailerCfg: jail,
VMID: opts.Id,
}, nil
}