File: config_extractor.go

package info (click to toggle)
golang-github-checkpoint-restore-checkpointctl 1.3.0%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 524 kB
  • sloc: ansic: 208; makefile: 172; sh: 40
file content (53 lines) | stat: -rw-r--r-- 1,344 bytes parent folder | download
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
}