1
0
mirror of https://github.com/rancher/os.git synced 2025-06-26 23:06:51 +00:00

Merge pull request #2231 from niusmallnan/wait-for-netconf

Add more logs for networking conf
This commit is contained in:
niusmallnan 2018-01-20 09:47:04 +08:00 committed by GitHub
commit 3cfd6a63a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 23 deletions

View File

@ -6,11 +6,12 @@ import (
"github.com/rancher/os/docker"
"github.com/rancher/os/log"
"io/ioutil"
"github.com/docker/libnetwork/resolvconf"
"github.com/rancher/os/config"
"github.com/rancher/os/hostname"
"github.com/rancher/os/netconf"
"io/ioutil"
)
func Main() {
@ -37,13 +38,13 @@ func ApplyNetworkConfig(cfg *config.CloudConfig) {
userSetDNS := len(cfg.Rancher.Network.DNS.Nameservers) > 0 || len(cfg.Rancher.Network.DNS.Search) > 0
if err := hostname.SetHostnameFromCloudConfig(cfg); err != nil {
log.Error(err)
log.Errorf("Failed to set hostname from cloud config: %v", err)
}
userSetHostname := cfg.Hostname != ""
dhcpSetDNS, err := netconf.ApplyNetworkConfigs(&cfg.Rancher.Network, userSetHostname, userSetDNS)
if err != nil {
log.Error(err)
log.Errorf("Failed to apply network configs(by netconf): %v", err)
}
if dhcpSetDNS {
@ -57,12 +58,12 @@ func ApplyNetworkConfig(cfg *config.CloudConfig) {
cfg.Rancher.Defaults.Network.DNS.Nameservers,
cfg.Rancher.Defaults.Network.DNS.Search,
nil); err != nil {
log.Error(err)
log.Errorf("Failed to write resolv.conf (!userSetDNS and !dhcpSetDNS): %v", err)
}
}
if userSetDNS {
if _, err := resolvconf.Build("/etc/resolv.conf", cfg.Rancher.Network.DNS.Nameservers, cfg.Rancher.Network.DNS.Search, nil); err != nil {
log.Error(err)
log.Errorf("Failed to write resolv.conf (userSetDNS): %v", err)
} else {
log.Infof("writing to /etc/resolv.conf: nameservers: %v, search: %v", cfg.Rancher.Network.DNS.Nameservers, cfg.Rancher.Network.DNS.Search)
}
@ -73,6 +74,6 @@ func ApplyNetworkConfig(cfg *config.CloudConfig) {
log.Infof("Apply Network Config SyncHostname")
if err := hostname.SyncHostname(); err != nil {
log.Error(err)
log.Errorf("Failed to sync hostname: %v", err)
}
}

View File

@ -177,7 +177,10 @@ func ApplyNetworkConfigs(netCfg *NetworkConfig, userSetHostname, userSetDNS bool
//apply network config
for _, link := range links {
applyOuter(link, netCfg, &wg, userSetHostname, userSetDNS)
linkName := link.Attrs().Name
if linkName != "lo" {
applyOuter(link, netCfg, &wg, userSetHostname, userSetDNS)
}
}
wg.Wait()
@ -186,26 +189,27 @@ func ApplyNetworkConfigs(netCfg *NetworkConfig, userSetHostname, userSetDNS bool
dnsSet := false
for _, link := range links {
linkName := link.Attrs().Name
log.Infof("dns testing %s", linkName)
lease := getDhcpLease(linkName)
if _, ok := lease["domain_name_servers"]; ok {
log.Infof("dns was dhcp set for %s", linkName)
dnsSet = true
if linkName != "lo" {
log.Infof("dns testing %s", linkName)
lease := getDhcpLease(linkName)
if _, ok := lease["domain_name_servers"]; ok {
log.Infof("dns was dhcp set for %s", linkName)
dnsSet = true
}
}
}
return dnsSet, err
return dnsSet, nil
}
func applyOuter(link netlink.Link, netCfg *NetworkConfig, wg *sync.WaitGroup, userSetHostname, userSetDNS bool) {
log.Debugf("applyOuter(%V, %v)", userSetHostname, userSetDNS)
linkName := link.Attrs().Name
log.Debugf("applyOuter(%v, %v), link: %s", userSetHostname, userSetDNS, linkName)
match, ok := findMatch(link, netCfg)
if !ok {
return
}
linkName := link.Attrs().Name
log.Debugf("Config(%s): %#v", linkName, match)
runCmds(match.PreUp, linkName)
defer runCmds(match.PostUp, linkName)
@ -215,9 +219,7 @@ func applyOuter(link netlink.Link, netCfg *NetworkConfig, wg *sync.WaitGroup, us
log.Errorf("Failed to apply settings to %s : %v", linkName, err)
}
}
if linkName == "lo" {
return
}
if !match.DHCP && !hasDhcp(linkName) {
log.Debugf("Skipping(%s): DHCP=false && no DHCP lease yet", linkName)
return
@ -254,18 +256,21 @@ func getDhcpLease(iface string) (lease map[string]string) {
}
func getDhcpLeaseString(iface string) []byte {
cmd := exec.Command("dhcpcd", "-U", iface)
args := defaultDhcpArgs
args = append(args, "-U", iface)
cmd := exec.Command(args[0], args[1:]...)
//cmd.Stderr = os.Stderr
out, err := cmd.Output()
log.Debugf("Running cmd: %s, output: %s", args, string(out))
if err != nil {
log.Error(err)
// dhcpcd works fine, but gets an error: exit status 1
log.Warnf("Failed to run cmd: %s, error: %v", args, err)
}
return out
}
func hasDhcp(iface string) bool {
out := getDhcpLeaseString(iface)
log.Debugf("dhcpcd -U %s: %s", iface, out)
return len(out) > 0
}
@ -300,7 +305,7 @@ func runDhcp(netCfg *NetworkConfig, iface string, argstr string, setHostname, se
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
log.Error(err)
log.Errorf("Failed to run dhcpcd for %s: %v", iface, err)
}
}