func ImportKey(do *definitions.Do) error { do.Name = "keys" do.Operations.ContainerNumber = 1 if err := srv.EnsureRunning(do); err != nil { return err } do.Operations.Interactive = false dir := path.Join(ErisContainerRoot, "keys", "data", do.Address) do.Operations.Args = []string{"mkdir", dir} //need to mkdir for import if err := srv.ExecService(do); err != nil { return err } //src on host if do.Source == "" { do.Source = filepath.Join(KeysPath, "data", do.Address, do.Address) } //dest in container do.Destination = dir if err := data.ImportData(do); err != nil { return err } return nil }
// check path for ErisContainerRoot // XXX this is opiniated & we may want to change in future // for more flexibility with filesystem of data conts func checkErisContainerRoot(do *definitions.Do, typ string) error { r, err := regexp.Compile(ErisContainerRoot) if err != nil { return err } switch typ { case "import": if r.MatchString(do.Destination) != true { //if not there join it do.Destination = path.Join(ErisContainerRoot, do.Destination) return nil } else { // matches: do nothing return nil } case "export": if r.MatchString(do.Source) != true { do.Source = path.Join(ErisContainerRoot, do.Source) return nil } else { return nil } } return nil }
func ExportKey(do *definitions.Do) error { do.Name = "keys" do.Operations.ContainerNumber = 1 if err := srv.EnsureRunning(do); err != nil { return err } //destination on host if do.Destination == "" { do.Destination = filepath.Join(KeysPath, "data") } //src in container do.Source = path.Join(ErisContainerRoot, "keys", "data", do.Address) if err := data.ExportData(do); err != nil { return err } return nil }