diff --git a/cmd/control/os.go b/cmd/control/os.go index b5e8822e..5084962a 100644 --- a/cmd/control/os.go +++ b/cmd/control/os.go @@ -3,7 +3,6 @@ package control import ( "fmt" "io/ioutil" - "net/http" "net/url" "os" "runtime" @@ -22,6 +21,7 @@ import ( "github.com/rancher/os/compose" "github.com/rancher/os/config" "github.com/rancher/os/docker" + "github.com/rancher/os/util/network" ) type Images struct { @@ -83,7 +83,6 @@ func osSubcommands() []cli.Command { } } -// TODO: this and the getLatestImage should probably move to utils/network and be suitably cached. func getImages() (*Images, error) { upgradeURL, err := getUpgradeURL() if err != nil { @@ -108,12 +107,7 @@ func getImages() (*Images, error) { u.RawQuery = q.Encode() upgradeURL = u.String() - resp, err := http.Get(upgradeURL) - if err != nil { - return nil, err - } - defer resp.Body.Close() - body, err = ioutil.ReadAll(resp.Body) + body, err = network.LoadFromNetwork(upgradeURL) if err != nil { return nil, err } diff --git a/config/cloudinit/datasource/url/url.go b/config/cloudinit/datasource/url/url.go index 117e2aa3..ca065d63 100755 --- a/config/cloudinit/datasource/url/url.go +++ b/config/cloudinit/datasource/url/url.go @@ -19,6 +19,7 @@ import ( "github.com/rancher/os/config/cloudinit/datasource" "github.com/rancher/os/config/cloudinit/pkg" + "github.com/rancher/os/util/network" ) type RemoteFile struct { @@ -31,6 +32,7 @@ func NewDatasource(url string) *RemoteFile { } func (f *RemoteFile) IsAvailable() bool { + network.SetProxyEnvironmentVariables() client := pkg.NewHTTPClient() _, f.lastError = client.Get(f.url) return (f.lastError == nil) diff --git a/init/init.go b/init/init.go index ee3302ba..84177fb0 100755 --- a/init/init.go +++ b/init/init.go @@ -451,7 +451,7 @@ func RunInit() error { }}, config.CfgFuncData{"load modules2", loadModules}, config.CfgFuncData{"set proxy env", func(cfg *config.CloudConfig) (*config.CloudConfig, error) { - network.SetProxyEnvironmentVariables(cfg) + network.SetProxyEnvironmentVariables() return cfg, nil }}, config.CfgFuncData{"init SELinux", initializeSelinux}, diff --git a/util/network/network.go b/util/network/network.go index 0b943fe4..37e0f9ab 100644 --- a/util/network/network.go +++ b/util/network/network.go @@ -57,7 +57,8 @@ func getServices(urls []string, key string) ([]string, error) { return result, nil } -func SetProxyEnvironmentVariables(cfg *config.CloudConfig) { +func SetProxyEnvironmentVariables() { + cfg := config.LoadConfig() if cfg.Rancher.Network.HTTPProxy != "" { err := os.Setenv("HTTP_PROXY", cfg.Rancher.Network.HTTPProxy) if err != nil { @@ -78,14 +79,16 @@ func SetProxyEnvironmentVariables(cfg *config.CloudConfig) { } } -func loadFromNetwork(location string) ([]byte, error) { +func LoadFromNetworkWithCache(location string) ([]byte, error) { bytes := cacheLookup(location) if bytes != nil { return bytes, nil } + return LoadFromNetwork(location) +} - cfg := config.LoadConfig() - SetProxyEnvironmentVariables(cfg) +func LoadFromNetwork(location string) ([]byte, error) { + SetProxyEnvironmentVariables() var err error @@ -116,7 +119,7 @@ func LoadResource(location string, network bool) ([]byte, error) { if !network { return nil, ErrNoNetwork } - return loadFromNetwork(location) + return LoadFromNetworkWithCache(location) } else if strings.HasPrefix(location, "/") { return ioutil.ReadFile(location) }