Skip to content

Commit

Permalink
Don't use libmachine API from the cmdline tool
Browse files Browse the repository at this point in the history
I'd like to eventually remove this API, so it's better if we avoid using
it from the command line tool, while still using common code.
Maybe this will turn out awkward/too much code duplication, but this
commit attempts this.
  • Loading branch information
cfergeau committed Jan 14, 2025
1 parent 23a5c02 commit f5f42e8
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 16 deletions.
19 changes: 15 additions & 4 deletions cmd/macadam/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ import (
macadam "github.com/cfergeau/macadam/pkg/machinedriver"
ldefine "github.com/containers/podman/v5/libpod/define"
"github.com/containers/podman/v5/pkg/machine"
"github.com/containers/podman/v5/pkg/machine/provider"
"github.com/containers/podman/v5/pkg/machine/shim"
"github.com/containers/podman/v5/pkg/machine/vmconfigs"
"github.com/spf13/cobra"
)

Expand Down Expand Up @@ -49,11 +52,19 @@ func start(_ *cobra.Command, args []string) error {
return fmt.Errorf("invalid name %q: %w", initOpts.Name, ldefine.RegexError)
}
}
driver, err := macadam.GetDriverByMachineName(machineName)
initOpts := macadam.DefaultInitOpts(machineName)
//initOpts.ImagePuller = ...
vmProvider, err := provider.Get()
if err != nil {
return nil
}
err = shim.Init(*initOpts, vmProvider)
if err != nil {
return err
}

// we cannot start the start command if it was not init immediately before
return driver.Start()
vmConfig, _, err := shim.VMExists(initOpts.Name, []vmconfigs.VMProvider{vmProvider})
if err != nil {
return err
}
return macadam.Start(vmConfig, vmProvider)
}
38 changes: 26 additions & 12 deletions pkg/machinedriver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,14 +150,14 @@ func (d *Driver) getDiskPath() string {
return d.ResolveStorePath(fmt.Sprintf("%s.img", d.MachineName))
}

func (d *Driver) initOpts() *define.InitOptions {
func DefaultInitOpts(machineName string) *define.InitOptions {
initOpts := define.InitOptions{}
// defaults from cmd/podman/machine/init.go
initOpts.Name = d.MachineName
initOpts.Name = machineName

initOpts.CPUS = uint64(d.VMDriver.CPU)
initOpts.DiskSize = uint64(strongunits.ToGiB(strongunits.B(d.VMDriver.DiskCapacity)))
initOpts.Memory = uint64(d.VMDriver.Memory)
initOpts.CPUS = uint64(DefaultCPUs)
//initOpts.DiskSize = uint64(???)
initOpts.Memory = uint64(DefaultMemory)
initOpts.TimeZone = ""
initOpts.ReExec = false
/*
Expand All @@ -170,7 +170,7 @@ func (d *Driver) initOpts() *define.InitOptions {
/* if d.VMDriver.SSHConfig.RemoteUsername != "" {
initOpts.Username = d.VMDriver.SSHConfig.RemoteUsername
} */
initOpts.Image = d.getDiskPath()
initOpts.Image = "" // cli mode will most likely not copy images to a central place
initOpts.Volumes = []string{}
initOpts.USBs = []string{}
initOpts.IgnitionPath = ""
Expand All @@ -182,6 +182,16 @@ func (d *Driver) initOpts() *define.InitOptions {
return &initOpts
}

func (d *Driver) initOpts() *define.InitOptions {
initOpts := DefaultInitOpts(d.MachineName)
initOpts.CPUS = uint64(d.VMDriver.CPU)
initOpts.DiskSize = uint64(strongunits.ToGiB(strongunits.B(d.VMDriver.DiskCapacity)))
initOpts.Memory = uint64(d.VMDriver.Memory)
initOpts.Image = d.getDiskPath()

return initOpts
}

func (d *Driver) Reload() error {
if d.vmProvider == nil {
provider, err := provider2.Get()
Expand Down Expand Up @@ -277,10 +287,9 @@ func (d *Driver) Create() error {
return nil
}

// Start a host
func (d *Driver) Start() error {
machineName := d.vmConfig.Name
dirs, err := env.GetMachineDirs(d.vmProvider.VMType())
func Start(vmConfig *vmconfigs.MachineConfig, vmProvider vmconfigs.VMProvider) error {
machineName := vmConfig.Name
dirs, err := env.GetMachineDirs(vmProvider.VMType())
if err != nil {
return err
}
Expand All @@ -297,9 +306,9 @@ func (d *Driver) Start() error {
NoInfo: false,
Quiet: false,
}
slog.Info(fmt.Sprintf("SSH config: %v", d.vmConfig.SSH))
slog.Info(fmt.Sprintf("SSH config: %v", vmConfig.SSH))

if err := shim.Start(d.vmConfig, d.vmProvider, dirs, startOpts); err != nil {
if err := shim.Start(vmConfig, vmProvider, dirs, startOpts); err != nil {
return err
}
fmt.Printf("Machine %q started successfully\n", machineName)
Expand Down Expand Up @@ -440,6 +449,11 @@ func (d *Driver) Start() error {
*/
}

// Start a host
func (d *Driver) Start() error {
return Start(d.vmConfig, d.vmProvider)
}

func (d *Driver) GetSharedDirs() ([]drivers.SharedDir, error) {
return d.SharedDirs, nil
}
Expand Down

0 comments on commit f5f42e8

Please sign in to comment.