}, cli.StringFlag{ Name: "hook-post-restore", Usage: "Command to run right after a successful process restoration", }, cli.StringFlag{ Name: "hook-failed-restore", Usage: "Command to run right after a failed process restoration", }, }, Action: func(c *cli.Context) { srcUrl := validate.ParseURL(c.String("src")) dstUrl := validate.ParseURL(c.String("dst")) log.Println("Performing validations") src, dst := validate.Validate(srcUrl, dstUrl, c.Bool("force")) log.Println("Preparing everything to do a checkpoint") containerId := getContainerId(srcUrl.Path) var imagesPath string var restoreCmd cmd.Cmd var migrateStart time.Time var downtime time.Duration if c.Bool("pre-dump") { // Process pre-dump predumpPath := fmt.Sprintf("%s/images/0", srcUrl.Path) prepareDir(src, predumpPath) checkpoint(src, containerId, predumpPath, true)
Flags: []cli.Flag{ cli.StringFlag{ Name: "src", Usage: "Source host where the container is running", }, cli.StringFlag{ Name: "dst", Usage: "Target host to migrate the container", }, }, Action: func(c *cli.Context) { srcUrl := validate.ParseURL(c.String("src")) dstUrl := validate.ParseURL(c.String("dst")) log.Println("Performing validations") src, dst := validate.Validate(srcUrl, dstUrl) log.Println("Preparing everything to do a checkpoint") imagesPath := fmt.Sprintf("%s/images", srcUrl.Path) containerId := getContainerId(srcUrl.Path) _, _, err := src.Run("mkdir", "-p", imagesPath) if err != nil { log.Fatal("Error preparing images dir:", err) } log.Println("Performing the checkpoint") _, _, err = src.Run("sudo", "runc", "--id", containerId, "checkpoint", "--image-path", imagesPath) if err != nil { log.Fatal("Error performing checkpoint:", err) }