feat: docker package
This commit is contained in:
parent
5e2109cda3
commit
a7e8a71dff
4 changed files with 144 additions and 0 deletions
75
internal/docker/container.go
Normal file
75
internal/docker/container.go
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
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
|
||||||
|
}
|
34
internal/docker/image.go
Normal file
34
internal/docker/image.go
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
package docker
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/pulumi/pulumi-docker/sdk/v3/go/docker"
|
||||||
|
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DockerImageConfig is the configuration
|
||||||
|
// used to create the local Gitea docker
|
||||||
|
// image.
|
||||||
|
type DockerImageConfig struct {
|
||||||
|
ImageName pulumi.StringInput
|
||||||
|
BuildContext pulumi.StringInput
|
||||||
|
Version pulumi.StringInput
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateDockerImage creates a local Docker image.
|
||||||
|
func CreateDockerImage(ctx *pulumi.Context, c DockerImageConfig) error {
|
||||||
|
args := docker.ImageArgs{
|
||||||
|
ImageName: c.ImageName,
|
||||||
|
SkipPush: pulumi.Bool(true),
|
||||||
|
Build: docker.DockerBuildArgs{
|
||||||
|
Context: c.BuildContext,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := docker.NewImage(ctx, "gitea_image", &args)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to create the Gitea docker image, %w", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
35
internal/docker/network.go
Normal file
35
internal/docker/network.go
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
package docker
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/pulumi/pulumi-docker/sdk/v3/go/docker"
|
||||||
|
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DockerNetworkConfig is the configuration
|
||||||
|
// used for creating a Docker network.
|
||||||
|
type DockerNetworkConfig struct {
|
||||||
|
Name pulumi.StringInput
|
||||||
|
Subnet pulumi.StringInput
|
||||||
|
Driver pulumi.StringInput
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateNetwork creates the forge platform's Docker network.
|
||||||
|
func CreateNetwork(ctx *pulumi.Context, c DockerNetworkConfig, label string) error {
|
||||||
|
args := docker.NetworkArgs{
|
||||||
|
Name: c.Name,
|
||||||
|
IpamDriver: c.Driver,
|
||||||
|
IpamConfigs: docker.NetworkIpamConfigArray{
|
||||||
|
docker.NetworkIpamConfigArgs{
|
||||||
|
Subnet: c.Subnet,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := docker.NewNetwork(ctx, label, &args)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to create the docker network, %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
0
internal/stacks/actions.go
Normal file
0
internal/stacks/actions.go
Normal file
Reference in a new issue