提交 40545375 编写于 作者: A Aaron Prindle

Added localkube caching functionality. Also cleanup up private/public

functions in cluster.go, added v1.3.3 to k8s_releases.json and fixed
link in LOCALKUBE_RELEASING.md.  Fixed TestUpdatedKubernetesVersion to
use tmp dir as caching is now used for localkube.
上级 38d0f083
...@@ -30,11 +30,5 @@ This step makes the new release trigger update notifications in old versions of ...@@ -30,11 +30,5 @@ This step makes the new release trigger update notifications in old versions of
Use this command from a clean git repo: Use this command from a clean git repo:
```shell ```shell
gsutil cp deploy/minikube/releases.json gs://minikube/k8s_releases.json gsutil cp deploy/minikube/k8s_releases.json gs://minikube/k8s_releases.json
```
## Mark the release as `latest` in GCS:
```shell
gsutil cp -r gs://minikube/releases/$RELEASE gs://minikube/releases/latest
``` ```
...@@ -211,11 +211,38 @@ var assets = []fileToCopy{ ...@@ -211,11 +211,38 @@ var assets = []fileToCopy{
}, },
} }
func updateLocalkubeFromURL(config KubernetesConfig, client *ssh.Client) error { func (k *KubernetesConfig) getLocalkubeCacheFilepath() string {
return filepath.Join(constants.Minipath, "cache", "localkube",
filepath.Base("localkube-"+util.GetMD5Hash(k.KubernetesVersion)))
}
func (k *KubernetesConfig) isLocalkubeCached() bool {
if _, err := os.Stat(k.getLocalkubeCacheFilepath()); os.IsNotExist(err) {
return false
}
return true
}
func (k *KubernetesConfig) cacheLocalkube(response *http.Response) error {
// store localkube inside the .minikube dir
out, err := os.Create(k.getLocalkubeCacheFilepath())
if err != nil {
return err
}
defer out.Close()
defer response.Body.Close()
if _, err = io.Copy(out, response.Body); err != nil {
return err
}
return nil
}
func (k *KubernetesConfig) downloadAndCacheLocalkube() error {
resp := &http.Response{} resp := &http.Response{}
err := errors.New("") err := errors.New("")
downloader := func() (err error) { downloader := func() (err error) {
url, err := util.GetLocalkubeDownloadURL(config.KubernetesVersion, url, err := util.GetLocalkubeDownloadURL(k.KubernetesVersion,
constants.LocalkubeLinuxFilename) constants.LocalkubeLinuxFilename)
if err != nil { if err != nil {
return err return err
...@@ -227,7 +254,32 @@ func updateLocalkubeFromURL(config KubernetesConfig, client *ssh.Client) error { ...@@ -227,7 +254,32 @@ func updateLocalkubeFromURL(config KubernetesConfig, client *ssh.Client) error {
if err = util.Retry(5, downloader); err != nil { if err = util.Retry(5, downloader); err != nil {
return err return err
} }
if err = sshutil.Transfer(resp.Body, int(resp.ContentLength), "/usr/local/bin", if err = k.cacheLocalkube(resp); err != nil {
return err
}
return nil
}
func updateLocalkubeFromURL(config KubernetesConfig, client *ssh.Client) error {
if !config.isLocalkubeCached() {
if err := config.downloadAndCacheLocalkube(); err != nil {
return err
}
}
if err := config.transferCachedLocalkubeToVM(client); err != nil {
return err
}
return nil
}
func (k *KubernetesConfig) transferCachedLocalkubeToVM(client *ssh.Client) error {
contents, err := ioutil.ReadFile(k.getLocalkubeCacheFilepath())
if err != nil {
glog.Infof("Error loading asset out/localkube: %s", err)
return err
}
if err = sshutil.Transfer(bytes.NewReader(contents), len(contents), "/usr/local/bin",
"localkube", "0777", client); err != nil { "localkube", "0777", client); err != nil {
return err return err
} }
...@@ -342,11 +394,12 @@ func createVirtualboxHost(config MachineConfig) drivers.Driver { ...@@ -342,11 +394,12 @@ func createVirtualboxHost(config MachineConfig) drivers.Driver {
func (m *MachineConfig) CacheMinikubeISOFromURL() error { func (m *MachineConfig) CacheMinikubeISOFromURL() error {
// store the miniube-iso inside the .minikube dir // store the miniube-iso inside the .minikube dir
// TODO(aprindle) put this in a retry loop?
response, err := http.Get(m.MinikubeISO) response, err := http.Get(m.MinikubeISO)
if err != nil { if err != nil {
return err return err
} else { } else {
out, err := os.Create(m.GetISOCacheFilepath()) out, err := os.Create(m.getISOCacheFilepath())
if err != nil { if err != nil {
return err return err
} }
...@@ -391,6 +444,7 @@ func (m *MachineConfig) GetISOFileURI() string { ...@@ -391,6 +444,7 @@ func (m *MachineConfig) GetISOFileURI() string {
// As this is a file URL there should be no backslashes regardless of platform running on. // As this is a file URL there should be no backslashes regardless of platform running on.
return "file://" + filepath.ToSlash(isoPath) return "file://" + filepath.ToSlash(isoPath)
} }
func (m *MachineConfig) IsMinikubeISOCached() bool { func (m *MachineConfig) IsMinikubeISOCached() bool {
if _, err := os.Stat(m.GetISOCacheFilepath()); os.IsNotExist(err) { if _, err := os.Stat(m.GetISOCacheFilepath()); os.IsNotExist(err) {
return false return false
......
...@@ -534,6 +534,9 @@ func (h *K8sVersionHandlerCorrect) ServeHTTP(w http.ResponseWriter, r *http.Requ ...@@ -534,6 +534,9 @@ func (h *K8sVersionHandlerCorrect) ServeHTTP(w http.ResponseWriter, r *http.Requ
} }
func TestUpdateKubernetesVersion(t *testing.T) { func TestUpdateKubernetesVersion(t *testing.T) {
tempDir := tests.MakeTempDir()
defer os.RemoveAll(tempDir)
s, _ := tests.NewSSHServer() s, _ := tests.NewSSHServer()
port, err := s.Start() port, err := s.Start()
if err != nil { if err != nil {
......
...@@ -17,6 +17,8 @@ limitations under the License. ...@@ -17,6 +17,8 @@ limitations under the License.
package util package util
import ( import (
"crypto/md5"
"encoding/hex"
"fmt" "fmt"
"io" "io"
"net/url" "net/url"
...@@ -105,6 +107,7 @@ func GetLocalkubeDownloadURL(versionOrURL string, filename string) (string, erro ...@@ -105,6 +107,7 @@ func GetLocalkubeDownloadURL(versionOrURL string, filename string) (string, erro
return fmt.Sprintf("%s%s/%s", constants.LocalkubeDownloadURLPrefix, versionOrURL, filename), nil return fmt.Sprintf("%s%s/%s", constants.LocalkubeDownloadURLPrefix, versionOrURL, filename), nil
} }
<<<<<<< 38d0f083510df2b7b91dc59fdbc8517b8d02fbd1
type MultiError struct { type MultiError struct {
Errors []error Errors []error
} }
...@@ -126,3 +129,8 @@ func (m MultiError) ToError() error { ...@@ -126,3 +129,8 @@ func (m MultiError) ToError() error {
} }
return fmt.Errorf(strings.Join(errStrings, "\n")) return fmt.Errorf(strings.Join(errStrings, "\n"))
} }
func GetMD5Hash(text string) string {
hash := md5.Sum([]byte(text))
return hex.EncodeToString(hash[:])
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册