// RefreshUnits overwrites local unit files with those requested. // Downloading from the Deis project GitHub URL by tag or SHA is the only mechanism // currently supported. func RefreshUnits(dir, tag, url string) error { dir = utils.ResolvePath(dir) // create the target dir if necessary if err := os.MkdirAll(dir, 0755); err != nil { return err } // download and save the unit files to the specified path for _, unit := range units.Names { src := fmt.Sprintf(url, tag, unit) dest := filepath.Join(dir, unit+".service") res, err := http.Get(src) if err != nil { return err } if res.StatusCode != 200 { return errors.New(res.Status) } defer res.Body.Close() data, err := ioutil.ReadAll(res.Body) if err != nil { return err } if err = ioutil.WriteFile(dest, data, 0644); err != nil { return err } fmt.Printf("Refreshed %s from %s\n", unit, tag) } return nil }
// valueForPath returns the canonical value for a user-defined path and value func valueForPath(path string, v string) (string, error) { // check if path is part of fileKeys for _, p := range fileKeys { if path == p { // read value from filesystem bytes, err := ioutil.ReadFile(utils.ResolvePath(v)) if err != nil { return "", err } // see if we should return base64 encoded value for _, pp := range b64Keys { if path == pp { return base64.StdEncoding.EncodeToString(bytes), nil } } return string(bytes), nil } } return v, nil }
// RefreshUnits overwrites local unit files with those requested. // Downloading from the Deis project GitHub URL by tag or SHA is the only mechanism // currently supported. func RefreshUnits(unitDir, tag, rootURL string) error { unitDir = utils.ResolvePath(unitDir) decoratorDir := filepath.Join(unitDir, "decorators") // create the target dir if necessary if err := os.MkdirAll(decoratorDir, 0755); err != nil { return err } // download and save the unit files to the specified path for _, unit := range units.Names { unitSrc := rootURL + tag + "/deisctl/units/" + unit + ".service" unitDest := filepath.Join(unitDir, unit+".service") if err := net.Download(unitSrc, unitDest); err != nil { return err } fmt.Printf("Refreshed %s unit from %s\n", unit, tag) decoratorSrc := rootURL + tag + "/deisctl/units/decorators/" + unit + ".service.decorator" decoratorDest := filepath.Join(decoratorDir, unit+".service.decorator") if err := net.Download(decoratorSrc, decoratorDest); err != nil { if err.Error() == "404 Not Found" { fmt.Printf("Decorator for %s not found in %s\n", unit, tag) } else { return err } } else { fmt.Printf("Refreshed %s decorator from %s\n", unit, tag) } } return nil }
func doConfigSet(client *etcdClient, root string, kvs []string) ([]string, error) { var result []string for _, kv := range kvs { // split k/v from args split := strings.Split(kv, "=") if len(split) != 2 { return result, fmt.Errorf("invalid argument: %v", kv) } k, v := split[0], split[1] // prepare path and value path := root + k var val string // special handling for sshKey if path == "/deis/platform/sshPrivateKey" { b64, err := readSSHPrivateKey(utils.ResolvePath(v)) if err != nil { return result, err } val = b64 } else { val = v } // set key/value in etcd ret, err := client.Set(path, val) if err != nil { return result, err } result = append(result, ret) } return result, nil }
// RefreshUnits overwrites local unit files with those requested. // Downloading from the Deis project GitHub URL by tag or SHA is the only mechanism // currently supported. func RefreshUnits(argv []string) error { usage := `Overwrites local unit files with those requested. Downloading from the Deis project GitHub URL by tag or SHA is the only mechanism currently supported. "deisctl install" looks for unit files in these directories, in this order: - the $DEISCTL_UNITS environment variable, if set - $HOME/.deis/units - /var/lib/deis/units Usage: deisctl refresh-units [-p <target>] [-t <tag>] Options: -p --path=<target> where to save unit files [default: $HOME/.deis/units] -t --tag=<tag> git tag, branch, or SHA to use when downloading unit files [default: master] ` // parse command-line arguments args, err := docopt.Parse(usage, argv, true, "", false) if err != nil { fmt.Printf("Error: %v\n", err) os.Exit(2) } dir := args["--path"].(string) dir = utils.ResolvePath(dir) // create the target dir if necessary if err := os.MkdirAll(dir, 0755); err != nil { return err } // download and save the unit files to the specified path rootURL := "https://raw.githubusercontent.com/deis/deis/" tag := args["--tag"].(string) units := []string{ "deis-builder.service", "deis-cache.service", "deis-controller.service", "deis-database.service", "deis-logger.service", "deis-logspout.service", "deis-publisher.service", "deis-registry.service", "deis-router.service", "deis-store-daemon.service", "deis-store-gateway.service", "deis-store-metadata.service", "deis-store-monitor.service", "deis-store-volume.service", } for _, unit := range units { src := rootURL + tag + "/deisctl/units/" + unit dest := filepath.Join(dir, unit) res, err := http.Get(src) if err != nil { return err } if res.StatusCode != 200 { return errors.New(res.Status) } defer res.Body.Close() data, err := ioutil.ReadAll(res.Body) if err != nil { return err } if err = ioutil.WriteFile(dest, data, 0644); err != nil { return err } fmt.Printf("Refreshed %s from %s\n", unit, tag) } return nil }