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