· 6 years ago · Sep 02, 2019, 03:34 PM
1[
2 {
3 "metadata": {
4 "name": "pipeline:root",
5 "namespace": "testns",
6 "creationTimestamp": null
7 },
8 "tag": {
9 "name": "",
10 "annotations": null,
11 "from": {
12 "kind": "ImageStreamImage",
13 "namespace": "openshift",
14 "name": "release@sha256:6707d252e5147fc101c4fadd31637f6865dbfcc20327dbc0616f82055e6eb832"
15 },
16 "generation": null,
17 "importPolicy": {},
18 "referencePolicy": {
19 "type": "Local"
20 }
21 },
22 "generation": 0,
23 "lookupPolicy": {
24 "local": false
25 },
26 "image": {
27 "metadata": {
28 "creationTimestamp": null
29 },
30 "dockerImageMetadata": null,
31 "dockerImageLayers": null
32 }
33 },
34 {
35 "metadata": {
36 "name": "pipeline:base",
37 "namespace": "testns",
38 "creationTimestamp": null
39 },
40 "tag": {
41 "name": "",
42 "annotations": null,
43 "from": {
44 "kind": "ImageStreamImage",
45 "namespace": "ocp",
46 "name": "4.1@sha256:00a670f0ce28dfa5ddb5df74ca2b032e596c78ec8f8319cca48246b60727fc81"
47 },
48 "generation": null,
49 "importPolicy": {},
50 "referencePolicy": {
51 "type": "Local"
52 }
53 },
54 "generation": 0,
55 "lookupPolicy": {
56 "local": false
57 },
58 "image": {
59 "metadata": {
60 "creationTimestamp": null
61 },
62 "dockerImageMetadata": null,
63 "dockerImageLayers": null
64 }
65 },
66 {
67 "metadata": {
68 "name": "src",
69 "namespace": "testns",
70 "creationTimestamp": null,
71 "labels": {
72 "build-id": "",
73 "ci.openshift.io/refs.branch": "master",
74 "ci.openshift.io/refs.org": "openshift",
75 "ci.openshift.io/refs.repo": "release",
76 "created-by-ci": "true",
77 "creates": "src",
78 "job": "",
79 "prow.k8s.io/id": ""
80 },
81 "annotations": {
82 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
83 }
84 },
85 "spec": {
86 "serviceAccount": "builder",
87 "source": {
88 "type": "Dockerfile",
89 "dockerfile": "\nFROM pipeline:root\nADD ./app.binary /clonerefs\nRUN umask 0002 \u0026\u0026 /clonerefs \u0026\u0026 find /go/src -type d -not -perm -0775 | xargs -r chmod g+xw\nWORKDIR /go/src/github.com/openshift/release/\nENV GOPATH=/go\nRUN git submodule update --init\n",
90 "images": [
91 {
92 "from": {
93 "kind": "DockerImage",
94 "name": "registry.svc.ci.openshift.org/ci/clonerefs@sha256:d68e1c6c2de5c1167a79b24d5ba4f909349ca7a44fb634e214bdadc2c8b010cd"
95 },
96 "as": null,
97 "paths": [
98 {
99 "sourcePath": "/app/prow/cmd/clonerefs/app.binary.runfiles/io_k8s_test_infra/prow/cmd/clonerefs/linux_amd64_pure_stripped/app.binary",
100 "destinationDir": "."
101 }
102 ]
103 }
104 ]
105 },
106 "strategy": {
107 "type": "Docker",
108 "dockerStrategy": {
109 "from": {
110 "kind": "ImageStreamTag",
111 "namespace": "testns",
112 "name": "pipeline:root"
113 },
114 "noCache": true,
115 "env": [
116 {
117 "name": "CLONEREFS_OPTIONS",
118 "value": "{\"src_root\":\"/go\",\"log\":\"/dev/null\",\"git_user_name\":\"ci-robot\",\"git_user_email\":\"ci-robot@openshift.io\",\"refs\":[{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}]}"
119 }
120 ],
121 "forcePull": true,
122 "imageOptimizationPolicy": "SkipLayers"
123 }
124 },
125 "output": {
126 "to": {
127 "kind": "ImageStreamTag",
128 "namespace": "testns",
129 "name": "pipeline:src"
130 }
131 },
132 "resources": {
133 "limits": {
134 "memory": "4Gi"
135 },
136 "requests": {
137 "cpu": "100m",
138 "memory": "200Mi"
139 }
140 },
141 "postCommit": {},
142 "nodeSelector": null,
143 "triggeredBy": null
144 },
145 "status": {
146 "phase": "",
147 "output": {}
148 }
149 },
150 {
151 "metadata": {
152 "name": "verify-vendor",
153 "creationTimestamp": null,
154 "labels": {
155 "build-id": "",
156 "ci.openshift.io/refs.branch": "master",
157 "ci.openshift.io/refs.org": "openshift",
158 "ci.openshift.io/refs.repo": "release",
159 "created-by-ci": "true",
160 "job": "",
161 "prow.k8s.io/id": ""
162 },
163 "annotations": {
164 "ci-operator.openshift.io/container-sub-tests": "test",
165 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
166 }
167 },
168 "spec": {
169 "containers": [
170 {
171 "name": "test",
172 "image": "pipeline:src",
173 "command": [
174 "/bin/bash",
175 "-c",
176 "#!/bin/bash\nset -eu\nIS_CONTAINER=TRUE ./hack/verify-vendor.sh"
177 ],
178 "env": [
179 {
180 "name": "BUILD_ID"
181 },
182 {
183 "name": "JOB_NAME"
184 },
185 {
186 "name": "JOB_SPEC",
187 "value": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
188 },
189 {
190 "name": "JOB_TYPE",
191 "value": "presubmit"
192 },
193 {
194 "name": "PROW_JOB_ID"
195 },
196 {
197 "name": "PULL_BASE_REF",
198 "value": "master"
199 },
200 {
201 "name": "PULL_BASE_SHA",
202 "value": "59262a5deb65f78bea6de40de3624a9d7d3b5f24"
203 },
204 {
205 "name": "PULL_NUMBER",
206 "value": "4102"
207 },
208 {
209 "name": "PULL_PULL_SHA",
210 "value": "f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6"
211 },
212 {
213 "name": "PULL_REFS",
214 "value": "master:59262a5deb65f78bea6de40de3624a9d7d3b5f24,4102:f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6"
215 },
216 {
217 "name": "REPO_NAME",
218 "value": "release"
219 },
220 {
221 "name": "REPO_OWNER",
222 "value": "openshift"
223 }
224 ],
225 "resources": {
226 "limits": {
227 "memory": "4Gi"
228 },
229 "requests": {
230 "cpu": "100m",
231 "memory": "200Mi"
232 }
233 },
234 "terminationMessagePolicy": "FallbackToLogsOnError"
235 }
236 ],
237 "restartPolicy": "Never"
238 },
239 "status": {}
240 },
241 {
242 "metadata": {
243 "name": "gofmt",
244 "creationTimestamp": null,
245 "labels": {
246 "build-id": "",
247 "ci.openshift.io/refs.branch": "master",
248 "ci.openshift.io/refs.org": "openshift",
249 "ci.openshift.io/refs.repo": "release",
250 "created-by-ci": "true",
251 "job": "",
252 "prow.k8s.io/id": ""
253 },
254 "annotations": {
255 "ci-operator.openshift.io/container-sub-tests": "test",
256 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
257 }
258 },
259 "spec": {
260 "containers": [
261 {
262 "name": "test",
263 "image": "pipeline:src",
264 "command": [
265 "/bin/bash",
266 "-c",
267 "#!/bin/bash\nset -eu\nIS_CONTAINER=TRUE ./hack/go-fmt.sh ."
268 ],
269 "env": [
270 {
271 "name": "BUILD_ID"
272 },
273 {
274 "name": "JOB_NAME"
275 },
276 {
277 "name": "JOB_SPEC",
278 "value": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
279 },
280 {
281 "name": "JOB_TYPE",
282 "value": "presubmit"
283 },
284 {
285 "name": "PROW_JOB_ID"
286 },
287 {
288 "name": "PULL_BASE_REF",
289 "value": "master"
290 },
291 {
292 "name": "PULL_BASE_SHA",
293 "value": "59262a5deb65f78bea6de40de3624a9d7d3b5f24"
294 },
295 {
296 "name": "PULL_NUMBER",
297 "value": "4102"
298 },
299 {
300 "name": "PULL_PULL_SHA",
301 "value": "f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6"
302 },
303 {
304 "name": "PULL_REFS",
305 "value": "master:59262a5deb65f78bea6de40de3624a9d7d3b5f24,4102:f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6"
306 },
307 {
308 "name": "REPO_NAME",
309 "value": "release"
310 },
311 {
312 "name": "REPO_OWNER",
313 "value": "openshift"
314 }
315 ],
316 "resources": {
317 "limits": {
318 "memory": "4Gi"
319 },
320 "requests": {
321 "cpu": "100m",
322 "memory": "200Mi"
323 }
324 },
325 "terminationMessagePolicy": "FallbackToLogsOnError"
326 }
327 ],
328 "restartPolicy": "Never"
329 },
330 "status": {}
331 },
332 {
333 "metadata": {
334 "name": "libvirt-installer",
335 "namespace": "testns",
336 "creationTimestamp": null,
337 "labels": {
338 "build-id": "",
339 "ci.openshift.io/refs.branch": "master",
340 "ci.openshift.io/refs.org": "openshift",
341 "ci.openshift.io/refs.repo": "release",
342 "created-by-ci": "true",
343 "creates": "libvirt-installer",
344 "job": "",
345 "prow.k8s.io/id": ""
346 },
347 "annotations": {
348 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
349 }
350 },
351 "spec": {
352 "serviceAccount": "builder",
353 "source": {
354 "type": "Image",
355 "images": [
356 {
357 "from": {
358 "kind": "ImageStreamTag",
359 "name": "pipeline:root"
360 },
361 "as": [
362 "build"
363 ],
364 "paths": null
365 },
366 {
367 "from": {
368 "kind": "ImageStreamTag",
369 "name": "pipeline:src"
370 },
371 "as": null,
372 "paths": [
373 {
374 "sourcePath": "dry-fake//.",
375 "destinationDir": "."
376 }
377 ]
378 }
379 ]
380 },
381 "strategy": {
382 "type": "Docker",
383 "dockerStrategy": {
384 "from": {
385 "kind": "ImageStreamTag",
386 "namespace": "testns",
387 "name": "pipeline:base"
388 },
389 "noCache": true,
390 "forcePull": true,
391 "dockerfilePath": "images/nested-libvirt/Dockerfile",
392 "imageOptimizationPolicy": "SkipLayers"
393 }
394 },
395 "output": {
396 "to": {
397 "kind": "ImageStreamTag",
398 "namespace": "testns",
399 "name": "pipeline:libvirt-installer"
400 },
401 "imageLabels": [
402 {
403 "name": "vcs-url"
404 },
405 {
406 "name": "io.openshift.build.namespace"
407 },
408 {
409 "name": "io.openshift.build.commit.ref"
410 },
411 {
412 "name": "io.openshift.build.commit.message"
413 },
414 {
415 "name": "io.openshift.build.commit.author"
416 },
417 {
418 "name": "io.openshift.build.commit.date"
419 },
420 {
421 "name": "io.openshift.build.source-location"
422 },
423 {
424 "name": "vcs-ref"
425 },
426 {
427 "name": "io.openshift.build.source-context-dir"
428 },
429 {
430 "name": "io.openshift.build.name"
431 },
432 {
433 "name": "io.openshift.build.commit.id"
434 },
435 {
436 "name": "vcs-type"
437 }
438 ]
439 },
440 "resources": {
441 "limits": {
442 "memory": "9Gi"
443 },
444 "requests": {
445 "cpu": "3",
446 "memory": "5Gi"
447 }
448 },
449 "postCommit": {},
450 "nodeSelector": null,
451 "triggeredBy": null
452 },
453 "status": {
454 "phase": "",
455 "output": {}
456 }
457 },
458 {
459 "metadata": {
460 "name": "openstack-installer",
461 "namespace": "testns",
462 "creationTimestamp": null,
463 "labels": {
464 "build-id": "",
465 "ci.openshift.io/refs.branch": "master",
466 "ci.openshift.io/refs.org": "openshift",
467 "ci.openshift.io/refs.repo": "release",
468 "created-by-ci": "true",
469 "creates": "openstack-installer",
470 "job": "",
471 "prow.k8s.io/id": ""
472 },
473 "annotations": {
474 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
475 }
476 },
477 "spec": {
478 "serviceAccount": "builder",
479 "source": {
480 "type": "Image",
481 "images": [
482 {
483 "from": {
484 "kind": "ImageStreamTag",
485 "name": "pipeline:root"
486 },
487 "as": [
488 "build"
489 ],
490 "paths": null
491 },
492 {
493 "from": {
494 "kind": "ImageStreamTag",
495 "name": "pipeline:src"
496 },
497 "as": null,
498 "paths": [
499 {
500 "sourcePath": "dry-fake//.",
501 "destinationDir": "."
502 }
503 ]
504 }
505 ]
506 },
507 "strategy": {
508 "type": "Docker",
509 "dockerStrategy": {
510 "from": {
511 "kind": "ImageStreamTag",
512 "namespace": "testns",
513 "name": "pipeline:base"
514 },
515 "noCache": true,
516 "forcePull": true,
517 "dockerfilePath": "images/openstack/Dockerfile.ci",
518 "imageOptimizationPolicy": "SkipLayers"
519 }
520 },
521 "output": {
522 "to": {
523 "kind": "ImageStreamTag",
524 "namespace": "testns",
525 "name": "pipeline:openstack-installer"
526 },
527 "imageLabels": [
528 {
529 "name": "io.openshift.build.name"
530 },
531 {
532 "name": "io.openshift.build.namespace"
533 },
534 {
535 "name": "io.openshift.build.commit.ref"
536 },
537 {
538 "name": "io.openshift.build.commit.date"
539 },
540 {
541 "name": "vcs-url"
542 },
543 {
544 "name": "vcs-ref"
545 },
546 {
547 "name": "io.openshift.build.commit.id"
548 },
549 {
550 "name": "io.openshift.build.commit.message"
551 },
552 {
553 "name": "io.openshift.build.commit.author"
554 },
555 {
556 "name": "io.openshift.build.source-location"
557 },
558 {
559 "name": "io.openshift.build.source-context-dir"
560 },
561 {
562 "name": "vcs-type"
563 }
564 ]
565 },
566 "resources": {
567 "limits": {
568 "memory": "9Gi"
569 },
570 "requests": {
571 "cpu": "3",
572 "memory": "5Gi"
573 }
574 },
575 "postCommit": {},
576 "nodeSelector": null,
577 "triggeredBy": null
578 },
579 "status": {
580 "phase": "",
581 "output": {}
582 }
583 },
584 {
585 "metadata": {
586 "name": "govet",
587 "creationTimestamp": null,
588 "labels": {
589 "build-id": "",
590 "ci.openshift.io/refs.branch": "master",
591 "ci.openshift.io/refs.org": "openshift",
592 "ci.openshift.io/refs.repo": "release",
593 "created-by-ci": "true",
594 "job": "",
595 "prow.k8s.io/id": ""
596 },
597 "annotations": {
598 "ci-operator.openshift.io/container-sub-tests": "test",
599 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
600 }
601 },
602 "spec": {
603 "containers": [
604 {
605 "name": "test",
606 "image": "pipeline:src",
607 "command": [
608 "/bin/bash",
609 "-c",
610 "#!/bin/bash\nset -eu\nIS_CONTAINER=TRUE ./hack/go-vet.sh ./..."
611 ],
612 "env": [
613 {
614 "name": "BUILD_ID"
615 },
616 {
617 "name": "JOB_NAME"
618 },
619 {
620 "name": "JOB_SPEC",
621 "value": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
622 },
623 {
624 "name": "JOB_TYPE",
625 "value": "presubmit"
626 },
627 {
628 "name": "PROW_JOB_ID"
629 },
630 {
631 "name": "PULL_BASE_REF",
632 "value": "master"
633 },
634 {
635 "name": "PULL_BASE_SHA",
636 "value": "59262a5deb65f78bea6de40de3624a9d7d3b5f24"
637 },
638 {
639 "name": "PULL_NUMBER",
640 "value": "4102"
641 },
642 {
643 "name": "PULL_PULL_SHA",
644 "value": "f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6"
645 },
646 {
647 "name": "PULL_REFS",
648 "value": "master:59262a5deb65f78bea6de40de3624a9d7d3b5f24,4102:f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6"
649 },
650 {
651 "name": "REPO_NAME",
652 "value": "release"
653 },
654 {
655 "name": "REPO_OWNER",
656 "value": "openshift"
657 }
658 ],
659 "resources": {
660 "limits": {
661 "memory": "4Gi"
662 },
663 "requests": {
664 "cpu": "100m",
665 "memory": "200Mi"
666 }
667 },
668 "terminationMessagePolicy": "FallbackToLogsOnError"
669 }
670 ],
671 "restartPolicy": "Never"
672 },
673 "status": {}
674 },
675 {
676 "metadata": {
677 "name": "installer",
678 "namespace": "testns",
679 "creationTimestamp": null,
680 "labels": {
681 "build-id": "",
682 "ci.openshift.io/refs.branch": "master",
683 "ci.openshift.io/refs.org": "openshift",
684 "ci.openshift.io/refs.repo": "release",
685 "created-by-ci": "true",
686 "creates": "installer",
687 "job": "",
688 "prow.k8s.io/id": ""
689 },
690 "annotations": {
691 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
692 }
693 },
694 "spec": {
695 "serviceAccount": "builder",
696 "source": {
697 "type": "Image",
698 "images": [
699 {
700 "from": {
701 "kind": "ImageStreamTag",
702 "name": "pipeline:root"
703 },
704 "as": [
705 "build"
706 ],
707 "paths": null
708 },
709 {
710 "from": {
711 "kind": "ImageStreamTag",
712 "name": "pipeline:src"
713 },
714 "as": null,
715 "paths": [
716 {
717 "sourcePath": "dry-fake//.",
718 "destinationDir": "."
719 }
720 ]
721 }
722 ]
723 },
724 "strategy": {
725 "type": "Docker",
726 "dockerStrategy": {
727 "from": {
728 "kind": "ImageStreamTag",
729 "namespace": "testns",
730 "name": "pipeline:base"
731 },
732 "noCache": true,
733 "forcePull": true,
734 "dockerfilePath": "images/installer/Dockerfile.ci",
735 "imageOptimizationPolicy": "SkipLayers"
736 }
737 },
738 "output": {
739 "to": {
740 "kind": "ImageStreamTag",
741 "namespace": "testns",
742 "name": "pipeline:installer"
743 },
744 "imageLabels": [
745 {
746 "name": "vcs-type"
747 },
748 {
749 "name": "io.openshift.build.commit.id"
750 },
751 {
752 "name": "io.openshift.build.commit.ref"
753 },
754 {
755 "name": "io.openshift.build.commit.author"
756 },
757 {
758 "name": "io.openshift.build.source-location"
759 },
760 {
761 "name": "io.openshift.build.source-context-dir"
762 },
763 {
764 "name": "vcs-ref"
765 },
766 {
767 "name": "vcs-url"
768 },
769 {
770 "name": "io.openshift.build.name"
771 },
772 {
773 "name": "io.openshift.build.namespace"
774 },
775 {
776 "name": "io.openshift.build.commit.message"
777 },
778 {
779 "name": "io.openshift.build.commit.date"
780 }
781 ]
782 },
783 "resources": {
784 "limits": {
785 "memory": "9Gi"
786 },
787 "requests": {
788 "cpu": "3",
789 "memory": "5Gi"
790 }
791 },
792 "postCommit": {},
793 "nodeSelector": null,
794 "triggeredBy": null
795 },
796 "status": {
797 "phase": "",
798 "output": {}
799 }
800 },
801 {
802 "metadata": {
803 "name": "unit",
804 "creationTimestamp": null,
805 "labels": {
806 "build-id": "",
807 "ci.openshift.io/refs.branch": "master",
808 "ci.openshift.io/refs.org": "openshift",
809 "ci.openshift.io/refs.repo": "release",
810 "created-by-ci": "true",
811 "job": "",
812 "prow.k8s.io/id": ""
813 },
814 "annotations": {
815 "ci-operator.openshift.io/container-sub-tests": "test",
816 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
817 }
818 },
819 "spec": {
820 "containers": [
821 {
822 "name": "test",
823 "image": "pipeline:src",
824 "command": [
825 "/bin/bash",
826 "-c",
827 "#!/bin/bash\nset -eu\ngo test ./pkg/..."
828 ],
829 "env": [
830 {
831 "name": "BUILD_ID"
832 },
833 {
834 "name": "JOB_NAME"
835 },
836 {
837 "name": "JOB_SPEC",
838 "value": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
839 },
840 {
841 "name": "JOB_TYPE",
842 "value": "presubmit"
843 },
844 {
845 "name": "PROW_JOB_ID"
846 },
847 {
848 "name": "PULL_BASE_REF",
849 "value": "master"
850 },
851 {
852 "name": "PULL_BASE_SHA",
853 "value": "59262a5deb65f78bea6de40de3624a9d7d3b5f24"
854 },
855 {
856 "name": "PULL_NUMBER",
857 "value": "4102"
858 },
859 {
860 "name": "PULL_PULL_SHA",
861 "value": "f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6"
862 },
863 {
864 "name": "PULL_REFS",
865 "value": "master:59262a5deb65f78bea6de40de3624a9d7d3b5f24,4102:f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6"
866 },
867 {
868 "name": "REPO_NAME",
869 "value": "release"
870 },
871 {
872 "name": "REPO_OWNER",
873 "value": "openshift"
874 }
875 ],
876 "resources": {
877 "limits": {
878 "memory": "9Gi"
879 },
880 "requests": {
881 "cpu": "3",
882 "memory": "5Gi"
883 }
884 },
885 "terminationMessagePolicy": "FallbackToLogsOnError"
886 }
887 ],
888 "restartPolicy": "Never"
889 },
890 "status": {}
891 },
892 {
893 "metadata": {
894 "name": "upi-installer",
895 "namespace": "testns",
896 "creationTimestamp": null,
897 "labels": {
898 "build-id": "",
899 "ci.openshift.io/refs.branch": "master",
900 "ci.openshift.io/refs.org": "openshift",
901 "ci.openshift.io/refs.repo": "release",
902 "created-by-ci": "true",
903 "creates": "upi-installer",
904 "job": "",
905 "prow.k8s.io/id": ""
906 },
907 "annotations": {
908 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
909 }
910 },
911 "spec": {
912 "serviceAccount": "builder",
913 "source": {
914 "type": "Image",
915 "images": [
916 {
917 "from": {
918 "kind": "ImageStreamTag",
919 "name": "pipeline:root"
920 },
921 "as": [
922 "build"
923 ],
924 "paths": null
925 },
926 {
927 "from": {
928 "kind": "ImageStreamTag",
929 "name": "pipeline:src"
930 },
931 "as": null,
932 "paths": [
933 {
934 "sourcePath": "dry-fake//.",
935 "destinationDir": "."
936 }
937 ]
938 }
939 ]
940 },
941 "strategy": {
942 "type": "Docker",
943 "dockerStrategy": {
944 "from": {
945 "kind": "ImageStreamTag",
946 "namespace": "testns",
947 "name": "pipeline:base"
948 },
949 "noCache": true,
950 "forcePull": true,
951 "dockerfilePath": "images/installer/Dockerfile.upi.ci",
952 "imageOptimizationPolicy": "SkipLayers"
953 }
954 },
955 "output": {
956 "to": {
957 "kind": "ImageStreamTag",
958 "namespace": "testns",
959 "name": "pipeline:upi-installer"
960 },
961 "imageLabels": [
962 {
963 "name": "io.openshift.build.commit.message"
964 },
965 {
966 "name": "io.openshift.build.commit.author"
967 },
968 {
969 "name": "vcs-url"
970 },
971 {
972 "name": "io.openshift.build.name"
973 },
974 {
975 "name": "io.openshift.build.commit.ref"
976 },
977 {
978 "name": "io.openshift.build.commit.id"
979 },
980 {
981 "name": "io.openshift.build.commit.date"
982 },
983 {
984 "name": "io.openshift.build.source-location"
985 },
986 {
987 "name": "io.openshift.build.source-context-dir"
988 },
989 {
990 "name": "vcs-type"
991 },
992 {
993 "name": "vcs-ref"
994 },
995 {
996 "name": "io.openshift.build.namespace"
997 }
998 ]
999 },
1000 "resources": {
1001 "limits": {
1002 "memory": "9Gi"
1003 },
1004 "requests": {
1005 "cpu": "3",
1006 "memory": "5Gi"
1007 }
1008 },
1009 "postCommit": {},
1010 "nodeSelector": null,
1011 "triggeredBy": null
1012 },
1013 "status": {
1014 "phase": "",
1015 "output": {}
1016 }
1017 },
1018 {
1019 "metadata": {
1020 "name": "stable:installer",
1021 "namespace": "testns",
1022 "creationTimestamp": null
1023 },
1024 "tag": {
1025 "name": "",
1026 "annotations": null,
1027 "from": {
1028 "kind": "ImageStreamImage",
1029 "namespace": "testns",
1030 "name": "pipeline@dry-fake"
1031 },
1032 "generation": null,
1033 "importPolicy": {},
1034 "referencePolicy": {
1035 "type": "Local"
1036 }
1037 },
1038 "generation": 0,
1039 "lookupPolicy": {
1040 "local": false
1041 },
1042 "image": {
1043 "metadata": {
1044 "creationTimestamp": null
1045 },
1046 "dockerImageMetadata": null,
1047 "dockerImageLayers": null
1048 }
1049 },
1050 {
1051 "metadata": {
1052 "name": "stable:upi-installer",
1053 "namespace": "testns",
1054 "creationTimestamp": null
1055 },
1056 "tag": {
1057 "name": "",
1058 "annotations": null,
1059 "from": {
1060 "kind": "ImageStreamImage",
1061 "namespace": "testns",
1062 "name": "pipeline@dry-fake"
1063 },
1064 "generation": null,
1065 "importPolicy": {},
1066 "referencePolicy": {
1067 "type": "Local"
1068 }
1069 },
1070 "generation": 0,
1071 "lookupPolicy": {
1072 "local": false
1073 },
1074 "image": {
1075 "metadata": {
1076 "creationTimestamp": null
1077 },
1078 "dockerImageMetadata": null,
1079 "dockerImageLayers": null
1080 }
1081 },
1082 {
1083 "metadata": {
1084 "name": "golint",
1085 "creationTimestamp": null,
1086 "labels": {
1087 "build-id": "",
1088 "ci.openshift.io/refs.branch": "master",
1089 "ci.openshift.io/refs.org": "openshift",
1090 "ci.openshift.io/refs.repo": "release",
1091 "created-by-ci": "true",
1092 "job": "",
1093 "prow.k8s.io/id": ""
1094 },
1095 "annotations": {
1096 "ci-operator.openshift.io/container-sub-tests": "test",
1097 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
1098 }
1099 },
1100 "spec": {
1101 "containers": [
1102 {
1103 "name": "test",
1104 "image": "pipeline:src",
1105 "command": [
1106 "/bin/bash",
1107 "-c",
1108 "#!/bin/bash\nset -eu\nIS_CONTAINER=TRUE ./hack/go-lint.sh -min_confidence 0.3 $(go list -f '{{ .ImportPath }}' ./...)"
1109 ],
1110 "env": [
1111 {
1112 "name": "BUILD_ID"
1113 },
1114 {
1115 "name": "JOB_NAME"
1116 },
1117 {
1118 "name": "JOB_SPEC",
1119 "value": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
1120 },
1121 {
1122 "name": "JOB_TYPE",
1123 "value": "presubmit"
1124 },
1125 {
1126 "name": "PROW_JOB_ID"
1127 },
1128 {
1129 "name": "PULL_BASE_REF",
1130 "value": "master"
1131 },
1132 {
1133 "name": "PULL_BASE_SHA",
1134 "value": "59262a5deb65f78bea6de40de3624a9d7d3b5f24"
1135 },
1136 {
1137 "name": "PULL_NUMBER",
1138 "value": "4102"
1139 },
1140 {
1141 "name": "PULL_PULL_SHA",
1142 "value": "f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6"
1143 },
1144 {
1145 "name": "PULL_REFS",
1146 "value": "master:59262a5deb65f78bea6de40de3624a9d7d3b5f24,4102:f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6"
1147 },
1148 {
1149 "name": "REPO_NAME",
1150 "value": "release"
1151 },
1152 {
1153 "name": "REPO_OWNER",
1154 "value": "openshift"
1155 }
1156 ],
1157 "resources": {
1158 "limits": {
1159 "memory": "4Gi"
1160 },
1161 "requests": {
1162 "cpu": "100m",
1163 "memory": "200Mi"
1164 }
1165 },
1166 "terminationMessagePolicy": "FallbackToLogsOnError"
1167 }
1168 ],
1169 "restartPolicy": "Never"
1170 },
1171 "status": {}
1172 },
1173 {
1174 "metadata": {
1175 "name": "stable:libvirt-installer",
1176 "namespace": "testns",
1177 "creationTimestamp": null
1178 },
1179 "tag": {
1180 "name": "",
1181 "annotations": null,
1182 "from": {
1183 "kind": "ImageStreamImage",
1184 "namespace": "testns",
1185 "name": "pipeline@dry-fake"
1186 },
1187 "generation": null,
1188 "importPolicy": {},
1189 "referencePolicy": {
1190 "type": "Local"
1191 }
1192 },
1193 "generation": 0,
1194 "lookupPolicy": {
1195 "local": false
1196 },
1197 "image": {
1198 "metadata": {
1199 "creationTimestamp": null
1200 },
1201 "dockerImageMetadata": null,
1202 "dockerImageLayers": null
1203 }
1204 },
1205 {
1206 "metadata": {
1207 "name": "stable:openstack-installer",
1208 "namespace": "testns",
1209 "creationTimestamp": null
1210 },
1211 "tag": {
1212 "name": "",
1213 "annotations": null,
1214 "from": {
1215 "kind": "ImageStreamImage",
1216 "namespace": "testns",
1217 "name": "pipeline@dry-fake"
1218 },
1219 "generation": null,
1220 "importPolicy": {},
1221 "referencePolicy": {
1222 "type": "Local"
1223 }
1224 },
1225 "generation": 0,
1226 "lookupPolicy": {
1227 "local": false
1228 },
1229 "image": {
1230 "metadata": {
1231 "creationTimestamp": null
1232 },
1233 "dockerImageMetadata": null,
1234 "dockerImageLayers": null
1235 }
1236 },
1237 {
1238 "metadata": {
1239 "name": "installer-artifacts",
1240 "namespace": "testns",
1241 "creationTimestamp": null,
1242 "labels": {
1243 "build-id": "",
1244 "ci.openshift.io/refs.branch": "master",
1245 "ci.openshift.io/refs.org": "openshift",
1246 "ci.openshift.io/refs.repo": "release",
1247 "created-by-ci": "true",
1248 "creates": "installer-artifacts",
1249 "job": "",
1250 "prow.k8s.io/id": ""
1251 },
1252 "annotations": {
1253 "ci.openshift.io/job-spec": "{\"type\":\"presubmit\",\"refs\":{\"org\":\"openshift\",\"repo\":\"release\",\"repo_link\":\"https://github.com/openshift/release\",\"base_ref\":\"master\",\"base_sha\":\"59262a5deb65f78bea6de40de3624a9d7d3b5f24\",\"pulls\":[{\"number\":4102,\"author\":\"droslean\",\"sha\":\"f4ff2602280bb9adb3095c38e50c3a4baeb6c1a6\",\"link\":\"https://github.com/openshift/release/pull/4102\"}]}}"
1254 }
1255 },
1256 "spec": {
1257 "serviceAccount": "builder",
1258 "source": {
1259 "type": "Image",
1260 "images": [
1261 {
1262 "from": {
1263 "kind": "ImageStreamTag",
1264 "name": "pipeline:root"
1265 },
1266 "as": [
1267 "build"
1268 ],
1269 "paths": null
1270 },
1271 {
1272 "from": {
1273 "kind": "ImageStreamTag",
1274 "name": "pipeline:src"
1275 },
1276 "as": null,
1277 "paths": [
1278 {
1279 "sourcePath": "dry-fake//.",
1280 "destinationDir": "."
1281 }
1282 ]
1283 }
1284 ]
1285 },
1286 "strategy": {
1287 "type": "Docker",
1288 "dockerStrategy": {
1289 "from": {
1290 "kind": "ImageStreamTag",
1291 "namespace": "testns",
1292 "name": "pipeline:installer"
1293 },
1294 "noCache": true,
1295 "forcePull": true,
1296 "dockerfilePath": "images/installer-artifacts/Dockerfile.rhel",
1297 "imageOptimizationPolicy": "SkipLayers"
1298 }
1299 },
1300 "output": {
1301 "to": {
1302 "kind": "ImageStreamTag",
1303 "namespace": "testns",
1304 "name": "pipeline:installer-artifacts"
1305 },
1306 "imageLabels": [
1307 {
1308 "name": "vcs-type"
1309 },
1310 {
1311 "name": "vcs-url"
1312 },
1313 {
1314 "name": "io.openshift.build.commit.id"
1315 },
1316 {
1317 "name": "io.openshift.build.commit.message"
1318 },
1319 {
1320 "name": "io.openshift.build.commit.author"
1321 },
1322 {
1323 "name": "io.openshift.build.source-context-dir"
1324 },
1325 {
1326 "name": "vcs-ref"
1327 },
1328 {
1329 "name": "io.openshift.build.name"
1330 },
1331 {
1332 "name": "io.openshift.build.namespace"
1333 },
1334 {
1335 "name": "io.openshift.build.commit.ref"
1336 },
1337 {
1338 "name": "io.openshift.build.commit.date"
1339 },
1340 {
1341 "name": "io.openshift.build.source-location"
1342 }
1343 ]
1344 },
1345 "resources": {
1346 "limits": {
1347 "memory": "9Gi"
1348 },
1349 "requests": {
1350 "cpu": "3",
1351 "memory": "5Gi"
1352 }
1353 },
1354 "postCommit": {},
1355 "nodeSelector": null,
1356 "triggeredBy": null
1357 },
1358 "status": {
1359 "phase": "",
1360 "output": {}
1361 }
1362 },
1363 {
1364 "metadata": {
1365 "name": "stable:installer-artifacts",
1366 "namespace": "testns",
1367 "creationTimestamp": null
1368 },
1369 "tag": {
1370 "name": "",
1371 "annotations": null,
1372 "from": {
1373 "kind": "ImageStreamImage",
1374 "namespace": "testns",
1375 "name": "pipeline@dry-fake"
1376 },
1377 "generation": null,
1378 "importPolicy": {},
1379 "referencePolicy": {
1380 "type": "Local"
1381 }
1382 },
1383 "generation": 0,
1384 "lookupPolicy": {
1385 "local": false
1386 },
1387 "image": {
1388 "metadata": {
1389 "creationTimestamp": null
1390 },
1391 "dockerImageMetadata": null,
1392 "dockerImageLayers": null
1393 }
1394 },
1395 {
1396 "kind": "Template",
1397 "apiVersion": "template.openshift.io/v1",
1398 "metadata": {
1399 "name": "cluster-launch-installer-e2e",
1400 "creationTimestamp": null
1401 },
1402 "objects": [
1403 {
1404 "apiVersion": "authorization.openshift.io/v1",
1405 "kind": "RoleBinding",
1406 "metadata": {
1407 "name": "${JOB_NAME_SAFE}-image-puller",
1408 "namespace": "${NAMESPACE}"
1409 },
1410 "roleRef": {
1411 "name": "system:image-puller"
1412 },
1413 "subjects": [
1414 {
1415 "kind": "SystemGroup",
1416 "name": "system:unauthenticated"
1417 },
1418 {
1419 "kind": "SystemGroup",
1420 "name": "system:authenticated"
1421 }
1422 ]
1423 },
1424 {
1425 "apiVersion": "authorization.openshift.io/v1",
1426 "kind": "RoleBinding",
1427 "metadata": {
1428 "name": "${JOB_NAME_SAFE}-namespace-admins",
1429 "namespace": "${NAMESPACE}"
1430 },
1431 "roleRef": {
1432 "name": "admin"
1433 },
1434 "subjects": [
1435 {
1436 "kind": "ServiceAccount",
1437 "name": "ci-chat-bot",
1438 "namespace": "ci"
1439 }
1440 ]
1441 },
1442 {
1443 "apiVersion": "v1",
1444 "kind": "Pod",
1445 "metadata": {
1446 "annotations": {
1447 "ci-operator.openshift.io/container-sub-tests": "lease,setup,test,teardown",
1448 "ci-operator.openshift.io/save-container-logs": "true",
1449 "ci-operator.openshift.io/wait-for-container-artifacts": "teardown"
1450 },
1451 "name": "${JOB_NAME_SAFE}",
1452 "namespace": "${NAMESPACE}"
1453 },
1454 "spec": {
1455 "activeDeadlineSeconds": 14400,
1456 "containers": [
1457 {
1458 "command": [
1459 "/bin/bash",
1460 "-c",
1461 "#!/bin/bash\nset -euo pipefail\n\ntrap 'rc=$?; CHILDREN=$(jobs -p); if test -n \"${CHILDREN}\"; then kill ${CHILDREN} \u0026\u0026 wait; fi; if test \"${rc}\" -ne 0; then touch /tmp/shared/exit; fi; exit \"${rc}\"' EXIT\n\n# hack for bazel\nfunction boskosctl() {\n /app/boskos/cmd/cli/app.binary \"${@}\"\n}\n\necho \"[INFO] Acquiring a lease ...\"\nresource=\"$( boskosctl --server-url http://boskos.ci --owner-name \"${CLUSTER_NAME}\" acquire --type \"${CLUSTER_TYPE}-quota-slice\" --state free --target-state leased --timeout 150m )\"\ntouch /tmp/shared/leased\necho \"[INFO] Lease acquired!\"\necho \"[INFO] Leased resource: ${resource}\"\n\nfunction release() {\n local resource_name; resource_name=\"$( jq .name --raw-output \u003c\u003c\u003c\"${resource}\" )\"\n echo \"[INFO] Releasing the lease on resouce ${resource_name}...\"\n boskosctl --server-url http://boskos.ci --owner-name \"${CLUSTER_NAME}\" release --name \"${resource_name}\" --target-state free\n}\ntrap release EXIT\n\necho \"[INFO] Sending heartbeats to retain the lease...\"\nboskosctl --server-url http://boskos.ci --owner-name \"${CLUSTER_NAME}\" heartbeat --resource \"${resource}\" \u0026\n\nwhile true; do\n if [[ -f /tmp/shared/exit ]]; then\n echo \"Another process exited\" 2\u003e\u00261\n exit 0\n fi\n\n sleep 15 \u0026 wait $!\ndone\n"
1462 ],
1463 "env": [
1464 {
1465 "name": "CLUSTER_TYPE",
1466 "value": "${CLUSTER_TYPE}"
1467 },
1468 {
1469 "name": "CLUSTER_NAME",
1470 "value": "${NAMESPACE}-${JOB_NAME_HASH}"
1471 }
1472 ],
1473 "image": "registry.svc.ci.openshift.org/ci/boskoscli:latest",
1474 "name": "lease",
1475 "resources": {
1476 "limits": {
1477 "memory": "200Mi"
1478 },
1479 "requests": {
1480 "cpu": "10m",
1481 "memory": "10Mi"
1482 }
1483 },
1484 "terminationMessagePolicy": "FallbackToLogsOnError",
1485 "volumeMounts": [
1486 {
1487 "mountPath": "/tmp/shared",
1488 "name": "shared-tmp"
1489 },
1490 {
1491 "mountPath": "/tmp/cluster",
1492 "name": "cluster-profile"
1493 },
1494 {
1495 "mountPath": "/tmp/artifacts",
1496 "name": "artifacts"
1497 }
1498 ]
1499 },
1500 {
1501 "command": [
1502 "/bin/bash",
1503 "-c",
1504 "#!/bin/bash\nset -euo pipefail\n\nexport PATH=/usr/libexec/origin:$PATH\n\ntrap 'touch /tmp/shared/exit' EXIT\ntrap 'kill $(jobs -p); exit 0' TERM\n\nmkdir -p \"${HOME}\"\n\n# wait for the API to come up\nwhile true; do\n if [[ -f /tmp/shared/exit ]]; then\n echo \"Another process exited\" 2\u003e\u00261\n exit 1\n fi\n if [[ ! -f /tmp/shared/setup-success ]]; then\n sleep 15 \u0026 wait\n continue\n fi\n # don't let clients impact the global kubeconfig\n cp \"${KUBECONFIG}\" /tmp/admin.kubeconfig\n export KUBECONFIG=/tmp/admin.kubeconfig\n break\ndone\n\n# if the cluster profile included an insights secret, install it to the cluster to\n# report support data from the support-operator\nif [[ -f /tmp/cluster/insights-live.yaml ]]; then\n oc create -f /tmp/cluster/insights-live.yaml || true\nfi\n\n# set up cloud-provider-specific env vars\nexport KUBE_SSH_BASTION=\"$( oc --insecure-skip-tls-verify get node -l node-role.kubernetes.io/master -o 'jsonpath={.items[0].status.addresses[?(@.type==\"ExternalIP\")].address}' ):22\"\nexport KUBE_SSH_KEY_PATH=/tmp/cluster/ssh-privatekey\nif [[ \"${CLUSTER_TYPE}\" == \"gcp\" ]]; then\n export GOOGLE_APPLICATION_CREDENTIALS=\"${GCP_SHARED_CREDENTIALS_FILE}\"\n export KUBE_SSH_USER=core\n mkdir -p ~/.ssh\n cp /tmp/cluster/ssh-privatekey ~/.ssh/google_compute_engine || true\n export TEST_PROVIDER='{\"type\":\"gce\",\"region\":\"us-east1\",\"multizone\": true,\"multimaster\":true,\"projectid\":\"openshift-gce-devel-ci\"}'\nelif [[ \"${CLUSTER_TYPE}\" == \"aws\" ]]; then\n mkdir -p ~/.ssh\n cp /tmp/cluster/ssh-privatekey ~/.ssh/kube_aws_rsa || true\n export PROVIDER_ARGS=\"-provider=aws -gce-zone=us-east-1\"\n # TODO: make openshift-tests auto-discover this from cluster config\n export TEST_PROVIDER='{\"type\":\"aws\",\"region\":\"us-east-1\",\"zone\":\"us-east-1a\",\"multizone\":true,\"multimaster\":true}'\n export KUBE_SSH_USER=core\nelif [[ \"${CLUSTER_TYPE}\" == \"azure4\" ]]; then\n export TEST_PROVIDER='azure'\nfi\n\n# create fips enable helper\nfunction enable_fips() {\n for name in $(oc get machineconfigpool --template='{{range .items}}{{.metadata.name}}{{\"\\n\"}}{{end}}')\n do\n cat \u003e /tmp/fips-mc.yaml \u003c\u003c'EOF'\napiVersion: machineconfiguration.openshift.io/v1\nkind: MachineConfig\nmetadata:\n labels:\n machineconfiguration.openshift.io/role: \"{{name}}\"\n name: 99-fips-\"{{name}}\"\nspec:\n fips: true\nEOF\n sed -i \"s/\\\"{{name}}\\\"/${name}/g\" /tmp/fips-mc.yaml\n oc create -f /tmp/fips-mc.yaml\n done\n\n for i in $(seq 0 10); do oc wait machineconfigpool --all --for=condition=Updating --timeout=5m \u0026\u0026 break; done\n for i in $(seq 0 10); do oc wait machineconfigpool --all --for=condition=Updated --timeout=5m \u0026\u0026 break; sleep 30; done\n}\n\nif [[ \"${ENABLE_FIPS}\" == true ]]; then\n enable_fips\nfi\n\nmkdir -p /tmp/output\ncd /tmp/output\n\nfunction retry() {\n local RETRY_IGNORE_EXIT_CODE=\"${RETRY_IGNORE_EXIT_CODE:-}\"\n local ATTEMPTS=\"${1}\"\n local rc=0\n shift\n for i in $(seq 0 $((ATTEMPTS-1))); do\n echo \"--\u003e ${@}\"\n set +e\n \"${@}\"\n rc=\"$?\"\n set -e\n echo \"--\u003e exit code: $rc\"\n test \"${rc}\" = 0 \u0026\u0026 break\n sleep 10\n done\n if [ \"${RETRY_IGNORE_EXIT_CODE}\" != \"\" ]; then return 0; else return \"${rc}\"; fi\n}\n\nfunction setup_ssh_bastion() {\n echo \"Setting up ssh bastion\"\n mkdir -p ~/.ssh || true\n cp \"${KUBE_SSH_KEY_PATH}\" ~/.ssh/id_rsa\n chmod 0600 ~/.ssh/id_rsa\n if ! whoami \u0026\u003e /dev/null; then\n if [ -w /etc/passwd ]; then\n echo \"${USER_NAME:-default}:x:$(id -u):0:${USER_NAME:-default} user:${HOME}:/sbin/nologin\" \u003e\u003e /etc/passwd\n fi\n fi\n curl https://raw.githubusercontent.com/eparis/ssh-bastion/master/deploy/deploy.sh | bash\n for i in $(seq 0 60)\n do\n BASTION_HOST=$(oc get service -n openshift-ssh-bastion ssh-bastion -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n if [ ! -z \"${BASTION_HOST}\" ]; then break; fi\n sleep 10\n done\n}\n\nfunction bastion_ssh() {\n retry 60 \\\n ssh -o LogLevel=error -o ConnectionAttempts=100 -o ConnectTimeout=30 -o StrictHostKeyChecking=no \\\n -o ProxyCommand=\"ssh -A -o StrictHostKeyChecking=no -o LogLevel=error -o ServerAliveInterval=30 -o ConnectionAttempts=100 -o ConnectTimeout=30 -W %h:%p core@${BASTION_HOST} 2\u003e/dev/null\" \\\n $@\n}\n\nfunction restore-cluster-state() {\n echo \"Placing file /etc/rollback-test with contents A\"\n cat \u003e /tmp/machineconfig.yaml \u003c\u003c'EOF'\napiVersion: machineconfiguration.openshift.io/v1\nkind: MachineConfig\nmetadata:\n labels:\n machineconfiguration.openshift.io/role: master\n name: 99-rollback-test\nspec:\n config:\n ignition:\n version: 2.2.0\n storage:\n files:\n - contents:\n source: data:,A\n filesystem: root\n mode: 420\n path: /etc/rollback-test\nEOF\n oc create -f /tmp/machineconfig.yaml\n\n function wait_for_machineconfigpool_to_apply() {\n for i in $(seq 0 10); do oc wait machineconfigpool/master --for=condition=Updating --timeout=5m \u0026\u0026 break; done\n for i in $(seq 0 10); do oc wait machineconfigpool/master --for=condition=Updated --timeout=5m \u0026\u0026 break; sleep 30; done\n }\n\n wait_for_machineconfigpool_to_apply\n\n setup_ssh_bastion\n\n echo \"Make etcd backup on first master - /usr/local/bin/etcd-snapshot-backup.sh\"\n FIRST_MASTER=$(oc get node -l node-role.kubernetes.io/master= -o name | head -n1 | cut -d '/' -f 2)\n bastion_ssh \"core@${FIRST_MASTER}\" \"sudo -i /bin/bash -x /usr/local/bin/etcd-snapshot-backup.sh /root/assets/backup/snapshot.db \u0026\u0026 sudo -i cp /root/assets/backup/snapshot.db /tmp/snapshot.db \u0026\u0026 sudo -i chown core:core /tmp/snapshot.db\"\n\n # TODO: upgrade conditionally here\n\n echo \"Update rollback-test machineconfig\"\n oc patch machineconfig 99-rollback-test -n openshift-machine-api --patch '{\"spec\":{\"config\":{\"storage\":{\"files\":[{\"contents\":{\"source\":\"data:,B\",\"verification\":{}},\"filesystem\":\"root\",\"mode\":420,\"path\":\"/etc/rollback-test\"}]}}}}' --type=merge\n wait_for_machineconfigpool_to_apply\n\n echo \"Distribute snapshot across all masters\"\n mapfile -t MASTERS \u003c \u003c(oc get node -l node-role.kubernetes.io/master= -o name | cut -d '/' -f 2)\n for master in \"${MASTERS[@]}\"\n do\n scp -o StrictHostKeyChecking=no -o ProxyCommand=\"ssh -A -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -W %h:%p core@${BASTION_HOST}\" ${KUBE_SSH_KEY_PATH} \"core@${master}\":/home/core/.ssh/id_rsa\n bastion_ssh \"core@${master}\" \"sudo -i chmod 0600 /home/core/.ssh/id_rsa\"\n bastion_ssh \"core@${FIRST_MASTER}\" \"scp -o StrictHostKeyChecking=no /tmp/snapshot.db core@${master}:/tmp/snapshot.db\"\n done\n\n echo \"Collect etcd names\"\n for master in \"${MASTERS[@]}\"\n do\n bastion_ssh \"core@${master}\" 'echo \"etcd-member-$(hostname -f)\" \u003e /tmp/etcd_name \u0026\u0026 source /run/etcd/environment \u0026\u0026 echo \"https://${ETCD_DNS_NAME}:2380\" \u003e /tmp/etcd_uri'\n bastion_ssh \"core@${FIRST_MASTER}\" \"mkdir -p /tmp/etcd/${master} \u0026\u0026 scp -o StrictHostKeyChecking=no core@${master}:/tmp/etcd_name /tmp/etcd/${master}/etcd_name \u0026\u0026 scp -o StrictHostKeyChecking=no core@${master}:/tmp/etcd_uri /tmp/etcd/${master}/etcd_uri\"\n bastion_ssh \"core@${FIRST_MASTER}\" \"cat /tmp/etcd/${master}/etcd_name\"\n bastion_ssh \"core@${FIRST_MASTER}\" \"cat /tmp/etcd/${master}/etcd_uri\"\n done\n\n echo \"Assemble etcd connection string\"\n bastion_ssh \"core@${FIRST_MASTER}\" 'rm -rf /tmp/etcd/connstring \u0026\u0026 mapfile -t MASTERS \u003c \u003c(ls /tmp/etcd) \u0026\u0026 echo ${MASTERS[@]} \u0026\u0026 for master in \"${MASTERS[@]}\"; do echo -n \"$(cat /tmp/etcd/${master}/etcd_name)=$(cat /tmp/etcd/${master}/etcd_uri),\" \u003e\u003e /tmp/etcd/connstring; done \u0026\u0026 sed -i '\"'$ s/.$//'\"' /tmp/etcd/connstring'\n\n echo \"Restore etcd cluster from snapshot\"\n for master in \"${MASTERS[@]}\"\n do\n echo \"Running /usr/local/bin/etcd-snapshot-restore.sh on ${master}\"\n bastion_ssh \"core@${FIRST_MASTER}\" \"scp -o StrictHostKeyChecking=no /tmp/etcd/connstring core@${master}:/tmp/etcd_connstring\"\n bastion_ssh \"core@${master}\" 'sudo -i /bin/bash -x /usr/local/bin/etcd-snapshot-restore.sh /tmp/snapshot.db $(cat /tmp/etcd_connstring)'\n done\n\n echo \"Wait for API server to come up\"\n for i in $(seq 0 10)\n do\n oc get nodes \u0026\u0026 break\n sleep 30\n done\n\n echo \"Wait for MCO to rollout new configs\"\n for i in $(seq 0 10); do oc get machineconfigpool/master \u003e /dev/null \u0026\u0026 break; sleep 30; done\n wait_for_machineconfigpool_to_apply\n\n echo \"Wait for all kube-apiserver pods to come back\"\n for master in ${MASTERS[@]}\n do\n oc get pod/kube-apiserver-${master} -n openshift-kube-apiserver -o name\n oc wait pod/kube-apiserver-${master} -n openshift-kube-apiserver --for condition=Ready --timeout=5m\n done\n\n echo \"Verify 99-rollback-test machineconfig\"\n MC=\"$(oc get machineconfig/99-rollback-test -o jsonpath='{.spec.config.storage.files[0].contents.source}')\"\n if [[ \"${MC}\" != \"data:,A\" ]]; then\n echo \"Unexpected MachineConfig output: ${MC}\"\n exit 1\n fi\n\n echo \"Verify /etc/rollback-test contents\"\n rc=0\n for master in \"${MASTERS[@]}\"\n do\n bastion_ssh core@${master} 'sudo -i test \"$(cat /etc/rollback-test)\" == \"A\"'\n done\n\n if [[ \"${rc}\" == \"1\" ]]; then exit 1; fi\n\n echo \"Removing ssh-bastion\"\n oc delete project openshift-ssh-bastion\n\n echo \"Remove existing openshift-apiserver pods\"\n # This would ensure \"Pod 'openshift-apiserver/apiserver-xxx' is not healthy: container openshift-apiserver has restarted more than 5 times\" test won't fail\n oc delete pod --all -n openshift-apiserver\n}\n\nfunction recover-from-etcd-quorum-loss() {\n setup_ssh_bastion\n\n # Machine API won't let the user to destroy the node which runs the controller\n echo \"Finding two masters to destroy\"\n MAPI_POD=$(oc get pod -l k8s-app=controller -n openshift-machine-api --no-headers -o name)\n SURVIVING_MASTER_NODE=$(oc get ${MAPI_POD} -n openshift-machine-api -o jsonpath='{.spec.nodeName}')\n mapfile -t MASTER_NODES_TO_REMOVE \u003c \u003c(oc get nodes -l node-role.kubernetes.io/master= -o name | grep -v \"${SURVIVING_MASTER_NODE}\")\n MASTER_MACHINES_TO_REMOVE=()\n for master in ${MASTER_NODES_TO_REMOVE[@]}\n do\n MASTER_MACHINES_TO_REMOVE+=($(oc get ${master} -o jsonpath='{.metadata.annotations.machine\\.openshift\\.io\\/machine}' | cut -d '/' -f 2))\n done\n\n echo \"Prepare etcd connstring\"\n bastion_ssh \"core@${SURVIVING_MASTER_NODE}\" 'source /run/etcd/environment \u0026\u0026 echo \"etcd-member-$(hostname -f)=https://${ETCD_DNS_NAME}:2380\" \u003e /tmp/etcd_connstring'\n\n echo \"Destroy two masters\"\n # Scale down etcd quorum guard\n oc scale --replicas=0 deployment.apps/etcd-quorum-guard -n openshift-machine-config-operator\n\n for machine in ${MASTER_MACHINES_TO_REMOVE[@]}\n do\n retry 10 oc --request-timeout=5s -n openshift-machine-api delete machine ${machine}\n done\n\n echo \"Confirm meltdown\"\n sleep 30\n oc --request-timeout=5s get nodes \u0026\u0026 exit 1\n\n echo \"Restore single etcd - /usr/local/bin/etcd-snapshot-restore.sh\"\n bastion_ssh core@${SURVIVING_MASTER_NODE} 'sudo -i /bin/bash -x /usr/local/bin/etcd-snapshot-restore.sh /root/assets/backup/etcd/member/snap/db $(cat /tmp/etcd_connstring)'\n\n echo \"Wait for API server to come up\"\n retry 30 oc get nodes\n\n # Workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1707006\n echo \"Restart SDN\"\n retry 10 oc delete pods -l app=sdn -n openshift-sdn --wait=false\n\n echo \"Create two masters via Machine API\"\n retry 10 oc get machines -n openshift-machine-api\n # Clone existing masters, update IDs and oc apply\n SURVIVING_MASTER_MACHINE=$(oc get machine -l machine.openshift.io/cluster-api-machine-role=master -n openshift-machine-api -o name | cut -d '/' -f 2)\n SURVIVING_MASTER_NUM=${SURVIVING_MASTER_MACHINE##*-}\n SURVIVING_MASTER_PREFIX=${SURVIVING_MASTER_MACHINE%-*}\n retry 10 sh -c 'oc get --export machine ${SURVIVING_MASTER_MACHINE} -n openshift-machine-api -o yaml \u003e /tmp/machine.template'\n\n MASTER_INDEX=0\n for i in $(seq 0 1); do\n if [[ \"${MASTER_INDEX}\" == \"${SURVIVING_MASTER_NUM}\" ]]; then MASTER_INDEX=$((MASTER_INDEX+1)); fi\n cat /tmp/machine.template \\\n | sed 's;selfLink.*;;g' \\\n | sed \"s;name: ${SURVIVING_MASTER_PREFIX}-${SURVIVING_MASTER_NUM};name: ${SURVIVING_MASTER_PREFIX}-${MASTER_INDEX};\" \u003e /tmp/machine_${i}.yaml\n RETRY_IGNORE_EXIT_CODE=1 retry 5 oc create -n openshift-machine-api -f /tmp/machine_${i}.yaml\n MASTER_INDEX=$((MASTER_INDEX+1))\n done\n\n echo \"Waiting for machines to be created\"\n set +e\n NEW_MASTER_IPS=()\n for i in $(seq 0 60); do\n NEW_MASTER_IPS=($(oc -n openshift-machine-api \\\n get machines \\\n -l machine.openshift.io/cluster-api-machine-role=master \\\n -o jsonpath='{range .items[*]}{.status.addresses[?(@.type==\"InternalIP\")].address}{\"\\n\"}{end}' || true))\n if [[ \"${#NEW_MASTER_IPS[@]}\" == \"3\" ]]; then break; fi\n sleep 30\n done\n oc get machines -n openshift-machine-api\n set -e\n if [[ \"${#NEW_MASTER_IPS[@]}\" != \"3\" ]]; then\n echo \"${NEW_MASTER_IPS[@]}\"\n exit 1\n fi\n\n echo \"Verify new master nodes have joined the cluster\"\n FOUND_MASTERS=0\n for i in $(seq 1 60)\n do\n FOUND_MASTERS=($(oc --request-timeout=5s get nodes -l node-role.kubernetes.io/master= -o name --no-headers || true))\n if [[ \"${#FOUND_MASTERS[@]}\" == \"3\" ]]; then break; fi\n sleep 30\n done\n oc get nodes\n if [[ \"${#FOUND_MASTERS[@]}\" != \"3\" ]]; then\n echo \"${FOUND_MASTERS[@]}\"\n exit 1\n fi\n\n echo \"Update DNS and LB\"\n # aws cli magic\n easy_install --user pip\n ~/.local/bin/pip install --user boto3\n cat \u003e /tmp/update_route_53.py \u003c\u003c'PYTHON_EOF'\nimport boto3\nimport os\nimport sys\n\nif len(sys.argv) \u003c 4:\n print(\"Usage: ./update_route_53.py \u003cDOMAIN\u003e \u003cRECORD\u003e \u003cIP\u003e\")\n sys.exit(1)\n\ndomain = sys.argv[1]\nrecord = sys.argv[2]\nip = sys.argv[3]\nprint(\"record: %s\" % record)\nprint(\"ip: %s\" % ip)\n\nclient = boto3.client('route53')\nr = client.list_hosted_zones_by_name(DNSName=domain, MaxItems=\"1\")\nzone_id = r['HostedZones'][0]['Id'].split('/')[-1]\n\nresponse = client.change_resource_record_sets(\n HostedZoneId=zone_id,\n ChangeBatch= {\n 'Comment': 'add %s -\u003e %s' % (record, ip),\n 'Changes': [\n {\n 'Action': 'UPSERT',\n 'ResourceRecordSet': {\n 'Name': record,\n 'Type': 'A',\n 'TTL': 60,\n 'ResourceRecords': [{'Value': ip}]\n }\n }]\n})\nPYTHON_EOF\n DOMAIN=$(oc whoami --show-server | grep -oP \"api.\\\\K([^\\\\:]*)\")\n for i in \"${!NEW_MASTER_IPS[@]}\"; do\n ETCD_NAME=\"etcd-${i}.${DOMAIN}\"\n python /tmp/update_route_53.py \"${DOMAIN}\" \"${ETCD_NAME}\" \"${NEW_MASTER_IPS[$i]}\"\n done\n\n echo \"Run etcd-signer\"\n SURVIVING_MASTER_NODE_SHORT=${SURVIVING_MASTER_NODE%%.*}\n curl -O https://raw.githubusercontent.com/hexfusion/openshift-recovery/master/manifests/kube-etcd-cert-signer.yaml.template\n sed \"s;__MASTER_HOSTNAME__;${SURVIVING_MASTER_NODE_SHORT};g\" kube-etcd-cert-signer.yaml.template \u003e kube-etcd-cert-signer.yaml\n retry 10 oc create -f kube-etcd-cert-signer.yaml\n retry 10 oc get pod/etcd-signer -n openshift-config -o name\n retry 10 oc wait pod/etcd-signer -n openshift-config --for condition=ready\n\n echo \"Grow etcd cluster to full membership\"\n SURVIVING_MASTER_IP=$(oc get nodes ${SURVIVING_MASTER_NODE} -o jsonpath='{.status.addresses[?(@.type==\"InternalIP\")].address}')\n SETUP_ETCD_ENVIRONMENT=$(oc adm release info --image-for setup-etcd-environment)\n KUBE_CLIENT_AGENT=$(oc adm release info --image-for kube-client-agent)\n MASTERS=($(oc -n openshift-machine-api \\\n get machines \\\n -l machine.openshift.io/cluster-api-machine-role=master \\\n -o jsonpath='{range .items[*]}{.status.addresses[?(@.type==\"InternalDNS\")].address}{\"\\n\"}{end}'))\n for master in ${MASTERS[@]}\n do\n if [[ \"${master}\" == ${SURVIVING_MASTER_NODE} ]]; then continue; fi\n echo \"Recovering ${master}\"\n ETCD_HOSTNAME='etcd-member-$(hostname -f)'\n bastion_ssh core@${master} \"sudo -i env SETUP_ETCD_ENVIRONMENT=${SETUP_ETCD_ENVIRONMENT} KUBE_CLIENT_AGENT=${KUBE_CLIENT_AGENT} /bin/bash -x /usr/local/bin/etcd-member-recover.sh ${SURVIVING_MASTER_IP} ${ETCD_HOSTNAME}\"\n done\n\n for master in ${MASTERS[@]}\n do\n retry 10 oc get pod/etcd-member-${master} -n openshift-etcd -o name\n retry 10 oc wait pod/etcd-member-${master} -n openshift-etcd --for condition=Ready\n done\n\n echo \"Removing ssh-bastion\"\n retry 10 oc delete project openshift-ssh-bastion\n\n echo \"Scale etcd-quorum guard\"\n retry 10 oc scale --replicas=3 deployment.apps/etcd-quorum-guard -n openshift-machine-config-operator\n\n echo \"Remove etcd-signer\"\n oc delete pod/etcd-signer -n openshift-config\n\n echo \"Sleeping for a minute to make sure Prometheus are no longer firing\"\n sleep 60\n}\n\nfunction setup-google-cloud-sdk() {\n pushd /tmp\n curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-256.0.0-linux-x86_64.tar.gz\n tar -xzf google-cloud-sdk-256.0.0-linux-x86_64.tar.gz\n export PATH=$PATH:/tmp/google-cloud-sdk/bin\n mkdir gcloudconfig\n export CLOUDSDK_CONFIG=/tmp/gcloudconfig\n gcloud auth activate-service-account --key-file=\"${GCP_SHARED_CREDENTIALS_FILE}\"\n gcloud config set project openshift-gce-devel-ci\n popd\n}\n\nfunction run-dr-snapshot-tests() {\n openshift-tests run-dr restore-snapshot \"${TEST_SUITE}\" \\\n --provider \"${TEST_PROVIDER:-}\" -o /tmp/artifacts/e2e.log --junit-dir /tmp/artifacts/junit\n exit 0\n}\n\nfunction run-dr-quorum-tests() {\n openshift-tests run-dr quorum-restore \"${TEST_SUITE}\" \\\n --provider \"${TEST_PROVIDER:-}\" -o /tmp/artifacts/e2e.log --junit-dir /tmp/artifacts/junit\n exit 0\n}\n\nfunction run-upgrade-tests() {\n openshift-tests run-upgrade \"${TEST_SUITE}\" --to-image \"${RELEASE_IMAGE_LATEST}\" \\\n --provider \"${TEST_PROVIDER:-}\" -o /tmp/artifacts/e2e.log --junit-dir /tmp/artifacts/junit\n exit 0\n}\n\nfunction run-tests() {\n openshift-tests run \"${TEST_SUITE}\" \\\n --provider \"${TEST_PROVIDER:-}\" -o /tmp/artifacts/e2e.log --junit-dir /tmp/artifacts/junit\n exit 0\n}\n\nif [[ \"${CLUSTER_TYPE}\" == \"gcp\" ]]; then\n setup-google-cloud-sdk\nfi\n\n${TEST_COMMAND}\n"
1505 ],
1506 "env": [
1507 {
1508 "name": "AWS_SHARED_CREDENTIALS_FILE",
1509 "value": "/tmp/cluster/.awscred"
1510 },
1511 {
1512 "name": "AZURE_AUTH_LOCATION",
1513 "value": "/tmp/cluster/osServicePrincipal.json"
1514 },
1515 {
1516 "name": "GCP_SHARED_CREDENTIALS_FILE",
1517 "value": "/tmp/cluster/gce.json"
1518 },
1519 {
1520 "name": "ARTIFACT_DIR",
1521 "value": "/tmp/artifacts"
1522 },
1523 {
1524 "name": "HOME",
1525 "value": "/tmp/home"
1526 },
1527 {
1528 "name": "IMAGE_FORMAT",
1529 "value": "${IMAGE_FORMAT}"
1530 },
1531 {
1532 "name": "KUBECONFIG",
1533 "value": "/tmp/artifacts/installer/auth/kubeconfig"
1534 }
1535 ],
1536 "image": "${IMAGE_TESTS}",
1537 "name": "test",
1538 "resources": {
1539 "limits": {
1540 "memory": "3Gi"
1541 },
1542 "requests": {
1543 "cpu": 3,
1544 "memory": "300Mi"
1545 }
1546 },
1547 "terminationMessagePolicy": "FallbackToLogsOnError",
1548 "volumeMounts": [
1549 {
1550 "mountPath": "/tmp/shared",
1551 "name": "shared-tmp"
1552 },
1553 {
1554 "mountPath": "/tmp/cluster",
1555 "name": "cluster-profile"
1556 },
1557 {
1558 "mountPath": "/tmp/artifacts",
1559 "name": "artifacts"
1560 }
1561 ]
1562 },
1563 {
1564 "command": [
1565 "/bin/sh",
1566 "-c",
1567 "#!/bin/sh\ntrap 'rc=$?; if test \"${rc}\" -eq 0; then touch /tmp/setup-success; else touch /tmp/exit; fi; exit \"${rc}\"' EXIT\ntrap 'CHILDREN=$(jobs -p); if test -n \"${CHILDREN}\"; then kill ${CHILDREN} \u0026\u0026 wait; fi' TERM\n\nwhile true; do\n if [[ -f /tmp/exit ]]; then\n echo \"Another process exited\" 2\u003e\u00261\n exit 1\n fi\n if [[ -f /tmp/leased ]]; then\n echo \"Lease acquired, installing...\"\n break\n fi\n\n sleep 15 \u0026 wait\ndone\n\ncp \"$(command -v openshift-install)\" /tmp\nmkdir /tmp/artifacts/installer\n\nif [[ -n \"${INSTALL_INITIAL_RELEASE}\" \u0026\u0026 -n \"${RELEASE_IMAGE_INITIAL}\" ]]; then\n echo \"Installing from initial release ${RELEASE_IMAGE_INITIAL}\"\n OPENSHIFT_INSTALL_RELEASE_IMAGE_OVERRIDE=\"${RELEASE_IMAGE_INITIAL}\"\nelse\n echo \"Installing from release ${RELEASE_IMAGE_LATEST}\"\nfi\n\nexport EXPIRATION_DATE=$(date -d '4 hours' --iso=minutes --utc)\nexport SSH_PUB_KEY=$(cat \"${SSH_PUB_KEY_PATH}\")\nexport PULL_SECRET=$(cat \"${PULL_SECRET_PATH}\")\n\n## move private key to ~/.ssh/ so that installer can use it to gather logs on bootstrap failure\nmkdir -p ~/.ssh\ncp \"${SSH_PRIV_KEY_PATH}\" ~/.ssh/\n\nif [[ \"${CLUSTER_TYPE}\" == \"aws\" ]]; then\n cat \u003e /tmp/artifacts/installer/install-config.yaml \u003c\u003c EOF\napiVersion: v1\nbaseDomain: ${BASE_DOMAIN:-origin-ci-int-aws.dev.rhcloud.com}\nmetadata:\n name: ${CLUSTER_NAME}\ncontrolPlane:\n name: master\n replicas: 3\n platform:\n aws:\n zones:\n - us-east-1a\n - us-east-1b\ncompute:\n- name: worker\n replicas: 3\n platform:\n aws:\n type: m4.xlarge\n zones:\n - us-east-1a\n - us-east-1b\nplatform:\n aws:\n region: ${AWS_REGION}\n userTags:\n expirationDate: ${EXPIRATION_DATE}\npullSecret: \u003e\n ${PULL_SECRET}\nsshKey: |\n ${SSH_PUB_KEY}\nEOF\nelif [[ \"${CLUSTER_TYPE}\" == \"azure4\" ]]; then\n cat \u003e /tmp/artifacts/installer/install-config.yaml \u003c\u003c EOF\napiVersion: v1\nbaseDomain: ${BASE_DOMAIN:-ci.azure.devcluster.openshift.com}\nmetadata:\n name: ${CLUSTER_NAME}\ncontrolPlane:\n name: master\n replicas: 3\ncompute:\n- name: worker\n replicas: 3\nplatform:\n azure:\n baseDomainResourceGroupName: os4-common\n region: ${AZURE_REGION}\npullSecret: \u003e\n ${PULL_SECRET}\nsshKey: |\n ${SSH_PUB_KEY}\nEOF\nelif [[ \"${CLUSTER_TYPE}\" == \"gcp\" ]]; then\n cat \u003e /tmp/artifacts/installer/install-config.yaml \u003c\u003c EOF\napiVersion: v1\nbaseDomain: ${BASE_DOMAIN:-origin-ci-int-gce.dev.openshift.com}\nmetadata:\n name: ${CLUSTER_NAME}\ncontrolPlane:\n name: master\n replicas: 3\ncompute:\n- name: worker\n replicas: 3\nplatform:\n gcp:\n projectID: ${GCP_PROJECT}\n region: ${GCP_REGION}\npullSecret: \u003e\n ${PULL_SECRET}\nsshKey: |\n ${SSH_PUB_KEY}\nEOF\nelse\n echo \"Unsupported cluster type '${CLUSTER_TYPE}'\"\n exit 1\nfi\n\n# as a current stop gap -- this is pointing to a proxy hosted in\n# the namespace \"ci-test-ewolinet\" on the ci cluster\nif [[ \"${ENABLE_PROXY}\" == \"true\" ]]; then\n cat \u003e\u003e /tmp/artifacts/installer/install-config.yaml \u003c\u003c EOF\nproxy:\n httpsProxy: https://admin:admin@35.231.5.161:3128/\n httpProxy: http://admin:admin@35.196.128.173:3128/\nadditionalTrustBundle: |\n -----BEGIN CERTIFICATE-----\n MIIC6jCCAdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu\n c2hpZnQtc2lnbmVyQDE1NjU2NDA4NzYwHhcNMTkwODEyMjAxNDM1WhcNMjQwODEw\n MjAxNDM2WjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1NjU2NDA4NzYw\n ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzbYmY8T9SPUS9c4VG1DNA\n Ub5WKz/NJigFVJ0ei9+mIMF2mHFJlRjHaOs7HaOWTcQNkNBhBfKvNcK8ZKd+kBVB\n CaT9TXOmXlDpaMbnGiGQeBaGrA2S1FzxkQbZDaztN8S3lgydzAVYN7QehRKtP7Zp\n +55gdlw0qvQiepRQaq4RWCgoALY4aJzZRWc/ZTY+wiMURuusC/viVpxhnOrZ5ZkD\n FjnGY+MxB2O4KuSuI6868Sk24ZQ7d9ocRCNRbsinpZTafz9/IpxxoR06PsSNN0NI\n 4cpckcTmSysLePTSr+cVvgc9Nr+TJxISC3gtn2U80l/uml1crQ7yfpq7Lf/NPa/b\n AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG\n SIb3DQEBCwUAA4IBAQCTpgR0rXLZH9WFu9RBxqa7MXdAnmb7hlcKkQHRqVKgTk2N\n z2Hio6l9mHdi42gihWAUKBIwYs2Axk/jjqaI03+CyutZvdnt9N55lsa0qntHuFm5\n jstKn08+IiX6tRRhMqIK27exV0HRbzeAyMDbhjReHnq1OnW/ycyv4p5BdOtuxTox\n 8yOmu4a5lKgNfmK5qpE/VsX2jEpqmjck/JaVldcGoICd2DCoMYdHpm7ROFmdTApJ\n WqtDEPIq0PUnMrlr6Ba5GCS3385BWSMvYsbzIiyKXn7hEGh/oFQR2HXix7lYyEyd\n 7t6Hv8LhnjP4+HoGlxTSReJ0lXv7mEK0FKXOdkHd\n -----END CERTIFICATE-----\nEOF\nfi\n\nif [[ -n \"${CLUSTER_NETWORK_TYPE}\" ]]; then\n cat \u003e\u003e /tmp/artifacts/installer/install-config.yaml \u003c\u003c EOF\nnetworking:\n networkType: ${CLUSTER_NETWORK_TYPE}\nEOF\nfi\n\n# TODO: Replace with a more concise manifest injection approach\nif [[ -n \"${CLUSTER_NETWORK_MANIFEST}\" ]]; then\n openshift-install --dir=/tmp/artifacts/installer/ create manifests\n echo \"${CLUSTER_NETWORK_MANIFEST}\" \u003e /tmp/artifacts/installer/manifests/cluster-network-03-config.yml\nfi\n\nTF_LOG=debug openshift-install --dir=/tmp/artifacts/installer create cluster \u0026\nwait \"$!\"\n"
1568 ],
1569 "env": [
1570 {
1571 "name": "TYPE",
1572 "value": "${CLUSTER_TYPE}"
1573 },
1574 {
1575 "name": "AWS_SHARED_CREDENTIALS_FILE",
1576 "value": "/etc/openshift-installer/.awscred"
1577 },
1578 {
1579 "name": "AWS_REGION",
1580 "value": "us-east-1"
1581 },
1582 {
1583 "name": "AZURE_AUTH_LOCATION",
1584 "value": "/etc/openshift-installer/osServicePrincipal.json"
1585 },
1586 {
1587 "name": "AZURE_REGION",
1588 "value": "centralus"
1589 },
1590 {
1591 "name": "GCP_REGION",
1592 "value": "us-east1"
1593 },
1594 {
1595 "name": "GCP_PROJECT",
1596 "value": "openshift-gce-devel-ci"
1597 },
1598 {
1599 "name": "GOOGLE_CLOUD_KEYFILE_JSON",
1600 "value": "/etc/openshift-installer/gce.json"
1601 },
1602 {
1603 "name": "CLUSTER_NAME",
1604 "value": "${NAMESPACE}-${JOB_NAME_HASH}"
1605 },
1606 {
1607 "name": "BASE_DOMAIN",
1608 "value": "${BASE_DOMAIN}"
1609 },
1610 {
1611 "name": "SSH_PRIV_KEY_PATH",
1612 "value": "/etc/openshift-installer/ssh-privatekey"
1613 },
1614 {
1615 "name": "SSH_PUB_KEY_PATH",
1616 "value": "/etc/openshift-installer/ssh-publickey"
1617 },
1618 {
1619 "name": "PULL_SECRET_PATH",
1620 "value": "/etc/openshift-installer/pull-secret"
1621 },
1622 {
1623 "name": "OPENSHIFT_INSTALL_RELEASE_IMAGE_OVERRIDE",
1624 "value": "${RELEASE_IMAGE_LATEST}"
1625 },
1626 {
1627 "name": "OPENSHIFT_INSTALL_INVOKER",
1628 "value": "openshift-internal-ci/${JOB_NAME_SAFE}/${BUILD_ID}"
1629 },
1630 {
1631 "name": "USER",
1632 "value": "test"
1633 },
1634 {
1635 "name": "HOME",
1636 "value": "/tmp"
1637 },
1638 {
1639 "name": "INSTALL_INITIAL_RELEASE"
1640 },
1641 {
1642 "name": "RELEASE_IMAGE_INITIAL"
1643 }
1644 ],
1645 "image": "${IMAGE_INSTALLER}",
1646 "name": "setup",
1647 "terminationMessagePolicy": "FallbackToLogsOnError",
1648 "volumeMounts": [
1649 {
1650 "mountPath": "/tmp",
1651 "name": "shared-tmp"
1652 },
1653 {
1654 "mountPath": "/etc/openshift-installer",
1655 "name": "cluster-profile"
1656 },
1657 {
1658 "mountPath": "/tmp/artifacts",
1659 "name": "artifacts"
1660 }
1661 ]
1662 },
1663 {
1664 "command": [
1665 "/bin/bash",
1666 "-c",
1667 "#!/bin/bash\nfunction queue() {\n local TARGET=\"${1}\"\n shift\n local LIVE=\"$(jobs | wc -l)\"\n while [[ \"${LIVE}\" -ge 45 ]]; do\n sleep 1\n LIVE=\"$(jobs | wc -l)\"\n done\n echo \"${@}\"\n if [[ -n \"${FILTER}\" ]]; then\n \"${@}\" | \"${FILTER}\" \u003e\"${TARGET}\" \u0026\n else\n \"${@}\" \u003e\"${TARGET}\" \u0026\n fi\n}\n\nfunction teardown() {\n set +e\n touch /tmp/shared/exit\n export PATH=$PATH:/tmp/shared\n\n echo \"Gathering artifacts ...\"\n mkdir -p /tmp/artifacts/pods /tmp/artifacts/nodes /tmp/artifacts/metrics /tmp/artifacts/bootstrap /tmp/artifacts/network\n\n\n if [ -f /tmp/artifacts/installer/terraform.tfstate ]\n then\n # we don't have jq, so the python equivalent of\n # jq '.modules[].resources.\"aws_instance.bootstrap\".primary.attributes.\"public_ip\" | select(.)'\n bootstrap_ip=$(python -c \\\n 'import sys, json; d=reduce(lambda x,y: dict(x.items() + y.items()), map(lambda x: x[\"resources\"], json.load(sys.stdin)[\"modules\"])); k=\"aws_instance.bootstrap\"; print d[k][\"primary\"][\"attributes\"][\"public_ip\"] if k in d else \"\"' \\\n \u003c /tmp/artifacts/installer/terraform.tfstate\n )\n\n if [ -n \"${bootstrap_ip}\" ]\n then\n for service in bootkube openshift kubelet crio\n do\n queue \"/tmp/artifacts/bootstrap/${service}.service\" curl \\\n --insecure \\\n --silent \\\n --connect-timeout 5 \\\n --retry 3 \\\n --cert /tmp/artifacts/installer/tls/journal-gatewayd.crt \\\n --key /tmp/artifacts/installer/tls/journal-gatewayd.key \\\n --url \"https://${bootstrap_ip}:19531/entries?_SYSTEMD_UNIT=${service}.service\"\n done\n if ! whoami \u0026\u003e /dev/null; then\n if [ -w /etc/passwd ]; then\n echo \"${USER_NAME:-default}:x:$(id -u):0:${USER_NAME:-default} user:${HOME}:/sbin/nologin\" \u003e\u003e /etc/passwd\n fi\n fi\n eval $(ssh-agent)\n ssh-add /etc/openshift-installer/ssh-privatekey\n ssh -A -o PreferredAuthentications=publickey -o StrictHostKeyChecking=false -o UserKnownHostsFile=/dev/null core@${bootstrap_ip} /bin/bash -x /usr/local/bin/installer-gather.sh\n scp -o PreferredAuthentications=publickey -o StrictHostKeyChecking=false -o UserKnownHostsFile=/dev/null core@${bootstrap_ip}:log-bundle.tar.gz /tmp/artifacts/installer/bootstrap-logs.tar.gz\n fi\n else\n echo \"No terraform statefile found. Skipping collection of bootstrap logs.\"\n fi\n\n oc --insecure-skip-tls-verify --request-timeout=5s get nodes -o jsonpath --template '{range .items[*]}{.metadata.name}{\"\\n\"}{end}' \u003e /tmp/nodes\n oc --insecure-skip-tls-verify --request-timeout=5s get pods --all-namespaces --template '{{ range .items }}{{ $name := .metadata.name }}{{ $ns := .metadata.namespace }}{{ range .spec.containers }}-n {{ $ns }} {{ $name }} -c {{ .name }}{{ \"\\n\" }}{{ end }}{{ range .spec.initContainers }}-n {{ $ns }} {{ $name }} -c {{ .name }}{{ \"\\n\" }}{{ end }}{{ end }}' \u003e /tmp/containers\n oc --insecure-skip-tls-verify --request-timeout=5s get pods -l openshift.io/component=api --all-namespaces --template '{{ range .items }}-n {{ .metadata.namespace }} {{ .metadata.name }}{{ \"\\n\" }}{{ end }}' \u003e /tmp/pods-api\n\n queue /tmp/artifacts/config-resources.json oc --insecure-skip-tls-verify --request-timeout=5s get apiserver.config.openshift.io authentication.config.openshift.io build.config.openshift.io console.config.openshift.io dns.config.openshift.io featuregate.config.openshift.io image.config.openshift.io infrastructure.config.openshift.io ingress.config.openshift.io network.config.openshift.io oauth.config.openshift.io project.config.openshift.io scheduler.config.openshift.io -o json\n queue /tmp/artifacts/apiservices.json oc --insecure-skip-tls-verify --request-timeout=5s get apiservices -o json\n queue /tmp/artifacts/clusteroperators.json oc --insecure-skip-tls-verify --request-timeout=5s get clusteroperators -o json\n queue /tmp/artifacts/clusterversion.json oc --insecure-skip-tls-verify --request-timeout=5s get clusterversion -o json\n queue /tmp/artifacts/configmaps.json oc --insecure-skip-tls-verify --request-timeout=5s get configmaps --all-namespaces -o json\n queue /tmp/artifacts/credentialsrequests.json oc --insecure-skip-tls-verify --request-timeout=5s get credentialsrequests --all-namespaces -o json\n queue /tmp/artifacts/csr.json oc --insecure-skip-tls-verify --request-timeout=5s get csr -o json\n queue /tmp/artifacts/endpoints.json oc --insecure-skip-tls-verify --request-timeout=5s get endpoints --all-namespaces -o json\n FILTER=gzip queue /tmp/artifacts/deployments.json.gz oc --insecure-skip-tls-verify --request-timeout=5s get deployments --all-namespaces -o json\n FILTER=gzip queue /tmp/artifacts/daemonsets.json.gz oc --insecure-skip-tls-verify --request-timeout=5s get daemonsets --all-namespaces -o json\n queue /tmp/artifacts/events.json oc --insecure-skip-tls-verify --request-timeout=5s get events --all-namespaces -o json\n queue /tmp/artifacts/kubeapiserver.json oc --insecure-skip-tls-verify --request-timeout=5s get kubeapiserver -o json\n queue /tmp/artifacts/kubecontrollermanager.json oc --insecure-skip-tls-verify --request-timeout=5s get kubecontrollermanager -o json\n queue /tmp/artifacts/machineconfigpools.json oc --insecure-skip-tls-verify --request-timeout=5s get machineconfigpools -o json\n queue /tmp/artifacts/machineconfigs.json oc --insecure-skip-tls-verify --request-timeout=5s get machineconfigs -o json\n queue /tmp/artifacts/namespaces.json oc --insecure-skip-tls-verify --request-timeout=5s get namespaces -o json\n queue /tmp/artifacts/nodes.json oc --insecure-skip-tls-verify --request-timeout=5s get nodes -o json\n queue /tmp/artifacts/openshiftapiserver.json oc --insecure-skip-tls-verify --request-timeout=5s get openshiftapiserver -o json\n queue /tmp/artifacts/pods.json oc --insecure-skip-tls-verify --request-timeout=5s get pods --all-namespaces -o json\n queue /tmp/artifacts/persistentvolumes.json oc --insecure-skip-tls-verify --request-timeout=5s get persistentvolumes --all-namespaces -o json\n queue /tmp/artifacts/persistentvolumeclaims.json oc --insecure-skip-tls-verify --request-timeout=5s get persistentvolumeclaims --all-namespaces -o json\n FILTER=gzip queue /tmp/artifacts/replicasets.json.gz oc --insecure-skip-tls-verify --request-timeout=5s get replicasets --all-namespaces -o json\n queue /tmp/artifacts/rolebindings.json oc --insecure-skip-tls-verify --request-timeout=5s get rolebindings --all-namespaces -o json\n queue /tmp/artifacts/roles.json oc --insecure-skip-tls-verify --request-timeout=5s get roles --all-namespaces -o json\n queue /tmp/artifacts/services.json oc --insecure-skip-tls-verify --request-timeout=5s get services --all-namespaces -o json\n FILTER=gzip queue /tmp/artifacts/statefulsets.json.gz oc --insecure-skip-tls-verify --request-timeout=5s get statefulsets --all-namespaces -o json\n\n FILTER=gzip queue /tmp/artifacts/openapi.json.gz oc --insecure-skip-tls-verify --request-timeout=5s get --raw /openapi/v2\n\n # gather nodes first in parallel since they may contain the most relevant debugging info\n while IFS= read -r i; do\n mkdir -p /tmp/artifacts/nodes/$i\n queue /tmp/artifacts/nodes/$i/heap oc --insecure-skip-tls-verify get --request-timeout=20s --raw /api/v1/nodes/$i/proxy/debug/pprof/heap\n done \u003c /tmp/nodes\n\n FILTER=gzip queue /tmp/artifacts/nodes/masters-journal.gz oc --insecure-skip-tls-verify adm node-logs --role=master --unify=false\n FILTER=gzip queue /tmp/artifacts/nodes/workers-journal.gz oc --insecure-skip-tls-verify adm node-logs --role=worker --unify=false\n\n # Snapshot iptables-save on each node for debugging possible kube-proxy issues\n oc --insecure-skip-tls-verify get --request-timeout=20s -n openshift-sdn -l app=sdn pods --template '{{ range .items }}{{ .metadata.name }}{{ \"\\n\" }}{{ end }}' \u003e /tmp/sdn-pods\n while IFS= read -r i; do\n queue /tmp/artifacts/network/iptables-save-$i oc --insecure-skip-tls-verify rsh --timeout=20 -n openshift-sdn -c sdn $i iptables-save -c\n done \u003c /tmp/sdn-pods\n\n while IFS= read -r i; do\n file=\"$( echo \"$i\" | cut -d ' ' -f 3 | tr -s ' ' '_' )\"\n queue /tmp/artifacts/metrics/${file}-heap oc --insecure-skip-tls-verify exec $i -- /bin/bash -c 'oc --insecure-skip-tls-verify get --raw /debug/pprof/heap --server \"https://$( hostname ):8443\" --config /etc/origin/master/admin.kubeconfig'\n queue /tmp/artifacts/metrics/${file}-controllers-heap oc --insecure-skip-tls-verify exec $i -- /bin/bash -c 'oc --insecure-skip-tls-verify get --raw /debug/pprof/heap --server \"https://$( hostname ):8444\" --config /etc/origin/master/admin.kubeconfig'\n done \u003c /tmp/pods-api\n\n while IFS= read -r i; do\n file=\"$( echo \"$i\" | cut -d ' ' -f 2,3,5 | tr -s ' ' '_' )\"\n FILTER=gzip queue /tmp/artifacts/pods/${file}.log.gz oc --insecure-skip-tls-verify logs --request-timeout=20s $i\n FILTER=gzip queue /tmp/artifacts/pods/${file}_previous.log.gz oc --insecure-skip-tls-verify logs --request-timeout=20s -p $i\n done \u003c /tmp/containers\n\n echo \"Snapshotting prometheus (may take 15s) ...\"\n queue /tmp/artifacts/metrics/prometheus.tar.gz oc --insecure-skip-tls-verify exec -n openshift-monitoring prometheus-k8s-0 -- tar cvzf - -C /prometheus .\n\n echo \"Running must-gather...\"\n mkdir -p /tmp/artifacts/must-gather\n queue /tmp/artifacts/must-gather/must-gather.log oc --insecure-skip-tls-verify adm must-gather --dest-dir /tmp/artifacts/must-gather\n\n echo \"Waiting for logs ...\"\n wait\n\n echo \"Deprovisioning cluster ...\"\n openshift-install --dir /tmp/artifacts/installer destroy cluster\n}\n\ntrap 'teardown' EXIT\ntrap 'kill $(jobs -p); exit 0' TERM\n\nfor i in $(seq 1 180); do\n if [[ -f /tmp/shared/exit ]]; then\n exit 0\n fi\n sleep 60 \u0026 wait\ndone\n"
1668 ],
1669 "env": [
1670 {
1671 "name": "INSTANCE_PREFIX",
1672 "value": "${NAMESPACE}-${JOB_NAME_HASH}"
1673 },
1674 {
1675 "name": "TYPE",
1676 "value": "${CLUSTER_TYPE}"
1677 },
1678 {
1679 "name": "AWS_SHARED_CREDENTIALS_FILE",
1680 "value": "/etc/openshift-installer/.awscred"
1681 },
1682 {
1683 "name": "AWS_REGION",
1684 "value": "us-east-1"
1685 },
1686 {
1687 "name": "AZURE_AUTH_LOCATION",
1688 "value": "/etc/openshift-installer/osServicePrincipal.json"
1689 },
1690 {
1691 "name": "AZURE_REGION",
1692 "value": "centralus"
1693 },
1694 {
1695 "name": "GOOGLE_CLOUD_KEYFILE_JSON",
1696 "value": "/etc/openshift-installer/gce.json"
1697 },
1698 {
1699 "name": "KUBECONFIG",
1700 "value": "/tmp/artifacts/installer/auth/kubeconfig"
1701 }
1702 ],
1703 "image": "${IMAGE_TESTS}",
1704 "name": "teardown",
1705 "terminationMessagePolicy": "FallbackToLogsOnError",
1706 "volumeMounts": [
1707 {
1708 "mountPath": "/tmp/shared",
1709 "name": "shared-tmp"
1710 },
1711 {
1712 "mountPath": "/etc/openshift-installer",
1713 "name": "cluster-profile"
1714 },
1715 {
1716 "mountPath": "/tmp/artifacts",
1717 "name": "artifacts"
1718 }
1719 ]
1720 }
1721 ],
1722 "restartPolicy": "Never",
1723 "terminationGracePeriodSeconds": 900,
1724 "volumes": [
1725 {
1726 "emptyDir": {},
1727 "name": "artifacts"
1728 },
1729 {
1730 "emptyDir": {},
1731 "name": "shared-tmp"
1732 },
1733 {
1734 "name": "cluster-profile",
1735 "secret": {
1736 "secretName": "${JOB_NAME_SAFE}-cluster-profile"
1737 }
1738 }
1739 ]
1740 }
1741 }
1742 ],
1743 "parameters": [
1744 {
1745 "name": "JOB_NAME_SAFE",
1746 "required": true
1747 },
1748 {
1749 "name": "JOB_NAME_HASH",
1750 "value": "e3b0c",
1751 "required": true
1752 },
1753 {
1754 "name": "NAMESPACE",
1755 "value": "testns",
1756 "required": true
1757 },
1758 {
1759 "name": "IMAGE_FORMAT",
1760 "value": "test"
1761 },
1762 {
1763 "name": "IMAGE_INSTALLER",
1764 "value": "test",
1765 "required": true
1766 },
1767 {
1768 "name": "IMAGE_TESTS",
1769 "value": "test",
1770 "required": true
1771 },
1772 {
1773 "name": "CLUSTER_TYPE",
1774 "value": "aws",
1775 "required": true
1776 },
1777 {
1778 "name": "TEST_COMMAND",
1779 "value": "test",
1780 "required": true
1781 },
1782 {
1783 "name": "RELEASE_IMAGE_LATEST",
1784 "required": true
1785 },
1786 {
1787 "name": "BASE_DOMAIN"
1788 },
1789 {
1790 "name": "CLUSTER_NETWORK_MANIFEST"
1791 },
1792 {
1793 "name": "CLUSTER_NETWORK_TYPE"
1794 },
1795 {
1796 "name": "ENABLE_FIPS"
1797 },
1798 {
1799 "name": "ENABLE_PROXY"
1800 },
1801 {
1802 "name": "BUILD_ID"
1803 }
1804 ],
1805 "labels": {
1806 "ci.openshift.io/refs.branch": "master",
1807 "ci.openshift.io/refs.org": "openshift",
1808 "ci.openshift.io/refs.repo": "release"
1809 }
1810 }
1811]