From 1ceee8d33bbfbd22b4ab8f347a8533c32ba2789c Mon Sep 17 00:00:00 2001 From: Lou Marvin Caraig Date: Tue, 26 May 2020 21:37:55 +0200 Subject: [PATCH] Add installation of packages on environment creation Signed-off-by: Lou Marvin Caraig --- internal/environment/environment.go | 33 ++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/internal/environment/environment.go b/internal/environment/environment.go index 078fbe3..39a63d2 100644 --- a/internal/environment/environment.go +++ b/internal/environment/environment.go @@ -15,6 +15,7 @@ import ( "github.com/docker/docker/client" "github.com/docker/docker/pkg/jsonmessage" "github.com/docker/docker/pkg/term" + "github.com/se7entyse7en/pydockenv/internal/dependency" "github.com/se7entyse7en/pydockenv/internal/utils" "github.com/se7entyse7en/pydockenv/log" "github.com/sirupsen/logrus" @@ -107,7 +108,7 @@ func Create(conf *Config) error { return err } - _, err = cli.ContainerCreate( + c, err := cli.ContainerCreate( context.Background(), &container.Config{ Image: contImg, @@ -138,6 +139,36 @@ func Create(conf *Config) error { ctxLogger.Debug("Container created!") + contInfo, err := cli.ContainerInspect(context.Background(), c.ID) + if err != nil { + return fmt.Errorf("cannot inspect container: %w", err) + } + + if len(conf.Dependencies) == 0 { + return nil + } + + ctxLogger.Debugf("Installing %d dependencies...", len(conf.Dependencies)) + err = cli.ContainerStart(context.Background(), contName, + types.ContainerStartOptions{}) + if err != nil { + return fmt.Errorf("cannot start container: %w", err) + } + + err = dependency.InstallForContainer(contInfo, &dependency.Requirements{ + Packages: dependency.Packages{Dependencies: conf.Dependencies}, + }) + if err != nil { + return fmt.Errorf("cannot execute command in container: %w", err) + } + + err = cli.ContainerStop(context.Background(), contName, nil) + if err != nil { + return fmt.Errorf("cannot stop container: %w", err) + } + + ctxLogger.Debug("Dependencies installed!") + return nil }