summaryrefslogtreecommitdiff
path: root/libpod/runtime_migrate.go
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2019-04-26 15:28:15 -0700
committerGitHub <noreply@github.com>2019-04-26 15:28:15 -0700
commitfe3acddcbe02cfa258170707791bd096dc909022 (patch)
tree9a68b96d5f85adcc67189e97e1c788786c20b32c /libpod/runtime_migrate.go
parentb6e2cbad0a4581a8fe4954ff4a9202461a526781 (diff)
parentf49e0c19ede56b1cc6b1d44ea9ba8b336cd22658 (diff)
downloadpodman-fe3acddcbe02cfa258170707791bd096dc909022.tar.gz
podman-fe3acddcbe02cfa258170707791bd096dc909022.tar.bz2
podman-fe3acddcbe02cfa258170707791bd096dc909022.zip
Merge pull request #2950 from giuseppe/podman-system-migrate
system: add new subcommand "migrate"
Diffstat (limited to 'libpod/runtime_migrate.go')
-rw-r--r--libpod/runtime_migrate.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/libpod/runtime_migrate.go b/libpod/runtime_migrate.go
new file mode 100644
index 000000000..a084df289
--- /dev/null
+++ b/libpod/runtime_migrate.go
@@ -0,0 +1,47 @@
+package libpod
+
+import (
+ "path/filepath"
+
+ "github.com/pkg/errors"
+ "github.com/sirupsen/logrus"
+)
+
+func (r *Runtime) migrate() error {
+ runningContainers, err := r.GetRunningContainers()
+ if err != nil {
+ return err
+ }
+
+ allCtrs, err := r.state.AllContainers()
+ if err != nil {
+ return err
+ }
+
+ logrus.Infof("stopping all containers")
+ for _, ctr := range runningContainers {
+ logrus.Infof("stopping %s", ctr.ID())
+ if err := ctr.Stop(); err != nil {
+ return errors.Wrapf(err, "cannot stop container %s", ctr.ID())
+ }
+ }
+
+ for _, ctr := range allCtrs {
+ oldLocation := filepath.Join(ctr.state.RunDir, "conmon.pid")
+ if ctr.config.ConmonPidFile == oldLocation {
+ logrus.Infof("changing conmon PID file for %s", ctr.ID())
+ ctr.config.ConmonPidFile = filepath.Join(ctr.config.StaticDir, "conmon.pid")
+ if err := r.state.RewriteContainerConfig(ctr, ctr.config); err != nil {
+ return errors.Wrapf(err, "error rewriting config for container %s", ctr.ID())
+ }
+ }
+ }
+
+ for _, ctr := range runningContainers {
+ if err := ctr.Start(r.ctx, true); err != nil {
+ logrus.Errorf("error restarting container %s", ctr.ID())
+ }
+ }
+
+ return nil
+}