...
1#!/usr/bin/env bash
2
3# Copyright 2018 The Kubernetes Authors.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17set -o errexit
18set -o nounset
19set -o pipefail
20
21run_template_output_tests() {
22 set -o nounset
23 set -o errexit
24
25 kube::log::status "Testing --template support on commands"
26 ### Test global request timeout option
27 # Pre-condition: no POD exists
28 create_and_use_new_namespace
29 kube::test::get_object_assert pods "{{range.items}}{{${id_field:?}}}:{{end}}" ''
30 # Command
31 # check that create supports --template output
32 kubectl create "${kube_flags[@]:?}" -f test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml
33 # Post-condition: valid-pod POD is created
34 kubectl get "${kube_flags[@]:?}" pods -o json
35 kube::test::get_object_assert pods "{{range.items}}{{${id_field:?}}}:{{end}}" 'valid-pod:'
36
37 # check that patch command supports --template output
38 output_message=$(kubectl "${kube_flags[@]:?}" patch --dry-run=client pods/valid-pod -p '{"patched":"value3"}' --type=merge --template="{{ .metadata.name }}:")
39 kube::test::if_has_string "${output_message}" 'valid-pod:'
40
41 # check that label command supports --template output
42 output_message=$(kubectl "${kube_flags[@]:?}" label --dry-run=client pods/valid-pod label=value --template="{{ .metadata.name }}:")
43 kube::test::if_has_string "${output_message}" 'valid-pod:'
44
45 # check that annotate command supports --template output
46 output_message=$(kubectl "${kube_flags[@]:?}" annotate --dry-run=client pods/valid-pod annotation=value --template="{{ .metadata.name }}:")
47 kube::test::if_has_string "${output_message}" 'valid-pod:'
48
49 # check that apply command supports --template output
50 output_message=$(kubectl "${kube_flags[@]:?}" apply --dry-run=client -f test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml --template="{{ .metadata.name }}:")
51 kube::test::if_has_string "${output_message}" 'valid-pod:'
52
53 # check that create command supports --template output
54 output_message=$(kubectl "${kube_flags[@]:?}" create -f test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml --dry-run=client --template="{{ .metadata.name }}:")
55 kube::test::if_has_string "${output_message}" 'valid-pod:'
56
57 # check that autoscale command supports --template output
58 output_message=$(kubectl "${kube_flags[@]:?}" autoscale --max=2 -f hack/testdata/scale-deploy-1.yaml --dry-run=client --template="{{ .metadata.name }}:")
59 kube::test::if_has_string "${output_message}" 'scale-1:'
60
61 # check that expose command supports --template output
62 output_message=$(kubectl "${kube_flags[@]:?}" expose -f hack/testdata/redis-slave-replicaset.yaml --save-config --port=80 --target-port=8000 --dry-run=client --template="{{ .metadata.name }}:")
63 kube::test::if_has_string "${output_message}" 'redis-slave:'
64
65 # check that run command supports --template output
66 output_message=$(kubectl "${kube_flags[@]:?}" run --dry-run=client --template="{{ .metadata.name }}:" pi --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)')
67 kube::test::if_has_string "${output_message}" 'pi:'
68
69 # check that taint command supports --template output
70 output_message=$(kubectl "${kube_flags[@]:?}" taint node 127.0.0.1 dedicated=foo:PreferNoSchedule --template="{{ .metadata.name }}:")
71 kube::test::if_has_string "${output_message}" '127.0.0.1:'
72 # untaint node
73 kubectl taint node 127.0.0.1 dedicated-
74
75 # check that "apply set-last-applied" command supports --template output
76 kubectl "${kube_flags[@]:?}" create -f test/e2e/testing-manifests/statefulset/cassandra/controller.yaml
77 output_message=$(kubectl "${kube_flags[@]:?}" apply set-last-applied -f test/e2e/testing-manifests/statefulset/cassandra/controller.yaml --dry-run=client --create-annotation --template="{{ .metadata.name }}:")
78 kube::test::if_has_string "${output_message}" 'cassandra:'
79
80 # check that "auth reconcile" command supports --template output
81 output_message=$(kubectl "${kube_flags[@]:?}" auth reconcile --dry-run=client -f test/fixtures/pkg/kubectl/cmd/auth/rbac-resource-plus.yaml --template="{{ .metadata.name }}:")
82 kube::test::if_has_string "${output_message}" 'testing-CR:testing-CRB:testing-RB:testing-R:'
83
84 # check that "create clusterrole" command supports --template output
85 output_message=$(kubectl "${kube_flags[@]:?}" create clusterrole --template="{{ .metadata.name }}:" --verb get myclusterrole --non-resource-url /logs/ --resource pods)
86 kube::test::if_has_string "${output_message}" 'myclusterrole:'
87
88 # check that "create clusterrolebinding" command supports --template output
89 output_message=$(kubectl "${kube_flags[@]:?}" create clusterrolebinding foo --clusterrole=myclusterrole --template="{{ .metadata.name }}:")
90 kube::test::if_has_string "${output_message}" 'foo:'
91
92 # check that "create configmap" command supports --template output
93 output_message=$(kubectl "${kube_flags[@]:?}" create configmap cm --dry-run=client --template="{{ .metadata.name }}:")
94 kube::test::if_has_string "${output_message}" 'cm:'
95
96 # check that "create deployment" command supports --template output
97 output_message=$(kubectl "${kube_flags[@]:?}" create deployment deploy --image=nginx --template="{{ .metadata.name }}:")
98 kube::test::if_has_string "${output_message}" 'deploy:'
99
100 # check that "create job" command supports --template output
101 kubectl create "${kube_flags[@]:?}" -f - <<EOF
102apiVersion: batch/v1
103kind: CronJob
104metadata:
105 name: pi
106spec:
107 schedule: "*/10 * * * *"
108 jobTemplate:
109 spec:
110 template:
111 metadata:
112 labels:
113 parent: "pi"
114 spec:
115 containers:
116 - name: pi
117 image: perl
118 command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
119 restartPolicy: OnFailure
120EOF
121 output_message=$(kubectl "${kube_flags[@]:?}" create job foo --from=cronjob/pi --dry-run=client --template="{{ .metadata.name }}:")
122 kube::test::if_has_string "${output_message}" 'foo:'
123
124 # check that "create namespace" command supports --template output
125 output_message=$(kubectl "${kube_flags[@]:?}" create ns bar --dry-run=client --template="{{ .metadata.name }}:")
126 kube::test::if_has_string "${output_message}" 'bar:'
127
128 # check that "create namespace" command supports --template output
129 output_message=$(kubectl "${kube_flags[@]:?}" create rolebinding foo --clusterrole=myclusterrole --dry-run=client --template="{{ .metadata.name }}:")
130 kube::test::if_has_string "${output_message}" 'foo:'
131
132 # check that "create role" command supports --template output
133 output_message=$(kubectl "${kube_flags[@]:?}" create role --dry-run=client --template="{{ .metadata.name }}:" --verb get myrole --resource pods)
134 kube::test::if_has_string "${output_message}" 'myrole:'
135
136 # check that "create quota" command supports --template output
137 output_message=$(kubectl "${kube_flags[@]:?}" create quota foo --dry-run=client --template="{{ .metadata.name }}:")
138 kube::test::if_has_string "${output_message}" 'foo:'
139
140 # check that "create priorityclass" command supports --template output
141 output_message=$(kubectl "${kube_flags[@]:?}" create priorityclass foo --dry-run=client --template="{{ .metadata.name }}:")
142 kube::test::if_has_string "${output_message}" 'foo:'
143
144 # check that "create poddisruptionbudget" command supports --template output
145 output_message=$(kubectl "${kube_flags[@]:?}" create poddisruptionbudget foo --dry-run=client --selector=foo --min-available=1 --template="{{ .metadata.name }}:")
146 kube::test::if_has_string "${output_message}" 'foo:'
147
148 # check that "create serviceaccount" command supports --template output
149 output_message=$(kubectl "${kube_flags[@]:?}" create serviceaccount foo --dry-run=client --template="{{ .metadata.name }}:")
150 kube::test::if_has_string "${output_message}" 'foo:'
151
152 # check that "set env" command supports --template output
153 output_message=$(kubectl "${kube_flags[@]:?}" set env pod/valid-pod --dry-run=client A=B --template="{{ .metadata.name }}:")
154 kube::test::if_has_string "${output_message}" 'valid-pod:'
155
156 # check that "set image" command supports --template output
157 output_message=$(kubectl "${kube_flags[@]:?}" set image pod/valid-pod --dry-run=client kubernetes-serve-hostname=nginx --template="{{ .metadata.name }}:")
158 kube::test::if_has_string "${output_message}" 'valid-pod:'
159
160 # check that "set resources" command supports --template output
161 output_message=$(kubectl "${kube_flags[@]:?}" set resources pod/valid-pod --limits=memory=256Mi --dry-run=client --template="{{ .metadata.name }}:")
162 kube::test::if_has_string "${output_message}" 'valid-pod:'
163
164 # check that "set selector" command supports --template output
165 output_message=$(kubectl "${kube_flags[@]:?}" set selector -f hack/testdata/kubernetes-service.yaml A=B --local --dry-run=client --template="{{ .metadata.name }}:")
166 kube::test::if_has_string "${output_message}" 'kubernetes:'
167
168 # check that "set serviceaccount" command supports --template output
169 output_message=$(kubectl "${kube_flags[@]:?}" set serviceaccount pod/valid-pod deployer --dry-run=client --template="{{ .metadata.name }}:")
170 kube::test::if_has_string "${output_message}" 'valid-pod:'
171
172 # check that "set subject" command supports --template output
173 output_message=$(kubectl "${kube_flags[@]:?}" set subject clusterrolebinding/foo --user=foo --dry-run=client --template="{{ .metadata.name }}:")
174 kube::test::if_has_string "${output_message}" 'foo:'
175
176 # check that "create secret docker-registry" command supports --template output
177 output_message=$(kubectl "${kube_flags[@]:?}" create secret docker-registry foo --docker-username user --docker-password pass --docker-email foo@bar.baz --dry-run=client --template="{{ .metadata.name }}:")
178 kube::test::if_has_string "${output_message}" 'foo:'
179
180 # check that "create secret generic" command supports --template output
181 output_message=$(kubectl "${kube_flags[@]:?}" create secret generic foo --from-literal=key1=value1 --dry-run=client --template="{{ .metadata.name }}:")
182 kube::test::if_has_string "${output_message}" 'foo:'
183
184 # check that "create secret tls" command supports --template output
185 output_message=$(kubectl "${kube_flags[@]:?}" create secret tls --dry-run=client foo --key=hack/testdata/tls.key --cert=hack/testdata/tls.crt --template="{{ .metadata.name }}:")
186 kube::test::if_has_string "${output_message}" 'foo:'
187
188 # check that "create service clusterip" command supports --template output
189 output_message=$(kubectl "${kube_flags[@]:?}" create service clusterip foo --dry-run=client --tcp=8080 --template="{{ .metadata.name }}:")
190 kube::test::if_has_string "${output_message}" 'foo:'
191
192 # check that "create service externalname" command supports --template output
193 output_message=$(kubectl "${kube_flags[@]:?}" create service externalname foo --dry-run=client --external-name=bar --template="{{ .metadata.name }}:")
194 kube::test::if_has_string "${output_message}" 'foo:'
195
196 # check that "create service loadbalancer" command supports --template output
197 output_message=$(kubectl "${kube_flags[@]:?}" create service loadbalancer foo --dry-run=client --tcp=8080 --template="{{ .metadata.name }}:")
198 kube::test::if_has_string "${output_message}" 'foo:'
199
200 # check that "create service nodeport" command supports --template output
201 output_message=$(kubectl "${kube_flags[@]:?}" create service nodeport foo --dry-run=client --tcp=8080 --template="{{ .metadata.name }}:")
202 kube::test::if_has_string "${output_message}" 'foo:'
203
204 # check that "config view" outputs "yaml" as its default output format
205 output_message=$(kubectl "${kube_flags[@]:?}" config view)
206 kube::test::if_has_string "${output_message}" 'kind: Config'
207
208 # check that "rollout pause" supports --template output
209 output_message=$(kubectl "${kube_flags[@]:?}" rollout pause deploy/deploy --template="{{ .metadata.name }}:")
210 kube::test::if_has_string "${output_message}" 'deploy:'
211
212 # check that "rollout history" supports --template output
213 output_message=$(kubectl "${kube_flags[@]:?}" rollout history deploy/deploy --template="{{ .metadata.name }}:")
214 kube::test::if_has_string "${output_message}" 'deploy:'
215
216 # check that "rollout resume" supports --template output
217 output_message=$(kubectl "${kube_flags[@]:?}" rollout resume deploy/deploy --template="{{ .metadata.name }}:")
218 kube::test::if_has_string "${output_message}" 'deploy:'
219
220 # check that "rollout undo" supports --template output
221 output_message=$(kubectl "${kube_flags[@]:?}" rollout undo deploy/deploy --to-revision=1 --template="{{ .metadata.name }}:")
222 kube::test::if_has_string "${output_message}" 'deploy:'
223
224 # check that "config view" command supports --template output
225 # and that commands that set a default output (yaml in this case),
226 # default to "go-template" as their output format when a --template
227 # value is provided, but no explicit --output format is given.
228 output_message=$(kubectl "${kube_flags[@]:?}" config view --template="{{ .kind }}:")
229 kube::test::if_has_string "${output_message}" 'Config'
230
231 # check that running a command with both a --template flag and a
232 # non-template --output prefers the non-template output value
233 output_message=$(kubectl "${kube_flags[@]:?}" create configmap cm --dry-run=client --template="{{ .metadata.name }}:" --output yaml)
234 kube::test::if_has_string "${output_message}" 'kind: ConfigMap'
235
236 # cleanup
237 kubectl delete cronjob pi "${kube_flags[@]:?}"
238 kubectl delete pods --all "${kube_flags[@]:?}"
239 kubectl delete rc cassandra "${kube_flags[@]:?}"
240 kubectl delete clusterrole myclusterrole "${kube_flags[@]:?}"
241 kubectl delete clusterrolebinding foo "${kube_flags[@]:?}"
242 kubectl delete deployment deploy "${kube_flags[@]:?}"
243
244 set +o nounset
245 set +o errexit
246}
View as plain text