1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
package internal
import (
"log"
"os"
"time"
metadata "github.com/checkpoint-restore/checkpointctl/lib"
)
type ChkptConfig struct {
Namespace string
Pod string
Container string
ContainerManager string
Timestamp time.Time
}
func ExtractConfigDump(checkpointPath string) (*ChkptConfig, error) {
tempDir, err := os.MkdirTemp("", "extracted-checkpoint")
if err != nil {
return nil, err
}
defer os.RemoveAll(tempDir)
filesToExtract := []string{"spec.dump", "config.dump"}
if err := UntarFiles(checkpointPath, tempDir, filesToExtract); err != nil {
log.Printf("Error extracting files from archive %s: %v\n", checkpointPath, err)
return nil, err
}
info := &checkpointInfo{}
info.configDump, _, err = metadata.ReadContainerCheckpointConfigDump(tempDir)
if err != nil {
return nil, err
}
info.specDump, _, err = metadata.ReadContainerCheckpointSpecDump(tempDir)
if err != nil {
return nil, err
}
info.containerInfo, err = getContainerInfo(info.specDump, info.configDump)
if err != nil {
return nil, err
}
return &ChkptConfig{
Namespace: info.containerInfo.Namespace,
Pod: info.containerInfo.Pod,
Container: info.containerInfo.Name,
ContainerManager: info.containerInfo.Engine,
Timestamp: info.configDump.CheckpointedAt,
}, nil
}
|