Do not error on tz detection

In cases where systemd was not available, podman machine was erroring
out using timedatectl (it requires systemd).  on other providers like
windows, we don't do any timezone detection so it seems valid to return
a "" for timezone.  This fixes the first problem described #25950.

Fixes: https://github.com/containers/podman/issues/25950

Signed-off-by: Brent Baude <bbaude@redhat.com>
This commit is contained in:
Brent Baude
2025-04-30 08:00:54 -05:00
parent dd8fbb7582
commit d7eaf42727
2 changed files with 17 additions and 8 deletions

View File

@ -151,7 +151,7 @@ func (ign *DynamicIgnition) GenerateIgnitionConfig() error {
if ign.TimeZone == "local" {
tz, err = getLocalTimeZone()
if err != nil {
return err
return fmt.Errorf("error getting local timezone: %q", err)
}
} else {
tz = ign.TimeZone

View File

@ -1,20 +1,29 @@
package ignition
import (
"errors"
"os"
"os/exec"
"strings"
"github.com/sirupsen/logrus"
)
func getLocalTimeZone() (string, error) {
trimTzFunc := func(s string) string {
return strings.TrimPrefix(strings.TrimSuffix(s, "\n"), "Timezone=")
}
// perform a variety of ways to see if we can determine the tz
output, err := exec.Command("timedatectl", "show", "--property=Timezone").Output()
if errors.Is(err, exec.ErrNotFound) {
output, err = os.ReadFile("/etc/timezone")
if err == nil {
return trimTzFunc(string(output)), nil
}
if err != nil {
return "", err
logrus.Debugf("Timedatectl show --property=Timezone failed: %s", err)
output, err = os.ReadFile("/etc/timezone")
if err == nil {
return trimTzFunc(string(output)), nil
}
// Remove prepended field and the newline
return strings.TrimPrefix(strings.TrimSuffix(string(output), "\n"), "Timezone="), nil
logrus.Debugf("unable to read /etc/timezone, falling back to empty timezone: %s", err)
// if we cannot determine the tz, return empty string
return "", nil
}