Compare commits
30 Commits
master
...
production
| Author | SHA1 | Date |
|---|---|---|
|
|
763dc1aee6 | |
|
|
98629c5b1a | |
|
|
7022ca76e9 | |
|
|
328e655855 | |
|
|
9353c3c71a | |
|
|
f3342655f8 | |
|
|
e32abf7b03 | |
|
|
277d0a15d5 | |
|
|
cb9e4d56dd | |
|
|
b267f66694 | |
|
|
c75b9c6f51 | |
|
|
fd32abf397 | |
|
|
5bf16fb32a | |
|
|
1f9785d918 | |
|
|
d0cb1dba85 | |
|
|
7d1d0e0c1e | |
|
|
c788c0dafd | |
|
|
52c4ddd546 | |
|
|
a70ea8e899 | |
|
|
ff8dadc6f5 | |
|
|
be06d311f2 | |
|
|
7295149e87 | |
|
|
378346e754 | |
|
|
beb9c738a2 | |
|
|
5565aa8483 | |
|
|
808823f422 | |
|
|
841e000a5e | |
|
|
3b510f20ad | |
|
|
0fedf2701c | |
|
|
c7df62fb8c |
|
|
@ -1,34 +0,0 @@
|
||||||
# Local .terraform directories
|
|
||||||
**/.terraform/*
|
|
||||||
|
|
||||||
# .tfstate files
|
|
||||||
*.tfstate
|
|
||||||
*.tfstate.*
|
|
||||||
*.tfplan
|
|
||||||
|
|
||||||
# Crash log files
|
|
||||||
crash.log
|
|
||||||
|
|
||||||
# Exclude all .tfvars files, which are likely to contain sentitive data, such as
|
|
||||||
# password, private keys, and other secrets. These should not be part of version
|
|
||||||
# control as they are data points which are potentially sensitive and subject
|
|
||||||
# to change depending on the environment.
|
|
||||||
*.tfvars
|
|
||||||
|
|
||||||
# Ignore override files as they are usually used to override resources locally and so
|
|
||||||
# are not checked in
|
|
||||||
override.tf
|
|
||||||
override.tf.json
|
|
||||||
*_override.tf
|
|
||||||
*_override.tf.json
|
|
||||||
|
|
||||||
# Ignore CLI configuration files
|
|
||||||
.terraformrc
|
|
||||||
terraform.rc
|
|
||||||
|
|
||||||
.env
|
|
||||||
*.env
|
|
||||||
|
|
||||||
venv
|
|
||||||
|
|
||||||
.helm
|
|
||||||
BIN
carts-BAK2.tgz
BIN
carts-BAK2.tgz
Binary file not shown.
Binary file not shown.
BIN
carts-db.tgz
BIN
carts-db.tgz
Binary file not shown.
|
|
@ -1,4 +0,0 @@
|
||||||
apiVersion: v1
|
|
||||||
description: A Helm chart for service carts-db
|
|
||||||
name: carts-db
|
|
||||||
version: 0.1.0
|
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,58 @@
|
||||||
|
apiVersion: v2
|
||||||
|
actions:
|
||||||
|
- name: "Deploy using helm"
|
||||||
|
events:
|
||||||
|
- name: "sh.keptn.event.deployment.triggered"
|
||||||
|
tasks:
|
||||||
|
- name: "Run helm"
|
||||||
|
files:
|
||||||
|
- /charts
|
||||||
|
env:
|
||||||
|
- name: IMAGE
|
||||||
|
value: "$.data.configurationChange.values.image"
|
||||||
|
valueFrom: event
|
||||||
|
image: "alpine/helm:3.7.2"
|
||||||
|
serviceAccount: "jes-deploy-using-helm"
|
||||||
|
cmd: ["helm"]
|
||||||
|
args: ["upgrade", "--create-namespace", "--install", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "/keptn/charts/$(KEPTN_SERVICE).tgz", "--set", "image=$(IMAGE)", "--set", "keptn.service=$(KEPTN_SERVICE)", "--set", "keptn.deployment=$(KEPTN_STAGE)", "--wait"]
|
||||||
|
|
||||||
|
- name: "Rollback using helm"
|
||||||
|
events:
|
||||||
|
- name: "sh.keptn.event.rollback.triggered"
|
||||||
|
tasks:
|
||||||
|
- name: "Run helm"
|
||||||
|
serviceAccount: "jes-deploy-using-helm"
|
||||||
|
image: "alpine/helm:3.7.2"
|
||||||
|
cmd: ["helm"]
|
||||||
|
args: ["rollback", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "--wait"]
|
||||||
|
|
||||||
|
- name: "Scale using kubectl"
|
||||||
|
events:
|
||||||
|
- name: "sh.keptn.event.action.triggered"
|
||||||
|
jsonpath:
|
||||||
|
property: "$.data.action.action"
|
||||||
|
match: "scaling"
|
||||||
|
tasks:
|
||||||
|
- name: "Run kubectl"
|
||||||
|
serviceAccount: "jes-deploy-using-helm"
|
||||||
|
env:
|
||||||
|
- name: SCALING
|
||||||
|
value: $.data.action.value
|
||||||
|
valueFrom: event
|
||||||
|
image: "alpine/k8s:1.20.15"
|
||||||
|
cmd: ["sh"]
|
||||||
|
# Note: Hardcoded kubernetes namespace & KEPTN_SERVICE does most likely not match the deployment name
|
||||||
|
args: ["-c", "REPLICAS=$(kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} get deployment/${KEPTN_SERVICE} -o go-template='{{.spec.replicas}}');DESIRED=$((${SCALING}+${REPLICAS}));echo Scaling deployment to ${DESIRED} && kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} scale --replicas=${DESIRED} deployment/${KEPTN_SERVICE}"]
|
||||||
|
|
||||||
|
- name: "Run tests using locust"
|
||||||
|
events:
|
||||||
|
- name: "sh.keptn.event.test.triggered"
|
||||||
|
tasks:
|
||||||
|
- name: "Run locust"
|
||||||
|
files:
|
||||||
|
- locust/basic.py
|
||||||
|
- locust/locust.conf
|
||||||
|
|
||||||
|
image: "locustio/locust:2.8.6"
|
||||||
|
cmd: ["locust"]
|
||||||
|
args: ["--config", "/keptn/locust/locust.conf", "-f", "/keptn/locust/basic.py", "--host", "http://$(KEPTN_SERVICE).$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "--only-summary"]
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
servicename: carts-db
|
||||||
|
creationtimestamp: 2023-11-14 16:06:48.551336247 +0000 UTC
|
||||||
|
|
@ -1,61 +0,0 @@
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: carts-db-mongodata
|
|
||||||
spec:
|
|
||||||
{% comment %} storageClassName: region1storageclass {% endcomment %}
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 1Gi
|
|
||||||
status: {}
|
|
||||||
---
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: carts-db
|
|
||||||
labels:
|
|
||||||
app: carts-db
|
|
||||||
spec:
|
|
||||||
replicas: {{ .Values.replicaCount }}
|
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: carts-db
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: carts-db
|
|
||||||
deployment: carts-db
|
|
||||||
app.kubernetes.io/name: {{ .Values.keptn.service }}
|
|
||||||
app.kubernetes.io/instance: "{{ .Values.keptn.service }}-{{ .Values.keptn.deployment }}"
|
|
||||||
app.kubernetes.io/component: database
|
|
||||||
app.kubernetes.io/part-of: "{{ .Values.keptn.project }}"
|
|
||||||
app.kubernetes.io/managed-by: Keptn
|
|
||||||
app.kubernetes.io/version: {{ (split ":" .Values.image)._1 | default "latest" }}
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: carts-db
|
|
||||||
image: {{ .Values.image }}
|
|
||||||
imagePullPolicy: IfNotPresent
|
|
||||||
ports:
|
|
||||||
- containerPort: 27017
|
|
||||||
resources: {}
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /data/db
|
|
||||||
name: carts-db-mongodata
|
|
||||||
restartPolicy: Always
|
|
||||||
volumes:
|
|
||||||
- name: carts-db-mongodata
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: carts-db-mongodata
|
|
||||||
{% comment %} nodeSelector:
|
|
||||||
role: "group2" {% endcomment %}
|
|
||||||
{% comment %} tolerations:
|
|
||||||
- key: "dedicated"
|
|
||||||
operator: "Equal"
|
|
||||||
value: "group2"
|
|
||||||
effect: "NoSchedule" {% endcomment %}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: carts-db
|
|
||||||
spec:
|
|
||||||
ports:
|
|
||||||
- name: {{ .Values.service.name }}
|
|
||||||
port: {{ .Values.service.externalPort }}
|
|
||||||
targetPort: {{ .Values.service.internalPort }}
|
|
||||||
selector:
|
|
||||||
app: carts-db
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
image: mongo
|
|
||||||
service:
|
|
||||||
externalPort: 27017
|
|
||||||
internalPort: 27017
|
|
||||||
name: carts-db
|
|
||||||
replicaCount: 1
|
|
||||||
BIN
carts-db_BAK.tgz
BIN
carts-db_BAK.tgz
Binary file not shown.
|
|
@ -1,4 +0,0 @@
|
||||||
apiVersion: v1
|
|
||||||
description: A Helm chart for service carts
|
|
||||||
name: carts
|
|
||||||
version: 0.1.0
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,77 +1,58 @@
|
||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
actions:
|
actions:
|
||||||
- name: "Deploy using helm"
|
- name: "Deploy using helm"
|
||||||
events:
|
events:
|
||||||
- name: "sh.keptn.event.deployment.triggered"
|
- name: "sh.keptn.event.deployment.triggered"
|
||||||
tasks:
|
tasks:
|
||||||
# - name: "Create Namespace"
|
- name: "Run helm"
|
||||||
# serviceAccount: "jes-deploy-using-helm"
|
files:
|
||||||
# # env:
|
- /charts
|
||||||
# # - name: SCALING
|
env:
|
||||||
# # value: $.data.action.value
|
- name: IMAGE
|
||||||
# # valueFrom: event
|
value: "$.data.configurationChange.values.image"
|
||||||
# image: "alpine/k8s:1.20.15"
|
valueFrom: event
|
||||||
# cmd: ["sh"]
|
image: "alpine/helm:3.7.2"
|
||||||
# # Note: Hardcoded kubernetes namespace & KEPTN_SERVICE does most likely not match the deployment name
|
serviceAccount: "jes-deploy-using-helm"
|
||||||
# args: ["-c", "REPLICAS=$(kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} get deployment/${KEPTN_SERVICE} -o go-template='{{.spec.replicas}}');DESIRED=$((${SCALING}+${REPLICAS}));echo Scaling deployment to ${DESIRED} && kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} scale --replicas=${DESIRED} deployment/${KEPTN_SERVICE}"]
|
cmd: ["helm"]
|
||||||
- name: "Run helm"
|
args: ["upgrade", "--force", "--create-namespace", "--install", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "/keptn/charts/$(KEPTN_SERVICE).tgz", "--set", "image=$(IMAGE)", "--set", "keptn.service=$(KEPTN_SERVICE)", "--set", "keptn.deployment=$(KEPTN_STAGE)", "--set", "keptn.project=$(KEPTN_PROJECT)","--set", "keptn.stage=$(KEPTN_STAGE)", "--wait"]
|
||||||
files:
|
|
||||||
- /charts
|
- name: "Rollback using helm"
|
||||||
env:
|
events:
|
||||||
- name: IMAGE
|
- name: "sh.keptn.event.rollback.triggered"
|
||||||
value: "$.data.configurationChange.values.image"
|
tasks:
|
||||||
valueFrom: event
|
- name: "Run helm"
|
||||||
image: "alpine/helm:3.7.2"
|
serviceAccount: "jes-deploy-using-helm"
|
||||||
serviceAccount: "jes-deploy-using-helm"
|
image: "alpine/helm:3.7.2"
|
||||||
cmd: ["helm"]
|
cmd: ["helm"]
|
||||||
#args: ["upgrade", "--force", "--create-namespace", "--install", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "/keptn/charts/$(KEPTN_SERVICE).tgz", "--set", "image=$(IMAGE)", "--set", "keptn.service=$(KEPTN_SERVICE)", "--set", "keptn.deployment=$(KEPTN_STAGE)", "--set", "keptn.project=$(KEPTN_PROJECT)","--set", "keptn.stage=$(KEPTN_STAGE)", "--wait"]
|
args: ["rollback", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "--wait"]
|
||||||
args: ["upgrade", "--force", "--install", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "/keptn/charts/$(KEPTN_SERVICE).tgz", "--set", "image=$(IMAGE)", "--set", "keptn.service=$(KEPTN_SERVICE)", "--set", "keptn.deployment=$(KEPTN_STAGE)", "--set", "keptn.project=$(KEPTN_PROJECT)","--set", "keptn.stage=$(KEPTN_STAGE)", "--wait"]
|
|
||||||
- name: "Uninstall"
|
- name: "Scale using kubectl"
|
||||||
events:
|
events:
|
||||||
- name: "sh.keptn.event.uninstall.triggered"
|
- name: "sh.keptn.event.action.triggered"
|
||||||
tasks:
|
jsonpath:
|
||||||
- name: "Run helm uninstall"
|
property: "$.data.action.action"
|
||||||
serviceAccount: "jes-deploy-using-helm"
|
match: "scaling"
|
||||||
image: "alpine/helm:3.7.2"
|
tasks:
|
||||||
cmd: ["helm"]
|
- name: "Run kubectl"
|
||||||
args: ["uninstall", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "--wait"]
|
serviceAccount: "jes-deploy-using-helm"
|
||||||
- name: "Rollback using helm"
|
env:
|
||||||
events:
|
- name: SCALING
|
||||||
- name: "sh.keptn.event.rollback.triggered"
|
value: $.data.action.value
|
||||||
tasks:
|
valueFrom: event
|
||||||
- name: "Run helm"
|
image: "alpine/k8s:1.20.15"
|
||||||
serviceAccount: "jes-deploy-using-helm"
|
cmd: ["sh"]
|
||||||
image: "alpine/helm:3.7.2"
|
# Note: Hardcoded kubernetes namespace & KEPTN_SERVICE does most likely not match the deployment name
|
||||||
cmd: ["helm"]
|
args: ["-c", "REPLICAS=$(kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} get deployment/${KEPTN_SERVICE} -o go-template='{{.spec.replicas}}');DESIRED=$((${SCALING}+${REPLICAS}));echo Scaling deployment to ${DESIRED} && kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} scale --replicas=${DESIRED} deployment/${KEPTN_SERVICE}"]
|
||||||
args: ["rollback", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "--wait"]
|
|
||||||
|
- name: "Run tests using locust"
|
||||||
- name: "Scale using kubectl"
|
events:
|
||||||
events:
|
- name: "sh.keptn.event.test.triggered"
|
||||||
- name: "sh.keptn.event.action.triggered"
|
tasks:
|
||||||
jsonpath:
|
- name: "Run locust"
|
||||||
property: "$.data.action.action"
|
files:
|
||||||
match: "scaling"
|
- locust/basic.py
|
||||||
tasks:
|
- locust/locust.conf
|
||||||
- name: "Run kubectl"
|
|
||||||
serviceAccount: "jes-deploy-using-helm"
|
image: "locustio/locust:2.8.6"
|
||||||
env:
|
cmd: ["locust"]
|
||||||
- name: SCALING
|
|
||||||
value: $.data.action.value
|
|
||||||
valueFrom: event
|
|
||||||
image: "alpine/k8s:1.20.15"
|
|
||||||
cmd: ["sh"]
|
|
||||||
# Note: Hardcoded kubernetes namespace & KEPTN_SERVICE does most likely not match the deployment name
|
|
||||||
args: ["-c", "REPLICAS=$(kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} get deployment/${KEPTN_SERVICE} -o go-template='{{.spec.replicas}}');DESIRED=$((${SCALING}+${REPLICAS}));echo Scaling deployment to ${DESIRED} && kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} scale --replicas=${DESIRED} deployment/${KEPTN_SERVICE}"]
|
|
||||||
|
|
||||||
- name: "Run tests using locust"
|
|
||||||
events:
|
|
||||||
- name: "sh.keptn.event.test.triggered"
|
|
||||||
tasks:
|
|
||||||
- name: "Run locust"
|
|
||||||
files:
|
|
||||||
- locust/basic.py
|
|
||||||
- locust/locust.conf
|
|
||||||
|
|
||||||
image: "locustio/locust:2.8.6"
|
|
||||||
cmd: ["locust"]
|
|
||||||
args: ["--config", "/keptn/locust/locust.conf", "-f", "/keptn/locust/basic.py", "--host", "http://$(KEPTN_SERVICE)-$(KEPTN_STAGE).nttdata-xlabs.com", "--only-summary"]
|
args: ["--config", "/keptn/locust/locust.conf", "-f", "/keptn/locust/basic.py", "--host", "http://$(KEPTN_SERVICE)-$(KEPTN_STAGE).nttdata-xlabs.com", "--only-summary"]
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,2 @@
|
||||||
|
servicename: carts
|
||||||
|
creationtimestamp: 2023-11-13 18:27:48.297161439 +0000 UTC
|
||||||
|
|
@ -1,85 +0,0 @@
|
||||||
---
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: carts
|
|
||||||
spec:
|
|
||||||
replicas: {{ .Values.replicaCount }}
|
|
||||||
strategy:
|
|
||||||
rollingUpdate:
|
|
||||||
maxUnavailable: 0
|
|
||||||
type: RollingUpdate
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: carts
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: carts
|
|
||||||
app.kubernetes.io/name: {{ .Values.keptn.service }}
|
|
||||||
app.kubernetes.io/instance: "{{ .Values.keptn.service }}-{{ .Values.keptn.deployment }}"
|
|
||||||
app.kubernetes.io/component: api
|
|
||||||
app.kubernetes.io/part-of: "{{ .Values.keptn.project }}"
|
|
||||||
app.kubernetes.io/managed-by: Keptn
|
|
||||||
app.kubernetes.io/version: {{ (split ":" .Values.image)._1 | default "latest" }}
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: carts
|
|
||||||
image: "{{ .Values.image }}"
|
|
||||||
imagePullPolicy: IfNotPresent
|
|
||||||
ports:
|
|
||||||
- name: http
|
|
||||||
protocol: TCP
|
|
||||||
containerPort: 8080
|
|
||||||
env:
|
|
||||||
- name: DT_CUSTOM_PROP
|
|
||||||
value: "version={{ .Chart.Version }} revision={{ .Release.Revision }} releasename={{ .Release.Name }} keptn_project={{ .Values.keptn.project }} keptn_service={{ .Values.keptn.service }} keptn_stage={{ .Values.keptn.stage }} keptn_deployment={{ .Values.keptn.deployment }}"
|
|
||||||
- name: POD_NAME
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
fieldPath: "metadata.name"
|
|
||||||
- name: DEPLOYMENT_NAME
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
fieldPath: "metadata.labels['deployment']"
|
|
||||||
- name: CONTAINER_IMAGE
|
|
||||||
value: "{{ .Values.image }}"
|
|
||||||
- name: KEPTN_PROJECT
|
|
||||||
value: "{{ .Chart.Name }}"
|
|
||||||
- name: KEPTN_STAGE
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
fieldPath: "metadata.namespace"
|
|
||||||
- name: KEPTN_SERVICE
|
|
||||||
value: "carts"
|
|
||||||
- name: UNLEASH_SERVER_URL
|
|
||||||
value: "http://unleash.unleash-dev/api"
|
|
||||||
livenessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /health
|
|
||||||
port: 8080
|
|
||||||
initialDelaySeconds: 60
|
|
||||||
periodSeconds: 10
|
|
||||||
timeoutSeconds: 15
|
|
||||||
readinessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /health
|
|
||||||
port: 8080
|
|
||||||
initialDelaySeconds: 60
|
|
||||||
periodSeconds: 10
|
|
||||||
timeoutSeconds: 15
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
cpu: 1000m
|
|
||||||
memory: 2048Mi
|
|
||||||
requests:
|
|
||||||
cpu: 500m
|
|
||||||
memory: 1024Mi
|
|
||||||
{% comment %} nodeSelector:
|
|
||||||
role: "group2"
|
|
||||||
tolerations:
|
|
||||||
- key: "dedicated"
|
|
||||||
operator: "Equal"
|
|
||||||
value: "group2"
|
|
||||||
effect: "NoSchedule" {% endcomment %}
|
|
||||||
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: Ingress
|
|
||||||
metadata:
|
|
||||||
name: carts
|
|
||||||
annotations:
|
|
||||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
||||||
spec:
|
|
||||||
ingressClassName: nginx
|
|
||||||
tls:
|
|
||||||
- hosts:
|
|
||||||
- "carts-{{ .Values.keptn.deployment }}.nttdata-xlabs.com"
|
|
||||||
secretName: letsencrypt-prod
|
|
||||||
rules:
|
|
||||||
- host: "carts-{{ .Values.keptn.deployment }}.nttdata-xlabs.com"
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- path: /
|
|
||||||
pathType: Prefix
|
|
||||||
backend:
|
|
||||||
service:
|
|
||||||
name: carts
|
|
||||||
port:
|
|
||||||
number: 80
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: carts
|
|
||||||
spec:
|
|
||||||
type: ClusterIP
|
|
||||||
ports:
|
|
||||||
- name: http
|
|
||||||
port: 80
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: 8080
|
|
||||||
selector:
|
|
||||||
app: carts
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
image: docker.io/keptnexamples/carts:0.13.1
|
|
||||||
replicaCount: 1
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
spec_version: '0.1.0'
|
|
||||||
dtCreds: dynatrace-service
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
---
|
|
||||||
spec_version: '1.0'
|
|
||||||
indicators:
|
|
||||||
throughput: "metricSelector=builtin:service.requestCount.total:merge(\"dt.entity.service\"):sum&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
|
|
||||||
error_rate: "metricSelector=builtin:service.errors.total.count:merge(\"dt.entity.service\"):avg&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
|
|
||||||
response_time_p50: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):percentile(50)&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
|
|
||||||
response_time_p90: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):percentile(90)&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
|
|
||||||
response_time_p95: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):percentile(95)&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
|
|
||||||
#rt_addToCart: "metricSelector=calc:service.itemscontroller.qg:filter(eq(url,addToCart)):merge(0):percentile(95)&entitySelector=tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE),type(SERVICE)"
|
|
||||||
pg_heap_suspension: "metricSelector=builtin:tech.jvm.memory.gc.suspensionTime:merge(\"dt.entity.process_group_instance\"):max&entitySelector=tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE),type(PROCESS_GROUP_INSTANCE)"
|
|
||||||
pg_cpu_usage: "metricSelector=builtin:tech.generic.cpu.usage:merge(\"dt.entity.process_group_instance\"):max&entitySelector=tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE),type(PROCESS_GROUP_INSTANCE)"
|
|
||||||
response_time_avg: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):avg&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
|
|
||||||
BIN
integration.JPG
BIN
integration.JPG
Binary file not shown.
|
Before Width: | Height: | Size: 124 KiB |
139
jenkinsfile
139
jenkinsfile
|
|
@ -1,139 +0,0 @@
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
label 'terraform-slave'
|
|
||||||
}
|
|
||||||
|
|
||||||
parameters {
|
|
||||||
choice(name: 'mode', choices: ['apply', 'destroy'], description: '')
|
|
||||||
choice(name: 'destroy_keptn', choices: ['no', 'yes'], description: '')
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
// stage('Refresh properties') {
|
|
||||||
// steps {
|
|
||||||
// script {
|
|
||||||
// if (Refresh) {
|
|
||||||
// currentBuild.result = 'ABORTED'
|
|
||||||
// error('Stopping early…')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
stage('deploy Keptn') {
|
|
||||||
steps {
|
|
||||||
container('terraform') {
|
|
||||||
script {
|
|
||||||
def b = build job: 'shared/keptn deployment' , wait: true, parameters: [string(name: 'mode', value: "apply")]
|
|
||||||
//build job: 'ANOTHER_JOB_NAME', wait: false, parameters: [string(name: 'HELLO', value: String.valueOf(PARAMETER01))]
|
|
||||||
env.keptn_api_token = b.getBuildVariables()["KEPTN_API_TOKEN"]
|
|
||||||
env.TF_VAR_KEPTN_API_TOKEN = b.getBuildVariables()["KEPTN_API_TOKEN"]
|
|
||||||
env.keptn_bridge_url = b.getBuildVariables()["KEPTN_BRIDGE_URL"]
|
|
||||||
env.TF_VAR_KEPTN_BRIDGE_URL = b.getBuildVariables()["KEPTN_BRIDGE_URL"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Download & Install Keptn CLI') {
|
|
||||||
steps {
|
|
||||||
container('terraform') {
|
|
||||||
sh "apk add --no-cache curl"
|
|
||||||
sh "apk add --no-cache bash"
|
|
||||||
sh "apk add --no-cache gawk"
|
|
||||||
sh 'wget https://github.com/keptn/keptn/releases/download/1.4.0/keptn-1.4.0-linux-amd64.tar.gz'
|
|
||||||
sh 'tar -xvf keptn-1.4.0-linux-amd64.tar.gz'
|
|
||||||
sh 'mv keptn-1.4.0-linux-amd64 /usr/local/bin/keptn'
|
|
||||||
// sh 'curl -sL https://get.keptn.sh/ | bash'
|
|
||||||
sh 'keptn set config AutomaticVersionCheck false'
|
|
||||||
sh 'keptn set config KubeContextCheck false'
|
|
||||||
sh 'keptn version'
|
|
||||||
sh "keptn auth --endpoint=${keptn_bridge_url}/api --api-token=${keptn_api_token}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// stage('terraform init') {
|
|
||||||
// steps {
|
|
||||||
// container('terraform') {
|
|
||||||
// dir("terraform") {
|
|
||||||
// withCredentials([[
|
|
||||||
// $class: 'AmazonWebServicesCredentialsBinding',
|
|
||||||
// credentialsId: "f89b3f7d-23ec-42b9-9687-e4acf01d7507",
|
|
||||||
// accessKeyVariable: 'AWS_ACCESS_KEY_ID',
|
|
||||||
// secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']]) {
|
|
||||||
// sh 'terraform init -backend-config="key=keptn-sockshop-demo"'
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
stage('Create Keptn Project') {
|
|
||||||
when {
|
|
||||||
expression {
|
|
||||||
return params.mode == 'apply'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
container('terraform') {
|
|
||||||
dir("terraform") {
|
|
||||||
withCredentials([[
|
|
||||||
$class: 'AmazonWebServicesCredentialsBinding',
|
|
||||||
credentialsId: "f89b3f7d-23ec-42b9-9687-e4acf01d7507",
|
|
||||||
accessKeyVariable: 'AWS_ACCESS_KEY_ID',
|
|
||||||
secretKeyVariable: 'AWS_SECRET_ACCESS_KEY'],
|
|
||||||
string(credentialsId: 'gitea_demo_api_token', variable: 'TF_VAR_GITEA_TOKEN')]) {
|
|
||||||
sh 'terraform init -backend-config="key=keptn-sockshop-demo"'
|
|
||||||
sh 'terraform apply --target kubernetes_namespace.carts-dev -auto-approve'
|
|
||||||
sh 'terraform apply --target kubernetes_namespace.carts-staging -auto-approve'
|
|
||||||
sh 'terraform apply --target kubernetes_namespace.carts-production -auto-approve'
|
|
||||||
sh 'terraform apply -auto-approve'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Destroy Keptn Project') {
|
|
||||||
when {
|
|
||||||
expression {
|
|
||||||
return params.mode == 'destroy'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
container('terraform') {
|
|
||||||
sh "keptn auth --endpoint=${keptn_bridge_url}/api --api-token=${keptn_api_token}"
|
|
||||||
dir("terraform") {
|
|
||||||
withCredentials([[
|
|
||||||
$class: 'AmazonWebServicesCredentialsBinding',
|
|
||||||
credentialsId: "f89b3f7d-23ec-42b9-9687-e4acf01d7507",
|
|
||||||
accessKeyVariable: 'AWS_ACCESS_KEY_ID',
|
|
||||||
secretKeyVariable: 'AWS_SECRET_ACCESS_KEY'],
|
|
||||||
string(credentialsId: 'gitea_demo_api_token', variable: 'TF_VAR_GITEA_TOKEN')]) {
|
|
||||||
sh 'terraform init -backend-config="key=keptn-sockshop-demo"'
|
|
||||||
sh 'terraform destroy --target null_resource.seed-unix-destroy -auto-approve'
|
|
||||||
sh 'terraform destroy --target gitea_repository.demo-repo -auto-approve'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//build job: 'shared/keptn deployment' , wait: true, parameters: [string(name: 'mode', value: "destroy")]
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Destroy Keptn ') {
|
|
||||||
when {
|
|
||||||
expression {
|
|
||||||
return params.mode == 'destroy' && params.destroy_keptn == 'yes'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
container('terraform') {
|
|
||||||
|
|
||||||
//build job: 'shared/keptn deployment' , wait: true, parameters: [string(name: 'mode', value: "destroy")]
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,177 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.1.1 r1855137">
|
|
||||||
<hashTree>
|
|
||||||
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Testing Sample NodeJs" enabled="true">
|
|
||||||
<stringProp name="TestPlan.comments"></stringProp>
|
|
||||||
<boolProp name="TestPlan.functional_mode">false</boolProp>
|
|
||||||
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
|
|
||||||
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
|
||||||
<collectionProp name="Arguments.arguments">
|
|
||||||
<elementProp name="SERVER_URL" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">SERVER_URL</stringProp>
|
|
||||||
<stringProp name="Argument.value">carts-dev.nttdata-xlabs.com</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="CHECK_PATH" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">CHECK_PATH</stringProp>
|
|
||||||
<stringProp name="Argument.value">/</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="DT_LTN" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">DT_LTN</stringProp>
|
|
||||||
<stringProp name="Argument.value">Default</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="DefaultThinkTime" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">DefaultThinkTime</stringProp>
|
|
||||||
<stringProp name="Argument.value">250</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="SERVER_PORT" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">SERVER_PORT</stringProp>
|
|
||||||
<stringProp name="Argument.value">443</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="PROTOCOL" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">PROTOCOL</stringProp>
|
|
||||||
<stringProp name="Argument.value">https</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="VUCount" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">VUCount</stringProp>
|
|
||||||
<stringProp name="Argument.value">1</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="LoopCount" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">LoopCount</stringProp>
|
|
||||||
<stringProp name="Argument.value">1</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
</collectionProp>
|
|
||||||
</elementProp>
|
|
||||||
<stringProp name="TestPlan.user_define_classpath"></stringProp>
|
|
||||||
</TestPlan>
|
|
||||||
<hashTree>
|
|
||||||
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="BasicThreadGroup" enabled="true">
|
|
||||||
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
|
|
||||||
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
|
|
||||||
<boolProp name="LoopController.continue_forever">false</boolProp>
|
|
||||||
<stringProp name="LoopController.loops">${__P(LoopCount,${VUCount})}</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<stringProp name="ThreadGroup.num_threads">${__P(VUCount,${VUCount})}</stringProp>
|
|
||||||
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
|
|
||||||
<longProp name="ThreadGroup.start_time">1444323045000</longProp>
|
|
||||||
<longProp name="ThreadGroup.end_time">1444323045000</longProp>
|
|
||||||
<boolProp name="ThreadGroup.scheduler">false</boolProp>
|
|
||||||
<stringProp name="ThreadGroup.duration"></stringProp>
|
|
||||||
<stringProp name="ThreadGroup.delay"></stringProp>
|
|
||||||
</ThreadGroup>
|
|
||||||
<hashTree>
|
|
||||||
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
|
|
||||||
<collectionProp name="CookieManager.cookies"/>
|
|
||||||
<boolProp name="CookieManager.clearEachIteration">false</boolProp>
|
|
||||||
</CookieManager>
|
|
||||||
<hashTree/>
|
|
||||||
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
||||||
<collectionProp name="HeaderManager.headers"/>
|
|
||||||
</HeaderManager>
|
|
||||||
<hashTree/>
|
|
||||||
<BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="Set Dynatrace Headers" enabled="true">
|
|
||||||
<boolProp name="resetInterpreter">true</boolProp>
|
|
||||||
<stringProp name="parameters"></stringProp>
|
|
||||||
<stringProp name="filename"></stringProp>
|
|
||||||
<stringProp name="script">import org.apache.jmeter.util.JMeterUtils;
|
|
||||||
import org.apache.jmeter.protocol.http.control.HeaderManager;
|
|
||||||
import java.io;
|
|
||||||
import java.util;
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------
|
|
||||||
// Generate the x-dynatrace-test header based on this best practic
|
|
||||||
// -> https://www.dynatrace.com/support/help/integrations/test-automation-frameworks/how-do-i-integrate-dynatrace-into-my-load-testing-process/
|
|
||||||
// -------------------------------------------------------------------------------------
|
|
||||||
String LTN=JMeterUtils.getProperty("DT_LTN");
|
|
||||||
if((LTN == null) || (LTN.length() == 0)) {
|
|
||||||
if(vars != null) {
|
|
||||||
LTN = vars.get("DT_LTN");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(LTN == null) LTN = "NoTestName";
|
|
||||||
|
|
||||||
String LSN = (bsh.args.length > 0) ? bsh.args[0] : "Test Scenario";
|
|
||||||
String TSN = sampler.getName();
|
|
||||||
String VU = ctx.getThreadGroup().getName() + ctx.getThreadNum();
|
|
||||||
String headerValue = "LSN="+ LSN + ";TSN=" + TSN + ";LTN=" + LTN + ";VU=" + VU + ";";
|
|
||||||
|
|
||||||
// -------------------------------------------
|
|
||||||
// Set header
|
|
||||||
// -------------------------------------------
|
|
||||||
HeaderManager hm = sampler.getHeaderManager();
|
|
||||||
hm.removeHeaderNamed("x-dynatrace-test");
|
|
||||||
hm.add(new org.apache.jmeter.protocol.http.control.Header("x-dynatrace-test", headerValue));</stringProp>
|
|
||||||
</BeanShellPreProcessor>
|
|
||||||
<hashTree/>
|
|
||||||
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Basic Check" enabled="true">
|
|
||||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
||||||
<collectionProp name="Arguments.arguments"/>
|
|
||||||
</elementProp>
|
|
||||||
<stringProp name="HTTPSampler.domain">${__P(SERVER_URL,${SERVER_URL})}</stringProp>
|
|
||||||
<stringProp name="HTTPSampler.port">${__P(SERVER_PORT,${SERVER_PORT})}</stringProp>
|
|
||||||
<stringProp name="HTTPSampler.protocol">${__P(PROTOCOL,${PROTOCOL})}</stringProp>
|
|
||||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
|
||||||
<stringProp name="HTTPSampler.path">${__P(CHECK_PATH,${CHECK_PATH})}</stringProp>
|
|
||||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
||||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
||||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
||||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
||||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
||||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
||||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
||||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
||||||
</HTTPSamplerProxy>
|
|
||||||
<hashTree>
|
|
||||||
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
||||||
<collectionProp name="HeaderManager.headers"/>
|
|
||||||
</HeaderManager>
|
|
||||||
<hashTree/>
|
|
||||||
</hashTree>
|
|
||||||
<ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Default Think Time" enabled="true">
|
|
||||||
<stringProp name="ConstantTimer.delay">{__P(ThinkTime,${DefaultThinkTime})}</stringProp>
|
|
||||||
</ConstantTimer>
|
|
||||||
<hashTree/>
|
|
||||||
</hashTree>
|
|
||||||
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true">
|
|
||||||
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
|
||||||
<objProp>
|
|
||||||
<name>saveConfig</name>
|
|
||||||
<value class="SampleSaveConfiguration">
|
|
||||||
<time>true</time>
|
|
||||||
<latency>true</latency>
|
|
||||||
<timestamp>true</timestamp>
|
|
||||||
<success>true</success>
|
|
||||||
<label>true</label>
|
|
||||||
<code>true</code>
|
|
||||||
<message>true</message>
|
|
||||||
<threadName>true</threadName>
|
|
||||||
<dataType>true</dataType>
|
|
||||||
<encoding>false</encoding>
|
|
||||||
<assertions>true</assertions>
|
|
||||||
<subresults>true</subresults>
|
|
||||||
<responseData>false</responseData>
|
|
||||||
<samplerData>false</samplerData>
|
|
||||||
<xml>false</xml>
|
|
||||||
<fieldNames>false</fieldNames>
|
|
||||||
<responseHeaders>false</responseHeaders>
|
|
||||||
<requestHeaders>false</requestHeaders>
|
|
||||||
<responseDataOnError>false</responseDataOnError>
|
|
||||||
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
|
|
||||||
<assertionsResultsToSave>0</assertionsResultsToSave>
|
|
||||||
<bytes>true</bytes>
|
|
||||||
<threadCounts>true</threadCounts>
|
|
||||||
</value>
|
|
||||||
</objProp>
|
|
||||||
<stringProp name="filename"></stringProp>
|
|
||||||
</ResultCollector>
|
|
||||||
<hashTree/>
|
|
||||||
</hashTree>
|
|
||||||
</hashTree>
|
|
||||||
</jmeterTestPlan>
|
|
||||||
193
jmeter/load.jmx
193
jmeter/load.jmx
|
|
@ -1,193 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.2.1">
|
|
||||||
<hashTree>
|
|
||||||
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
|
|
||||||
<stringProp name="TestPlan.comments"></stringProp>
|
|
||||||
<boolProp name="TestPlan.functional_mode">false</boolProp>
|
|
||||||
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
|
|
||||||
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
|
||||||
<collectionProp name="Arguments.arguments">
|
|
||||||
<elementProp name="SERVER_URL" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">SERVER_URL</stringProp>
|
|
||||||
<stringProp name="Argument.value">carts-staging.nttdata-xlabs.com</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="DefaultThinkTime" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">DefaultThinkTime</stringProp>
|
|
||||||
<stringProp name="Argument.value">250</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="DT_LTN" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">DT_LTN</stringProp>
|
|
||||||
<stringProp name="Argument.value">Default</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="SERVER_PORT" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">SERVER_PORT</stringProp>
|
|
||||||
<stringProp name="Argument.value">443</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="PROTOCOL" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">PROTOCOL</stringProp>
|
|
||||||
<stringProp name="Argument.value">https</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="VUCount" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">VUCount</stringProp>
|
|
||||||
<stringProp name="Argument.value">1</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="LoopCount" elementType="Argument">
|
|
||||||
<stringProp name="Argument.name">LoopCount</stringProp>
|
|
||||||
<stringProp name="Argument.value">1000</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
</collectionProp>
|
|
||||||
</elementProp>
|
|
||||||
<stringProp name="TestPlan.user_define_classpath"></stringProp>
|
|
||||||
</TestPlan>
|
|
||||||
<hashTree>
|
|
||||||
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
|
|
||||||
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
|
|
||||||
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
|
|
||||||
<boolProp name="LoopController.continue_forever">false</boolProp>
|
|
||||||
<stringProp name="LoopController.loops">${__P(LoopCount,${LoopCount})}</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<stringProp name="ThreadGroup.num_threads">${__P(VUCount,${VUCount})}</stringProp>
|
|
||||||
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
|
|
||||||
<longProp name="ThreadGroup.start_time">1536064517000</longProp>
|
|
||||||
<longProp name="ThreadGroup.end_time">1536064517000</longProp>
|
|
||||||
<boolProp name="ThreadGroup.scheduler">false</boolProp>
|
|
||||||
<stringProp name="ThreadGroup.duration"></stringProp>
|
|
||||||
<stringProp name="ThreadGroup.delay"></stringProp>
|
|
||||||
<boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
|
|
||||||
</ThreadGroup>
|
|
||||||
<hashTree>
|
|
||||||
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
|
|
||||||
<collectionProp name="CookieManager.cookies"/>
|
|
||||||
<boolProp name="CookieManager.clearEachIteration">false</boolProp>
|
|
||||||
<boolProp name="CookieManager.controlledByThreadGroup">false</boolProp>
|
|
||||||
</CookieManager>
|
|
||||||
<hashTree/>
|
|
||||||
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
||||||
<collectionProp name="HeaderManager.headers">
|
|
||||||
<elementProp name="" elementType="Header">
|
|
||||||
<stringProp name="Header.name">Cache-Control</stringProp>
|
|
||||||
<stringProp name="Header.value">no-cache</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="" elementType="Header">
|
|
||||||
<stringProp name="Header.name">Content-Type</stringProp>
|
|
||||||
<stringProp name="Header.value">application/json</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<elementProp name="" elementType="Header">
|
|
||||||
<stringProp name="Header.name">json</stringProp>
|
|
||||||
<stringProp name="Header.value">true</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
</collectionProp>
|
|
||||||
</HeaderManager>
|
|
||||||
<hashTree/>
|
|
||||||
<BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="Set Dynatrace Headers" enabled="true">
|
|
||||||
<stringProp name="filename"></stringProp>
|
|
||||||
<stringProp name="parameters"></stringProp>
|
|
||||||
<boolProp name="resetInterpreter">false</boolProp>
|
|
||||||
<stringProp name="script">import org.apache.jmeter.util.JMeterUtils;
|
|
||||||
import org.apache.jmeter.protocol.http.control.HeaderManager;
|
|
||||||
import java.io;
|
|
||||||
import java.util;
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------
|
|
||||||
// Generate the x-dynatrace-test header based on this best practic
|
|
||||||
// -> https://www.dynatrace.com/support/help/integrations/test-automation-frameworks/how-do-i-integrate-dynatrace-into-my-load-testing-process/
|
|
||||||
// -------------------------------------------------------------------------------------
|
|
||||||
String LTN=JMeterUtils.getProperty("DT_LTN");
|
|
||||||
if((LTN == null) || (LTN.length() == 0)) {
|
|
||||||
if(vars != null) {
|
|
||||||
LTN = vars.get("DT_LTN");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(LTN == null) LTN = "NoTestName";
|
|
||||||
|
|
||||||
String LSN = (bsh.args.length > 0) ? bsh.args[0] : "Test Scenario";
|
|
||||||
String TSN = sampler.getName();
|
|
||||||
String VU = ctx.getThreadGroup().getName() + ctx.getThreadNum();
|
|
||||||
String headerValue = "LSN="+ LSN + ";TSN=" + TSN + ";LTN=" + LTN + ";VU=" + VU + ";";
|
|
||||||
|
|
||||||
// -------------------------------------------
|
|
||||||
// Set header
|
|
||||||
// -------------------------------------------
|
|
||||||
HeaderManager hm = sampler.getHeaderManager();
|
|
||||||
hm.removeHeaderNamed("x-dynatrace-test");
|
|
||||||
hm.add(new org.apache.jmeter.protocol.http.control.Header("x-dynatrace-test", headerValue));</stringProp>
|
|
||||||
</BeanShellPreProcessor>
|
|
||||||
<hashTree/>
|
|
||||||
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Add Item to Cart" enabled="true">
|
|
||||||
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
|
|
||||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
|
|
||||||
<collectionProp name="Arguments.arguments">
|
|
||||||
<elementProp name="" elementType="HTTPArgument">
|
|
||||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
||||||
<stringProp name="Argument.value"> {
|
|
||||||
"itemId":"03fef6ac-1896-4ce8-bd69-b798f85c6e0b",
|
|
||||||
"unitPrice":"99.99"
|
|
||||||
}</stringProp>
|
|
||||||
<stringProp name="Argument.metadata">=</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
</collectionProp>
|
|
||||||
</elementProp>
|
|
||||||
<stringProp name="HTTPSampler.domain">${__P(SERVER_URL,${SERVER_URL})}</stringProp>
|
|
||||||
<stringProp name="HTTPSampler.port">${__P(SERVER_PORT,${SERVER_PORT})}</stringProp>
|
|
||||||
<stringProp name="HTTPSampler.protocol">${__P(PROTOCOL,${PROTOCOL})}</stringProp>
|
|
||||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
|
||||||
<stringProp name="HTTPSampler.path">/carts/1/items</stringProp>
|
|
||||||
<stringProp name="HTTPSampler.method">POST</stringProp>
|
|
||||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
||||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
||||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
||||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
||||||
<boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">true</boolProp>
|
|
||||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
||||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
||||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
||||||
</HTTPSamplerProxy>
|
|
||||||
<hashTree/>
|
|
||||||
<ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Default Think Time" enabled="true">
|
|
||||||
<stringProp name="ConstantTimer.delay">{__P(ThinkTime,${DefaultThinkTime})}</stringProp>
|
|
||||||
</ConstantTimer>
|
|
||||||
<hashTree/>
|
|
||||||
</hashTree>
|
|
||||||
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
|
|
||||||
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
|
||||||
<objProp>
|
|
||||||
<name>saveConfig</name>
|
|
||||||
<value class="SampleSaveConfiguration">
|
|
||||||
<time>true</time>
|
|
||||||
<latency>true</latency>
|
|
||||||
<timestamp>true</timestamp>
|
|
||||||
<success>true</success>
|
|
||||||
<label>true</label>
|
|
||||||
<code>true</code>
|
|
||||||
<message>true</message>
|
|
||||||
<threadName>true</threadName>
|
|
||||||
<dataType>true</dataType>
|
|
||||||
<encoding>false</encoding>
|
|
||||||
<assertions>true</assertions>
|
|
||||||
<subresults>true</subresults>
|
|
||||||
<responseData>false</responseData>
|
|
||||||
<samplerData>false</samplerData>
|
|
||||||
<xml>false</xml>
|
|
||||||
<fieldNames>false</fieldNames>
|
|
||||||
<responseHeaders>false</responseHeaders>
|
|
||||||
<requestHeaders>false</requestHeaders>
|
|
||||||
<responseDataOnError>false</responseDataOnError>
|
|
||||||
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
|
|
||||||
<assertionsResultsToSave>0</assertionsResultsToSave>
|
|
||||||
<bytes>true</bytes>
|
|
||||||
<threadCounts>true</threadCounts>
|
|
||||||
</value>
|
|
||||||
</objProp>
|
|
||||||
<stringProp name="filename"></stringProp>
|
|
||||||
</ResultCollector>
|
|
||||||
<hashTree/>
|
|
||||||
</hashTree>
|
|
||||||
</hashTree>
|
|
||||||
</jmeterTestPlan>
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
||||||
apiVersion: v2
|
|
||||||
actions:
|
|
||||||
- name: "Deploy using helm"
|
|
||||||
events:
|
|
||||||
- name: "sh.keptn.event.deployment.triggered"
|
|
||||||
tasks:
|
|
||||||
- name: "Run helm"
|
|
||||||
files:
|
|
||||||
- /charts
|
|
||||||
env:
|
|
||||||
- name: IMAGE
|
|
||||||
value: "$.data.configurationChange.values.image"
|
|
||||||
valueFrom: event
|
|
||||||
image: "alpine/helm:3.7.2"
|
|
||||||
serviceAccount: "jes-deploy-using-helm"
|
|
||||||
cmd: ["helm"]
|
|
||||||
args: ["upgrade", "--force", "--create-namespace", "--install", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "/keptn/charts/$(KEPTN_SERVICE).tgz", "--set", "image=$(IMAGE)", "--set", "keptn.service=$(KEPTN_SERVICE)", "--set", "keptn.deployment=$(KEPTN_STAGE)", "--set", "keptn.project=$(KEPTN_PROJECT)","--set", "keptn.stage=$(KEPTN_STAGE)", "--wait"]
|
|
||||||
- name: "Uninstall"
|
|
||||||
events:
|
|
||||||
- name: "sh.keptn.event.uninstall.triggered"
|
|
||||||
tasks:
|
|
||||||
- name: "Run helm uninstall"
|
|
||||||
serviceAccount: "jes-deploy-using-helm"
|
|
||||||
image: "alpine/helm:3.7.2"
|
|
||||||
cmd: ["helm"]
|
|
||||||
args: ["uninstall", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "--wait"]
|
|
||||||
|
|
||||||
# - name: "Rollback using helm"
|
|
||||||
# events:
|
|
||||||
# - name: "sh.keptn.event.rollback.triggered"
|
|
||||||
# tasks:
|
|
||||||
# - name: "Run helm"
|
|
||||||
# serviceAccount: "jes-deploy-using-helm"
|
|
||||||
# image: "alpine/helm:3.7.2"
|
|
||||||
# cmd: ["helm"]
|
|
||||||
# args: ["rollback", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "--wait"]
|
|
||||||
|
|
||||||
# - name: "Scale using kubectl"
|
|
||||||
# events:
|
|
||||||
# - name: "sh.keptn.event.action.triggered"
|
|
||||||
# jsonpath:
|
|
||||||
# property: "$.data.action.action"
|
|
||||||
# match: "scaling"
|
|
||||||
# tasks:
|
|
||||||
# - name: "Run kubectl"
|
|
||||||
# serviceAccount: "jes-deploy-using-helm"
|
|
||||||
# env:
|
|
||||||
# - name: SCALING
|
|
||||||
# value: $.data.action.value
|
|
||||||
# valueFrom: event
|
|
||||||
# image: "alpine/k8s:1.20.15"
|
|
||||||
# cmd: ["sh"]
|
|
||||||
# # Note: Hardcoded kubernetes namespace & KEPTN_SERVICE does most likely not match the deployment name
|
|
||||||
# args: ["-c", "REPLICAS=$(kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} get deployment/${KEPTN_SERVICE} -o go-template='{{.spec.replicas}}');DESIRED=$((${SCALING}+${REPLICAS}));echo Scaling deployment to ${DESIRED} && kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} scale --replicas=${DESIRED} deployment/${KEPTN_SERVICE}"]
|
|
||||||
|
|
||||||
# - name: "Run tests using locust"
|
|
||||||
# events:
|
|
||||||
# - name: "sh.keptn.event.test.triggered"
|
|
||||||
# tasks:
|
|
||||||
# - name: "Run locust"
|
|
||||||
# files:
|
|
||||||
# - locust/basic.py
|
|
||||||
# - locust/locust.conf
|
|
||||||
# image: "locustio/locust:2.8.6"
|
|
||||||
# cmd: ["locust"]
|
|
||||||
# args: ["--config", "/keptn/locust/locust.conf", "-f", "/keptn/locust/basic.py", "--host", "http://$(KEPTN_SERVICE)-$(KEPTN_STAGE).nttdata-xlabs.com", "--only-summary"]
|
|
||||||
Binary file not shown.
|
|
@ -1,8 +0,0 @@
|
||||||
from locust import HttpUser, between, task
|
|
||||||
|
|
||||||
class WebsiteUser(HttpUser):
|
|
||||||
#wait_time = between(5, 15)
|
|
||||||
|
|
||||||
@task
|
|
||||||
def index(self):
|
|
||||||
self.client.post("/carts/1/items", json= {"itemId":"03fef6ac-1896-4ce8-bd69-b798f85c6e0b","unitPrice":"99.99"}, headers={"x-dynatrace-test": "LSN=Test;"})
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
locustfile = /locust/locust.py
|
|
||||||
headless = true
|
|
||||||
users = 5
|
|
||||||
run-time = 1m
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
from locust import HttpUser, between, task
|
|
||||||
|
|
||||||
class WebsiteUser(HttpUser):
|
|
||||||
#wait_time = between(5, 15)
|
|
||||||
|
|
||||||
@task
|
|
||||||
def index(self):
|
|
||||||
self.client.post("/carts/1/items", json= {"itemId":"03fef6ac-1896-4ce8-bd69-b798f85c6e0b","unitPrice":"99.99"}, headers={"x-dynatrace-test": "LSN=Test;"})
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
locustfile = /locust/locust.py
|
|
||||||
headless = true
|
|
||||||
users = 5
|
|
||||||
run-time = 1m
|
|
||||||
exit-code-on-error=0
|
|
||||||
27
readme
27
readme
|
|
@ -1,27 +0,0 @@
|
||||||
dynatrace-service must be deployed (credentials must be created)
|
|
||||||
jobexecuter service must be deployed
|
|
||||||
|
|
||||||
project erzeugen mit cli
|
|
||||||
dynatrace config mit cli durchführen
|
|
||||||
|
|
||||||
keptn add-resource --project=sockshop --service=carts --all-stages --resource=carts.tgz --resourceUri=charts/carts.tgz
|
|
||||||
keptn add-resource --project=sockshop --service=carts --all-stages --resource=./job-executer/job.yaml --resourceUri=job/config.yaml
|
|
||||||
|
|
||||||
keptn add-resource --project=sockshop --service=carts --stage=staging --resource=./locust/basic.py
|
|
||||||
keptn add-resource --project=sockshop --service=carts --stage=staging --resource=./locust/locust.conf
|
|
||||||
|
|
||||||
|
|
||||||
keptn add-resource --project=sockshop --stage=staging --service=carts --resource=slo.yaml --resourceUri=slo.yaml
|
|
||||||
keptn add-resource --project=sockshop --resource=dynatrace/sli.yaml --resourceUri=dynatrace/sli.yaml
|
|
||||||
|
|
||||||
|
|
||||||
keptn trigger delivery --project=sockshop --service=carts --image="docker.io/keptnexamples/carts:0.13.1" --labels=image="keptnexamples/carts:0.13.1",version="0.13.1"
|
|
||||||
keptn trigger delivery --project=sockshop --service=carts-db --image="mongo:4.2.2" --labels=image="keptnexamples/carts-db:4.2.2",version="4.2.2"
|
|
||||||
|
|
||||||
|
|
||||||
keptn trigger delivery --project=sockshop --service=carts --image="docker.io/keptnexamples/carts:0.13.1" --labels=image="keptnexamples/carts:0.13.1",version="0.13.1" --stage=staging
|
|
||||||
keptn trigger delivery --project=sockshop --service=carts --image="docker.io/keptnexamples/carts:0.13.2" --labels=image="keptnexamples/carts:0.13.2",version="0.13.2" --stage=staging
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
keptn trigger delivery --project=carts --service=carts-db --image="mongo:4.2.2" --labels=image="keptnexamples/carts-db:4.2.2",version="4.2.2" --sequence=delivery-direct
|
|
||||||
114
shipyard.yaml
114
shipyard.yaml
|
|
@ -1,114 +0,0 @@
|
||||||
apiVersion: "spec.keptn.sh/0.2.0"
|
|
||||||
kind: "Shipyard"
|
|
||||||
metadata:
|
|
||||||
name: "shipyard-sockshop"
|
|
||||||
spec:
|
|
||||||
stages:
|
|
||||||
- name: "dev"
|
|
||||||
sequences:
|
|
||||||
- name: "delivery"
|
|
||||||
tasks:
|
|
||||||
- name: "deployment"
|
|
||||||
properties:
|
|
||||||
deploymentstrategy: "direct"
|
|
||||||
# - name: "test"
|
|
||||||
# properties:
|
|
||||||
# teststrategy: "functional"
|
|
||||||
# - name: "evaluation"
|
|
||||||
|
|
||||||
- name: "delivery-direct"
|
|
||||||
tasks:
|
|
||||||
- name: "deployment"
|
|
||||||
properties:
|
|
||||||
deploymentstrategy: "direct"
|
|
||||||
#- name: "release"
|
|
||||||
# - name: "rollback"
|
|
||||||
# tasks:
|
|
||||||
# - name: "rollback"
|
|
||||||
# - name: "only-test"
|
|
||||||
# tasks:
|
|
||||||
# - name: "test"
|
|
||||||
# properties:
|
|
||||||
# teststrategy: "functional"
|
|
||||||
- name: "remove"
|
|
||||||
tasks:
|
|
||||||
- name: "uninstall"
|
|
||||||
- name: "staging"
|
|
||||||
sequences:
|
|
||||||
- name: "delivery"
|
|
||||||
triggeredOn:
|
|
||||||
- event: "dev.delivery.finished"
|
|
||||||
tasks:
|
|
||||||
- name: "deployment"
|
|
||||||
properties:
|
|
||||||
deploymentstrategy: "blue_green_service"
|
|
||||||
- name: "test"
|
|
||||||
properties:
|
|
||||||
teststrategy: "performance"
|
|
||||||
# - name: "evaluation"
|
|
||||||
#- name: "release"
|
|
||||||
- name: "rollback"
|
|
||||||
triggeredOn:
|
|
||||||
- event: "staging.delivery.finished"
|
|
||||||
selector:
|
|
||||||
match:
|
|
||||||
result: "fail"
|
|
||||||
tasks:
|
|
||||||
- name: "rollback"
|
|
||||||
- name: "delivery-direct"
|
|
||||||
triggeredOn:
|
|
||||||
- event: "dev.delivery-direct.finished"
|
|
||||||
tasks:
|
|
||||||
- name: "deployment"
|
|
||||||
properties:
|
|
||||||
deploymentstrategy: "direct"
|
|
||||||
#- name: "release"
|
|
||||||
- name: "remove"
|
|
||||||
triggeredOn:
|
|
||||||
- event: "dev.remove.finished"
|
|
||||||
tasks:
|
|
||||||
- name: "uninstall"
|
|
||||||
- name: "production"
|
|
||||||
sequences:
|
|
||||||
- name: "delivery"
|
|
||||||
triggeredOn:
|
|
||||||
- event: "staging.delivery.finished"
|
|
||||||
tasks:
|
|
||||||
- name: "deployment"
|
|
||||||
properties:
|
|
||||||
deploymentstrategy: "blue_green_service"
|
|
||||||
#- name: "release"
|
|
||||||
- name: "rollback"
|
|
||||||
triggeredOn:
|
|
||||||
- event: "production.delivery.finished"
|
|
||||||
selector:
|
|
||||||
match:
|
|
||||||
result: "fail"
|
|
||||||
tasks:
|
|
||||||
- name: "rollback"
|
|
||||||
- name: "delivery-direct"
|
|
||||||
triggeredOn:
|
|
||||||
- event: "staging.delivery-direct.finished"
|
|
||||||
tasks:
|
|
||||||
- name: "deployment"
|
|
||||||
properties:
|
|
||||||
deploymentstrategy: "direct"
|
|
||||||
#- name: "release"
|
|
||||||
- name: "remove"
|
|
||||||
triggeredOn:
|
|
||||||
- event: "staging.remove.finished"
|
|
||||||
tasks:
|
|
||||||
- name: "uninstall"
|
|
||||||
- name: "remediation"
|
|
||||||
triggeredOn:
|
|
||||||
- event: "production.remediation.finished"
|
|
||||||
selector:
|
|
||||||
match:
|
|
||||||
evaluation.result: "fail"
|
|
||||||
tasks:
|
|
||||||
- name: "get-action"
|
|
||||||
- name: "action"
|
|
||||||
- name: "evaluation"
|
|
||||||
triggeredAfter: "15m"
|
|
||||||
properties:
|
|
||||||
timeframe: "15m"
|
|
||||||
42
slo.yaml
42
slo.yaml
|
|
@ -1,42 +0,0 @@
|
||||||
---
|
|
||||||
spec_version: "0.1.1"
|
|
||||||
comparison:
|
|
||||||
aggregate_function: "avg"
|
|
||||||
compare_with: "single_result"
|
|
||||||
include_result_with_score: "pass"
|
|
||||||
number_of_comparison_results: 1
|
|
||||||
filter:
|
|
||||||
objectives:
|
|
||||||
- sli: "response_time_p95"
|
|
||||||
key_sli: false
|
|
||||||
pass: # pass if (relative change <= 10% AND absolute value is < 600ms)
|
|
||||||
- criteria:
|
|
||||||
- "<=+25%" # relative values require a prefixed sign (plus or minus)
|
|
||||||
- "<600000" # absolute values only require a logical operator
|
|
||||||
warning: # if the response time is below 800ms, the result should be a warning
|
|
||||||
- criteria:
|
|
||||||
- "<=800000"
|
|
||||||
weight: 1
|
|
||||||
# - sli: "rt_addToCart" # looking at a particular transaction
|
|
||||||
# weight: 3 # business critical transaction
|
|
||||||
# pass:
|
|
||||||
# - criteria:
|
|
||||||
# - "<=+20%" # Degradation-driven
|
|
||||||
# - "<300000" # NFR-driven
|
|
||||||
# warning:
|
|
||||||
# - criteria:
|
|
||||||
# - "<=+50%"
|
|
||||||
# - "<=500000"
|
|
||||||
- sli: "error_rate"
|
|
||||||
pass:
|
|
||||||
- criteria:
|
|
||||||
- "<=+50%"
|
|
||||||
- "<5"
|
|
||||||
warning:
|
|
||||||
- criteria:
|
|
||||||
- "<10"
|
|
||||||
- sli: "pg_heap_suspension"
|
|
||||||
- sli: "pg_cpu_usage"
|
|
||||||
total_score:
|
|
||||||
pass: "90%"
|
|
||||||
warning: "70%"
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
apiVersion: storage.k8s.io/v1
|
|
||||||
kind: StorageClass
|
|
||||||
metadata:
|
|
||||||
name: region1storageclass
|
|
||||||
provisioner: kubernetes.io/aws-ebs
|
|
||||||
parameters:
|
|
||||||
type: gp2
|
|
||||||
fsType: ext4 # Set to "true" if encryption is required
|
|
||||||
zone: us-west-2b
|
|
||||||
volumeBindingMode: WaitForFirstConsumer
|
|
||||||
# allowedTopologies:
|
|
||||||
# - matchLabelExpressions:
|
|
||||||
# - key: failure-domain.beta.kubernetes.io/zone
|
|
||||||
# values:
|
|
||||||
# - us-west-2c
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
||||||
# This file is maintained automatically by "terraform init".
|
|
||||||
# Manual edits may be lost in future updates.
|
|
||||||
|
|
||||||
provider "registry.terraform.io/lerentis/gitea" {
|
|
||||||
version = "0.16.0"
|
|
||||||
constraints = "0.16.0"
|
|
||||||
hashes = [
|
|
||||||
"h1:AAczXkCnaTGYRoMRp+A9y/S4YXbsmTWgRiEJj16Rik8=",
|
|
||||||
"zh:195b3288b1f8d9fffc3083a42d4e1a7c5b73399c47049a9d00674e4cd6e4d17e",
|
|
||||||
"zh:1c7f1213d45df525aae9963567fc77ed099c68ad7418b98cf317c4f8b3b2113c",
|
|
||||||
"zh:309ed896eec2854c61cbab131e8445da2ff599309ba804b8850a4b29a32a47e8",
|
|
||||||
"zh:34ec1a7f985f2a78dae58e040941b37d19827fc98941d6071c10f64c64c19de0",
|
|
||||||
"zh:45092d54ed8cdc53984e8638eb0db4512ab2be6f259c9ee5f6597607fae1440b",
|
|
||||||
"zh:4a82f10f958c112a5fc58e023f26d610a42dfb0bdddd849b6c06ef601d2e1e5f",
|
|
||||||
"zh:4ff3d423c1758d627e9c6a1c10209472670938c87ae8a0b9f0c3389dad75f944",
|
|
||||||
"zh:544e9ff610fadcfde7467871e519d88b5729fbf9d262751ba9f91e357e6ffa8b",
|
|
||||||
"zh:5cb4a4f6c6475c50e0bbc222501f0239e9a883036a34e4627783c6a5aa1fe7e0",
|
|
||||||
"zh:5d1e97243727b6e6ec6ca16069d9375cf02a4f266a293b1160220ee10ad84878",
|
|
||||||
"zh:615c36b8b0411068f8879c727639ea16666aa8767d0aee9014b408d17ef6d64d",
|
|
||||||
"zh:640d95dd0aae76a2a11bd5a083908d0349c28707f7643e09c0be75d5583f7068",
|
|
||||||
"zh:717d7c93f0b98d4447824a3b3a1da96250b1e1b85b4aec062c36243d07a6401d",
|
|
||||||
"zh:7398a21b8bbb30896a43b738de6a5c71067a58e7b932b497c70553bc46eb92bf",
|
|
||||||
"zh:76858d67e783a6a8c6dc143ee7ed6a3a501806fe93700fb0541b6223d4b51907",
|
|
||||||
"zh:77a978ecbe9c57c0a2548d159953e4c7faa7d5a365a76493c8d82199233eb58c",
|
|
||||||
"zh:791531ef14467b96cc65aef44ad0f93e0cfeefbd82b6e7229ff70fb0a3eda04d",
|
|
||||||
"zh:946e42bc059bc887674a2ffc42c21fe00fbab078321d378b1c437cc3dd9460e9",
|
|
||||||
"zh:988aeffc00f2baeace26c7d57dc73f73464bb228ceeb3eb0bb9b526b864be6bd",
|
|
||||||
"zh:c71c8c628f2344be5433116ef9ff76a2402cc388acd4e23c7d434a8251925f63",
|
|
||||||
"zh:db975a80d2fa0b389e9ea5852c6804e3ef6ee17332e8bd5c233d03d8456dfcc4",
|
|
||||||
"zh:ea04c117c126fc755c86e2616c2c055801002e14c34842b7b3ba607d95c7d1e0",
|
|
||||||
"zh:ec9a0669f4ed744823dc1721b9cd53460936e8f772e1aa726e9380686320b9dc",
|
|
||||||
"zh:ef7339a987c362fd855f5796c8dc1ada55dafb083b2a10538a4de11c0fe12569",
|
|
||||||
"zh:f0ec89e0c4f2f4b5b6c9880186a306d191801195a28593bc6e223da8b8dd76e7",
|
|
||||||
"zh:f1382abc5fa8140d4af81b5634581bedd108b5862ce74e994ff9ed5a6fecf8d3",
|
|
||||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
|
||||||
"zh:f772a40fb23b2fa885d73ff62ef0a2e1742f536d3d889054bb7b20e5e9d17309",
|
|
||||||
"zh:fffdfbc809ace7bd2a7618b674893ac0f87c51aa27167b6223c884313450ea53",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
provider "registry.terraform.io/magodo/restful" {
|
|
||||||
version = "0.17.0"
|
|
||||||
hashes = [
|
|
||||||
"h1:u+Zq+FUlHpmsxNbeYnRIwGt8coU7B5iemzxmZCP9G00=",
|
|
||||||
"zh:137965c194987d45f3a6bb1b3b81952f0e614e32014644dee74949ffefee1651",
|
|
||||||
"zh:1da3d0ca1cdd39fbc2808286a68a307a70bbaaa95ba080c29eef1b21c0cd1648",
|
|
||||||
"zh:1e5c704ba584d756031e4d35be41bd445b942ab72d3737a3594abe6a89ce09ef",
|
|
||||||
"zh:35527164ca7080dba08bc42c943e148a442f5d7b598293cd0830c75c953d3ea8",
|
|
||||||
"zh:3ecce6264d45b4919ecef7ca118109917ac40e9b7226ea3867d11832084fe3ca",
|
|
||||||
"zh:437013a757e4a6ca30f68e23baadcc7fb4e4cd5150eebb506a4521c6f12cc8b2",
|
|
||||||
"zh:49d5e4f69a7f4f86e80ee633ee5c9a81432a33b42cc8b09f09dd217cbe5b23c3",
|
|
||||||
"zh:5018db0d71ca4e9e00839b2e40f042da310fd5586c737ee2051b16cf66ecb261",
|
|
||||||
"zh:68f1683e17cfab300566816de34c6f3c46db1519e4bf1e3f6d4b27ad28b60c93",
|
|
||||||
"zh:72570943de264ec0e533b5dddd282ecd23c8fab13748239b7068dc98c0de3699",
|
|
||||||
"zh:86061d47fe64c257b5c562758c632d8fd7774b06ff8b837c4ccb963f5b569136",
|
|
||||||
"zh:bff242d978a9f4591d130e1744eb6bf8d819df8ce6a0af95ce0129d998f22607",
|
|
||||||
"zh:c575cf5af509211289280656c424b40c0c8fca8b981495cd43abe4811d033dcd",
|
|
||||||
"zh:c5f89aee0419d2565ce8b167e8ee5efff3bacce8c76a20da97304d85a4cc20a3",
|
|
||||||
"zh:f809ab383cca0a5f83072981c64208cbd7fa67e986a86ee02dd2c82333221e32",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
@echo off
|
|
||||||
keptn trigger delivery --project=carts --service=carts-db --image="" --sequence=remove
|
|
||||||
keptn trigger delivery --project=carts --service=carts --image="" --sequence=remove
|
|
||||||
|
|
||||||
keptn delete project carts
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
keptn trigger delivery --project=carts --service=carts-db --image="" --sequence=remove
|
|
||||||
exit_code=$?
|
|
||||||
|
|
||||||
if [ $exit_code -ne 0 ]; then
|
|
||||||
echo "An error occurred."
|
|
||||||
fi
|
|
||||||
|
|
||||||
keptn trigger delivery --project=carts --service=carts --image="" --sequence=remove
|
|
||||||
exit_code=$?
|
|
||||||
if [ $exit_code -ne 0 ]; then
|
|
||||||
echo "An error occurred."
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep 90
|
|
||||||
keptn delete project carts
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
@echo off
|
|
||||||
set GIT_REPO=%1
|
|
||||||
set GIT_USER=%2
|
|
||||||
set GIT_TOKEN=%3
|
|
||||||
keptn create project carts --shipyard ..\shipyard.yaml --git-remote-url %GIT_REPO% --git-user %GIT_USER% --git-token %GIT_TOKEN%
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
GIT_REPO=$1
|
|
||||||
GIT_USER=$2
|
|
||||||
GIT_TOKEN=$3
|
|
||||||
#wget https://github.com/keptn/keptn/releases/download/1.4.0/keptn-1.4.0-linux-amd64.tar.gz
|
|
||||||
#tar -xvf keptn-1.4.0-linux-amd64.tar.gz
|
|
||||||
pwd
|
|
||||||
ls -la
|
|
||||||
keptn create project carts --shipyard ../shipyard.yaml --git-remote-url $GIT_REPO --git-user $GIT_USER --git-token $GIT_TOKEN
|
|
||||||
keptn create service carts --project=carts
|
|
||||||
keptn create service carts-db --project=carts
|
|
||||||
keptn add-resource --project=carts --service=carts --all-stages --resource=../carts.tgz --resourceUri=charts/carts.tgz
|
|
||||||
keptn add-resource --project=carts --service=carts-db --all-stages --resource=../carts-db.tgz --resourceUri=charts/carts-db.tgz
|
|
||||||
|
|
||||||
keptn add-resource --project=carts --service=carts --all-stages --resource=../job-executer/job-cart.yaml --resourceUri=job/config.yaml
|
|
||||||
keptn add-resource --project=carts --service=carts-db --all-stages --resource=../job-executer/job-cart-db.yaml --resourceUri=job/config.yaml
|
|
||||||
|
|
||||||
keptn add-resource --project=carts --service=carts --all-stages --resource=../locust/basic.py --resourceUri=locust/basic.py
|
|
||||||
keptn add-resource --project=carts --service=carts --all-stages --resource=../locust/locust.conf --resourceUri=locust/locust.conf
|
|
||||||
|
|
||||||
|
|
||||||
#Execute deployment
|
|
||||||
keptn trigger delivery --project=carts --service=carts-db --image="mongo:4.2.2" --labels=image="keptnexamples/carts-db:4.2.2",version="4.2.2" --sequence=delivery-direct
|
|
||||||
keptn trigger delivery --project=carts --service=carts --image="docker.io/keptnexamples/carts:0.13.1" --labels=image="keptnexamples/carts:0.13.1",version="0.13.1"
|
|
||||||
|
|
@ -1,186 +0,0 @@
|
||||||
locals {
|
|
||||||
is_linux = length(regexall("/home/", lower(abspath(path.root)))) > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "gitea_repository" "demo-repo" {
|
|
||||||
username = var.GITEA_USER
|
|
||||||
name = "sockshop-demo-test"
|
|
||||||
private = false
|
|
||||||
issue_labels = "Default"
|
|
||||||
license = "MIT"
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "null_resource" "seed-win-apply" {
|
|
||||||
count = local.is_linux ? 0 : 1
|
|
||||||
# program = ["cmd","/c","${abspath(path.module)}/bin/keptn-seed-project.bat",gitea_repository.demo-repo.clone_url, var.GITEA_USER, var.GITEA_TOKEN]
|
|
||||||
triggers = {
|
|
||||||
mode = "apply"
|
|
||||||
repo = gitea_repository.demo-repo.clone_url
|
|
||||||
user = var.GITEA_USER
|
|
||||||
token = var.GITEA_TOKEN
|
|
||||||
}
|
|
||||||
provisioner "local-exec" {
|
|
||||||
when = create
|
|
||||||
#interpreter = ["Powershell", "-Command"]
|
|
||||||
# environment = {
|
|
||||||
# mode = "apply"
|
|
||||||
# repo = gitea_repository.demo-repo.clone_url
|
|
||||||
# user = var.GITEA_USER
|
|
||||||
# token = var.GITEA_TOKEN
|
|
||||||
# }
|
|
||||||
command = "cmd /c ${abspath(path.module)}/bin/keptn-seed-project.bat ${self.triggers.repo} ${self.triggers.user} ${self.triggers.token}"
|
|
||||||
#interpreter = ["cmd","/c","${abspath(path.module)}/bin/keptn-seed-project.bat",, var.GITEA_USER, var.GITEA_TOKEN]
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "null_resource" "seed-unix-apply" {
|
|
||||||
count = local.is_linux ? 1 : 0
|
|
||||||
# program = ["cmd","/c","${abspath(path.module)}/bin/keptn-seed-project.bat",gitea_repository.demo-repo.clone_url, var.GITEA_USER, var.GITEA_TOKEN]
|
|
||||||
triggers = {
|
|
||||||
mode = "apply"
|
|
||||||
repo = gitea_repository.demo-repo.clone_url
|
|
||||||
user = var.GITEA_USER
|
|
||||||
token = var.GITEA_TOKEN
|
|
||||||
}
|
|
||||||
provisioner "local-exec" {
|
|
||||||
when = create
|
|
||||||
#interpreter = ["Powershell", "-Command"]
|
|
||||||
# environment = {
|
|
||||||
# mode = "apply"
|
|
||||||
# repo = gitea_repository.demo-repo.clone_url
|
|
||||||
# user = var.GITEA_USER
|
|
||||||
# token = var.GITEA_TOKEN
|
|
||||||
# }
|
|
||||||
command = "/bin/bash ${abspath(path.module)}/bin/keptn-seed-project.sh ${self.triggers.repo} ${self.triggers.user} ${self.triggers.token}"
|
|
||||||
#interpreter = ["cmd","/c","${abspath(path.module)}/bin/keptn-seed-project.bat",, var.GITEA_USER, var.GITEA_TOKEN]
|
|
||||||
}
|
|
||||||
|
|
||||||
depends_on = [kubernetes_namespace.carts-dev, kubernetes_namespace.carts-staging, kubernetes_namespace.carts-prod]
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
resource "null_resource" "seed-win-destroy" {
|
|
||||||
count = local.is_linux ? 0 : 1
|
|
||||||
# program = ["cmd","/c","${abspath(path.module)}/bin/keptn-seed-project.bat",gitea_repository.demo-repo.clone_url, var.GITEA_USER, var.GITEA_TOKEN]
|
|
||||||
|
|
||||||
triggers = {
|
|
||||||
mode = "destroy"
|
|
||||||
repo = gitea_repository.demo-repo.clone_url
|
|
||||||
user = var.GITEA_USER
|
|
||||||
token = var.GITEA_TOKEN
|
|
||||||
}
|
|
||||||
|
|
||||||
provisioner "local-exec" {
|
|
||||||
when = destroy
|
|
||||||
#interpreter = ["Powershell", "-Command"]
|
|
||||||
# environment = {
|
|
||||||
# mode = "destroy"
|
|
||||||
# repo = gitea_repository.demo-repo.clone_url
|
|
||||||
# user = var.GITEA_USER
|
|
||||||
# token = var.GITEA_TOKEN
|
|
||||||
# }
|
|
||||||
command = "cmd /c ${abspath(path.module)}/bin/keptn-destroy-project.bat"
|
|
||||||
#interpreter = ["cmd","/c","${abspath(path.module)}/bin/keptn-seed-project.bat",, var.GITEA_USER, var.GITEA_TOKEN]
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "null_resource" "seed-unix-destroy" {
|
|
||||||
count = local.is_linux ? 1 : 0
|
|
||||||
# program = ["cmd","/c","${abspath(path.module)}/bin/keptn-seed-project.bat",gitea_repository.demo-repo.clone_url, var.GITEA_USER, var.GITEA_TOKEN]
|
|
||||||
|
|
||||||
triggers = {
|
|
||||||
mode = "destroy"
|
|
||||||
repo = gitea_repository.demo-repo.clone_url
|
|
||||||
user = var.GITEA_USER
|
|
||||||
token = var.GITEA_TOKEN
|
|
||||||
}
|
|
||||||
|
|
||||||
provisioner "local-exec" {
|
|
||||||
when = destroy
|
|
||||||
#interpreter = ["Powershell", "-Command"]
|
|
||||||
# environment = {
|
|
||||||
# mode = "destroy"
|
|
||||||
# repo = gitea_repository.demo-repo.clone_url
|
|
||||||
# user = var.GITEA_USER
|
|
||||||
# token = var.GITEA_TOKEN
|
|
||||||
# }
|
|
||||||
command = "/bin/bash ${abspath(path.module)}/bin/keptn-destroy-project.sh"
|
|
||||||
#interpreter = ["cmd","/c","${abspath(path.module)}/bin/keptn-seed-project.bat",, var.GITEA_USER, var.GITEA_TOKEN]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
data "restful_resource" "ExecutorId" {
|
|
||||||
id = "/api/controlPlane/v1/uniform/registration"
|
|
||||||
method = "GET"
|
|
||||||
query = {
|
|
||||||
name=["job-executor-service"]
|
|
||||||
}
|
|
||||||
#selector = "0.id" data.restful_resource.ExecutorId.output[0].id
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
resource "restful_operation" "add_subscription" {
|
|
||||||
path = "/api/controlPlane/v1/uniform/registration/${data.restful_resource.ExecutorId.output[0].id}/subscription"
|
|
||||||
#delete_path = "/api/controlPlane/v1/uniform/registration/${data.restful_resource.ExecutorId.output[0].id}/subscription/${data.restful_resource.Subscriptions.output[0].id}"
|
|
||||||
method = "POST"
|
|
||||||
#delete_method = "DELETE"
|
|
||||||
|
|
||||||
#precheck_delete = local.subid_precheck
|
|
||||||
body = {
|
|
||||||
|
|
||||||
"event": "sh.keptn.event.uninstall.triggered",
|
|
||||||
"filter": {
|
|
||||||
"projects": ["carts"],
|
|
||||||
"stages": null,
|
|
||||||
"services": ["carts","carts-db"]
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
depends_on = [ null_resource.seed-unix-apply ]
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
resource "kubernetes_namespace" "carts-dev" {
|
|
||||||
metadata {
|
|
||||||
name = "carts-dev"
|
|
||||||
labels = {"monitor":"dynatrace"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "kubernetes_namespace" "carts-staging" {
|
|
||||||
metadata {
|
|
||||||
name = "carts-staging"
|
|
||||||
labels = {"monitor":"dynatrace"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
resource "kubernetes_namespace" "carts-prod" {
|
|
||||||
metadata {
|
|
||||||
name = "carts-production"
|
|
||||||
labels = {"monitor":"dynatrace"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# resource "seed" "win" {
|
|
||||||
# count = local.is_linux ? 0 : 1
|
|
||||||
|
|
||||||
# provisioner "local-exec" {
|
|
||||||
# command = "echo $FOO $BAR $BAZ >> env_vars.txt"
|
|
||||||
|
|
||||||
# environment = {
|
|
||||||
# FOO = var.gitea_repository.demo-repo.clone_url
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
terraform init -backend-config="key=keptn-sockshop-demo"
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
# Copyright (c) HashiCorp, Inc.
|
|
||||||
# SPDX-License-Identifier: MPL-2.0
|
|
||||||
|
|
||||||
terraform {
|
|
||||||
|
|
||||||
backend "s3" {
|
|
||||||
bucket = "terraform-xops-demos"
|
|
||||||
region = "us-west-2"
|
|
||||||
dynamodb_table = "terraform-xops-lock-state"
|
|
||||||
encrypt = true
|
|
||||||
}
|
|
||||||
|
|
||||||
required_providers {
|
|
||||||
gitea = {
|
|
||||||
source = "Lerentis/gitea"
|
|
||||||
version = "0.16.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
restful = {
|
|
||||||
source = "magodo/restful"
|
|
||||||
}
|
|
||||||
|
|
||||||
kubernetes = {
|
|
||||||
source = "hashicorp/kubernetes"
|
|
||||||
version = ">= 2.0.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
required_version = "~> 1.3"
|
|
||||||
}
|
|
||||||
|
|
||||||
provider "gitea" {
|
|
||||||
# Configuration options
|
|
||||||
|
|
||||||
base_url = var.GITEA_URL # optionally use GITEA_BASE_URL env var
|
|
||||||
token = var.GITEA_TOKEN # optionally use GITEA_TOKEN env var
|
|
||||||
#username = var.GITEA_USER
|
|
||||||
# password = var.GITEA_PASSWORD
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
provider "restful" {
|
|
||||||
base_url = "https://keptn.nttdata-xlabs.com"
|
|
||||||
client = {
|
|
||||||
tls_insecure_skip_verify=true
|
|
||||||
}
|
|
||||||
|
|
||||||
security = {
|
|
||||||
apikey = [
|
|
||||||
{
|
|
||||||
in = "header"
|
|
||||||
name = "x-token"
|
|
||||||
value = var.KEPTN_API_TOKEN
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
variable "GITEA_USER" {
|
|
||||||
type = string
|
|
||||||
description = "gitea User"
|
|
||||||
default = "demo"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
variable "GITEA_URL" {
|
|
||||||
type = string
|
|
||||||
description = "url to gitea"
|
|
||||||
default = "https://gitea.nttdata-xlabs.com"
|
|
||||||
}
|
|
||||||
|
|
||||||
# variable "GITEA_PASSWORD" {
|
|
||||||
# type = string
|
|
||||||
# description = "url to gitea"
|
|
||||||
# }
|
|
||||||
|
|
||||||
variable "GITEA_TOKEN" {
|
|
||||||
type = string
|
|
||||||
description = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
variable "KEPTN_BRIDGE_URL" {
|
|
||||||
type = string
|
|
||||||
description = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
variable "KEPTN_API_TOKEN" {
|
|
||||||
type = string
|
|
||||||
description = ""
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue