gitee.com/leisunstar/runtime@v0.0.0-20200521203717-5cef3e7b53f9/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  }