@@ -10,20 +10,24 @@ ROOTDIR="$(pwd)"
10
10
TMPDIR=" $( mktemp -d) "
11
11
trap_add ' rm -rf $TMPDIR' EXIT
12
12
13
+ test_namespace=" test-e2e-helm"
14
+
13
15
deploy_operator () {
14
- kubectl create -f " $OPERATORDIR /deploy/service_account.yaml"
15
- kubectl create -f " $OPERATORDIR /deploy/role.yaml"
16
- kubectl create -f " $OPERATORDIR /deploy/role_binding.yaml"
17
16
kubectl create -f " $OPERATORDIR /deploy/crds/helm.example.com_nginxes_crd.yaml"
18
- kubectl create -f " $OPERATORDIR /deploy/operator.yaml"
17
+ kubectl create -f " $OPERATORDIR /deploy/service_account.yaml"
18
+ kubectl create -f " $OPERATORDIR /deploy/cluster_role.yaml"
19
+ kubectl create -f " $OPERATORDIR /deploy/cluster_role_binding.yaml"
20
+ kubectl create -f " $OPERATORDIR /deploy/cluster_operator.yaml"
21
+ kubectl create namespace ${test_namespace}
19
22
}
20
23
21
24
remove_operator () {
25
+ kubectl delete --ignore-not-found namespace ${test_namespace}
22
26
kubectl delete --ignore-not-found=true -f " $OPERATORDIR /deploy/service_account.yaml"
23
- kubectl delete --ignore-not-found=true -f " $OPERATORDIR /deploy/role .yaml"
24
- kubectl delete --ignore-not-found=true -f " $OPERATORDIR /deploy/role_binding .yaml"
27
+ kubectl delete --ignore-not-found=true -f " $OPERATORDIR /deploy/cluster_role .yaml"
28
+ kubectl delete --ignore-not-found=true -f " $OPERATORDIR /deploy/cluster_role_binding .yaml"
25
29
kubectl delete --ignore-not-found=true -f " $OPERATORDIR /deploy/crds/helm.example.com_nginxes_crd.yaml"
26
- kubectl delete --ignore-not-found=true -f " $OPERATORDIR /deploy/operator .yaml"
30
+ kubectl delete --ignore-not-found=true -f " $OPERATORDIR /deploy/cluster_operator .yaml"
27
31
}
28
32
29
33
test_operator () {
@@ -46,68 +50,69 @@ test_operator() {
46
50
exit 1
47
51
fi
48
52
53
+
49
54
# verify that the metrics endpoint exists
50
- if ! timeout 1m bash -c -- " until kubectl run --attach --rm --restart=Never test-metrics --image=$metrics_test_image -- curl -sfo /dev/null http://nginx-operator-metrics:8383/metrics; do sleep 1; done" ;
55
+ if ! timeout 1m bash -c -- " until kubectl run --attach --rm --restart=Never test-metrics --image=${ metrics_test_image} -- curl -sfo /dev/null http://nginx-operator-metrics:8383/metrics; do sleep 1; done" ;
51
56
then
52
57
echo " Failed to verify that metrics endpoint exists"
53
58
kubectl logs deployment/nginx-operator
54
59
exit 1
55
60
fi
56
61
57
62
# create CR
58
- kubectl create -f deploy/crds/helm.example.com_v1alpha1_nginx_cr.yaml
59
- trap_add ' kubectl delete --ignore-not-found -f ${OPERATORDIR}/deploy/crds/helm.example.com_v1alpha1_nginx_cr.yaml' EXIT
60
- if ! timeout 1m bash -c -- ' until kubectl get nginxes.helm.example.com example-nginx -o jsonpath=" {..status.deployedRelease.name}" | grep " example-nginx" ; do sleep 1; done' ;
63
+ kubectl create --namespace= ${test_namespace} - f deploy/crds/helm.example.com_v1alpha1_nginx_cr.yaml
64
+ trap_add " kubectl delete --namespace= ${test_namespace} -- ignore-not-found -f ${OPERATORDIR} /deploy/crds/helm.example.com_v1alpha1_nginx_cr.yaml" EXIT
65
+ if ! timeout 1m bash -c -- " until kubectl get --namespace= ${test_namespace} nginxes.helm.example.com example-nginx -o jsonpath=' {..status.deployedRelease.name}' | grep ' example-nginx' ; do sleep 1; done" ;
61
66
then
62
67
kubectl logs deployment/nginx-operator
63
68
exit 1
64
69
fi
65
70
66
71
# verify that the custom resource metrics endpoint exists
67
- if ! timeout 1m bash -c -- " until kubectl run --attach --rm --restart=Never test-cr-metrics --image=$metrics_test_image -- curl -sfo /dev/null http://nginx-operator-metrics:8686/metrics; do sleep 1; done" ;
72
+ if ! timeout 1m bash -c -- " until kubectl run --attach --rm --restart=Never test-cr-metrics --image=${ metrics_test_image} -- curl -sfo /dev/null http://nginx-operator-metrics:8686/metrics; do sleep 1; done" ;
68
73
then
69
74
echo " Failed to verify that custom resource metrics endpoint exists"
70
75
kubectl logs deployment/nginx-operator
71
76
exit 1
72
77
fi
73
78
74
- release_name=$( kubectl get nginxes.helm.example.com example-nginx -o jsonpath=" {..status.deployedRelease.name}" )
75
- nginx_deployment=$( kubectl get deployment -l " app.kubernetes.io/instance=${release_name} " -o jsonpath=" {..metadata.name}" )
79
+ release_name=$( kubectl get --namespace= ${test_namespace} nginxes.helm.example.com example-nginx -o jsonpath=" {..status.deployedRelease.name}" )
80
+ nginx_deployment=$( kubectl get --namespace= ${test_namespace} deployment -l " app.kubernetes.io/instance=${release_name} " -o jsonpath=" {..metadata.name}" )
76
81
77
- if ! timeout 1m kubectl rollout status deployment/${nginx_deployment} ;
82
+ if ! timeout 1m kubectl rollout --namespace= ${test_namespace} status deployment/${nginx_deployment} ;
78
83
then
79
- kubectl describe pods -l " app.kubernetes.io/instance=${release_name} "
80
- kubectl describe deployments ${nginx_deployment}
84
+ kubectl describe --namespace= ${test_namespace} pods -l " app.kubernetes.io/instance=${release_name} "
85
+ kubectl describe --namespace= ${test_namespace} deployments ${nginx_deployment}
81
86
kubectl logs deployment/nginx-operator
82
87
exit 1
83
88
fi
84
89
85
- nginx_service=$( kubectl get service -l " app.kubernetes.io/instance=${release_name} " -o jsonpath=" {..metadata.name}" )
86
- kubectl get service ${nginx_service}
90
+ nginx_service=$( kubectl get --namespace= ${test_namespace} service -l " app.kubernetes.io/instance=${release_name} " -o jsonpath=" {..metadata.name}" )
91
+ kubectl get --namespace= ${test_namespace} service ${nginx_service}
87
92
88
93
# scale deployment replicas to 2 and verify the
89
94
# deployment automatically scales back down to 1.
90
- kubectl scale deployment/${nginx_deployment} --replicas=2
91
- if ! timeout 1m bash -c -- " until test \$ (kubectl get deployment/${nginx_deployment} -o jsonpath='{..spec.replicas}') -eq 1; do sleep 1; done" ;
95
+ kubectl scale --namespace= ${test_namespace} deployment/${nginx_deployment} --replicas=2
96
+ if ! timeout 1m bash -c -- " until test \$ (kubectl get --namespace= ${test_namespace} deployment/${nginx_deployment} -o jsonpath='{..spec.replicas}') -eq 1; do sleep 1; done" ;
92
97
then
93
- kubectl describe pods -l " app.kubernetes.io/instance=${release_name} "
94
- kubectl describe deployments ${nginx_deployment}
98
+ kubectl describe --namespace= ${test_namespace} pods -l " app.kubernetes.io/instance=${release_name} "
99
+ kubectl describe --namespace= ${test_namespace} deployments ${nginx_deployment}
95
100
kubectl logs deployment/nginx-operator
96
101
exit 1
97
102
fi
98
103
99
104
# update CR to replicaCount=2 and verify the deployment
100
105
# automatically scales up to 2 replicas.
101
- kubectl patch nginxes.helm.example.com example-nginx -p ' [{"op":"replace","path":"/spec/replicaCount","value":2}]' --type=json
102
- if ! timeout 1m bash -c -- " until test \$ (kubectl get deployment/${nginx_deployment} -o jsonpath='{..spec.replicas}') -eq 2; do sleep 1; done" ;
106
+ kubectl patch --namespace= ${test_namespace} nginxes.helm.example.com example-nginx -p ' [{"op":"replace","path":"/spec/replicaCount","value":2}]' --type=json
107
+ if ! timeout 1m bash -c -- " until test \$ (kubectl get --namespace= ${test_namespace} deployment/${nginx_deployment} -o jsonpath='{..spec.replicas}') -eq 2; do sleep 1; done" ;
103
108
then
104
- kubectl describe pods -l " app.kubernetes.io/instance=${release_name} "
105
- kubectl describe deployments ${nginx_deployment}
109
+ kubectl describe --namespace= ${test_namespace} pods -l " app.kubernetes.io/instance=${release_name} "
110
+ kubectl describe --namespace= ${test_namespace} deployments ${nginx_deployment}
106
111
kubectl logs deployment/nginx-operator
107
112
exit 1
108
113
fi
109
114
110
- kubectl delete -f deploy/crds/helm.example.com_v1alpha1_nginx_cr.yaml --wait=true
115
+ kubectl delete --namespace= ${test_namespace} - f deploy/crds/helm.example.com_v1alpha1_nginx_cr.yaml --wait=true
111
116
kubectl logs deployment/nginx-operator | grep " Uninstalled release" | grep " ${release_name} "
112
117
}
113
118
@@ -131,6 +136,11 @@ operator-sdk build "$DEST_IMAGE"
131
136
load_image_if_kind " $DEST_IMAGE "
132
137
sed -i" .bak" -E -e " s|REPLACE_IMAGE|$DEST_IMAGE |g" deploy/operator.yaml; rm -f deploy/operator.yaml.bak
133
138
sed -i" .bak" -E -e ' s|Always|Never|g' deploy/operator.yaml; rm -f deploy/operator.yaml.bak
139
+
140
+ kubectl create --dry-run -f " deploy/operator.yaml" -o json | jq ' ((.spec.template.spec.containers[] | select(.name == "nginx-operator").env[]) | select(.name == "WATCH_NAMESPACE")) |= {"name":"WATCH_NAMESPACE", "value":""}' | kubectl create --dry-run -f - -o yaml > deploy/cluster_operator.yaml
141
+ kubectl create --dry-run -f " deploy/role.yaml" -o json | jq ' .kind = "ClusterRole"' | kubectl create --dry-run -f - -o yaml > deploy/cluster_role.yaml
142
+ kubectl create --dry-run -f " deploy/role_binding.yaml" -o json | jq ' .subjects[0].namespace= "default"' | jq ' .roleRef.kind= "ClusterRole"' | jq ' .kind = "ClusterRoleBinding"' | kubectl create --dry-run -f - -o yaml > deploy/cluster_role_binding.yaml
143
+
134
144
# kind has an issue with certain image registries (ex. redhat's), so use a
135
145
# different test pod image.
136
146
METRICS_TEST_IMAGE=" fedora:latest"
0 commit comments