Dan Anglin
fda0d6a682
This commit adds the new containers stack which now builds the traefik docker image and creates the traefik docker container. Pulumi needed to be downgraded to version 3.2.1 because later versions panic when building the docker image.
76 lines
2.1 KiB
Go
76 lines
2.1 KiB
Go
package docker
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/pulumi/pulumi-docker/sdk/v3/go/docker"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
|
|
)
|
|
|
|
// DockerContainerInput is the configuration
|
|
// used to create the Gitea docker container.
|
|
type DockerContainerInput struct {
|
|
Image pulumi.StringInput
|
|
Ipv4Address pulumi.StringInput
|
|
EnvVars pulumi.StringArray
|
|
Name pulumi.StringInput
|
|
Network pulumi.StringInput
|
|
Volumes []DockerVolumeMount
|
|
UniqueLabel string
|
|
}
|
|
|
|
// DockerVolumeMount is the configuration
|
|
// used for mounting a host directory
|
|
// to a directory inside a container.
|
|
type DockerVolumeMount struct {
|
|
HostPath pulumi.StringInput
|
|
MountPath pulumi.StringInput
|
|
}
|
|
|
|
func CreateDockerContainer(ctx *pulumi.Context, c DockerContainerInput) error {
|
|
// all containers will mount the host's timezone and localtime files
|
|
// to ensure the correct time is synced.
|
|
volumes := []docker.ContainerVolumeInput{
|
|
docker.ContainerVolumeArgs{
|
|
ContainerPath: pulumi.String("/etc/timezone"),
|
|
HostPath: pulumi.String("/etc/timezone"),
|
|
ReadOnly: pulumi.BoolPtr(true),
|
|
},
|
|
docker.ContainerVolumeArgs{
|
|
ContainerPath: pulumi.String("/etc/localtime"),
|
|
HostPath: pulumi.String("/etc/localtime"),
|
|
ReadOnly: pulumi.BoolPtr(true),
|
|
},
|
|
}
|
|
|
|
// optionally create additional container volumes.
|
|
for _, v := range c.Volumes {
|
|
vArg := docker.ContainerVolumeArgs{
|
|
ContainerPath: v.MountPath,
|
|
HostPath: v.HostPath,
|
|
}
|
|
volumes = append(volumes, vArg)
|
|
}
|
|
|
|
args := docker.ContainerArgs{
|
|
Envs: c.EnvVars,
|
|
Image: c.Image,
|
|
Hostname: c.Name,
|
|
Name: c.Name,
|
|
NetworksAdvanced: docker.ContainerNetworksAdvancedArray{
|
|
docker.ContainerNetworksAdvancedArgs{
|
|
Name: c.Network,
|
|
Ipv4Address: c.Ipv4Address,
|
|
},
|
|
},
|
|
Restart: pulumi.String("unless-stopped"),
|
|
Volumes: docker.ContainerVolumeArray(volumes),
|
|
}
|
|
|
|
_, err := docker.NewContainer(ctx, fmt.Sprintf("%s_container", c.UniqueLabel), &args)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to create the Docker container for %s...\n%w", c.UniqueLabel, err)
|
|
}
|
|
|
|
return nil
|
|
}
|