2015-03-02 23:03:21 +00:00
|
|
|
package network
|
|
|
|
|
|
|
|
import (
|
2016-04-08 20:04:35 +00:00
|
|
|
"flag"
|
2015-03-02 23:03:21 +00:00
|
|
|
"os"
|
2015-11-06 16:53:00 +00:00
|
|
|
"os/exec"
|
2015-03-02 23:03:21 +00:00
|
|
|
|
|
|
|
log "github.com/Sirupsen/logrus"
|
|
|
|
|
2015-11-30 11:06:21 +00:00
|
|
|
"github.com/docker/libnetwork/resolvconf"
|
2015-07-29 07:45:06 +00:00
|
|
|
"github.com/rancher/netconf"
|
2015-10-12 11:50:17 +00:00
|
|
|
"github.com/rancher/os/config"
|
2016-04-15 04:58:07 +00:00
|
|
|
"github.com/rancher/os/hostname"
|
2015-03-02 23:03:21 +00:00
|
|
|
)
|
|
|
|
|
2015-11-06 16:53:00 +00:00
|
|
|
const (
|
|
|
|
NETWORK_DONE = "/var/run/network.done"
|
|
|
|
WAIT_FOR_NETWORK = "wait-for-network"
|
|
|
|
)
|
|
|
|
|
2016-04-08 20:04:35 +00:00
|
|
|
var (
|
|
|
|
daemon bool
|
|
|
|
flags *flag.FlagSet
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
flags = flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
|
|
|
|
flags.BoolVar(&daemon, "daemon", false, "run dhcpd as daemon")
|
|
|
|
}
|
|
|
|
|
2015-11-06 16:53:00 +00:00
|
|
|
func sendTerm(proc string) {
|
|
|
|
cmd := exec.Command("killall", "-TERM", proc)
|
|
|
|
cmd.Stderr = os.Stderr
|
|
|
|
cmd.Stdout = os.Stdout
|
|
|
|
cmd.Run()
|
|
|
|
}
|
|
|
|
|
2015-03-02 23:03:21 +00:00
|
|
|
func Main() {
|
2016-04-08 20:04:35 +00:00
|
|
|
flags.Parse(os.Args[1:])
|
|
|
|
|
|
|
|
log.Infof("Running network: daemon=%v", daemon)
|
|
|
|
|
2015-11-06 16:53:00 +00:00
|
|
|
os.Remove(NETWORK_DONE) // ignore error
|
2015-03-02 23:03:21 +00:00
|
|
|
cfg, err := config.LoadConfig()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2016-04-11 23:44:33 +00:00
|
|
|
|
2016-04-15 17:38:31 +00:00
|
|
|
nameservers := cfg.Rancher.Network.Dns.Nameservers
|
|
|
|
search := cfg.Rancher.Network.Dns.Search
|
|
|
|
userSetDns := len(nameservers) > 0 || len(search) > 0
|
|
|
|
if !userSetDns {
|
|
|
|
nameservers = cfg.Rancher.DefaultNetwork.Dns.Nameservers
|
|
|
|
search = cfg.Rancher.DefaultNetwork.Dns.Search
|
|
|
|
}
|
|
|
|
|
|
|
|
if _, err := resolvconf.Build("/etc/resolv.conf", nameservers, search, nil); err != nil {
|
2016-04-11 23:44:33 +00:00
|
|
|
log.Error(err)
|
|
|
|
}
|
|
|
|
|
2016-04-15 04:58:07 +00:00
|
|
|
if err := hostname.SetHostnameFromCloudConfig(cfg); err != nil {
|
|
|
|
log.Error(err)
|
|
|
|
}
|
|
|
|
|
2015-07-29 07:45:06 +00:00
|
|
|
if err := netconf.ApplyNetworkConfigs(&cfg.Rancher.Network); err != nil {
|
2015-11-30 11:06:21 +00:00
|
|
|
log.Error(err)
|
|
|
|
}
|
2016-04-11 23:44:33 +00:00
|
|
|
|
2016-04-15 17:38:31 +00:00
|
|
|
userSetHostname := cfg.Hostname != ""
|
|
|
|
if err := netconf.RunDhcp(&cfg.Rancher.Network, !userSetHostname, !userSetDns); err != nil {
|
2016-04-15 04:58:07 +00:00
|
|
|
log.Error(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := hostname.SyncHostname(); err != nil {
|
|
|
|
log.Error(err)
|
2015-12-10 15:56:15 +00:00
|
|
|
}
|
2016-04-11 23:44:33 +00:00
|
|
|
|
2015-12-20 05:20:07 +00:00
|
|
|
if f, err := os.Create(NETWORK_DONE); err != nil {
|
2015-11-06 16:53:00 +00:00
|
|
|
log.Error(err)
|
2015-12-20 05:20:07 +00:00
|
|
|
} else {
|
|
|
|
f.Close()
|
2015-11-06 16:53:00 +00:00
|
|
|
}
|
|
|
|
sendTerm(WAIT_FOR_NETWORK)
|
2016-04-08 20:04:35 +00:00
|
|
|
|
|
|
|
if daemon {
|
|
|
|
select {}
|
|
|
|
}
|
2015-03-02 23:03:21 +00:00
|
|
|
}
|