Fix podman machine set --rootful for applehv

Fixes a bug where a user would be unable to change
a rootless machine to rootful. Also makes sure that
the podman/docker socket service is updated if the
UID or Rootful status of the host user has been
updated.

[NO NEW TESTS NEEDED]

Fixes: #21195

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
This commit is contained in:
Jake Correnti
2024-01-11 07:08:10 -05:00
parent f1ea4fbb3d
commit 7bd5dd42c9

View File

@ -405,6 +405,15 @@ func (m *MacMachine) writeConfig() error {
return os.WriteFile(m.ConfigPath.Path, b, 0644)
}
func (m *MacMachine) setRootful(rootful bool) error {
if err := machine.SetRootful(rootful, m.Name, m.Name+"-root"); err != nil {
return err
}
m.HostUser.Modified = true
return nil
}
func (m *MacMachine) Set(name string, opts machine.SetOptions) ([]error, error) {
var setErrors []error
@ -438,6 +447,14 @@ func (m *MacMachine) Set(name string, opts machine.SetOptions) ([]error, error)
setErrors = append(setErrors, errors.New("changing USBs not supported for applehv machines"))
}
if opts.Rootful != nil && m.Rootful != *opts.Rootful {
if err := m.setRootful(*opts.Rootful); err != nil {
setErrors = append(setErrors, fmt.Errorf("failed to set rootful option: %w", err))
} else {
m.Rootful = *opts.Rootful
}
}
// Write the machine config to the filesystem
err = m.writeConfig()
setErrors = append(setErrors, err)
@ -697,6 +714,17 @@ func (m *MacMachine) Start(name string, opts machine.StartOptions) error {
m.isIncompatible(),
m.Rootful,
)
// update the podman/docker socket service if the host user has been modified at all (UID or Rootful)
if m.HostUser.Modified {
if machine.UpdatePodmanDockerSockService(m, name, m.UID, m.Rootful) == nil {
// Reset modification state if there are no errors, otherwise ignore errors
// which are already logged
m.HostUser.Modified = false
_ = m.writeConfig()
}
}
return nil
}