1
0
mirror of https://github.com/rancher/os.git synced 2025-07-31 22:47:16 +00:00

fix the ip/cidr, and call updateNetwork

Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
This commit is contained in:
Sven Dowideit 2017-03-08 22:03:08 +10:00
parent 0779e13d46
commit b5fdd63a85
5 changed files with 38 additions and 11 deletions

View File

@ -65,6 +65,11 @@ func Main() {
if err := SaveCloudConfig(true); err != nil {
log.Errorf("Failed to save cloud-config: %v", err)
}
// Apply any newly detected network config.
//consider putting this in a separate init phase...
cfg = rancherConfig.LoadConfig()
network.ApplyNetworkConfig(cfg)
}
func SaveCloudConfig(network bool) error {

View File

@ -76,6 +76,22 @@ func NewDatasource(root string) *MetadataService {
return &MetadataService{Service: metadata.NewDatasource(root, apiVersion, userdataURL, metadataPath, nil)}
}
// Parse IPv4 netmask written in IP form (e.g. "255.255.255.0").
func ipmask(addr *Address) string {
ip := net.ParseIP(addr.IPAddress)
var mask net.IPMask
if addr.Netmask != "" {
mask = net.IPMask(net.ParseIP(addr.Netmask))
} else {
mask = net.CIDRMask(addr.Cidr, 32)
}
ipnet := net.IPNet{
IP: ip,
Mask: mask,
}
return ipnet.String()
}
func (ms *MetadataService) FetchMetadata() (metadata datasource.Metadata, err error) {
var data []byte
var m Metadata
@ -114,17 +130,16 @@ func (ms *MetadataService) FetchMetadata() (metadata datasource.Metadata, err er
if eth.IPv4 != nil {
network.Gateway = eth.IPv4.Gateway
network.Addresses = append(network.Addresses, fmt.Sprintf("%s/%s", eth.IPv4.IPAddress, eth.IPv4.Netmask))
network.Addresses = append(network.Addresses, ipmask(eth.IPv4))
if metadata.PublicIPv4 == nil {
metadata.PublicIPv4 = net.ParseIP(eth.IPv4.IPAddress)
}
}
if eth.AnchorIPv4 != nil {
network.Addresses = append(network.Addresses, fmt.Sprintf("%s/%s", eth.AnchorIPv4.IPAddress, eth.AnchorIPv4.Netmask))
network.Addresses = append(network.Addresses, ipmask(eth.AnchorIPv4))
}
if eth.IPv6 != nil {
network.Addresses = append(network.Addresses, eth.IPv6.IPAddress)
network.Addresses = append(network.Addresses, fmt.Sprintf("%s/%d", eth.IPv6.IPAddress, eth.IPv6.Cidr))
network.GatewayIpv6 = eth.IPv6.Gateway
if metadata.PublicIPv6 == nil {
metadata.PublicIPv6 = net.ParseIP(eth.IPv6.IPAddress)
@ -139,17 +154,17 @@ func (ms *MetadataService) FetchMetadata() (metadata datasource.Metadata, err er
if eth.IPv4 != nil {
network.Gateway = eth.IPv4.Gateway
network.Addresses = append(network.Addresses, fmt.Sprintf("%s/%s", eth.IPv4.IPAddress, eth.IPv4.Netmask))
network.Addresses = append(network.Addresses, ipmask(eth.IPv4))
if metadata.PrivateIPv4 == nil {
metadata.PrivateIPv4 = net.ParseIP(eth.IPv6.IPAddress)
}
}
if eth.AnchorIPv4 != nil {
network.Addresses = append(network.Addresses, fmt.Sprintf("%s/%s", eth.AnchorIPv4.IPAddress, eth.AnchorIPv4.Netmask))
network.Addresses = append(network.Addresses, ipmask(eth.AnchorIPv4))
}
if eth.IPv6 != nil {
network.Address = eth.IPv6.IPAddress
network.Addresses = append(network.Addresses, fmt.Sprintf("%s/%d", eth.IPv6.IPAddress, eth.IPv6.Cidr))
network.GatewayIpv6 = eth.IPv6.Gateway
if metadata.PrivateIPv6 == nil {
metadata.PrivateIPv6 = net.ParseIP(eth.IPv6.IPAddress)
@ -166,7 +181,6 @@ func (ms *MetadataService) FetchMetadata() (metadata datasource.Metadata, err er
for i, key := range m.PublicKeys {
metadata.SSHPublicKeys[strconv.Itoa(i)] = key
}
// metadata.NetworkConfig = m
return
}

View File

@ -96,8 +96,8 @@ func TestFetchMetadata(t *testing.T) {
Interfaces: map[string]netconf.InterfaceConfig{
"eth0": netconf.InterfaceConfig{
Addresses: []string{
"192.168.1.2/255.255.255.0",
"fe00::",
"192.168.1.2/24",
"fe00::/126",
},
//Netmask: "255.255.255.0",
Gateway: "192.168.1.1",

View File

@ -15,6 +15,7 @@
package packet
import (
"bytes"
"fmt"
"net/http"
"strconv"
@ -129,6 +130,12 @@ func (ms *MetadataService) FetchMetadata() (metadata datasource.Metadata, err er
metadata.NetworkConfig = netCfg
// This is not really the right place - perhaps we should add a call-home function in each datasource to be called after the network is applied
//(see the original in cmd/cloudsave/packet)
if _, err = http.Post(m.PhoneHomeURL, "application/json", bytes.NewReader([]byte{})); err != nil {
log.Errorf("Failed to post to Packet phone home URL: %v", err)
}
return
}

View File

@ -41,6 +41,7 @@ func parseNetwork(netdata netconf.NetworkConfig, nameservers []net.IP) ([]Interf
var interfaces []InterfaceGenerator
var addresses []net.IPNet
var routes []route
// TODO: commented out because we don't use it - should combine with the code we do use...
/* for _, netblock := range netdata.Netblocks {
addresses = append(addresses, net.IPNet{
IP: netblock.Address,