about summary refs log tree commit diff
path: root/src/docker.go
blob: 71075c68fc5d6791249e2be8785b47a564dcd1a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package main

import (
	"context"
	"log"
	"os"

	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/mount"
	"github.com/docker/docker/api/types/network"
	"github.com/docker/docker/client"
)

const (
	fixedDockerVersion = "1.38"
)

var (
	dockerCtx context.Context
	dockerCLI *client.Client
)

func setupContext() {
	if dockerCtx == nil {
		dockerCtx = context.Background()
	}
}

func setupDockerCLI() (err error) {
	os.Setenv("DOCKER_API_VERSION", "1.27")
	if dockerCLI == nil {
		dockerCLI, err = client.NewEnvClient()
	}
	return err
}

func spawnCompanion(username string, accesscode string) string {
	log.Println("Spwaning a new companion container")
	// setup the context and the docker cli connection
	setupContext()
	setupDockerCLI()

	Config := &container.Config{
		// companion seed
		Image: "circus-companion:latest",
		//
		// username
		// accesscode
		// sessionsalt
		// vpnremote address
		// vpnrempte port
		Cmd: []string{"-username", username, "-accesscode", accesscode},
	}

	HostConfig := &container.HostConfig{
		// ports (nat.PortMap)
		// docker socket
		Mounts: []mount.Mount{
			{
				Type:   mount.TypeBind,
				Source: "/var/run/docker.sock",
				Target: "/var/run/docker.sock",
			},
		},
	}

	NetworkingConfig := &network.NetworkingConfig{
		// network
	}

	_, err := dockerCLI.ContainerCreate(dockerCtx, Config, HostConfig, NetworkingConfig, "")
	if err != nil {
		panic(err)
	}

	return accesscode
}