From 0c6ea6570edf1a319d038f6b9db0b33014723e49 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 10 Oct 2020 14:26:06 -0400
Subject: [PATCH 01/46] added packaging script
---
package-with-mvn-wrapper.sh | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 package-with-mvn-wrapper.sh
diff --git a/package-with-mvn-wrapper.sh b/package-with-mvn-wrapper.sh
new file mode 100644
index 0000000000..ab98051854
--- /dev/null
+++ b/package-with-mvn-wrapper.sh
@@ -0,0 +1,2 @@
+# package-with-mvn-wrapper.sh
+./mvnw clean package
\ No newline at end of file
From 77a41c16ca4c39970645f62657b483c9f2804ffc Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 10 Oct 2020 15:59:13 -0400
Subject: [PATCH 02/46] added Dcokerfile for microservices
---
spring-petclinic-admin-server/Dockerfile | 11 +++++++++++
spring-petclinic-api-gateway/Dockerfile | 11 +++++++++++
spring-petclinic-config-server/Dockerfile | 11 +++++++++++
spring-petclinic-customers-service/Dockerfile | 11 +++++++++++
spring-petclinic-discovery-server/Dockerfile | 11 +++++++++++
spring-petclinic-hystrix-dashboard/Dockerfile | 11 +++++++++++
spring-petclinic-vets-service/Dockerfile | 11 +++++++++++
spring-petclinic-visits-service/Dockerfile | 11 +++++++++++
8 files changed, 88 insertions(+)
create mode 100644 spring-petclinic-admin-server/Dockerfile
create mode 100644 spring-petclinic-api-gateway/Dockerfile
create mode 100644 spring-petclinic-config-server/Dockerfile
create mode 100644 spring-petclinic-customers-service/Dockerfile
create mode 100644 spring-petclinic-discovery-server/Dockerfile
create mode 100644 spring-petclinic-hystrix-dashboard/Dockerfile
create mode 100644 spring-petclinic-vets-service/Dockerfile
create mode 100644 spring-petclinic-visits-service/Dockerfile
diff --git a/spring-petclinic-admin-server/Dockerfile b/spring-petclinic-admin-server/Dockerfile
new file mode 100644
index 0000000000..f00c9731a5
--- /dev/null
+++ b/spring-petclinic-admin-server/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:11-jre
+ARG DOCKERIZE_VERSION=v0.6.1
+ARG EXPOSED_PORT=9090
+ENV SPRING_PROFILES_ACTIVE docker
+ADD https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz dockerize.tar.gz
+RUN tar xzf dockerize.tar.gz
+RUN chmod +x dockerize
+ADD ./target/*.jar /app.jar
+EXPOSE ${EXPOSED_PORT}
+ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
+
diff --git a/spring-petclinic-api-gateway/Dockerfile b/spring-petclinic-api-gateway/Dockerfile
new file mode 100644
index 0000000000..c5820520a5
--- /dev/null
+++ b/spring-petclinic-api-gateway/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:11-jre
+ARG DOCKERIZE_VERSION=v0.6.1
+ARG EXPOSED_PORT=8080
+ENV SPRING_PROFILES_ACTIVE docker
+ADD https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz dockerize.tar.gz
+RUN tar xzf dockerize.tar.gz
+RUN chmod +x dockerize
+ADD ./target/*.jar /app.jar
+EXPOSE ${EXPOSED_PORT}
+ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
+
diff --git a/spring-petclinic-config-server/Dockerfile b/spring-petclinic-config-server/Dockerfile
new file mode 100644
index 0000000000..365b88e105
--- /dev/null
+++ b/spring-petclinic-config-server/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:11-jre
+ARG DOCKERIZE_VERSION=v0.6.1
+ARG EXPOSED_PORT=8888
+ENV SPRING_PROFILES_ACTIVE docker
+ADD https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz dockerize.tar.gz
+RUN tar xzf dockerize.tar.gz
+RUN chmod +x dockerize
+ADD ./target/*.jar /app.jar
+EXPOSE ${EXPOSED_PORT}
+ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
+
diff --git a/spring-petclinic-customers-service/Dockerfile b/spring-petclinic-customers-service/Dockerfile
new file mode 100644
index 0000000000..b1c1e0c8cd
--- /dev/null
+++ b/spring-petclinic-customers-service/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:11-jre
+ARG DOCKERIZE_VERSION=v0.6.1
+ARG EXPOSED_PORT=8081
+ENV SPRING_PROFILES_ACTIVE docker
+ADD https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz dockerize.tar.gz
+RUN tar xzf dockerize.tar.gz
+RUN chmod +x dockerize
+ADD ./target/*.jar /app.jar
+EXPOSE ${EXPOSED_PORT}
+ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
+
diff --git a/spring-petclinic-discovery-server/Dockerfile b/spring-petclinic-discovery-server/Dockerfile
new file mode 100644
index 0000000000..4b2ef3dd87
--- /dev/null
+++ b/spring-petclinic-discovery-server/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:11-jre
+ARG DOCKERIZE_VERSION=v0.6.1
+ARG EXPOSED_PORT=8761
+ENV SPRING_PROFILES_ACTIVE docker
+ADD https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz dockerize.tar.gz
+RUN tar xzf dockerize.tar.gz
+RUN chmod +x dockerize
+ADD ./target/*.jar /app.jar
+EXPOSE ${EXPOSED_PORT}
+ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
+
diff --git a/spring-petclinic-hystrix-dashboard/Dockerfile b/spring-petclinic-hystrix-dashboard/Dockerfile
new file mode 100644
index 0000000000..db170a937c
--- /dev/null
+++ b/spring-petclinic-hystrix-dashboard/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:11-jre
+ARG DOCKERIZE_VERSION=v0.6.1
+ARG EXPOSED_PORT=7979
+ENV SPRING_PROFILES_ACTIVE docker
+ADD https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz dockerize.tar.gz
+RUN tar xzf dockerize.tar.gz
+RUN chmod +x dockerize
+ADD ./target/*.jar /app.jar
+EXPOSE ${EXPOSED_PORT}
+ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
+
diff --git a/spring-petclinic-vets-service/Dockerfile b/spring-petclinic-vets-service/Dockerfile
new file mode 100644
index 0000000000..40df3f0817
--- /dev/null
+++ b/spring-petclinic-vets-service/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:11-jre
+ARG DOCKERIZE_VERSION=v0.6.1
+ARG EXPOSED_PORT=8083
+ENV SPRING_PROFILES_ACTIVE docker
+ADD https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz dockerize.tar.gz
+RUN tar xzf dockerize.tar.gz
+RUN chmod +x dockerize
+ADD ./target/*.jar /app.jar
+EXPOSE ${EXPOSED_PORT}
+ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
+
diff --git a/spring-petclinic-visits-service/Dockerfile b/spring-petclinic-visits-service/Dockerfile
new file mode 100644
index 0000000000..09c9126fbd
--- /dev/null
+++ b/spring-petclinic-visits-service/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:11-jre
+ARG DOCKERIZE_VERSION=v0.6.1
+ARG EXPOSED_PORT=8082
+ENV SPRING_PROFILES_ACTIVE docker
+ADD https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz dockerize.tar.gz
+RUN tar xzf dockerize.tar.gz
+RUN chmod +x dockerize
+ADD ./target/*.jar /app.jar
+EXPOSE ${EXPOSED_PORT}
+ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
+
From bc1a24904cc21c3263e8b583a725b3886e746561 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sun, 11 Oct 2020 14:13:40 -0400
Subject: [PATCH 03/46] added script for building docker images
---
build-dev-docker-images.sh | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 build-dev-docker-images.sh
diff --git a/build-dev-docker-images.sh b/build-dev-docker-images.sh
new file mode 100644
index 0000000000..e69de29bb2
From 9ca22402b492038cb63bfde4a700a313f09dd07b Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sun, 11 Oct 2020 14:22:13 -0400
Subject: [PATCH 04/46] added script for building docker images
---
build-dev-docker-images.sh | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/build-dev-docker-images.sh b/build-dev-docker-images.sh
index e69de29bb2..1c5441a219 100644
--- a/build-dev-docker-images.sh
+++ b/build-dev-docker-images.sh
@@ -0,0 +1,12 @@
+# build-dev-docker-images
+./mvnw clean package
+docker build --force-rm -t "petclinic-admin-server:dev" ./spring-petclinic-admin-server
+docker build --force-rm -t "petclinic-api-gateway:dev" ./spring-petclinic-api-gateway
+docker build --force-rm -t "petclinic-config-server:dev" ./spring-petclinic-config-server
+docker build --force-rm -t "petclinic-customers-service:dev" ./spring-petclinic-customers-service
+docker build --force-rm -t "petclinic-discovery-server:dev" ./spring-petclinic-discovery-server
+docker build --force-rm -t "petclinic-hystrix-dashboard:dev" ./spring-petclinic-hystrix-dashboard
+docker build --force-rm -t "petclinic-vets-service:dev" ./spring-petclinic-vets-service
+docker build --force-rm -t "petclinic-visits-service:dev" ./spring-petclinic-visits-service
+docker build --force-rm -t "petclinic-prometheus-server:dev" ./docker/prometheus
+docker build --force-rm -t "petclinic-grafana-server:dev" ./docker/grafana
\ No newline at end of file
From e543f71825001c301f5ee0bec01f0d90d75a190f Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sun, 11 Oct 2020 15:33:56 -0400
Subject: [PATCH 05/46] added docker compose file and script for local
deployment
---
docker-compose-local.yml | 97 ++++++++++++++++++++++++++++++++++++++++
test-local-deployment.sh | 2 +
2 files changed, 99 insertions(+)
create mode 100644 docker-compose-local.yml
create mode 100644 test-local-deployment.sh
diff --git a/docker-compose-local.yml b/docker-compose-local.yml
new file mode 100644
index 0000000000..195b20637c
--- /dev/null
+++ b/docker-compose-local.yml
@@ -0,0 +1,97 @@
+version: '2'
+services:
+ config-server:
+ image: petclinic-config-server:dev
+ container_name: config-server
+ mem_limit: 512M
+ ports:
+ - 8888:8888
+ discovery-server:
+ image: petclinic-discovery-server:dev
+ container_name: discovery-server
+ mem_limit: 512M
+ ports:
+ - 8761:8761
+ depends_on:
+ - config-server
+ entrypoint: ["./dockerize", "-wait=tcp://config-server:8888", "-timeout=60s", "--", "java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]
+ customers-service:
+ image: petclinic-customers-service:dev
+ container_name: customers-service
+ mem_limit: 512M
+ ports:
+ - 8081:8081
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize", "-wait=tcp://discovery-server:8761", "-timeout=60s", "--", "java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]
+ visits-service:
+ image: petclinic-visits-service:dev
+ container_name: visits-service
+ mem_limit: 512M
+ ports:
+ - 8082:8082
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize", "-wait=tcp://discovery-server:8761", "-timeout=60s", "--", "java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]
+ vets-service:
+ image: petclinic-vets-service:dev
+ container_name: vets-service
+ mem_limit: 512M
+ ports:
+ - 8083:8083
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize", "-wait=tcp://discovery-server:8761", "-timeout=60s", "--", "java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]
+ api-gateway:
+ image: petclinic-api-gateway:dev
+ container_name: api-gateway
+ mem_limit: 512M
+ ports:
+ - 8080:8080
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize", "-wait=tcp://discovery-server:8761", "-timeout=60s", "--", "java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]
+ admin-server:
+ image: petclinic-admin-server:dev
+ container_name: admin-server
+ mem_limit: 512M
+ ports:
+ - 9090:9090
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize", "-wait=tcp://discovery-server:8761", "-timeout=60s", "--", "java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]
+ hystrix-dashboard:
+ image: petclinic-hystrix-dashboard:dev
+ container_name: hystrix-dashboard
+ mem_limit: 512M
+ ports:
+ - 7979:7979
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize", "-wait=tcp://discovery-server:8761", "-timeout=60s", "--", "java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]
+ tracing-server:
+ image: openzipkin/zipkin
+ container_name: tracing-server
+ mem_limit: 512M
+ environment:
+ - JAVA_OPTS=-XX:+UnlockExperimentalVMOptions -Djava.security.egd=file:/dev/./urandom
+ ports:
+ - 9411:9411
+ grafana-server:
+ image: petclinic-grafana-server:dev
+ container_name: grafana-server
+ mem_limit: 256M
+ ports:
+ - 3000:3000
+ prometheus-server:
+ image: petclinic-prometheus-server:dev
+ container_name: prometheus-server
+ mem_limit: 256M
+ ports:
+ - 9091:9090
\ No newline at end of file
diff --git a/test-local-deployment.sh b/test-local-deployment.sh
new file mode 100644
index 0000000000..10c45f1a9a
--- /dev/null
+++ b/test-local-deployment.sh
@@ -0,0 +1,2 @@
+# test-local-deployment
+deocker-compose -f docker-compose-local.yml up
\ No newline at end of file
From 19f98c168530e3ea924b181c5d48ae22b99c15af Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sun, 11 Oct 2020 15:40:03 -0400
Subject: [PATCH 06/46] added docker compose file and script for local
deployment
---
test-local-deployment.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test-local-deployment.sh b/test-local-deployment.sh
index 10c45f1a9a..56b0279f33 100644
--- a/test-local-deployment.sh
+++ b/test-local-deployment.sh
@@ -1,2 +1,2 @@
# test-local-deployment
-deocker-compose -f docker-compose-local.yml up
\ No newline at end of file
+docker-compose -f docker-compose-local.yml up
\ No newline at end of file
From ddd11841f028f118008599b26392ba808d2d8c3c Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 13 Oct 2020 19:33:51 -0400
Subject: [PATCH 07/46] added cloudformation template for dec server
---
infrastructure/dev-server-for-petclinic-app-cfn-template.yml | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 infrastructure/dev-server-for-petclinic-app-cfn-template.yml
diff --git a/infrastructure/dev-server-for-petclinic-app-cfn-template.yml b/infrastructure/dev-server-for-petclinic-app-cfn-template.yml
new file mode 100644
index 0000000000..e69de29bb2
From 1931611c25fecd614c675d490a0bd7ac30e9c1fa Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 13 Oct 2020 19:38:37 -0400
Subject: [PATCH 08/46] added cloudformation template for dev server
---
...-server-for-petclinic-app-cfn-template.yml | 118 ++++++++++++++++++
1 file changed, 118 insertions(+)
diff --git a/infrastructure/dev-server-for-petclinic-app-cfn-template.yml b/infrastructure/dev-server-for-petclinic-app-cfn-template.yml
index e69de29bb2..b6ef927703 100644
--- a/infrastructure/dev-server-for-petclinic-app-cfn-template.yml
+++ b/infrastructure/dev-server-for-petclinic-app-cfn-template.yml
@@ -0,0 +1,118 @@
+AWSTemplateFormatVersion: 2010-09-09
+Description: >
+ This Cloudformation template prepares development environment for
+ Petclinic Microservices Application.
+ User needs to select appropriate key name when launching the template.
+Parameters:
+ KeyPairName:
+ Description: Enter the name of your Key Pair for SSH connections.
+ Type: AWS::EC2::KeyPair::KeyName
+ ConstraintDescription: Must one of the existing EC2 KeyPair
+Resources:
+ PetclinicDemoSG:
+ Type: AWS::EC2::SecurityGroup
+ Properties:
+ GroupDescription: Enable SSH and HTTP for Petclinic Microservices
+ SecurityGroupIngress:
+ - IpProtocol: tcp
+ FromPort: 80
+ ToPort: 80
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 22
+ ToPort: 22
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 9090
+ ToPort: 9090
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8080
+ ToPort: 8080
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8081
+ ToPort: 8081
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8082
+ ToPort: 8082
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8083
+ ToPort: 8083
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8888
+ ToPort: 8888
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 9411
+ ToPort: 9411
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 7979
+ ToPort: 7979
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 3000
+ ToPort: 3000
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 9091
+ ToPort: 9091
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8761
+ ToPort: 8761
+ CidrIp: 0.0.0.0/0
+ PetclinicServerLT:
+ Type: "AWS::EC2::LaunchTemplate"
+ Properties:
+ LaunchTemplateData:
+ ImageId: ami-038b5c5d2ad6a5090
+ InstanceType: t2.medium
+ KeyName: !Ref KeyPairName
+ SecurityGroupIds:
+ - !GetAtt PetclinicDemoSG.GroupId
+ UserData:
+ Fn::Base64: |
+
+ #! /bin/bash
+ # update os
+ sudo yum update -y
+ # set hostname as petclinic-dev-server
+ sudo hostnamectl set-hostname petclinic-dev-server
+ # install docker
+ sudo amazon-linux-extras install docker -y
+ sudo systemctl start docker
+ sudo systemctl enable docker
+ sudo usermod -a -G docker ec2-user
+ # install docker compose
+ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
+ sudo chmod +x /usr/local/bin/docker-compose
+ # install JDK 11
+ sudo yum install java-11-amazon-corretto -y
+ # install Git
+ sudo yum install git -y
+ cd /home/ec2-user
+ git clone https://github.com/huseyin-yigit/microservices-ci-cd-pipeline-with-petclinic-app.git
+ git fetch
+ git checkout dev
+
+
+
+
+ PetclinicServer:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref PetclinicServerLT
+ Version: !GetAtt PetclinicServerLT.LatestVersionNumber
+ Tags:
+ - Key: Name
+ Value: !Sub Petclinic App Dev Server of ${AWS::StackName}
+Outputs:
+ PetclinicServerDNSName:
+ Description: Petclinic App URL
+ Value: !GetAtt PetclinicServer.PublicDnsName
\ No newline at end of file
From 209f2ba92e435126a87890335d28311c70334355 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 13 Oct 2020 19:46:22 -0400
Subject: [PATCH 09/46] updated image id
---
infrastructure/dev-server-for-petclinic-app-cfn-template.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/infrastructure/dev-server-for-petclinic-app-cfn-template.yml b/infrastructure/dev-server-for-petclinic-app-cfn-template.yml
index b6ef927703..a767498f5c 100644
--- a/infrastructure/dev-server-for-petclinic-app-cfn-template.yml
+++ b/infrastructure/dev-server-for-petclinic-app-cfn-template.yml
@@ -70,7 +70,7 @@ Resources:
Type: "AWS::EC2::LaunchTemplate"
Properties:
LaunchTemplateData:
- ImageId: ami-038b5c5d2ad6a5090
+ ImageId: ami-0947d2ba12ee1ff75
InstanceType: t2.medium
KeyName: !Ref KeyPairName
SecurityGroupIds:
From cb31b7863f5fd3390c6f58faa919767a67240815 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 13 Oct 2020 21:05:55 -0400
Subject: [PATCH 10/46] test java
---
.../customers/web/model/PetTest.java | 36 +++++++++++++++++++
1 file changed, 36 insertions(+)
create mode 100644 spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
diff --git a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
new file mode 100644
index 0000000000..b11e9f70f7
--- /dev/null
+++ b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
@@ -0,0 +1,36 @@
+package org.springframework.samples.petclinic.customers.model;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import java.util.Date;
+import org.junit.jupiter.api.Test;
+public class PetTest {
+ @Test
+ public void testGetName(){
+ //Arrange
+ Pet pet = new Pet();
+ //Act
+ pet.setName("Fluffy");
+ //Assert
+ assertEquals("Fluffy", pet.getName());
+ }
+ @Test
+ public void testGetOwner(){
+ //Arrange
+ Pet pet = new Pet();
+ Owner owner = new Owner();
+ owner.setFirstName("Call");
+ //Act
+ pet.setOwner(owner);
+ //Assert
+ assertEquals("Call", pet.getOwner().getFirstName());
+ }
+ @Test
+ public void testBirthDate(){
+ //Arrange
+ Pet pet = new Pet();
+ Date bd = new Date();
+ //Act
+ pet.setBirthDate(bd);
+ //Assert
+ assertEquals(bd,pet.getBirthDate());
+ }
+}
\ No newline at end of file
From d63d4dc56c79a877faa6231b31142f9a6d5e224e Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 13 Oct 2020 21:22:28 -0400
Subject: [PATCH 11/46] updated POM with Jacoco plugin
---
pom.xml | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/pom.xml b/pom.xml
index da42b9ce94..e1ddfe6dfb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -129,6 +129,26 @@
false
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.2
+
+
+
+ prepare-agent
+
+
+
+
+ report
+ test
+
+ report
+
+
+
+
From c49a72596c363eabbc120d3fe3d73c92b56cb722 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Thu, 15 Oct 2020 17:17:14 -0400
Subject: [PATCH 12/46] updated pettest.java
---
.../samples/petclinic/customers/web/model/PetTest.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
index b11e9f70f7..a180f5a2db 100644
--- a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
+++ b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
@@ -17,7 +17,7 @@ public void testGetOwner(){
//Arrange
Pet pet = new Pet();
Owner owner = new Owner();
- owner.setFirstName("Call");
+ owner.setFirstName("Call2");
//Act
pet.setOwner(owner);
//Assert
From 6fcf210ef547b3e2a3370e424a37bfcfff6543b4 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Thu, 15 Oct 2020 17:22:24 -0400
Subject: [PATCH 13/46] updated pettest.java
---
.../samples/petclinic/customers/web/model/PetTest.java | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
index a180f5a2db..4e639f07ca 100644
--- a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
+++ b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
@@ -1,8 +1,11 @@
package org.springframework.samples.petclinic.customers.model;
+
import static org.junit.jupiter.api.Assertions.assertEquals;
-import java.util.Date;
+
import org.junit.jupiter.api.Test;
+
public class PetTest {
+
@Test
public void testGetName(){
//Arrange
@@ -12,17 +15,19 @@ public void testGetName(){
//Assert
assertEquals("Fluffy", pet.getName());
}
+
@Test
public void testGetOwner(){
//Arrange
Pet pet = new Pet();
Owner owner = new Owner();
- owner.setFirstName("Call2");
+ owner.setFirstName("Call");
//Act
pet.setOwner(owner);
//Assert
assertEquals("Call", pet.getOwner().getFirstName());
}
+
@Test
public void testBirthDate(){
//Arrange
From e2e80c5b97e4f9771b621bc0a77ff63c8aaefb4b Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Thu, 15 Oct 2020 19:17:41 -0400
Subject: [PATCH 14/46] updated cfn template
---
...-server-for-petclinic-app-cfn-template.yml | 20 +++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/infrastructure/dev-server-for-petclinic-app-cfn-template.yml b/infrastructure/dev-server-for-petclinic-app-cfn-template.yml
index a767498f5c..9e3e93e251 100644
--- a/infrastructure/dev-server-for-petclinic-app-cfn-template.yml
+++ b/infrastructure/dev-server-for-petclinic-app-cfn-template.yml
@@ -80,21 +80,21 @@ Resources:
#! /bin/bash
# update os
- sudo yum update -y
+ yum update -y
# set hostname as petclinic-dev-server
- sudo hostnamectl set-hostname petclinic-dev-server
+ hostnamectl set-hostname petclinic-dev-server
# install docker
- sudo amazon-linux-extras install docker -y
- sudo systemctl start docker
- sudo systemctl enable docker
- sudo usermod -a -G docker ec2-user
+ amazon-linux-extras install docker -y
+ systemctl start docker
+ systemctl enable docker
+ usermod -a -G docker ec2-user
# install docker compose
- sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- sudo chmod +x /usr/local/bin/docker-compose
+ curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
+ chmod +x /usr/local/bin/docker-compose
# install JDK 11
- sudo yum install java-11-amazon-corretto -y
+ yum install java-11-amazon-corretto -y
# install Git
- sudo yum install git -y
+ yum install git -y
cd /home/ec2-user
git clone https://github.com/huseyin-yigit/microservices-ci-cd-pipeline-with-petclinic-app.git
git fetch
From d2e26365072da922e276da8f7eb34d992df48479 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Thu, 15 Oct 2020 19:35:58 -0400
Subject: [PATCH 15/46] added selenium jobs written in python
---
selenium-jobs/test_owners_all_headless.py | 0
.../test_owners_register_headless.py | 41 +++++++++++++++++++
selenium-jobs/test_veterinarians_headless.py | 20 +++++++++
3 files changed, 61 insertions(+)
create mode 100644 selenium-jobs/test_owners_all_headless.py
create mode 100644 selenium-jobs/test_owners_register_headless.py
create mode 100644 selenium-jobs/test_veterinarians_headless.py
diff --git a/selenium-jobs/test_owners_all_headless.py b/selenium-jobs/test_owners_all_headless.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/selenium-jobs/test_owners_register_headless.py b/selenium-jobs/test_owners_register_headless.py
new file mode 100644
index 0000000000..94b00c1bad
--- /dev/null
+++ b/selenium-jobs/test_owners_register_headless.py
@@ -0,0 +1,41 @@
+from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.common.keys import Keys
+from selenium.webdriver.support.ui import WebDriverWait
+from selenium.webdriver.support import expected_conditions as EC
+import random
+# Set chrome options for working with headless mode (no screen)
+chrome_options = webdriver.ChromeOptions()
+chrome_options.add_argument("headless")
+# Update webdriver instance of chrome-driver with adding chrome options
+driver = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=chrome_options)
+# Connect to the application
+url = "http://ec2-34-236-170-96.compute-1.amazonaws.com:8080"
+driver.get(url)
+owners_link = driver.find_element_by_link_text("OWNERS")
+owners_link.click()
+all_link = driver.find_element_by_link_text("REGISTER")
+all_link.click()
+# Register new Owner to Petclinic App
+fn_field = driver.find_element_by_name('firstName')
+fn = 'Huseyin' + str(random.randint(0, 100))
+fn_field.send_keys(fn)
+fn_field = driver.find_element_by_name('lastName')
+fn_field.send_keys('Clarusway')
+fn_field = driver.find_element_by_name('address')
+fn_field.send_keys('Ridge Corp. Street')
+fn_field = driver.find_element_by_name('city')
+fn_field.send_keys('McLean')
+fn_field = driver.find_element_by_name('telephone')
+fn_field.send_keys('+1230576803')
+fn_field.send_keys(Keys.ENTER)
+# Wait until Owner List table loaded
+verify_table = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "table")))
+# Verify that new user is added to Owner List
+if fn in driver.page_source:
+ print(fn, 'is added and found in the Owners Table')
+ print("Test Passed")
+else:
+ print(fn, 'is not found in the Owners Table')
+ print("Test Failed")
+driver.quit()
\ No newline at end of file
diff --git a/selenium-jobs/test_veterinarians_headless.py b/selenium-jobs/test_veterinarians_headless.py
new file mode 100644
index 0000000000..a7f9a9648f
--- /dev/null
+++ b/selenium-jobs/test_veterinarians_headless.py
@@ -0,0 +1,20 @@
+from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.ui import WebDriverWait
+from selenium.webdriver.support import expected_conditions as EC
+from time import sleep
+# Set chrome options for working with headless mode (no screen)
+chrome_options = webdriver.ChromeOptions()
+chrome_options.add_argument("headless")
+# Update webdriver instance of chrome-driver with adding chrome options
+driver = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=chrome_options)
+# Connect to the application
+url = "http://3.238.121.49:8080"
+driver.get(url)
+vet_link = driver.find_element_by_link_text("VETERINARIANS")
+vet_link.click()
+# Verify that table loaded
+sleep(1)
+verify_table = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "table")))
+print("Table loaded")
+driver.quit()
\ No newline at end of file
From b2088db7644e5bca4e9aec8113f27a0601689a88 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Thu, 15 Oct 2020 20:53:25 -0400
Subject: [PATCH 16/46] added jenkins server cfn template
---
.../jenkins-server-cfn-template.yml | 153 ++++++++++++++++++
selenium-jobs/test_owners_all_headless.py | 22 +++
2 files changed, 175 insertions(+)
create mode 100644 infrastructure/jenkins-server-cfn-template.yml
diff --git a/infrastructure/jenkins-server-cfn-template.yml b/infrastructure/jenkins-server-cfn-template.yml
new file mode 100644
index 0000000000..4beea17421
--- /dev/null
+++ b/infrastructure/jenkins-server-cfn-template.yml
@@ -0,0 +1,153 @@
+AWSTemplateFormatVersion: 2010-09-09
+Description: >
+ This Cloudformation Template creates a Jenkins Server using JDK 11 on EC2 Instance.
+ Jenkins Server is enabled with Git, Docker and Docker Compose,
+ AWS CLI Version 2, ECR Credential Helper, Python 3, Ansible, and Boto3.
+ Jenkins Server will run on Amazon Linux 2 EC2 Instance with
+ custom security group allowing HTTP(80, 8080) and SSH (22) connections from anywhere.
+Parameters:
+ KeyPairName:
+ Description: Enter the name of your Key Pair for SSH connections.
+ Type: AWS::EC2::KeyPair::KeyName
+ ConstraintDescription: Must one of the existing EC2 KeyPair
+Resources:
+ EmpoweringPolicyforJenkinsServer:
+ Type: "AWS::IAM::ManagedPolicy"
+ Properties:
+ PolicyDocument: #required
+ Version: 2012-10-17
+ Statement:
+ - Effect: Allow
+ Action:
+ - iam:AddRoleToInstanceProfile
+ - iam:CreateInstanceProfile
+ - iam:CreatePolicy
+ - iam:CreateRole
+ - iam:DeleteInstanceProfile
+ - iam:DeletePolicy
+ - iam:DeleteRole
+ - iam:GetPolicy
+ - iam:GetRole
+ - iam:ListPolicyVersions
+ - iam:AttachRolePolicy
+ - iam:DetachRolePolicy
+ - iam:PassRole
+ - iam:RemoveRoleFromInstanceProfile
+ - iam:GetInstanceProfile
+ Resource: "*"
+ - Effect: Allow
+ Action:
+ - ec2:*
+ Resource: "*"
+ EmpoweringRoleforJenkinsServer:
+ Type: "AWS::IAM::Role"
+ Properties:
+ AssumeRolePolicyDocument:
+ Statement:
+ - Effect: Allow
+ Principal:
+ Service:
+ - ec2.amazonaws.com
+ Action:
+ - 'sts:AssumeRole'
+ ManagedPolicyArns:
+ - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess
+ - arn:aws:iam::aws:policy/AWSCloudFormationFullAccess
+ - !Ref EmpoweringPolicyforJenkinsServer
+ JenkinsServerEC2Profile:
+ Type: "AWS::IAM::InstanceProfile"
+ Properties:
+ Roles: #required
+ - !Ref EmpoweringRoleforJenkinsServer
+ JenkinsServerSecurityGroup:
+ Type: AWS::EC2::SecurityGroup
+ Properties:
+ GroupDescription: Enable SSH and HTTP for Jenkins Server
+ SecurityGroupIngress:
+ - IpProtocol: tcp
+ FromPort: 80
+ ToPort: 80
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8080
+ ToPort: 8080
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 22
+ ToPort: 22
+ CidrIp: 0.0.0.0/0
+ JenkinsServer:
+ Type: AWS::EC2::Instance
+ Properties:
+ ImageId: ami-0947d2ba12ee1ff75
+ InstanceType: t2.medium
+ KeyName: !Ref KeyPairName
+ IamInstanceProfile: !Ref JenkinsServerEC2Profile
+ SecurityGroupIds:
+ - !GetAtt JenkinsServerSecurityGroup.GroupId
+ Tags:
+ - Key: Name
+ Value: !Sub Jenkins Server of ${AWS::StackName}
+ - Key: server
+ Value: jenkins
+ UserData:
+ Fn::Base64: |
+ #! /bin/bash
+ # update os
+ yum update -y
+ # set server hostname as jenkins-server
+ hostnamectl set-hostname jenkins-server
+ # install git
+ yum install git -y
+ # install java 11
+ yum install java-11-amazon-corretto -y
+ # install jenkins
+ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
+ rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
+ yum install jenkins -y
+ systemctl start jenkins
+ systemctl enable jenkins
+ # install docker
+ amazon-linux-extras install docker -y
+ systemctl start docker
+ systemctl enable docker
+ usermod -a -G docker ec2-user
+ usermod -a -G docker jenkins
+ # configure docker as cloud agent for jenkins
+ cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak
+ sed -i 's/^ExecStart=.*/ExecStart=\/usr\/bin\/dockerd -H tcp:\/\/127.0.0.1:2375 -H unix:\/\/\/var\/run\/docker.sock/g' /lib/systemd/system/docker.service
+ systemctl daemon-reload
+ systemctl restart docker
+ systemctl restart jenkins
+ # install docker compose
+ curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" \
+ -o /usr/local/bin/docker-compose
+ chmod +x /usr/local/bin/docker-compose
+ # uninstall aws cli version 1
+ rm -rf /bin/aws
+ # install aws cli version 2
+ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
+ unzip awscliv2.zip
+ ./aws/install
+ # install aws ecr credential helper
+ yum install amazon-ecr-credential-helper -y
+ mkdir -p /home/jenkins/.docker
+ cd /home/jenkins/.docker
+ echo '{"credsStore": "ecr-login"}' > config.json
+ # install python 3
+ yum install python3 -y
+ # install ansible
+ pip3 install ansible
+ # install boto3
+ pip3 install boto3
+Outputs:
+ JenkinsDNS:
+ Description: Jenkins Server DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt JenkinsServer.PublicDnsName
+ JenkinsURL:
+ Description: Jenkins Server URL
+ Value: !Sub
+ - http://${PublicAddress}:8080
+ - PublicAddress: !GetAtt JenkinsServer.PublicDnsName
\ No newline at end of file
diff --git a/selenium-jobs/test_owners_all_headless.py b/selenium-jobs/test_owners_all_headless.py
index e69de29bb2..555cf35469 100644
--- a/selenium-jobs/test_owners_all_headless.py
+++ b/selenium-jobs/test_owners_all_headless.py
@@ -0,0 +1,22 @@
+from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.ui import WebDriverWait
+from selenium.webdriver.support import expected_conditions as EC
+from time import sleep
+# Set chrome options for working with headless mode (no screen)
+chrome_options = webdriver.ChromeOptions()
+chrome_options.add_argument("headless")
+# Update webdriver instance of chrome-driver with adding chrome options
+driver = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=chrome_options)
+# Connect to the application
+url = "http://3.238.121.49:8080"
+driver.get(url)
+owners_link = driver.find_element_by_link_text("OWNERS")
+owners_link.click()
+all_link = driver.find_element_by_link_text("ALL")
+all_link.click()
+# Verify that table loaded
+sleep(1)
+verify_table = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "table")))
+print("Table loaded")
+driver.quit()
\ No newline at end of file
From 7687d0798dd7226ccf84f2607e1a5d00115fa3c0 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Fri, 16 Oct 2020 17:37:35 -0400
Subject: [PATCH 17/46] added updated pettestjava
---
.../samples/petclinic/customers/web/model/PetTest.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
index b11e9f70f7..edecf48bc9 100644
--- a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
+++ b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
@@ -17,11 +17,11 @@ public void testGetOwner(){
//Arrange
Pet pet = new Pet();
Owner owner = new Owner();
- owner.setFirstName("Call");
+ owner.setFirstName("Huseyin");
//Act
pet.setOwner(owner);
//Assert
- assertEquals("Call", pet.getOwner().getFirstName());
+ assertEquals("Huseyin", pet.getOwner().getFirstName());
}
@Test
public void testBirthDate(){
From 0e52b3f371dd216878e854ad30ab67faa1468929 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Fri, 16 Oct 2020 20:44:49 -0400
Subject: [PATCH 18/46] added updated pettestjava
---
.../samples/petclinic/customers/web/model/PetTest.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
index 4e639f07ca..e5788a8106 100644
--- a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
+++ b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
@@ -21,11 +21,11 @@ public void testGetOwner(){
//Arrange
Pet pet = new Pet();
Owner owner = new Owner();
- owner.setFirstName("Call");
+ owner.setFirstName("Huseyin");
//Act
pet.setOwner(owner);
//Assert
- assertEquals("Call", pet.getOwner().getFirstName());
+ assertEquals("Huseyin", pet.getOwner().getFirstName());
}
@Test
From a0c20d367148274a3075a4f4cb56f16ef9609214 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 17 Oct 2020 13:31:11 -0400
Subject: [PATCH 19/46] update petjavatest
---
.../samples/petclinic/customers/web/model/PetTest.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
index e5788a8106..4e639f07ca 100644
--- a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
+++ b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
@@ -21,11 +21,11 @@ public void testGetOwner(){
//Arrange
Pet pet = new Pet();
Owner owner = new Owner();
- owner.setFirstName("Huseyin");
+ owner.setFirstName("Call");
//Act
pet.setOwner(owner);
//Assert
- assertEquals("Huseyin", pet.getOwner().getFirstName());
+ assertEquals("Call", pet.getOwner().getFirstName());
}
@Test
From 13fd47e1889dd387a40adbb96e90404862e39861 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 17 Oct 2020 13:53:03 -0400
Subject: [PATCH 20/46] added script for petclinic ci-job.sh
---
jenkins/jenkins-petclinic-ci-job.sh | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 jenkins/jenkins-petclinic-ci-job.sh
diff --git a/jenkins/jenkins-petclinic-ci-job.sh b/jenkins/jenkins-petclinic-ci-job.sh
new file mode 100644
index 0000000000..e80b48774b
--- /dev/null
+++ b/jenkins/jenkins-petclinic-ci-job.sh
@@ -0,0 +1,2 @@
+echo 'Running unit tests on Petclinic Application'
+docker run --rm -v $HOME/.m2:/root/.m2 -v `pwd`:/app -w /app maven:3.6.3-openjdk-11 mvn clean test
\ No newline at end of file
From afba01cedad725f4bf7720471ae7c125649a0828 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 17 Oct 2020 13:57:17 -0400
Subject: [PATCH 21/46] update file
---
jenkins/jenkins-petclinic-ci-job.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/jenkins/jenkins-petclinic-ci-job.sh b/jenkins/jenkins-petclinic-ci-job.sh
index e80b48774b..66e6e22f18 100644
--- a/jenkins/jenkins-petclinic-ci-job.sh
+++ b/jenkins/jenkins-petclinic-ci-job.sh
@@ -1,2 +1,2 @@
-echo 'Running unit tests on Petclinic Application'
+echo 'Running Unit Tests on Petclinic Application'
docker run --rm -v $HOME/.m2:/root/.m2 -v `pwd`:/app -w /app maven:3.6.3-openjdk-11 mvn clean test
\ No newline at end of file
From cf8527892e5197fe78a4797e250815e4e3d430ab Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 17 Oct 2020 14:25:41 -0400
Subject: [PATCH 22/46] added script for creating ECR registry for dev
---
infrastructure/create-ecr-docker-registry-for-dev.sh | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 infrastructure/create-ecr-docker-registry-for-dev.sh
diff --git a/infrastructure/create-ecr-docker-registry-for-dev.sh b/infrastructure/create-ecr-docker-registry-for-dev.sh
new file mode 100644
index 0000000000..e9a729f251
--- /dev/null
+++ b/infrastructure/create-ecr-docker-registry-for-dev.sh
@@ -0,0 +1,8 @@
+PATH="$PATH:/usr/local/bin"
+APP_REPO_NAME="clarusway-repo/petclinic-app-dev"
+AWS_REGION="us-east-1"
+aws ecr create-repository \
+ --repository-name ${APP_REPO_NAME} \
+ --image-scanning-configuration scanOnPush=false \
+ --image-tag-mutability MUTABLE \
+ --region ${AWS_REGION}
\ No newline at end of file
From 241bc76d1efda51580c6992e47231a757271e94d Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 17 Oct 2020 15:18:42 -0400
Subject: [PATCH 23/46] added cloudformation template for Docker Swarm
infrastructure
---
...cker-swarm-infrastructure-cfn-template.yml | 173 ++++++++++++++++++
1 file changed, 173 insertions(+)
create mode 100644 infrastructure/docker-swarm-infrastructure-cfn-template.yml
diff --git a/infrastructure/docker-swarm-infrastructure-cfn-template.yml b/infrastructure/docker-swarm-infrastructure-cfn-template.yml
new file mode 100644
index 0000000000..091aa3ccc9
--- /dev/null
+++ b/infrastructure/docker-swarm-infrastructure-cfn-template.yml
@@ -0,0 +1,173 @@
+AWSTemplateFormatVersion: 2010-09-09
+Description: |
+ This Cloudformation Template creates an infrastructure for Docker Swarm
+ with five EC2 Instances with Amazon Linux 2. Instances are configured
+ with custom security group allowing SSH (22), HTTP (80) UDP (4789, 7946),
+ and TCP(2377, 7946, 8080) connections from anywhere.
+ User needs to select appropriate key name when launching the template.
+Parameters:
+ KeyPairName:
+ Description: Enter the name of your Key Pair for SSH connections.
+ Type: AWS::EC2::KeyPair::KeyName
+ ConstraintDescription: Must one of the existing EC2 KeyPair
+Resources:
+ RoleEnablingEC2forECR:
+ Type: "AWS::IAM::Role"
+ Properties:
+ AssumeRolePolicyDocument:
+ Statement:
+ - Effect: Allow
+ Principal:
+ Service:
+ - ec2.amazonaws.com
+ Action:
+ - 'sts:AssumeRole'
+ ManagedPolicyArns:
+ - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess
+ EC2Profile:
+ Type: "AWS::IAM::InstanceProfile"
+ Properties:
+ Roles: #required
+ - !Ref RoleEnablingEC2forECR
+ DockerMachinesSecurityGroup:
+ Type: AWS::EC2::SecurityGroup
+ Properties:
+ GroupDescription: Enable SSH and HTTP for Docker Machines
+ SecurityGroupIngress:
+ - IpProtocol: tcp
+ FromPort: 80
+ ToPort: 80
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 22
+ ToPort: 22
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 2377
+ ToPort: 2377
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 7946
+ ToPort: 7946
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: udp
+ FromPort: 7946
+ ToPort: 7946
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: udp
+ FromPort: 4789
+ ToPort: 4789
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8080
+ ToPort: 8080
+ CidrIp: 0.0.0.0/0
+ DockerMachineLT:
+ Type: "AWS::EC2::LaunchTemplate"
+ Properties:
+ LaunchTemplateData:
+ ImageId: ami-0947d2ba12ee1ff75
+ InstanceType: t2.micro
+ KeyName: !Ref KeyPairName
+ IamInstanceProfile:
+ Arn: !GetAtt EC2Profile.Arn
+ SecurityGroupIds:
+ - !GetAtt DockerMachinesSecurityGroup.GroupId
+ TagSpecifications:
+ - ResourceType: instance
+ Tags:
+ - Key: app-stack-name
+ Value: !Sub ${AWS::StackName}
+ - Key: environment
+ Value: dev
+ DockerInstance1:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-1
+ - Key: swarm-role
+ Value: grand-master
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 1st
+ DockerInstance2:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-2
+ - Key: swarm-role
+ Value: manager
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 2nd
+ DockerInstance3:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-3
+ - Key: swarm-role
+ Value: manager
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 3rd
+ DockerInstance4:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-4
+ - Key: swarm-role
+ Value: worker
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 4th
+ DockerInstance5:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-5
+ - Key: swarm-role
+ Value: worker
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 5th
+Outputs:
+ 1stDockerInstanceDNSName:
+ Description: 1st Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance1.PublicDnsName
+ 2ndDockerInstanceDNSName:
+ Description: 2nd Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance2.PublicDnsName
+ 3rdDockerInstanceDNSName:
+ Description: 3rd Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance3.PublicDnsName
+ 4thDockerInstanceDNSName:
+ Description: 4th Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance4.PublicDnsName
+ 5thDockerInstanceDNSName:
+ Description: 5th Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance5.PublicDnsName
\ No newline at end of file
From 78f88431c2f0c07ac19ae32f5c4918b71c4059da Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sun, 18 Oct 2020 12:26:35 -0400
Subject: [PATCH 24/46] added ansible static inventory host.ini for testing
---
ansible/inventory/hosts.ini | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 ansible/inventory/hosts.ini
diff --git a/ansible/inventory/hosts.ini b/ansible/inventory/hosts.ini
new file mode 100644
index 0000000000..cd3534ffd5
--- /dev/null
+++ b/ansible/inventory/hosts.ini
@@ -0,0 +1,5 @@
+172.31.18.79 ansible_user=ec2-user
+172.31.17.104 ansible_user=ec2-user
+172.31.82.199 ansible_user=ec2-user
+172.31.27.10 ansible_user=ec2-user
+172.31.83.29 ansible_user=ec2-user
\ No newline at end of file
From 2d81e677ff1d2e3bd96145f034f3848504e41a45 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sun, 18 Oct 2020 12:59:08 -0400
Subject: [PATCH 25/46] added dev stack dynamic inventory
---
.../dev_stack_dynamic_inventory_aws_ec2.yaml | 12 ++++++++++++
1 file changed, 12 insertions(+)
create mode 100644 ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml
diff --git a/ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml b/ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml
new file mode 100644
index 0000000000..83ac9af451
--- /dev/null
+++ b/ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml
@@ -0,0 +1,12 @@
+plugin: aws_ec2
+regions:
+ - "us-east-1"
+filters:
+ tag:app-stack-name: APP_STACK_NAME
+ tag:environment: dev
+
+hostnames:
+ - "private-ip-address"
+
+compose:
+ ansible_user: "'ec2-user'"
\ No newline at end of file
From 3acd70d048c5a09ef5f6d0165bd747523eb07b17 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sun, 18 Oct 2020 14:12:20 -0400
Subject: [PATCH 26/46] update aws-ec2yml
---
.../dev_stack_dynamic_inventory_aws_ec2.yaml | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml b/ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml
index 83ac9af451..a3f8cd9549 100644
--- a/ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml
+++ b/ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml
@@ -3,10 +3,20 @@ regions:
- "us-east-1"
filters:
tag:app-stack-name: APP_STACK_NAME
- tag:environment: dev
-
+ tag:environment: dev
+keyed_groups:
+ - key: tags['app-stack-name']
+ prefix: 'app_stack_'
+ separator: ''
+ - key: tags['swarm-role']
+ prefix: 'role_'
+ separator: ''
+ - key: tags['environment']
+ prefix: 'env_'
+ separator: ''
+ - key: tags['server']
+ separator: ''
hostnames:
- "private-ip-address"
-
-compose:
+compose:
ansible_user: "'ec2-user'"
\ No newline at end of file
From a85f69bd4677c1cf0350c629780c5aaa15da01d5 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sun, 18 Oct 2020 14:27:36 -0400
Subject: [PATCH 27/46] added ansible dynamic inventory files for dev
environment
---
.../dev_stack_swarm_grand_master_aws_ec2.yaml | 11 +++++++++++
.../inventory/dev_stack_swarm_managers_aws_ec2.yaml | 11 +++++++++++
.../inventory/dev_stack_swarm_workers_aws_ec2.yaml | 11 +++++++++++
3 files changed, 33 insertions(+)
create mode 100644 ansible/inventory/dev_stack_swarm_grand_master_aws_ec2.yaml
create mode 100644 ansible/inventory/dev_stack_swarm_managers_aws_ec2.yaml
create mode 100644 ansible/inventory/dev_stack_swarm_workers_aws_ec2.yaml
diff --git a/ansible/inventory/dev_stack_swarm_grand_master_aws_ec2.yaml b/ansible/inventory/dev_stack_swarm_grand_master_aws_ec2.yaml
new file mode 100644
index 0000000000..b1569ff1d9
--- /dev/null
+++ b/ansible/inventory/dev_stack_swarm_grand_master_aws_ec2.yaml
@@ -0,0 +1,11 @@
+plugin: aws_ec2
+regions:
+ - "us-east-1"
+filters:
+ tag:app-stack-name: APP_STACK_NAME
+ tag:environment: dev
+ tag:swarm-role: grand-master
+hostnames:
+ - "private-ip-address"
+compose:
+ ansible_user: "'ec2-user'"
\ No newline at end of file
diff --git a/ansible/inventory/dev_stack_swarm_managers_aws_ec2.yaml b/ansible/inventory/dev_stack_swarm_managers_aws_ec2.yaml
new file mode 100644
index 0000000000..e9647b593b
--- /dev/null
+++ b/ansible/inventory/dev_stack_swarm_managers_aws_ec2.yaml
@@ -0,0 +1,11 @@
+plugin: aws_ec2
+regions:
+ - "us-east-1"
+filters:
+ tag:app-stack-name: APP_STACK_NAME
+ tag:environment: dev
+ tag:swarm-role: manager
+hostnames:
+ - "private-ip-address"
+compose:
+ ansible_user: "'ec2-user'"
\ No newline at end of file
diff --git a/ansible/inventory/dev_stack_swarm_workers_aws_ec2.yaml b/ansible/inventory/dev_stack_swarm_workers_aws_ec2.yaml
new file mode 100644
index 0000000000..f702f7ad93
--- /dev/null
+++ b/ansible/inventory/dev_stack_swarm_workers_aws_ec2.yaml
@@ -0,0 +1,11 @@
+plugin: aws_ec2
+regions:
+ - "us-east-1"
+filters:
+ tag:app-stack-name: APP_STACK_NAME
+ tag:environment: dev
+ tag:swarm-role: worker
+hostnames:
+ - "private-ip-address"
+compose:
+ ansible_user: "'ec2-user'"
\ No newline at end of file
From d867efb2b0beb7ff2fffd5bfa81e04b088ed8109 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sun, 18 Oct 2020 15:43:59 -0400
Subject: [PATCH 28/46] added ansible playbooks for the dev environment
---
.../playbooks/pb_initialize_docker_swarm.yaml | 17 +++++++
.../pb_join_docker_swarm_managers.yaml | 17 +++++++
.../pb_join_docker_swarm_workers.yaml | 17 +++++++
..._setup_for_all_docker_swarm_instances.yaml | 49 +++++++++++++++++++
4 files changed, 100 insertions(+)
create mode 100644 ansible/playbooks/pb_initialize_docker_swarm.yaml
create mode 100644 ansible/playbooks/pb_join_docker_swarm_managers.yaml
create mode 100644 ansible/playbooks/pb_join_docker_swarm_workers.yaml
create mode 100644 ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml
diff --git a/ansible/playbooks/pb_initialize_docker_swarm.yaml b/ansible/playbooks/pb_initialize_docker_swarm.yaml
new file mode 100644
index 0000000000..8c048a7ac0
--- /dev/null
+++ b/ansible/playbooks/pb_initialize_docker_swarm.yaml
@@ -0,0 +1,17 @@
+---
+- hosts: role_grand_master
+ tasks:
+ - name: initialize docker swarm
+ shell: docker swarm init
+ - name: install git
+ yum:
+ name: git
+ state: present
+ - name: run the visualizer app for docker swarm
+ shell: |
+ docker service create \
+ --name=viz \
+ --publish=8088:8080/tcp \
+ --constraint=node.role==manager \
+ --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
+ dockersamples/visualizer
\ No newline at end of file
diff --git a/ansible/playbooks/pb_join_docker_swarm_managers.yaml b/ansible/playbooks/pb_join_docker_swarm_managers.yaml
new file mode 100644
index 0000000000..b9ac69c7c3
--- /dev/null
+++ b/ansible/playbooks/pb_join_docker_swarm_managers.yaml
@@ -0,0 +1,17 @@
+---
+- hosts: role_grand_master
+ tasks:
+ - name: Get swarm join-token for managers
+ shell: docker swarm join-token manager | grep -i 'docker'
+ register: join_command_for_managers
+ - debug: msg='{{ join_command_for_managers.stdout.strip() }}'
+ - name: register grand_master with variable
+ add_host:
+ name: "grand_master"
+ manager_join: "{{ join_command_for_managers.stdout.strip() }}"
+- hosts: role_manager
+ tasks:
+ - name: Join managers to swarm
+ shell: "{{ hostvars['grand_master']['manager_join'] }}"
+ register: result_of_joining
+ - debug: msg='{{ result_of_joining.stdout }}'
\ No newline at end of file
diff --git a/ansible/playbooks/pb_join_docker_swarm_workers.yaml b/ansible/playbooks/pb_join_docker_swarm_workers.yaml
new file mode 100644
index 0000000000..19df5e03f7
--- /dev/null
+++ b/ansible/playbooks/pb_join_docker_swarm_workers.yaml
@@ -0,0 +1,17 @@
+---
+- hosts: role_grand_master
+ tasks:
+ - name: Get swarm join-token for workers
+ shell: docker swarm join-token worker | grep -i 'docker'
+ register: join_command_for_workers
+ - debug: msg='{{ join_command_for_workers.stdout.strip() }}'
+ - name: register grand_master with variable
+ add_host:
+ name: "grand_master"
+ worker_join: "{{ join_command_for_workers.stdout.strip() }}"
+- hosts: role_worker
+ tasks:
+ - name: Join workers to swarm
+ shell: "{{ hostvars['grand_master']['worker_join'] }}"
+ register: result_of_joining
+ - debug: msg='{{ result_of_joining.stdout }}'
\ No newline at end of file
diff --git a/ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml b/ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml
new file mode 100644
index 0000000000..8fcefc775a
--- /dev/null
+++ b/ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml
@@ -0,0 +1,49 @@
+---
+- hosts: all
+ tasks:
+ - name: update os
+ yum:
+ name: '*'
+ state: present
+ - name: install docker
+ command: amazon-linux-extras install docker=latest -y
+ - name: start docker
+ service:
+ name: docker
+ state: started
+ enabled: yes
+ - name: add ec2-user to docker group
+ shell: "usermod -a -G docker ec2-user"
+ - name: install docker compose.
+ get_url:
+ url: https://github.com/docker/compose/releases/download/1.26.2/docker-compose-Linux-x86_64
+ dest: /usr/local/bin/docker-compose
+ mode: 0755
+ - name: uninstall aws cli v1
+ file:
+ path: /bin/aws
+ state: absent
+ - name: download awscliv2 installer
+ unarchive:
+ src: https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip
+ dest: /tmp
+ remote_src: yes
+ creates: /tmp/aws
+ mode: 0755
+ - name: run the installer
+ command:
+ args:
+ cmd: "/tmp/aws/install"
+ creates: /usr/local/bin/aws
+ - name: install ecr credential helper
+ yum:
+ name: amazon-ecr-credential-helper
+ state: present
+ - name: Create folder for config file of ecr cred helper
+ file:
+ path: /home/ec2-user/.docker
+ state: directory
+ - name: create config file with content for ecr creds
+ copy:
+ content: '{"credsStore":"ecr-login"}'
+ dest: /home/ec2-user/.docker/config.json
\ No newline at end of file
From c6f0e33da5816282f9f935937c75ea561949dfa7 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 20 Oct 2020 20:36:59 -0400
Subject: [PATCH 29/46] added scripts for qa automation environment
---
.../playbooks/pb_initialize_docker_swarm.yaml | 16 ++++++----------
.../pb_setup_for_all_docker_swarm_instances.yaml | 16 ++++++++++------
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/ansible/playbooks/pb_initialize_docker_swarm.yaml b/ansible/playbooks/pb_initialize_docker_swarm.yaml
index 8c048a7ac0..e1a9c473fc 100644
--- a/ansible/playbooks/pb_initialize_docker_swarm.yaml
+++ b/ansible/playbooks/pb_initialize_docker_swarm.yaml
@@ -3,15 +3,11 @@
tasks:
- name: initialize docker swarm
shell: docker swarm init
- - name: install git
- yum:
- name: git
- state: present
- name: run the visualizer app for docker swarm
- shell: |
+ shell: |
docker service create \
- --name=viz \
- --publish=8088:8080/tcp \
- --constraint=node.role==manager \
- --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
- dockersamples/visualizer
\ No newline at end of file
+ --name=viz \
+ --publish=8088:8080/tcp \
+ --constraint=node.role==manager \
+ --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
+ dockersamples/visualizer
\ No newline at end of file
diff --git a/ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml b/ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml
index 8fcefc775a..d4d401cd1c 100644
--- a/ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml
+++ b/ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml
@@ -8,13 +8,13 @@
- name: install docker
command: amazon-linux-extras install docker=latest -y
- name: start docker
- service:
+ service:
name: docker
state: started
enabled: yes
- name: add ec2-user to docker group
shell: "usermod -a -G docker ec2-user"
- - name: install docker compose.
+ - name: Install Docker Compose (if configured).
get_url:
url: https://github.com/docker/compose/releases/download/1.26.2/docker-compose-Linux-x86_64
dest: /usr/local/bin/docker-compose
@@ -23,14 +23,14 @@
file:
path: /bin/aws
state: absent
- - name: download awscliv2 installer
+ - name: Download awscliv2 installer
unarchive:
src: https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip
dest: /tmp
remote_src: yes
creates: /tmp/aws
mode: 0755
- - name: run the installer
+ - name: Run the installer.
command:
args:
cmd: "/tmp/aws/install"
@@ -43,7 +43,11 @@
file:
path: /home/ec2-user/.docker
state: directory
- - name: create config file with content for ecr creds
+ owner: "ec2-user"
+ mode: "g+rwx"
+ - name: create config file with content for ecr creds
copy:
content: '{"credsStore":"ecr-login"}'
- dest: /home/ec2-user/.docker/config.json
\ No newline at end of file
+ dest: /home/ec2-user/.docker/config.json
+ owner: "ec2-user"
+ mode: "g+rwx"
\ No newline at end of file
From cca2eca0cb10bd2dc69a2c921fbc9352a9c4120e Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 20 Oct 2020 20:39:09 -0400
Subject: [PATCH 30/46] added scripts for qa automation environment
---
.../create-qa-automation-environment.sh | 31 +++
...-swarm-infrastructure-cfn-template.yml.yml | 179 ++++++++++++++++++
.../web/{ => web}/PetResourceTest.java | 0
3 files changed, 210 insertions(+)
create mode 100644 infrastructure/create-qa-automation-environment.sh
create mode 100644 infrastructure/dev-docker-swarm-infrastructure-cfn-template.yml.yml
rename spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/{ => web}/PetResourceTest.java (100%)
diff --git a/infrastructure/create-qa-automation-environment.sh b/infrastructure/create-qa-automation-environment.sh
new file mode 100644
index 0000000000..8a2fa03d82
--- /dev/null
+++ b/infrastructure/create-qa-automation-environment.sh
@@ -0,0 +1,31 @@
+# Environment variables
+PATH="$PATH:/usr/local/bin"
+APP_NAME="Petclinic"
+CFN_KEYPAIR="Call-$APP_NAME-dev-${BUILD_NUMBER}.key"
+CFN_TEMPLATE="./infrastructure/dev-docker-swarm-infrastructure-cfn-template.yml"
+AWS_REGION="us-east-1"
+export ANSIBLE_PRIVATE_KEY_FILE="${WORKSPACE}/${CFN_KEYPAIR}"
+export ANSIBLE_HOST_KEY_CHECKING=False
+export APP_STACK_NAME="Call-$APP_NAME-App-${BUILD_NUMBER}"
+# Create key pair for Ansible
+aws ec2 create-key-pair --region ${AWS_REGION} --key-name ${CFN_KEYPAIR} --query "KeyMaterial" --output text > ${CFN_KEYPAIR}
+chmod 400 ${CFN_KEYPAIR}
+# Create infrastructure for Docker Swarm
+aws cloudformation create-stack --region ${AWS_REGION} --stack-name ${APP_STACK_NAME} --capabilities CAPABILITY_IAM --template-body file://${CFN_TEMPLATE} --parameters ParameterKey=KeyPairName,ParameterValue=${CFN_KEYPAIR}
+# Install Docker Swarm environment on the infrastructure
+# Update dynamic inventory (hosts/docker nodes)
+sed -i "s/APP_STACK_NAME/$APP_STACK_NAME/" ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml
+# Install common tools on all instances/nodes
+ansible-playbook -i ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml
+# Initialize Docker Swarm on Grand Master
+ansible-playbook -i ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_initialize_docker_swarm.yaml
+# Join the manager instances to the Swarm
+ansible-playbook -i ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_join_docker_swarm_managers.yaml
+# Join the worker instances to the Swarm
+ansible-playbook -i ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_join_docker_swarm_workers.yaml
+# Build, Deploy, Test the application
+# Tear down the Docker Swarm infrastructure
+aws cloudformation delete-stack --region ${AWS_REGION} --stack-name ${AWS_STACK_NAME}
+# Delete key pair
+aws ec2 delete-key-pair --region ${AWS_REGION} --key-name ${CFN_KEYPAIR}
+rm -rf ${CFN_KEYPAIR}
\ No newline at end of file
diff --git a/infrastructure/dev-docker-swarm-infrastructure-cfn-template.yml.yml b/infrastructure/dev-docker-swarm-infrastructure-cfn-template.yml.yml
new file mode 100644
index 0000000000..0302e30472
--- /dev/null
+++ b/infrastructure/dev-docker-swarm-infrastructure-cfn-template.yml.yml
@@ -0,0 +1,179 @@
+AWSTemplateFormatVersion: 2010-09-09
+Description: >
+ This Cloudformation Template creates an infrastructure for Docker Swarm
+ with five EC2 Instances with Amazon Linux 2. Instances are configured
+ with custom security group allowing SSH (22), HTTP (80) UDP (4789, 7946),
+ and TCP(2377, 7946, 8080) connections from anywhere.
+ User needs to select appropriate key name when launching the template.
+Parameters:
+ KeyPairName:
+ Description: Enter the name of your Key Pair for SSH connections.
+ Type: AWS::EC2::KeyPair::KeyName
+ ConstraintDescription: Must one of the existing EC2 KeyPair
+Resources:
+ RoleEnablingEC2forECR:
+ Type: "AWS::IAM::Role"
+ Properties:
+ AssumeRolePolicyDocument:
+ Statement:
+ - Effect: Allow
+ Principal:
+ Service:
+ - ec2.amazonaws.com
+ Action:
+ - 'sts:AssumeRole'
+ ManagedPolicyArns:
+ - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess
+ EC2Profile:
+ Type: "AWS::IAM::InstanceProfile"
+ Properties:
+ Roles: #required
+ - !Ref RoleEnablingEC2forECR
+ DockerMachinesSecurityGroup:
+ Type: AWS::EC2::SecurityGroup
+ Properties:
+ GroupDescription: Enable SSH and HTTP for Docker Machines
+ SecurityGroupIngress:
+ - IpProtocol: tcp
+ FromPort: 80
+ ToPort: 80
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 22
+ ToPort: 22
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 2377
+ ToPort: 2377
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 7946
+ ToPort: 7946
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: udp
+ FromPort: 7946
+ ToPort: 7946
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: udp
+ FromPort: 4789
+ ToPort: 4789
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8080
+ ToPort: 8080
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8088
+ ToPort: 8088
+ CidrIp: 0.0.0.0/0
+ DockerMachineLT:
+ Type: "AWS::EC2::LaunchTemplate"
+ Properties:
+ LaunchTemplateData:
+ ImageId: ami-0947d2ba12ee1ff75
+ InstanceType: t2.medium
+ KeyName: !Ref KeyPairName
+ IamInstanceProfile:
+ Arn: !GetAtt EC2Profile.Arn
+ SecurityGroupIds:
+ - !GetAtt DockerMachinesSecurityGroup.GroupId
+ TagSpecifications:
+ - ResourceType: instance
+ Tags:
+ - Key: app-stack-name
+ Value: !Sub ${AWS::StackName}
+ - Key: environment
+ Value: dev
+ DockerInstance1:
+ Type: AWS::EC2::Instance
+ DependsOn:
+ - "DockerInstance2"
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-1
+ - Key: swarm-role
+ Value: grand-master
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 1st
+ DockerInstance2:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-2
+ - Key: swarm-role
+ Value: manager
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 2nd
+ DockerInstance3:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-3
+ - Key: swarm-role
+ Value: manager
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 3rd
+ DockerInstance4:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-4
+ - Key: swarm-role
+ Value: worker
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 4th
+ DockerInstance5:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-5
+ - Key: swarm-role
+ Value: worker
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 5th
+Outputs:
+ 1stDockerInstanceDNSName:
+ Description: 1st Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance1.PublicDnsName
+ 2ndDockerInstanceDNSName:
+ Description: 2nd Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance2.PublicDnsName
+ 3rdDockerInstanceDNSName:
+ Description: 3rd Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance3.PublicDnsName
+ 4thDockerInstanceDNSName:
+ Description: 4th Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance4.PublicDnsName
+ 5thDockerInstanceDNSName:
+ Description: 5th Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance5.PublicDnsName
\ No newline at end of file
diff --git a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/PetResourceTest.java b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/web/PetResourceTest.java
similarity index 100%
rename from spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/PetResourceTest.java
rename to spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/web/PetResourceTest.java
From 27b4b5cb9ff3e33ae14428c046fa8ee9e6138c95 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 20 Oct 2020 21:24:00 -0400
Subject: [PATCH 31/46] added scripts for qa automation environment
---
jenkins/build-dev-docker-images-for-ecr.sh | 10 ++++++++++
jenkins/package-with-maven-container.sh | 1 +
.../prepare-tags-ecr-for-dev-docker-images.sh | 18 ++++++++++++++++++
jenkins/push-dev-docker-images-to-ecr.sh | 11 +++++++++++
4 files changed, 40 insertions(+)
create mode 100644 jenkins/build-dev-docker-images-for-ecr.sh
create mode 100644 jenkins/package-with-maven-container.sh
create mode 100644 jenkins/prepare-tags-ecr-for-dev-docker-images.sh
create mode 100644 jenkins/push-dev-docker-images-to-ecr.sh
diff --git a/jenkins/build-dev-docker-images-for-ecr.sh b/jenkins/build-dev-docker-images-for-ecr.sh
new file mode 100644
index 0000000000..4ea98df327
--- /dev/null
+++ b/jenkins/build-dev-docker-images-for-ecr.sh
@@ -0,0 +1,10 @@
+docker build --force-rm -t "${IMAGE_TAG_ADMIN_SERVER}" "${WORKSPACE}/spring-petclinic-admin-server"
+docker build --force-rm -t "${IMAGE_TAG_API_GATEWAY}" "${WORKSPACE}/spring-petclinic-api-gateway"
+docker build --force-rm -t "${IMAGE_TAG_CONFIG_SERVER}" "${WORKSPACE}/spring-petclinic-config-server"
+docker build --force-rm -t "${IMAGE_TAG_CUSTOMERS_SERVICE}" "${WORKSPACE}/spring-petclinic-customers-service"
+docker build --force-rm -t "${IMAGE_TAG_DISCOVERY_SERVER}" "${WORKSPACE}/spring-petclinic-discovery-server"
+docker build --force-rm -t "${IMAGE_TAG_HYSTRIX_DASHBOARD}" "${WORKSPACE}/spring-petclinic-hystrix-dashboard"
+docker build --force-rm -t "${IMAGE_TAG_VETS_SERVICE}" "${WORKSPACE}/spring-petclinic-vets-service"
+docker build --force-rm -t "${IMAGE_TAG_VISITS_SERVICE}" "${WORKSPACE}/spring-petclinic-visits-service"
+docker build --force-rm -t "${IMAGE_TAG_GRAFANA_SERVICE}" "${WORKSPACE}/docker/grafana"
+docker build --force-rm -t "${IMAGE_TAG_PROMETHEUS_SERVICE}" "${WORKSPACE}/docker/prometheus"
\ No newline at end of file
diff --git a/jenkins/package-with-maven-container.sh b/jenkins/package-with-maven-container.sh
new file mode 100644
index 0000000000..6d691a5ed4
--- /dev/null
+++ b/jenkins/package-with-maven-container.sh
@@ -0,0 +1 @@
+docker run --rm -v $HOME/.m2:/root/.m2 -v $WORKSPACE:/app -w /app maven:3.6-openjdk-11 mvn clean package
\ No newline at end of file
diff --git a/jenkins/prepare-tags-ecr-for-dev-docker-images.sh b/jenkins/prepare-tags-ecr-for-dev-docker-images.sh
new file mode 100644
index 0000000000..8fff3dbf6d
--- /dev/null
+++ b/jenkins/prepare-tags-ecr-for-dev-docker-images.sh
@@ -0,0 +1,18 @@
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-admin-server/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_ADMIN_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:admin-server-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-api-gateway/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_API_GATEWAY="${ECR_REGISTRY}/${APP_REPO_NAME}:api-gateway-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-config-server/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_CONFIG_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:config-server-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-customers-service/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_CUSTOMERS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:customers-service-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-discovery-server/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_DISCOVERY_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:discovery-server-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-hystrix-dashboard/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_HYSTRIX_DASHBOARD="${ECR_REGISTRY}/${APP_REPO_NAME}:hystrix-dashboard-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-vets-service/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_VETS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:vets-service-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-visits-service/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_VISITS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:visits-service-v${MVN_VERSION}-b${BUILD_NUMBER}"
+export IMAGE_TAG_GRAFANA_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:grafana-service"
+export IMAGE_TAG_PROMETHEUS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:prometheus-service"
\ No newline at end of file
diff --git a/jenkins/push-dev-docker-images-to-ecr.sh b/jenkins/push-dev-docker-images-to-ecr.sh
new file mode 100644
index 0000000000..a65975e754
--- /dev/null
+++ b/jenkins/push-dev-docker-images-to-ecr.sh
@@ -0,0 +1,11 @@
+aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ECR_REGISTRY}
+docker push "${IMAGE_TAG_ADMIN_SERVER}"
+ocker push "${IMAGE_TAG_API_GATEWAY}"
+docker push "${IMAGE_TAG_CONFIG_SERVER}"
+docker push "${IMAGE_TAG_CUSTOMERS_SERVICE}"
+docker push "${IMAGE_TAG_DISCOVERY_SERVER}"
+docker push "${IMAGE_TAG_HYSTRIX_DASHBOARD}"
+docker push "${IMAGE_TAG_VETS_SERVICE}"
+docker push "${IMAGE_TAG_VISITS_SERVICE}"
+docker push "${IMAGE_TAG_GRAFANA_SERVICE}"
+docker push "${IMAGE_TAG_PROMETHEUS_SERVICE}"
\ No newline at end of file
From e245eead5d5d0d4540c13b6a594e1e524f65321e Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 20 Oct 2020 21:45:30 -0400
Subject: [PATCH 32/46] updated ecr.sh
---
jenkins/push-dev-docker-images-to-ecr.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/jenkins/push-dev-docker-images-to-ecr.sh b/jenkins/push-dev-docker-images-to-ecr.sh
index a65975e754..7ae5bfdfde 100644
--- a/jenkins/push-dev-docker-images-to-ecr.sh
+++ b/jenkins/push-dev-docker-images-to-ecr.sh
@@ -1,6 +1,6 @@
aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ECR_REGISTRY}
docker push "${IMAGE_TAG_ADMIN_SERVER}"
-ocker push "${IMAGE_TAG_API_GATEWAY}"
+docker push "${IMAGE_TAG_API_GATEWAY}"
docker push "${IMAGE_TAG_CONFIG_SERVER}"
docker push "${IMAGE_TAG_CUSTOMERS_SERVICE}"
docker push "${IMAGE_TAG_DISCOVERY_SERVER}"
From 217662dd126f31112d9fa75b85a56d46e540a84f Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 20 Oct 2020 22:00:24 -0400
Subject: [PATCH 33/46] updated pettestjava
---
.../petclinic/customers/web/model/PetTest.java | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
index e5788a8106..2a6380fbcf 100644
--- a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
+++ b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/model/PetTest.java
@@ -1,11 +1,11 @@
package org.springframework.samples.petclinic.customers.model;
-
+
import static org.junit.jupiter.api.Assertions.assertEquals;
-
+
+import java.util.Date;
+
import org.junit.jupiter.api.Test;
-
public class PetTest {
-
@Test
public void testGetName(){
//Arrange
@@ -15,19 +15,17 @@ public void testGetName(){
//Assert
assertEquals("Fluffy", pet.getName());
}
-
@Test
public void testGetOwner(){
//Arrange
Pet pet = new Pet();
Owner owner = new Owner();
- owner.setFirstName("Huseyin");
+ owner.setFirstName("Call");
//Act
pet.setOwner(owner);
//Assert
- assertEquals("Huseyin", pet.getOwner().getFirstName());
+ assertEquals("Call", pet.getOwner().getFirstName());
}
-
@Test
public void testBirthDate(){
//Arrange
@@ -38,4 +36,4 @@ public void testBirthDate(){
//Assert
assertEquals(bd,pet.getBirthDate());
}
-}
\ No newline at end of file
+}
From 892314301360181c1afa1fb02d2f82e7dec1d3a7 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Thu, 22 Oct 2020 20:36:05 -0400
Subject: [PATCH 34/46] added scripts for running dummy selenium job
---
.../pb_deploy_app_on_docker_swarm.yaml | 14 ++
.../playbooks/pb_run_dummy_selenium_job.yaml | 10 ++
ansible/scripts/deploy_app_on_docker_swarm.sh | 4 +
ansible/scripts/run_dummy_selenium_job.sh | 2 +
docker-compose-swarm-dev.yml | 125 ++++++++++++++++++
selenium-jobs/dummy_selenium_test_headless.py | 14 ++
6 files changed, 169 insertions(+)
create mode 100644 ansible/playbooks/pb_deploy_app_on_docker_swarm.yaml
create mode 100644 ansible/playbooks/pb_run_dummy_selenium_job.yaml
create mode 100644 ansible/scripts/deploy_app_on_docker_swarm.sh
create mode 100644 ansible/scripts/run_dummy_selenium_job.sh
create mode 100644 docker-compose-swarm-dev.yml
create mode 100644 selenium-jobs/dummy_selenium_test_headless.py
diff --git a/ansible/playbooks/pb_deploy_app_on_docker_swarm.yaml b/ansible/playbooks/pb_deploy_app_on_docker_swarm.yaml
new file mode 100644
index 0000000000..fe81737bbc
--- /dev/null
+++ b/ansible/playbooks/pb_deploy_app_on_docker_swarm.yaml
@@ -0,0 +1,14 @@
+---
+- hosts: role_grand_master
+ tasks:
+ - name: Copy docker compose file to grand master
+ copy:
+ src: "{{ workspace }}/docker-compose-swarm-dev-tagged.yml"
+ dest: /home/ec2-user/docker-compose-swarm-dev-tagged.yml
+ - name: get login credentials for ecr
+ shell: "export PATH=$PATH:/usr/local/bin/ && aws ecr get-login-password --region {{ aws_region }} | docker login --username AWS --password-stdin {{ ecr_registry }}"
+ register: output
+ - name: deploy the app stack on swarm
+ shell: "docker stack deploy --with-registry-auth -c /home/ec2-user/docker-compose-swarm-dev-tagged.yml {{ app_name }}"
+ register: output
+ - debug: msg="{{ output.stdout }}"
\ No newline at end of file
diff --git a/ansible/playbooks/pb_run_dummy_selenium_job.yaml b/ansible/playbooks/pb_run_dummy_selenium_job.yaml
new file mode 100644
index 0000000000..9585026caa
--- /dev/null
+++ b/ansible/playbooks/pb_run_dummy_selenium_job.yaml
@@ -0,0 +1,10 @@
+---
+- hosts: all
+ tasks:
+ - name: run dummy selenium job
+ shell: "docker run --rm -v {{ workspace }}:{{ workspace }} -w {{ workspace }} callahanclarus/selenium-py-chrome:latest python {{ item }}"
+ with_fileglob: "{{ workspace }}/selenium-jobs/dummy*.py"
+ register: output
+ - name: show results
+ debug: msg="{{ item.stdout }}"
+ with_items: "{{ output.results }}"
\ No newline at end of file
diff --git a/ansible/scripts/deploy_app_on_docker_swarm.sh b/ansible/scripts/deploy_app_on_docker_swarm.sh
new file mode 100644
index 0000000000..d36c706bfc
--- /dev/null
+++ b/ansible/scripts/deploy_app_on_docker_swarm.sh
@@ -0,0 +1,4 @@
+PATH="$PATH:/usr/local/bin"
+APP_NAME="petclinic"
+envsubst < docker-compose-swarm-dev.yml > docker-compose-swarm-dev-tagged.yml
+ansible-playbook -i ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml -b --extra-vars "workspace=${WORKSPACE} app_name=${APP_NAME} aws_region=${AWS_REGION} ecr_registry=${ECR_REGISTRY}" ./ansible/playbooks/pb_deploy_app_on_docker_swarm.yaml
\ No newline at end of file
diff --git a/ansible/scripts/run_dummy_selenium_job.sh b/ansible/scripts/run_dummy_selenium_job.sh
new file mode 100644
index 0000000000..4e5d10d053
--- /dev/null
+++ b/ansible/scripts/run_dummy_selenium_job.sh
@@ -0,0 +1,2 @@
+PATH="$PATH:/usr/local/bin"
+ansible-playbook --connection=local --inventory 127.0.0.1, --extra-vars "workspace=${WORKSPACE}" ./ansible/playbooks/pb_run_dummy_selenium_job.yaml
\ No newline at end of file
diff --git a/docker-compose-swarm-dev.yml b/docker-compose-swarm-dev.yml
new file mode 100644
index 0000000000..4ccb0f2f25
--- /dev/null
+++ b/docker-compose-swarm-dev.yml
@@ -0,0 +1,125 @@
+version: '3.8'
+services:
+ config-server:
+ image: "${IMAGE_TAG_CONFIG_SERVER}"
+ networks:
+ - clarusnet
+ ports:
+ - 8888:8888
+ discovery-server:
+ image: "${IMAGE_TAG_DISCOVERY_SERVER}"
+ depends_on:
+ - config-server
+ entrypoint: ["./dockerize","-wait=tcp://config-server:8888","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 8761:8761
+ customers-service:
+ image: "${IMAGE_TAG_CUSTOMERS_SERVICE}"
+ deploy:
+ replicas: 3
+ update_config:
+ parallelism: 2
+ delay: 5s
+ order: start-first
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 8081:8081
+ visits-service:
+ image: "${IMAGE_TAG_VISITS_SERVICE}"
+ deploy:
+ replicas: 3
+ update_config:
+ parallelism: 2
+ delay: 5s
+ order: start-first
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 8082:8082
+ vets-service:
+ image: "${IMAGE_TAG_VETS_SERVICE}"
+ deploy:
+ replicas: 3
+ update_config:
+ parallelism: 2
+ delay: 5s
+ order: start-first
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 8083:8083
+ api-gateway:
+ image: "${IMAGE_TAG_API_GATEWAY}"
+ deploy:
+ replicas: 3
+ update_config:
+ parallelism: 2
+ delay: 5s
+ order: start-first
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 8080:8080
+ tracing-server:
+ image: openzipkin/zipkin
+ environment:
+ - JAVA_OPTS=-XX:+UnlockExperimentalVMOptions -Djava.security.egd=file:/dev/./urandom
+ networks:
+ - clarusnet
+ ports:
+ - 9411:9411
+ admin-server:
+ image: "${IMAGE_TAG_ADMIN_SERVER}"
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 9090:9090
+ hystrix-dashboard:
+ image: "${IMAGE_TAG_HYSTRIX_DASHBOARD}"
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 7979:7979
+ ## Grafana / Prometheus
+ grafana-server:
+ image: "${IMAGE_TAG_GRAFANA_SERVICE}"
+ networks:
+ - clarusnet
+ ports:
+ - 3000:3000
+ prometheus-server:
+ image: "${IMAGE_TAG_PROMETHEUS_SERVICE}"
+ networks:
+ - clarusnet
+ ports:
+ - 9091:9090
+networks:
+ clarusnet:
+ driver: overlay
\ No newline at end of file
diff --git a/selenium-jobs/dummy_selenium_test_headless.py b/selenium-jobs/dummy_selenium_test_headless.py
new file mode 100644
index 0000000000..05d9c12dcc
--- /dev/null
+++ b/selenium-jobs/dummy_selenium_test_headless.py
@@ -0,0 +1,14 @@
+from selenium import webdriver
+chrome_options = webdriver.ChromeOptions()
+chrome_options.add_argument("headless")
+chrome_options.add_argument("no-sandbox")
+chrome_options.add_argument("disable-dev-shm-usage")
+driver = webdriver.Chrome(options=chrome_options)
+base_url = "https://www.google.com/"
+driver.get(base_url)
+source = driver.page_source
+if "I'm Feeling Lucky" in source:
+ print("Test passed")
+else:
+ print("Test failed")
+driver.close()
\ No newline at end of file
From 7ec170e46d4f3bcb9719aeecefc8edfdce8fd912 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 24 Oct 2020 11:52:13 -0400
Subject: [PATCH 35/46] added qa automation pipeline for dev
---
ansible/playbooks/pb_run_selenium_jobs.yaml | 10 +
ansible/scripts/run_selenium_jobs.sh | 3 +
jenkins/jenkinsfile-petclinic-nightly | 179 ++++++++++++++++++
.../test_owners_register_headless.py | 18 +-
selenium-jobs/test_veterinarians_headless.py | 9 +-
5 files changed, 210 insertions(+), 9 deletions(-)
create mode 100644 ansible/playbooks/pb_run_selenium_jobs.yaml
create mode 100644 ansible/scripts/run_selenium_jobs.sh
create mode 100644 jenkins/jenkinsfile-petclinic-nightly
diff --git a/ansible/playbooks/pb_run_selenium_jobs.yaml b/ansible/playbooks/pb_run_selenium_jobs.yaml
new file mode 100644
index 0000000000..3c76d89025
--- /dev/null
+++ b/ansible/playbooks/pb_run_selenium_jobs.yaml
@@ -0,0 +1,10 @@
+---
+- hosts: all
+ tasks:
+ - name: run all selenium jobs
+ shell: "docker run --rm --env MASTER_PUBLIC_IP={{ master_public_ip }} -v {{ workspace }}:{{ workspace }} -w {{ workspace }} callahanclarus/selenium-py-chrome:latest python {{ item }}"
+ register: output
+ with_fileglob: "{{ workspace }}/selenium-jobs/test*.py"
+ - name: show results
+ debug: msg="{{ item.stdout }}"
+ with_items: "{{ output.results }}"
\ No newline at end of file
diff --git a/ansible/scripts/run_selenium_jobs.sh b/ansible/scripts/run_selenium_jobs.sh
new file mode 100644
index 0000000000..0306d867a0
--- /dev/null
+++ b/ansible/scripts/run_selenium_jobs.sh
@@ -0,0 +1,3 @@
+PATH="$PATH:/usr/local/bin"
+ansible-playbook -vvv --connection=local --inventory 127.0.0.1,
+--extra-vars "workspace=${WORKSPACE} master_public_ip=${GRAND_MASTER_PUBLIC_IP}" ./ansible/playbooks/pb_run_selenium_jobs.yaml
diff --git a/jenkins/jenkinsfile-petclinic-nightly b/jenkins/jenkinsfile-petclinic-nightly
new file mode 100644
index 0000000000..f99776a6e0
--- /dev/null
+++ b/jenkins/jenkinsfile-petclinic-nightly
@@ -0,0 +1,179 @@
+pipeline {
+ agent { label "master" }
+ environment {
+ PATH=sh(script:"echo $PATH:/usr/local/bin", returnStdout:true).trim()
+ APP_NAME="petclinic"
+ APP_STACK_NAME="Huseyin-${APP_NAME}-app-dev-${BUILD_NUMBER}"
+ APP_REPO_NAME="huseyin-repo/${APP_NAME}-app-dev"
+ AWS_ACCOUNT_ID=sh(script:'export PATH="$PATH:/usr/local/bin" && aws sts get-caller-identity --query Account --output text', returnStdout:true).trim()
+ AWS_REGION="us-east-1"
+ ECR_REGISTRY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"
+ CFN_KEYPAIR="huseyin-${APP_NAME}-dev-${BUILD_NUMBER}.key"
+ CFN_TEMPLATE="./infrastructure/dev-docker-swarm-infrastructure-cfn-template.yml"
+ ANSIBLE_PRIVATE_KEY_FILE="${WORKSPACE}/${CFN_KEYPAIR}"
+ ANSIBLE_HOST_KEY_CHECKING="False"
+ }
+ stages {
+ stage('Create ECR Repo'){
+ steps {
+ echo "Creating ECR Repo for ${APP_NAME} app"
+ sh """
+ aws ecr create-repository \
+ --repository-name ${APP_REPO_NAME} \
+ --image-scanning-configuration scanOnPush=false \
+ --image-tag-mutability MUTABLE \
+ --region ${AWS_REGION}
+ """
+ }
+ }
+ stage('Package Application'){
+ steps {
+ echo 'Packaging the app into jars with maven'
+ sh ". ./jenkins/package-with-maven-container.sh"
+ }
+ }
+ stage('Prepare Tags for Docker Images'){
+ steps {
+ echo 'Preparing Tags for Docker Images'
+ script {
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-admin-server/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_ADMIN_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:admin-server-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-api-gateway/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_API_GATEWAY="${ECR_REGISTRY}/${APP_REPO_NAME}:api-gateway-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-config-server/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_CONFIG_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:config-server-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-customers-service/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_CUSTOMERS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:customers-service-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-discovery-server/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_DISCOVERY_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:discovery-server-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-hystrix-dashboard/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_HYSTRIX_DASHBOARD="${ECR_REGISTRY}/${APP_REPO_NAME}:hystrix-dashboard-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-vets-service/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_VETS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:vets-service-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-visits-service/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_VISITS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:visits-service-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ env.IMAGE_TAG_GRAFANA_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:grafana-service"
+ env.IMAGE_TAG_PROMETHEUS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:prometheus-service"
+ }
+ }
+ }
+ stage('Build App Docker Images'){
+ steps {
+ echo 'Building App Dev Images'
+ sh ". ./jenkins/build-dev-docker-images-for-ecr.sh"
+ sh 'docker image ls'
+ }
+ }
+ stage('Push Images to ECR Repo'){
+ steps {
+ echo "Pushing ${APP_NAME} App Images to ECR Repo"
+ sh ". ./jenkins/push-dev-docker-images-to-ecr.sh"
+ }
+ }
+ stage('Create Key Pair for Ansible'){
+ steps {
+ echo "Creating Key Pair for ${APP_NAME} App"
+ sh "aws ec2 create-key-pair --region ${AWS_REGION} --key-name ${CFN_KEYPAIR} --query KeyMaterial --output text > ${CFN_KEYPAIR}"
+ sh "chmod 400 ${CFN_KEYPAIR}"
+ }
+ }
+ stage('Create QA Automation Infrastructure') {
+ steps {
+ echo 'Creating QA Automation Infrastructure for Dev Environment with Cloudfomation'
+ sh "aws cloudformation create-stack --region ${AWS_REGION} --stack-name ${APP_STACK_NAME} --capabilities CAPABILITY_IAM --template-body file://${CFN_TEMPLATE} --parameters ParameterKey=KeyPairName,ParameterValue=${CFN_KEYPAIR}"
+
+ script {
+ while(true) {
+ echo "Docker Grand Master is not UP and running yet. Will try to reach again after 10 seconds..."
+ sleep(10)
+
+ ip = sh(script:"aws ec2 describe-instances --region ${AWS_REGION} --filters Name=tag-value,Values=grand-master Name=tag-value,Values=${APP_STACK_NAME} --query Reservations[*].Instances[*].[PublicIpAddress] --output text", returnStdout:true).trim()
+
+ if (ip.length() >= 7) {
+ echo "Docker Grand Master Public Ip Address Found: $ip"
+ env.GRAND_MASTER_PUBLIC_IP = "$ip"
+ break
+ }
+ }
+ while(true) {
+ try{
+ sh "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ${WORKSPACE}/${CFN_KEYPAIR} ec2-user@${GRAND_MASTER_PUBLIC_IP} hostname"
+ echo "Docker Grand Master is reachable with SSH."
+ break
+ }
+ catch(Exception){
+ echo "Could not connect to Docker Grand Master with SSH, I will try again in 10 seconds"
+ sleep(10)
+ }
+ }
+ }
+ }
+ }
+ stage('Create Docker Swarm for QA Automation Build'){
+ steps {
+ echo "Setup Docker Swarm for QA Automation Build for ${APP_NAME} App"
+ echo "Update dynamic environment"
+ sh "sed -i 's/APP_STACK_NAME/${APP_STACK_NAME}/' ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml"
+ echo "Swarm Setup for all nodes (instances)"
+ sh "ansible-playbook -i ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml"
+ echo "Swarm Setup for Grand Master node"
+ sh "ansible-playbook -i ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_initialize_docker_swarm.yaml"
+ echo "Swarm Setup for Other Managers nodes"
+ sh "ansible-playbook -i ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_join_docker_swarm_managers.yaml"
+ echo "Swarm Setup for Workers nodes"
+ sh "ansible-playbook -i ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_join_docker_swarm_workers.yaml"
+ }
+ }
+ stage('Deploy App on Docker Swarm'){
+ steps {
+ echo 'Deploying App on Swarm'
+ sh 'envsubst < docker-compose-swarm-dev.yml > docker-compose-swarm-dev-tagged.yml'
+ sh 'ansible-playbook -i ./ansible/inventory/dev_stack_dynamic_inventory_aws_ec2.yaml -b --extra-vars "workspace=${WORKSPACE} app_name=${APP_NAME} aws_region=${AWS_REGION} ecr_registry=${ECR_REGISTRY}" ./ansible/playbooks/pb_deploy_app_on_docker_swarm.yaml'
+ }
+ }
+ stage('Test the Application Deployment'){
+ steps {
+ echo "Check if the ${APP_NAME} app is ready or not"
+ script {
+ while(true) {
+ try{
+ sh "curl -s ${GRAND_MASTER_PUBLIC_IP}:8080"
+ echo "${APP_NAME} app is successfully deployed."
+ break
+ }
+ catch(Exception){
+ echo "Could not connect to ${APP_NAME} app"
+ sleep(5)
+ }
+ }
+ }
+ }
+
+ }
+ stage('Run QA Automation Tests'){
+ steps {
+ echo "Run the Selenium Functional Test on QA Environment"
+ sh 'ansible-playbook -vvv --connection=local --inventory 127.0.0.1, --extra-vars "workspace=${WORKSPACE} master_public_ip=${GRAND_MASTER_PUBLIC_IP}" ./ansible/playbooks/pb_run_selenium_jobs.yaml'
+ }
+ }
+ }
+ post {
+ always {
+ echo 'Deleting all local images'
+ sh 'docker image prune -af'
+ echo 'Delete the Image Repository on ECR'
+ sh """
+ aws ecr delete-repository \
+ --repository-name ${APP_REPO_NAME} \
+ --region ${AWS_REGION}\
+ --force
+ """
+ echo 'Tear down the Docker Swarm infrastructure using AWS CLI'
+ sh "aws cloudformation delete-stack --region ${AWS_REGION} --stack-name ${APP_STACK_NAME}"
+ echo "Delete existing key pair using AWS CLI"
+ sh "aws ec2 delete-key-pair --region ${AWS_REGION} --key-name ${CFN_KEYPAIR}"
+ sh "rm -rf ${CFN_KEYPAIR}"
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/selenium-jobs/test_owners_register_headless.py b/selenium-jobs/test_owners_register_headless.py
index 94b00c1bad..47951c77b6 100644
--- a/selenium-jobs/test_owners_register_headless.py
+++ b/selenium-jobs/test_owners_register_headless.py
@@ -1,21 +1,25 @@
from selenium import webdriver
-from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support.ui import WebDriverWait
-from selenium.webdriver.support import expected_conditions as EC
+from time import sleep
import random
+import os
# Set chrome options for working with headless mode (no screen)
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("headless")
+chrome_options.add_argument("no-sandbox")
+chrome_options.add_argument("disable-dev-shm-usage")
# Update webdriver instance of chrome-driver with adding chrome options
-driver = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=chrome_options)
+driver = webdriver.Chrome(options=chrome_options)
# Connect to the application
-url = "http://ec2-34-236-170-96.compute-1.amazonaws.com:8080"
+APP_IP = os.environ['MASTER_PUBLIC_IP']
+url = "http://"+APP_IP.strip()+":8080/"
+print(url)
driver.get(url)
owners_link = driver.find_element_by_link_text("OWNERS")
owners_link.click()
all_link = driver.find_element_by_link_text("REGISTER")
all_link.click()
+sleep(2)
# Register new Owner to Petclinic App
fn_field = driver.find_element_by_name('firstName')
fn = 'Huseyin' + str(random.randint(0, 100))
@@ -29,8 +33,8 @@
fn_field = driver.find_element_by_name('telephone')
fn_field.send_keys('+1230576803')
fn_field.send_keys(Keys.ENTER)
-# Wait until Owner List table loaded
-verify_table = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "table")))
+# Wait 1 second to get updated Owner List
+sleep(2)
# Verify that new user is added to Owner List
if fn in driver.page_source:
print(fn, 'is added and found in the Owners Table')
diff --git a/selenium-jobs/test_veterinarians_headless.py b/selenium-jobs/test_veterinarians_headless.py
index a7f9a9648f..fc6958c3cd 100644
--- a/selenium-jobs/test_veterinarians_headless.py
+++ b/selenium-jobs/test_veterinarians_headless.py
@@ -3,13 +3,18 @@
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
+import os
# Set chrome options for working with headless mode (no screen)
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("headless")
+chrome_options.add_argument("no-sandbox")
+chrome_options.add_argument("disable-dev-shm-usage")
# Update webdriver instance of chrome-driver with adding chrome options
-driver = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=chrome_options)
+driver = webdriver.Chrome(options=chrome_options)
# Connect to the application
-url = "http://3.238.121.49:8080"
+APP_IP = os.environ['MASTER_PUBLIC_IP']
+url = "http://"+APP_IP.strip()+":8080/"
+print(url)
driver.get(url)
vet_link = driver.find_element_by_link_text("VETERINARIANS")
vet_link.click()
From f78c6b871e00206d3f98b70ae18fc80ebe0c7f40 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 24 Oct 2020 12:41:24 -0400
Subject: [PATCH 36/46] updated selemium jobs
---
selenium-jobs/test_owners_all_headless.py | 11 +++++++++--
selenium-jobs/test_owners_register_headless.py | 3 ++-
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/selenium-jobs/test_owners_all_headless.py b/selenium-jobs/test_owners_all_headless.py
index 555cf35469..578872b94d 100644
--- a/selenium-jobs/test_owners_all_headless.py
+++ b/selenium-jobs/test_owners_all_headless.py
@@ -3,18 +3,25 @@
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
+import os
# Set chrome options for working with headless mode (no screen)
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("headless")
+chrome_options.add_argument("no-sandbox")
+chrome_options.add_argument("disable-dev-shm-usage")
# Update webdriver instance of chrome-driver with adding chrome options
-driver = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=chrome_options)
+driver = webdriver.Chrome(options=chrome_options)
# Connect to the application
-url = "http://3.238.121.49:8080"
+APP_IP = os.environ['MASTER_PUBLIC_IP']
+url = "http://"+APP_IP.strip()+":8080/"
+print(url)
driver.get(url)
owners_link = driver.find_element_by_link_text("OWNERS")
owners_link.click()
+sleep(2)
all_link = driver.find_element_by_link_text("ALL")
all_link.click()
+sleep(2)
# Verify that table loaded
sleep(1)
verify_table = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "table")))
diff --git a/selenium-jobs/test_owners_register_headless.py b/selenium-jobs/test_owners_register_headless.py
index 47951c77b6..85135d98cf 100644
--- a/selenium-jobs/test_owners_register_headless.py
+++ b/selenium-jobs/test_owners_register_headless.py
@@ -17,12 +17,13 @@
driver.get(url)
owners_link = driver.find_element_by_link_text("OWNERS")
owners_link.click()
+sleep(2)
all_link = driver.find_element_by_link_text("REGISTER")
all_link.click()
sleep(2)
# Register new Owner to Petclinic App
fn_field = driver.find_element_by_name('firstName')
-fn = 'Huseyin' + str(random.randint(0, 100))
+fn = 'Callahan' + str(random.randint(0, 100))
fn_field.send_keys(fn)
fn_field = driver.find_element_by_name('lastName')
fn_field.send_keys('Clarusway')
From a8721563d13e154a790b9ed593259b2e307dc73f Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 24 Oct 2020 13:14:06 -0400
Subject: [PATCH 37/46] updateds
---
...e.yml.yml => dev-docker-swarm-infrastructure-cfn-template.yml} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename infrastructure/{dev-docker-swarm-infrastructure-cfn-template.yml.yml => dev-docker-swarm-infrastructure-cfn-template.yml} (100%)
diff --git a/infrastructure/dev-docker-swarm-infrastructure-cfn-template.yml.yml b/infrastructure/dev-docker-swarm-infrastructure-cfn-template.yml
similarity index 100%
rename from infrastructure/dev-docker-swarm-infrastructure-cfn-template.yml.yml
rename to infrastructure/dev-docker-swarm-infrastructure-cfn-template.yml
From bddb1a0382b653941f939a25a8a8a73088a463e8 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 24 Oct 2020 14:26:14 -0400
Subject: [PATCH 38/46] added inventory script, qa cfn template and Jenkinsfile
to create QA Environment on Docker Swarm
---
.../qa_stack_dynamic_inventory_aws_ec2.yaml | 22 +++
...cker-swarm-infrastructure-cfn-template.yml | 179 ++++++++++++++++++
...e-permanent-key-pair-for-qa-environment.sh | 8 +
...file-create-qa-environment-on-docker-swarm | 65 +++++++
4 files changed, 274 insertions(+)
create mode 100644 ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml
create mode 100644 infrastructure/qa-docker-swarm-infrastructure-cfn-template.yml
create mode 100644 jenkins/create-permanent-key-pair-for-qa-environment.sh
create mode 100644 jenkins/jenkinsfile-create-qa-environment-on-docker-swarm
diff --git a/ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml b/ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml
new file mode 100644
index 0000000000..ea26604c19
--- /dev/null
+++ b/ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml
@@ -0,0 +1,22 @@
+plugin: aws_ec2
+regions:
+ - "us-east-1"
+filters:
+ tag:app-stack-name: APP_STACK_NAME
+ tag:environment: qa
+keyed_groups:
+ - key: tags['app-stack-name']
+ prefix: 'app_stack_'
+ separator: ''
+ - key: tags['swarm-role']
+ prefix: 'role_'
+ separator: ''
+ - key: tags['environment']
+ prefix: 'env_'
+ separator: ''
+ - key: tags['server']
+ separator: ''
+hostnames:
+ - "private-ip-address"
+compose:
+ ansible_user: "'ec2-user'"
\ No newline at end of file
diff --git a/infrastructure/qa-docker-swarm-infrastructure-cfn-template.yml b/infrastructure/qa-docker-swarm-infrastructure-cfn-template.yml
new file mode 100644
index 0000000000..602e2e1ceb
--- /dev/null
+++ b/infrastructure/qa-docker-swarm-infrastructure-cfn-template.yml
@@ -0,0 +1,179 @@
+AWSTemplateFormatVersion: 2010-09-09
+Description: >
+ This Cloudformation Template creates an infrastructure for Docker Swarm
+ with five EC2 Instances with Amazon Linux 2. Instances are configured
+ with custom security group allowing SSH (22), HTTP (80) UDP (4789, 7946),
+ and TCP(2377, 7946, 8080) connections from anywhere.
+ User needs to select appropriate key name when launching the template.
+Parameters:
+ KeyPairName:
+ Description: Enter the name of your Key Pair for SSH connections.
+ Type: AWS::EC2::KeyPair::KeyName
+ ConstraintDescription: Must one of the existing EC2 KeyPair
+Resources:
+ RoleEnablingEC2forECR:
+ Type: "AWS::IAM::Role"
+ Properties:
+ AssumeRolePolicyDocument:
+ Statement:
+ - Effect: Allow
+ Principal:
+ Service:
+ - ec2.amazonaws.com
+ Action:
+ - 'sts:AssumeRole'
+ ManagedPolicyArns:
+ - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess
+ EC2Profile:
+ Type: "AWS::IAM::InstanceProfile"
+ Properties:
+ Roles: #required
+ - !Ref RoleEnablingEC2forECR
+ DockerMachinesSecurityGroup:
+ Type: AWS::EC2::SecurityGroup
+ Properties:
+ GroupDescription: Enable SSH and HTTP for Docker Machines
+ SecurityGroupIngress:
+ - IpProtocol: tcp
+ FromPort: 80
+ ToPort: 80
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 22
+ ToPort: 22
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 2377
+ ToPort: 2377
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 7946
+ ToPort: 7946
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: udp
+ FromPort: 7946
+ ToPort: 7946
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: udp
+ FromPort: 4789
+ ToPort: 4789
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8080
+ ToPort: 8080
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8088
+ ToPort: 8088
+ CidrIp: 0.0.0.0/0
+ DockerMachineLT:
+ Type: "AWS::EC2::LaunchTemplate"
+ Properties:
+ LaunchTemplateData:
+ ImageId: ami-0947d2ba12ee1ff75
+ InstanceType: t2.medium
+ KeyName: !Ref KeyPairName
+ IamInstanceProfile:
+ Arn: !GetAtt EC2Profile.Arn
+ SecurityGroupIds:
+ - !GetAtt DockerMachinesSecurityGroup.GroupId
+ TagSpecifications:
+ - ResourceType: instance
+ Tags:
+ - Key: app-stack-name
+ Value: !Sub ${AWS::StackName}
+ - Key: environment
+ Value: qa
+ DockerInstance1:
+ Type: AWS::EC2::Instance
+ DependsOn:
+ - "DockerInstance2"
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-1
+ - Key: swarm-role
+ Value: grand-master
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 1st
+ DockerInstance2:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-2
+ - Key: swarm-role
+ Value: manager
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 2nd
+ DockerInstance3:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-3
+ - Key: swarm-role
+ Value: manager
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 3rd
+ DockerInstance4:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-4
+ - Key: swarm-role
+ Value: worker
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 4th
+ DockerInstance5:
+ Type: AWS::EC2::Instance
+ Properties:
+ LaunchTemplate:
+ LaunchTemplateId: !Ref DockerMachineLT
+ Version: !GetAtt DockerMachineLT.LatestVersionNumber
+ Tags:
+ - Key: server
+ Value: docker-instance-5
+ - Key: swarm-role
+ Value: worker
+ - Key: Name
+ Value: !Sub ${AWS::StackName} Docker Machine 5th
+Outputs:
+ 1stDockerInstanceDNSName:
+ Description: 1st Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance1.PublicDnsName
+ 2ndDockerInstanceDNSName:
+ Description: 2nd Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance2.PublicDnsName
+ 3rdDockerInstanceDNSName:
+ Description: 3rd Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance3.PublicDnsName
+ 4thDockerInstanceDNSName:
+ Description: 4th Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance4.PublicDnsName
+ 5thDockerInstanceDNSName:
+ Description: 5th Docker Instance DNS Name
+ Value: !Sub
+ - ${PublicAddress}
+ - PublicAddress: !GetAtt DockerInstance5.PublicDnsName
\ No newline at end of file
diff --git a/jenkins/create-permanent-key-pair-for-qa-environment.sh b/jenkins/create-permanent-key-pair-for-qa-environment.sh
new file mode 100644
index 0000000000..3b6013abf1
--- /dev/null
+++ b/jenkins/create-permanent-key-pair-for-qa-environment.sh
@@ -0,0 +1,8 @@
+PATH="$PATH:/usr/local/bin"
+APP_NAME="petclinic"
+CFN_KEYPAIR="huseyin-${APP_NAME}-qa.key"
+AWS_REGION="us-east-1"
+aws ec2 create-key-pair --region ${AWS_REGION} --key-name ${CFN_KEYPAIR} --query "KeyMaterial" --output text > ${CFN_KEYPAIR}
+chmod 400 ${CFN_KEYPAIR}
+cp ${CFN_KEYPAIR} ${JENKINS_HOME}/.ssh/${CFN_KEYPAIR}
+ls -al ${JENKINS_HOME}/.ssh
\ No newline at end of file
diff --git a/jenkins/jenkinsfile-create-qa-environment-on-docker-swarm b/jenkins/jenkinsfile-create-qa-environment-on-docker-swarm
new file mode 100644
index 0000000000..f198e46c38
--- /dev/null
+++ b/jenkins/jenkinsfile-create-qa-environment-on-docker-swarm
@@ -0,0 +1,65 @@
+pipeline {
+ agent { label "master" }
+ environment {
+ PATH=sh(script:"echo $PATH:/usr/local/bin", returnStdout:true).trim()
+ APP_NAME="petclinic"
+ APP_STACK_NAME="Huseyin-$APP_NAME-App-QA-${BUILD_NUMBER}"
+ AWS_REGION="us-east-1"
+ CFN_KEYPAIR="huseyin-${APP_NAME}-qa.key"
+ CFN_TEMPLATE="./infrastructure/qa-docker-swarm-infrastructure-cfn-template.yml"
+ ANSIBLE_PRIVATE_KEY_FILE="${JENKINS_HOME}/.ssh/${CFN_KEYPAIR}"
+ ANSIBLE_HOST_KEY_CHECKING="False"
+ }
+ stages {
+ stage('Create QA Environment Infrastructure') {
+ steps {
+ echo 'Creating Infrastructure for QA Environment with Cloudfomation'
+ sh "aws cloudformation create-stack --region ${AWS_REGION} --stack-name ${APP_STACK_NAME} --capabilities CAPABILITY_IAM --template-body file://${CFN_TEMPLATE} --parameters ParameterKey=KeyPairName,ParameterValue=${CFN_KEYPAIR}"
+ script {
+ while(true) {
+ echo "Docker Grand Master is not UP and running yet. Will try to reach again after 10 seconds..."
+ sleep(10)
+ ip = sh(script:"aws ec2 describe-instances --region ${AWS_REGION} --filters Name=tag-value,Values=grand-master Name=tag-value,Values=${APP_STACK_NAME} --query Reservations[*].Instances[*].[PublicIpAddress] --output text", returnStdout:true).trim()
+ if (ip.length() >= 7) {
+ echo "Docker Grand Master Public Ip Address Found: $ip"
+ env.GRAND_MASTER_PUBLIC_IP = "$ip"
+ break
+ }
+ }
+ while(true) {
+ try{
+ sh "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ${JENKINS_HOME}/.ssh/${CFN_KEYPAIR} ec2-user@${GRAND_MASTER_PUBLIC_IP} hostname"
+ echo "Docker Grand Master is reachable with SSH."
+ break
+ }
+ catch(Exception){
+ echo "Could not connect to Docker Grand Master with SSH, I will try again in 10 seconds"
+ sleep(10)
+ }
+ }
+ }
+ }
+ }
+ stage('Create Docker Swarm for QA Environment') {
+ steps {
+ echo "Setup Docker Swarm for QA Environment for ${APP_NAME} App"
+ echo "Update dynamic environment"
+ sh "sed -i 's/APP_STACK_NAME/${APP_STACK_NAME}/' ./ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml"
+ echo "Swarm Setup for all nodes (instances)"
+ sh "ansible-playbook -i ./ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_setup_for_all_docker_swarm_instances.yaml"
+ echo "Swarm Setup for Grand Master node"
+ sh "ansible-playbook -i ./ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_initialize_docker_swarm.yaml"
+ echo "Swarm Setup for Other Managers nodes"
+ sh "ansible-playbook -i ./ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_join_docker_swarm_managers.yaml"
+ echo "Swarm Setup for Workers nodes"
+ sh "ansible-playbook -i ./ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml -b ./ansible/playbooks/pb_join_docker_swarm_workers.yaml"
+ }
+ }
+ }
+ post {
+ failure {
+ echo 'Tear down the Docker Swarm infrastructure using AWS CLI'
+ sh "aws cloudformation delete-stack --region ${AWS_REGION} --stack-name ${APP_STACK_NAME}"
+ }
+ }
+}
\ No newline at end of file
From 04fc42908bfe777ff05b534530be4485aa34c142 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 24 Oct 2020 15:16:35 -0400
Subject: [PATCH 39/46] added build scripts for QA Environment
---
.../pb_deploy_app_on_qa_environment.yaml | 14 ++
.../scripts/deploy_app_on_qa_environment.sh | 5 +
docker-compose-swarm-qa.yml | 125 ++++++++++++++++++
jenkins/build-qa-docker-images-for-ecr.sh | 11 ++
.../prepare-tags-ecr-for-qa-docker-images.sh | 18 +++
5 files changed, 173 insertions(+)
create mode 100644 ansible/playbooks/pb_deploy_app_on_qa_environment.yaml
create mode 100644 ansible/scripts/deploy_app_on_qa_environment.sh
create mode 100644 docker-compose-swarm-qa.yml
create mode 100644 jenkins/build-qa-docker-images-for-ecr.sh
create mode 100644 jenkins/prepare-tags-ecr-for-qa-docker-images.sh
diff --git a/ansible/playbooks/pb_deploy_app_on_qa_environment.yaml b/ansible/playbooks/pb_deploy_app_on_qa_environment.yaml
new file mode 100644
index 0000000000..c1a1711de2
--- /dev/null
+++ b/ansible/playbooks/pb_deploy_app_on_qa_environment.yaml
@@ -0,0 +1,14 @@
+---
+- hosts: role_grand_master
+ tasks:
+ - name: Copy docker compose file to grand master
+ copy:
+ src: "{{ workspace }}/docker-compose-swarm-qa-tagged.yml"
+ dest: /home/ec2-user/docker-compose-swarm-qa-tagged.yml
+ - name: get login credentials for ecr
+ shell: "export PATH=$PATH:/usr/local/bin/ && aws ecr get-login-password --region {{ aws_region }} | docker login --username AWS --password-stdin {{ ecr_registry }}"
+ register: output
+ - name: deploy the app stack on swarm
+ shell: "docker stack deploy --with-registry-auth -c /home/ec2-user/docker-compose-swarm-qa-tagged.yml {{ app_name }}"
+ register: output
+ - debug: msg="{{ output.stdout }}"
\ No newline at end of file
diff --git a/ansible/scripts/deploy_app_on_qa_environment.sh b/ansible/scripts/deploy_app_on_qa_environment.sh
new file mode 100644
index 0000000000..eb085a9369
--- /dev/null
+++ b/ansible/scripts/deploy_app_on_qa_environment.sh
@@ -0,0 +1,5 @@
+PATH="$PATH:/usr/local/bin"
+APP_NAME="petclinic"
+sed -i "s/APP_STACK_NAME/${APP_STACK_NAME}/" ./ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml
+envsubst < docker-compose-swarm-qa.yml > docker-compose-swarm-qa-tagged.yml
+ansible-playbook -i ./ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml -b --extra-vars "workspace=${WORKSPACE} app_name=${APP_NAME} aws_region=${AWS_REGION} ecr_registry=${ECR_REGISTRY}" ./ansible/playbooks/pb_deploy_app_qa_environment.yaml
\ No newline at end of file
diff --git a/docker-compose-swarm-qa.yml b/docker-compose-swarm-qa.yml
new file mode 100644
index 0000000000..64211364a8
--- /dev/null
+++ b/docker-compose-swarm-qa.yml
@@ -0,0 +1,125 @@
+version: '3.8'
+services:
+ config-server:
+ image: "${IMAGE_TAG_CONFIG_SERVER}"
+ networks:
+ - clarusnet
+ ports:
+ - 8888:8888
+ discovery-server:
+ image: "${IMAGE_TAG_DISCOVERY_SERVER}"
+ depends_on:
+ - config-server
+ entrypoint: ["./dockerize","-wait=tcp://config-server:8888","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 8761:8761
+ customers-service:
+ image: "${IMAGE_TAG_CUSTOMERS_SERVICE}"
+ deploy:
+ replicas: 3
+ update_config:
+ parallelism: 2
+ delay: 5s
+ order: start-first
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 8081:8081
+ visits-service:
+ image: "${IMAGE_TAG_VISITS_SERVICE}"
+ deploy:
+ replicas: 3
+ update_config:
+ parallelism: 2
+ delay: 5s
+ order: start-first
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 8082:8082
+ vets-service:
+ image: "${IMAGE_TAG_VETS_SERVICE}"
+ deploy:
+ replicas: 3
+ update_config:
+ parallelism: 2
+ delay: 5s
+ order: start-first
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 8083:8083
+ api-gateway:
+ image: "${IMAGE_TAG_API_GATEWAY}"
+ deploy:
+ replicas: 5
+ update_config:
+ parallelism: 2
+ delay: 5s
+ order: start-first
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 8080:8080
+ tracing-server:
+ image: openzipkin/zipkin
+ environment:
+ - JAVA_OPTS=-XX:+UnlockExperimentalVMOptions -Djava.security.egd=file:/dev/./urandom
+ networks:
+ - clarusnet
+ ports:
+ - 9411:9411
+ admin-server:
+ image: "${IMAGE_TAG_ADMIN_SERVER}"
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 9090:9090
+ hystrix-dashboard:
+ image: "${IMAGE_TAG_HYSTRIX_DASHBOARD}"
+ depends_on:
+ - config-server
+ - discovery-server
+ entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
+ networks:
+ - clarusnet
+ ports:
+ - 7979:7979
+ ## Grafana / Prometheus
+ grafana-server:
+ image: "${IMAGE_TAG_GRAFANA_SERVICE}"
+ networks:
+ - clarusnet
+ ports:
+ - 3000:3000
+ prometheus-server:
+ image: "${IMAGE_TAG_PROMETHEUS_SERVICE}"
+ networks:
+ - clarusnet
+ ports:
+ - 9091:9090
+networks:
+ clarusnet:
+ driver: overlay
\ No newline at end of file
diff --git a/jenkins/build-qa-docker-images-for-ecr.sh b/jenkins/build-qa-docker-images-for-ecr.sh
new file mode 100644
index 0000000000..7ae5bfdfde
--- /dev/null
+++ b/jenkins/build-qa-docker-images-for-ecr.sh
@@ -0,0 +1,11 @@
+aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ECR_REGISTRY}
+docker push "${IMAGE_TAG_ADMIN_SERVER}"
+docker push "${IMAGE_TAG_API_GATEWAY}"
+docker push "${IMAGE_TAG_CONFIG_SERVER}"
+docker push "${IMAGE_TAG_CUSTOMERS_SERVICE}"
+docker push "${IMAGE_TAG_DISCOVERY_SERVER}"
+docker push "${IMAGE_TAG_HYSTRIX_DASHBOARD}"
+docker push "${IMAGE_TAG_VETS_SERVICE}"
+docker push "${IMAGE_TAG_VISITS_SERVICE}"
+docker push "${IMAGE_TAG_GRAFANA_SERVICE}"
+docker push "${IMAGE_TAG_PROMETHEUS_SERVICE}"
\ No newline at end of file
diff --git a/jenkins/prepare-tags-ecr-for-qa-docker-images.sh b/jenkins/prepare-tags-ecr-for-qa-docker-images.sh
new file mode 100644
index 0000000000..d90e8db9c2
--- /dev/null
+++ b/jenkins/prepare-tags-ecr-for-qa-docker-images.sh
@@ -0,0 +1,18 @@
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-admin-server/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_ADMIN_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:admin-server-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-api-gateway/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_API_GATEWAY="${ECR_REGISTRY}/${APP_REPO_NAME}:api-gateway-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-config-server/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_CONFIG_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:config-server-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-customers-service/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_CUSTOMERS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:customers-service-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-discovery-server/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_DISCOVERY_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:discovery-server-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-hystrix-dashboard/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_HYSTRIX_DASHBOARD="${ECR_REGISTRY}/${APP_REPO_NAME}:hystrix-dashboard-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-vets-service/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_VETS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:vets-service-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+MVN_VERSION=$(. ${WORKSPACE}/spring-petclinic-visits-service/target/maven-archiver/pom.properties && echo $version)
+export IMAGE_TAG_VISITS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:visits-service-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+export IMAGE_TAG_GRAFANA_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:grafana-service"
+export IMAGE_TAG_PROMETHEUS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:prometheus-service"
\ No newline at end of file
From d2ee6e574c2c76cbdeb8068fe74e7aed1c08078c Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 24 Oct 2020 15:27:46 -0400
Subject: [PATCH 40/46] added script for jenkins job to build and deploy app on
QA environment
---
...and-deploy-petclinic-on-qa-env-manually.sh | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 jenkins/build-and-deploy-petclinic-on-qa-env-manually.sh
diff --git a/jenkins/build-and-deploy-petclinic-on-qa-env-manually.sh b/jenkins/build-and-deploy-petclinic-on-qa-env-manually.sh
new file mode 100644
index 0000000000..db30b11526
--- /dev/null
+++ b/jenkins/build-and-deploy-petclinic-on-qa-env-manually.sh
@@ -0,0 +1,22 @@
+PATH="$PATH:/usr/local/bin"
+APP_NAME="petclinic"
+APP_REPO_NAME="huseyin-repo/petclinic-app-qa"
+APP_STACK_NAME="Huseyin-petclinic-App-QA-1"
+CFN_KEYPAIR="huseyin-petclinic-qa.key"
+AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
+AWS_REGION="us-east-1"
+ECR_REGISTRY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"
+export ANSIBLE_PRIVATE_KEY_FILE="${JENKINS_HOME}/.ssh/${CFN_KEYPAIR}"
+export ANSIBLE_HOST_KEY_CHECKING="False"
+echo 'Packaging the App into Jars with Maven'
+. ./jenkins/package-with-maven-container.sh
+echo 'Preparing QA Tags for Docker Images'
+. ./jenkins/prepare-tags-ecr-for-qa-docker-images.sh
+echo 'Building App QA Images'
+. ./jenkins/build-qa-docker-images-for-ecr.sh
+echo "Pushing App QA Images to ECR Repo"
+. ./jenkins/push-qa-docker-images-to-ecr.sh
+echo 'Deploying App on Swarm'
+. ./ansible/scripts/deploy_app_on_qa_environment.sh
+echo 'Deleting all local images'
+docker image prune -af
\ No newline at end of file
From a116d7b0e448eaa85330b7ba83661ecead1e6806 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Sat, 24 Oct 2020 15:55:09 -0400
Subject: [PATCH 41/46] added jenkinsfile petclinic-weekly-qa for release
branch
---
.../scripts/deploy_app_on_qa_environment.sh | 2 +-
jenkins/jenkinsfile-petclinic-weekly-qa | 73 +++++++++++++++++++
2 files changed, 74 insertions(+), 1 deletion(-)
create mode 100644 jenkins/jenkinsfile-petclinic-weekly-qa
diff --git a/ansible/scripts/deploy_app_on_qa_environment.sh b/ansible/scripts/deploy_app_on_qa_environment.sh
index eb085a9369..377b897fdb 100644
--- a/ansible/scripts/deploy_app_on_qa_environment.sh
+++ b/ansible/scripts/deploy_app_on_qa_environment.sh
@@ -2,4 +2,4 @@ PATH="$PATH:/usr/local/bin"
APP_NAME="petclinic"
sed -i "s/APP_STACK_NAME/${APP_STACK_NAME}/" ./ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml
envsubst < docker-compose-swarm-qa.yml > docker-compose-swarm-qa-tagged.yml
-ansible-playbook -i ./ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml -b --extra-vars "workspace=${WORKSPACE} app_name=${APP_NAME} aws_region=${AWS_REGION} ecr_registry=${ECR_REGISTRY}" ./ansible/playbooks/pb_deploy_app_qa_environment.yaml
\ No newline at end of file
+ansible-playbook -i ./ansible/inventory/qa_stack_dynamic_inventory_aws_ec2.yaml -b --extra-vars "workspace=${WORKSPACE} app_name=${APP_NAME} aws_region=${AWS_REGION} ecr_registry=${ECR_REGISTRY}" ./ansible/playbooks/pb_deploy_app_on_qa_environment.yaml
\ No newline at end of file
diff --git a/jenkins/jenkinsfile-petclinic-weekly-qa b/jenkins/jenkinsfile-petclinic-weekly-qa
new file mode 100644
index 0000000000..6a57e49144
--- /dev/null
+++ b/jenkins/jenkinsfile-petclinic-weekly-qa
@@ -0,0 +1,73 @@
+pipeline {
+ agent { label "master" }
+ environment {
+ PATH=sh(script:"echo $PATH:/usr/local/bin", returnStdout:true).trim()
+ APP_NAME="petclinic"
+ APP_REPO_NAME="huseyin-repo/petclinic-app-qa"
+ APP_STACK_NAME="Huseyin-petclinic-App-QA-1"
+ CFN_KEYPAIR="huseyin-petclinic-qa.key"
+ AWS_ACCOUNT_ID=sh(script:'export PATH="$PATH:/usr/local/bin" && aws sts get-caller-identity --query Account --output text', returnStdout:true).trim()
+ AWS_REGION="us-east-1"
+ ECR_REGISTRY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"
+ ANSIBLE_PRIVATE_KEY_FILE="${JENKINS_HOME}/.ssh/${CFN_KEYPAIR}"
+ ANSIBLE_HOST_KEY_CHECKING="False"
+ }
+ stages {
+ stage('Package Application') {
+ steps {
+ echo 'Packaging the app into jars with maven'
+ sh ". ./jenkins/package-with-maven-container.sh"
+ }
+ }
+ stage('Prepare Tags for Docker Images') {
+ steps {
+ echo 'Preparing Tags for Docker Images'
+ script {
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-admin-server/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_ADMIN_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:admin-server-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-api-gateway/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_API_GATEWAY="${ECR_REGISTRY}/${APP_REPO_NAME}:api-gateway-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-config-server/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_CONFIG_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:config-server-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-customers-service/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_CUSTOMERS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:customers-service-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-discovery-server/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_DISCOVERY_SERVER="${ECR_REGISTRY}/${APP_REPO_NAME}:discovery-server-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-hystrix-dashboard/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_HYSTRIX_DASHBOARD="${ECR_REGISTRY}/${APP_REPO_NAME}:hystrix-dashboard-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-vets-service/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_VETS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:vets-service-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ MVN_VERSION=sh(script:'. ${WORKSPACE}/spring-petclinic-visits-service/target/maven-archiver/pom.properties && echo $version', returnStdout:true).trim()
+ env.IMAGE_TAG_VISITS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:visits-service-qa-v${MVN_VERSION}-b${BUILD_NUMBER}"
+ env.IMAGE_TAG_GRAFANA_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:grafana-service"
+ env.IMAGE_TAG_PROMETHEUS_SERVICE="${ECR_REGISTRY}/${APP_REPO_NAME}:prometheus-service"
+ }
+ }
+ }
+ stage('Build App Docker Images') {
+ steps {
+ echo 'Building App Dev Images'
+ sh ". ./jenkins/build-qa-docker-images-for-ecr.sh"
+ sh 'docker image ls'
+ }
+ }
+ stage('Push Images to ECR Repo') {
+ steps {
+ echo "Pushing ${APP_NAME} App Images to ECR Repo"
+ sh ". ./jenkins/push-qa-docker-images-to-ecr.sh"
+ }
+ }
+ stage('Deploy App on Docker Swarm'){
+ steps {
+ echo 'Deploying App on Swarm'
+ sh '. ./ansible/scripts/deploy_app_on_qa_environment.sh'
+ }
+ }
+ }
+ post {
+ always {
+ echo 'Deleting all local images'
+ sh 'docker image prune -af'
+ }
+ }
+}
\ No newline at end of file
From 13f74a093a268b43fae66640582a1a5cffaa49c1 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 24 Nov 2020 21:00:46 -0500
Subject: [PATCH 42/46] added Configuration YAML Files for Kubernetes
Deployment
---
ks8/docker-compose.yml | 80 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
create mode 100644 ks8/docker-compose.yml
diff --git a/ks8/docker-compose.yml b/ks8/docker-compose.yml
new file mode 100644
index 0000000000..f31dbad415
--- /dev/null
+++ b/ks8/docker-compose.yml
@@ -0,0 +1,80 @@
+version: '3'
+services:
+ config-server:
+ image: IMAGE_TAG_CONFIG_SERVER
+ ports:
+ - 8888:8888
+ labels:
+ kompose.image-pull-secret: "regcred"
+ discovery-server:
+ image: IMAGE_TAG_DISCOVERY_SERVER
+ ports:
+ - 8761:8761
+ labels:
+ kompose.image-pull-secret: "regcred"
+ customers-service:
+ image: IMAGE_TAG_CUSTOMERS_SERVICE
+ deploy:
+ replicas: 2
+ ports:
+ - 8081:8081
+ labels:
+ kompose.image-pull-secret: "regcred"
+ kompose.service.expose: "petclinic.clarusway.us"
+ visits-service:
+ image: IMAGE_TAG_VISITS_SERVICE
+ deploy:
+ replicas: 2
+ ports:
+ - 8082:8082
+ labels:
+ kompose.image-pull-secret: "regcred"
+ kompose.service.expose: "petclinic.clarusway.us"
+ vets-service:
+ image: IMAGE_TAG_VETS_SERVICE
+ deploy:
+ replicas: 2
+ ports:
+ - 8083:8083
+ labels:
+ kompose.image-pull-secret: "regcred"
+ kompose.service.expose: "petclinic.clarusway.us"
+ api-gateway:
+ image: IMAGE_TAG_API_GATEWAY
+ deploy:
+ replicas: 2
+ ports:
+ - 8080:8080
+ labels:
+ kompose.image-pull-secret: "regcred"
+ kompose.service.expose: "petclinic.clarusway.us"
+ tracing-server:
+ image: openzipkin/zipkin
+ environment:
+ - JAVA_OPTS=-XX:+UnlockExperimentalVMOptions -Djava.security.egd=file:/dev/./urandom
+ ports:
+ - 9411:9411
+ admin-server:
+ image: IMAGE_TAG_ADMIN_SERVER
+ ports:
+ - 9090:9090
+ labels:
+ kompose.image-pull-secret: "regcred"
+ hystrix-dashboard:
+ image: IMAGE_TAG_HYSTRIX_DASHBOARD
+ ports:
+ - 7979:7979
+ labels:
+ kompose.image-pull-secret: "regcred"
+ grafana-server:
+ image: IMAGE_TAG_GRAFANA_SERVICE
+ ports:
+ - 3000:3000
+ labels:
+ kompose.image-pull-secret: "regcred"
+ prometheus-server:
+ image: IMAGE_TAG_PROMETHEUS_SERVICE
+ ports:
+ - 9091:9090
+ labels:
+ kompose.image-pull-secret: "regcred"
\ No newline at end of file
From 54501914c73065f9aca3703999fd1b4d7899e24d Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 24 Nov 2020 21:14:45 -0500
Subject: [PATCH 43/46] added Configuration YAML Files for Kubernetes
Deployment
---
{ks8 => k8s}/docker-compose.yml | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename {ks8 => k8s}/docker-compose.yml (100%)
diff --git a/ks8/docker-compose.yml b/k8s/docker-compose.yml
similarity index 100%
rename from ks8/docker-compose.yml
rename to k8s/docker-compose.yml
From 3741657e26ee5dab82226af84584d5d2fe17b47d Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 24 Nov 2020 22:27:49 -0500
Subject: [PATCH 44/46] updated deployment files with init containers
---
k8s/base/admin-server-deployment.yaml | 41 +++++++++++++++++++++
k8s/base/admin-server-service.yaml | 20 ++++++++++
k8s/base/api-gateway-deployment.yaml | 43 ++++++++++++++++++++++
k8s/base/api-gateway-ingress.yaml | 22 +++++++++++
k8s/base/api-gateway-service.yaml | 21 +++++++++++
k8s/base/config-server-deployment.yaml | 37 +++++++++++++++++++
k8s/base/config-server-service.yaml | 20 ++++++++++
k8s/base/customers-service-deployment.yaml | 43 ++++++++++++++++++++++
k8s/base/customers-service-ingress.yaml | 22 +++++++++++
k8s/base/customers-service-service.yaml | 21 +++++++++++
k8s/base/discovery-server-deployment.yaml | 41 +++++++++++++++++++++
k8s/base/discovery-server-service.yaml | 20 ++++++++++
k8s/base/grafana-server-deployment.yaml | 41 +++++++++++++++++++++
k8s/base/grafana-server-service.yaml | 20 ++++++++++
k8s/base/hystrix-dashboard-deployment.yaml | 41 +++++++++++++++++++++
k8s/base/hystrix-dashboard-service.yaml | 20 ++++++++++
k8s/base/prometheus-server-deployment.yaml | 41 +++++++++++++++++++++
k8s/base/prometheus-server-service.yaml | 20 ++++++++++
k8s/base/tracing-server-deployment.yaml | 36 ++++++++++++++++++
k8s/base/tracing-server-service.yaml | 19 ++++++++++
k8s/base/vets-service-deployment.yaml | 43 ++++++++++++++++++++++
k8s/base/vets-service-ingress.yaml | 22 +++++++++++
k8s/base/vets-service-service.yaml | 21 +++++++++++
k8s/base/visits-service-deployment.yaml | 43 ++++++++++++++++++++++
k8s/base/visits-service-ingress.yaml | 22 +++++++++++
k8s/base/visits-service-service.yaml | 21 +++++++++++
26 files changed, 761 insertions(+)
create mode 100644 k8s/base/admin-server-deployment.yaml
create mode 100644 k8s/base/admin-server-service.yaml
create mode 100644 k8s/base/api-gateway-deployment.yaml
create mode 100644 k8s/base/api-gateway-ingress.yaml
create mode 100644 k8s/base/api-gateway-service.yaml
create mode 100644 k8s/base/config-server-deployment.yaml
create mode 100644 k8s/base/config-server-service.yaml
create mode 100644 k8s/base/customers-service-deployment.yaml
create mode 100644 k8s/base/customers-service-ingress.yaml
create mode 100644 k8s/base/customers-service-service.yaml
create mode 100644 k8s/base/discovery-server-deployment.yaml
create mode 100644 k8s/base/discovery-server-service.yaml
create mode 100644 k8s/base/grafana-server-deployment.yaml
create mode 100644 k8s/base/grafana-server-service.yaml
create mode 100644 k8s/base/hystrix-dashboard-deployment.yaml
create mode 100644 k8s/base/hystrix-dashboard-service.yaml
create mode 100644 k8s/base/prometheus-server-deployment.yaml
create mode 100644 k8s/base/prometheus-server-service.yaml
create mode 100644 k8s/base/tracing-server-deployment.yaml
create mode 100644 k8s/base/tracing-server-service.yaml
create mode 100644 k8s/base/vets-service-deployment.yaml
create mode 100644 k8s/base/vets-service-ingress.yaml
create mode 100644 k8s/base/vets-service-service.yaml
create mode 100644 k8s/base/visits-service-deployment.yaml
create mode 100644 k8s/base/visits-service-ingress.yaml
create mode 100644 k8s/base/visits-service-service.yaml
diff --git a/k8s/base/admin-server-deployment.yaml b/k8s/base/admin-server-deployment.yaml
new file mode 100644
index 0000000000..fa936fb8ff
--- /dev/null
+++ b/k8s/base/admin-server-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: admin-server
+ name: admin-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: admin-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: admin-server
+ spec:
+ containers:
+ - image: IMAGE_TAG_ADMIN_SERVER
+ name: admin-server
+ ports:
+ - containerPort: 9090
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/admin-server-service.yaml b/k8s/base/admin-server-service.yaml
new file mode 100644
index 0000000000..d51aae79c9
--- /dev/null
+++ b/k8s/base/admin-server-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: admin-server
+ name: admin-server
+spec:
+ ports:
+ - name: "9090"
+ port: 9090
+ targetPort: 9090
+ selector:
+ io.kompose.service: admin-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/api-gateway-deployment.yaml b/k8s/base/api-gateway-deployment.yaml
new file mode 100644
index 0000000000..3c39d39889
--- /dev/null
+++ b/k8s/base/api-gateway-deployment.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: api-gateway
+ name: api-gateway
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ io.kompose.service: api-gateway
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: api-gateway
+ spec:
+ containers:
+ - image: IMAGE_TAG_API_GATEWAY
+ name: api-gateway
+ ports:
+ - containerPort: 8080
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/api-gateway-ingress.yaml b/k8s/base/api-gateway-ingress.yaml
new file mode 100644
index 0000000000..64612b9038
--- /dev/null
+++ b/k8s/base/api-gateway-ingress.yaml
@@ -0,0 +1,22 @@
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: api-gateway
+ name: api-gateway
+spec:
+ rules:
+ - host: petclinic.clarusway.us
+ http:
+ paths:
+ - backend:
+ serviceName: api-gateway
+ servicePort: 8080
+status:
+ loadBalancer: {}
diff --git a/k8s/base/api-gateway-service.yaml b/k8s/base/api-gateway-service.yaml
new file mode 100644
index 0000000000..9674c75d04
--- /dev/null
+++ b/k8s/base/api-gateway-service.yaml
@@ -0,0 +1,21 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: api-gateway
+ name: api-gateway
+spec:
+ ports:
+ - name: "8080"
+ port: 8080
+ targetPort: 8080
+ selector:
+ io.kompose.service: api-gateway
+status:
+ loadBalancer: {}
diff --git a/k8s/base/config-server-deployment.yaml b/k8s/base/config-server-deployment.yaml
new file mode 100644
index 0000000000..aa5b54436a
--- /dev/null
+++ b/k8s/base/config-server-deployment.yaml
@@ -0,0 +1,37 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: config-server
+ name: config-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: config-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: config-server
+ spec:
+ containers:
+ - image: IMAGE_TAG_CONFIG_SERVER
+ name: config-server
+ ports:
+ - containerPort: 8888
+ resources: {}
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/config-server-service.yaml b/k8s/base/config-server-service.yaml
new file mode 100644
index 0000000000..e990afb1dc
--- /dev/null
+++ b/k8s/base/config-server-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: config-server
+ name: config-server
+spec:
+ ports:
+ - name: "8888"
+ port: 8888
+ targetPort: 8888
+ selector:
+ io.kompose.service: config-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/customers-service-deployment.yaml b/k8s/base/customers-service-deployment.yaml
new file mode 100644
index 0000000000..f4eb9dc892
--- /dev/null
+++ b/k8s/base/customers-service-deployment.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: customers-service
+ name: customers-service
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ io.kompose.service: customers-service
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: customers-service
+ spec:
+ containers:
+ - image: IMAGE_TAG_CUSTOMERS_SERVICE
+ name: customers-service
+ ports:
+ - containerPort: 8081
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/customers-service-ingress.yaml b/k8s/base/customers-service-ingress.yaml
new file mode 100644
index 0000000000..716a7a6945
--- /dev/null
+++ b/k8s/base/customers-service-ingress.yaml
@@ -0,0 +1,22 @@
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: customers-service
+ name: customers-service
+spec:
+ rules:
+ - host: petclinic.clarusway.us
+ http:
+ paths:
+ - backend:
+ serviceName: customers-service
+ servicePort: 8081
+status:
+ loadBalancer: {}
diff --git a/k8s/base/customers-service-service.yaml b/k8s/base/customers-service-service.yaml
new file mode 100644
index 0000000000..aac4e3c552
--- /dev/null
+++ b/k8s/base/customers-service-service.yaml
@@ -0,0 +1,21 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: customers-service
+ name: customers-service
+spec:
+ ports:
+ - name: "8081"
+ port: 8081
+ targetPort: 8081
+ selector:
+ io.kompose.service: customers-service
+status:
+ loadBalancer: {}
diff --git a/k8s/base/discovery-server-deployment.yaml b/k8s/base/discovery-server-deployment.yaml
new file mode 100644
index 0000000000..cb38b77ef2
--- /dev/null
+++ b/k8s/base/discovery-server-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: discovery-server
+ name: discovery-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: discovery-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: discovery-server
+ spec:
+ containers:
+ - image: IMAGE_TAG_DISCOVERY_SERVER
+ name: discovery-server
+ ports:
+ - containerPort: 8761
+ resources: {}
+ initContainers:
+ - name: init-config-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z config-server:8888; do echo waiting for config-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/discovery-server-service.yaml b/k8s/base/discovery-server-service.yaml
new file mode 100644
index 0000000000..071e97ad1f
--- /dev/null
+++ b/k8s/base/discovery-server-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: discovery-server
+ name: discovery-server
+spec:
+ ports:
+ - name: "8761"
+ port: 8761
+ targetPort: 8761
+ selector:
+ io.kompose.service: discovery-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/grafana-server-deployment.yaml b/k8s/base/grafana-server-deployment.yaml
new file mode 100644
index 0000000000..ef95843478
--- /dev/null
+++ b/k8s/base/grafana-server-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: grafana-server
+ name: grafana-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: grafana-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: grafana-server
+ spec:
+ containers:
+ - image: IMAGE_TAG_GRAFANA_SERVICE
+ name: grafana-server
+ ports:
+ - containerPort: 3000
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/grafana-server-service.yaml b/k8s/base/grafana-server-service.yaml
new file mode 100644
index 0000000000..fabc03aedf
--- /dev/null
+++ b/k8s/base/grafana-server-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: grafana-server
+ name: grafana-server
+spec:
+ ports:
+ - name: "3000"
+ port: 3000
+ targetPort: 3000
+ selector:
+ io.kompose.service: grafana-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/hystrix-dashboard-deployment.yaml b/k8s/base/hystrix-dashboard-deployment.yaml
new file mode 100644
index 0000000000..2a7c6df14f
--- /dev/null
+++ b/k8s/base/hystrix-dashboard-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: hystrix-dashboard
+ name: hystrix-dashboard
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: hystrix-dashboard
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: hystrix-dashboard
+ spec:
+ containers:
+ - image: IMAGE_TAG_HYSTRIX_DASHBOARD
+ name: hystrix-dashboard
+ ports:
+ - containerPort: 7979
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/hystrix-dashboard-service.yaml b/k8s/base/hystrix-dashboard-service.yaml
new file mode 100644
index 0000000000..50c22dc7c2
--- /dev/null
+++ b/k8s/base/hystrix-dashboard-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: hystrix-dashboard
+ name: hystrix-dashboard
+spec:
+ ports:
+ - name: "7979"
+ port: 7979
+ targetPort: 7979
+ selector:
+ io.kompose.service: hystrix-dashboard
+status:
+ loadBalancer: {}
diff --git a/k8s/base/prometheus-server-deployment.yaml b/k8s/base/prometheus-server-deployment.yaml
new file mode 100644
index 0000000000..ffacc07f31
--- /dev/null
+++ b/k8s/base/prometheus-server-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: prometheus-server
+ name: prometheus-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: prometheus-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: prometheus-server
+ spec:
+ containers:
+ - image: IMAGE_TAG_PROMETHEUS_SERVICE
+ name: prometheus-server
+ ports:
+ - containerPort: 9090
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/prometheus-server-service.yaml b/k8s/base/prometheus-server-service.yaml
new file mode 100644
index 0000000000..105d6aa454
--- /dev/null
+++ b/k8s/base/prometheus-server-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: prometheus-server
+ name: prometheus-server
+spec:
+ ports:
+ - name: "9091"
+ port: 9091
+ targetPort: 9090
+ selector:
+ io.kompose.service: prometheus-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/tracing-server-deployment.yaml b/k8s/base/tracing-server-deployment.yaml
new file mode 100644
index 0000000000..563293c718
--- /dev/null
+++ b/k8s/base/tracing-server-deployment.yaml
@@ -0,0 +1,36 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: tracing-server
+ name: tracing-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: tracing-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: tracing-server
+ spec:
+ containers:
+ - env:
+ - name: JAVA_OPTS
+ value: -XX:+UnlockExperimentalVMOptions -Djava.security.egd=file:/dev/./urandom
+ image: openzipkin/zipkin
+ name: tracing-server
+ ports:
+ - containerPort: 9411
+ resources: {}
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/tracing-server-service.yaml b/k8s/base/tracing-server-service.yaml
new file mode 100644
index 0000000000..7bdabd2e6a
--- /dev/null
+++ b/k8s/base/tracing-server-service.yaml
@@ -0,0 +1,19 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: tracing-server
+ name: tracing-server
+spec:
+ ports:
+ - name: "9411"
+ port: 9411
+ targetPort: 9411
+ selector:
+ io.kompose.service: tracing-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/vets-service-deployment.yaml b/k8s/base/vets-service-deployment.yaml
new file mode 100644
index 0000000000..4e29396e6f
--- /dev/null
+++ b/k8s/base/vets-service-deployment.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: vets-service
+ name: vets-service
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ io.kompose.service: vets-service
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: vets-service
+ spec:
+ containers:
+ - image: IMAGE_TAG_VETS_SERVICE
+ name: vets-service
+ ports:
+ - containerPort: 8083
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/vets-service-ingress.yaml b/k8s/base/vets-service-ingress.yaml
new file mode 100644
index 0000000000..06a1894096
--- /dev/null
+++ b/k8s/base/vets-service-ingress.yaml
@@ -0,0 +1,22 @@
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: vets-service
+ name: vets-service
+spec:
+ rules:
+ - host: petclinic.clarusway.us
+ http:
+ paths:
+ - backend:
+ serviceName: vets-service
+ servicePort: 8083
+status:
+ loadBalancer: {}
diff --git a/k8s/base/vets-service-service.yaml b/k8s/base/vets-service-service.yaml
new file mode 100644
index 0000000000..6444738246
--- /dev/null
+++ b/k8s/base/vets-service-service.yaml
@@ -0,0 +1,21 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: vets-service
+ name: vets-service
+spec:
+ ports:
+ - name: "8083"
+ port: 8083
+ targetPort: 8083
+ selector:
+ io.kompose.service: vets-service
+status:
+ loadBalancer: {}
diff --git a/k8s/base/visits-service-deployment.yaml b/k8s/base/visits-service-deployment.yaml
new file mode 100644
index 0000000000..5e48933d2d
--- /dev/null
+++ b/k8s/base/visits-service-deployment.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: visits-service
+ name: visits-service
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ io.kompose.service: visits-service
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: visits-service
+ spec:
+ containers:
+ - image: IMAGE_TAG_VISITS_SERVICE
+ name: visits-service
+ ports:
+ - containerPort: 8082
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/visits-service-ingress.yaml b/k8s/base/visits-service-ingress.yaml
new file mode 100644
index 0000000000..9d7378d62d
--- /dev/null
+++ b/k8s/base/visits-service-ingress.yaml
@@ -0,0 +1,22 @@
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: visits-service
+ name: visits-service
+spec:
+ rules:
+ - host: petclinic.clarusway.us
+ http:
+ paths:
+ - backend:
+ serviceName: visits-service
+ servicePort: 8082
+status:
+ loadBalancer: {}
diff --git a/k8s/base/visits-service-service.yaml b/k8s/base/visits-service-service.yaml
new file mode 100644
index 0000000000..730910dd3c
--- /dev/null
+++ b/k8s/base/visits-service-service.yaml
@@ -0,0 +1,21 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: visits-service
+ name: visits-service
+spec:
+ ports:
+ - name: "8082"
+ port: 8082
+ targetPort: 8082
+ selector:
+ io.kompose.service: visits-service
+status:
+ loadBalancer: {}
From f8c62bf784141f88004fa2b89f87ddbc4da203bc Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Tue, 24 Nov 2020 22:36:55 -0500
Subject: [PATCH 45/46] updated deployment files with init containers
---
k8s/base/admin-server-deployment.yaml | 41 +++++++++++++++++++++
k8s/base/admin-server-service.yaml | 20 ++++++++++
k8s/base/api-gateway-deployment.yaml | 43 ++++++++++++++++++++++
k8s/base/api-gateway-ingress.yaml | 22 +++++++++++
k8s/base/api-gateway-service.yaml | 21 +++++++++++
k8s/base/config-server-deployment.yaml | 37 +++++++++++++++++++
k8s/base/config-server-service.yaml | 20 ++++++++++
k8s/base/customers-service-deployment.yaml | 43 ++++++++++++++++++++++
k8s/base/customers-service-ingress.yaml | 22 +++++++++++
k8s/base/customers-service-service.yaml | 21 +++++++++++
k8s/base/discovery-server-deployment.yaml | 41 +++++++++++++++++++++
k8s/base/discovery-server-service.yaml | 20 ++++++++++
k8s/base/grafana-server-deployment.yaml | 41 +++++++++++++++++++++
k8s/base/grafana-server-service.yaml | 20 ++++++++++
k8s/base/hystrix-dashboard-deployment.yaml | 41 +++++++++++++++++++++
k8s/base/hystrix-dashboard-service.yaml | 20 ++++++++++
k8s/base/prometheus-server-deployment.yaml | 41 +++++++++++++++++++++
k8s/base/prometheus-server-service.yaml | 20 ++++++++++
k8s/base/tracing-server-deployment.yaml | 36 ++++++++++++++++++
k8s/base/tracing-server-service.yaml | 19 ++++++++++
k8s/base/vets-service-deployment.yaml | 43 ++++++++++++++++++++++
k8s/base/vets-service-ingress.yaml | 22 +++++++++++
k8s/base/vets-service-service.yaml | 21 +++++++++++
k8s/base/visits-service-deployment.yaml | 43 ++++++++++++++++++++++
k8s/base/visits-service-ingress.yaml | 22 +++++++++++
k8s/base/visits-service-service.yaml | 21 +++++++++++
{ks8 => k8s}/docker-compose.yml | 0
27 files changed, 761 insertions(+)
create mode 100644 k8s/base/admin-server-deployment.yaml
create mode 100644 k8s/base/admin-server-service.yaml
create mode 100644 k8s/base/api-gateway-deployment.yaml
create mode 100644 k8s/base/api-gateway-ingress.yaml
create mode 100644 k8s/base/api-gateway-service.yaml
create mode 100644 k8s/base/config-server-deployment.yaml
create mode 100644 k8s/base/config-server-service.yaml
create mode 100644 k8s/base/customers-service-deployment.yaml
create mode 100644 k8s/base/customers-service-ingress.yaml
create mode 100644 k8s/base/customers-service-service.yaml
create mode 100644 k8s/base/discovery-server-deployment.yaml
create mode 100644 k8s/base/discovery-server-service.yaml
create mode 100644 k8s/base/grafana-server-deployment.yaml
create mode 100644 k8s/base/grafana-server-service.yaml
create mode 100644 k8s/base/hystrix-dashboard-deployment.yaml
create mode 100644 k8s/base/hystrix-dashboard-service.yaml
create mode 100644 k8s/base/prometheus-server-deployment.yaml
create mode 100644 k8s/base/prometheus-server-service.yaml
create mode 100644 k8s/base/tracing-server-deployment.yaml
create mode 100644 k8s/base/tracing-server-service.yaml
create mode 100644 k8s/base/vets-service-deployment.yaml
create mode 100644 k8s/base/vets-service-ingress.yaml
create mode 100644 k8s/base/vets-service-service.yaml
create mode 100644 k8s/base/visits-service-deployment.yaml
create mode 100644 k8s/base/visits-service-ingress.yaml
create mode 100644 k8s/base/visits-service-service.yaml
rename {ks8 => k8s}/docker-compose.yml (100%)
diff --git a/k8s/base/admin-server-deployment.yaml b/k8s/base/admin-server-deployment.yaml
new file mode 100644
index 0000000000..fa936fb8ff
--- /dev/null
+++ b/k8s/base/admin-server-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: admin-server
+ name: admin-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: admin-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: admin-server
+ spec:
+ containers:
+ - image: IMAGE_TAG_ADMIN_SERVER
+ name: admin-server
+ ports:
+ - containerPort: 9090
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/admin-server-service.yaml b/k8s/base/admin-server-service.yaml
new file mode 100644
index 0000000000..d51aae79c9
--- /dev/null
+++ b/k8s/base/admin-server-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: admin-server
+ name: admin-server
+spec:
+ ports:
+ - name: "9090"
+ port: 9090
+ targetPort: 9090
+ selector:
+ io.kompose.service: admin-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/api-gateway-deployment.yaml b/k8s/base/api-gateway-deployment.yaml
new file mode 100644
index 0000000000..3c39d39889
--- /dev/null
+++ b/k8s/base/api-gateway-deployment.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: api-gateway
+ name: api-gateway
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ io.kompose.service: api-gateway
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: api-gateway
+ spec:
+ containers:
+ - image: IMAGE_TAG_API_GATEWAY
+ name: api-gateway
+ ports:
+ - containerPort: 8080
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/api-gateway-ingress.yaml b/k8s/base/api-gateway-ingress.yaml
new file mode 100644
index 0000000000..64612b9038
--- /dev/null
+++ b/k8s/base/api-gateway-ingress.yaml
@@ -0,0 +1,22 @@
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: api-gateway
+ name: api-gateway
+spec:
+ rules:
+ - host: petclinic.clarusway.us
+ http:
+ paths:
+ - backend:
+ serviceName: api-gateway
+ servicePort: 8080
+status:
+ loadBalancer: {}
diff --git a/k8s/base/api-gateway-service.yaml b/k8s/base/api-gateway-service.yaml
new file mode 100644
index 0000000000..9674c75d04
--- /dev/null
+++ b/k8s/base/api-gateway-service.yaml
@@ -0,0 +1,21 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: api-gateway
+ name: api-gateway
+spec:
+ ports:
+ - name: "8080"
+ port: 8080
+ targetPort: 8080
+ selector:
+ io.kompose.service: api-gateway
+status:
+ loadBalancer: {}
diff --git a/k8s/base/config-server-deployment.yaml b/k8s/base/config-server-deployment.yaml
new file mode 100644
index 0000000000..aa5b54436a
--- /dev/null
+++ b/k8s/base/config-server-deployment.yaml
@@ -0,0 +1,37 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: config-server
+ name: config-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: config-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: config-server
+ spec:
+ containers:
+ - image: IMAGE_TAG_CONFIG_SERVER
+ name: config-server
+ ports:
+ - containerPort: 8888
+ resources: {}
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/config-server-service.yaml b/k8s/base/config-server-service.yaml
new file mode 100644
index 0000000000..e990afb1dc
--- /dev/null
+++ b/k8s/base/config-server-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: config-server
+ name: config-server
+spec:
+ ports:
+ - name: "8888"
+ port: 8888
+ targetPort: 8888
+ selector:
+ io.kompose.service: config-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/customers-service-deployment.yaml b/k8s/base/customers-service-deployment.yaml
new file mode 100644
index 0000000000..f4eb9dc892
--- /dev/null
+++ b/k8s/base/customers-service-deployment.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: customers-service
+ name: customers-service
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ io.kompose.service: customers-service
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: customers-service
+ spec:
+ containers:
+ - image: IMAGE_TAG_CUSTOMERS_SERVICE
+ name: customers-service
+ ports:
+ - containerPort: 8081
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/customers-service-ingress.yaml b/k8s/base/customers-service-ingress.yaml
new file mode 100644
index 0000000000..716a7a6945
--- /dev/null
+++ b/k8s/base/customers-service-ingress.yaml
@@ -0,0 +1,22 @@
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: customers-service
+ name: customers-service
+spec:
+ rules:
+ - host: petclinic.clarusway.us
+ http:
+ paths:
+ - backend:
+ serviceName: customers-service
+ servicePort: 8081
+status:
+ loadBalancer: {}
diff --git a/k8s/base/customers-service-service.yaml b/k8s/base/customers-service-service.yaml
new file mode 100644
index 0000000000..aac4e3c552
--- /dev/null
+++ b/k8s/base/customers-service-service.yaml
@@ -0,0 +1,21 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: customers-service
+ name: customers-service
+spec:
+ ports:
+ - name: "8081"
+ port: 8081
+ targetPort: 8081
+ selector:
+ io.kompose.service: customers-service
+status:
+ loadBalancer: {}
diff --git a/k8s/base/discovery-server-deployment.yaml b/k8s/base/discovery-server-deployment.yaml
new file mode 100644
index 0000000000..cb38b77ef2
--- /dev/null
+++ b/k8s/base/discovery-server-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: discovery-server
+ name: discovery-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: discovery-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: discovery-server
+ spec:
+ containers:
+ - image: IMAGE_TAG_DISCOVERY_SERVER
+ name: discovery-server
+ ports:
+ - containerPort: 8761
+ resources: {}
+ initContainers:
+ - name: init-config-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z config-server:8888; do echo waiting for config-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/discovery-server-service.yaml b/k8s/base/discovery-server-service.yaml
new file mode 100644
index 0000000000..071e97ad1f
--- /dev/null
+++ b/k8s/base/discovery-server-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: discovery-server
+ name: discovery-server
+spec:
+ ports:
+ - name: "8761"
+ port: 8761
+ targetPort: 8761
+ selector:
+ io.kompose.service: discovery-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/grafana-server-deployment.yaml b/k8s/base/grafana-server-deployment.yaml
new file mode 100644
index 0000000000..ef95843478
--- /dev/null
+++ b/k8s/base/grafana-server-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: grafana-server
+ name: grafana-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: grafana-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: grafana-server
+ spec:
+ containers:
+ - image: IMAGE_TAG_GRAFANA_SERVICE
+ name: grafana-server
+ ports:
+ - containerPort: 3000
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/grafana-server-service.yaml b/k8s/base/grafana-server-service.yaml
new file mode 100644
index 0000000000..fabc03aedf
--- /dev/null
+++ b/k8s/base/grafana-server-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: grafana-server
+ name: grafana-server
+spec:
+ ports:
+ - name: "3000"
+ port: 3000
+ targetPort: 3000
+ selector:
+ io.kompose.service: grafana-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/hystrix-dashboard-deployment.yaml b/k8s/base/hystrix-dashboard-deployment.yaml
new file mode 100644
index 0000000000..2a7c6df14f
--- /dev/null
+++ b/k8s/base/hystrix-dashboard-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: hystrix-dashboard
+ name: hystrix-dashboard
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: hystrix-dashboard
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: hystrix-dashboard
+ spec:
+ containers:
+ - image: IMAGE_TAG_HYSTRIX_DASHBOARD
+ name: hystrix-dashboard
+ ports:
+ - containerPort: 7979
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/hystrix-dashboard-service.yaml b/k8s/base/hystrix-dashboard-service.yaml
new file mode 100644
index 0000000000..50c22dc7c2
--- /dev/null
+++ b/k8s/base/hystrix-dashboard-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: hystrix-dashboard
+ name: hystrix-dashboard
+spec:
+ ports:
+ - name: "7979"
+ port: 7979
+ targetPort: 7979
+ selector:
+ io.kompose.service: hystrix-dashboard
+status:
+ loadBalancer: {}
diff --git a/k8s/base/prometheus-server-deployment.yaml b/k8s/base/prometheus-server-deployment.yaml
new file mode 100644
index 0000000000..ffacc07f31
--- /dev/null
+++ b/k8s/base/prometheus-server-deployment.yaml
@@ -0,0 +1,41 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: prometheus-server
+ name: prometheus-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: prometheus-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: prometheus-server
+ spec:
+ containers:
+ - image: IMAGE_TAG_PROMETHEUS_SERVICE
+ name: prometheus-server
+ ports:
+ - containerPort: 9090
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/prometheus-server-service.yaml b/k8s/base/prometheus-server-service.yaml
new file mode 100644
index 0000000000..105d6aa454
--- /dev/null
+++ b/k8s/base/prometheus-server-service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: prometheus-server
+ name: prometheus-server
+spec:
+ ports:
+ - name: "9091"
+ port: 9091
+ targetPort: 9090
+ selector:
+ io.kompose.service: prometheus-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/tracing-server-deployment.yaml b/k8s/base/tracing-server-deployment.yaml
new file mode 100644
index 0000000000..563293c718
--- /dev/null
+++ b/k8s/base/tracing-server-deployment.yaml
@@ -0,0 +1,36 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: tracing-server
+ name: tracing-server
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ io.kompose.service: tracing-server
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: tracing-server
+ spec:
+ containers:
+ - env:
+ - name: JAVA_OPTS
+ value: -XX:+UnlockExperimentalVMOptions -Djava.security.egd=file:/dev/./urandom
+ image: openzipkin/zipkin
+ name: tracing-server
+ ports:
+ - containerPort: 9411
+ resources: {}
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/tracing-server-service.yaml b/k8s/base/tracing-server-service.yaml
new file mode 100644
index 0000000000..7bdabd2e6a
--- /dev/null
+++ b/k8s/base/tracing-server-service.yaml
@@ -0,0 +1,19 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: tracing-server
+ name: tracing-server
+spec:
+ ports:
+ - name: "9411"
+ port: 9411
+ targetPort: 9411
+ selector:
+ io.kompose.service: tracing-server
+status:
+ loadBalancer: {}
diff --git a/k8s/base/vets-service-deployment.yaml b/k8s/base/vets-service-deployment.yaml
new file mode 100644
index 0000000000..4e29396e6f
--- /dev/null
+++ b/k8s/base/vets-service-deployment.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: vets-service
+ name: vets-service
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ io.kompose.service: vets-service
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: vets-service
+ spec:
+ containers:
+ - image: IMAGE_TAG_VETS_SERVICE
+ name: vets-service
+ ports:
+ - containerPort: 8083
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/vets-service-ingress.yaml b/k8s/base/vets-service-ingress.yaml
new file mode 100644
index 0000000000..06a1894096
--- /dev/null
+++ b/k8s/base/vets-service-ingress.yaml
@@ -0,0 +1,22 @@
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: vets-service
+ name: vets-service
+spec:
+ rules:
+ - host: petclinic.clarusway.us
+ http:
+ paths:
+ - backend:
+ serviceName: vets-service
+ servicePort: 8083
+status:
+ loadBalancer: {}
diff --git a/k8s/base/vets-service-service.yaml b/k8s/base/vets-service-service.yaml
new file mode 100644
index 0000000000..6444738246
--- /dev/null
+++ b/k8s/base/vets-service-service.yaml
@@ -0,0 +1,21 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: vets-service
+ name: vets-service
+spec:
+ ports:
+ - name: "8083"
+ port: 8083
+ targetPort: 8083
+ selector:
+ io.kompose.service: vets-service
+status:
+ loadBalancer: {}
diff --git a/k8s/base/visits-service-deployment.yaml b/k8s/base/visits-service-deployment.yaml
new file mode 100644
index 0000000000..5e48933d2d
--- /dev/null
+++ b/k8s/base/visits-service-deployment.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: visits-service
+ name: visits-service
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ io.kompose.service: visits-service
+ strategy: {}
+ template:
+ metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: visits-service
+ spec:
+ containers:
+ - image: IMAGE_TAG_VISITS_SERVICE
+ name: visits-service
+ ports:
+ - containerPort: 8082
+ resources: {}
+ initContainers:
+ - name: init-discovery-server
+ image: busybox
+ command: ['sh', '-c', 'until nc -z discovery-server:8761; do echo waiting for discovery-server; sleep 2; done;']
+ imagePullSecrets:
+ - name: regcred
+ restartPolicy: Always
+status: {}
diff --git a/k8s/base/visits-service-ingress.yaml b/k8s/base/visits-service-ingress.yaml
new file mode 100644
index 0000000000..9d7378d62d
--- /dev/null
+++ b/k8s/base/visits-service-ingress.yaml
@@ -0,0 +1,22 @@
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: visits-service
+ name: visits-service
+spec:
+ rules:
+ - host: petclinic.clarusway.us
+ http:
+ paths:
+ - backend:
+ serviceName: visits-service
+ servicePort: 8082
+status:
+ loadBalancer: {}
diff --git a/k8s/base/visits-service-service.yaml b/k8s/base/visits-service-service.yaml
new file mode 100644
index 0000000000..730910dd3c
--- /dev/null
+++ b/k8s/base/visits-service-service.yaml
@@ -0,0 +1,21 @@
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ kompose.cmd: kompose convert -f docker-compose.yml -o base
+ kompose.image-pull-secret: regcred
+ kompose.service.expose: petclinic.clarusway.us
+ kompose.version: 1.22.0 (955b78124)
+ creationTimestamp: null
+ labels:
+ io.kompose.service: visits-service
+ name: visits-service
+spec:
+ ports:
+ - name: "8082"
+ port: 8082
+ targetPort: 8082
+ selector:
+ io.kompose.service: visits-service
+status:
+ loadBalancer: {}
diff --git a/ks8/docker-compose.yml b/k8s/docker-compose.yml
similarity index 100%
rename from ks8/docker-compose.yml
rename to k8s/docker-compose.yml
From 43124ca2c89e0b168afd1a9fe0aec144add9e2e3 Mon Sep 17 00:00:00 2001
From: huseyin-yigit <63133251+huseyin-yigit@users.noreply.github.com>
Date: Fri, 4 Dec 2020 23:42:35 -0500
Subject: [PATCH 46/46] added Configuration YAML Files for Kubernetes
Deployment
---
k8s/base/kustomization-template.yml | 49 +++++++++++++++++++++++++++++
k8s/base/kustomization.yml | 49 +++++++++++++++++++++++++++++
k8s/prod/kustomization.yml | 6 ++++
k8s/prod/replica-count.yml | 7 +++++
k8s/staging/kustomization.yml | 6 ++++
k8s/staging/replica-count.yml | 7 +++++
6 files changed, 124 insertions(+)
create mode 100644 k8s/base/kustomization-template.yml
create mode 100644 k8s/base/kustomization.yml
create mode 100644 k8s/prod/kustomization.yml
create mode 100644 k8s/prod/replica-count.yml
create mode 100644 k8s/staging/kustomization.yml
create mode 100644 k8s/staging/replica-count.yml
diff --git a/k8s/base/kustomization-template.yml b/k8s/base/kustomization-template.yml
new file mode 100644
index 0000000000..dbbe312b06
--- /dev/null
+++ b/k8s/base/kustomization-template.yml
@@ -0,0 +1,49 @@
+resources:
+- admin-server-deployment.yaml
+- api-gateway-deployment.yaml
+- config-server-deployment.yaml
+- customers-service-deployment.yaml
+- discovery-server-deployment.yaml
+- grafana-server-deployment.yaml
+- hystrix-dashboard-deployment.yaml
+- prometheus-server-deployment.yaml
+- tracing-server-deployment.yaml
+- vets-service-deployment.yaml
+- visits-service-deployment.yaml
+- admin-server-service.yaml
+- api-gateway-service.yaml
+- config-server-service.yaml
+- customers-service-service.yaml
+- discovery-server-service.yaml
+- grafana-server-service.yaml
+- hystrix-dashboard-service.yaml
+- prometheus-server-service.yaml
+- tracing-server-service.yaml
+- vets-service-service.yaml
+- visits-service-service.yaml
+- api-gateway-ingress.yaml
+- customers-service-ingress.yaml
+- vets-service-ingress.yaml
+- visits-service-ingress.yaml
+
+images:
+- name: IMAGE_TAG_CONFIG_SERVER
+ newName: "${IMAGE_TAG_CONFIG_SERVER}"
+- name: IMAGE_TAG_DISCOVERY_SERVER
+ newName: "${IMAGE_TAG_DISCOVERY_SERVER}"
+- name: IMAGE_TAG_CUSTOMERS_SERVICE
+ newName: "${IMAGE_TAG_CUSTOMERS_SERVICE}"
+- name: IMAGE_TAG_VISITS_SERVICE
+ newName: "${IMAGE_TAG_VISITS_SERVICE}"
+- name: IMAGE_TAG_VETS_SERVICE
+ newName: "${IMAGE_TAG_VETS_SERVICE}"
+- name: IMAGE_TAG_API_GATEWAY
+ newName: "${IMAGE_TAG_API_GATEWAY}"
+- name: IMAGE_TAG_ADMIN_SERVER
+ newName: "${IMAGE_TAG_ADMIN_SERVER}"
+- name: IMAGE_TAG_HYSTRIX_DASHBOARD
+ newName: "${IMAGE_TAG_HYSTRIX_DASHBOARD}"
+- name: IMAGE_TAG_GRAFANA_SERVICE
+ newName: "${IMAGE_TAG_GRAFANA_SERVICE}"
+- name: IMAGE_TAG_PROMETHEUS_SERVICE
+ newName: "${IMAGE_TAG_PROMETHEUS_SERVICE}"
\ No newline at end of file
diff --git a/k8s/base/kustomization.yml b/k8s/base/kustomization.yml
new file mode 100644
index 0000000000..1fcd183677
--- /dev/null
+++ b/k8s/base/kustomization.yml
@@ -0,0 +1,49 @@
+resources:
+- admin-server-deployment.yaml
+- api-gateway-deployment.yaml
+- config-server-deployment.yaml
+- customers-service-deployment.yaml
+- discovery-server-deployment.yaml
+- grafana-server-deployment.yaml
+- hystrix-dashboard-deployment.yaml
+- prometheus-server-deployment.yaml
+- tracing-server-deployment.yaml
+- vets-service-deployment.yaml
+- visits-service-deployment.yaml
+- admin-server-service.yaml
+- api-gateway-service.yaml
+- config-server-service.yaml
+- customers-service-service.yaml
+- discovery-server-service.yaml
+- grafana-server-service.yaml
+- hystrix-dashboard-service.yaml
+- prometheus-server-service.yaml
+- tracing-server-service.yaml
+- vets-service-service.yaml
+- visits-service-service.yaml
+- api-gateway-ingress.yaml
+- customers-service-ingress.yaml
+- vets-service-ingress.yaml
+- visits-service-ingress.yaml
+
+images:
+- name: IMAGE_TAG_CONFIG_SERVER
+ newName: "testing-image-1"
+- name: IMAGE_TAG_DISCOVERY_SERVER
+ newName: "testing-image-2"
+- name: IMAGE_TAG_CUSTOMERS_SERVICE
+ newName: "testing-image-3"
+- name: IMAGE_TAG_VISITS_SERVICE
+ newName: "testing-image-4"
+- name: IMAGE_TAG_VETS_SERVICE
+ newName: "testing-image-5"
+- name: IMAGE_TAG_API_GATEWAY
+ newName: "testing-image-6"
+- name: IMAGE_TAG_ADMIN_SERVER
+ newName: "testing-image-7"
+- name: IMAGE_TAG_HYSTRIX_DASHBOARD
+ newName: "testing-image-8"
+- name: IMAGE_TAG_GRAFANA_SERVICE
+ newName: "testing-image-9"
+- name: IMAGE_TAG_PROMETHEUS_SERVICE
+ newName: "testing-image-10"
\ No newline at end of file
diff --git a/k8s/prod/kustomization.yml b/k8s/prod/kustomization.yml
new file mode 100644
index 0000000000..0734bdc214
--- /dev/null
+++ b/k8s/prod/kustomization.yml
@@ -0,0 +1,6 @@
+# kustomization.yml
+namespace: "petclinic-prod-ns"
+bases:
+- ../base
+patches:
+- replica-count.yml
\ No newline at end of file
diff --git a/k8s/prod/replica-count.yml b/k8s/prod/replica-count.yml
new file mode 100644
index 0000000000..74cd993bb1
--- /dev/null
+++ b/k8s/prod/replica-count.yml
@@ -0,0 +1,7 @@
+# replica-count.yml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: api-gateway
+spec:
+ replicas: 5
\ No newline at end of file
diff --git a/k8s/staging/kustomization.yml b/k8s/staging/kustomization.yml
new file mode 100644
index 0000000000..80d4c1be96
--- /dev/null
+++ b/k8s/staging/kustomization.yml
@@ -0,0 +1,6 @@
+# kustomization.yml
+namespace: "petclinic-staging-ns"
+bases:
+- ../base
+patches:
+- replica-count.yml
\ No newline at end of file
diff --git a/k8s/staging/replica-count.yml b/k8s/staging/replica-count.yml
new file mode 100644
index 0000000000..e9a4bb5edf
--- /dev/null
+++ b/k8s/staging/replica-count.yml
@@ -0,0 +1,7 @@
+# replica-count.yml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: api-gateway
+spec:
+ replicas: 3
\ No newline at end of file