Skip to content

Instantly share code, notes, and snippets.

@lblackstone
Last active March 20, 2020 23:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lblackstone/55b0d3d275e03f7173ad42659f82a8e6 to your computer and use it in GitHub Desktop.
Save lblackstone/55b0d3d275e03f7173ad42659f82a8e6 to your computer and use it in GitHub Desktop.
Go Example
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