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
2021-06-26 01:26:06 +01:00

75 lines
2 KiB
Go

package docker
import (
"fmt"
"github.com/pulumi/pulumi-docker/sdk/v3/go/docker"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
// DockerContainerConfig is the configuration
// used to create the Gitea docker container.
type DockerContainerConfig struct {
Image pulumi.StringInput
Ipv4Address pulumi.StringInput
EnvVars pulumi.StringArray
Name pulumi.StringInput
Network pulumi.StringInput
Volumes []DockerVolumeConfig
}
// VolumeConfig is the configuration
// used for mounting a host directory
// to a directory inside a container.
type DockerVolumeConfig struct {
HostPath pulumi.StringInput
MountPath pulumi.StringInput
}
func CreateDockerContainer(ctx *pulumi.Context, c DockerContainerConfig) 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),
},
}
// create additional (optional) 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, "gitea_container", &args)
if err != nil {
return fmt.Errorf("unable to create the Gitea docker container, %w", err)
}
return nil
}