install test chart with multi deployments

Signed-off-by: Josh Dolitsky <jdolitsky@gmail.com>
pull/6000/head
Josh Dolitsky 6 years ago
parent 05f7697625
commit 043c146db5

@ -1,5 +1,6 @@
*** Settings ***
Documentation Verify Helm functionality on multiple Kubernetes versions
Library String
Library lib/Kind.py
Library lib/Kubectl.py
Library lib/Helm.py
@ -15,16 +16,43 @@ Helm works with Kubernetes 1.15.0
*** Keyword ***
Test Helm on Kubernetes version
[Arguments] ${kube_version}
Create test cluster with kube version ${kube_version}
Verify wait flag works
Kind.Delete test cluster
Create test cluster with kube version
[Arguments] ${kube_version}
Kind.Create test cluster with Kubernetes version ${kube_version}
Kind.Wait for cluster
Kubectl.Get nodes
Kubectl.return code should be 0
Kubectl.Get pods kube-system
Kubectl.return code should be 0
Verify wait flag works
# Install nginx chart in a good state, using --wait flag
Helm.Delete release wait-flag-good
Helm.Install test chart wait-flag-good nginx --wait --timeout=60s
Helm.return code should be 0
# Make sure everything is up-and-running
# TODO
# Delete good release
Helm.Delete release wait-flag-good
Helm.return code should be 0
# Install nginx chart in a bad state, using --wait flag
Helm.Delete release wait-flag-bad
Helm.Install test chart wait-flag-bad nginx --wait --timeout=60s --set breakme=true
Helm.List releases
# Install should return non-zero, as things fail to come up
Helm.return code should not be 0
kind.Delete test cluster
# Delete bad release
Helm.Delete release wait-flag-bad
Helm.return code should be 0
Suite Setup
Kind.cleanup all test clusters

@ -1,7 +1,19 @@
import os
import common
from Kind import kind_auth_wrap
TEST_CHARTS_ROOT_DIR = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) +'/../testdata/charts')
class Helm(common.CommandRunner):
def list_releases(self):
cmd = 'helm list'
self.run_command(kind_auth_wrap(cmd))
def install_test_chart(self, release_name, test_chart, extra_args):
chart_path = TEST_CHARTS_ROOT_DIR+'/'+test_chart
cmd = 'helm install '+release_name+' '+chart_path+' '+extra_args
self.run_command(kind_auth_wrap(cmd))
def delete_release(self, release_name):
cmd = 'helm delete '+release_name
self.run_command(kind_auth_wrap(cmd))

@ -0,0 +1,5 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
.git

@ -0,0 +1,14 @@
apiVersion: v1
description: A basic NGINX HTTP server
home: https://github.com/helm/helm
keywords:
- http
- nginx
- www
- web
kubeVersion: '>=1.2.0'
maintainers: []
name: nginx
sources:
- https://hub.docker.com/_/nginx/
version: 0.1.0

@ -0,0 +1 @@
Sample notes for {{ .Chart.Name }}

@ -0,0 +1,16 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "nginx.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "nginx.fullname" -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}

@ -0,0 +1,155 @@
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{ template "nginx.fullname" . }}-ext
labels:
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
app.kubernetes.io/name: {{ template "nginx.name" . }}-ext
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ template "nginx.name" . }}-ext
template:
metadata:
labels:
app.kubernetes.io/name: {{ template "nginx.name" . }}-ext
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: {{ template "nginx.name" . }}
image: "alpine:latest"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- sleep
- "50000"
ports:
- name: http
containerPort: 80
protocol: TCP
readinessProbe:
exec:
command:
- sh
- "-c"
- "echo bar | grep {{ if .Values.breakme }}foo{{ else }}bar{{ end }}"
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: {{ template "nginx.fullname" . }}-v1beta1
labels:
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
app.kubernetes.io/name: {{ template "nginx.name" . }}-v1beta1
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ template "nginx.name" . }}-v1beta1
template:
metadata:
labels:
app.kubernetes.io/name: {{ template "nginx.name" . }}-v1beta1
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: {{ template "nginx.name" . }}
image: "alpine:latest"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- sleep
- "50000"
ports:
- name: http
containerPort: 80
protocol: TCP
readinessProbe:
exec:
command:
- sh
- "-c"
- "echo bar | grep {{ if .Values.breakme }}foo{{ else }}bar{{ end }}"
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: {{ template "nginx.fullname" . }}-v1beta2
labels:
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
app.kubernetes.io/name: {{ template "nginx.name" . }}-v1beta2
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ template "nginx.name" . }}-v1beta2
template:
metadata:
labels:
app.kubernetes.io/name: {{ template "nginx.name" . }}-v1beta2
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: {{ template "nginx.name" . }}
image: "alpine:latest"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- sleep
- "50000"
ports:
- name: http
containerPort: 80
protocol: TCP
readinessProbe:
exec:
command:
- sh
- "-c"
- "echo bar | grep {{ if .Values.breakme }}foo{{ else }}bar{{ end }}"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ template "nginx.fullname" . }}-v1
labels:
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
app.kubernetes.io/name: {{ template "nginx.name" . }}-v1
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ template "nginx.name" . }}-v1
template:
metadata:
labels:
app.kubernetes.io/name: {{ template "nginx.name" . }}-v1
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: {{ template "nginx.name" . }}
image: "alpine:latest"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- sleep
- "50000"
ports:
- name: http
containerPort: 80
protocol: TCP
readinessProbe:
exec:
command:
- sh
- "-c"
- "echo bar | grep {{ if .Values.breakme }}foo{{ else }}bar{{ end }}"

@ -0,0 +1,36 @@
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: {{ template "nginx.name" . }}
image: "alpine:latest"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- sleep
- "50000"
ports:
- name: http
containerPort: 80
protocol: TCP
readinessProbe:
exec:
command:
- sh
- "-c"
- "echo bar | grep bar"

@ -0,0 +1,13 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 8Gi
# Change this to a non-existent name to force it to never provision
storageClassName: standard

@ -0,0 +1,39 @@
apiVersion: v1
kind: Service
metadata:
{{- if .Values.service.annotations }}
annotations:
{{ toYaml .Values.service.annotations | indent 4 }}
{{- end }}
labels:
app.kubernetes.io/name: {{ template "nginx.name" . }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
name: {{ template "nginx.fullname" . }}
spec:
# Provides options for the service so chart users have the full choice
type: "{{ .Values.service.type }}"
clusterIP: "{{ .Values.service.clusterIP }}"
{{- if .Values.service.externalIPs }}
externalIPs:
{{ toYaml .Values.service.externalIPs | indent 4 }}
{{- end }}
{{- if .Values.service.loadBalancerIP }}
loadBalancerIP: "{{ .Values.service.loadBalancerIP }}"
{{- end }}
{{- if .Values.service.loadBalancerSourceRanges }}
loadBalancerSourceRanges:
{{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }}
{{- end }}
ports:
- name: http
port: {{ .Values.service.port }}
protocol: TCP
targetPort: http
{{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }}
nodePort: {{ .Values.service.nodePort }}
{{- end }}
selector:
app.kubernetes.io/name: {{ template "nginx.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}

@ -0,0 +1,32 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: foobar # has to match .spec.template.metadata.labels
serviceName: "nginx"
replicas: 3 # by default is 1
template:
metadata:
labels:
app: foobar # has to match .spec.selector.matchLabels
spec:
containers:
- name: {{ template "nginx.name" . }}
image: "alpine:latest"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- sleep
- "50000"
ports:
- name: http
containerPort: 80
protocol: TCP
readinessProbe:
exec:
command:
- sh
- "-c"
- "echo bar | grep bar"

@ -0,0 +1,18 @@
# Uncomment/set this in order to cause deployment readiness probes to fail
#
# breakme: true
#
image:
pullPolicy: IfNotPresent
replicaCount: 3
restartPolicy: Never
service:
annotations: {}
clusterIP: ""
externalIPs: []
loadBalancerIP: ""
loadBalancerSourceRanges: []
nodePort: ""
port: 8888
type: ClusterIP

@ -2,6 +2,7 @@
REQUIRED_SYSTEM_COMMANDS=(
"kind"
"kubectl"
"python3"
"virtualenv"
"pip"

Loading…
Cancel
Save