container restore/import: store networks from db

It is important that we store the current networks from the db in the
config. Also make sure to properly handle aliases and ignore static ip/mac
addresses.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
Paul Holzinger 2021-12-13 18:20:31 +01:00
parent 3e9af2029f
commit 094e1d70de
No known key found for this signature in database
GPG Key ID: EB145DD938A3CAF2
2 changed files with 30 additions and 0 deletions

View File

@ -2206,6 +2206,24 @@ func (c *Container) canWithPrevious() error {
// prepareCheckpointExport writes the config and spec to // prepareCheckpointExport writes the config and spec to
// JSON files for later export // JSON files for later export
func (c *Container) prepareCheckpointExport() error { func (c *Container) prepareCheckpointExport() error {
networks, err := c.networks()
if err != nil {
return err
}
// make sure to exclude the short ID alias since the container gets a new ID on restore
for net, opts := range networks {
newAliases := make([]string, 0, len(opts.Aliases))
for _, alias := range opts.Aliases {
if alias != c.config.ID[:12] {
newAliases = append(newAliases, alias)
}
}
opts.Aliases = newAliases
networks[net] = opts
}
// add the networks from the db to the config so that the exported checkpoint still stores all current networks
c.config.Networks = networks
// save live config // save live config
if _, err := metadata.WriteJSONFile(c.config, c.bundlePath(), metadata.ConfigDumpFile); err != nil { if _, err := metadata.WriteJSONFile(c.config, c.bundlePath(), metadata.ConfigDumpFile); err != nil {
return err return err

View File

@ -78,6 +78,18 @@ func CRImportCheckpoint(ctx context.Context, runtime *libpod.Runtime, restoreOpt
} }
} }
if restoreOptions.IgnoreStaticIP || restoreOptions.IgnoreStaticMAC {
for net, opts := range ctrConfig.Networks {
if restoreOptions.IgnoreStaticIP {
opts.StaticIPs = nil
}
if restoreOptions.IgnoreStaticMAC {
opts.StaticMAC = nil
}
ctrConfig.Networks[net] = opts
}
}
ctrID := ctrConfig.ID ctrID := ctrConfig.ID
newName := false newName := false