Explorar o código

dockerinit: set hostname

Set the hostname in dockerinit instead of with lxc utils.  libvirt-lxc
doesn't have a way to do this, so do it in a common place.
Josh Poimboeuf %!s(int64=11) %!d(string=hai) anos
pai
achega
f7c7f7978c
Modificáronse 3 ficheiros con 22 adicións e 9 borrados
  1. 0 7
      lxc_template.go
  2. 0 2
      lxc_template_unit_test.go
  3. 22 0
      sysinit/sysinit.go

+ 0 - 7
lxc_template.go

@@ -6,13 +6,6 @@ import (
 )
 
 const LxcTemplate = `
-# hostname
-{{if .Config.Hostname}}
-lxc.utsname = {{.Config.Hostname}}
-{{else}}
-lxc.utsname = {{.Id}}
-{{end}}
-
 {{if .Config.NetworkDisabled}}
 # network is disabled (-n=false)
 lxc.network.type = empty

+ 0 - 2
lxc_template_unit_test.go

@@ -29,7 +29,6 @@ func TestLXCConfig(t *testing.T) {
 	container := &Container{
 		root: root,
 		Config: &Config{
-			Hostname:        "foobar",
 			Memory:          int64(mem),
 			CpuShares:       int64(cpu),
 			NetworkDisabled: true,
@@ -41,7 +40,6 @@ func TestLXCConfig(t *testing.T) {
 	if err := container.generateLXCConfig(); err != nil {
 		t.Fatal(err)
 	}
-	grepFile(t, container.lxcConfigPath(), "lxc.utsname = foobar")
 	grepFile(t, container.lxcConfigPath(),
 		fmt.Sprintf("lxc.cgroup.memory.limit_in_bytes = %d", mem))
 	grepFile(t, container.lxcConfigPath(),

+ 22 - 0
sysinit/sysinit.go

@@ -26,6 +26,14 @@ type DockerInitArgs struct {
 	args       []string
 }
 
+func setupHostname(args *DockerInitArgs) error {
+	hostname := getEnv(args, "HOSTNAME")
+	if hostname == "" {
+		return nil
+	}
+	return syscall.Sethostname([]byte(hostname))
+}
+
 // Setup networking
 func setupNetworking(args *DockerInitArgs) error {
 	if args.gateway == "" {
@@ -132,9 +140,23 @@ func setupEnv(args *DockerInitArgs) {
 	}
 }
 
+func getEnv(args *DockerInitArgs, key string) string {
+	for _, kv := range args.env {
+		parts := strings.SplitN(kv, "=", 2)
+		if parts[0] == key && len(parts) == 2 {
+			return parts[1]
+		}
+	}
+	return ""
+}
+
 func executeProgram(args *DockerInitArgs) error {
 	setupEnv(args)
 
+	if err := setupHostname(args); err != nil {
+		return err
+	}
+
 	if err := setupNetworking(args); err != nil {
 		return err
 	}