in machine.go [320:378]
func NewMachine(ctx context.Context, cfg Config, opts ...Opt) (*Machine, error) {
m := &Machine{
exitCh: make(chan struct{}),
}
if cfg.VMID == "" {
id, err := uuid.NewRandom()
if err != nil {
return nil, errors.Wrap(err, "failed to create random ID for VMID")
}
cfg.VMID = id.String()
}
m.Handlers = defaultHandlers
if cfg.JailerCfg != nil {
m.Handlers.Validation = m.Handlers.Validation.Append(JailerConfigValidationHandler)
if err := jail(ctx, m, &cfg); err != nil {
return nil, err
}
} else {
m.Handlers.Validation = m.Handlers.Validation.Append(ConfigValidationHandler)
m.cmd = configureBuilder(defaultFirecrackerVMMCommandBuilder, cfg).Build(ctx)
}
for _, opt := range opts {
opt(m)
}
if m.logger == nil {
logger := log.New()
m.logger = log.NewEntry(logger)
}
if m.client == nil {
m.client = NewClient(cfg.SocketPath, m.logger, false)
}
if cfg.ForwardSignals == nil {
cfg.ForwardSignals = []os.Signal{
os.Interrupt,
syscall.SIGQUIT,
syscall.SIGTERM,
syscall.SIGHUP,
syscall.SIGABRT,
}
}
m.machineConfig = cfg.MachineCfg
m.Cfg = cfg
if cfg.NetNS == "" && cfg.NetworkInterfaces.cniInterface() != nil {
m.Cfg.NetNS = m.defaultNetNSPath()
}
m.logger.Debug("Called NewMachine()")
return m, nil
}