This repository has been archived on 2023-05-06. You can view files and clone it, but cannot push or open issues or pull requests.
helix/internal/docker/container.go

77 lines
2 KiB
Go
Raw Normal View History

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"
)
// DockerContainerInput is the configuration
2021-06-26 01:26:06 +01:00
// used to create the Gitea docker container.
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
Volumes []DockerVolumeMount
UniqueLabel string
2021-06-26 01:26:06 +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.
type DockerVolumeMount struct {
2021-06-26 01:26:06 +01:00
HostPath pulumi.StringInput
MountPath pulumi.StringInput
}
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),
},
}
// 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),
}
_, err := docker.NewContainer(ctx, fmt.Sprintf("%s_container", c.UniqueLabel), &args)
2021-06-26 01:26:06 +01:00
if err != nil {
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
}