Skip to content

Commit d5969d2

Browse files
oci-export: Implementation for OCI image export
1 parent 8f20613 commit d5969d2

File tree

6 files changed

+120
-2
lines changed

6 files changed

+120
-2
lines changed

go.mod

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
11
module firecracker-vmbuilder
22

3+
replace github.com/WoodProgrammer/firecracker-vmbuilder/src => ./src
4+
35
go 1.24.1
6+
7+
require github.com/WoodProgrammer/firecracker-vmbuilder/src v0.0.0-00010101000000-000000000000
8+
9+
require (
10+
github.com/mattn/go-colorable v0.1.13 // indirect
11+
github.com/mattn/go-isatty v0.0.19 // indirect
12+
github.com/rs/zerolog v1.33.0 // indirect
13+
golang.org/x/sys v0.12.0 // indirect
14+
gopkg.in/yaml.v2 v2.4.0 // indirect
15+
)

go.sum

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
2+
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
3+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
4+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
5+
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
6+
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
7+
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
8+
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
9+
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
10+
github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
11+
github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
12+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
13+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
14+
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
15+
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
16+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
17+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
18+
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
19+
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=

main.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,26 @@
11
package main
22

3-
import "fmt"
3+
import (
4+
src "github.com/WoodProgrammer/firecracker-vmbuilder/src"
5+
"github.com/rs/zerolog/log"
6+
)
47

8+
func newBuildClient() src.Builder {
9+
return &src.BuildHandler{}
10+
}
11+
12+
func newParserClient() src.Parser {
13+
return &src.ParseHandler{}
14+
}
515
func main() {
6-
fmt.Println("This is firecracker vmbuilder 0.0.1")
16+
parserCli := newParserClient()
17+
buildCLi := newBuildClient()
18+
19+
result, err := parserCli.ParseYamlFile("config.yaml")
20+
if err != nil {
21+
log.Err(err).Msg("Error while running parserCli.ParseYamlFile()")
22+
}
23+
24+
buildCLi.BuildExportDockerImage(result.Context, result.DockerfilePath, result.TargetDirectory)
25+
726
}

src/container.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package src
2+
3+
import (
4+
"os/exec"
5+
6+
"github.com/rs/zerolog/log"
7+
)
8+
9+
type Builder interface {
10+
BuildExportDockerImage(context, dockerFile, targetDirectory string) error
11+
}
12+
13+
type BuildHandler struct{}
14+
15+
func (buildClient *BuildHandler) BuildExportDockerImage(context, dockerFile, targetDirectory string) error {
16+
cmd := exec.Command("docker", "buildx", "build", "-f", dockerFile, "--output", targetDirectory, context)
17+
18+
output, err := cmd.CombinedOutput()
19+
if err != nil {
20+
log.Err(err).Msg("docker buildx error :")
21+
return err
22+
}
23+
log.Info().Msgf("Build Result %s", string(output))
24+
return nil
25+
}

src/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module firecracker-vmbuilder/src
2+
3+
go 1.24.1

src/parser.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package src
2+
3+
import (
4+
"os"
5+
6+
"github.com/rs/zerolog/log"
7+
yaml "gopkg.in/yaml.v2"
8+
)
9+
10+
type RootFSManifest struct {
11+
Image string `yaml:"image"`
12+
TargetDirectory string `yaml:"target_directory"`
13+
RootFsRegistry string `yaml:"rootfs_registry"`
14+
Context string `yaml:"context"`
15+
DockerfilePath string `yaml:"docker_file"`
16+
}
17+
18+
type Parser interface {
19+
ParseYamlFile(configFile string) (RootFSManifest, error)
20+
}
21+
22+
type ParseHandler struct{}
23+
24+
func (parser *ParseHandler) ParseYamlFile(configFile string) (RootFSManifest, error) {
25+
var config RootFSManifest
26+
data, err := os.ReadFile("config.yaml")
27+
28+
if err != nil {
29+
log.Err(err).Msg("Error reading YAML file:")
30+
return config, err
31+
}
32+
33+
err = yaml.Unmarshal(data, &config)
34+
if err != nil {
35+
log.Err(err).Msg("Error parsing YAML:")
36+
return config, err
37+
}
38+
39+
return config, nil
40+
}

0 commit comments

Comments
 (0)