pulumi-library/pkg/workload/deployment.go

89 lines
2.4 KiB
Go

package workload
import (
"fmt"
v12 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/apps/v1"
"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/core/v1"
v13 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/meta/v1"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
type DeploymentConfiguration struct {
Env map[string]string
Name string
Replicas int
ImageReference *ImageReference
}
type ImageReference struct {
Image string
Health string
Ready string
}
func (deployment *DeploymentConfiguration) CreateDeployment(
ctx *pulumi.Context,
namespace *v1.Namespace,
parentApplication pulumi.Resource,
appLabels pulumi.StringMap,
) (*v12.Deployment, error) {
env := v1.EnvVarArray{}
for key, value := range deployment.Env {
env = append(env, &v1.EnvVarArgs{
Name: pulumi.String(key),
Value: pulumi.String(value),
})
}
return v12.NewDeployment(ctx, fmt.Sprintf("%s-deployment", deployment.Name), &v12.DeploymentArgs{
Metadata: &v13.ObjectMetaArgs{
Namespace: namespace.Metadata.Name(),
Labels: pulumi.StringMap{
"app.kubernetes.io/part-of": pulumi.String(deployment.Name),
"app.kubernetes.io/managed-by": pulumi.String("pulumi"),
},
},
Spec: v12.DeploymentSpecArgs{
Selector: &v13.LabelSelectorArgs{
MatchLabels: appLabels,
},
Replicas: pulumi.Int(deployment.Replicas),
Template: &v1.PodTemplateSpecArgs{
Metadata: &v13.ObjectMetaArgs{
Labels: appLabels,
},
Spec: &v1.PodSpecArgs{
Containers: v1.ContainerArray{
v1.ContainerArgs{
Name: pulumi.String(deployment.Name),
Image: pulumi.String(deployment.ImageReference.Image),
Ports: v1.ContainerPortArray{
v1.ContainerPortArgs{
Name: pulumi.String("http"),
ContainerPort: pulumi.Int(80),
Protocol: pulumi.String("TCP"),
},
},
Env: env,
LivenessProbe: &v1.ProbeArgs{
HttpGet: &v1.HTTPGetActionArgs{
Path: pulumi.String(deployment.ImageReference.Health),
Port: pulumi.Int(80),
},
InitialDelaySeconds: pulumi.Int(70),
PeriodSeconds: pulumi.Int(15),
},
ReadinessProbe: &v1.ProbeArgs{
HttpGet: &v1.HTTPGetActionArgs{
Path: pulumi.String(deployment.ImageReference.Ready),
Port: pulumi.Int(80),
},
},
},
},
},
},
},
}, pulumi.Parent(parentApplication))
}