41 lines
892 B
Go
41 lines
892 B
Go
//go:build amd64 || arm64
|
|
// +build amd64 arm64
|
|
|
|
package os
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/containers/podman/v4/pkg/machine"
|
|
)
|
|
|
|
// MachineOS manages machine OS's from outside the machine.
|
|
type MachineOS struct {
|
|
Args []string
|
|
VM machine.VM
|
|
VMName string
|
|
Restart bool
|
|
}
|
|
|
|
// Apply applies the image by sshing into the machine and running apply from inside the VM.
|
|
func (m *MachineOS) Apply(image string, opts ApplyOptions) error {
|
|
sshOpts := machine.SSHOptions{
|
|
Args: []string{"podman", "machine", "os", "apply", image},
|
|
}
|
|
|
|
if err := m.VM.SSH(m.VMName, sshOpts); err != nil {
|
|
return err
|
|
}
|
|
|
|
if m.Restart {
|
|
if err := m.VM.Stop(m.VMName, machine.StopOptions{}); err != nil {
|
|
return err
|
|
}
|
|
if err := m.VM.Start(m.VMName, machine.StartOptions{NoInfo: true}); err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("Machine %q restarted successfully\n", m.VMName)
|
|
}
|
|
return nil
|
|
}
|