Helm chart bugfixes + end to end test bugfixes (#293)

Helm Chart fixes: bump chart version, parameterize image pull policy, pass poolmgr url to router.

E2E test: add a simple hello world test. Make test runner dump fission logs after test.
This commit is contained in:
Soam Vasani
2017-08-23 07:00:49 -07:00
committed by GitHub
parent dd6bfd73e2
commit 3693082004
11 changed files with 178 additions and 22 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
apiVersion: v1 apiVersion: v1
name: fission-all name: fission-all
version: 0.1.0 version: v0.2.0-20170822
description: Fission is a fast serverless framework for Kubernetes. description: Fission is a fast serverless framework for Kubernetes.
keywords: keywords:
- fission - fission
+9 -3
View File
@@ -172,6 +172,7 @@ spec:
containers: containers:
- name: controller - name: controller
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--controllerPort", "8888"] args: ["--controllerPort", "8888"]
serviceAccount: fission-svc serviceAccount: fission-svc
@@ -193,8 +194,9 @@ spec:
containers: containers:
- name: router - name: router
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--routerPort", "8888"] args: ["--routerPort", "8888", "--poolmgrUrl", "http://poolmgr.{{ .Release.Namespace }}"]
serviceAccount: fission-svc serviceAccount: fission-svc
--- ---
@@ -230,6 +232,7 @@ spec:
containers: containers:
- name: poolmgr - name: poolmgr
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--poolmgrPort", "8888", "--namespace", "{{ .Values.functionNamespace }}", "--fission-namespace", "{{ .Release.Namespace }}"] args: ["--poolmgrPort", "8888", "--namespace", "{{ .Values.functionNamespace }}", "--fission-namespace", "{{ .Release.Namespace }}"]
env: env:
@@ -254,6 +257,7 @@ spec:
containers: containers:
- name: kubewatcher - name: kubewatcher
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--kubewatcher"] args: ["--kubewatcher"]
serviceAccount: fission-svc serviceAccount: fission-svc
@@ -321,7 +325,7 @@ spec:
containers: containers:
- name: logger - name: logger
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: IfNotPresent imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--logger"] args: ["--logger"]
volumeMounts: volumeMounts:
@@ -340,7 +344,7 @@ spec:
protocol: TCP protocol: TCP
- name: fluentd - name: fluentd
image: {{ .Values.logger.fluentdImage }} image: {{ .Values.logger.fluentdImage }}
imagePullPolicy: IfNotPresent imagePullPolicy: {{ .Values.pullPolicy }}
env: env:
- name: INFLUXDB_ADDRESS - name: INFLUXDB_ADDRESS
value: influxdb value: influxdb
@@ -397,6 +401,7 @@ spec:
containers: containers:
- name: timer - name: timer
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--timer"] args: ["--timer"]
serviceAccount: fission-svc serviceAccount: fission-svc
@@ -468,6 +473,7 @@ spec:
containers: containers:
- name: mqtrigger - name: mqtrigger
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--mqt"] args: ["--mqt"]
env: env:
+3 -3
View File
@@ -10,16 +10,16 @@ serviceType: LoadBalancer
image: fission/fission-bundle image: fission/fission-bundle
## Image pull policy ## Image pull policy
pullPolicy: ifNotPresent pullPolicy: IfNotPresent
## Fission image version ## Fission image version
imageTag: nightly20170705 imageTag: v0.2.0-20170822
## Fission fetcher repository ## Fission fetcher repository
fetcherImage: fission/fetcher fetcherImage: fission/fetcher
## Fission fetcher image version ## Fission fetcher image version
fetcherImageTag: latest fetcherImageTag: v0.2.0-20170822
## Port at which Fission controller service should be exposed ## Port at which Fission controller service should be exposed
controllerPort: 31313 controllerPort: 31313
+1 -1
View File
@@ -1,6 +1,6 @@
apiVersion: v1 apiVersion: v1
name: fission-core name: fission-core
version: 0.1.0 version: v0.2.0-20170822
description: Fission is a fast serverless framework for Kubernetes. description: Fission is a fast serverless framework for Kubernetes.
keywords: keywords:
- fission - fission
@@ -172,6 +172,7 @@ spec:
containers: containers:
- name: controller - name: controller
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--controllerPort", "8888"] args: ["--controllerPort", "8888"]
serviceAccount: fission-svc serviceAccount: fission-svc
@@ -193,8 +194,9 @@ spec:
containers: containers:
- name: router - name: router
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--routerPort", "8888"] args: ["--routerPort", "8888", "--poolmgrUrl", "http://poolmgr.{{ .Release.Namespace }}"]
serviceAccount: fission-svc serviceAccount: fission-svc
--- ---
@@ -230,6 +232,7 @@ spec:
containers: containers:
- name: poolmgr - name: poolmgr
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--poolmgrPort", "8888", "--namespace", "{{ .Values.functionNamespace }}", "--fission-namespace", "{{ .Release.Namespace }}"] args: ["--poolmgrPort", "8888", "--namespace", "{{ .Values.functionNamespace }}", "--fission-namespace", "{{ .Release.Namespace }}"]
env: env:
@@ -254,6 +257,7 @@ spec:
containers: containers:
- name: kubewatcher - name: kubewatcher
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--kubewatcher"] args: ["--kubewatcher"]
serviceAccount: fission-svc serviceAccount: fission-svc
@@ -275,6 +279,7 @@ spec:
containers: containers:
- name: timer - name: timer
image: "{{ .Values.image }}:{{ .Values.imageTag }}" image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"] command: ["/fission-bundle"]
args: ["--timer"] args: ["--timer"]
serviceAccount: fission-svc serviceAccount: fission-svc
+5 -2
View File
@@ -10,13 +10,16 @@ serviceType: LoadBalancer
image: fission/fission-bundle image: fission/fission-bundle
## Fission image version ## Fission image version
imageTag: alpha20170124 imageTag: v0.2.0-20170822
## Image pull policy
pullPolicy: ifNotPresent
## Fission fetcher repository ## Fission fetcher repository
fetcherImage: fission/fetcher fetcherImage: fission/fetcher
## Fission fetcher image version ## Fission fetcher image version
fetcherImageTag: latest fetcherImageTag: v0.2.0-20170822
## Port at which Fission controller service should be exposed ## Port at which Fission controller service should be exposed
controllerPort: 31313 controllerPort: 31313
+11 -2
View File
@@ -1,12 +1,21 @@
#!/bin/bash #!/bin/bash
# The poolmgr unit test only works with NodePort-type services for
# now. So disable it for our travis ci tests.
if [ ! -f ${KUBECONFIG} ] if [ ! -f ${KUBECONFIG} ]
then then
unset KUBECONFIG unset KUBECONFIG
else
K="kubectl --kubeconfig $KUBECONFIG"
if $K get configmap ok-to-destroy
then
$K get function.fission.io -o name | cut -f2 -d'/' | xargs $K delete function.fission.io
$K get environment.fission.io -o name | cut -f2 -d'/' | xargs $K delete environment.fission.io
$K get httptrigger.fission.io -o name | cut -f2 -d'/' | xargs $K delete httptrigger.fission.io
fi
fi fi
go test -v -i $(go list ./... | grep -v '/vendor/' | grep -v 'examples/go') go test -v -i $(go list ./... | grep -v '/vendor/' | grep -v 'examples/go')
# The poolmgr unit test only works with NodePort-type services for
# now. So disable it for our travis ci tests.
go test -v $(go list ./... | grep -v '/vendor/' | grep -v 'examples/go' | grep -v poolmgr) go test -v $(go list ./... | grep -v '/vendor/' | grep -v 'examples/go' | grep -v poolmgr)
+4 -1
View File
@@ -11,10 +11,13 @@ fi
source $(dirname $0)/test_utils.sh source $(dirname $0)/test_utils.sh
IMAGE=gcr.io/fission-ci/fission-bundle IMAGE=gcr.io/fission-ci/fission-bundle
FETCHER_IMAGE=gcr.io/fission-ci/fetcher
TAG=test TAG=test
build_and_push_fission_bundle $IMAGE:$TAG build_and_push_fission_bundle $IMAGE:$TAG
build_and_push_fetcher $FETCHER_IMAGE:$TAG
build_fission_cli build_fission_cli
install_and_test $IMAGE $TAG install_and_test $IMAGE $TAG $FETCHER_IMAGE $TAG
+100 -6
View File
@@ -37,6 +37,20 @@ build_and_push_fission_bundle() {
popd popd
} }
build_and_push_fetcher() {
image_tag=$1
pushd $ROOT/environments/fetcher/cmd
./build.sh
docker build -t $image_tag .
gcloud_login
gcloud docker -- push $image_tag
popd
}
build_fission_cli() { build_fission_cli() {
pushd $ROOT/fission pushd $ROOT/fission
go build . go build .
@@ -51,13 +65,15 @@ helm_install_fission() {
id=$1 id=$1
image=$2 image=$2
imageTag=$3 imageTag=$3
controllerNodeport=$4 fetcherImage=$4
routerNodeport=$5 fetcherImageTag=$5
controllerNodeport=$6
routerNodeport=$7
ns=f-$id ns=f-$id
fns=f-func-$id fns=f-func-$id
helmVars=image=$image,imageTag=$imageTag,functionNamespace=$fns,controllerPort=$controllerNodeport,routerPort=$routerNodeport,pullPolicy=alwaysPull helmVars=image=$image,imageTag=$imageTag,fetcherImage=$fetcherImage,fetcherImageTag=$fetcherImageTag,functionNamespace=$fns,controllerPort=$controllerNodeport,routerPort=$routerNodeport,pullPolicy=Always
helm_setup helm_setup
@@ -115,29 +131,107 @@ set_environment() {
export PATH=$ROOT/fission:$PATH export PATH=$ROOT/fission:$PATH
} }
dump_function_pod_logs() {
ns=$1
fns=$2
functionPods=$(kubectl -n $fns get pod -o name -l functionName)
for p in $functionPods
do
echo "--- function pod logs $p ---"
containers=$(kubectl -n $fns get $p -o jsonpath={.spec.containers[*].name})
for c in $containers
do
echo "--- function pod logs $p: container $c ---"
kubectl -n $fns logs $p $c
echo "--- end function pod logs $p: container $c ---"
done
echo "--- end function pod logs $p ---"
done
}
dump_fission_logs() {
ns=$1
fns=$2
component=$3
echo --- $component logs ---
kubectl -n $ns get pod -o name | grep $component | xargs kubectl -n $ns logs
echo --- end $component logs ---
}
dump_fission_resource() {
type=$1
echo --- All objects of type $type ---
kubectl --all-namespaces=true get $type -o yaml
echo --- End objects of type $type ---
}
dump_fission_resources() {
dump_fission_resource function.fission.io
dump_fission_resource httptrigger.fission.io
dump_fission_resource environment.fission.io
}
dump_logs() {
id=$1
ns=f-$id
fns=f-func-$id
dump_fission_logs $ns $fns router
dump_fission_logs $ns $fns poolmgr
dump_function_pod_logs $ns $fns
dump_fission_resources
}
export FAILURES=0
run_all_tests() { run_all_tests() {
id=$1
export FISSION_NAMESPACE=f-$id
export FUNCTION_NAMESPACE=f-func-$id
for file in $ROOT/test/tests/test_*.sh for file in $ROOT/test/tests/test_*.sh
do do
echo ------- Running $file ------- echo ------- Running $file -------
$file if $file
then
echo SUCCESS: $file
else
echo FAILED: $file
export FAILURES=$(($FAILURES+1))
fi
done done
} }
install_and_test() { install_and_test() {
image=$1 image=$1
imageTag=$2 imageTag=$2
fetcherImage=$3
fetcherImageTag=$4
controllerPort=31234 controllerPort=31234
routerPort=31235 routerPort=31235
id=$(generate_test_id) id=$(generate_test_id)
trap "helm_uninstall_fission $id" EXIT trap "helm_uninstall_fission $id" EXIT
helm_install_fission $id $image $imageTag $controllerPort $routerPort helm_install_fission $id $image $imageTag $fetcherImage $fetcherImageTag $controllerPort $routerPort
wait_for_services $id wait_for_services $id
set_environment $id set_environment $id
run_all_tests run_all_tests $id
dump_logs $id
if [ $FAILURES -ne 0 ]
then
exit 1
fi
} }
+36
View File
@@ -0,0 +1,36 @@
#!/bin/bash
set -euo pipefail
ROOT=$(dirname $0)/../..
fn=nodejs-hello-$(date +%N)
# Create a hello world function in nodejs, test it with an http trigger
echo "Pre-test cleanup"
fission env delete --name nodejs || true
echo "Creating nodejs env"
fission env create --name nodejs --image fission/node-env
trap "fission env delete --name nodejs" EXIT
echo "Creating function"
fission fn create --name $fn --env nodejs --code $ROOT/examples/nodejs/hello.js
trap "fission fn delete --name $fn" EXIT
echo "Creating route"
fission route create --function $fn --url /$fn --method GET
echo "Waiting for router to catch up"
sleep 3
echo "Doing an HTTP GET on the function's route"
response=$(curl http://$FISSION_ROUTER/$fn)
echo "Checking for valid response"
echo $response | grep -i hello
# crappy cleanup, improve this later
kubectl get httptrigger -o name | tail -1 | cut -f2 -d'/' | xargs kubectl delete httptrigger
echo "All done."
+1 -1
View File
@@ -177,7 +177,7 @@ func environmentTests(tprClient *rest.RESTClient) {
el, err := ei.List(api.ListOptions{}) el, err := ei.List(api.ListOptions{})
panicIf(err) panicIf(err)
if len(el.Items) != 1 { if len(el.Items) != 1 {
log.Panicf("wrong count from list: %v", el) log.Panicf("wrong count from list: %v", len(el.Items))
} }
if el.Items[0].Spec.Runtime.Image != environment.Spec.Runtime.Image { if el.Items[0].Spec.Runtime.Image != environment.Spec.Runtime.Image {
log.Panicf("bad object from list: %v", el.Items[0]) log.Panicf("bad object from list: %v", el.Items[0])