func main() { // Get connection env variable. conn := common.GetEnv() // Options. version := flag.Bool("version", false, "Version") node := flag.String("node", "", "Etcd node") port := flag.String("port", "2379", "Etcd port") dir := flag.String("dir", "/", "Etcd directory") format := flag.String("format", "JSON", "Data serialization format YAML, TOML or JSON") output := flag.String("output", "", "Output file") flag.Parse() // Print version. if *version { fmt.Printf("etcd-export %s\n", common.Version) os.Exit(0) } // Validate input. if len(conn) < 1 && *node == "" { log.Fatalf("You need to specify Etcd host.") } // Get data format. f, err := iodatafmt.Format(*format) if err != nil { log.Fatal(err.Error()) } // Setup Etcd client. if *node != "" { conn = []string{fmt.Sprintf("http://%v:%v", *node, *port)} } client := etcd.NewClient(conn) // Export data. res, err := client.Get(*dir, true, true) if err != nil { log.Fatal(err.Error()) } m := etcdmap.Map(res.Node) // Write output. if *output != "" { iodatafmt.Write(*output, m, f) } else { iodatafmt.Print(m, f) } }
// exportCommandFunc exports data as either JSON, YAML or TOML. func exportFunc(dir string, sort bool, file string, f iodatafmt.DataFmt, c *cli.Context, ki client.KeysAPI) { ctx, cancel := contextWithCommandTimeout(c) resp, err := ki.Get(ctx, dir, &client.GetOptions{Sort: sort, Recursive: true}) cancel() if err != nil { fatal(err.Error()) } // Export and write output. m := etcdmap.Map(resp.Node) if file != "" { iodatafmt.Write(file, m, f) } else { iodatafmt.Print(m, f) } }