From 88e1ea9d00219cdc8007c482766223bb2574bc64 Mon Sep 17 00:00:00 2001 From: Lawliet-Chan <1576710154@qq.com> Date: Tue, 21 Nov 2023 19:02:08 +0800 Subject: [PATCH 1/2] add extensions --- apps/extension/docker.go | 56 ++++++++++++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 2 ++ 3 files changed, 59 insertions(+) create mode 100644 apps/extension/docker.go diff --git a/apps/extension/docker.go b/apps/extension/docker.go new file mode 100644 index 00000000..45803e4e --- /dev/null +++ b/apps/extension/docker.go @@ -0,0 +1,56 @@ +package extension + +import ( + "context" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/client" + "github.com/docker/docker/pkg/stdcopy" + "io" + "os" + "path/filepath" +) + +type DockerExtension struct { +} + +type DockerExtensionConf struct { + Image string +} + +func NewDockerExtension(cfg *DockerExtensionConf) *DockerExtension { + err := startDocker(cfg) + if err != nil { + + } + +} + +func startDocker(cfg *DockerExtensionConf) error { + cli, err := client.NewClientWithOpts() + if err != nil { + return err + } + ctx := context.Background() + reader, err := cli.ImagePull(ctx, cfg.Image, types.ImagePullOptions{}) + if err != nil { + return err + } + io.Copy(os.Stdout, reader) + resp, err := cli.ContainerCreate(ctx, &container.Config{ + Image: filepath.Base(cfg.Image), + }, nil, nil, nil, "") + if err != nil { + return err + } + err = cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}) + if err != nil { + return err + } + out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) + if err != nil { + return err + } + stdcopy.StdCopy(os.Stdout, os.Stderr, out) + return nil +} diff --git a/go.mod b/go.mod index 4856ee2c..ff4e5270 100644 --- a/go.mod +++ b/go.mod @@ -49,6 +49,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 // indirect github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea // indirect + github.com/docker/docker v24.0.7+incompatible // indirect github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/getsentry/sentry-go v0.16.0 // indirect diff --git a/go.sum b/go.sum index 9043c7e2..ae3fe165 100644 --- a/go.sum +++ b/go.sum @@ -187,6 +187,8 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= +github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= From de751a14dfdfbe23021184cdacaa2b55aa7dd9a4 Mon Sep 17 00:00:00 2001 From: Lawliet-Chan <1576710154@qq.com> Date: Tue, 28 Nov 2023 18:04:54 +0800 Subject: [PATCH 2/2] new --- apps/extension/docker.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/extension/docker.go b/apps/extension/docker.go index 45803e4e..c3fe7f3f 100644 --- a/apps/extension/docker.go +++ b/apps/extension/docker.go @@ -12,18 +12,23 @@ import ( ) type DockerExtension struct { + cfg *DockerExtensionConf } type DockerExtensionConf struct { Image string } -func NewDockerExtension(cfg *DockerExtensionConf) *DockerExtension { +func NewDockerExtension(cfg *DockerExtensionConf) (*DockerExtension, error) { err := startDocker(cfg) if err != nil { - + return nil, err } - + + return &DockerExtension{ + cfg: cfg, + }, err + } func startDocker(cfg *DockerExtensionConf) error {