Skip to content

Commit c318e88

Browse files
authored
Fixing up Kubernetes Guestbook Examples (#678)
1 parent 55ccdf4 commit c318e88

File tree

18 files changed

+545
-31
lines changed

18 files changed

+545
-31
lines changed

.github/workflows/ci.yml

+202
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,205 @@ jobs:
123123
run: make install
124124
- name: Lint typescript files
125125
run: make lint
126+
test-infra-setup:
127+
strategy:
128+
fail-fast: false
129+
matrix:
130+
platform: [ubuntu-latest]
131+
go-version: [1.13.x]
132+
node-version: [10.x]
133+
python-version: [3.7]
134+
dotnet-version: ['3.1.100']
135+
runs-on: ${{ matrix.platform }}
136+
steps:
137+
- name: Install DotNet ${{ matrix.dotnet-version }}
138+
uses: actions/setup-dotnet@v1
139+
with:
140+
dotnet-version: ${{ matrix.dotnet-version }}
141+
- name: Use Node.js ${{ matrix.node-version }}
142+
uses: actions/setup-node@v1
143+
with:
144+
node-version: ${{ matrix.node-version }}
145+
- name: Set up Go ${{ matrix.go-version }}
146+
uses: actions/setup-go@v1
147+
with:
148+
go-version: ${{ matrix.go-version }}
149+
- name: Set up Python ${{ matrix.python-version }}
150+
uses: actions/setup-python@v1
151+
with:
152+
python-version: ${{ matrix.python-version }}
153+
- name: Install Python Deps
154+
run: |
155+
pip3 install pipenv
156+
- name: Install aws-iam-authenticator
157+
run: |
158+
curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.13.7/2019-06-11/bin/linux/amd64/aws-iam-authenticator
159+
chmod +x ./aws-iam-authenticator
160+
sudo mv aws-iam-authenticator /usr/local/bin
161+
- name: Install Kubectl
162+
run: |
163+
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
164+
chmod +x ./kubectl
165+
sudo mv kubectl /usr/local/bin
166+
- uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
167+
with:
168+
version: '285.0.0'
169+
project_id: ${{ secrets.GCP_PROJECT_ID }}
170+
service_account_email: ${{ secrets.GCP_SA_EMAIL }}
171+
service_account_key: ${{ secrets.GCP_SA_KEY }}
172+
- name: Install helm
173+
run: |
174+
curl -o- -L https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
175+
- name: Configure helm
176+
run: |
177+
helm init -c
178+
helm repo add bitnami https://charts.bitnami.com/bitnami
179+
- name: Set Azure DNS
180+
run: |
181+
echo "$(getent hosts $ARM_LOCATION.management.azure.com | awk '{ print $1 }') management.azure.com" | sudo tee --append /etc/hosts
182+
- name: Login to Google Cloud Registry
183+
run: |
184+
gcloud --quiet auth configure-docker
185+
- name: Install Pulumi CLI
186+
uses: pulumi/action-install-pulumi-cli@releases/v1
187+
- uses: actions/checkout@v2
188+
- name: Create test infra
189+
run: |
190+
make setup_test_infra StackName="${{ secrets.PULUMI_TEST_OWNER }}/${{ github.sha }}"
191+
test-infra-destroy:
192+
needs: kubernetes
193+
strategy:
194+
fail-fast: false
195+
matrix:
196+
platform: [ubuntu-latest]
197+
go-version: [1.13.x]
198+
node-version: [10.x]
199+
python-version: [3.7]
200+
dotnet-version: ['3.1.100']
201+
runs-on: ${{ matrix.platform }}
202+
steps:
203+
- name: Install DotNet ${{ matrix.dotnet-version }}
204+
uses: actions/setup-dotnet@v1
205+
with:
206+
dotnet-version: ${{ matrix.dotnet-version }}
207+
- name: Use Node.js ${{ matrix.node-version }}
208+
uses: actions/setup-node@v1
209+
with:
210+
node-version: ${{ matrix.node-version }}
211+
- name: Set up Go ${{ matrix.go-version }}
212+
uses: actions/setup-go@v1
213+
with:
214+
go-version: ${{ matrix.go-version }}
215+
- name: Set up Python ${{ matrix.python-version }}
216+
uses: actions/setup-python@v1
217+
with:
218+
python-version: ${{ matrix.python-version }}
219+
- name: Install Python Deps
220+
run: |
221+
pip3 install pipenv
222+
- name: Install aws-iam-authenticator
223+
run: |
224+
curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.13.7/2019-06-11/bin/linux/amd64/aws-iam-authenticator
225+
chmod +x ./aws-iam-authenticator
226+
sudo mv aws-iam-authenticator /usr/local/bin
227+
- name: Install Kubectl
228+
run: |
229+
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
230+
chmod +x ./kubectl
231+
sudo mv kubectl /usr/local/bin
232+
- uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
233+
with:
234+
version: '285.0.0'
235+
project_id: ${{ secrets.GCP_PROJECT_ID }}
236+
service_account_email: ${{ secrets.GCP_SA_EMAIL }}
237+
service_account_key: ${{ secrets.GCP_SA_KEY }}
238+
- name: Install helm
239+
run: |
240+
curl -o- -L https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
241+
- name: Configure helm
242+
run: |
243+
helm init -c
244+
helm repo add bitnami https://charts.bitnami.com/bitnami
245+
- name: Set Azure DNS
246+
run: |
247+
echo "$(getent hosts $ARM_LOCATION.management.azure.com | awk '{ print $1 }') management.azure.com" | sudo tee --append /etc/hosts
248+
- name: Login to Google Cloud Registry
249+
run: |
250+
gcloud --quiet auth configure-docker
251+
- name: Install Pulumi CLI
252+
uses: pulumi/action-install-pulumi-cli@releases/v1
253+
- uses: actions/checkout@v2
254+
- name: Destroy test infra
255+
run: |
256+
make destroy_test_infra StackName="${{ secrets.PULUMI_TEST_OWNER }}/${{ github.sha }}"
257+
kubernetes:
258+
needs: test-infra-setup
259+
strategy:
260+
fail-fast: false
261+
matrix:
262+
platform: [ubuntu-latest]
263+
go-version: [1.13.x]
264+
node-version: [10.x]
265+
python-version: [3.7]
266+
dotnet-version: ['3.1.100']
267+
runs-on: ${{ matrix.platform }}
268+
steps:
269+
- name: Install DotNet ${{ matrix.dotnet-version }}
270+
uses: actions/setup-dotnet@v1
271+
with:
272+
dotnet-version: ${{ matrix.dotnet-version }}
273+
- name: Use Node.js ${{ matrix.node-version }}
274+
uses: actions/setup-node@v1
275+
with:
276+
node-version: ${{ matrix.node-version }}
277+
- name: Set up Go ${{ matrix.go-version }}
278+
uses: actions/setup-go@v1
279+
with:
280+
go-version: ${{ matrix.go-version }}
281+
- name: Set up Python ${{ matrix.python-version }}
282+
uses: actions/setup-python@v1
283+
with:
284+
python-version: ${{ matrix.python-version }}
285+
- name: Install Python Deps
286+
run: |
287+
pip3 install pipenv
288+
- name: Install aws-iam-authenticator
289+
run: |
290+
curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.13.7/2019-06-11/bin/linux/amd64/aws-iam-authenticator
291+
chmod +x ./aws-iam-authenticator
292+
sudo mv aws-iam-authenticator /usr/local/bin
293+
- name: Install Kubectl
294+
run: |
295+
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
296+
chmod +x ./kubectl
297+
sudo mv kubectl /usr/local/bin
298+
- uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
299+
with:
300+
version: '285.0.0'
301+
project_id: ${{ secrets.GCP_PROJECT_ID }}
302+
service_account_email: ${{ secrets.GCP_SA_EMAIL }}
303+
service_account_key: ${{ secrets.GCP_SA_KEY }}
304+
- name: Install helm
305+
run: |
306+
curl -o- -L https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
307+
- name: Configure helm
308+
run: |
309+
helm init -c
310+
helm repo add bitnami https://charts.bitnami.com/bitnami
311+
- name: Set Azure DNS
312+
run: |
313+
echo "$(getent hosts $ARM_LOCATION.management.azure.com | awk '{ print $1 }') management.azure.com" | sudo tee --append /etc/hosts
314+
- name: Login to Google Cloud Registry
315+
run: |
316+
gcloud --quiet auth configure-docker
317+
- name: Install Pulumi CLI
318+
uses: pulumi/action-install-pulumi-cli@releases/v1
319+
- uses: actions/checkout@v2
320+
- name: Install Go dependencies
321+
run: make ensure
322+
- name: Setup Config
323+
run: |
324+
mkdir -p "$HOME/.kube/"
325+
pulumi stack -s "${{ secrets.PULUMI_TEST_OWNER }}/${{ github.sha }}" -C misc/scripts/testinfra/ output kubeconfig >~/.kube/config
326+
- name: Run ${{ matrix.tests-set }} Tests
327+
run: make specific_test_set TestSet=Kubernetes

Makefile

+8
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ specific_test_set:
2121
echo "running $(TestSet) Acceptance Tests"
2222
cd misc/test && go test . --timeout 4h -v -count=1 -short -parallel 40 --run=TestAcc$(TestSet)
2323

24+
setup_test_infra:
25+
echo "Setting up test infra"
26+
./misc/scripts/create-ci-cluster.sh $(StackName)
27+
28+
destroy_test_infra:
29+
echo "Tearing down test infra"
30+
./misc/scripts/destroy-ci-cluster.sh $(StackName)
31+
2432
# The travis_* targets are entrypoints for CI.
2533
.PHONY: travis_cron travis_push travis_pull_request travis_api
2634
travis_cron: all

kubernetes-cs-guestbook/simple/Guestbook.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ public Guestbook()
256256
}
257257
else
258258
{
259-
this.FrontendIp = frontendService.Status.Apply(status => status.LoadBalancer.Ingress[0].Hostname);
259+
this.FrontendIp = frontendService.Status.Apply(status => status.LoadBalancer.Ingress[0].Ip ?? status.LoadBalancer.Ingress[0].Hostname);
260260
}
261261
}
262262

