github.com/kata-containers/runtime@v0.0.0-20210505125100-04f29832a923/pkg/katautils/container_engine.go (about) 1 // Copyright (c) 2019 SUSE LLC 2 // 3 // SPDX-License-Identifier: Apache-2.0 4 // 5 6 package katautils 7 8 import ( 9 "os/exec" 10 ) 11 12 type CtrEngine struct { 13 Name string 14 } 15 16 var ( 17 DockerLikeCtrEngines = []string{"docker", "podman"} 18 ) 19 20 func (e *CtrEngine) Init(name string) (string, error) { 21 var out string 22 out, err := RunCommandFull([]string{name, "version"}, true) 23 if err != nil { 24 return out, err 25 } 26 27 e.Name = name 28 return out, nil 29 } 30 31 func (e *CtrEngine) Inspect(image string) (string, error) { 32 // Only hit the network if the image doesn't exist locally 33 return RunCommand([]string{e.Name, "inspect", "--type=image", image}) 34 } 35 36 func (e *CtrEngine) Pull(image string) (string, error) { 37 return RunCommand([]string{e.Name, "pull", image}) 38 } 39 40 func (e *CtrEngine) Create(image string) (string, error) { 41 return RunCommand([]string{e.Name, "create", image}) 42 } 43 44 func (e *CtrEngine) Rm(ctrID string) (string, error) { 45 return RunCommand([]string{e.Name, "rm", ctrID}) 46 } 47 48 func (e *CtrEngine) GetRootfs(ctrID string, dir string) error { 49 cmd1 := exec.Command(e.Name, "export", ctrID) 50 cmd2 := exec.Command("tar", "-C", dir, "-xvf", "-") 51 52 cmd1Stdout, err := cmd1.StdoutPipe() 53 if err != nil { 54 return err 55 } 56 57 cmd2.Stdin = cmd1Stdout 58 59 err = cmd2.Start() 60 if err != nil { 61 return err 62 } 63 64 err = cmd1.Run() 65 if err != nil { 66 return err 67 } 68 69 err = cmd2.Wait() 70 if err != nil { 71 return err 72 } 73 74 return nil 75 }