2021-06-26 01:26:06 +01:00
|
|
|
package docker
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/pulumi/pulumi-docker/sdk/v3/go/docker"
|
|
|
|
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
|
|
|
|
)
|
|
|
|
|
2021-07-10 12:41:15 +01:00
|
|
|
// DockerContainerInput is the configuration
|
2021-06-26 01:26:06 +01:00
|
|
|
// used to create the Gitea docker container.
|
2021-07-10 12:41:15 +01:00
|
|
|
type DockerContainerInput struct {
|
2021-06-26 01:26:06 +01:00
|
|
|
Image pulumi.StringInput
|
|
|
|
Ipv4Address pulumi.StringInput
|
|
|
|
EnvVars pulumi.StringArray
|
|
|
|
Name pulumi.StringInput
|
|
|
|
Network pulumi.StringInput
|
2021-07-10 12:41:15 +01:00
|
|
|
Volumes []DockerVolumeMount
|
|
|
|
UniqueLabel string
|
2021-06-26 01:26:06 +01:00
|
|
|
}
|
|
|
|
|
2021-07-10 12:41:15 +01:00
|
|
|
// DockerVolumeMount is the configuration
|
2021-06-26 01:26:06 +01:00
|
|
|
// used for mounting a host directory
|
|
|
|
// to a directory inside a container.
|
2021-07-10 12:41:15 +01:00
|
|
|
type DockerVolumeMount struct {
|
2021-06-26 01:26:06 +01:00
|
|
|
HostPath pulumi.StringInput
|
|
|
|
MountPath pulumi.StringInput
|
|
|
|
}
|
|
|
|
|
2021-07-11 13:32:01 +01:00
|
|
|
func CreateContainer(ctx *pulumi.Context, c DockerContainerInput) error {
|
2021-06-26 01:26:06 +01:00
|
|
|
// 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),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2021-07-10 12:41:15 +01:00
|
|
|
// optionally create additional container volumes.
|
2021-06-26 01:26:06 +01:00
|
|
|
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),
|
|
|
|
}
|
|
|
|
|
2021-07-10 12:41:15 +01:00
|
|
|
_, err := docker.NewContainer(ctx, fmt.Sprintf("%s_container", c.UniqueLabel), &args)
|
2021-06-26 01:26:06 +01:00
|
|
|
if err != nil {
|
2021-07-10 12:41:15 +01:00
|
|
|
return fmt.Errorf("unable to create the Docker container for %s...\n%w", c.UniqueLabel, err)
|
2021-06-26 01:26:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|