kubernetes-go-guestbook/simple/main.go

+8-13
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,11 @@ func main() {
3232
isMinikube := conf.GetBool("isMinikube")
3333

3434
redisLeaderLabels := pulumi.StringMap{
35-
"app": pulumi.String("redis"),
36-
"tier": pulumi.String("backend"),
37-
"role": pulumi.String("master"),
35+
"app": pulumi.String("redis-master"),
3836
}
3937

4038
// Redis leader Deployment
41-
_, err := appsv1.NewDeployment(ctx, "redis-leader", &appsv1.DeploymentArgs{
39+
_, err := appsv1.NewDeployment(ctx, "redis-master", &appsv1.DeploymentArgs{
4240
Metadata: &metav1.ObjectMetaArgs{
4341
Labels: redisLeaderLabels,
4442
},
@@ -77,7 +75,7 @@ func main() {
7775
}
7876

7977
// Redis leader Service
80-
_, err = corev1.NewService(ctx, "redis-leader", &corev1.ServiceArgs{
78+
_, err = corev1.NewService(ctx, "redis-master", &corev1.ServiceArgs{
8179
Metadata: &metav1.ObjectMetaArgs{
8280
Name: pulumi.String("redis-master"),
8381
Labels: redisLeaderLabels,
@@ -97,13 +95,11 @@ func main() {
9795
}
9896

9997
redisFollowerLabels := pulumi.StringMap{
100-
"app": pulumi.String("redis"),
101-
"tier": pulumi.String("backend"),
102-
"role": pulumi.String("slave"),
98+
"app": pulumi.String("redis-slave"),
10399
}
104100

105101
// Redis follower Deployment
106-
_, err = appsv1.NewDeployment(ctx, "redis-follower", &appsv1.DeploymentArgs{
102+
_, err = appsv1.NewDeployment(ctx, "redis-slave", &appsv1.DeploymentArgs{
107103
Metadata: &metav1.ObjectMetaArgs{
108104
Labels: redisFollowerLabels,
109105
},
@@ -119,7 +115,7 @@ func main() {
119115
Spec: &corev1.PodSpecArgs{
120116
Containers: corev1.ContainerArray{
121117
corev1.ContainerArgs{
122-
Name: pulumi.String("slave"),
118+
Name: pulumi.String("redis-slave"),
123119
Image: pulumi.String("gcr.io/google_samples/gb-redisslave:v3"),
124120
Resources: &corev1.ResourceRequirementsArgs{
125121
Requests: pulumi.StringMap{
@@ -148,7 +144,7 @@ func main() {
148144
}
149145

150146
// Redis follower Service
151-
_, err = corev1.NewService(ctx, "redis-follower", &corev1.ServiceArgs{
147+
_, err = corev1.NewService(ctx, "redis-slave", &corev1.ServiceArgs{
152148
Metadata: &metav1.ObjectMetaArgs{
153149
Name: pulumi.String("redis-slave"),
154150
Labels: redisFollowerLabels,
@@ -167,8 +163,7 @@ func main() {
167163
}
168164

169165
frontendLabels := pulumi.StringMap{
170-
"app": pulumi.String("guestbook"),
171-
"tier": pulumi.String("frontend"),
166+
"app": pulumi.String("frontend"),
172167
}
173168

174169
// Frontend Deployment

kubernetes-py-guestbook/simple/__main__.py

+9-12
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,11 @@
2222
isMinikube = config.get_bool("isMinikube")
2323

2424
redis_leader_labels = {
25-
"app": "redis",
26-
"tier": "backend",
27-
"role": "master"
25+
"app": "redis-master",
2826
}
2927

3028
redis_leader_deployment = Deployment(
31-
"redis-leader",
29+
"redis-master",
3230
spec={
3331
"selector": {
3432
"match_labels": redis_leader_labels,
@@ -57,8 +55,9 @@
5755
})
5856

5957
redis_leader_service = Service(
60-
"redis-leader",
58+
"redis-master",
6159
metadata={
60+
"name": "redis-master",
6261
"labels": redis_leader_labels
6362
},
6463
spec={
@@ -70,9 +69,7 @@
7069
})
7170

7271
redis_follower_labels = {
73-
"app": "redis",
74-
"tier": "backend",
75-
"role": "slave"
72+
"app": "redis-slave",
7673
}
7774

7875
redis_follower_deployment = Deployment(
@@ -88,7 +85,7 @@
8885
},
8986
"spec": {
9087
"containers": [{
91-
"name": "slave",
88+
"name": "redis-slave",
9289
"image": "gcr.io/google_samples/gb-redisslave:v1",
9390
"resources": {
9491
"requests": {
@@ -113,8 +110,9 @@
113110
})
114111

115112
redis_follower_service = Service(
116-
"redis-follower",
113+
"redis-slave",
117114
metadata={
115+
"name": "redis-slave",
118116
"labels": redis_follower_labels
119117
},
120118
spec={
@@ -127,8 +125,7 @@
127125

128126
# Frontend
129127
frontend_labels = {
130-
"app": "guestbook",
131-
"tier": "frontend"
128+
"app": "frontend",
132129
}
133130

134131
frontend_deployment = Deployment(

kubernetes-ts-guestbook/components/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const redisMaster = new k8sjs.ServiceDeployment("redis-master", {
1010
ports: [6379],
1111
});
1212

13-
const redisReplica = new k8sjs.ServiceDeployment("redis-replica", {
13+
const redisReplica = new k8sjs.ServiceDeployment("redis-slave", {
1414
image: "gcr.io/google_samples/gb-redisslave:v1",
1515
ports: [6379],
1616
});

kubernetes-ts-guestbook/components/k8sjs.ts

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export class ServiceDeployment extends pulumi.ComponentResource {
3737

3838
this.service = new k8s.core.v1.Service(name, {
3939
metadata: {
40+
name: name,
4041
labels: this.deployment.metadata.labels,
4142
},
4243
spec: {

0 commit comments

Comments
 (0)