From f03486263bb0cd1c36bae05318b48d846d85f1c9 Mon Sep 17 00:00:00 2001 From: Ivan Mikushin Date: Thu, 10 Dec 2015 20:56:15 +0500 Subject: [PATCH 1/2] Resolve localhost and current hostname --- build.conf | 2 +- cmd/cloudinit/cloudinit.go | 18 +++++++----- cmd/cloudinit/hostname/hostname.go | 13 --------- cmd/network/network.go | 29 ++++++++++++++++++- glide.yaml | 2 +- os-config.yml | 1 + .../rancher/docker-from-scratch/scratch.go | 13 +++++++++ 7 files changed, 55 insertions(+), 23 deletions(-) delete mode 100644 cmd/cloudinit/hostname/hostname.go diff --git a/build.conf b/build.conf index c5a02a96..e019da1b 100644 --- a/build.conf +++ b/build.conf @@ -3,4 +3,4 @@ VERSION=v0.4.2-dev DOCKER_BINARY_URL=https://github.com/rancher/docker/releases/download/v1.9.1-ros1/docker-1.9.1 COMPILED_KERNEL_URL=https://github.com/rancher/os-kernel/releases/download/Ubuntu-4.2.0-16.19/linux-4.2.3-rancher-x86.tar.gz -DFS_IMAGE=rancher/docker:1.9.1-1 +DFS_IMAGE=rancher/docker:1.9.1-2 diff --git a/cmd/cloudinit/cloudinit.go b/cmd/cloudinit/cloudinit.go index 89eb9406..d52a7630 100644 --- a/cmd/cloudinit/cloudinit.go +++ b/cmd/cloudinit/cloudinit.go @@ -22,6 +22,7 @@ import ( "os" "strings" "sync" + "syscall" "time" yaml "github.com/cloudfoundry-incubator/candiedyaml" @@ -38,7 +39,6 @@ import ( "github.com/coreos/coreos-cloudinit/pkg" "github.com/coreos/coreos-cloudinit/system" "github.com/rancher/netconf" - "github.com/rancher/os/cmd/cloudinit/hostname" rancherConfig "github.com/rancher/os/config" ) @@ -168,16 +168,20 @@ func fetchUserData() ([]byte, datasource.Metadata, error) { return userDataBytes, metadata, nil } -func SetHostname(cc *rancherConfig.CloudConfig) error { +func SetHostname(cc *rancherConfig.CloudConfig) (string, error) { + name, _ := os.Hostname() if cc.Hostname != "" { + name = cc.Hostname + } + if name != "" { //set hostname - if err := hostname.SetHostname(cc.Hostname); err != nil { - log.WithFields(log.Fields{"err": err, "hostname": cc.Hostname}).Error("Error setting hostname") - return err + if err := syscall.Sethostname([]byte(name)); err != nil { + log.WithFields(log.Fields{"err": err, "hostname": name}).Error("Error setting hostname") + return "", err } } - return nil + return name, nil } func executeCloudConfig() error { @@ -186,7 +190,7 @@ func executeCloudConfig() error { return err } - if err := SetHostname(cc); err != nil { + if _, err := SetHostname(cc); err != nil { return err } diff --git a/cmd/cloudinit/hostname/hostname.go b/cmd/cloudinit/hostname/hostname.go deleted file mode 100644 index 8e08bdfc..00000000 --- a/cmd/cloudinit/hostname/hostname.go +++ /dev/null @@ -1,13 +0,0 @@ -package hostname - -import ( - "io/ioutil" - "syscall" -) - -func SetHostname(hostname string) error { - if err := syscall.Sethostname([]byte(hostname)); err != nil { - return err - } - return ioutil.WriteFile("/etc/hostname", []byte(hostname), 0644) -} diff --git a/cmd/network/network.go b/cmd/network/network.go index 51f8cba3..3b6a97a9 100644 --- a/cmd/network/network.go +++ b/cmd/network/network.go @@ -1,9 +1,12 @@ package network import ( + "bufio" "fmt" + "io/ioutil" "os" "os/exec" + "strings" log "github.com/Sirupsen/logrus" @@ -36,10 +39,34 @@ func Main() { if err != nil { log.Fatal(err) } - cloudinit.SetHostname(cfg) // ignore error + hostname, _ := cloudinit.SetHostname(cfg) // ignore error + log.Infof("Network: hostname: '%s'", hostname) if err := netconf.ApplyNetworkConfigs(&cfg.Rancher.Network); err != nil { log.Error(err) } + hostname, _ = cloudinit.SetHostname(cfg) // ignore error + log.Infof("Network: hostname: '%s' (from DHCP, if not set by cloud-config)", hostname) + if hostname != "" { + hosts, err := os.Open("/etc/hosts") + defer hosts.Close() + if err != nil { + log.Fatal(err) + } + lines := bufio.NewScanner(hosts) + hostsContent := "" + for lines.Scan() { + line := strings.TrimSpace(lines.Text()) + fields := strings.Fields(line) + if len(fields) > 0 && fields[0] == "127.0.1.1" { + hostsContent += "127.0.1.1 " + hostname + "\n" + continue + } + hostsContent += line + "\n" + } + if err := ioutil.WriteFile("/etc/hosts", []byte(hostsContent), 0600); err != nil { + log.Error(err) + } + } if cfg.Rancher.Network.Dns.Override { log.WithFields(log.Fields{"nameservers": cfg.Rancher.Network.Dns.Nameservers}).Info("Override nameservers") if _, err := resolvconf.Build("/etc/resolv.conf", cfg.Rancher.Network.Dns.Nameservers, cfg.Rancher.Network.Dns.Search, nil); err != nil { diff --git a/glide.yaml b/glide.yaml index 8a8dc529..38983d92 100644 --- a/glide.yaml +++ b/glide.yaml @@ -66,7 +66,7 @@ import: version: 1349b37bd56f4f5ce2690b5b2c0f53f88a261c67 - package: github.com/rancher/docker-from-scratch - version: 1.9.1-1 + version: 1.9.1-2 - package: github.com/rancher/netconf version: 02925e7cf5a0f0bb0aa5360ee260ef7378e5eff8 diff --git a/os-config.yml b/os-config.yml index 3212f4e5..448ddeca 100644 --- a/os-config.yml +++ b/os-config.yml @@ -244,6 +244,7 @@ rancher: volumes: - /dev:/host/dev - /etc/docker:/etc/docker + - /etc/hosts:/etc/hosts - /etc/resolv.conf:/etc/resolv.conf - /etc/rkt:/etc/rkt - /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt.rancher diff --git a/vendor/github.com/rancher/docker-from-scratch/scratch.go b/vendor/github.com/rancher/docker-from-scratch/scratch.go index c59f57fc..b191fed2 100644 --- a/vendor/github.com/rancher/docker-from-scratch/scratch.go +++ b/vendor/github.com/rancher/docker-from-scratch/scratch.go @@ -273,6 +273,19 @@ func setupNetworking(config *Config) error { return nil } + hostname, err := os.Hostname(); + if err != nil { + return err + } + tryCreateFile("/etc/hosts", `127.0.0.1 localhost +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +ff00::0 ip6-mcastprefix +ff02::1 ip6-allnodes +ff02::2 ip6-allrouters + +127.0.1.1 `+hostname) + if len(config.DnsConfig.Nameservers) != 0 { if _, err := resolvconf.Build("/etc/resolv.conf", config.DnsConfig.Nameservers, config.DnsConfig.Search, nil); err != nil { return err From 084fb43201cf43f02169c49d9d45332cfac726a1 Mon Sep 17 00:00:00 2001 From: Ivan Mikushin Date: Fri, 11 Dec 2015 17:38:00 +0500 Subject: [PATCH 2/2] tweak tests --- scripts/run | 2 +- tests/integration/rostest/test_01_cloud_config.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/run b/scripts/run index d91f7747..a750e787 100755 --- a/scripts/run +++ b/scripts/run @@ -174,7 +174,7 @@ if [ "$XHYVE" == "1" ] || [ "$QEMU" == "1" ]; then -net user,vlan=0,hostfwd=tcp::2222-:22,hostname=rancher-dev \ -drive if=virtio,file=${HD} \ ${KVM_ENABLE} \ - -smp 4 \ + -smp 1 \ -cdrom ${CLOUD_CONFIG_ISO} \ -append "${KERNEL_ARGS}" \ -nographic \ diff --git a/tests/integration/rostest/test_01_cloud_config.py b/tests/integration/rostest/test_01_cloud_config.py index 0265b44c..e203795f 100644 --- a/tests/integration/rostest/test_01_cloud_config.py +++ b/tests/integration/rostest/test_01_cloud_config.py @@ -75,7 +75,7 @@ def test_docker_tls_args(qemu, cloud_config): stderr=subprocess.STDOUT, universal_newlines=True) subprocess.check_call( - ssh_command + ['docker', '--tlsverify', '-H', '127.0.0.1:2376', 'version'], + ssh_command + ['docker', '--tlsverify', 'version'], stderr=subprocess.STDOUT, universal_newlines=True)