-
-
Save lblackstone/55b0d3d275e03f7173ad42659f82a8e6 to your computer and use it in GitHub Desktop.
Go Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
appsv1 "github.com/pulumi/pulumi-kubernetes/sdk/go/kubernetes/apps/v1" | |
corev1 "github.com/pulumi/pulumi-kubernetes/sdk/go/kubernetes/core/v1" | |
metav1 "github.com/pulumi/pulumi-kubernetes/sdk/go/kubernetes/meta/v1" | |
"github.com/pulumi/pulumi/sdk/go/pulumi" | |
) | |
func main() { | |
pulumi.Run(func(ctx *pulumi.Context) error { | |
redisLeaderLabels := pulumi.StringMap{ | |
"app": pulumi.String("redis"), | |
"tier": pulumi.String("backend"), | |
"role": pulumi.String("master"), | |
} | |
redisFollowerLabels := pulumi.StringMap{ | |
"app": pulumi.String("redis"), | |
"tier": pulumi.String("backend"), | |
"role": pulumi.String("slave"), | |
} | |
frontendLabels := pulumi.StringMap{ | |
"app": pulumi.String("guestbook"), | |
"tier": pulumi.String("frontend"), | |
} | |
redisLeaderContainer := corev1.ContainerArgs{ | |
Name: pulumi.String("master"), | |
Image: pulumi.String("k8s.gcr.io/redis:e2e"), | |
Resources: &corev1.ResourceRequirementsArgs{ | |
Requests: pulumi.StringMap{ | |
"cpu": pulumi.String("100m"), | |
"memory": pulumi.String("100Mi"), | |
}, | |
}, | |
Ports: corev1.ContainerPortArray{ | |
&corev1.ContainerPortArgs{ | |
ContainerPort: pulumi.IntPtr(6379), | |
}, | |
}, | |
} | |
// Redis leader Deployment | |
_, err := appsv1.NewDeployment(ctx, "redis-leader", &appsv1.DeploymentArgs{ | |
Spec: appsv1.DeploymentSpecArgs{ | |
Selector: &metav1.LabelSelectorArgs{ | |
MatchLabels: redisLeaderLabels, | |
}, | |
Replicas: pulumi.IntPtr(1), | |
Template: &corev1.PodTemplateSpecArgs{ | |
Metadata: &metav1.ObjectMetaArgs{ | |
Labels: redisLeaderLabels, | |
}, | |
Spec: &corev1.PodSpecArgs{ | |
Containers: corev1.ContainerArray{redisLeaderContainer}, | |
}, | |
}, | |
}, | |
}) | |
if err != nil { | |
return err | |
} | |
port := 6379 | |
// Redis leader Service | |
_, err = corev1.NewService(ctx, "redis-leader", &corev1.ServiceArgs{ | |
Metadata: &metav1.ObjectMetaArgs{ | |
Labels: redisLeaderLabels, | |
}, | |
Spec: &corev1.ServiceSpecArgs{ | |
Ports: corev1.ServicePortArray{ | |
corev1.ServicePortArgs{ | |
Port: pulumi.IntPtr(port), | |
TargetPort: pulumi.Any(port), | |
}, | |
}, | |
Selector: redisLeaderLabels, | |
}, | |
}) | |
if err != nil { | |
return err | |
} | |
redisFollowerContainer := corev1.ContainerArgs{ | |
Name: pulumi.String("slave"), | |
Image: pulumi.String("gcr.io/google_samples/gb-redisslave:v1"), | |
Resources: &corev1.ResourceRequirementsArgs{ | |
Requests: pulumi.StringMap{ | |
"cpu": pulumi.String("100m"), | |
"memory": pulumi.String("100Mi"), | |
}, | |
}, | |
Env: corev1.EnvVarArray{ | |
corev1.EnvVarArgs{ | |
Name: pulumi.StringPtr("GET_HOSTS_FROM"), | |
Value: pulumi.StringPtr("dns"), | |
}, | |
}, | |
Ports: corev1.ContainerPortArray{ | |
&corev1.ContainerPortArgs{ | |
ContainerPort: pulumi.IntPtr(6379), | |
}, | |
}, | |
} | |
// Redis follower Deployment | |
_, err = appsv1.NewDeployment(ctx, "redis-follower", &appsv1.DeploymentArgs{ | |
Spec: appsv1.DeploymentSpecArgs{ | |
Selector: &metav1.LabelSelectorArgs{ | |
MatchLabels: redisFollowerLabels, | |
}, | |
Replicas: pulumi.IntPtr(1), | |
Template: &corev1.PodTemplateSpecArgs{ | |
Metadata: &metav1.ObjectMetaArgs{ | |
Labels: redisFollowerLabels, | |
}, | |
Spec: &corev1.PodSpecArgs{ | |
Containers: corev1.ContainerArray{redisFollowerContainer}, | |
}, | |
}, | |
}, | |
}) | |
if err != nil { | |
return err | |
} | |
// Redis follower Service | |
_, err = corev1.NewService(ctx, "redis-follower", &corev1.ServiceArgs{ | |
Metadata: &metav1.ObjectMetaArgs{ | |
Annotations: pulumi.StringMap{"foo": pulumi.String("baa")}, | |
}, | |
Spec: &corev1.ServiceSpecArgs{ | |
Ports: corev1.ServicePortArray{ | |
corev1.ServicePortArgs{ | |
Port: pulumi.IntPtr(6379), | |
TargetPort: pulumi.Any(6379), | |
}, | |
}, | |
Selector: redisFollowerLabels, | |
}, | |
}) | |
if err != nil { | |
return err | |
} | |
frontendContainer := corev1.ContainerArgs{ | |
Name: pulumi.String("php-redis"), | |
Image: pulumi.String("gcr.io/google-samples/gb-frontend:v4"), | |
Resources: &corev1.ResourceRequirementsArgs{ | |
Requests: pulumi.StringMap{ | |
"cpu": pulumi.String("100m"), | |
"memory": pulumi.String("100Mi"), | |
}, | |
}, | |
Env: corev1.EnvVarArray{ | |
corev1.EnvVarArgs{ | |
Name: pulumi.StringPtr("GET_HOSTS_FROM"), | |
Value: pulumi.StringPtr("dns"), | |
}, | |
}, | |
Ports: corev1.ContainerPortArray{ | |
&corev1.ContainerPortArgs{ | |
ContainerPort: pulumi.IntPtr(80), | |
}, | |
}, | |
} | |
// Frontend Deployment | |
_, err = appsv1.NewDeployment(ctx, "frontend", &appsv1.DeploymentArgs{ | |
Spec: appsv1.DeploymentSpecArgs{ | |
Selector: &metav1.LabelSelectorArgs{ | |
MatchLabels: frontendLabels, | |
}, | |
Replicas: pulumi.IntPtr(1), | |
Template: &corev1.PodTemplateSpecArgs{ | |
Metadata: &metav1.ObjectMetaArgs{ | |
Labels: frontendLabels, | |
}, | |
Spec: &corev1.PodSpecArgs{ | |
Containers: corev1.ContainerArray{frontendContainer}, | |
}, | |
}, | |
}, | |
}) | |
if err != nil { | |
return err | |
} | |
// Frontend Service | |
frontendService, err := corev1.NewService(ctx, "frontend", &corev1.ServiceArgs{ | |
Spec: &corev1.ServiceSpecArgs{ | |
Type: pulumi.StringPtr("LoadBalancer"), | |
Ports: corev1.ServicePortArray{ | |
corev1.ServicePortArgs{ | |
Port: pulumi.IntPtr(80), | |
}, | |
}, | |
Selector: frontendLabels, | |
}, | |
}) | |
if err != nil { | |
return err | |
} | |
//frontendService.Status.LoadBalancer().Ingress().Index(pulumi.Int(0)).Hostname() | |
ctx.Export("frontendIP", frontendService.Status.ApplyT( | |
func(status *corev1.ServiceStatus) string { | |
ingress := status.LoadBalancer.Ingress[0] | |
ip := *ingress.Hostname | |
if len(ip) > 0 { | |
return ip | |
} | |
return *ingress.Ip | |
})) | |
//nginx := corev1.ContainerArgs{ | |
// Name: pulumi.String("nginx"), | |
// Image: pulumi.String("nginx"), | |
//} | |
// | |
//_, err := corev1.NewPod(ctx, "nginx-test", &corev1.PodArgs{ | |
// Spec: corev1.PodSpecArgs{ | |
// Containers: corev1.ContainerArray{nginx}, | |
// }, | |
//}) | |
//if err != nil { | |
// return err | |
//} | |
// | |
//labels := pulumi.StringMap{"foo": pulumi.String("bar")} | |
//_, err = appsv1.NewDeployment(ctx, "nginx-test", &appsv1.DeploymentArgs{ | |
// Spec: appsv1.DeploymentSpecArgs{ | |
// Selector: &metav1.LabelSelectorArgs{ | |
// MatchLabels: labels, | |
// }, | |
// Replicas: pulumi.IntPtr(1), | |
// Template: &corev1.PodTemplateSpecArgs{ | |
// Metadata: &metav1.ObjectMetaArgs{ | |
// Name: pulumi.String("foo"), | |
// Labels: labels, | |
// }, | |
// Spec: &corev1.PodSpecArgs{ | |
// Containers: corev1.ContainerArray{nginx}, | |
// }, | |
// }, | |
// }, | |
//}) | |
//if err != nil { | |
// return err | |
//} | |
// | |
//piContainer := corev1.ContainerArgs{ | |
// Name: pulumi.String("pi"), | |
// Image: pulumi.String("perl"), | |
// Command: pulumi.StringArray{ | |
// pulumi.String("perl"), | |
// pulumi.String("-Mbignum=bpi"), | |
// pulumi.String("-wle"), | |
// pulumi.String("print bpi(2000)"), | |
// }, | |
//} | |
// | |
//_, err = batchv1.NewJob(ctx, "pi", &batchv1.JobArgs{ | |
// Spec: batchv1.JobSpecArgs{ | |
// Template: &corev1.PodTemplateSpecArgs{ | |
// Spec: &corev1.PodSpecArgs{ | |
// Containers: corev1.ContainerArray{piContainer}, | |
// RestartPolicy: pulumi.StringPtr("Never"), | |
// }, | |
// }, | |
// BackoffLimit: pulumi.IntPtr(4), | |
// }, | |
//}) | |
return nil | |
}) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment