Skip to content

Commit

Permalink
moved daemon and stage code into their own repositories
Browse files Browse the repository at this point in the history
  • Loading branch information
oclaussen committed Feb 10, 2020
1 parent 839e887 commit 3c7e042
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 90 deletions.
29 changes: 24 additions & 5 deletions pkg/container/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,27 @@ import (
"github.com/docker/docker/pkg/stringid"
"github.com/docker/docker/pkg/term"
"github.com/oclaussen/dodo/pkg/image"
"github.com/oclaussen/dodo/pkg/stage"
"github.com/oclaussen/dodo/pkg/types"
log "github.com/sirupsen/logrus"
"golang.org/x/net/context"
)

const (
DefaultAPIVersion = "1.39"
)

type Container struct {
name string
daemon bool
config *types.Backdrop
stage stage.Stage
client *client.Client
context context.Context
tmpPath string
authConfigs map[string]dockerapi.AuthConfig
}

func NewContainer(config *types.Backdrop, s stage.Stage, authConfigs map[string]dockerapi.AuthConfig, daemon bool) (*Container, error) {
dockerClient, err := stage.GetDockerClient(s)
func NewContainer(config *types.Backdrop, authConfigs map[string]dockerapi.AuthConfig, daemon bool) (*Container, error) {
dockerClient, err := getDockerClient()
if err != nil {
return nil, err
}
Expand All @@ -42,7 +45,6 @@ func NewContainer(config *types.Backdrop, s stage.Stage, authConfigs map[string]
name: name,
daemon: daemon,
config: config,
stage: s,
client: dockerClient,
context: context.Background(),
tmpPath: fmt.Sprintf("/tmp/dodo-%s/", stringid.GenerateRandomID()[:20]),
Expand Down Expand Up @@ -109,3 +111,20 @@ func hasTTY() bool {
_, outTerm := term.GetFdInfo(os.Stdout)
return inTerm && outTerm
}

func getDockerClient() (*client.Client, error) {
opts := &configuration.ClientOptions{}
mutators := []client.Opt{}
if len(opts.Version) > 0 {
mutators = append(mutators, client.WithVersion(opts.Version))
} else {
mutators = append(mutators, client.WithVersion(DefaultAPIVersion))
}
if len(opts.Host) > 0 {
mutators = append(mutators, client.WithHost(opts.Host))
}
if len(opts.CAFile)+len(opts.CertFile)+len(opts.KeyFile) > 0 {
mutators = append(mutators, client.WithTLSClientConfig(opts.CAFile, opts.CertFile, opts.KeyFile))
}
return client.NewClientWithOpts(mutators...)
}
28 changes: 2 additions & 26 deletions pkg/container/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,9 @@ import (

"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/network"
"github.com/oclaussen/dodo/pkg/stage"
"github.com/oclaussen/dodo/pkg/types"
)

func (c *Container) create(image string) (string, error) {
opts, err := c.stage.GetDockerOptions()
if err != nil {
return "", err
}

entrypoint, command := c.dockerEntrypoint()
response, err := c.client.ContainerCreate(
c.context,
Expand All @@ -26,7 +19,7 @@ func (c *Container) create(image string) (string, error) {
Tty: hasTTY() && !c.daemon,
OpenStdin: !c.daemon,
StdinOnce: !c.daemon,
Env: c.dockerEnvironment(opts),
Env: c.config.Environment.Strings(),
Cmd: command,
Image: image,
WorkingDir: c.config.WorkingDir,
Expand Down Expand Up @@ -60,16 +53,11 @@ func (c *Container) create(image string) (string, error) {
}

if len(c.config.Script) > 0 {
if err = c.uploadEntrypoint(response.ID); err != nil {
if err := c.UploadFile(response.ID, "entrypoint", []byte(c.config.Script+"\n")); err != nil {
return "", err
}
}

if c.config.ForwardStage {
if err = c.uploadStageConfig(response.ID, opts); err != nil {
return "", err
}
}
return response.ID, nil
}

Expand All @@ -89,18 +77,6 @@ func (c *Container) dockerEntrypoint() ([]string, []string) {
return entrypoint, command
}

func (c *Container) dockerEnvironment(opts *stage.DockerOptions) []string {
env := c.config.Environment
if c.config.ForwardStage {
yes := "1"
env = append(env, types.KeyValue{"DOCKER_HOST", &opts.Host})
env = append(env, types.KeyValue{"DOCKER_API_VERSION", &opts.Version})
env = append(env, types.KeyValue{"DOCKER_CERT_PATH", &c.tmpPath})
env = append(env, types.KeyValue{"DOCKER_TLS_VERIFY", &yes})
}
return env.Strings()
}

func (c *Container) dockerRestartPolicy() container.RestartPolicy {
if c.daemon {
return container.RestartPolicy{Name: "always"}
Expand Down
60 changes: 1 addition & 59 deletions pkg/container/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,71 +2,13 @@ package container

import (
"archive/tar"
"encoding/json"
"io"
"io/ioutil"
"path"

dockerapi "github.com/docker/docker/api/types"
"github.com/oclaussen/dodo/pkg/stage"
)

func (container *Container) uploadEntrypoint(containerID string) error {
return container.uploadFile(containerID, "entrypoint", []byte(container.config.Script+"\n"))
}

func (container *Container) uploadStageConfig(containerID string, opts *stage.DockerOptions) error {
newOpts := &stage.DockerOptions{
Version: opts.Version,
Host: opts.Host,
}

if len(opts.CAFile) > 0 {
data, err := ioutil.ReadFile(opts.CAFile)
if err != nil {
return err
}
if err := container.uploadFile(containerID, "ca.pem", data); err != nil {
return err
}
newOpts.CAFile = path.Join(container.tmpPath, "ca.pem")
}

if len(opts.CertFile) > 0 {
data, err := ioutil.ReadFile(opts.CertFile)
if err != nil {
return err
}
if err := container.uploadFile(containerID, "cert.pem", data); err != nil {
return err
}
newOpts.CertFile = path.Join(container.tmpPath, "cert.pem")
}

if len(opts.KeyFile) > 0 {
data, err := ioutil.ReadFile(opts.KeyFile)
if err != nil {
return err
}
if err := container.uploadFile(containerID, "key.pem", data); err != nil {
return err
}
newOpts.KeyFile = path.Join(container.tmpPath, "key.pem")
}

data, err := json.Marshal(newOpts)
if err != nil {
return err
}

if err := container.uploadFile(containerID, "stagecfg.json", data); err != nil {
return err
}

return nil
}

func (container *Container) uploadFile(containerID string, name string, contents []byte) error {
func (container *Container) UploadFile(containerID string, name string, contents []byte) error {
reader, writer := io.Pipe()
defer reader.Close()
defer writer.Close()
Expand Down

0 comments on commit 3c7e042

Please sign in to comment.