Skip to content

Commit

Permalink
Merge pull request #12609 from baude/tz
Browse files Browse the repository at this point in the history
Set machine timezone
  • Loading branch information
openshift-merge-robot authored Dec 16, 2021
2 parents 2c98694 + a86495e commit 52d5f36
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 1 deletion.
8 changes: 7 additions & 1 deletion cmd/podman/machine/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ func init() {
})
flags := initCmd.Flags()
cfg := registry.PodmanConfig()

cpusFlagName := "cpus"
flags.Uint64Var(
&initOpts.CPUS,
Expand Down Expand Up @@ -69,6 +68,13 @@ func init() {
"now", false,
"Start machine now",
)
timezoneFlagName := "timezone"
defaultTz := cfg.TZ()
if len(defaultTz) < 1 {
defaultTz = "local"
}
flags.StringVar(&initOpts.TimeZone, timezoneFlagName, defaultTz, "Set timezone")
_ = initCmd.RegisterFlagCompletionFunc(timezoneFlagName, completion.AutocompleteDefault)

ImagePathFlagName := "image-path"
flags.StringVar(&initOpts.ImagePath, ImagePathFlagName, cfg.Machine.Image, "Path to qcow image")
Expand Down
6 changes: 6 additions & 0 deletions docs/source/markdown/podman-machine-init.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,12 @@ Memory (in MB).

Start the virtual machine immediately after it has been initialized.

#### **--timezone**

Set the timezone for the machine and containers. Valid values are `local` or
a `timezone` such as `America/Chicago`. A value of `local`, which is the default,
means to use the timezone of the machine host.

#### **--help**

Print usage statement.
Expand Down
1 change: 1 addition & 0 deletions pkg/machine/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ type InitOptions struct {
IsDefault bool
Memory uint64
Name string
TimeZone string
URI url.URL
Username string
}
Expand Down
33 changes: 33 additions & 0 deletions pkg/machine/ignition.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"fmt"
"io/ioutil"
"net/url"
"path/filepath"
)

/*
Expand Down Expand Up @@ -44,6 +45,7 @@ func getNodeGrp(grpName string) NodeGroup {
type DynamicIgnition struct {
Name string
Key string
TimeZone string
VMName string
WritePath string
}
Expand Down Expand Up @@ -76,6 +78,37 @@ func NewIgnitionFile(ign DynamicIgnition) error {
Links: getLinks(ign.Name),
}

// Add or set the time zone for the machine
if len(ign.TimeZone) > 0 {
var (
err error
tz string
)
// local means the same as the host
// lookup where it is pointing to on the host
if ign.TimeZone == "local" {
tz, err = getLocalTimeZone()
if err != nil {
return err
}
} else {
tz = ign.TimeZone
}
tzLink := Link{
Node: Node{
Group: getNodeGrp("root"),
Path: "/etc/localtime",
Overwrite: boolToPtr(false),
User: getNodeUsr("root"),
},
LinkEmbedded1: LinkEmbedded1{
Hard: boolToPtr(false),
Target: filepath.Join("/usr/share/zoneinfo", tz),
},
}
ignStorage.Links = append(ignStorage.Links, tzLink)
}

// ready is a unit file that sets up the virtual serial device
// where when the VM is done configuring, it will send an ack
// so a listening host knows it can being interacting with it
Expand Down
16 changes: 16 additions & 0 deletions pkg/machine/ignition_darwin.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//+build darwin

package machine

import (
"os"
"strings"
)

func getLocalTimeZone() (string, error) {
tzPath, err := os.Readlink("/etc/localtime")
if err != nil {
return "", err
}
return strings.TrimPrefix(tzPath, "/var/db/timezone/zoneinfo"), nil
}
15 changes: 15 additions & 0 deletions pkg/machine/ignition_linux.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package machine

import (
"os/exec"
"strings"
)

func getLocalTimeZone() (string, error) {
output, err := exec.Command("timedatectl", "show", "--property=Timezone").Output()
if err != nil {
return "", err
}
// Remove prepended field and the newline
return strings.TrimPrefix(strings.TrimSuffix(string(output), "\n"), "Timezone="), nil
}
2 changes: 2 additions & 0 deletions pkg/machine/qemu/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ func (v *MachineVM) Init(opts machine.InitOptions) error {
// Get image as usual
v.ImageStream = opts.ImagePath
dd, err := machine.NewFcosDownloader(vmtype, v.Name, opts.ImagePath)

if err != nil {
return err
}
Expand Down Expand Up @@ -235,6 +236,7 @@ func (v *MachineVM) Init(opts machine.InitOptions) error {
Name: opts.Username,
Key: key,
VMName: v.Name,
TimeZone: opts.TimeZone,
WritePath: v.IgnitionFilePath,
}
return machine.NewIgnitionFile(ign)
Expand Down

0 comments on commit 52d5f36

Please sign in to comment.