diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..d78c7eb
--- /dev/null
+++ b/404.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Kubernetes + Knative + GitLab + Harbor
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8c5df15
--- /dev/null
+++ b/README.md
@@ -0,0 +1,33 @@
+# Kubernetes + Knative + GitLab + Harbor
+
+[![Build Status](https://github.com/ruzickap/k8s-knative-gitlab-harbor/workflows/vuepress-build/badge.svg)](https://github.com/ruzickap/k8s-knative-gitlab-harbor)
+
+* Demo GitHub repository: [https://github.com/ruzickap/k8s-knative-gitlab-harbor](https://github.com/ruzickap/k8s-knative-gitlab-harbor)
+* Demo Web Pages: [https://ruzickap.github.io/k8s-knative-gitlab-harbor](https://ruzickap.github.io/k8s-knative-gitlab-harbor)
+* Asciinema: [https://asciinema.org/a/290547](https://asciinema.org/a/290547)
+
+## Requirements
+
+* [awscli](https://aws.amazon.com/cli/)
+* [AWS IAM Authenticator for Kubernetes](https://github.com/kubernetes-sigs/aws-iam-authenticator)
+* [AWS account](https://aws.amazon.com/account/)
+* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
+* [kops](https://github.com/kubernetes/kops)
+* Kubernetes, Docker, Linux, AWS knowledge required
+
+## Content
+
+* [Part 01 - Create "kops" cluster](https://github.com/ruzickap/k8s-knative-gitlab-harbor/tree/main/docs/part-01/README.md)
+* [Part 02 - Install Helm](https://github.com/ruzickap/k8s-knative-gitlab-harbor/tree/main/docs/part-02/README.md)
+* [Part 03 - Istio + cert-manager + kubed installation](https://github.com/ruzickap/k8s-knative-gitlab-harbor/tree/main/docs/part-03/README.md)
+* [Part 04 - Harbor installation](https://github.com/ruzickap/k8s-knative-gitlab-harbor/tree/main/docs/part-04/README.md)
+* [Part 05 - GitLab installation](https://github.com/ruzickap/k8s-knative-gitlab-harbor/tree/main/docs/part-05/README.md)
+* [Part 06 - Knative installation](https://github.com/ruzickap/k8s-knative-gitlab-harbor/tree/main/docs/part-06/README.md)
+* [Part 07 - Build and run container image using Knative + Tekton](https://github.com/ruzickap/k8s-knative-gitlab-harbor/tree/main/docs/part-07/README.md)
+* [Part 08 - Automated deployment with Tekton](https://github.com/ruzickap/k8s-knative-gitlab-harbor/tree/main/docs/part-08/README.md)
+* [Part 09 - Knative operations](https://github.com/ruzickap/k8s-knative-gitlab-harbor/tree/main/docs/part-09/README.md)
+* [Part 10 - Clean-up](https://github.com/ruzickap/k8s-knative-gitlab-harbor/tree/main/docs/part-10/README.md)
+
+## Asciinema
+
+[![asciicast](https://asciinema.org/a/290547.svg)](https://asciinema.org/a/290547)
diff --git a/assets/css/0.styles.985b6b59.css b/assets/css/0.styles.985b6b59.css
new file mode 100644
index 0000000..e72093d
--- /dev/null
+++ b/assets/css/0.styles.985b6b59.css
@@ -0,0 +1 @@
+.medium-zoom-overlay{z-index:100}.medium-zoom-overlay~img{z-index:101}html{scroll-behavior:smooth}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#3eaf7c}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;-webkit-user-select:none;user-select:none;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#nprogress{pointer-events:none}#nprogress .bar{background:#3eaf7c;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #3eaf7c,0 0 5px #3eaf7c;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#3eaf7c transparent transparent #3eaf7c;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.go-to-top[data-v-5fd4ef0c]{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;color:#3eaf7c;z-index:1}.go-to-top[data-v-5fd4ef0c]:hover{color:#72cda4}@media (max-width:959px){.go-to-top[data-v-5fd4ef0c]{display:none}}.fade-enter-active[data-v-5fd4ef0c],.fade-leave-active[data-v-5fd4ef0c]{transition:opacity .3s}.fade-enter[data-v-5fd4ef0c],.fade-leave-to[data-v-5fd4ef0c]{opacity:0}.reading-progress[data-v-3640397f]{position:fixed;z-index:1000;background:transparent;overflow:hidden}.reading-progress .progress[data-v-3640397f]{width:100%;height:100%;background:#3eaf7c;background-image:none;transform-origin:0 0;transition:transform .2s ease-out}.top[data-v-3640397f]{top:0;left:0;right:0;width:100%;height:3px}.bottom[data-v-3640397f]{bottom:0;left:0;right:0;width:100%;height:3px}.left[data-v-3640397f]{left:0;top:0;bottom:0;width:3px;height:100%}.right[data-v-3640397f]{right:0;top:0;bottom:0;width:3px;height:100%}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.algolia-search-wrapper>span{vertical-align:middle}.algolia-search-wrapper .algolia-autocomplete{line-height:normal}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu{background-color:#fff;border:1px solid #999;border-radius:4px;font-size:16px;margin:6px 0 0;padding:4px;text-align:left}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu:before{border-color:#999}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu [class*=ds-dataset-]{border:none;padding:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestions{margin-top:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestion{border-bottom:1px solid #eaecef}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#2c815b}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion{border-color:#eaecef;padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header{padding:5px 10px;margin-top:0;background:#3eaf7c;color:#fff;font-weight:600}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background:hsla(0,0%,100%,.6)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--title{font-weight:600;margin-bottom:0;color:#2c3e50}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{vertical-align:top;padding:5px 7px 5px 5px;border-color:#eaecef;background:#f1f3f5}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{display:none}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column-text{color:#555}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-footer{border-color:#eaecef}.algolia-search-wrapper .algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--content{background-color:#e7edf3!important;color:#2c3e50}@media (min-width:719px){.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{float:none;width:150px;min-width:150px;display:table-cell}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{float:none;display:table-cell;width:100%;vertical-align:top}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .ds-dropdown-menu{min-width:515px!important}}@media (max-width:719px){.algolia-search-wrapper .ds-dropdown-menu{min-width:calc(100vw - 4rem)!important;max-width:calc(100vw - 4rem)!important}.algolia-search-wrapper .algolia-docsearch-suggestion--wrapper{padding:5px 7px 5px 5px!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column{padding:0!important;background:#fff!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column-text:after{content:" > ";font-size:10px;line-height:14.4px;display:inline-block;width:5px;margin:-3px 3px 0;vertical-align:middle}}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#3eaf7c;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #389d70}.home .hero .action-button:hover{background-color:#4abf8a}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/k8s-knative-gitlab-harbor/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#3eaf7c}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#3eaf7c}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-block[data-v-759a7d02]{display:none}.theme-code-block__active[data-v-759a7d02]{display:block}.theme-code-block>pre[data-v-759a7d02]{background-color:orange}.theme-code-group__nav[data-v-deefee04]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-deefee04]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-deefee04]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-deefee04]{border-bottom:1px solid #42b983}.pre-blank[data-v-deefee04]{color:#42b983}.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:999;position:relative}.searchbox__input{display:inline-block;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0 26px 0 32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input::-moz-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69,142,225,0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none;right:inherit;left:0}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:none;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none;fill:rgba(0,0,0,.5)}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}.searchbox__input:valid~.searchbox__reset{display:block;animation-name:sbx-reset-in;animation-duration:.15s}@keyframes sbx-reset-in{0%{transform:translate3d(-20%,0,0);opacity:0}to{transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{display:block;position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}@media (min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;padding:0;color:#02060c;font-size:.9em;font-weight:700;text-align:left;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:"|"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url('data:image/svg+xml;utf8,');content:"";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:134px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='168' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M78.988.938h16.594a2.968 2.968 0 012.966 2.966V20.5a2.967 2.967 0 01-2.966 2.964H78.988a2.967 2.967 0 01-2.966-2.964V3.897A2.961 2.961 0 0178.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 00-1.574-.199 5.7 5.7 0 00-.897.069 2.699 2.699 0 00-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 01-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 01-1.471-.636 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 011.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 011.82-.185 8.404 8.404 0 011.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 00-.384-.73 1.784 1.784 0 00-.724-.493 3.164 3.164 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 00-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 012.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 00-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 00-.814.24 1.46 1.46 0 00-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 01.233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 01-1.471-.635 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 012.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 00-.109-.875 1.873 1.873 0 00-.384-.731 1.784 1.784 0 00-.724-.492 3.165 3.165 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 00-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 012.073-.177zm-8.034-1.271a1.626 1.626 0 01-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 01-1.128 1.906 4.986 4.986 0 01-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 01-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 01-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 011.15-1.892 5.133 5.133 0 011.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 011.753 1.216 5.644 5.644 0 011.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 00-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 01-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 01-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 012.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z' fill='%235468FF'/%3E%3Cpath d='M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 00-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 01-.582-.271 13.67 13.67 0 01-.55-.287 4.275 4.275 0 01-.567-.351 6.92 6.92 0 01-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 01-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 00-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 00-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 00-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 01-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z' fill='%235D6494'/%3E%3Cpath d='M89.632 5.967v-.772a.978.978 0 00-.978-.977h-2.28a.978.978 0 00-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 011.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 00-1.382 0l-.465.465a.973.973 0 000 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 00-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 01-4.49-4.482 4.488 4.488 0 014.49-4.482 4.488 4.488 0 014.489 4.482 4.484 4.484 0 01-4.49 4.482m0-10.85a6.363 6.363 0 100 12.729 6.37 6.37 0 006.372-6.368 6.358 6.358 0 00-6.371-6.36' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #3eaf7c;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#3eaf7c}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #46bd87}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-heading.clickable:hover{color:#3eaf7c}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#3eaf7c}a.sidebar-link.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}
\ No newline at end of file
diff --git a/assets/img/GitHub_Webhooks-Details.da577fc5.png b/assets/img/GitHub_Webhooks-Details.da577fc5.png
new file mode 100644
index 0000000..4ccf662
Binary files /dev/null and b/assets/img/GitHub_Webhooks-Details.da577fc5.png differ
diff --git a/assets/img/GitHub_Webhooks.3cdaed97.png b/assets/img/GitHub_Webhooks.3cdaed97.png
new file mode 100644
index 0000000..21d3b31
Binary files /dev/null and b/assets/img/GitHub_Webhooks.3cdaed97.png differ
diff --git a/assets/img/GitLab.dd7e0dbb.png b/assets/img/GitLab.dd7e0dbb.png
new file mode 100644
index 0000000..32b288f
Binary files /dev/null and b/assets/img/GitLab.dd7e0dbb.png differ
diff --git a/assets/img/Tekton_Dashboard.258cb264.png b/assets/img/Tekton_Dashboard.258cb264.png
new file mode 100644
index 0000000..0071196
Binary files /dev/null and b/assets/img/Tekton_Dashboard.258cb264.png differ
diff --git a/assets/img/harbor_login_page.703b5e90.png b/assets/img/harbor_login_page.703b5e90.png
new file mode 100644
index 0000000..eb22d5d
Binary files /dev/null and b/assets/img/harbor_login_page.703b5e90.png differ
diff --git a/assets/img/harbor_projects.338db00b.png b/assets/img/harbor_projects.338db00b.png
new file mode 100644
index 0000000..c4265b3
Binary files /dev/null and b/assets/img/harbor_projects.338db00b.png differ
diff --git a/assets/img/kubed.e88b1fb6.svg b/assets/img/kubed.e88b1fb6.svg
new file mode 100644
index 0000000..14c7ef7
--- /dev/null
+++ b/assets/img/kubed.e88b1fb6.svg
@@ -0,0 +1,173 @@
+
+
+
\ No newline at end of file
diff --git a/assets/img/podinfo.d8c508a4.png b/assets/img/podinfo.d8c508a4.png
new file mode 100644
index 0000000..64394f6
Binary files /dev/null and b/assets/img/podinfo.d8c508a4.png differ
diff --git a/assets/img/podinfo_http_https.799760ac.png b/assets/img/podinfo_http_https.799760ac.png
new file mode 100644
index 0000000..b902a09
Binary files /dev/null and b/assets/img/podinfo_http_https.799760ac.png differ
diff --git a/assets/img/search.83621669.svg b/assets/img/search.83621669.svg
new file mode 100644
index 0000000..03d8391
--- /dev/null
+++ b/assets/img/search.83621669.svg
@@ -0,0 +1 @@
+
diff --git a/assets/js/1.416be298.js b/assets/js/1.416be298.js
new file mode 100644
index 0000000..ae76333
--- /dev/null
+++ b/assets/js/1.416be298.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[1,12,14,19,20,23],{246:function(t,e,n){"use strict";n.d(e,"d",(function(){return s})),n.d(e,"a",(function(){return r})),n.d(e,"i",(function(){return o})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return h})),n.d(e,"e",(function(){return f})),n.d(e,"k",(function(){return p})),n.d(e,"l",(function(){return d})),n.d(e,"c",(function(){return m})),n.d(e,"j",(function(){return k}));n(92);const s=/#.*$/,i=/\.(md|html)$/,r=/\/$/,o=/^[a-z]+:/i;function a(t){return decodeURI(t).replace(s,"").replace(i,"")}function l(t){return o.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function h(t){if(l(t))return t;const e=t.match(s),n=e?e[0]:"",i=a(t);return r.test(i)?t:i+".html"+n}function f(t,e){const n=decodeURIComponent(t.hash),i=function(t){const e=t.match(s);if(e)return e[0]}(e);if(i&&n!==i)return!1;return a(t.path)===a(e)}function p(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const s=t.charAt(0);if("/"===s)return t;if("?"===s||"#"===s)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const r=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,s,i=1){if("string"==typeof e)return p(n,e,s);if(Array.isArray(e))return Object.assign(p(n,e[0],s),{title:e[1]});{const r=e.children||[];return 0===r.length&&e.path?Object.assign(p(n,e.path,s),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:r.map(e=>t(e,n,s,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function g(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function k(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},247:function(t,e,n){},248:function(t,e,n){"use strict";n.r(e);var s=n(246),i={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(s.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(s.g)(this.link)||Object(s.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(s.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(s.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},r=n(8),o=Object(r.a)(i,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=o.exports},249:function(t,e,n){"use strict";n.r(e);var s={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(250),n(8)),r=Object(i.a)(s,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=r.exports},250:function(t,e,n){"use strict";n(247)},251:function(t,e,n){},254:function(t,e,n){},258:function(t,e,n){"use strict";n(251)},261:function(t,e,n){"use strict";n.r(e);var s=n(248),i=n(249),r=n(93),o=n.n(r),a={name:"DropdownLink",components:{NavLink:s.default,DropdownTransition:i.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>o()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(258),n(8)),u=Object(l.a)(a,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,s){return e("li",{key:n.link||s,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(s){return e("li",{key:s.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:s},on:{focusout:function(e){t.isLastItemOfArray(s,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports},264:function(t,e,n){"use strict";n(254)},265:function(t,e,n){},272:function(t,e,n){"use strict";n.r(e);var s=n(261),i=n(246),r={name:"NavLinks",components:{NavLink:n(248).default,DropdownLink:s.default},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,n=this.$router.options.routes,s=this.$site.themeConfig.locales||{},i={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(i=>{const r=t[i],o=s[i]&&s[i].label||r.lang;let a;return r.lang===this.$lang?a=e:(a=e.replace(this.$localeConfig.path,i),n.some(t=>t.path===a)||(a=i)),{text:o,link:a}})};return[...this.userNav,i]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(i.j)(t),{items:(t.items||[]).map(i.j)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let n=0;n{let s=i()(e,"title","");return i()(e,"frontmatter.tags")&&(s+=" "+e.frontmatter.tags.join(" ")),n&&(s+=" "+n),o(t,s)};const o=(t,e)=>{const n=t=>t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),s=new RegExp("[^\0-]"),i=t.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t);if(s.test(t))return i.some(t=>e.toLowerCase().indexOf(t)>-1);{const s=t.endsWith(" ");return new RegExp(i.map((t,e)=>i.length!==e+1||s?`(?=.*\\b${n(t)}\\b)`:`(?=.*\\b${n(t)})`).join("")+".+","gi").test(e)}};var a={name:"SearchBox",data:()=>({query:"",focused:!1,focusIndex:0,placeholder:void 0}),computed:{showSuggestions(){return this.focused&&this.suggestions&&this.suggestions.length},suggestions(){const t=this.query.trim().toLowerCase();if(!t)return;const{pages:e}=this.$site,n=this.$site.themeConfig.searchMaxSuggestions||5,s=this.$localePath,i=[];for(let o=0;o=n);o++){const a=e[o];if(this.getPageLocalePath(a)===s&&this.isSearchable(a))if(r(t,a))i.push(a);else if(a.headers)for(let e=0;e=n);e++){const n=a.headers[e];n.title&&r(t,a,n.title)&&i.push(Object.assign({},a,{path:a.path+"#"+n.slug,header:n}))}}return i},alignRight(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},mounted(){this.placeholder=this.$site.themeConfig.searchPlaceholder||"",document.addEventListener("keydown",this.onHotkey)},beforeDestroy(){document.removeEventListener("keydown",this.onHotkey)},methods:{getPageLocalePath(t){for(const e in this.$site.locales||{})if("/"!==e&&0===t.path.indexOf(e))return e;return"/"},isSearchable(t){let e=null;return null===e||(e=Array.isArray(e)?e:new Array(e),e.filter(e=>t.path.match(e)).length>0)},onHotkey(t){t.srcElement===document.body&&["s","/"].includes(t.key)&&(this.$refs.input.focus(),t.preventDefault())},onUp(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown(){this.showSuggestions&&(this.focusIndex "+t._s(n.header.title))]):t._e()])])})),0):t._e()])}),[],!1,null,null,null).exports,c=n(290),h=n(272);function f(t,e){return t.ownerDocument.defaultView.getComputedStyle(t,null)[e]}var p={name:"Navbar",components:{SidebarButton:c.default,NavLinks:h.default,SearchBox:u,AlgoliaSearchBox:{}},data:()=>({linksWrapMaxWidth:null}),computed:{algolia(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}},isAlgoliaSearch(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}},mounted(){const t=parseInt(f(this.$el,"paddingLeft"))+parseInt(f(this.$el,"paddingRight")),e=()=>{document.documentElement.clientWidth<719?this.linksWrapMaxWidth=null:this.linksWrapMaxWidth=this.$el.offsetWidth-t-(this.$refs.siteName&&this.$refs.siteName.offsetWidth||0)};e(),window.addEventListener("resize",e,!1)}},d=(n(297),Object(l.a)(p,(function(){var t=this,e=t._self._c;return e("header",{staticClass:"navbar"},[e("SidebarButton",{on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),e("RouterLink",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?e("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo),alt:t.$siteTitle}}):t._e(),t._v(" "),t.$siteTitle?e("span",{ref:"siteName",staticClass:"site-name",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()]),t._v(" "),e("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[t.isAlgoliaSearch?e("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$site.themeConfig.search&&!1!==t.$page.frontmatter.search?e("SearchBox"):t._e(),t._v(" "),e("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null));e.default=d.exports}}]);
\ No newline at end of file
diff --git a/assets/js/10.f496eaac.js b/assets/js/10.f496eaac.js
new file mode 100644
index 0000000..2fd6172
--- /dev/null
+++ b/assets/js/10.f496eaac.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[10,3,12,14,18,19,23],{246:function(t,e,n){"use strict";n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return r})),n.d(e,"i",(function(){return a})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return h})),n.d(e,"k",(function(){return d})),n.d(e,"l",(function(){return f})),n.d(e,"c",(function(){return m})),n.d(e,"j",(function(){return g}));n(92);const i=/#.*$/,s=/\.(md|html)$/,r=/\/$/,a=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(i,"").replace(s,"")}function l(t){return a.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function p(t){if(l(t))return t;const e=t.match(i),n=e?e[0]:"",s=o(t);return r.test(s)?t:s+".html"+n}function h(t,e){const n=decodeURIComponent(t.hash),s=function(t){const e=t.match(i);if(e)return e[0]}(e);if(s&&n!==s)return!1;return o(t.path)===o(e)}function d(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;const s=e.split("/");n&&s[s.length-1]||s.pop();const r=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,i,s=1){if("string"==typeof e)return d(n,e,i);if(Array.isArray(e))return Object.assign(d(n,e[0],i),{title:e[1]});{const r=e.children||[];return 0===r.length&&e.path?Object.assign(d(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:r.map(e=>t(e,n,i,s+1)),collapsable:!1!==e.collapsable}}}(t,s,n)):[]}return[]}function b(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},247:function(t,e,n){},248:function(t,e,n){"use strict";n.r(e);var i=n(246),s={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},r=n(8),a=Object(r.a)(s,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=a.exports},249:function(t,e,n){"use strict";n.r(e);var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},s=(n(250),n(8)),r=Object(s.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=r.exports},250:function(t,e,n){"use strict";n(247)},251:function(t,e,n){},252:function(t,e,n){},254:function(t,e,n){},257:function(t,e,n){},258:function(t,e,n){"use strict";n(251)},259:function(t,e,n){"use strict";n(252)},260:function(t,e,n){"use strict";n.r(e);var i=n(273),s=n(262),r=n(246);function a(t,e){if("group"===e.type){const n=e.path&&Object(r.e)(t,e.path),i=e.children.some(e=>"group"===e.type?a(t,e):"page"===e.type&&Object(r.e)(t,e.path));return n||i}return!1}var o={name:"SidebarLinks",components:{SidebarGroup:i.default,SidebarLink:s.default},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route(){this.refreshIndex()}},created(){this.refreshIndex()},methods:{refreshIndex(){const t=function(t,e){for(let n=0;n-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(r.e)(this.$route,t.regularPath)}}},l=n(8),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(n,i){return e("li",{key:i},["group"===n.type?e("SidebarGroup",{attrs:{item:n,open:i===t.openGroupIndex,collapsable:n.collapsable||n.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(i)}}}):e("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:n}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=u.exports},261:function(t,e,n){"use strict";n.r(e);var i=n(248),s=n(249),r=n(93),a=n.n(r),o={name:"DropdownLink",components:{NavLink:i.default,DropdownTransition:s.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>a()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(258),n(8)),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,i){return e("li",{key:n.link||i,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports},262:function(t,e,n){"use strict";n.r(e);var i=n(246);function s(t,e,n,i,s){const r={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:i,"sidebar-link":!0}};return s>2&&(r.style={"padding-left":s+"rem"}),t("RouterLink",r,n)}function r(t,e,n,a,o,l=1){return!e||l>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const u=Object(i.e)(a,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[s(t,n+"#"+e.slug,e.title,u,e.level-1),r(t,e.children,n,a,o,l+1)])}))}var a={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:a,$themeConfig:o,$themeLocaleConfig:l},props:{item:u,sidebarDepth:c}}){const p=Object(i.e)(a,u.path),h="auto"===u.type?p||u.children.some(t=>Object(i.e)(a,u.basePath+"#"+t.slug)):p,d="external"===u.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,u.path,u.title||u.path):s(t,u.path,u.title||u.path,h),f=[e.frontmatter.sidebarDepth,c,l.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),b=l.displayAllHeaders||o.displayAllHeaders;if("auto"===u.type)return[d,r(t,u.children,u.basePath,a,f)];if((h||b)&&u.headers&&!i.d.test(u.path)){return[d,r(t,Object(i.c)(u.headers),u.path,a,f)]}return d}},o=(n(259),n(8)),l=Object(o.a)(a,void 0,void 0,!1,null,null,null);e.default=l.exports},264:function(t,e,n){"use strict";n(254)},270:function(t,e,n){"use strict";n(257)},271:function(t,e,n){},272:function(t,e,n){"use strict";n.r(e);var i=n(261),s=n(246),r={name:"NavLinks",components:{NavLink:n(248).default,DropdownLink:i.default},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,n=this.$router.options.routes,i=this.$site.themeConfig.locales||{},s={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(s=>{const r=t[s],a=i[s]&&i[s].label||r.lang;let o;return r.lang===this.$lang?o=e:(o=e.replace(this.$localeConfig.path,s),n.some(t=>t.path===o)||(o=s)),{text:a,link:o}})};return[...this.userNav,s]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(s.j)(t),{items:(t.items||[]).map(s.j)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let n=0;nfunction t(e,n,r,i=1){if("string"==typeof e)return d(n,e,r);if(Array.isArray(e))return Object.assign(d(n,e[0],r),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(d(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function g(t){const e=v(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function v(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},253:function(t,e){t.exports=function(t){return null==t}},255:function(t,e,n){},256:function(t,e,n){},266:function(t,e,n){"use strict";n(255)},267:function(t,e,n){var r=n(12),i=n(4),a=n(11);t.exports=function(t){return"string"==typeof t||!i(t)&&a(t)&&"[object String]"==r(t)}},268:function(t,e,n){"use strict";n(256)},269:function(t,e,n){},274:function(t,e,n){"use strict";n.r(e);var r=n(253),i=n.n(r),a=n(246),s={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=i()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:n="",docsBranch:r="master",docsRepo:a=e}=this.$site.themeConfig;return t&&a&&this.$page.relativePath?this.createEditLink(e,a,n,r,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,n,r,i){if(/bitbucket.org/.test(e)){return e.replace(a.a,"")+"/src"+`/${r}/`+(n?n.replace(a.a,"")+"/":"")+i+`?mode=edit&spa=0&at=${r}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(a.a,"")+"/-/edit"+`/${r}/`+(n?n.replace(a.a,"")+"/":"")+i}return(a.i.test(e)?e:"https://github.com/"+e).replace(a.a,"")+"/edit"+`/${r}/`+(n?n.replace(a.a,"")+"/":"")+i}}},o=(n(266),n(8)),u=Object(o.a)(s,(function(){var t=this,e=t._self._c;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null);e.default=u.exports},275:function(t,e,n){"use strict";n.r(e);n(92);var r=n(246),i=n(267),a=n.n(i),s=n(253),o=n.n(s),u={name:"PageNav",props:["sidebarItems"],computed:{prev(){return l(c.PREV,this)},next(){return l(c.NEXT,this)}}};const c={NEXT:{resolveLink:function(t,e){return p(t,e,1)},getThemeLinkConfig:({nextLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,e){return p(t,e,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function l(t,{$themeConfig:e,$page:n,$route:i,$site:s,sidebarItems:u}){const{resolveLink:c,getThemeLinkConfig:l,getPageLinkConfig:p}=t,f=l(e),d=p(n),h=o()(d)?f:d;return!1===h?void 0:a()(h)?Object(r.k)(s.pages,h,i.path):c(n,u)}function p(t,e,n){const r=[];!function t(e,n){for(let r=0,i=e.length;rfunction t(e,n,i,r=1){if("string"==typeof e)return f(n,e,i);if(Array.isArray(e))return Object.assign(f(n,e[0],i),{title:e[1]});{const s=e.children||[];return 0===s.length&&e.path?Object.assign(f(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:s.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function m(t){const e=b(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function b(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},247:function(t,e,n){},248:function(t,e,n){"use strict";n.r(e);var i=n(246),r={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},s=n(8),a=Object(s.a)(r,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=a.exports},249:function(t,e,n){"use strict";n.r(e);var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},r=(n(250),n(8)),s=Object(r.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=s.exports},250:function(t,e,n){"use strict";n(247)},251:function(t,e,n){},254:function(t,e,n){},258:function(t,e,n){"use strict";n(251)},261:function(t,e,n){"use strict";n.r(e);var i=n(248),r=n(249),s=n(93),a=n.n(s),o={name:"DropdownLink",components:{NavLink:i.default,DropdownTransition:r.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>a()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(258),n(8)),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,i){return e("li",{key:n.link||i,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports},264:function(t,e,n){"use strict";n(254)},272:function(t,e,n){"use strict";n.r(e);var i=n(261),r=n(246),s={name:"NavLinks",components:{NavLink:n(248).default,DropdownLink:i.default},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,n=this.$router.options.routes,i=this.$site.themeConfig.locales||{},r={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(r=>{const s=t[r],a=i[r]&&i[r].label||s.lang;let o;return s.lang===this.$lang?o=e:(o=e.replace(this.$localeConfig.path,r),n.some(t=>t.path===o)||(o=r)),{text:a,link:o}})};return[...this.userNav,r]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(r.j)(t),{items:(t.items||[]).map(r.j)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let n=0;n({placeholder:void 0}),watch:{$lang(e){this.update(this.options,e)},options(e){this.update(e,this.$lang)}},mounted(){this.initialize(this.options,this.$lang),this.placeholder=this.$site.themeConfig.searchPlaceholder||""},methods:{initialize(e,t){Promise.all([Promise.all([a.e(0),a.e(9)]).then(a.t.bind(null,311,7)),Promise.all([a.e(0),a.e(9)]).then(a.t.bind(null,312,7))]).then(([a])=>{a=a.default;const{algoliaOptions:i={}}=e;a(Object.assign({},e,{inputSelector:"#algolia-search-input",algoliaOptions:{...i,facetFilters:["lang:"+t].concat(i.facetFilters||[])},handleSelected:(e,t,a)=>{const{pathname:i,hash:n}=new URL(a.url),r=i.replace(this.$site.base,"/"),s=decodeURIComponent(n);this.$router.push(`${r}${s}`)}}))})},update(e,t){this.$el.innerHTML='',this.initialize(e,t)}}},n=(a(295),a(8)),r=Object(n.a)(i,(function(){var e=this._self._c;return e("form",{staticClass:"algolia-search-wrapper search-box",attrs:{id:"search-form",role:"search"}},[e("input",{staticClass:"search-query",attrs:{id:"algolia-search-input",placeholder:this.placeholder}})])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/14.30343ebc.js b/assets/js/14.30343ebc.js
new file mode 100644
index 0000000..4724136
--- /dev/null
+++ b/assets/js/14.30343ebc.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[14,19,23],{246:function(t,e,n){"use strict";n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return s})),n.d(e,"i",(function(){return o})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return f})),n.d(e,"k",(function(){return h})),n.d(e,"l",(function(){return d})),n.d(e,"c",(function(){return b})),n.d(e,"j",(function(){return g}));n(92);const i=/#.*$/,r=/\.(md|html)$/,s=/\/$/,o=/^[a-z]+:/i;function a(t){return decodeURI(t).replace(i,"").replace(r,"")}function l(t){return o.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function p(t){if(l(t))return t;const e=t.match(i),n=e?e[0]:"",r=a(t);return s.test(r)?t:r+".html"+n}function f(t,e){const n=decodeURIComponent(t.hash),r=function(t){const e=t.match(i);if(e)return e[0]}(e);if(r&&n!==r)return!1;return a(t.path)===a(e)}function h(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;const r=e.split("/");n&&r[r.length-1]||r.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,i,r=1){if("string"==typeof e)return h(n,e,i);if(Array.isArray(e))return Object.assign(h(n,e[0],i),{title:e[1]});{const s=e.children||[];return 0===s.length&&e.path?Object.assign(h(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:s.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function m(t){const e=b(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function b(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},247:function(t,e,n){},248:function(t,e,n){"use strict";n.r(e);var i=n(246),r={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},s=n(8),o=Object(s.a)(r,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=o.exports},249:function(t,e,n){"use strict";n.r(e);var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},r=(n(250),n(8)),s=Object(r.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=s.exports},250:function(t,e,n){"use strict";n(247)},251:function(t,e,n){},258:function(t,e,n){"use strict";n(251)},261:function(t,e,n){"use strict";n.r(e);var i=n(248),r=n(249),s=n(93),o=n.n(s),a={name:"DropdownLink",components:{NavLink:i.default,DropdownTransition:r.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>o()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(258),n(8)),u=Object(l.a)(a,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,i){return e("li",{key:n.link||i,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports}}]);
\ No newline at end of file
diff --git a/assets/js/15.d3972987.js b/assets/js/15.d3972987.js
new file mode 100644
index 0000000..9b90360
--- /dev/null
+++ b/assets/js/15.d3972987.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{246:function(t,n,e){"use strict";e.d(n,"d",(function(){return r})),e.d(n,"a",(function(){return o})),e.d(n,"i",(function(){return a})),e.d(n,"f",(function(){return u})),e.d(n,"g",(function(){return c})),e.d(n,"h",(function(){return p})),e.d(n,"b",(function(){return l})),e.d(n,"e",(function(){return f})),e.d(n,"k",(function(){return h})),e.d(n,"l",(function(){return d})),e.d(n,"c",(function(){return v})),e.d(n,"j",(function(){return b}));e(92);const r=/#.*$/,i=/\.(md|html)$/,o=/\/$/,a=/^[a-z]+:/i;function s(t){return decodeURI(t).replace(r,"").replace(i,"")}function u(t){return a.test(t)}function c(t){return/^mailto:/.test(t)}function p(t){return/^tel:/.test(t)}function l(t){if(u(t))return t;const n=t.match(r),e=n?n[0]:"",i=s(t);return o.test(i)?t:i+".html"+e}function f(t,n){const e=decodeURIComponent(t.hash),i=function(t){const n=t.match(r);if(n)return n[0]}(n);if(i&&e!==i)return!1;return s(t.path)===s(n)}function h(t,n,e){if(u(n))return{type:"external",path:n};e&&(n=function(t,n,e){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return n+t;const i=n.split("/");e&&i[i.length-1]||i.pop();const o=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(n,e,r,i=1){if("string"==typeof n)return h(e,n,r);if(Array.isArray(n))return Object.assign(h(e,n[0],r),{title:n[1]});{const o=n.children||[];return 0===o.length&&n.path?Object.assign(h(e,n.path,r),{title:n.title}):{type:"group",path:n.path,title:n.title,sidebarDepth:n.sidebarDepth,initialOpenGroupIndex:n.initialOpenGroupIndex,children:o.map(n=>t(n,e,r,i+1)),collapsable:!1!==n.collapsable}}}(t,i,e)):[]}return[]}function g(t){const n=v(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:n.map(n=>({type:"auto",title:n.title,basePath:t.path,path:t.path+"#"+n.slug,children:n.children||[]}))}]}function v(t){let n;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?n=t:n&&(n.children||(n.children=[])).push(t)}),t.filter(t=>2===t.level)}function b(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},253:function(t,n){t.exports=function(t){return null==t}},256:function(t,n,e){},267:function(t,n,e){var r=e(12),i=e(4),o=e(11);t.exports=function(t){return"string"==typeof t||!i(t)&&o(t)&&"[object String]"==r(t)}},268:function(t,n,e){"use strict";e(256)},275:function(t,n,e){"use strict";e.r(n);e(92);var r=e(246),i=e(267),o=e.n(i),a=e(253),s=e.n(a),u={name:"PageNav",props:["sidebarItems"],computed:{prev(){return p(c.PREV,this)},next(){return p(c.NEXT,this)}}};const c={NEXT:{resolveLink:function(t,n){return l(t,n,1)},getThemeLinkConfig:({nextLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,n){return l(t,n,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function p(t,{$themeConfig:n,$page:e,$route:i,$site:a,sidebarItems:u}){const{resolveLink:c,getThemeLinkConfig:p,getPageLinkConfig:l}=t,f=p(n),h=l(e),d=s()(h)?f:h;return!1===d?void 0:o()(d)?Object(r.k)(a.pages,d,i.path):c(e,u)}function l(t,n,e){const r=[];!function t(n,e){for(let r=0,i=n.length;rfunction t(e,n,i,r=1){if("string"==typeof e)return d(n,e,i);if(Array.isArray(e))return Object.assign(d(n,e[0],i),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(d(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function m(t){const e=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function g(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function b(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},248:function(t,e,n){"use strict";n.r(e);var i=n(246),r={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},a=n(8),s=Object(a.a)(r,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=s.exports},263:function(t,e,n){},276:function(t,e,n){"use strict";n(263)},287:function(t,e,n){"use strict";n.r(e);var i={name:"Home",components:{NavLink:n(248).default},computed:{data(){return this.$page.frontmatter},actionLink(){return{link:this.data.actionLink,text:this.data.actionText}}}},r=(n(276),n(8)),a=Object(r.a)(i,(function(){var t=this,e=t._self._c;return e("main",{staticClass:"home",attrs:{"aria-labelledby":null!==t.data.heroText?"main-title":null}},[e("header",{staticClass:"hero"},[t.data.heroImage?e("img",{attrs:{src:t.$withBase(t.data.heroImage),alt:t.data.heroAlt||"hero"}}):t._e(),t._v(" "),null!==t.data.heroText?e("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.data.heroText||t.$title||"Hello")+"\n ")]):t._e(),t._v(" "),null!==t.data.tagline?e("p",{staticClass:"description"},[t._v("\n "+t._s(t.data.tagline||t.$description||"Welcome to your VuePress site")+"\n ")]):t._e(),t._v(" "),t.data.actionText&&t.data.actionLink?e("p",{staticClass:"action"},[e("NavLink",{staticClass:"action-button",attrs:{item:t.actionLink}})],1):t._e()]),t._v(" "),t.data.features&&t.data.features.length?e("div",{staticClass:"features"},t._l(t.data.features,(function(n,i){return e("div",{key:i,staticClass:"feature"},[e("h2",[t._v(t._s(n.title))]),t._v(" "),e("p",[t._v(t._s(n.details))])])})),0):t._e(),t._v(" "),e("Content",{staticClass:"theme-default-content custom"}),t._v(" "),t.data.footer?e("div",{staticClass:"footer"},[t._v("\n "+t._s(t.data.footer)+"\n ")]):e("Content",{staticClass:"footer",attrs:{"slot-key":"footer"}})],1)}),[],!1,null,null,null);e.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/17.6cd3a12a.js b/assets/js/17.6cd3a12a.js
new file mode 100644
index 0000000..57cfa5e
--- /dev/null
+++ b/assets/js/17.6cd3a12a.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{246:function(t,e,n){"use strict";n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return a})),n.d(e,"i",(function(){return s})),n.d(e,"f",(function(){return c})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return l})),n.d(e,"b",(function(){return d})),n.d(e,"e",(function(){return p})),n.d(e,"k",(function(){return f})),n.d(e,"l",(function(){return h})),n.d(e,"c",(function(){return m})),n.d(e,"j",(function(){return b}));n(92);const i=/#.*$/,r=/\.(md|html)$/,a=/\/$/,s=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(i,"").replace(r,"")}function c(t){return s.test(t)}function u(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function d(t){if(c(t))return t;const e=t.match(i),n=e?e[0]:"",r=o(t);return a.test(r)?t:r+".html"+n}function p(t,e){const n=decodeURIComponent(t.hash),r=function(t){const e=t.match(i);if(e)return e[0]}(e);if(r&&n!==r)return!1;return o(t.path)===o(e)}function f(t,e,n){if(c(e))return{type:"external",path:e};n&&(e=function(t,e,n){const i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;const r=e.split("/");n&&r[r.length-1]||r.pop();const a=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,i,r=1){if("string"==typeof e)return f(n,e,i);if(Array.isArray(e))return Object.assign(f(n,e[0],i),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(f(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function g(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function b(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},253:function(t,e){t.exports=function(t){return null==t}},255:function(t,e,n){},266:function(t,e,n){"use strict";n(255)},274:function(t,e,n){"use strict";n.r(e);var i=n(253),r=n.n(i),a=n(246),s={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=r()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:n="",docsBranch:i="master",docsRepo:a=e}=this.$site.themeConfig;return t&&a&&this.$page.relativePath?this.createEditLink(e,a,n,i,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,n,i,r){if(/bitbucket.org/.test(e)){return e.replace(a.a,"")+"/src"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r+`?mode=edit&spa=0&at=${i}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(a.a,"")+"/-/edit"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r}return(a.i.test(e)?e:"https://github.com/"+e).replace(a.a,"")+"/edit"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r}}},o=(n(266),n(8)),c=Object(o.a)(s,(function(){var t=this,e=t._self._c;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null);e.default=c.exports}}]);
\ No newline at end of file
diff --git a/assets/js/18.8d7e6487.js b/assets/js/18.8d7e6487.js
new file mode 100644
index 0000000..2d70f93
--- /dev/null
+++ b/assets/js/18.8d7e6487.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{246:function(t,e,n){"use strict";n.d(e,"d",(function(){return r})),n.d(e,"a",(function(){return a})),n.d(e,"i",(function(){return s})),n.d(e,"f",(function(){return o})),n.d(e,"g",(function(){return c})),n.d(e,"h",(function(){return l})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return f})),n.d(e,"k",(function(){return d})),n.d(e,"l",(function(){return h})),n.d(e,"c",(function(){return g})),n.d(e,"j",(function(){return m}));n(92);const r=/#.*$/,i=/\.(md|html)$/,a=/\/$/,s=/^[a-z]+:/i;function u(t){return decodeURI(t).replace(r,"").replace(i,"")}function o(t){return s.test(t)}function c(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function p(t){if(o(t))return t;const e=t.match(r),n=e?e[0]:"",i=u(t);return a.test(i)?t:i+".html"+n}function f(t,e){const n=decodeURIComponent(t.hash),i=function(t){const e=t.match(r);if(e)return e[0]}(e);if(i&&n!==i)return!1;return u(t.path)===u(e)}function d(t,e,n){if(o(e))return{type:"external",path:e};n&&(e=function(t,e,n){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const a=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,r,i=1){if("string"==typeof e)return d(n,e,r);if(Array.isArray(e))return Object.assign(d(n,e[0],r),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(d(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function b(t){const e=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function g(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},252:function(t,e,n){},259:function(t,e,n){"use strict";n(252)},262:function(t,e,n){"use strict";n.r(e);var r=n(246);function i(t,e,n,r,i){const a={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}};return i>2&&(a.style={"padding-left":i+"rem"}),t("RouterLink",a,n)}function a(t,e,n,s,u,o=1){return!e||o>u?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const c=Object(r.e)(s,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[i(t,n+"#"+e.slug,e.title,c,e.level-1),a(t,e.children,n,s,u,o+1)])}))}var s={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:s,$themeConfig:u,$themeLocaleConfig:o},props:{item:c,sidebarDepth:l}}){const p=Object(r.e)(s,c.path),f="auto"===c.type?p||c.children.some(t=>Object(r.e)(s,c.basePath+"#"+t.slug)):p,d="external"===c.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,c.path,c.title||c.path):i(t,c.path,c.title||c.path,f),h=[e.frontmatter.sidebarDepth,l,o.sidebarDepth,u.sidebarDepth,1].find(t=>void 0!==t),b=o.displayAllHeaders||u.displayAllHeaders;if("auto"===c.type)return[d,a(t,c.children,c.basePath,s,h)];if((f||b)&&c.headers&&!r.d.test(c.path)){return[d,a(t,Object(r.c)(c.headers),c.path,s,h)]}return d}},u=(n(259),n(8)),o=Object(u.a)(s,void 0,void 0,!1,null,null,null);e.default=o.exports}}]);
\ No newline at end of file
diff --git a/assets/js/19.78b16bd4.js b/assets/js/19.78b16bd4.js
new file mode 100644
index 0000000..6110e42
--- /dev/null
+++ b/assets/js/19.78b16bd4.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{247:function(t,e,n){},249:function(t,e,n){"use strict";n.r(e);var s={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(250),n(8)),o=Object(i.a)(s,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=o.exports},250:function(t,e,n){"use strict";n(247)}}]);
\ No newline at end of file
diff --git a/assets/js/2.99da59a7.js b/assets/js/2.99da59a7.js
new file mode 100644
index 0000000..e9f7431
--- /dev/null
+++ b/assets/js/2.99da59a7.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{252:function(t,e,a){},253:function(t,e){t.exports=function(t){return null==t}},255:function(t,e,a){},256:function(t,e,a){},257:function(t,e,a){},259:function(t,e,a){"use strict";a(252)},260:function(t,e,a){"use strict";a.r(e);var n=a(273),s=a(262),i=a(246);function r(t,e){if("group"===e.type){const a=e.path&&Object(i.e)(t,e.path),n=e.children.some(e=>"group"===e.type?r(t,e):"page"===e.type&&Object(i.e)(t,e.path));return a||n}return!1}var o={name:"SidebarLinks",components:{SidebarGroup:n.default,SidebarLink:s.default},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route(){this.refreshIndex()}},created(){this.refreshIndex()},methods:{refreshIndex(){const t=function(t,e){for(let a=0;a-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(i.e)(this.$route,t.regularPath)}}},l=a(8),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(a,n){return e("li",{key:n},["group"===a.type?e("SidebarGroup",{attrs:{item:a,open:n===t.openGroupIndex,collapsable:a.collapsable||a.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(n)}}}):e("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:a}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=u.exports},262:function(t,e,a){"use strict";a.r(e);var n=a(246);function s(t,e,a,n,s){const i={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:n,"sidebar-link":!0}};return s>2&&(i.style={"padding-left":s+"rem"}),t("RouterLink",i,a)}function i(t,e,a,r,o,l=1){return!e||l>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const u=Object(n.e)(r,a+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[s(t,a+"#"+e.slug,e.title,u,e.level-1),i(t,e.children,a,r,o,l+1)])}))}var r={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:a,$route:r,$themeConfig:o,$themeLocaleConfig:l},props:{item:u,sidebarDepth:c}}){const p=Object(n.e)(r,u.path),d="auto"===u.type?p||u.children.some(t=>Object(n.e)(r,u.basePath+"#"+t.slug)):p,h="external"===u.type?function(t,e,a){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[a,t("OutboundLink")])}(t,u.path,u.title||u.path):s(t,u.path,u.title||u.path,d),f=[e.frontmatter.sidebarDepth,c,l.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),b=l.displayAllHeaders||o.displayAllHeaders;if("auto"===u.type)return[h,i(t,u.children,u.basePath,r,f)];if((d||b)&&u.headers&&!n.d.test(u.path)){return[h,i(t,Object(n.c)(u.headers),u.path,r,f)]}return h}},o=(a(259),a(8)),l=Object(o.a)(r,void 0,void 0,!1,null,null,null);e.default=l.exports},263:function(t,e,a){},266:function(t,e,a){"use strict";a(255)},267:function(t,e,a){var n=a(12),s=a(4),i=a(11);t.exports=function(t){return"string"==typeof t||!s(t)&&i(t)&&"[object String]"==n(t)}},268:function(t,e,a){"use strict";a(256)},269:function(t,e,a){},270:function(t,e,a){"use strict";a(257)},271:function(t,e,a){},273:function(t,e,a){"use strict";a.r(e);var n=a(246),s={name:"SidebarGroup",components:{DropdownTransition:a(249).default},props:["item","open","collapsable","depth"],beforeCreate(){this.$options.components.SidebarLinks=a(260).default},methods:{isActive:n.e}},i=(a(270),a(8)),r=Object(i.a)(s,(function(){var t=this,e=t._self._c;return e("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?e("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):e("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),e("DropdownTransition",[t.open||!t.collapsable?e("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null);e.default=r.exports},274:function(t,e,a){"use strict";a.r(e);var n=a(253),s=a.n(n),i=a(246),r={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=s()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:a="",docsBranch:n="master",docsRepo:i=e}=this.$site.themeConfig;return t&&i&&this.$page.relativePath?this.createEditLink(e,i,a,n,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,a,n,s){if(/bitbucket.org/.test(e)){return e.replace(i.a,"")+"/src"+`/${n}/`+(a?a.replace(i.a,"")+"/":"")+s+`?mode=edit&spa=0&at=${n}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(i.a,"")+"/-/edit"+`/${n}/`+(a?a.replace(i.a,"")+"/":"")+s}return(i.i.test(e)?e:"https://github.com/"+e).replace(i.a,"")+"/edit"+`/${n}/`+(a?a.replace(i.a,"")+"/":"")+s}}},o=(a(266),a(8)),l=Object(o.a)(r,(function(){var t=this,e=t._self._c;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null);e.default=l.exports},275:function(t,e,a){"use strict";a.r(e);a(92);var n=a(246),s=a(267),i=a.n(s),r=a(253),o=a.n(r),l={name:"PageNav",props:["sidebarItems"],computed:{prev(){return c(u.PREV,this)},next(){return c(u.NEXT,this)}}};const u={NEXT:{resolveLink:function(t,e){return p(t,e,1)},getThemeLinkConfig:({nextLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,e){return p(t,e,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function c(t,{$themeConfig:e,$page:a,$route:s,$site:r,sidebarItems:l}){const{resolveLink:u,getThemeLinkConfig:c,getPageLinkConfig:p}=t,d=c(e),h=p(a),f=o()(h)?d:h;return!1===f?void 0:i()(f)?Object(n.k)(r.pages,f,s.path):u(a,l)}function p(t,e,a){const n=[];!function t(e,a){for(let n=0,s=e.length;n({isSidebarOpen:!1}),computed:{shouldShowNavbar(){const{themeConfig:t}=this.$site,{frontmatter:e}=this.$page;return!1!==e.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar(){const{frontmatter:t}=this.$page;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems(){return Object(o.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses(){const t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted(){this.$router.afterEach(()=>{this.isSidebarOpen=!1})},methods:{toggleSidebar(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd(t){const e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},u=a(8),c=Object(u.a)(l,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?e("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),e("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),e("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?e("Home"):e("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);e.default=c.exports}}]);
\ No newline at end of file
diff --git a/assets/js/20.a3f134b4.js b/assets/js/20.a3f134b4.js
new file mode 100644
index 0000000..0811f39
--- /dev/null
+++ b/assets/js/20.a3f134b4.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{265:function(t,c,n){},277:function(t,c,n){"use strict";n(265)},290:function(t,c,n){"use strict";n.r(c);n(277);var i=n(8),s=Object(i.a)({},(function(){var t=this,c=t._self._c;return c("div",{staticClass:"sidebar-button",on:{click:function(c){return t.$emit("toggle-sidebar")}}},[c("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[c("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null);c.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/21.09978d66.js b/assets/js/21.09978d66.js
new file mode 100644
index 0000000..186b799
--- /dev/null
+++ b/assets/js/21.09978d66.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{301:function(a,t,s){a.exports=s.p+"assets/img/harbor_login_page.703b5e90.png"},302:function(a,t,s){a.exports=s.p+"assets/img/harbor_projects.338db00b.png"},322:function(a,t,s){"use strict";s.r(t);var e=s(8),r=Object(e.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"install-harbor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-harbor"}},[a._v("#")]),a._v(" Install Harbor")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://raw.githubusercontent.com/cncf/artwork/c33a8386bce4eabc36e1d4972e0996db4630037b/projects/harbor/horizontal/color/harbor-horizontal-color.svg?sanitize=true",alt:"Harbor logo",title:"Harbor logo"}})]),a._v(" "),t("p",[a._v("Label Harbor namespace and copy there the secret with certificates signed by\nLet's Encrypt certificate:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl create namespace harbor\nkubectl label namespace harbor "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("app")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("kubed\n")])])]),t("p",[a._v('Create Istio Gateways and VirtualServices to allow accessing Harbor from\n"outside":')]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" -")]),a._v("\napiVersion: networking.istio.io/v1alpha3\nkind: Gateway\nmetadata:\n name: harbor-gateway\n namespace: harbor\nspec:\n selector:\n istio: ingressgateway\n servers:\n - port:\n number: 80\n name: http-harbor\n protocol: HTTP\n hosts:\n - harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n - port:\n number: 443\n name: https-harbor\n protocol: HTTPS\n hosts:\n - harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n - notary."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n tls:\n mode: PASSTHROUGH\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: harbor-http-virtual-service\n namespace: harbor\nspec:\n hosts:\n - harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n gateways:\n - harbor-gateway\n http:\n - match:\n - port: 80\n route:\n - destination:\n host: harbor.harbor.svc.cluster.local\n port:\n number: 80\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: harbor-https-virtual-service\n namespace: harbor\nspec:\n hosts:\n - harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n gateways:\n - harbor-gateway\n tls:\n - match:\n - port: 443\n sniHosts:\n - harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n route:\n - destination:\n host: harbor.harbor.svc.cluster.local\n port:\n number: 443\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: harbor-notary-virtual-service\n namespace: harbor\nspec:\n hosts:\n - notary."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n gateways:\n - harbor-gateway\n tls:\n - match:\n - port: 443\n sniHosts:\n - notary."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n route:\n - destination:\n host: harbor.harbor.svc.cluster.local\n port:\n number: 4443\nEOF")]),a._v("\n")])])]),t("p",[a._v("Add Harbor Helm repository:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("helm repo "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("add")]),a._v(" harbor https://helm.goharbor.io\nhelm repo update\n")])])]),t("p",[a._v("Install Harbor using Helm:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("helm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" harbor harbor/harbor "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--namespace")]),a._v(" harbor "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v(" v1.2.3 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wait")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("expose.tls.enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("expose.tls.secretName")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("ingress-cert-"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("expose.type")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("clusterIP "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("externalURL")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("https://harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("harborAdminPassword")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("admin "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("persistence.enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false\n")])])]),t("p",[a._v("Output:")]),a._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("NAME: harbor\nLAST DEPLOYED: Fri Dec 27 10:54:23 2019\nNAMESPACE: harbor\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\nNOTES:\nPlease wait for several minutes for Harbor deployment to complete.\nThen you should be able to visit the Harbor portal at https://harbor.mylabs.dev.\nFor more details, please visit https://github.com/goharbor/harbor.\n")])])]),t("p",[a._v("Open the "),t("a",{attrs:{href:"https://harbor.mylabs.dev",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://harbor.mylabs.dev"),t("OutboundLink")],1),a._v(":")]),a._v(" "),t("p",[t("img",{attrs:{src:s(301),alt:"Harbor login page",title:"Harbor login page"}})]),a._v(" "),t("p",[a._v("Log in:")]),a._v(" "),t("ul",[t("li",[a._v("User: "),t("code",[a._v("admin")])]),a._v(" "),t("li",[a._v("Password: "),t("code",[a._v("admin")])])]),a._v(" "),t("p",[a._v("You should see the Web UI:")]),a._v(" "),t("p",[t("img",{attrs:{src:s(302),alt:"Harbor",title:"Harbor"}})]),a._v(" "),t("p",[a._v("Create new robot account for "),t("code",[a._v("library")]),a._v(" project:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("HARBOR_ROBOT_TOKEN")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-k")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-u")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"admin:admin"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-X")]),a._v(" POST "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-H")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Content-Type: application/json"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://harbor.'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('/api/projects/1/robots"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"{\n '),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("name"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("myrobot"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("description"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("Robot account with Push/Pull access to library project"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("access"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(": [\n {\n "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("resource"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("/project/1/repository"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(",\n "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("action"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("push"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v('\n }\n ]\n}"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('".token"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${HARBOR_ROBOT_TOKEN}")]),a._v("\n")])])]),t("p",[a._v("Output:")]),a._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("eyJhbGciO .... oOFJvwidsQ\n")])])]),t("p",[a._v('Enable automated vulnerability scan after each "image push" to the project\n'),t("code",[a._v("library")]),a._v(":")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-k")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-u")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"admin:admin"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-X")]),a._v(" PUT "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://harbor.'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('/api/projects/1"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-H")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Content-Type: application/json"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"{\n '),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("metadata"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(": {\n "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("auto_scan"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("true"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v('\n }\n}"')]),a._v("\n")])])]),t("p",[a._v("Test Harbor functionality by uploading docker image (optional):")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"staging"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("then")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("SSL_CERT_FILE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$PWD")]),a._v("/tmp/fakelerootx1.pem\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("fi")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull gcr.io/kuar-demo/kuard-amd64:blue\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" tag gcr.io/kuar-demo/kuard-amd64:blue harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("/library/kuard-amd64:blue\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$HARBOR_ROBOT_TOKEN")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" login "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--username")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"robot\\'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$myrobot")]),a._v('"')]),a._v(" --password-stdin harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" push harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("/library/kuard-amd64:blue\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" tag gcr.io/kuar-demo/kuard-amd64:blue harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("/library/kuard-amd64:blue2\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" admin "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" login "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--username")]),a._v(" admin --password-stdin harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("DOCKER_CONTENT_TRUST")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("DOCKER_CONTENT_TRUST_SERVER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("https://notary."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mypassphrase123"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"rootpassphrase123"')]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" push harbor."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("/library/kuard-amd64:blue2\n\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("unset")]),a._v(" DOCKER_CONTENT_TRUST\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("unset")]),a._v(" SSL_CERT_FILE\n")])])])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/22.cd6b7b59.js b/assets/js/22.cd6b7b59.js
new file mode 100644
index 0000000..e1437d8
--- /dev/null
+++ b/assets/js/22.cd6b7b59.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{307:function(e,t,a){e.exports=a.p+"assets/img/GitHub_Webhooks.3cdaed97.png"},308:function(e,t,a){e.exports=a.p+"assets/img/GitHub_Webhooks-Details.da577fc5.png"},327:function(e,t,a){"use strict";a.r(t);var s=a(8),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"automated-deployment-with-tekton"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#automated-deployment-with-tekton"}},[e._v("#")]),e._v(" Automated deployment with Tekton")]),e._v(" "),t("p",[e._v("Take a real example "),t("a",{attrs:{href:"https://github.com/stefanprodan/podinfo",target:"_blank",rel:"noopener noreferrer"}},[e._v("Podinfo"),t("OutboundLink")],1),e._v("\napplication and create full pipeline for it...")]),e._v(" "),t("h2",{attrs:{id:"fork-podinfo-application"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fork-podinfo-application"}},[e._v("#")]),e._v(" Fork podinfo application")]),e._v(" "),t("p",[e._v("Fork the "),t("a",{attrs:{href:"https://github.com/stefanprodan/podinfo",target:"_blank",rel:"noopener noreferrer"}},[e._v("Podinfo"),t("OutboundLink")],1),e._v(" repository\n"),t("code",[e._v("podinfo")]),e._v(":")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" tmp\nhub clone "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"stefanprodan/podinfo"')]),e._v("\nhub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-C")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"podinfo"')]),e._v(" fork\n")])])]),t("p",[e._v("Output:")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("Cloning into 'podinfo'...\nremote: Enumerating objects: 10, done.\nremote: Counting objects: 100% (10/10), done.\nremote: Compressing objects: 100% (10/10), done.\nremote: Total 5266 (delta 0), reused 3 (delta 0), pack-reused 5256\nReceiving objects: 100% (5266/5266), 9.52 MiB | 1.93 MiB/s, done.\nResolving deltas: 100% (2342/2342), done.\nUpdating ruzickap\nFrom https://github.com/stefanprodan/podinfo\n * [new branch] gh-pages -> ruzickap/gh-pages\n * [new branch] master -> ruzickap/master\n * [new branch] v0.x -> ruzickap/v0.x\n * [new branch] v1.x -> ruzickap/v1.x\n * [new branch] v3.x -> ruzickap/v3.x\nnew remote: ruzickap\n")])])]),t("h2",{attrs:{id:"create-tekton-triggers-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-tekton-triggers-configuration"}},[e._v("#")]),e._v(" Create Tekton Triggers configuration")]),e._v(" "),t("p",[e._v("Create new namespace:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("kubectl create namespace getting-started\n")])])]),t("p",[e._v("Create the admin user, role and rolebinding:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -")]),e._v('\nkind: Role\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: tekton-triggers-admin\n namespace: getting-started\nrules:\n- apiGroups:\n - tekton.dev\n resources:\n - eventlisteners\n - triggerbindings\n - triggertemplates\n - pipelineresources\n verbs:\n - get\n- apiGroups:\n - tekton.dev\n resources:\n - pipelineruns\n - pipelineresources\n verbs:\n - create\n- apiGroups:\n - ""\n resources:\n - configmaps\n verbs:\n - get\n - list\n - watch\n- apiGroups:\n - apps\n resources:\n - deployments\n verbs:\n - get\n - list\n - watch\n - create\n - patch\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: tekton-triggers-admin\n namespace: getting-started\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: tekton-triggers-admin-binding\n namespace: getting-started\nsubjects:\n - kind: ServiceAccount\n name: tekton-triggers-admin\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: tekton-triggers-admin\nEOF')]),e._v("\n")])])]),t("p",[e._v("Create the "),t("code",[e._v("create-webhook")]),e._v(" user, role and rolebinding:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -")]),e._v('\nkind: Role\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: tekton-triggers-createwebhook\n namespace: getting-started\nrules:\n- apiGroups:\n - ""\n resources:\n - secrets\n verbs:\n - get\n - list\n - create\n - update\n - delete\n- apiGroups:\n - tekton.dev\n resources:\n - eventlisteners\n verbs:\n - get\n - list\n - create\n - update\n - delete\n- apiGroups:\n - networking.istio.io\n resources:\n - virtualservices\n - gateways\n verbs:\n - create\n - get\n - list\n - delete\n - update\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: tekton-triggers-createwebhook\n namespace: getting-started\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: tekton-triggers-createwebhook\n namespace: getting-started\nsubjects:\n - kind: ServiceAccount\n name: tekton-triggers-createwebhook\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: tekton-triggers-createwebhook\nEOF')]),e._v("\n")])])]),t("p",[e._v("Create secret for Harbor registry to let Tekton pipeline to upload the container\nimage:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("kubectl create secret docker-registry "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started harbor-docker-config "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n --docker-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${CONTAINER_REGISTRY_SERVER}")]),e._v('"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n --docker-username"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${CONTAINER_REGISTRY_USERNAME}")]),e._v('"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n --docker-password"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${CONTAINER_REGISTRY_PASSWORD}")]),e._v('"')]),e._v("\n")])])]),t("p",[e._v("Install the Pipeline:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("EOF "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -\napiVersion: tekton.dev/v1alpha1\nkind: Task\nmetadata:\n name: build-docker-image-from-git-task\n namespace: getting-started\nspec:\n inputs:\n resources:\n - name: docker-source\n type: "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v("\n params:\n - name: pathToDockerFile\n description: The path to the dockerfile to build\n default: /workspace/docker-source/Dockerfile\n - name: pathToContext\n description:\n The build context used by Kaniko\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("https://github.com/GoogleContainerTools/kaniko"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("#kaniko-build-contexts)")]),e._v("\n default: /workspace/docker-source\n outputs:\n resources:\n - name: image-source\n type: image\n volumes:\n - name: docker-config\n secret:\n secretName: harbor-docker-config\n items:\n - key: .dockerconfigjson\n path: config.json\n - name: shared-storage\n emptyDir: "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n steps:\n - name: build\n image: gcr.io/kaniko-project/executor\n env:\n - name: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"DOCKER_CONFIG"')]),e._v("\n value: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/builder/home/.docker/"')]),e._v("\n command:\n - /kaniko/executor\n args:\n - "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--dockerfile")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.pathToDockerFile"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n - "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--destination")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("outputs.resources.image-source.url"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n - "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--context")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.pathToContext"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n - --skip-tls-verify\n volumeMounts:\n - name: docker-config\n mountPath: /builder/home/.docker/\n---\napiVersion: tekton.dev/v1alpha1\nkind: Task\nmetadata:\n name: deploy-locally\n namespace: getting-started\nspec:\n inputs:\n resources:\n - name: image-source\n type: image\n outputs:\n resources:\n - name: event-to-sink\n type: cloudEvent\n steps:\n - name: run-kubectl\n image: lachlanevenson/k8s-kubectl:latest\n command:\n - "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sh")]),e._v("\n args:\n - "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-ce")]),e._v("\n - "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("set")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-ex")]),e._v("\n kubectl run podinfo "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--image")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.resources.image-source.url"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-o")]),e._v(" yaml --dry-run "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -\n---\napiVersion: tekton.dev/v1alpha1\nkind: Pipeline\nmetadata:\n name: getting-started-pipeline\n namespace: getting-started\nspec:\n resources:\n - name: docker-source\n type: "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v("\n - name: image-source\n type: image\n - name: event-to-sink\n type: cloudEvent\n tasks:\n - name: build-docker-image-from-git-task-run\n taskRef:\n name: build-docker-image-from-git-task\n params:\n - name: pathToDockerFile\n value: Dockerfile\n - name: pathToContext\n value: /workspace/docker-source/\n resources:\n inputs:\n - name: docker-source\n resource: docker-source\n outputs:\n - name: image-source\n resource: image-source\n - name: deploy-locally\n taskRef:\n name: deploy-locally\n resources:\n inputs:\n - name: image-source\n resource: image-source\n from:\n - build-docker-image-from-git-task-run\n outputs:\n - name: event-to-sink\n resource: event-to-sink\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: event-display\n namespace: getting-started\n labels:\n app: event-display\nspec:\n type: ClusterIP\n ports:\n - name: listener\n port: "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8080")]),e._v("\n protocol: TCP\n selector:\n app: event-display\n---\n apiVersion: v1\n kind: Pod\n metadata:\n name: event-display\n namespace: getting-started\n labels:\n name: event-display\n spec:\n hostname: event-display\n containers:\n - image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display\n name: web\nEOF\n")])])]),t("p",[e._v("Install the TriggerTemplate, TriggerBinding and EventListener:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -")]),e._v("\napiVersion: tekton.dev/v1alpha1\nkind: TriggerTemplate\nmetadata:\n name: getting-started-triggertemplate\n namespace: getting-started\nspec:\n params:\n - name: gitrevision\n description: The git revision\n default: master\n - name: gitrepositoryurl\n description: The git repository url\n - name: image_registry_url\n description: The container registry url\n - name: namespace\n description: The namespace to create the resources\n resourcetemplates:\n - apiVersion: tekton.dev/v1alpha1\n kind: PipelineResource\n metadata:\n name: source-repo-\\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("uid"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n namespace: \\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("params.namespace"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n spec:\n type: git\n params:\n - name: revision\n value: \\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("params.gitrevision"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n - name: url\n value: \\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("params.gitrepositoryurl"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n - apiVersion: tekton.dev/v1alpha1\n kind: PipelineResource\n metadata:\n name: image-source-\\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("uid"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n namespace: \\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("params.namespace"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n spec:\n type: image\n params:\n - name: url\n value: \\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("params.image_registry_url"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n - apiVersion: tekton.dev/v1alpha1\n kind: PipelineResource\n metadata:\n name: event-to-sink-\\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("uid"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n namespace: \\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("params.namespace"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n spec:\n type: cloudEvent\n params:\n - name: targetURI\n value: http://event-display.getting-started.svc.cluster.local\n - apiVersion: tekton.dev/v1alpha1\n kind: PipelineRun\n metadata:\n name: getting-started-pipeline-run-\\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("uid"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n namespace: \\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("params.namespace"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n spec:\n serviceAccount: tekton-triggers-admin\n pipelineRef:\n name: getting-started-pipeline\n resources:\n - name: docker-source\n resourceRef:\n name: source-repo-\\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("uid"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n - name: image-source\n resourceRef:\n name: image-source-\\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("uid"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n - name: event-to-sink\n resourceRef:\n name: event-to-sink-\\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("uid"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n---\napiVersion: tekton.dev/v1alpha1\nkind: TriggerBinding\nmetadata:\n name: getting-started-pipelinebinding\n namespace: getting-started\nspec:\n params:\n - name: gitrevision\n value: \\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("body.head_commit.id"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v('\n - name: namespace\n value: getting-started\n - name: gitrepositoryurl\n value: "https://github.com/\\'),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("body.repository.full_name"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v('"\n - name: image_registry_url\n value: "harbor.'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MY_DOMAIN}")]),e._v("/library/\\"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("body.repository.name"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v('"\n---\napiVersion: tekton.dev/v1alpha1\nkind: EventListener\nmetadata:\n name: getting-started-listener\n namespace: getting-started\nspec:\n serviceAccountName: tekton-triggers-admin\n triggers:\n - binding:\n name: getting-started-pipelinebinding\n template:\n name: getting-started-triggertemplate\nEOF')]),e._v("\n")])])]),t("h3",{attrs:{id:"configure-webhook"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configure-webhook"}},[e._v("#")]),e._v(" Configure webhook")]),e._v(" "),t("p",[e._v("Create Task which will create Istio Gateway and VirtualService to handle\nincoming webhook form GitHub:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("EOF2 "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -\napiVersion: tekton.dev/v1alpha1\nkind: Task\nmetadata:\n name: create-istio-gateway-virtualservice\n namespace: getting-started\nspec:\n volumes:\n - name: work\n emptyDir: "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n inputs:\n params:\n - name: TLScredentialName\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Specify the secret with wildcard certificate"')]),e._v("\n - name: ExternalDomain\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The external domain for the EventListener"')]),e._v("\n - name: Service\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The name of the Service used in the VirtualService"')]),e._v("\n - name: ServicePort\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The service port that the VirtualService is being created on"')]),e._v("\n\n steps:\n - name: create-istio-gateway-virtualservice\n image: lachlanevenson/k8s-kubectl:latest\n command:\n - "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sh")]),e._v("\n args:\n - "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-ce")]),e._v("\n - "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("set")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-ex")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl create "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -")]),e._v("\n apiVersion: networking.istio.io/v1alpha3\n kind: Gateway\n metadata:\n name: "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.Service"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("-gateway\n spec:\n selector:\n istio: ingressgateway\n servers:\n - port:\n number: 443\n name: https-"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.Service"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n protocol: HTTPS\n hosts:\n - "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.ExternalDomain"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n tls:\n credentialName: "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.TLScredentialName"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n mode: SIMPLE\n privateKey: sds\n serverCertificate: sds\n ---\n apiVersion: networking.istio.io/v1alpha3\n kind: VirtualService\n metadata:\n name: "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.Service"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("-virtual-service\n spec:\n hosts:\n - "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.ExternalDomain"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n gateways:\n - "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.Service"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("-gateway\n http:\n - route:\n - destination:\n host: "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.Service"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n port:\n number: "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.ServicePort"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n EOF\nEOF")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2")]),e._v("\n")])])]),t("p",[e._v("Create TaskRun to start "),t("code",[e._v("create-istio-gateway-virtualservice")]),e._v(" Task:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -")]),e._v("\napiVersion: tekton.dev/v1alpha1\nkind: TaskRun\nmetadata:\n name: create-istio-gateway-virtualservice-run\n namespace: getting-started\nspec:\n taskRef:\n name: create-istio-gateway-virtualservice\n inputs:\n params:\n - name: TLScredentialName\n value: ingress-cert-"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${LETSENCRYPT_ENVIRONMENT}")]),e._v("\n - name: ExternalDomain\n value: getting-started."),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MY_DOMAIN}")]),e._v('\n - name: Service\n value: el-getting-started-listener\n - name: ServicePort\n value: "8080"\n timeout: 1000s\n serviceAccount: tekton-triggers-createwebhook\nEOF')]),e._v("\n")])])]),t("p",[e._v("Create webhook Task:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("EOF "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -\napiVersion: tekton.dev/v1alpha1\nkind: Task\nmetadata:\n name: create-webhook\n namespace: getting-started\nspec:\n volumes:\n - name: github-secret\n secret:\n secretName: "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.GitHubSecretName"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n\n inputs:\n params:\n - name: ExternalDomain\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The external domain for the EventListener e.g. '),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.EventListenerName"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("."),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("PROXYIP"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(".nip.io"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")])]),e._v('"')]),e._v("\n - name: GitHubUser\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The GitHub user"')]),e._v("\n - name: GitHubRepo\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The GitHub repo where the webhook will be created"')]),e._v("\n - name: GitHubOrg\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The GitHub organization where the webhook will be created"')]),e._v("\n - name: GitHubSecretName\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The Secret name for GitHub access token. This is always mounted and must exist"')]),e._v("\n - name: GitHubAccessTokenKey\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The GitHub access token key name"')]),e._v("\n - name: GitHubSecretStringKey\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The GitHub secret string key name"')]),e._v("\n - name: GitHubDomain\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"The GitHub domain. Override for GitHub Enterprise"')]),e._v("\n default: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"github.com"')]),e._v("\n - name: WebhookEvents\n description: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"List of events the webhook will send notifications for"')]),e._v("\n default: "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"['),t("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[e._v("\\\\")]),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("push"),t("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[e._v("\\\\")]),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(","),t("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[e._v("\\\\")]),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("pull_request"),t("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[e._v("\\\\")]),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(']"')]),e._v("\n\n steps:\n - name: create-webhook\n image: pstauffer/curl:latest\n volumeMounts:\n - name: github-secret\n mountPath: /var/secret\n command:\n - "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sh")]),e._v("\n args:\n - "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-ce")]),e._v("\n - "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("set")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Create Webhook"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("if")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.GitHubDomain"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"github.com"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("then")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-v")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{'),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("name"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("web"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(","),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("active"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": true,"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("events"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.WebhookEvents"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v(","),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("config"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": {"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("url"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("https://"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.ExternalDomain"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(","),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("content_type"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("json"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(","),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("insecure_ssl"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("1"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(" ,"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("secret"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" /var/secret/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("inputs.params.GitHubSecretStringKey"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v('}}"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-X")]),e._v(" POST "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-u")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.GitHubUser"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" /var/secret/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("inputs.params.GitHubAccessTokenKey"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" https://api.github.com/repos/"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.GitHubOrg"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("/"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.GitHubRepo"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("/hooks\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("else")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{'),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("name"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("web"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(","),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("active"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": true,"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("events"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.WebhookEvents"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v(","),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("config"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": {"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("url"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("https://"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.ExternalDomain"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("/"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(","),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("content_type"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("json"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(","),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("insecure_ssl"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("1"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(" ,"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v("secret"),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v(": "),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" /var/secret/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("inputs.params.GitHubSecretStringKey"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),t("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[e._v('\\"')]),e._v('}}"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-X")]),e._v(" POST "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-u")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.GitHubUser"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" /var/secret/"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("inputs.params.GitHubAccessTokenKey"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" https://"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.GitHubDomain"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("/api/v3/repos/"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.GitHubOrg"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("/"),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("inputs.params.GitHubRepo"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("/hooks\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("fi")]),e._v("\nEOF\n")])])]),t("p",[e._v("Create secret with "),t("a",{attrs:{href:"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub Personal Access Token"),t("OutboundLink")],1),e._v(":")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -")]),e._v("\napiVersion: v1\nkind: Secret\nmetadata:\n name: webhook-secret\n namespace: getting-started\nstringData:\n token: "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${GITHUB_TOKEN}")]),e._v("\n secret: random-string-data\nEOF")]),e._v("\n")])])]),t("p",[e._v("Create TaskRun to initiate Webhook:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sleep")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("20")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Wait for DNS created by previous TaskRun")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" -")]),e._v('\napiVersion: tekton.dev/v1alpha1\nkind: TaskRun\nmetadata:\n name: create-webhook-run\n namespace: getting-started\nspec:\n taskRef:\n name: create-webhook\n inputs:\n params:\n - name: GitHubOrg\n value: "ruzickap"\n - name: GitHubUser\n value: "ruzickap"\n - name: GitHubRepo\n value: "podinfo"\n - name: GitHubSecretName\n value: webhook-secret\n - name: GitHubAccessTokenKey\n value: token\n - name: GitHubSecretStringKey\n value: secret\n - name: ExternalDomain\n value: getting-started.'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MY_DOMAIN}")]),e._v("\n timeout: 1000s\n serviceAccount: tekton-triggers-createwebhook\nEOF")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sleep")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("5")]),e._v("\n")])])]),t("p",[e._v("Verify if the TaskRuns were successfully executed:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("kubectl get taskruns.tekton.dev "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started\n")])])]),t("p",[e._v("Output:")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME\ncreate-istio-gateway-virtualservice-run True Succeeded 80s 71s\ncreate-webhook-run Unknown Pending 2s\n")])])]),t("p",[e._v("Look at the logs from "),t("code",[e._v("create-istio-gateway-virtualservice")]),e._v(" TaskRun:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("tkn taskrun logs "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started create-istio-gateway-virtualservice-run\n")])])]),t("p",[e._v("Output:")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("[create-istio-gateway-virtualservice] + + kubectl create -f -\n[create-istio-gateway-virtualservice] cat\n[create-istio-gateway-virtualservice] gateway.networking.istio.io/el-getting-started-listener-gateway created\n[create-istio-gateway-virtualservice] virtualservice.networking.istio.io/el-getting-started-listener-virtual-service created\n")])])]),t("p",[e._v("Look at the logs from "),t("code",[e._v("create-webhook-run")]),e._v(" TaskRun:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("tkn taskrun logs "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started create-webhook-run\n")])])]),t("p",[e._v("Output:")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('[create-webhook] Create Webhook\n[create-webhook] Note: Unnecessary use of -X or --request, POST is already inferred.\n[create-webhook] % Total % Received % Xferd Average Speed Time Time Time Current\n[create-webhook] Dload Upload Total Spent Left Speed\n 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 140.82.118.6...\n[create-webhook] * TCP_NODELAY set\n[create-webhook] * Connected to api.github.com (140.82.118.6) port 443 (#0)\n[create-webhook] * ALPN, offering h2\n[create-webhook] * ALPN, offering http/1.1\n[create-webhook] * successfully set certificate verify locations:\n[create-webhook] * CAfile: /etc/ssl/certs/ca-certificates.crt\n[create-webhook] CApath: none\n[create-webhook] * TLSv1.2 (OUT), TLS handshake, Client hello (1):\n[create-webhook] } [232 bytes data]\n[create-webhook] * TLSv1.2 (IN), TLS handshake, Server hello (2):\n[create-webhook] { [108 bytes data]\n[create-webhook] * TLSv1.2 (IN), TLS handshake, Certificate (11):\n[create-webhook] { [2851 bytes data]\n[create-webhook] * TLSv1.2 (IN), TLS handshake, Server key exchange (12):\n[create-webhook] { [300 bytes data]\n[create-webhook] * TLSv1.2 (IN), TLS handshake, Server finished (14):\n[create-webhook] { [4 bytes data]\n[create-webhook] * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):\n[create-webhook] } [37 bytes data]\n[create-webhook] * TLSv1.2 (OUT), TLS change cipher, Client hello (1):\n[create-webhook] } [1 bytes data]\n[create-webhook] * TLSv1.2 (OUT), TLS handshake, Finished (20):\n[create-webhook] } [16 bytes data]\n[create-webhook] * TLSv1.2 (IN), TLS change cipher, Client hello (1):\n[create-webhook] { [1 bytes data]\n[create-webhook] * TLSv1.2 (IN), TLS handshake, Finished (20):\n[create-webhook] { [16 bytes data]\n[create-webhook] * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256\n[create-webhook] * ALPN, server accepted to use http/1.1\n[create-webhook] * Server certificate:\n[create-webhook] * subject: C=US; ST=California; L=San Francisco; O=GitHub, Inc.; CN=*.github.com\n[create-webhook] * start date: Jul 8 00:00:00 2019 GMT\n[create-webhook] * expire date: Jul 16 12:00:00 2020 GMT\n[create-webhook] * subjectAltName: host "api.github.com" matched cert\'s "*.github.com"\n[create-webhook] * issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert SHA2 High Assurance Server CA\n[create-webhook] * SSL certificate verify ok.\n[create-webhook] * Server auth using Basic with user \'ruzickap\'\n[create-webhook] > POST /repos/ruzickap/podinfo/hooks HTTP/1.1\n[create-webhook] > Host: api.github.com\n[create-webhook] > Authorization: Basic cnxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxU3MA==\n[create-webhook] > User-Agent: curl/7.60.0\n[create-webhook] > Accept: */*\n[create-webhook] > Content-Length: 195\n[create-webhook] > Content-Type: application/x-www-form-urlencoded\n[create-webhook] >\n[create-webhook] } [195 bytes data]\n[create-webhook] * upload completely sent off: 195 out of 195 bytes\n[create-webhook] < HTTP/1.1 201 Created\n[create-webhook] < Date: Fri, 27 Dec 2019 10:19:37 GMT\n[create-webhook] < Content-Type: application/json; charset=utf-8\n[create-webhook] < Content-Length: 688\n[create-webhook] < Server: GitHub.com\n[create-webhook] < Status: 201 Created\n[create-webhook] < X-RateLimit-Limit: 5000\n[create-webhook] < X-RateLimit-Remaining: 4992\n[create-webhook] < X-RateLimit-Reset: 1577445296\n[create-webhook] < Cache-Control: private, max-age=60, s-maxage=60\n[create-webhook] < Vary: Accept, Authorization, Cookie, X-GitHub-OTP\n[create-webhook] < ETag: "a9xxxxxxxxxxxxxxxxxxxxxxxxxxxxe3"\n[create-webhook] < X-OAuth-Scopes: admin:org_hook, admin:repo_hook, delete_repo, read:org, repo, user:email\n[create-webhook] < X-Accepted-OAuth-Scopes: admin:repo_hook, public_repo, repo, write:repo_hook\n[create-webhook] < Location: https://api.github.com/repos/ruzickap/podinfo/hooks/170061618\n[create-webhook] < X-GitHub-Media-Type: github.v3; format=json\n[create-webhook] < Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type\n[create-webhook] < Access-Control-Allow-Origin: *\n[create-webhook] < Strict-Transport-Security: max-age=31536000; includeSubdomains; preload\n[create-webhook] < X-Frame-Options: deny\n[create-webhook] < X-Content-Type-Options: nosniff\n[create-webhook] < X-XSS-Protection: 1; mode=block\n[create-webhook] < Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin\n[create-webhook] < Content-Security-Policy: default-src \'none\'\n[create-webhook] < Vary: Accept-Encoding\n[create-webhook] < X-GitHub-Request-Id: CEXX:XXXXX:XXXXXXX:XXXXXXX:XXXXXXB9\n[create-webhook] <\n[create-webhook] { [688 bytes data]\n100 883 100 688 100 195 1746 494 --:--:-- --:--:-- --:--:-- 2241\n[create-webhook] * Connection #0 to host api.github.com left intact\n[create-webhook] {\n[create-webhook] "type": "Repository",\n[create-webhook] "id": 170061618,\n[create-webhook] "name": "web",\n[create-webhook] "active": true,\n[create-webhook] "events": [\n[create-webhook] "pull_request",\n[create-webhook] "push"\n[create-webhook] ],\n[create-webhook] "config": {\n[create-webhook] "content_type": "json",\n[create-webhook] "insecure_ssl": "1",\n[create-webhook] "secret": "********",\n[create-webhook] "url": "https://getting-started.mylabs.dev"\n[create-webhook] },\n[create-webhook] "updated_at": "2019-12-27T10:19:37Z",\n[create-webhook] "created_at": "2019-12-27T10:19:37Z",\n[create-webhook] "url": "https://api.github.com/repos/ruzickap/podinfo/hooks/170061618",\n[create-webhook] "test_url": "https://api.github.com/repos/ruzickap/podinfo/hooks/170061618/test",\n[create-webhook] "ping_url": "https://api.github.com/repos/ruzickap/podinfo/hooks/170061618/pings",\n[create-webhook] "last_response": {\n[create-webhook] "code": null,\n[create-webhook] "status": "unused",\n[create-webhook] "message": null\n[create-webhook] }\n[create-webhook] }\n')])])]),t("p",[e._v("You should also see in the GitHub / Settings / Webhook the registration "),t("a",{attrs:{href:"https://github.com/ruzickap/podinfo/settings/hooks/",target:"_blank",rel:"noopener noreferrer"}},[e._v("https://github.com/ruzickap/podinfo/settings/hooks/"),t("OutboundLink")],1),e._v(":")]),e._v(" "),t("p",[t("img",{attrs:{src:a(307),alt:"GitHub Webhooks",title:"GitHub Webhooks"}})]),e._v(" "),t("p",[e._v("After clicking on the Webhook you can see the details:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(308),alt:"GitHub Webhooks - Details",title:"GitHub Webhooks - Details"}})]),e._v(" "),t("p",[e._v("In case you are troubleshooting the incoming traffic from GitHub the look at\nthe logs of the pod. You should be able to see the details\nin the "),t("code",[e._v("kubectl logs")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("kubectl get pods "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-l")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("eventlistener")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("getting-started-listener\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sleep")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("5")]),e._v("\n")])])]),t("p",[e._v("Output:")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("NAME READY STATUS RESTARTS AGE\nel-getting-started-listener-fcffc467d-xwsfp 1/1 Running 0 2m6s\n")])])]),t("h2",{attrs:{id:"change-the-source-code-of-the-app"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-source-code-of-the-app"}},[e._v("#")]),e._v(" Change the source code of the app")]),e._v(" "),t("p",[e._v("Trigger the pipeline by calling the:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Trigger build"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">>")]),e._v(" podinfo/README.md\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-C")]),e._v(" podinfo commit "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-a")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Standard version"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-C")]),e._v(" podinfo push ruzickap\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sleep")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("30")]),e._v("\nkubectl "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--timeout")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("10m "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("wait")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--for")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("condition"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("Succeeded pipelineruns "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--all")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sleep")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("5")]),e._v("\n")])])]),t("p",[e._v("Output:")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("[master d4120e6] Standard version\n 1 file changed, 1 insertion(+), 1 deletion(-)\nWarning: Permanently added '[ssh.github.com]:443,[192.30.253.122]:443' (RSA) to the list of known hosts.\nEnumerating objects: 5, done.\nCounting objects: 100% (5/5), done.\nDelta compression using up to 4 threads\nCompressing objects: 100% (3/3), done.\nWriting objects: 100% (3/3), 325 bytes | 162.00 KiB/s, done.\nTotal 3 (delta 2), reused 0 (delta 0)\nremote: Resolving deltas: 100% (2/2), completed with 2 local objects.\nTo github.com:ruzickap/podinfo.git\n 948de81..d4120e6 master -> master\npipelinerun.tekton.dev/getting-started-pipeline-run-fzrtg condition met\n")])])]),t("p",[e._v("Look at the logs of the newly deployed pod (look at "),t("code",[e._v('"Starting podinfo"')]),e._v("):")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("PODINFO_POD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("kubectl get pods "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-l")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("run"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("podinfo "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-o")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("jsonpath")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{.items[0].metadata.name}"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\nkubectl "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started logs "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${PODINFO_POD}")]),e._v("\n")])])]),t("p",[e._v("Output:")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"level"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"info"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"ts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"2019-11-27T15:00:58.907Z"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"caller"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"podinfo/main.go:120"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"msg"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Starting podinfo"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"version"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"3.1.5"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"revision"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"164a27b33b09d1b50fad277a60a6c19d353cb9d8"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"9898"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("Let's try to change the code of the application:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-i")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"s/Starting podinfo/Starting podinfo - new Tekton build version/"')]),e._v(" podinfo/cmd/podinfo/main.go\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-C")]),e._v(" podinfo "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("diff")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-C")]),e._v(" podinfo commit "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-a")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"String changed"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-C")]),e._v(" podinfo push ruzickap\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sleep")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("20")]),e._v("\n")])])]),t("p",[e._v("Output:")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\nmodified: cmd/podinfo/main.go\n─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n@ cmd/podinfo/main.go:120 @ func main() {\n }\n\n // log version and port\n logger.Info("Starting podinfo",\n logger.Info("Starting podinfo - new Tekton build version",\n zap.String("version", viper.GetString("version")),\n zap.String("revision", viper.GetString("revision")),\n zap.String("port", srvCfg.Port),\n[master 4d9f5bc] String changed\n 1 file changed, 1 insertion(+), 1 deletion(-)\nWarning: Permanently added \'[ssh.github.com]:443,[192.30.253.122]:443\' (RSA) to the list of known hosts.\nEnumerating objects: 9, done.\nCounting objects: 100% (9/9), done.\nDelta compression using up to 4 threads\nCompressing objects: 100% (4/4), done.\nWriting objects: 100% (5/5), 459 bytes | 459.00 KiB/s, done.\nTotal 5 (delta 2), reused 0 (delta 0)\nremote: Resolving deltas: 100% (2/2), completed with 2 local objects.\nTo github.com:ruzickap/podinfo.git\n d4120e6..4d9f5bc master -> master\n')])])]),t("p",[e._v("Wait for the pipelines to complete:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("kubectl "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--timeout")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("10m "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("wait")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--for")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("condition"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("Succeeded pipelineruns "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--all")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sleep")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("5")]),e._v("\n")])])]),t("p",[e._v("Output:")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("pipelinerun.tekton.dev/getting-started-pipeline-run-dzqdl condition met\npipelinerun.tekton.dev/getting-started-pipeline-run-fzrtg condition met\n")])])]),t("p",[e._v('Check how the logs of the newly deployed podinfo logs should contain\n"Starting podinfo - new Tekton build version":')]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("PODINFO_POD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("kubectl get pods "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-l")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("run"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("podinfo "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-o")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("jsonpath")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{.items[0].metadata.name}"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\nkubectl "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started delete pod "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${PODINFO_POD}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sleep")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("5")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("PODINFO_POD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("kubectl get pods "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-l")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("run"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("podinfo "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-o")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("jsonpath")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{.items[0].metadata.name}"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\nkubectl "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started logs "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" getting-started "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${PODINFO_POD}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v("\n")])])]),t("p",[e._v("Output:")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[e._v("pod "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"podinfo-6ccfb5f9b6-bwrbn"')]),e._v(" deleted\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"level"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"info"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"ts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"2019-12-27T10:28:22.304Z"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"caller"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"podinfo/main.go:120"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"msg"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Starting podinfo - new Tekton build version"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"version"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"3.1.5"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"revision"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"4d9f5bc71bd9a8c7ae44a9cd9631e45067727a2e"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"9898"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])])])}),[],!1,null,null,null);t.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/23.1d6373ca.js b/assets/js/23.1d6373ca.js
new file mode 100644
index 0000000..972f306
--- /dev/null
+++ b/assets/js/23.1d6373ca.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{246:function(t,n,e){"use strict";e.d(n,"d",(function(){return r})),e.d(n,"a",(function(){return s})),e.d(n,"i",(function(){return u})),e.d(n,"f",(function(){return a})),e.d(n,"g",(function(){return l})),e.d(n,"h",(function(){return c})),e.d(n,"b",(function(){return f})),e.d(n,"e",(function(){return h})),e.d(n,"k",(function(){return p})),e.d(n,"l",(function(){return d})),e.d(n,"c",(function(){return b})),e.d(n,"j",(function(){return m}));e(92);const r=/#.*$/,i=/\.(md|html)$/,s=/\/$/,u=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(r,"").replace(i,"")}function a(t){return u.test(t)}function l(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function f(t){if(a(t))return t;const n=t.match(r),e=n?n[0]:"",i=o(t);return s.test(i)?t:i+".html"+e}function h(t,n){const e=decodeURIComponent(t.hash),i=function(t){const n=t.match(r);if(n)return n[0]}(n);if(i&&e!==i)return!1;return o(t.path)===o(n)}function p(t,n,e){if(a(n))return{type:"external",path:n};e&&(n=function(t,n,e){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return n+t;const i=n.split("/");e&&i[i.length-1]||i.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(n,e,r,i=1){if("string"==typeof n)return p(e,n,r);if(Array.isArray(n))return Object.assign(p(e,n[0],r),{title:n[1]});{const s=n.children||[];return 0===s.length&&n.path?Object.assign(p(e,n.path,r),{title:n.title}):{type:"group",path:n.path,title:n.title,sidebarDepth:n.sidebarDepth,initialOpenGroupIndex:n.initialOpenGroupIndex,children:s.map(n=>t(n,e,r,i+1)),collapsable:!1!==n.collapsable}}}(t,i,e)):[]}return[]}function g(t){const n=b(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:n.map(n=>({type:"auto",title:n.title,basePath:t.path,path:t.path+"#"+n.slug,children:n.children||[]}))}]}function b(t){let n;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?n=t:n&&(n.children||(n.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},248:function(t,n,e){"use strict";e.r(n);var r=e(246),i={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(r.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(r.g)(this.link)||Object(r.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(r.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(r.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},s=e(8),u=Object(s.a)(i,(function(){var t=this,n=t._self._c;return t.isInternal?n("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(n){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):n("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?n("OutboundLink"):t._e()],1)}),[],!1,null,null,null);n.default=u.exports}}]);
\ No newline at end of file
diff --git a/assets/js/24.8718cec4.js b/assets/js/24.8718cec4.js
new file mode 100644
index 0000000..bdf9a99
--- /dev/null
+++ b/assets/js/24.8718cec4.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{304:function(a,t,s){a.exports=s.p+"assets/img/kubed.e88b1fb6.svg"},324:function(a,t,s){"use strict";s.r(t);var e=s(8),r=Object(e.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"istio-knative-cert-manager-kubed-installation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#istio-knative-cert-manager-kubed-installation"}},[a._v("#")]),a._v(" Istio + Knative + cert-manager + kubed installation")]),a._v(" "),t("p",[a._v("Before we move on with other tasks it is necessary to install Nginx Ingress.\nIt's also handy to install cert-manager for managing SSL certificates.")]),a._v(" "),t("h2",{attrs:{id:"install-cert-manager"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-cert-manager"}},[a._v("#")]),a._v(" Install cert-manager")]),a._v(" "),t("p",[a._v("cert-manager architecture:")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://raw.githubusercontent.com/jetstack/cert-manager/4f30ed75e88e5d0defeb950501b5cac6da7fa7fe/docs/images/high-level-overview.png",alt:"cert-manager high level overview",title:"cert-manager high level overview"}})]),a._v(" "),t("p",[a._v("Install the CRDs resources separately:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" https://raw.githubusercontent.com/jetstack/cert-manager/release-0.10/deploy/manifests/00-crds.yaml\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sleep")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("5")]),a._v("\n")])])]),t("p",[a._v("Create the namespace for cert-manager and label it to disable resource\nvalidation:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl create namespace cert-manager\nkubectl label namespace cert-manager certmanager.k8s.io/disable-validation"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true\n")])])]),t("p",[a._v("Install the cert-manager Helm chart:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("helm repo "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("add")]),a._v(" jetstack https://charts.jetstack.io\nhelm repo update\nhelm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" cert-manager "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--namespace")]),a._v(" cert-manager "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wait")]),a._v(" jetstack/cert-manager "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v(" v0.10.1\n")])])]),t("p",[a._v("Output:")]),a._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v('"jetstack" has been added to your repositories\nHang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "jetstack" chart repository\n...Successfully got an update from the "stable" chart repository\nUpdate Complete. ⎈ Happy Helming!⎈\nNAME: cert-manager\nLAST DEPLOYED: Fri Dec 27 10:48:40 2019\nNAMESPACE: cert-manager\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\nNOTES:\ncert-manager has been deployed successfully!\n\nIn order to begin issuing certificates, you will need to set up a ClusterIssuer\nor Issuer resource (for example, by creating a \'letsencrypt-staging\' issuer).\n\nMore information on the different types of issuers and how to configure them\ncan be found in our documentation:\n\nhttps://docs.cert-manager.io/en/latest/reference/issuers.html\n\nFor information on how to configure cert-manager to automatically provision\nCertificates for Ingress resources, take a look at the `ingress-shim`\ndocumentation:\n\nhttps://docs.cert-manager.io/en/latest/reference/ingress-shim.html\n')])])]),t("h3",{attrs:{id:"create-clusterissuer-for-let-s-encrypt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-clusterissuer-for-let-s-encrypt"}},[a._v("#")]),a._v(" Create ClusterIssuer for Let's Encrypt")]),a._v(" "),t("p",[a._v("Create "),t("code",[a._v("ClusterIssuer")]),a._v(" for Route53 used by cert-manager. It will allow Let's\nEncrypt to generate certificate. Route53 (DNS) method of requesting certificate\nfrom Let's Encrypt must be used to create wildcard certificate "),t("code",[a._v("*.mylabs.dev")]),a._v("\n(details "),t("a",{attrs:{href:"https://community.letsencrypt.org/t/wildcard-certificates-via-http-01/51223",target:"_blank",rel:"noopener noreferrer"}},[a._v("here"),t("OutboundLink")],1),a._v(").")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://b3n.org/wp-content/uploads/2016/09/acme_letsencrypt_dns-01-challenge.png",alt:"ACME DNS Challenge",title:"ACME DNS Challenge"}})]),a._v(" "),t("p",[a._v("("),t("a",{attrs:{href:"https://b3n.org/intranet-ssl-certificates-using-lets-encrypt-dns-01/",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://b3n.org/intranet-ssl-certificates-using-lets-encrypt-dns-01/"),t("OutboundLink")],1),a._v(")")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("USER_AWS_SECRET_ACCESS_KEY_BASE64")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$USER_AWS_SECRET_ACCESS_KEY")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" base64"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" -")]),a._v("\napiVersion: v1\nkind: Secret\nmetadata:\n name: aws-user-secret-access-key-secret\n namespace: cert-manager\ndata:\n secret-access-key: "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$USER_AWS_SECRET_ACCESS_KEY_BASE64")]),a._v("\n---\napiVersion: certmanager.k8s.io/v1alpha1\nkind: ClusterIssuer\nmetadata:\n name: letsencrypt-staging-dns\n namespace: cert-manager\nspec:\n acme:\n server: https://acme-staging-v02.api.letsencrypt.org/directory\n email: petr.ruzicka@gmail.com\n privateKeySecretRef:\n name: letsencrypt-staging-dns\n dns01:\n providers:\n - name: aws-route53\n route53:\n accessKeyID: "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${USER_AWS_ACCESS_KEY_ID}")]),a._v("\n region: eu-central-1\n secretAccessKeySecretRef:\n name: aws-user-secret-access-key-secret\n key: secret-access-key\n---\napiVersion: certmanager.k8s.io/v1alpha1\nkind: ClusterIssuer\nmetadata:\n name: letsencrypt-production-dns\n namespace: cert-manager\nspec:\n acme:\n server: https://acme-v02.api.letsencrypt.org/directory\n email: petr.ruzicka@gmail.com\n privateKeySecretRef:\n name: letsencrypt-production-dns\n dns01:\n providers:\n - name: aws-route53\n route53:\n accessKeyID: "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${USER_AWS_ACCESS_KEY_ID}")]),a._v("\n region: eu-central-1\n secretAccessKeySecretRef:\n name: aws-user-secret-access-key-secret\n key: secret-access-key\nEOF")]),a._v("\n")])])]),t("h2",{attrs:{id:"generate-tls-certificate"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#generate-tls-certificate"}},[a._v("#")]),a._v(" Generate TLS certificate")]),a._v(" "),t("p",[a._v("Create certificate using cert-manager:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" -")]),a._v("\napiVersion: certmanager.k8s.io/v1alpha1\nkind: Certificate\nmetadata:\n name: ingress-cert-"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT}")]),a._v("\n namespace: cert-manager\nspec:\n secretName: ingress-cert-"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT}")]),a._v("\n issuerRef:\n kind: ClusterIssuer\n name: letsencrypt-"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT}")]),a._v('-dns\n commonName: "*.'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('"\n dnsNames:\n - "*.'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('"\n acme:\n config:\n - dns01:\n provider: aws-route53\n domains:\n - "*.'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('"\nEOF')]),a._v("\n")])])]),t("p",[a._v("("),t("a",{attrs:{href:"https://www.openshift.com/blog/self-serviced-end-to-end-encryption-approaches-for-applications-deployed-in-openshift",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://www.openshift.com/blog/self-serviced-end-to-end-encryption-approaches-for-applications-deployed-in-openshift"),t("OutboundLink")],1),a._v(")")]),a._v(" "),t("h2",{attrs:{id:"install-kubed"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-kubed"}},[a._v("#")]),a._v(" Install kubed")]),a._v(" "),t("p",[a._v("It's necessary to copy the wildcard certificate across all \"future\" namespaces\nand that's the reason why "),t("a",{attrs:{href:"https://github.com/appscode/kubed",target:"_blank",rel:"noopener noreferrer"}},[a._v("kubed"),t("OutboundLink")],1),a._v(" needs to be\ninstalled (for now).\n"),t("a",{attrs:{href:"https://github.com/appscode/kubed",target:"_blank",rel:"noopener noreferrer"}},[a._v("kubed"),t("OutboundLink")],1),a._v(" can "),t("a",{attrs:{href:"https://appscode.com/products/kubed/0.9.0/guides/config-syncer/",target:"_blank",rel:"noopener noreferrer"}},[a._v("synchronize ConfigMaps/Secrets"),t("OutboundLink")],1),a._v("\nacross Kubernetes namespaces/clusters.")]),a._v(" "),t("p",[a._v("Kubed - synchronize secret diagram:")]),a._v(" "),t("p",[t("img",{attrs:{src:s(304),alt:"Kubed - synchronize secret",title:"Kubed - synchronize secret"}})]),a._v(" "),t("p",[a._v("Add kubed helm repository:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("helm repo "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("add")]),a._v(" appscode https://charts.appscode.com/stable/\nhelm repo update\n")])])]),t("p",[a._v("Install kubed:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("helm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" kubed appscode/kubed "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0.11")]),a._v(".0 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--namespace")]),a._v(" kube-system "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wait")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("apiserver.enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("config.clusterName")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("my_k8s_cluster\n")])])]),t("p",[a._v("Output:")]),a._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v('NAME: kubed\nLAST DEPLOYED: Fri Dec 27 10:49:39 2019\nNAMESPACE: kube-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\nNOTES:\nTo verify that Kubed has started, run:\n\n kubectl --namespace=kube-system get deployments -l "release=kubed, app=kubed"\n')])])]),t("p",[a._v("Annotate (mark) the cert-manager secret to be copied to other namespaces\nif necessary:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl annotate secret ingress-cert-"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" cert-manager kubed.appscode.com/sync"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"app=kubed"')]),a._v("\n")])])]),t("h2",{attrs:{id:"install-istio"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-istio"}},[a._v("#")]),a._v(" Install Istio")]),a._v(" "),t("p",[a._v("Add Istio helm chart repository:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("ISTIO_VERSION")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1.3.6"')]),a._v("\nhelm repo "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("add")]),a._v(" istio.io https://storage.googleapis.com/istio-release/releases/"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${ISTIO_VERSION}")]),a._v("/charts/\nhelm repo update\n")])])]),t("p",[a._v("Install CRDs for Istio:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl create namespace istio-system\nhelm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" istio-init istio.io/istio-init "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wait")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--namespace")]),a._v(" istio-system "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${ISTIO_VERSION}")]),a._v("\nkubectl "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" istio-system "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wait")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--for")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("condition"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("complete job "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--all")]),a._v("\n")])])]),t("p",[a._v("Output:")]),a._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("namespace/istio-system created\nNAME: istio-init\nLAST DEPLOYED: Fri Dec 27 10:49:56 2019\nNAMESPACE: istio-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\njob.batch/istio-init-crd-10-1.3.6 condition met\njob.batch/istio-init-crd-11-1.3.6 condition met\njob.batch/istio-init-crd-12-1.3.6 condition met\n")])])]),t("p",[a._v("Label Istio namespace and which will trigger "),t("code",[a._v("kubed")]),a._v(" to copy there the secret\nwith certificates signed by Let's Encrypt:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl label namespace istio-system "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("app")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("kubed\n")])])]),t("p",[a._v("Install Istio:")]),a._v(" "),t("p",[a._v("(steps take from "),t("a",{attrs:{href:"https://github.com/knative/docs/blob/a8a1032de0c2b19f07a70456c030dfde94b12c03/docs/install/installing-istio.md",target:"_blank",rel:"noopener noreferrer"}},[a._v("Knative page"),t("OutboundLink")],1),a._v(")")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("helm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" istio istio.io/istio "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wait")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--namespace")]),a._v(" istio-system "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${ISTIO_VERSION}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.autoscaleMax"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.autoscaleMin"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".name"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("status-port "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".port"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("15020")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".targetPort"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("15020")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".name"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".nodePort"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("31380")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".port"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("80")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".targetPort"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("80")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".name"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("https "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".nodePort"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("31390")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".port"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("443")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".name"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("ssh "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".nodePort"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("31400")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.ports"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".port"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("22")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" gateways.istio-ingressgateway.sds.enabled"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("global.disablePolicyChecks")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("global.k8sIngress.enableHttps")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("global.k8sIngress.enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("global.proxy.autoInject")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("disabled "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" grafana.datasources."),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"datasources\\.yaml"')]),a._v(".datasources"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".access"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("proxy "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" grafana.datasources."),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"datasources\\.yaml"')]),a._v(".datasources"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".editable"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" grafana.datasources."),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"datasources\\.yaml"')]),a._v(".datasources"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".isDefault"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" grafana.datasources."),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"datasources\\.yaml"')]),a._v(".datasources"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".jsonData.timeInterval"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("5s "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" grafana.datasources."),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"datasources\\.yaml"')]),a._v(".datasources"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".name"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("Prometheus "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" grafana.datasources."),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"datasources\\.yaml"')]),a._v(".datasources"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".orgId"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" grafana.datasources."),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"datasources\\.yaml"')]),a._v(".datasources"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".type"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("prometheus "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" grafana.datasources."),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"datasources\\.yaml"')]),a._v(".datasources"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(".url"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://prometheus-system-np.knative-monitoring.svc.cluster.local:8080 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("grafana.enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("kiali.contextPath")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("kiali.createDemoSecret")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("kiali.dashboard.grafanaURL")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://grafana."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("kiali.dashboard.jaegerURL")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://jaeger."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("kiali.enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("kiali.prometheusAddr")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://prometheus-system-np.knative-monitoring.svc.cluster.local:8080 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("mixer.adapters.prometheus.enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("pilot.traceSampling")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("100")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("prometheus.enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("false "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("sidecarInjectorWebhook.enableNamespacesByDefault")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("sidecarInjectorWebhook.enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("tracing.enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true\n")])])]),t("p",[a._v("Output:")]),a._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("NAME: istio\nLAST DEPLOYED: Fri Dec 27 10:50:54 2019\nNAMESPACE: istio-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\nNOTES:\nThank you for installing Istio.\n\nYour release is named Istio.\n\nTo get started running application with Istio, execute the following steps:\n1. Label namespace that application object will be deployed to by the following command (take default namespace as an example)\n\n kubectl label namespace default istio-injection=enabled\n kubectl get namespace -L istio-injection\n\n2. Deploy your applications\n\n kubectl apply -f <your-application>.yaml\n\nFor more information on running Istio, visit:\nhttps://istio.io/\n")])])]),t("p",[a._v("Let "),t("code",[a._v("istio-ingressgateway")]),a._v(" to use cert-manager generated certificate via\n"),t("a",{attrs:{href:"https://www.envoyproxy.io/docs/envoy/v1.5.0/intro/arch_overview/service_discovery#arch-overview-service-discovery-types-sds",target:"_blank",rel:"noopener noreferrer"}},[a._v("SDS"),t("OutboundLink")],1),a._v(".\nSteps are taken from this URL: "),t("a",{attrs:{href:"https://istio.io/docs/tasks/traffic-management/ingress/ingress-certmgr/",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://istio.io/docs/tasks/traffic-management/ingress/ingress-certmgr/"),t("OutboundLink")],1),a._v(".")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" istio-system patch gateway istio-autogenerated-k8s-ingress "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--type")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("json "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-p")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"[{"')]),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("op")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),a._v("replace"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('", "')]),a._v("path"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),a._v("/spec/servers/1/tls"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('", "')]),a._v("value"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": {"')]),a._v("credentialName"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),a._v("ingress-cert-"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT}")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('", "')]),a._v("mode"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),a._v("SIMPLE"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('", "')]),a._v("privateKey"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),a._v("sds"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('", "')]),a._v("serverCertificate"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),a._v("sds"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"}}]"')]),a._v("\n")])])]),t("p",[a._v("Disable HTTP2 for gateway "),t("code",[a._v("istio-autogenerated-k8s-ingress")]),a._v(" to be compatible\nwith Knative:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" istio-system patch gateway istio-autogenerated-k8s-ingress "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--type")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("json "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-p")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"[{"')]),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("op")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),a._v("replace"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('", "')]),a._v("path"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),a._v("/spec/servers/0/port"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('", "')]),a._v("value"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": {"')]),a._v("name"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),a._v("http"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('", "')]),a._v("number"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("80")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('", "')]),a._v("protocol"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('": "')]),a._v("HTTP"),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"}}]"')]),a._v("\n")])])]),t("p",[a._v("Allow the "),t("code",[a._v("default")]),a._v(" namespace to use Istio injection:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl label namespace default istio-injection"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("enabled\n")])])]),t("p",[a._v("Configure the Istio services "),t("a",{attrs:{href:"https://www.jaegertracing.io/",target:"_blank",rel:"noopener noreferrer"}},[a._v("Jaeger"),t("OutboundLink")],1),a._v(" and\n"),t("a",{attrs:{href:"https://www.kiali.io/",target:"_blank",rel:"noopener noreferrer"}},[a._v("Kiali"),t("OutboundLink")],1),a._v(" to be visible externally:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v("EOF"),t("span",{pre:!0,attrs:{class:"token bash punctuation"}},[a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" kubectl apply "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" -")]),a._v("\napiVersion: networking.istio.io/v1alpha3\nkind: Gateway\nmetadata:\n name: istio-services-gateway\n namespace: istio-system\nspec:\n selector:\n istio: ingressgateway\n servers:\n - port:\n number: 80\n name: http-istio-services\n protocol: HTTP\n hosts:\n - grafana-istio."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n - jaeger-istio."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n - kiali-istio."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n - port:\n number: 443\n name: https-istio-services\n protocol: HTTPS\n hosts:\n - grafana-istio."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n - jaeger-istio."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n - kiali-istio."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n tls:\n credentialName: ingress-cert-"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT}")]),a._v("\n mode: SIMPLE\n privateKey: sds\n serverCertificate: sds\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: grafana-istio-virtual-service\n namespace: istio-system\nspec:\n hosts:\n - grafana-istio."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n gateways:\n - istio-services-gateway\n http:\n - route:\n - destination:\n host: grafana.istio-system.svc.cluster.local\n port:\n number: 3000\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: jaeger-istio-virtual-service\n namespace: istio-system\nspec:\n hosts:\n - jaeger-istio."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n gateways:\n - istio-services-gateway\n http:\n - route:\n - destination:\n host: tracing.istio-system.svc.cluster.local\n port:\n number: 80\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: kiali-istio-virtual-service\n namespace: istio-system\nspec:\n hosts:\n - kiali-istio."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n gateways:\n - istio-services-gateway\n http:\n - route:\n - destination:\n host: kiali.istio-system.svc.cluster.local\n port:\n number: 20001\nEOF")]),a._v("\n")])])]),t("h2",{attrs:{id:"create-dns-records"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-dns-records"}},[a._v("#")]),a._v(" Create DNS records")]),a._v(" "),t("p",[a._v("Install "),t("a",{attrs:{href:"https://github.com/kubernetes-incubator/external-dns",target:"_blank",rel:"noopener noreferrer"}},[a._v("external-dns"),t("OutboundLink")],1),a._v(" and\nlet it manage "),t("code",[a._v("mylabs.dev")]),a._v(" entries in Route 53 (Do not upgrade external-dns,\nbecause it's not backward compatible and using different way of authentication\nto Route53 using roles):")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl create namespace external-dns\nhelm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" external-dns stable/external-dns "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--namespace")]),a._v(" external-dns "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2.10")]),a._v(".1 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wait")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("aws.credentials.accessKey")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${USER_AWS_ACCESS_KEY_ID}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("aws.credentials.secretKey")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${USER_AWS_SECRET_ACCESS_KEY}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("aws.region")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("eu-central-1 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("domainFilters")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("istioIngressGateways")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("istio-system/istio-ingressgateway"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("interval")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"10s"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("policy")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"sync"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("rbac.create")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("true "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("sources")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"{istio-gateway,service}"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--set")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("txtOwnerId")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),t("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s."),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('"')]),a._v("\n")])])]),t("p",[a._v("Output:")]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[a._v("namespace/external-dns created\nNAME"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" external-dns\nLAST DEPLOYED"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" Fri Dec "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("27")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("10")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("53")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("29")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("2019")]),a._v("\nNAMESPACE"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" external-dns\nSTATUS"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" deployed\nREVISION"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\nTEST SUITE"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" None\nNOTES"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v("\n** Please be patient while the chart is being deployed **\n\nTo verify that external-dns has started"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" run"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v("\n\n kubectl --namespace=external-dns get pods -l "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"app.kubernetes.io/name=external-dns,app.kubernetes.io/instance=external-dns"')]),a._v("\n")])])]),t("p",[t("img",{attrs:{src:"https://raw.githubusercontent.com/aws-samples/eks-workshop/65b766c494a5b4f5420b2912d8373c4957163541/static/images/crystal.svg?sanitize=true",alt:"Architecture",title:"Architecture"}})]),a._v(" "),t("p",[a._v("You should be able to reach these URLs:")]),a._v(" "),t("ul",[t("li",[a._v("Grafana: "),t("a",{attrs:{href:"https://grafana-istio.mylabs.dev",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://grafana-istio.mylabs.dev"),t("OutboundLink")],1)]),a._v(" "),t("li",[a._v("Jaeger: "),t("a",{attrs:{href:"https://jaeger-istio.mylabs.dev",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://jaeger-istio.mylabs.dev"),t("OutboundLink")],1)]),a._v(" "),t("li",[a._v("Kiali: "),t("a",{attrs:{href:"https://kiali-istio.mylabs.dev",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://kiali-istio.mylabs.dev"),t("OutboundLink")],1)])])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/25.b07eebdf.js b/assets/js/25.b07eebdf.js
new file mode 100644
index 0000000..75a55c5
--- /dev/null
+++ b/assets/js/25.b07eebdf.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{303:function(t,a,s){t.exports=s.p+"assets/img/GitLab.dd7e0dbb.png"},323:function(t,a,s){"use strict";s.r(a);var e=s(8),n=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"install-gitlab"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-gitlab"}},[t._v("#")]),t._v(" Install GitLab")]),t._v(" "),a("p",[t._v("Add GitLab repository:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("helm repo "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" gitlab https://charts.gitlab.io/\nhelm repo update\n")])])]),a("p",[t._v("Create "),a("code",[t._v("gitlab")]),t._v(" namespaces with secrets needed for GitLab\n(certificates and passwords):")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("kubectl create namespace gitlab\nkubectl create secret generic gitlab-initial-root-password --from-literal"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("password"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin123"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-n")]),t._v(" gitlab\nkubectl create secret generic custom-ca --from-file"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("unique_name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("tmp/fakelerootx1.pem "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-n")]),t._v(" gitlab\n")])])]),a("p",[t._v('Create Istio Gateways and VirtualServices to allow accessing GitLab from\n"outside":')]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cat")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("EOF"),a("span",{pre:!0,attrs:{class:"token bash punctuation"}},[t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" kubectl apply "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-f")]),t._v(" -")]),t._v("\napiVersion: networking.istio.io/v1alpha3\nkind: Gateway\nmetadata:\n name: gitlab-gateway\n namespace: gitlab\nspec:\n selector:\n istio: ingressgateway\n servers:\n - port:\n number: 22\n name: ssh-gitlab\n protocol: TCP\n hosts:\n - gitlab."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n - port:\n number: 80\n name: http-gitlab\n protocol: HTTP\n hosts:\n - gitlab."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n - minio."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n tls:\n httpsRedirect: true\n - port:\n number: 443\n name: https-gitlab\n protocol: HTTPS\n hosts:\n - gitlab."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n - minio."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n tls:\n credentialName: ingress-cert-"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${LETSENCRYPT_ENVIRONMENT}")]),t._v("\n mode: SIMPLE\n privateKey: sds\n serverCertificate: sds\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: gitlab-ssh-virtual-service\n namespace: gitlab\nspec:\n hosts:\n - gitlab."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n gateways:\n - gitlab-gateway\n tcp:\n - match:\n - port: 22\n route:\n - destination:\n host: gitlab-gitlab-shell.gitlab.svc.cluster.local\n port:\n number: 22\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: gitlab-http-virtual-service\n namespace: gitlab\nspec:\n hosts:\n - gitlab."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n gateways:\n - gitlab-gateway\n http:\n - match:\n - uri:\n prefix: /admin/sidekiq\n route:\n - destination:\n host: gitlab-unicorn.gitlab.svc.cluster.local\n port:\n number: 8080\n - route:\n - destination:\n host: gitlab-unicorn.gitlab.svc.cluster.local\n port:\n number: 8181\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: gitlab-minio-virtual-service\n namespace: gitlab\nspec:\n hosts:\n - minio."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n gateways:\n - gitlab-gateway\n http:\n - route:\n - destination:\n host: gitlab-minio-svc.gitlab.svc.cluster.local\n port:\n number: 9000\nEOF")]),t._v("\n")])])]),a("p",[t._v("Install GitLab using Helm:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("helm "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" gitlab gitlab/gitlab "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--namespace")]),t._v(" gitlab "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--wait")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--version")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.6")]),t._v(".0 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("certmanager.install")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" gitlab-runner.install"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("gitlab.gitaly.persistence.size")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("1Gi "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("gitlab.unicorn.ingress.enabled")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.appConfig.cron_jobs.ci_archive_traces_cron_worker.cron")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"17 * * * *"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.appConfig.cron_jobs.expire_build_artifacts_worker.cron")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"50 * * * *"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.appConfig.cron_jobs.pipeline_schedule_worker.cron")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"19 * * * *"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.appConfig.cron_jobs.repository_archive_cache_worker.cron")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0 * * * *"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.appConfig.cron_jobs.repository_check_worker.cron")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"20 * * * *"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.appConfig.cron_jobs.stuck_ci_jobs_worker.cron")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0 * * * *"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.appConfig.gravatar.plainUrl")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://www.gravatar.com/avatar/%{hash}?s=%{size}&d=identicon"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.appConfig.gravatar.sslUrl")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=identicon"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" global.certificates.customCAs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(".secret"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("custom-ca "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.edition")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("ce "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.hosts.domain")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.ingress.configureCertmanager")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.ingress.enabled")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("global.initialRootPassword.secret")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("gitlab-initial-root-password "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("minio.persistence.size")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("5Gi "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" nginx-ingress.enabled"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("postgresql.persistence.size")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("1Gi "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("prometheus.install")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("redis.persistence.size")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("1Gi "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("registry.enabled")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("false\n")])])]),a("p",[t._v("Output:")]),t._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("NAME: gitlab\nLAST DEPLOYED: Fri Dec 27 10:57:01 2019\nNAMESPACE: gitlab\nSTATUS: deployed\nREVISION: 1\nNOTES:\nWARNING: Automatic TLS certificate generation with cert-manager is disabled and no TLS certificates were provided. Self-signed certificates were generated.\n\nYou may retrieve the CA root for these certificates from the `gitlab-wildcard-tls-ca` secret, via the following command. It can then be imported to a web browser or system store.\n\n kubectl get secret gitlab-wildcard-tls-ca -ojsonpath='{.data.cfssl_ca}' | base64 --decode > gitlab.mylabs.dev.ca.pem\n\nIf you do not wish to use self-signed certificates, please set the following properties:\n - global.ingress.tls.secretName\n OR\n - gitlab.unicorn.ingress.tls.secretName\n - minio.ingress.tls.secretName\n")])])]),a("p",[t._v("Try to access the GitLab using the URL "),a("a",{attrs:{href:"https://gitlab.mylabs.dev",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://gitlab.mylabs.dev"),a("OutboundLink")],1),t._v("\nwith following credentials:")]),t._v(" "),a("ul",[a("li",[t._v("Username: "),a("code",[t._v("root")])]),t._v(" "),a("li",[t._v("Password: "),a("code",[t._v("admin123")])])]),t._v(" "),a("p",[t._v("Create Personal Access Token "),a("code",[t._v("1234567890")]),t._v(" for user "),a("code",[t._v("root")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("UNICORN_POD")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),t._v("kubectl get pods "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-n")]),t._v(" gitlab "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-l")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("unicorn "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-o")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("jsonpath")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{.items[0].metadata.name}"')]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${UNICORN_POD}")]),t._v("\nkubectl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("exec")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-n")]),t._v(" gitlab "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-it")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$UNICORN_POD")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-c")]),t._v(" unicorn -- /bin/bash "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-c")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\ncd /srv/gitlab;\nbin/rails r '),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("\ntoken_digest = Gitlab::CryptoHelper.sha256 "),a("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[t._v("\\\\")]),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("1234567890"),a("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[t._v("\\\\")]),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(";\ntoken=PersonalAccessToken.create!(name: "),a("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[t._v("\\\\")]),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("Full Access"),a("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[t._v("\\\\")]),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(", scopes: [:api], user: User.where(id: 1).first, token_digest: token_digest);\ntoken.save!\n"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(';\n"')]),t._v("\n")])])]),a("p",[t._v("Output:")]),t._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("gitlab-unicorn-566c465dc4-4dwdz\n")])])]),a("p",[t._v("Create new user "),a("code",[t._v("myuser")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GITLAB_USER_ID")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-s")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-k")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-X")]),t._v(" POST "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-H")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Content-type: application/json"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-H")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PRIVATE-TOKEN: 1234567890"')]),t._v(" https://gitlab.$"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MY_DOMAIN"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("/api/v4/users "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-d")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{\n '),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("name"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("myuser"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("username"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("myuser"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("password"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("myuser_password"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("email"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("myuser@"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("skip_confirmation"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(': true\n}"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" jq "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('".id"')]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${GITLAB_USER_ID}")]),t._v("\n")])])]),a("p",[t._v("Output:")]),t._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("2\n")])])]),a("p",[t._v("Create a personal access token for user "),a("code",[t._v("myuser")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("kubectl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("exec")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-n")]),t._v(" gitlab "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-it")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$UNICORN_POD")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-c")]),t._v(" unicorn -- /bin/bash "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-c")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\ncd /srv/gitlab;\nbin/rails r '),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("\ntoken_digest = Gitlab::CryptoHelper.sha256 "),a("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[t._v("\\\\")]),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("0987654321"),a("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[t._v("\\\\")]),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(";\ntoken=PersonalAccessToken.create!(name: "),a("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[t._v("\\\\")]),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("Full Access"),a("span",{pre:!0,attrs:{class:"token entity",title:"\\\\"}},[t._v("\\\\")]),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(", scopes: [:api], user: User.where(id: "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${GITLAB_USER_ID}")]),t._v(").first, token_digest: token_digest);\ntoken.save!\n"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(';\n"')]),t._v("\n")])])]),a("p",[t._v("Create Impersonation token for "),a("code",[t._v("myuser")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GILAB_MYUSER_TOKEN")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-s")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-k")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-X")]),t._v(" POST "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-H")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Content-type: application/json"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-H")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PRIVATE-TOKEN: 1234567890"')]),t._v(" https://gitlab.$"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MY_DOMAIN"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("/api/v4/users/$"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("GITLAB_USER_ID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("/impersonation_tokens "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-d")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{\n '),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("name"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("mytoken"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("scopes"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": ["),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("api"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(']\n}"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" jq "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-r")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('".token"')]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${GILAB_MYUSER_TOKEN}")]),t._v("\n")])])]),a("p",[t._v("Output:")]),t._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("t_dJwRNpVkdsxWzs3Yv3\n")])])]),a("p",[t._v("Create SSH key which will be imported to GitLab:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("ssh-keygen "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-t")]),t._v(" ed25519 "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-f")]),t._v(" tmp/id_rsa_gitlab "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-q")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-N")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-C")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"my_ssh_key@mylabs.dev"')]),t._v("\n")])])]),a("p",[t._v("Add ssh key to the "),a("code",[t._v("myuser")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-sk")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-X")]),t._v(" POST "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-F")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"private_token='),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${GILAB_MYUSER_TOKEN}")]),t._v('"')]),t._v(" https://gitlab."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("/api/v4/user/keys "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-F")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"title=my_ssh_key"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-F")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key='),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cat")]),t._v(" tmp/id_rsa_gitlab.pub"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v('"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" jq\n")])])]),a("p",[t._v("Output:")]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"my_ssh_key"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKH2+gqsWrziaAmzGumc/frT0EBMSrXSP0MT/jRcKwtm my_ssh_key@mylabs.dev"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"created_at"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2019-12-27T10:01:45.403Z"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("Create new project:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("PROJECT_ID")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-s")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-k")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-X")]),t._v(" POST "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-H")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Content-type: application/json"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-H")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PRIVATE-TOKEN: 1234567890"')]),t._v(" https://gitlab.$"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MY_DOMAIN"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("/api/v4/projects/user/$"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("GITLAB_USER_ID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-d")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{\n '),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("user_id"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${GITLAB_USER_ID}")]),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("name"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("my-podinfo"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("description"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("My Test Project"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("wiki_access_level"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("disabled"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("issues_access_level"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("disabled"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("builds_access_level"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("disabled"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("snippets_access_level"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("disabled"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("container-registry-enabled"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": false,\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("visibility"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("public"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v('\n}"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" jq "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-r")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('".id"')]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${PROJECT_ID}")]),t._v("\n")])])]),a("p",[t._v("Output:")]),t._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("1\n")])])]),a("p",[t._v("Clone the "),a("a",{attrs:{href:"https://github.com/stefanprodan/podinfo",target:"_blank",rel:"noopener noreferrer"}},[t._v("podinfo"),a("OutboundLink")],1),t._v(" project and push\nit to the newly created git repository "),a("code",[t._v("my-podinfo")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("GIT_SSH_COMMAND")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ssh -i '),a("span",{pre:!0,attrs:{class:"token environment constant"}},[t._v("$PWD")]),t._v('/tmp/id_rsa_gitlab -o UserKnownHostsFile=/dev/null"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" clone "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--bare")]),t._v(" https://github.com/stefanprodan/podinfo tmp/podinfo\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-C")]),t._v(" tmp/podinfo push "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--mirror")]),t._v(" git@gitlab."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v(":myuser/my-podinfo.git\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("rm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-rf")]),t._v(" tmp/podinfo\n")])])]),a("p",[t._v("Output:")]),t._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("loning into bare repository 'tmp/podinfo'...\nremote: Enumerating objects: 10, done.\nremote: Counting objects: 100% (10/10), done.\nremote: Compressing objects: 100% (10/10), done.\nremote: Total 5266 (delta 0), reused 3 (delta 0), pack-reused 5256\nReceiving objects: 100% (5266/5266), 9.52 MiB | 1.28 MiB/s, done.\nResolving deltas: 100% (2342/2342), done.\nWarning: Permanently added 'gitlab.mylabs.dev,18.184.227.16' (ECDSA) to the list of known hosts.\nEnumerating objects: 5266, done.\nCounting objects: 100% (5266/5266), done.\nDelta compression using up to 4 threads\nCompressing objects: 100% (2544/2544), done.\nWriting objects: 100% (5266/5266), 9.52 MiB | 6.95 MiB/s, done.\nTotal 5266 (delta 2342), reused 5266 (delta 2342)\nremote: Resolving deltas: 100% (2342/2342), done.\nremote:\nremote: To create a merge request for gh-pages, visit:\nremote: https://gitlab.mylabs.dev/myuser/my-podinfo/merge_requests/new?merge_request%5Bsource_branch%5D=gh-pages\nremote:\nremote: To create a merge request for v0.x, visit:\nremote: https://gitlab.mylabs.dev/myuser/my-podinfo/merge_requests/new?merge_request%5Bsource_branch%5D=v0.x\nremote:\nremote: To create a merge request for v1.x, visit:\nremote: https://gitlab.mylabs.dev/myuser/my-podinfo/merge_requests/new?merge_request%5Bsource_branch%5D=v1.x\nremote:\nremote: To create a merge request for v3.x, visit:\nremote: https://gitlab.mylabs.dev/myuser/my-podinfo/merge_requests/new?merge_request%5Bsource_branch%5D=v3.x\nremote:\nTo gitlab.mylabs.dev:myuser/my-podinfo.git\n * [new branch] gh-pages -> gh-pages\n * [new branch] master -> master\n * [new branch] v0.x -> v0.x\n * [new branch] v1.x -> v1.x\n * [new branch] v3.x -> v3.x\n * [new tag] 0.2.2 -> 0.2.2\n * [new tag] 2.0.0 -> 2.0.0\n * [new tag] 2.0.1 -> 2.0.1\n * [new tag] 2.0.2 -> 2.0.2\n * [new tag] 2.1.0 -> 2.1.0\n * [new tag] 2.1.1 -> 2.1.1\n * [new tag] 2.1.2 -> 2.1.2\n * [new tag] 2.1.3 -> 2.1.3\n * [new tag] 3.0.0 -> 3.0.0\n * [new tag] 3.1.0 -> 3.1.0\n * [new tag] 3.1.1 -> 3.1.1\n * [new tag] 3.1.2 -> 3.1.2\n * [new tag] 3.1.3 -> 3.1.3\n * [new tag] 3.1.4 -> 3.1.4\n * [new tag] 3.1.5 -> 3.1.5\n * [new tag] flux-floral-pine-16 -> flux-floral-pine-16\n * [new tag] flux-thawing-star-34 -> flux-thawing-star-34\n * [new tag] v0.4.0 -> v0.4.0\n * [new tag] v0.5.0 -> v0.5.0\n * [new tag] v1.0.0 -> v1.0.0\n * [new tag] v1.1.0 -> v1.1.0\n * [new tag] v1.1.1 -> v1.1.1\n * [new tag] v1.2.0 -> v1.2.0\n * [new tag] v1.2.1 -> v1.2.1\n * [new tag] v1.3.0 -> v1.3.0\n * [new tag] v1.3.1 -> v1.3.1\n * [new tag] v1.4.0 -> v1.4.0\n * [new tag] v1.4.1 -> v1.4.1\n * [new tag] v1.4.2 -> v1.4.2\n * [new tag] v1.6.0 -> v1.6.0\n * [new tag] v1.7.0 -> v1.7.0\n * [new tag] v1.8.0 -> v1.8.0\n")])])]),a("p",[t._v("GitLab Screenshot:")]),t._v(" "),a("p",[a("img",{attrs:{src:s(303),alt:"GitLab",title:"GitLab"}})])])}),[],!1,null,null,null);a.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/26.bb65b742.js b/assets/js/26.bb65b742.js
new file mode 100644
index 0000000..0ad632a
--- /dev/null
+++ b/assets/js/26.bb65b742.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{305:function(t,a,e){t.exports=e.p+"assets/img/Tekton_Dashboard.258cb264.png"},325:function(t,a,e){"use strict";e.r(a);var s=e(8),n=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"install-knative"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-knative"}},[t._v("#")]),t._v(" Install Knative")]),t._v(" "),a("p",[t._v("Set Knative version variable:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("KNATIVE_VERSION")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"v0.11.0"')]),t._v("\n")])])]),a("p",[t._v("Install Knative:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("kubectl apply "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--selector")]),t._v(" knative.dev/crd-install"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--filename")]),t._v(" https://github.com/knative/serving/releases/download/"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${KNATIVE_VERSION}")]),t._v("/serving.yaml "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--filename")]),t._v(" https://github.com/knative/eventing/releases/download/"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${KNATIVE_VERSION}")]),t._v("/release.yaml "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--filename")]),t._v(" https://github.com/knative/serving/releases/download/"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${KNATIVE_VERSION}")]),t._v("/monitoring.yaml\nkubectl apply "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--filename")]),t._v(" https://github.com/knative/serving/releases/download/"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${KNATIVE_VERSION}")]),t._v("/serving.yaml "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--filename")]),t._v(" https://github.com/knative/eventing/releases/download/"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${KNATIVE_VERSION}")]),t._v("/release.yaml "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--filename")]),t._v(" https://github.com/knative/serving/releases/download/"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${KNATIVE_VERSION}")]),t._v("/monitoring.yaml\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sleep")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("60")]),t._v("\n")])])]),a("p",[t._v("Install Tekton with Dashboard (do not increase Tekton version above 0.8.0):")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("kubectl apply "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--filename")]),t._v(" https://github.com/tektoncd/pipeline/releases/download/v0.8.0/release.yaml\nkubectl apply "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--filename")]),t._v(" https://github.com/tektoncd/dashboard/releases/download/v0.3.0/dashboard-latest-release.yaml\n")])])]),a("p",[t._v("Install Tekton Triggers:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("kubectl apply "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--filename")]),t._v(" https://github.com/tektoncd/triggers/releases/download/v0.1.0/release.yaml\n")])])]),a("p",[t._v("Export Knative services ("),a("a",{attrs:{href:"https://prometheus.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Prometheus"),a("OutboundLink")],1),t._v(" and\n"),a("a",{attrs:{href:"https://grafana.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Grafana"),a("OutboundLink")],1),t._v(") to be visible externally:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cat")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("EOF"),a("span",{pre:!0,attrs:{class:"token bash punctuation"}},[t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" kubectl apply "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-f")]),t._v(" -")]),t._v("\napiVersion: networking.istio.io/v1alpha3\nkind: Gateway\nmetadata:\n name: knative-services-gateway\n namespace: knative-monitoring\nspec:\n selector:\n istio: ingressgateway\n servers:\n - port:\n number: 80\n name: http-knative-services\n protocol: HTTP\n hosts:\n - knative-grafana."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n - knative-prometheus."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n - knative-tekton."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n - port:\n number: 443\n name: https-knative-services\n protocol: HTTPS\n hosts:\n - knative-grafana."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n - knative-prometheus."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n - knative-tekton."),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v("\n tls:\n credentialName: ingress-cert-"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${LETSENCRYPT_ENVIRONMENT}")]),t._v('\n mode: SIMPLE\n privateKey: sds\n serverCertificate: sds\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: grafana-virtual-service\n namespace: knative-monitoring\nspec:\n hosts:\n - "knative-grafana.'),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v('"\n gateways:\n - knative-services-gateway\n http:\n - route:\n - destination:\n host: grafana.knative-monitoring.svc.cluster.local\n port:\n number: 30802\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: prometheus-virtual-service\n namespace: knative-monitoring\nspec:\n hosts:\n - "knative-prometheus.'),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v('"\n gateways:\n - knative-services-gateway\n http:\n - route:\n - destination:\n host: prometheus-system-np.knative-monitoring.svc.cluster.local\n port:\n number: 8080\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n name: tekton-virtual-service\n namespace: knative-monitoring\nspec:\n hosts:\n - "knative-tekton.'),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v('"\n gateways:\n - knative-services-gateway\n http:\n - route:\n - destination:\n host: tekton-dashboard.tekton-pipelines.svc.cluster.local\n port:\n number: 9097\nEOF')]),t._v("\n")])])]),a("p",[t._v("Tekton Dashboard:")]),t._v(" "),a("p",[a("img",{attrs:{src:e(305),alt:"Tekton Dashboard",title:"Tekton Dashboard"}})]),t._v(" "),a("p",[t._v("Set up a custom domain for Knative:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cat")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("EOF"),a("span",{pre:!0,attrs:{class:"token bash punctuation"}},[t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" kubectl apply "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-f")]),t._v(" -")]),t._v("\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: config-domain\n namespace: knative-serving\ndata:\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${MY_DOMAIN}")]),t._v(': ""\nEOF')]),t._v("\n")])])]),a("p",[t._v("Changing the controller deployment is needed if you are not using the valid\ncertificates (self-signed):")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${LETSENCRYPT_ENVIRONMENT}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"staging"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("then")]),t._v("\n kubectl "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--namespace")]),t._v(" knative-serving create secret generic customca --from-file"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("customca.crt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("tmp/fakelerootx1.pem\n kubectl patch deployment controller "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--namespace")]),t._v(" knative-serving "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--patch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\n {\n '),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("spec"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": {\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("template"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": {\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("spec"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": {\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("containers"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": [{\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("env"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": [{\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("name"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("SSL_CERT_DIR"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("value"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("/etc/customca"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("\n }],\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("name"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("controller"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("volumeMounts"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": [{\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("mountPath"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("/etc/customca"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("name"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("customca"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("\n }]\n }],\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("volumes"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": [{\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("name"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("customca"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("secret"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": {\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("defaultMode"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": 420,\n "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("secretName"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("customca"),a("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v('\n }\n }]\n }\n }\n }\n }"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fi")]),t._v("\n")])])]),a("h2",{attrs:{id:"enable-automatic-tls-certificate-provisioning-for-knative"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#enable-automatic-tls-certificate-provisioning-for-knative"}},[t._v("#")]),t._v(" Enable automatic TLS certificate provisioning for Knative")]),t._v(" "),a("p",[t._v("Install "),a("code",[t._v("networking-certmanager")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("kubectl apply "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--filename")]),t._v(" https://github.com/knative/serving/releases/download/"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${KNATIVE_VERSION}")]),t._v("/serving-cert-manager.yaml\n")])])]),a("p",[t._v("Update your "),a("code",[t._v("config-certmanager")]),t._v(" ConfigMap in the "),a("code",[t._v("knative-serving")]),t._v(" namespace to\ndefine your new ClusterIssuer configuration and your your DNS provider:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cat")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("EOF"),a("span",{pre:!0,attrs:{class:"token bash punctuation"}},[t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" kubectl apply "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-f")]),t._v(" -")]),t._v("\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: config-certmanager\n namespace: knative-serving\n labels:\n networking.knative.dev/certificate-provider: cert-manager\ndata:\n issuerRef: |\n kind: ClusterIssuer\n name: letsencrypt-"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${LETSENCRYPT_ENVIRONMENT}")]),t._v("-dns\n solverConfig: |\n dns01:\n provider: aws-route53\nEOF")]),t._v("\n")])])]),a("p",[t._v("Update the "),a("code",[t._v("config-network")]),t._v(" ConfigMap in the "),a("code",[t._v("knative-serving")]),t._v(" namespace to enable\n"),a("code",[t._v("autoTLS")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cat")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("EOF"),a("span",{pre:!0,attrs:{class:"token bash punctuation"}},[t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" kubectl apply "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-f")]),t._v(" -")]),t._v("\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: config-network\n namespace: knative-serving\ndata:\n autoTLS: Enabled\n httpProtocol: Enabled\nEOF")]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/27.5b8b0597.js b/assets/js/27.5b8b0597.js
new file mode 100644
index 0000000..ffed790
--- /dev/null
+++ b/assets/js/27.5b8b0597.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{306:function(a,e,s){a.exports=s.p+"assets/img/podinfo.d8c508a4.png"},326:function(a,e,s){"use strict";s.r(e);var t=s(8),n=Object(t.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"build-and-run-container-image-using-knative-tekton"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build-and-run-container-image-using-knative-tekton"}},[a._v("#")]),a._v(" Build and run container image using Knative + Tekton")]),a._v(" "),e("p",[a._v("Set the necessary variables:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GIT_REPOSITORY")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"git@gitlab.'),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(':myuser/my-podinfo.git"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GIT_REVISION")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"3.1.0"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GIT_REPO_SSH_KEY")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"tmp/id_rsa_gitlab"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CONTAINER_REGISTRY")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"harbor.'),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('/library/my-podinfo"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CONTAINER_REGISTRY_USERNAME")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"robot\\'),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$myrobot")]),a._v('"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CONTAINER_REGISTRY_PASSWORD")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${HARBOR_ROBOT_TOKEN}")]),a._v('"')]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GIT_PROJECT_NAME")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" $"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("GIT_REPOSITORY"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("sed")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"s@.*/\\(.*\\).git@'),e("span",{pre:!0,attrs:{class:"token entity",title:"\\1"}},[a._v("\\1")]),a._v('@; s/\\./\\-/"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CONTAINER_REGISTRY_SERVER")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" $CONTAINER_REGISTRY "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("awk")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" / "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"{ print \\'),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$1")]),a._v(' }"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CONTAINER_REGISTRY_SERVER_MODIFIED")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" $CONTAINER_REGISTRY "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("awk")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" / "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"{ gsub(/\\./,'),e("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("-"),e("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("); print \\"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$1")]),a._v(' }"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GIT_SSH_SERVER")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" $GIT_REPOSITORY "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("awk")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"[@:]"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"{ print \\'),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$2")]),a._v('}"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GIT_SSH_SERVER_MODIFIED")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" $GIT_REPOSITORY "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("awk")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-F")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"[@:]"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"{ gsub(/\\./,'),e("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("-"),e("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("); print \\"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$2")]),a._v(' }"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n")])])]),e("p",[a._v("Create secret for Harbor registry to let Tekton pipeline to upload the container\nimage:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl create secret docker-registry "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CONTAINER_REGISTRY_SERVER_MODIFIED}")]),a._v("-docker-config "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --docker-server"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CONTAINER_REGISTRY_SERVER}")]),a._v('"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --docker-username"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CONTAINER_REGISTRY_USERNAME}")]),a._v('"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --docker-password"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CONTAINER_REGISTRY_PASSWORD}")]),a._v('"')]),a._v("\n")])])]),e("p",[a._v("Create secret for AWS user to allow Tekton pipeline to push binary to S3:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl create secret generic user-aws-access-keys --from-literal"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("access_key"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$USER_AWS_ACCESS_KEY_ID")]),a._v(" --from-literal"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("secret_key"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$USER_AWS_SECRET_ACCESS_KEY")]),a._v("\n")])])]),e("p",[a._v("Create + start Tekton pipeline (and it's components) to build the container\nimage:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("EOF"),e("span",{pre:!0,attrs:{class:"token bash punctuation"}},[a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" kubectl apply "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" -")]),a._v("\napiVersion: v1\nkind: Secret\ntype: kubernetes.io/ssh-auth\nmetadata:\n name: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_SSH_SERVER_MODIFIED}")]),a._v("-ssh-key\n annotations:\n tekton.dev/git-0: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_SSH_SERVER}")]),a._v("\ndata:\n ssh-privatekey: "),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("base64 "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-w")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v(" $"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("GIT_REPO_SSH_KEY"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_SSH_SERVER_MODIFIED}")]),a._v("-build-bot\nsecrets:\n - name: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_SSH_SERVER_MODIFIED}")]),a._v("-ssh-key\n---\napiVersion: tekton.dev/v1alpha1\nkind: PipelineResource\nmetadata:\n name: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_PROJECT_NAME}")]),a._v("-project-git\n namespace: default\nspec:\n type: git\n params:\n - name: url\n value: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_REPOSITORY}")]),a._v("\n - name: revision\n value: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_REVISION}")]),a._v("\n---\napiVersion: tekton.dev/v1alpha1\nkind: PipelineResource\nmetadata:\n name: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_PROJECT_NAME}")]),a._v("-project-image\nspec:\n type: image\n params:\n - name: url\n value: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CONTAINER_REGISTRY}")]),a._v(":"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_REVISION}")]),a._v("\n---\napiVersion: tekton.dev/v1alpha1\nkind: Task\nmetadata:\n name: build-docker-image-from-git-task\nspec:\n inputs:\n resources:\n - name: docker-source\n type: git\n params:\n - name: pathToDockerFile\n description: The path to the dockerfile to build\n default: /workspace/docker-source/Dockerfile\n - name: pathToContext\n description:\n The build context used by Kaniko\n (https://github.com/GoogleContainerTools/kaniko#kaniko-build-contexts)\n default: /workspace/docker-source\n outputs:\n resources:\n - name: builtImage\n type: image\n volumes:\n - name: docker-config\n secret:\n secretName: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CONTAINER_REGISTRY_SERVER_MODIFIED}")]),a._v("-docker-config\n items:\n - key: .dockerconfigjson\n path: config.json\n - name: shared-storage\n emptyDir: {}\n steps:\n - name: build-and-tar\n image: gcr.io/kaniko-project/executor\n command:\n - /kaniko/executor\n args:\n - --dockerfile=\\"),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("inputs.params.pathToDockerFile"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n - --destination=\\"),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("outputs.resources.builtImage.url"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n - --context=\\"),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("inputs.params.pathToContext"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n - --single-snapshot\n - --tarPath=/shared-storage/"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),e("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v('-app-build.tar\n - --no-push\n volumeMounts:\n - name: docker-config\n mountPath: /builder/home/.docker/\n - name: shared-storage\n mountPath: /shared-storage\n - name: upload-container-content-s3\n image: atlassian/pipelines-awscli\n command: ["sh", "-x", "-c", "ls -la /shared-storage/ ; aws s3 cp /shared-storage/'),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),e("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-app-build.tar s3://"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),e("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v('-kops-k8s/"]\n env:\n - name: AWS_DEFAULT_REGION\n value: "eu-central-1"\n - name: AWS_ACCESS_KEY_ID\n valueFrom:\n secretKeyRef:\n name: user-aws-access-keys\n key: access_key\n - name: AWS_SECRET_ACCESS_KEY\n valueFrom:\n secretKeyRef:\n name: user-aws-access-keys\n key: secret_key\n volumeMounts:\n - name: shared-storage\n mountPath: /shared-storage\n - name: build-and-push\n image: gcr.io/kaniko-project/executor\n env:\n - name: "DOCKER_CONFIG"\n value: "/builder/home/.docker/"\n command:\n - /kaniko/executor\n args:\n - --dockerfile=\\'),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("inputs.params.pathToDockerFile"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n - --destination=\\"),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("outputs.resources.builtImage.url"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n - --context=\\"),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("inputs.params.pathToContext"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n - --single-snapshot\n - --skip-tls-verify\n volumeMounts:\n - name: docker-config\n mountPath: /builder/home/.docker/\n---\napiVersion: tekton.dev/v1alpha1\nkind: Pipeline\nmetadata:\n name: build-docker-image-from-git-pipeline\nspec:\n resources:\n - name: docker-source\n type: git\n - name: builtImage\n type: image\n tasks:\n - name: build-docker-image-from-git-task-run\n taskRef:\n name: build-docker-image-from-git-task\n params:\n - name: pathToDockerFile\n value: Dockerfile\n - name: pathToContext\n value: /workspace/docker-source/\n resources:\n inputs:\n - name: docker-source\n resource: docker-source\n outputs:\n - name: builtImage\n resource: builtImage\n---\napiVersion: tekton.dev/v1alpha1\nkind: PipelineRun\nmetadata:\n name: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_PROJECT_NAME}")]),a._v("-build-docker-image-from-git-pipelinerun\nspec:\n serviceAccount: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_SSH_SERVER_MODIFIED}")]),a._v("-build-bot\n pipelineRef:\n name: build-docker-image-from-git-pipeline\n resources:\n - name: docker-source\n resourceRef:\n name: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_PROJECT_NAME}")]),a._v("-project-git\n - name: builtImage\n resourceRef:\n name: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_PROJECT_NAME}")]),a._v("-project-image\nEOF")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("sleep")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("5")]),a._v("\n")])])]),e("p",[a._v("Wait for container build process will complete:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("wait")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--timeout")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("10m "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--for")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("condition"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("Succeeded pipelineruns/"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_PROJECT_NAME}")]),a._v("-build-docker-image-from-git-pipelinerun\n")])])]),e("p",[a._v("Output:")]),a._v(" "),e("div",{staticClass:"language-text extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("pipelinerun.tekton.dev/my-podinfo-build-docker-image-from-git-pipelinerun condition met\n")])])]),e("p",[a._v("Start the application:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("EOF"),e("span",{pre:!0,attrs:{class:"token bash punctuation"}},[a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" kubectl apply "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" -")]),a._v("\napiVersion: serving.knative.dev/v1alpha1\nkind: Service\nmetadata:\n name: my-podinfo\n namespace: default\nspec:\n template:\n spec:\n containers:\n - image: "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CONTAINER_REGISTRY}")]),a._v(":"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${GIT_REVISION}")]),a._v("\n ports:\n - name: http1\n containerPort: 9898\nEOF")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("sleep")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("20")]),a._v("\n")])])]),e("p",[a._v("Check the status of the application:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl get pod,ksvc,configuration,revision,route,deployment\n")])])]),e("p",[a._v("Output:")]),a._v(" "),e("div",{staticClass:"language-text extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("NAME READY STATUS RESTARTS AGE\npod/my-podinfo-build-docker-image-from-git-pipelinerun-build--msbcv-pod-d6861e 0/6 Completed 0 7m56s\npod/my-podinfo-vpw78-deployment-bbb89db58-vmnhb 2/2 Running 0 21s\n\nNAME URL LATESTCREATED LATESTREADY READY REASON\nservice.serving.knative.dev/my-podinfo http://my-podinfo.default.mylabs.dev my-podinfo-vpw78 my-podinfo-vpw78 True\n\nNAME LATESTCREATED LATESTREADY READY REASON\nconfiguration.serving.knative.dev/my-podinfo my-podinfo-vpw78 my-podinfo-vpw78 True\n\nNAME CONFIG NAME K8S SERVICE NAME GENERATION READY REASON\nrevision.serving.knative.dev/my-podinfo-vpw78 my-podinfo my-podinfo-vpw78 1 True\n\nNAME URL READY REASON\nroute.serving.knative.dev/my-podinfo http://my-podinfo.default.mylabs.dev True\n\nNAME READY UP-TO-DATE AVAILABLE AGE\ndeployment.extensions/my-podinfo-vpw78-deployment 1/1 1 1 21s\n")])])]),e("p",[a._v("Open "),e("a",{attrs:{href:"https://my-podinfo.default.mylabs.dev",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://my-podinfo.default.mylabs.dev"),e("OutboundLink")],1),a._v("\nto see the application:")]),a._v(" "),e("p",[a._v("When you close the web browser - after some time without handling traffic\nthe number of running pods should drop to zero:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl get deployments,pods\n")])])]),e("p",[a._v("Output:")]),a._v(" "),e("div",{staticClass:"language-text extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("NAME READY UP-TO-DATE AVAILABLE AGE\ndeployment.extensions/my-podinfo-vpw78-deployment 1/1 1 1 22s\n\nNAME READY STATUS RESTARTS AGE\npod/my-podinfo-build-docker-image-from-git-pipelinerun-build--msbcv-pod-d6861e 0/6 Completed 0 7m57s\npod/my-podinfo-vpw78-deployment-bbb89db58-vmnhb 2/2 Running 0 22s\n")])])]),e("p",[a._v("If you open the URL again the pod should be started again and application will\nhandle the traffic - this takes about 3 seconds.")]),a._v(" "),e("p",[a._v("You can try to open the web browser with the URL "),e("a",{attrs:{href:"https://my-podinfo.default.mylabs.dev",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://my-podinfo.default.mylabs.dev"),e("OutboundLink")],1),a._v("\nagain and test it.")]),a._v(" "),e("p",[e("img",{attrs:{src:s(306),alt:"podinfo",title:"podinfo"}})])])}),[],!1,null,null,null);e.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/28.8647f919.js b/assets/js/28.8647f919.js
new file mode 100644
index 0000000..6947cf8
--- /dev/null
+++ b/assets/js/28.8647f919.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{309:function(t,s,a){t.exports=a.p+"assets/img/podinfo_http_https.799760ac.png"},328:function(t,s,a){"use strict";a.r(s);var e=a(8),n=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"knative-operations"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#knative-operations"}},[t._v("#")]),t._v(" Knative operations")]),t._v(" "),s("p",[t._v("Create service "),s("code",[t._v("my-podinfo-2")]),t._v(" with image:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("kn "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" create my-podinfo-2 "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--port")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9898")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--image")]),t._v(" harbor.mylabs.dev/library/my-podinfo:3.1.0\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sleep")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),t._v("\n")])])]),s("p",[t._v("Output:")]),t._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("Creating service 'my-podinfo-2' in namespace 'default':\n\n 0.205s The Route is still working to reflect the latest desired specification.\n 0.230s Configuration \"my-podinfo-2\" is waiting for a Revision to become ready.\n 7.132s ...\n 7.417s Ingress has not yet been reconciled.\n 9.415s Ready to serve.\n\nService 'my-podinfo-2' created with latest revision 'my-podinfo-2-fzhhd-1' and URL:\nhttp://my-podinfo-2.default.mylabs.dev\n")])])]),s("p",[t._v("Check if the application is really working:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-k")]),t._v(" http://my-podinfo-2.default.mylabs.dev https://my-podinfo-2.default.mylabs.dev\n")])])]),s("p",[t._v("Output:")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hostname"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"my-podinfo-2-fzhhd-1-deployment-566757c497-xvc2m"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"3.1.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"revision"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"5fb970b526dd40f9a94085fd237f0a2c3bd65520"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"color"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"blue"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"message"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"greetings from podinfo v3.1.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"goos"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"linux"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"goarch"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"amd64"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"runtime"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"go1.12.14"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"num_goroutine"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"num_cpu"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hostname"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"my-podinfo-2-fzhhd-1-deployment-566757c497-xvc2m"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"3.1.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"revision"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"5fb970b526dd40f9a94085fd237f0a2c3bd65520"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"color"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"blue"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"message"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"greetings from podinfo v3.1.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"goos"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"linux"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"goarch"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"amd64"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"runtime"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"go1.12.14"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"num_goroutine"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"num_cpu"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Set hard limit of concurrent requests to be processed by a single replica:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("kn "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("service")]),t._v(" update my-podinfo-2 --concurrency-limit"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n")])])]),s("p",[t._v("Output:")]),t._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("Updating Service 'my-podinfo-2' in namespace 'default':\n\n 3.050s Traffic is not yet migrated to the latest revision.\n 3.104s Ingress has not yet been reconciled.\n 4.689s Ready to serve.\n\nService 'my-podinfo-2' updated with latest revision 'my-podinfo-2-hfqhc-2' and URL:\nhttp://my-podinfo-2.default.mylabs.dev\n")])])]),s("p",[t._v("Check the pods:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("kubectl get pods\n")])])]),s("p",[t._v("Output:")]),t._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("NAME READY STATUS RESTARTS AGE\nmy-podinfo-2-fzhhd-1-deployment-566757c497-xvc2m 2/2 Running 0 48s\nmy-podinfo-2-hfqhc-2-deployment-864c8985c-jz59h 2/2 Running 0 5s\nmy-podinfo-build-docker-image-from-git-pipelinerun-build--msbcv-pod-d6861e 0/6 Completed 0 22m\n")])])]),s("p",[s("img",{attrs:{src:a(309),alt:"podinfo - http/https",title:"podinfo - http/https"}})])])}),[],!1,null,null,null);s.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/29.36e9fab6.js b/assets/js/29.36e9fab6.js
new file mode 100644
index 0000000..4a2fcb7
--- /dev/null
+++ b/assets/js/29.36e9fab6.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{319:function(t,r,a){"use strict";a.r(r);var e=a(8),n=Object(e.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"kubernetes-knative-gitlab-harbor"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-knative-gitlab-harbor"}},[t._v("#")]),t._v(" Kubernetes + Knative + GitLab + Harbor")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/ruzickap/k8s-knative-gitlab-harbor",target:"_blank",rel:"noopener noreferrer"}},[r("img",{attrs:{src:"https://github.com/ruzickap/k8s-knative-gitlab-harbor/workflows/vuepress-build/badge.svg",alt:"Build Status"}}),r("OutboundLink")],1)]),t._v(" "),r("ul",[r("li",[t._v("Demo GitHub repository: "),r("a",{attrs:{href:"https://github.com/ruzickap/k8s-knative-gitlab-harbor",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/ruzickap/k8s-knative-gitlab-harbor"),r("OutboundLink")],1)]),t._v(" "),r("li",[t._v("Demo Web Pages: "),r("a",{attrs:{href:"https://ruzickap.github.io/k8s-knative-gitlab-harbor",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://ruzickap.github.io/k8s-knative-gitlab-harbor"),r("OutboundLink")],1)]),t._v(" "),r("li",[t._v("Asciinema: "),r("a",{attrs:{href:"https://asciinema.org/a/290547",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://asciinema.org/a/290547"),r("OutboundLink")],1)])]),t._v(" "),r("h2",{attrs:{id:"requirements"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://aws.amazon.com/cli/",target:"_blank",rel:"noopener noreferrer"}},[t._v("awscli"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/kubernetes-sigs/aws-iam-authenticator",target:"_blank",rel:"noopener noreferrer"}},[t._v("AWS IAM Authenticator for Kubernetes"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://aws.amazon.com/account/",target:"_blank",rel:"noopener noreferrer"}},[t._v("AWS account"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://kubernetes.io/docs/tasks/tools/install-kubectl/",target:"_blank",rel:"noopener noreferrer"}},[t._v("kubectl"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/kubernetes/kops",target:"_blank",rel:"noopener noreferrer"}},[t._v("kops"),r("OutboundLink")],1)]),t._v(" "),r("li",[t._v("Kubernetes, Docker, Linux, AWS knowledge required")])]),t._v(" "),r("h2",{attrs:{id:"content"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#content"}},[t._v("#")]),t._v(" Content")]),t._v(" "),r("ul",[r("li",[r("RouterLink",{attrs:{to:"/part-01/"}},[t._v('Part 01 - Create "kops" cluster')])],1),t._v(" "),r("li",[r("RouterLink",{attrs:{to:"/part-02/"}},[t._v("Part 02 - Install Helm")])],1),t._v(" "),r("li",[r("RouterLink",{attrs:{to:"/part-03/"}},[t._v("Part 03 - Istio + cert-manager + kubed installation")])],1),t._v(" "),r("li",[r("RouterLink",{attrs:{to:"/part-04/"}},[t._v("Part 04 - Harbor installation")])],1),t._v(" "),r("li",[r("RouterLink",{attrs:{to:"/part-05/"}},[t._v("Part 05 - GitLab installation")])],1),t._v(" "),r("li",[r("RouterLink",{attrs:{to:"/part-06/"}},[t._v("Part 06 - Knative installation")])],1),t._v(" "),r("li",[r("RouterLink",{attrs:{to:"/part-07/"}},[t._v("Part 07 - Build and run container image using Knative + Tekton")])],1),t._v(" "),r("li",[r("RouterLink",{attrs:{to:"/part-08/"}},[t._v("Part 08 - Automated deployment with Tekton")])],1),t._v(" "),r("li",[r("RouterLink",{attrs:{to:"/part-09/"}},[t._v("Part 09 - Knative operations")])],1),t._v(" "),r("li",[r("RouterLink",{attrs:{to:"/part-10/"}},[t._v("Part 10 - Clean-up")])],1)]),t._v(" "),r("h2",{attrs:{id:"asciinema"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#asciinema"}},[t._v("#")]),t._v(" Asciinema")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://asciinema.org/a/290547",target:"_blank",rel:"noopener noreferrer"}},[r("img",{attrs:{src:"https://asciinema.org/a/290547.svg",alt:"asciicast"}}),r("OutboundLink")],1)])])}),[],!1,null,null,null);r.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/3.6b4152e0.js b/assets/js/3.6b4152e0.js
new file mode 100644
index 0000000..65c4181
--- /dev/null
+++ b/assets/js/3.6b4152e0.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[3,18,19],{246:function(t,e,n){"use strict";n.d(e,"d",(function(){return r})),n.d(e,"a",(function(){return s})),n.d(e,"i",(function(){return a})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return d})),n.d(e,"k",(function(){return h})),n.d(e,"l",(function(){return f})),n.d(e,"c",(function(){return g})),n.d(e,"j",(function(){return m}));n(92);const r=/#.*$/,i=/\.(md|html)$/,s=/\/$/,a=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(r,"").replace(i,"")}function l(t){return a.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function p(t){if(l(t))return t;const e=t.match(r),n=e?e[0]:"",i=o(t);return s.test(i)?t:i+".html"+n}function d(t,e){const n=decodeURIComponent(t.hash),i=function(t){const e=t.match(r);if(e)return e[0]}(e);if(i&&n!==i)return!1;return o(t.path)===o(e)}function h(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,r,i=1){if("string"==typeof e)return h(n,e,r);if(Array.isArray(e))return Object.assign(h(n,e[0],r),{title:e[1]});{const s=e.children||[];return 0===s.length&&e.path?Object.assign(h(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:s.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function b(t){const e=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function g(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},247:function(t,e,n){},249:function(t,e,n){"use strict";n.r(e);var r={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(250),n(8)),s=Object(i.a)(r,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=s.exports},250:function(t,e,n){"use strict";n(247)},252:function(t,e,n){},257:function(t,e,n){},259:function(t,e,n){"use strict";n(252)},260:function(t,e,n){"use strict";n.r(e);var r=n(273),i=n(262),s=n(246);function a(t,e){if("group"===e.type){const n=e.path&&Object(s.e)(t,e.path),r=e.children.some(e=>"group"===e.type?a(t,e):"page"===e.type&&Object(s.e)(t,e.path));return n||r}return!1}var o={name:"SidebarLinks",components:{SidebarGroup:r.default,SidebarLink:i.default},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route(){this.refreshIndex()}},created(){this.refreshIndex()},methods:{refreshIndex(){const t=function(t,e){for(let n=0;n-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(s.e)(this.$route,t.regularPath)}}},l=n(8),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(n,r){return e("li",{key:r},["group"===n.type?e("SidebarGroup",{attrs:{item:n,open:r===t.openGroupIndex,collapsable:n.collapsable||n.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(r)}}}):e("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:n}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=u.exports},262:function(t,e,n){"use strict";n.r(e);var r=n(246);function i(t,e,n,r,i){const s={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}};return i>2&&(s.style={"padding-left":i+"rem"}),t("RouterLink",s,n)}function s(t,e,n,a,o,l=1){return!e||l>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const u=Object(r.e)(a,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[i(t,n+"#"+e.slug,e.title,u,e.level-1),s(t,e.children,n,a,o,l+1)])}))}var a={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:a,$themeConfig:o,$themeLocaleConfig:l},props:{item:u,sidebarDepth:c}}){const p=Object(r.e)(a,u.path),d="auto"===u.type?p||u.children.some(t=>Object(r.e)(a,u.basePath+"#"+t.slug)):p,h="external"===u.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,u.path,u.title||u.path):i(t,u.path,u.title||u.path,d),f=[e.frontmatter.sidebarDepth,c,l.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),b=l.displayAllHeaders||o.displayAllHeaders;if("auto"===u.type)return[h,s(t,u.children,u.basePath,a,f)];if((d||b)&&u.headers&&!r.d.test(u.path)){return[h,s(t,Object(r.c)(u.headers),u.path,a,f)]}return h}},o=(n(259),n(8)),l=Object(o.a)(a,void 0,void 0,!1,null,null,null);e.default=l.exports},270:function(t,e,n){"use strict";n(257)},273:function(t,e,n){"use strict";n.r(e);var r=n(246),i={name:"SidebarGroup",components:{DropdownTransition:n(249).default},props:["item","open","collapsable","depth"],beforeCreate(){this.$options.components.SidebarLinks=n(260).default},methods:{isActive:r.e}},s=(n(270),n(8)),a=Object(s.a)(i,(function(){var t=this,e=t._self._c;return e("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?e("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):e("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),e("DropdownTransition",[t.open||!t.collapsable?e("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null);e.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/30.f81551c9.js b/assets/js/30.f81551c9.js
new file mode 100644
index 0000000..6513022
--- /dev/null
+++ b/assets/js/30.f81551c9.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{320:function(a,s,t){"use strict";t.r(s);var e=t(8),r=Object(e.a)({},(function(){var a=this,s=a._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"create-k8s-cluster"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-k8s-cluster"}},[a._v("#")]),a._v(" Create k8s cluster")]),a._v(" "),s("p",[a._v("Before starting with the main content, it's necessary to provision\nthe Kubernetes in AWS.")]),a._v(" "),s("p",[a._v("Use the "),s("code",[a._v("MY_DOMAIN")]),a._v(" variable containing domain and "),s("code",[a._v("LETSENCRYPT_ENVIRONMENT")]),a._v("\nvariable.\nThe "),s("code",[a._v("LETSENCRYPT_ENVIRONMENT")]),a._v(" variable should be one of:")]),a._v(" "),s("ul",[s("li",[s("p",[s("code",[a._v("staging")]),a._v(" - Let’s Encrypt will create testing certificate (not valid)")])]),a._v(" "),s("li",[s("p",[s("code",[a._v("production")]),a._v(" - Let’s Encrypt will create valid certificate (use with care)")])])]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("MY_DOMAIN")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":-")]),a._v("mylabs.dev}")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("LETSENCRYPT_ENVIRONMENT")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":-")]),a._v("staging}")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" | "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT}")]),a._v('"')]),a._v("\n")])])]),s("h2",{attrs:{id:"prepare-the-local-working-environment"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prepare-the-local-working-environment"}},[a._v("#")]),a._v(" Prepare the local working environment")]),a._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[a._v("TIP")]),a._v(" "),s("p",[a._v("You can skip these steps if you have all the required software already\ninstalled.")])]),a._v(" "),s("p",[a._v("Install necessary software:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-x")]),a._v(" /usr/bin/apt "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("then")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("apt")]),a._v(" update "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-qq")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("DEBIAN_FRONTEND")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("noninteractive "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("apt-get")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-y")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-qq")]),a._v(" awscli "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" docker.io gettext-base "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("git")]),a._v(" jq openssh-client "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" /dev/null\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("fi")]),a._v("\n")])])]),s("p",[a._v("Install "),s("a",{attrs:{href:"https://github.com/kubernetes/kubectl",target:"_blank",rel:"noopener noreferrer"}},[a._v("kubectl"),s("OutboundLink")],1),a._v(" binary:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-x")]),a._v(" /usr/local/bin/kubectl "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("then")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-Lo")]),a._v(" /usr/local/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/"),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" https://storage.googleapis.com/kubernetes-release/release/stable.txt"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("/bin/linux/amd64/kubectl\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("chmod")]),a._v(" a+x /usr/local/bin/kubectl\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("fi")]),a._v("\n")])])]),s("p",[a._v("Install "),s("a",{attrs:{href:"https://github.com/kubernetes/kops",target:"_blank",rel:"noopener noreferrer"}},[a._v("kops"),s("OutboundLink")],1),a._v(":")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-x")]),a._v(" /usr/local/bin/kops "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("then")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-LO")]),a._v(" https://github.com/kubernetes/kops/releases/download/"),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" https://api.github.com/repos/kubernetes/kops/releases/latest "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.tag_name'")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("/kops-linux-amd64\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("chmod")]),a._v(" +x kops-linux-amd64\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("mv")]),a._v(" kops-linux-amd64 /usr/local/bin/kops\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("fi")]),a._v("\n")])])]),s("p",[a._v("Install "),s("code",[a._v("kn")]),a._v(" client for Knative:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-x")]),a._v(" /usr/local/bin/kn "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("then")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-L")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://github.com/knative/client/releases/download/v0.11.0/kn-linux-amd64"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-o")]),a._v(" /usr/local/bin/kn\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("chmod")]),a._v(" a+x /usr/local/bin/kn\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("fi")]),a._v("\n")])])]),s("p",[a._v("Install "),s("code",[a._v("tkn")]),a._v(" client for Tekton:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-x")]),a._v(" /usr/local/bin/tkn "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("then")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-L")]),a._v(" https://github.com/tektoncd/cli/releases/download/v0.6.0/tkn_0.6.0_Linux_x86_64.tar.gz "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("tar")]),a._v(" xzf - "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" /tmp/\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("mv")]),a._v(" /tmp/tkn /usr/local/bin/\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("fi")]),a._v("\n")])])]),s("p",[a._v("Install "),s("a",{attrs:{href:"https://hub.github.com/",target:"_blank",rel:"noopener noreferrer"}},[a._v("hub"),s("OutboundLink")],1),a._v(":")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-x")]),a._v(" /usr/local/bin/hub "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("then")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-s")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-L")]),a._v(" https://github.com/github/hub/releases/download/v2.13.0/hub-linux-amd64-2.13.0.tgz "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("tar")]),a._v(" xzf - "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" /tmp/\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("mv")]),a._v(" /tmp/hub-linux-amd64-2.13.0/bin/hub /usr/local/bin/\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("fi")]),a._v("\n")])])]),s("h2",{attrs:{id:"configure-aws"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configure-aws"}},[a._v("#")]),a._v(" Configure AWS")]),a._v(" "),s("p",[a._v("Authorize to AWS using AWS CLI: "),s("a",{attrs:{href:"https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html",target:"_blank",rel:"noopener noreferrer"}},[a._v("Configuring the AWS CLI"),s("OutboundLink")],1)]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("aws configure\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\n")])])]),s("p",[a._v("Create DNS zone:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("aws route53 create-hosted-zone "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" --caller-reference "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n")])])]),s("p",[a._v("Use your domain registrar to change the nameservers for your zone (for example\n"),s("code",[a._v("mylabs.dev")]),a._v(") to use the Amazon Route 53 nameservers. Here is the way how you\ncan find out the the Route 53 nameservers:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("aws route53 get-hosted-zone "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--id")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("aws route53 list-hosted-zones "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--query")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"HostedZones[?Name==\\'),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("`")]),a._v("$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("MY_DOMAIN"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("."),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("`")])]),a._v('].Id"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--output")]),a._v(" text"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--query")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"DelegationSet.NameServers"')]),a._v("\n")])])]),s("p",[a._v("Create policy allowing the cert-manager to change Route 53 settings. This will\nallow cert-manager to generate wildcard SSL certificates by Let's Encrypt\ncertificate authority.")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("test")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" tmp "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("||")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("mkdir")]),a._v(" tmp\nenvsubst "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v(" files/user_policy.json "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" tmp/user_policy.json\n\naws iam create-policy "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --policy-name "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s-"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--description")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Policy for '),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s-"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --policy-document file://tmp/user_policy.json "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq\n")])])]),s("p",[a._v("Output:")]),a._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"Policy"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"PolicyName"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"pruzicka-k8s-mylabs.dev"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"PolicyId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"xxxxxxxxxxxxxxxxxxxx"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"Arn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arn:aws:iam::822044714040:policy/pruzicka-k8s-mylabs.dev"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"Path"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"DefaultVersionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"v1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"AttachmentCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"PermissionsBoundaryUsageCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"IsAttachable"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"CreateDate"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2019-12-27T09:41:14Z"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"UpdateDate"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2019-12-27T09:41:14Z"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),s("p",[a._v("Create user which will use the policy above:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("aws iam create-user --user-name "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s-"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("POLICY_ARN")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("aws iam list-policies "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--query")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Policies[?PolicyName==\\'),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("`")]),a._v("$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("-k8s-$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("MY_DOMAIN"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("`")])]),a._v('].{ARN:Arn}"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--output")]),a._v(" text"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\naws iam attach-user-policy --user-name "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s-"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('"')]),a._v(" --policy-arn "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$POLICY_ARN")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\naws iam create-access-key --user-name "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s-"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),a._v("/.aws/"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s-"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("USER_AWS_ACCESS_KEY_ID")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("awk")]),a._v(" -F"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v('" '),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/AccessKeyId/ { print \\'),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$4")]),a._v(' }"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),a._v("/.aws/$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("-k8s-$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("MY_DOMAIN"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("USER_AWS_SECRET_ACCESS_KEY")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("awk")]),a._v(" -F"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v('" '),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/SecretAccessKey/ { print \\'),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$4")]),a._v(' }"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),a._v("/.aws/$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("-k8s-$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("MY_DOMAIN"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n")])])]),s("p",[a._v("Output:")]),a._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"User"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"Path"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"UserName"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"pruzicka-k8s-mylabs.dev"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"UserId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"xxxxxxxxxxxxxxxxxxxx"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"Arn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"arn:aws:iam::822044714040:user/pruzicka-k8s-mylabs.dev"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"CreateDate"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"2019-12-27T09:41:27Z"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),s("p",[a._v("The "),s("code",[a._v("AccessKeyId")]),a._v(" and "),s("code",[a._v("SecretAccessKey")]),a._v(" is need for creating the "),s("code",[a._v("ClusterIssuer")]),a._v("\ndefinition for "),s("code",[a._v("cert-manager")]),a._v(".")]),a._v(" "),s("h2",{attrs:{id:"create-k8s-in-aws"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-k8s-in-aws"}},[a._v("#")]),a._v(" Create K8s in AWS")]),a._v(" "),s("p",[s("img",{attrs:{src:"https://raw.githubusercontent.com/aws-samples/eks-workshop/65b766c494a5b4f5420b2912d8373c4957163541/static/images/3-service-animated.gif",alt:"Architecture",title:"Architecture"}})]),a._v(" "),s("p",[a._v("Generate SSH keys if not exists:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("test")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),a._v("/.ssh/id_rsa "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("||")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-m")]),a._v(" 0700 "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),a._v("/.ssh "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" ssh-keygen "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-b")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("2048")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-t")]),a._v(" rsa "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-f")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),a._v("/.ssh/id_rsa "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-q")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-N")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n")])])]),s("p",[a._v("Clone the "),s("code",[a._v("k8s-knative-gitlab-harbor")]),a._v(" Git repository if it wasn't done already:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" .git "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("then")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("git")]),a._v(" clone "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--quiet")]),a._v(" https://github.com/ruzickap/k8s-k8s-knative-gitlab-harbor "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("cd")]),a._v(" k8s-knative-gitlab-harbor\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("fi")]),a._v("\n")])])]),s("p",[a._v("Create S3 bucket where the kops will store cluster status:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("aws s3api create-bucket "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--bucket")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-kops-k8s "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--region")]),a._v(" eu-central-1 --create-bucket-configuration "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("LocationConstraint")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("eu-central-1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq\n")])])]),s("p",[a._v("Output:")]),a._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[a._v('"Location"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"http://pruzicka-kops-k8s.s3.amazonaws.com/"')]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),s("p",[a._v("Create Kubernetes cluster in AWS by using "),s("a",{attrs:{href:"https://github.com/kubernetes/kops",target:"_blank",rel:"noopener noreferrer"}},[a._v("kops"),s("OutboundLink")],1),a._v(":")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("kops create cluster "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s."),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--state")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("s3://"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-kops-k8s "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--zones")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("eu-central-1a "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--networking")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("amazon-vpc-routed-eni "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --node-count"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("5")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --node-size"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("t3.large "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --node-volume-size"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("20")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --master-count"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --master-size"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("t3.small "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --master-volume-size"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("10")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --dns-zone"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --cloud-labels "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Owner='),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v(',Environment=Test,Division=Services"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n --ssh-public-key "),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$HOME")]),a._v("/.ssh/id_rsa.pub "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--yes")]),a._v("\n")])])]),s("p",[a._v("Output:")]),a._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("...\nI1227 10:42:09.459809 15782 executor.go:103] Tasks: 91 done / 91 total; 0 can run\nI1227 10:42:09.459901 15782 dns.go:155] Pre-creating DNS records\nI1227 10:42:10.791005 15782 update_cluster.go:294] Exporting kubecfg for cluster\nkops has set your kubectl context to pruzicka-k8s.mylabs.dev\n\nCluster changes have been applied to the cloud.\n\n\nChanges may require instances to restart: kops rolling-update cluster\n")])])]),s("p",[a._v("Wait for cluster to be up and running:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sleep")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("200")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("while")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("`")]),a._v("kops validate cluster "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--state")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("s3://$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("-kops-k8s "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-o")]),a._v(" yaml "),s("span",{pre:!0,attrs:{class:"token operator"}},[s("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[a._v("2")]),a._v(">")]),s("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[a._v("&1")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("grep")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-q")]),a._v(" failures"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("`")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("do")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sleep")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("done")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v("\n")])])]),s("p",[a._v("Store "),s("code",[a._v("kubeconfig")]),a._v(" in current directory:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("kops "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" kubecfg "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s."),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--state")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("s3://"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-kops-k8s "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--kubeconfig")]),a._v(" kubeconfig.conf\n")])])]),s("p",[a._v("Check if the new Kubernetes cluster is available:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("KUBECONFIG")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("$PWD")]),a._v("/kubeconfig.conf\nkubectl get nodes "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-o")]),a._v(" wide\n")])])]),s("p",[a._v("Output:")]),a._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nip-172-20-37-106.eu-central-1.compute.internal Ready master 2m23s v1.15.6 172.20.37.106 35.159.31.183 Debian GNU/Linux 9 (stretch) 4.9.0-11-amd64 docker://18.6.3\nip-172-20-37-122.eu-central-1.compute.internal Ready node 56s v1.15.6 172.20.37.122 3.120.151.131 Debian GNU/Linux 9 (stretch) 4.9.0-11-amd64 docker://18.6.3\nip-172-20-37-204.eu-central-1.compute.internal Ready node 32s v1.15.6 172.20.37.204 18.196.187.216 Debian GNU/Linux 9 (stretch) 4.9.0-11-amd64 docker://18.6.3\nip-172-20-47-14.eu-central-1.compute.internal Ready node 67s v1.15.6 172.20.47.14 18.196.173.69 Debian GNU/Linux 9 (stretch) 4.9.0-11-amd64 docker://18.6.3\nip-172-20-47-61.eu-central-1.compute.internal Ready node 53s v1.15.6 172.20.47.61 18.184.73.151 Debian GNU/Linux 9 (stretch) 4.9.0-11-amd64 docker://18.6.3\nip-172-20-59-57.eu-central-1.compute.internal Ready node 83s v1.15.6 172.20.59.57 54.93.48.121 Debian GNU/Linux 9 (stretch) 4.9.0-11-amd64 docker://18.6.3\n")])])]),s("p",[a._v("In case of using "),s("code",[a._v("staging")]),a._v(' environment add "Let\'s Encrypt testing" '),s("a",{attrs:{href:"https://letsencrypt.org/certs/fakelerootx1.pem",target:"_blank",rel:"noopener noreferrer"}},[a._v("fakelerootx1.pem"),s("OutboundLink")],1),a._v("\nas trusted certificate authority:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-q")]),a._v(" https://letsencrypt.org/certs/fakelerootx1.pem "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-O")]),a._v(" tmp/fakelerootx1.pem\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${LETSENCRYPT_ENVIRONMENT}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"staging"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("then")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("mkdir")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-pv")]),a._v(" /etc/docker/certs.d/harbor."),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("/\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("cp")]),a._v(" tmp/fakelerootx1.pem /etc/docker/certs.d/harbor."),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("/ca.crt\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token for-or-select variable"}},[a._v("EXTERNAL_IP")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("in")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("kubectl get nodes "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--output")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("jsonpath"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"{.items[*].status.addresses[?(@.type=='),s("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v("ExternalIP"),s("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[a._v('\\"')]),a._v(')].address}"')]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("do")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("ssh")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-q")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-o")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("StrictHostKeyChecking")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("no "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-l")]),a._v(" admin "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${EXTERNAL_IP}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"sudo mkdir -p /etc/docker/certs.d/harbor.'),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("/ && sudo wget -q https://letsencrypt.org/certs/fakelerootx1.pem -O /etc/docker/certs.d/harbor."),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('/ca.crt"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("done")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"*** Done"')]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("fi")]),a._v("\n")])])])])}),[],!1,null,null,null);s.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/31.ed17542f.js b/assets/js/31.ed17542f.js
new file mode 100644
index 0000000..cb50bd8
--- /dev/null
+++ b/assets/js/31.ed17542f.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{321:function(t,a,e){"use strict";e.r(a);var s=e(8),n=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"install-helm"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-helm"}},[t._v("#")]),t._v(" Install Helm")]),t._v(" "),a("p",[t._v("Install "),a("a",{attrs:{href:"https://helm.sh/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Helm"),a("OutboundLink")],1),t._v(" binary:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-s")]),t._v(" https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bash")]),t._v("\n")])])]),a("p",[t._v("Output:")]),t._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("Downloading https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz\nPreparing to install helm into /usr/local/bin\nhelm installed into /usr/local/bin/helm\n")])])]),a("p",[t._v('Add the "stable" repository:')]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("helm repo "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" stable https://kubernetes-charts.storage.googleapis.com/\nhelm repo update\n")])])]),a("p",[t._v("Output:")]),t._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v('"stable" has been added to your repositories\nHang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "stable" chart repository\nUpdate Complete. ⎈ Happy Helming!⎈\n')])])]),a("p",[t._v("Install kube2iam to restrict pod's access:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("helm "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" kube2iam stable/kube2iam "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--namespace")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("kube-system "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("host.iptables")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--set")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("rbac.create")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("true\n")])])]),a("p",[t._v("Output:")]),t._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v('NAME: kube2iam\nLAST DEPLOYED: Fri Dec 27 10:48:20 2019\nNAMESPACE: kube-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\nNOTES:\nTo verify that kube2iam has started, run:\n\n kubectl --namespace=kube-system get pods -l "app.kubernetes.io/name=kube2iam,app.kubernetes.io/instance=kube2iam"\n\nAdd an iam.amazonaws.com/role annotation to your pods with the role you want them to assume.\n\n https://github.com/jtblin/kube2iam#kubernetes-annotation\n\nUse `curl` to verify the pod\'s role from within:\n\n curl http://169.254.169.254/latest/meta-data/iam/security-credentials/\n')])])])])}),[],!1,null,null,null);a.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/32.22ccabcf.js b/assets/js/32.22ccabcf.js
new file mode 100644
index 0000000..515f21a
--- /dev/null
+++ b/assets/js/32.22ccabcf.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{329:function(a,s,t){"use strict";t.r(s);var e=t(8),n=Object(e.a)({},(function(){var a=this,s=a._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"clean-up"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#clean-up"}},[a._v("#")]),a._v(" Clean-up")]),a._v(" "),s("p",[s("img",{attrs:{src:"https://raw.githubusercontent.com/aws-samples/eks-workshop/65b766c494a5b4f5420b2912d8373c4957163541/static/images/cleanup.svg?sanitize=true",alt:"Clean-up",title:"Clean-up"}})]),a._v(" "),s("p",[a._v("Configure "),s("code",[a._v("kubeconfig")]),a._v(":")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("MY_DOMAIN")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mylabs.dev"')]),a._v("\nkops "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" kubecfg "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s."),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--state")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("s3://"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-kops-k8s "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--kubeconfig")]),a._v(" /tmp/kubeconfig.conf\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("export")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("KUBECONFIG")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("/tmp/kubeconfig.conf\n")])])]),s("p",[a._v("Remove DNS records:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("kubectl delete gateways.networking.istio.io "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--all")]),a._v(" --all-namespaces "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\nkubectl delete pod "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-n")]),a._v(" external-dns "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--all")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sleep")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("15")]),a._v("\n")])])]),s("p",[a._v("Output:")]),a._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v('gateway.networking.istio.io "el-getting-started-listener-gateway" deleted\ngateway.networking.istio.io "gitlab-gateway" deleted\ngateway.networking.istio.io "harbor-gateway" deleted\ngateway.networking.istio.io "istio-autogenerated-k8s-ingress" deleted\ngateway.networking.istio.io "istio-services-gateway" deleted\ngateway.networking.istio.io "knative-services-gateway" deleted\ngateway.networking.istio.io "cluster-local-gateway" deleted\ngateway.networking.istio.io "knative-ingress-gateway" deleted\npod "external-dns-685b847795-mrchv" deleted\n')])])]),s("p",[a._v("Delete GitHub repositories:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("hub delete "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-y")]),a._v(" ruzickap/podinfo\n")])])]),s("p",[a._v("Cleanup + Remove Helm:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("test")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" /home/"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("/.helm "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-rf")]),a._v(" /home/"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("/.helm\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("test")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" /home/"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("/.config/helm "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-rf")]),a._v(" /home/"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("/.config/helm\n")])])]),s("p",[a._v("Cleanup + Remove "),s("code",[a._v("tmp")]),a._v(" directory:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-rf")]),a._v(" tmp\n")])])]),s("p",[a._v("Docker certificate cleanup if exists:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-rf")]),a._v(" /etc/docker/certs.d/harbor."),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n")])])]),s("p",[a._v("Remove K8s cluster:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("kops delete cluster "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s."),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--yes")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--state")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("s3://"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-kops-k8s\n")])])]),s("p",[a._v("Output:")]),a._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("...\nDeleted kubectl config for pruzicka-k8s.mylabs.de\n")])])]),s("p",[a._v("Remove S3 bucket used for storing the configuration by kops:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("aws s3 "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" s3://"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-kops-k8s/"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-app-build.tar\naws s3api delete-bucket "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--bucket")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-kops-k8s "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--region")]),a._v(" eu-central-1\n")])])]),s("p",[a._v("Clean Policy, User, Access Key in AWS:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[a._v('# aws route53 delete-hosted-zone --id $(aws route53 list-hosted-zones --query "HostedZones[?Name==\\`${MY_DOMAIN}.\\`].Id" --output text)')]),a._v("\n\n"),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("POLICY_ARN")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("aws iam list-policies "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--query")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Policies[?PolicyName==\\'),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("`")]),a._v("$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("-k8s-$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("MY_DOMAIN"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("`")])]),a._v('].{ARN:Arn}"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--output")]),a._v(" text"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\naws iam detach-user-policy --user-name "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s-"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v('"')]),a._v(" --policy-arn "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${POLICY_ARN}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\naws iam delete-policy --policy-arn "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${POLICY_ARN}")]),a._v("\n\n"),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("USER_ACCESS_KEYS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("aws iam list-access-keys --user-name $"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("-k8s-$"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("MY_DOMAIN"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--query")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"AccessKeyMetadata[].AccessKeyId"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--output")]),a._v(" text"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\naws iam delete-access-key --user-name "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s-"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v(" --access-key-id "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${USER_ACCESS_KEYS}")]),a._v("\n\naws iam delete-user --user-name "),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${"),s("span",{pre:!0,attrs:{class:"token environment constant"}},[a._v("USER")]),a._v("}")]),a._v("-k8s-"),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${MY_DOMAIN}")]),a._v("\n")])])]),s("p",[a._v("Remove other files:")]),a._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" demo-magic.sh kubeconfig.conf README.sh "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&>")]),a._v(" /dev/null\n")])])])])}),[],!1,null,null,null);s.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/4.1a6ad45d.js b/assets/js/4.1a6ad45d.js
new file mode 100644
index 0000000..81d6e20
--- /dev/null
+++ b/assets/js/4.1a6ad45d.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{284:function(t,e,n){},298:function(t,e,n){"use strict";n(284)},318:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:(t,{props:e,slots:n})=>t("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(298),n(8)),l=Object(p.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=l.exports}}]);
\ No newline at end of file
diff --git a/assets/js/5.4b4e299e.js b/assets/js/5.4b4e299e.js
new file mode 100644
index 0000000..ccdfff1
--- /dev/null
+++ b/assets/js/5.4b4e299e.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{285:function(t,e,a){},299:function(t,e,a){"use strict";a(285)},314:function(t,e,a){"use strict";a.r(e);var s={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(a(299),a(8)),n=Object(i.a)(s,(function(){return(0,this._self._c)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"759a7d02",null);e.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/6.88072c68.js b/assets/js/6.88072c68.js
new file mode 100644
index 0000000..6a3e20e
--- /dev/null
+++ b/assets/js/6.88072c68.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{286:function(e,t,a){},300:function(e,t,a){"use strict";a(286)},315:function(e,t,a){"use strict";a.r(t);var o={name:"CodeGroup",data:()=>({codeTabs:[],activeCodeTabIndex:-1}),watch:{activeCodeTabIndex(e){this.activateCodeTab(e)}},mounted(){this.loadTabs()},methods:{changeCodeTab(e){this.activeCodeTabIndex=e},loadTabs(){this.codeTabs=(this.$slots.default||[]).filter(e=>Boolean(e.componentOptions)).map((e,t)=>(""===e.componentOptions.propsData.active&&(this.activeCodeTabIndex=t),{title:e.componentOptions.propsData.title,elm:e.elm})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0),this.activateCodeTab(0)},activateCodeTab(e){this.codeTabs.forEach(e=>{e.elm&&e.elm.classList.remove("theme-code-block__active")}),this.codeTabs[e].elm&&this.codeTabs[e].elm.classList.add("theme-code-block__active")}}},s=(a(300),a(8)),c=Object(s.a)(o,(function(){var e=this,t=e._self._c;return t("ClientOnly",[t("div",{staticClass:"theme-code-group"},[t("div",{staticClass:"theme-code-group__nav"},[t("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(a,o){return t("li",{key:a.title,staticClass:"theme-code-group__li"},[t("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":o===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(o)}}},[e._v("\n "+e._s(a.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?t("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)])}),[],!1,null,"deefee04",null);t.default=c.exports}}]);
\ No newline at end of file
diff --git a/assets/js/7.f09a9532.js b/assets/js/7.f09a9532.js
new file mode 100644
index 0000000..f31a02c
--- /dev/null
+++ b/assets/js/7.f09a9532.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{316:function(t,e,s){"use strict";s.r(e);const o=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."];var n={methods:{getMsg:()=>o[Math.floor(Math.random()*o.length)]}},h=s(8),i=Object(h.a)(n,(function(){var t=this._self._c;return t("div",{staticClass:"theme-container"},[t("div",{staticClass:"theme-default-content"},[t("h1",[this._v("404")]),this._v(" "),t("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),t("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])}),[],!1,null,null,null);e.default=i.exports}}]);
\ No newline at end of file
diff --git a/assets/js/app.6e1ee497.js b/assets/js/app.6e1ee497.js
new file mode 100644
index 0000000..5eefaa5
--- /dev/null
+++ b/assets/js/app.6e1ee497.js
@@ -0,0 +1,16 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],c=e[1],u=e[2],f=0,p=[];f=e||n<0||m&&t-u>=i}function w(){var t=d();if(_(t))return x(t);s=setTimeout(w,function(t){var n=e-(t-c);return m?p(n,i-(t-u)):n}(t))}function x(t){return s=void 0,g&&r?y(t):(r=o=void 0,a)}function O(){var t=d(),n=_(t);if(r=arguments,o=this,c=t,n){if(void 0===s)return b(c);if(m)return s=setTimeout(w,e),y(c)}return void 0===s&&(s=setTimeout(w,e)),a}return e=v(e)||0,h(n)&&(l=!!n.leading,i=(m="maxWait"in n)?f(v(n.maxWait)||0,e):i,g="trailing"in n?!!n.trailing:g),O.cancel=function(){void 0!==s&&clearTimeout(s),u=0,r=c=o=s=void 0},O.flush=function(){return void 0===s?a:x(d())},O}},function(t,e,n){var r,o;
+/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
+ * @license MIT */void 0===(o="function"==typeof(r=function(){var t,e,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:''};function o(t,e,n){return tn?n:t}function i(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(r[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=o(t,r.minimum,1),n.status=1===t?null:t;var c=n.render(!e),u=c.querySelector(r.barSelector),l=r.speed,f=r.easing;return c.offsetWidth,a((function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,function(t,e,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(t)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(t)+"%,0)"}:{"margin-left":i(t)+"%"}).transition="all "+e+"ms "+n,o}(t,l,f)),1===t?(s(c,{transition:"none",opacity:1}),c.offsetWidth,setTimeout((function(){s(c,{transition:"all "+l+"ms linear",opacity:0}),setTimeout((function(){n.remove(),e()}),l)}),l)):setTimeout(e,l)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout((function(){n.status&&(n.trickle(),t())}),r.trickleSpeed)};return r.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*o(Math.random()*e,.1,.95)),e=o(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},t=0,e=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&n.start(),t++,e++,r.always((function(){0==--e?(t=0,n.done()):n.set((t-e)/t)})),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var o,a=e.querySelector(r.barSelector),c=t?"-100":i(n.status||0),l=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+c+"%,0,0)"}),r.showSpinner||(o=e.querySelector(r.spinnerSelector))&&p(o),l!=document.body&&u(l,"nprogress-custom-parent"),l.appendChild(e),e},n.remove=function(){l(document.documentElement,"nprogress-busy"),l(document.querySelector(r.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&p(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var a=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),s=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var r,o=t.length,i=e.charAt(0).toUpperCase()+e.slice(1);o--;)if((r=t[o]+i)in n)return r;return e}(n))}function r(t,e,r){e=n(e),t.style[e]=r}return function(t,e){var n,o,i=arguments;if(2==i.length)for(n in e)void 0!==(o=e[n])&&e.hasOwnProperty(n)&&r(t,n,o);else r(t,i[1],i[2])}}();function c(t,e){return("string"==typeof t?t:f(t)).indexOf(" "+e+" ")>=0}function u(t,e){var n=f(t),r=n+e;c(n,e)||(t.className=r.substring(1))}function l(t,e){var n,r=f(t);c(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function f(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function p(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?r.call(e,n,e,t):r)||(t.exports=o)},function(t,e,n){"use strict";var r=n(0),o=n(46).f,i=n(13),a=n(94),s=n(34),c=n(61),u=n(122);t.exports=function(t,e){var n,l,f,p,d,h=t.target,v=t.global,m=t.stat;if(n=v?r:m?r[h]||s(h,{}):r[h]&&r[h].prototype)for(l in e){if(p=e[l],f=t.dontCallGetSet?(d=o(n,l))&&d.value:n[l],!u(v?l:h+(m?".":"#")+l,t.forced)&&void 0!==f){if(typeof p==typeof f)continue;c(p,f)}(t.sham||f&&f.sham)&&i(p,"sham",!0),a(n,l,p,t)}}},function(t,e,n){"use strict";var r=n(26),o=Function.prototype.call;t.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},function(t,e,n){"use strict";var r=n(3);t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,e,n){"use strict";t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){"use strict";var r=n(47),o=n(29);t.exports=function(t){return r(o(t))}},function(t,e,n){"use strict";var r=n(48),o=TypeError;t.exports=function(t){if(r(t))throw new o("Can't call method on "+t);return t}},function(t,e,n){"use strict";var r=n(0),o=n(1),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t]):r[t]&&r[t][e]}},function(t,e,n){"use strict";var r=n(1),o=n(104),i=TypeError;t.exports=function(t){if(r(t))return t;throw new i(o(t)+" is not a function")}},function(t,e,n){"use strict";var r=n(0),o=n(55),i=n(9),a=n(57),s=n(53),c=n(52),u=r.Symbol,l=o("wks"),f=c?u.for||u:u&&u.withoutSetter||a;t.exports=function(t){return i(l,t)||(l[t]=s&&i(u,t)?u[t]:f("Symbol."+t)),l[t]}},function(t,e,n){"use strict";var r=n(56),o=n(0),i=n(34),a=t.exports=o["__core-js_shared__"]||i("__core-js_shared__",{});(a.versions||(a.versions=[])).push({version:"3.36.1",mode:r?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.36.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e,n){"use strict";var r=n(0),o=Object.defineProperty;t.exports=function(t,e){try{o(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},function(t,e,n){"use strict";var r=n(29),o=Object;t.exports=function(t){return o(r(t))}},function(t,e,n){"use strict";var r=n(119);t.exports=function(t){return r(t.length)}},function(t,e,n){var r=n(146),o=n(11),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return o(t)&&a.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},function(t,e,n){var r=n(10)(n(7),"Map");t.exports=r},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(166),o=n(173),i=n(175),a=n(176),s=n(177);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(4),o=n(44),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(a.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(12),o=n(11);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e){t.exports=function(t){return t}},function(t,e,n){"use strict";var r=n(5),o=n(25),i=n(100),a=n(27),s=n(28),c=n(49),u=n(9),l=n(58),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=s(t),e=c(e),l)try{return f(t,e)}catch(t){}if(u(t,e))return a(!o(i.f,t,e),t[e])}},function(t,e,n){"use strict";var r=n(2),o=n(3),i=n(16),a=Object,s=r("".split);t.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"===i(t)?s(t,""):a(t)}:a},function(t,e,n){"use strict";t.exports=function(t){return null==t}},function(t,e,n){"use strict";var r=n(101),o=n(50);t.exports=function(t){var e=r(t,"string");return o(e)?e:e+""}},function(t,e,n){"use strict";var r=n(30),o=n(1),i=n(51),a=n(52),s=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return o(e)&&i(e.prototype,s(t))}},function(t,e,n){"use strict";var r=n(2);t.exports=r({}.isPrototypeOf)},function(t,e,n){"use strict";var r=n(53);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){"use strict";var r=n(54),o=n(3),i=n(0).String;t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol("symbol detection");return!i(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},function(t,e,n){"use strict";var r,o,i=n(0),a=n(102),s=i.process,c=i.Deno,u=s&&s.versions||c&&c.version,l=u&&u.v8;l&&(o=(r=l.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),t.exports=o},function(t,e,n){"use strict";var r=n(33);t.exports=function(t,e){return r[t]||(r[t]=e||{})}},function(t,e,n){"use strict";t.exports=!1},function(t,e,n){"use strict";var r=n(2),o=0,i=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++o+i,36)}},function(t,e,n){"use strict";var r=n(5),o=n(3),i=n(106);t.exports=!r&&!o((function(){return 7!==Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){"use strict";var r=n(6),o=String,i=TypeError;t.exports=function(t){if(r(t))return t;throw new i(o(t)+" is not an object")}},function(t,e,n){"use strict";t.exports={}},function(t,e,n){"use strict";var r=n(9),o=n(113),i=n(46),a=n(15);t.exports=function(t,e,n){for(var s=o(e),c=a.f,u=i.f,l=0;ll))return!1;var p=c.get(t),d=c.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,m=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++h-1&&t%1==0&&t]/;t.exports=function(t){var e,n=""+t,o=r.exec(n);if(!o)return n;var i="",a=0,s=0;for(a=o.index;a1?1:s,n=.5*(1-Math.cos(Math.PI*a)),r=e.startX+(e.x-e.startX)*n,o=e.startY+(e.y-e.startY)*n,e.method.call(e.scrollable,r,o),r===e.x&&o===e.y||t.requestAnimationFrame(d.bind(t,e))}function h(n,r,a){var c,u,l,f,p=i();n===e.body?(c=t,u=t.scrollX||t.pageXOffset,l=t.scrollY||t.pageYOffset,f=o.scroll):(c=n,u=n.scrollLeft,l=n.scrollTop,f=s),d({scrollable:c,method:f,startTime:p,startX:u,startY:l,x:r,y:a})}}}}()},function(t,e,n){"use strict";var r=n(24),o=n(35),i=n(36),a=n(141),s=n(143);r({target:"Array",proto:!0,arity:1,forced:n(3)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(t){return t instanceof TypeError}}()},{push:function(t){var e=o(this),n=i(e),r=arguments.length;s(n+r);for(var c=0;c79&&a<83||!i("reduce")},{reduce:function(t){var e=arguments.length;return o(this,t,e,e>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);e.f=i?function(t){var e=o(this,t);return!!e&&e.enumerable}:r},function(t,e,n){"use strict";var r=n(25),o=n(6),i=n(50),a=n(103),s=n(105),c=n(32),u=TypeError,l=c("toPrimitive");t.exports=function(t,e){if(!o(t)||i(t))return t;var n,c=a(t,l);if(c){if(void 0===e&&(e="default"),n=r(c,t,e),!o(n)||i(n))return n;throw new u("Can't convert object to primitive value")}return void 0===e&&(e="number"),s(t,e)}},function(t,e,n){"use strict";t.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},function(t,e,n){"use strict";var r=n(31),o=n(48);t.exports=function(t,e){var n=t[e];return o(n)?void 0:r(n)}},function(t,e,n){"use strict";var r=String;t.exports=function(t){try{return r(t)}catch(t){return"Object"}}},function(t,e,n){"use strict";var r=n(25),o=n(1),i=n(6),a=TypeError;t.exports=function(t,e){var n,s;if("string"===e&&o(n=t.toString)&&!i(s=r(n,t)))return s;if(o(n=t.valueOf)&&!i(s=r(n,t)))return s;if("string"!==e&&o(n=t.toString)&&!i(s=r(n,t)))return s;throw new a("Can't convert object to primitive value")}},function(t,e,n){"use strict";var r=n(0),o=n(6),i=r.document,a=o(i)&&o(i.createElement);t.exports=function(t){return a?i.createElement(t):{}}},function(t,e,n){"use strict";var r=n(5),o=n(3);t.exports=r&&o((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},function(t,e,n){"use strict";var r=n(5),o=n(9),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,s=o(i,"name"),c=s&&"something"===function(){}.name,u=s&&(!r||r&&a(i,"name").configurable);t.exports={EXISTS:s,PROPER:c,CONFIGURABLE:u}},function(t,e,n){"use strict";var r=n(2),o=n(1),i=n(33),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(t){return a(t)}),t.exports=i.inspectSource},function(t,e,n){"use strict";var r,o,i,a=n(111),s=n(0),c=n(6),u=n(13),l=n(9),f=n(33),p=n(112),d=n(60),h=s.TypeError,v=s.WeakMap;if(a||f.state){var m=f.state||(f.state=new v);m.get=m.get,m.has=m.has,m.set=m.set,r=function(t,e){if(m.has(t))throw new h("Object already initialized");return e.facade=t,m.set(t,e),e},o=function(t){return m.get(t)||{}},i=function(t){return m.has(t)}}else{var g=p("state");d[g]=!0,r=function(t,e){if(l(t,g))throw new h("Object already initialized");return e.facade=t,u(t,g,e),e},o=function(t){return l(t,g)?t[g]:{}},i=function(t){return l(t,g)}}t.exports={set:r,get:o,has:i,enforce:function(t){return i(t)?o(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!c(e)||(n=o(e)).type!==t)throw new h("Incompatible receiver, "+t+" required");return n}}}},function(t,e,n){"use strict";var r=n(0),o=n(1),i=r.WeakMap;t.exports=o(i)&&/native code/.test(String(i))},function(t,e,n){"use strict";var r=n(55),o=n(57),i=r("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},function(t,e,n){"use strict";var r=n(30),o=n(2),i=n(114),a=n(121),s=n(59),c=o([].concat);t.exports=r("Reflect","ownKeys")||function(t){var e=i.f(s(t)),n=a.f;return n?c(e,n(t)):e}},function(t,e,n){"use strict";var r=n(115),o=n(120).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,e,n){"use strict";var r=n(2),o=n(9),i=n(28),a=n(116).indexOf,s=n(60),c=r([].push);t.exports=function(t,e){var n,r=i(t),u=0,l=[];for(n in r)!o(s,n)&&o(r,n)&&c(l,n);for(;e.length>u;)o(r,n=e[u++])&&(~a(l,n)||c(l,n));return l}},function(t,e,n){"use strict";var r=n(28),o=n(117),i=n(36),a=function(t){return function(e,n,a){var s=r(e),c=i(s);if(0===c)return!t&&-1;var u,l=o(a,c);if(t&&n!=n){for(;c>l;)if((u=s[l++])!=u)return!0}else for(;c>l;l++)if((t||l in s)&&s[l]===n)return t||l||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},function(t,e,n){"use strict";var r=n(62),o=Math.max,i=Math.min;t.exports=function(t,e){var n=r(t);return n<0?o(n+e,0):i(n,e)}},function(t,e,n){"use strict";var r=Math.ceil,o=Math.floor;t.exports=Math.trunc||function(t){var e=+t;return(e>0?o:r)(e)}},function(t,e,n){"use strict";var r=n(62),o=Math.min;t.exports=function(t){var e=r(t);return e>0?o(e,9007199254740991):0}},function(t,e,n){"use strict";t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e,n){"use strict";e.f=Object.getOwnPropertySymbols},function(t,e,n){"use strict";var r=n(3),o=n(1),i=/#|\.prototype\./,a=function(t,e){var n=c[s(t)];return n===l||n!==u&&(o(e)?r(e):!!e)},s=a.normalize=function(t){return String(t).replace(i,".").toLowerCase()},c=a.data={},u=a.NATIVE="N",l=a.POLYFILL="P";t.exports=a},function(t,e,n){"use strict";var r=n(31),o=n(35),i=n(47),a=n(36),s=TypeError,c="Reduce of empty array with no initial value",u=function(t){return function(e,n,u,l){var f=o(e),p=i(f),d=a(f);if(r(n),0===d&&u<2)throw new s(c);var h=t?d-1:0,v=t?-1:1;if(u<2)for(;;){if(h in p){l=p[h],h+=v;break}if(h+=v,t?h<0:d<=h)throw new s(c)}for(;t?h>=0:d>h;h+=v)h in p&&(l=n(l,p[h],h,f));return l}};t.exports={left:u(!1),right:u(!0)}},function(t,e,n){"use strict";var r=n(3);t.exports=function(t,e){var n=[][t];return!!n&&r((function(){n.call(null,e||function(){return 1},1)}))}},function(t,e,n){"use strict";var r=n(0),o=n(16);t.exports="process"===o(r.process)},function(t,e,n){"use strict";var r=n(24),o=n(0),i=n(127),a=n(128),s=o.WebAssembly,c=7!==new Error("e",{cause:7}).cause,u=function(t,e){var n={};n[t]=a(t,e,c),r({global:!0,constructor:!0,arity:1,forced:c},n)},l=function(t,e){if(s&&s[t]){var n={};n[t]=a("WebAssembly."+t,e,c),r({target:"WebAssembly",stat:!0,constructor:!0,arity:1,forced:c},n)}};u("Error",(function(t){return function(e){return i(t,this,arguments)}})),u("EvalError",(function(t){return function(e){return i(t,this,arguments)}})),u("RangeError",(function(t){return function(e){return i(t,this,arguments)}})),u("ReferenceError",(function(t){return function(e){return i(t,this,arguments)}})),u("SyntaxError",(function(t){return function(e){return i(t,this,arguments)}})),u("TypeError",(function(t){return function(e){return i(t,this,arguments)}})),u("URIError",(function(t){return function(e){return i(t,this,arguments)}})),l("CompileError",(function(t){return function(e){return i(t,this,arguments)}})),l("LinkError",(function(t){return function(e){return i(t,this,arguments)}})),l("RuntimeError",(function(t){return function(e){return i(t,this,arguments)}}))},function(t,e,n){"use strict";var r=n(26),o=Function.prototype,i=o.apply,a=o.call;t.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(i):function(){return a.apply(i,arguments)})},function(t,e,n){"use strict";var r=n(30),o=n(9),i=n(13),a=n(51),s=n(63),c=n(61),u=n(132),l=n(133),f=n(134),p=n(137),d=n(138),h=n(5),v=n(56);t.exports=function(t,e,n,m){var g=m?2:1,y=t.split("."),b=y[y.length-1],_=r.apply(null,y);if(_){var w=_.prototype;if(!v&&o(w,"cause")&&delete w.cause,!n)return _;var x=r("Error"),O=e((function(t,e){var n=f(m?e:t,void 0),r=m?new _(t):new _;return void 0!==n&&i(r,"message",n),d(r,O,r.stack,2),this&&a(w,this)&&l(r,this,O),arguments.length>g&&p(r,arguments[g]),r}));if(O.prototype=w,"Error"!==b?s?s(O,x):c(O,x,{name:!0}):h&&"stackTraceLimit"in _&&(u(O,_,"stackTraceLimit"),u(O,_,"prepareStackTrace")),c(O,_),!v)try{w.name!==b&&i(w,"name",b),w.constructor=O}catch(t){}return O}}},function(t,e,n){"use strict";var r=n(2),o=n(31);t.exports=function(t,e,n){try{return r(o(Object.getOwnPropertyDescriptor(t,e)[n]))}catch(t){}}},function(t,e,n){"use strict";var r=n(131),o=String,i=TypeError;t.exports=function(t){if(r(t))return t;throw new i("Can't set "+o(t)+" as a prototype")}},function(t,e,n){"use strict";var r=n(6);t.exports=function(t){return r(t)||null===t}},function(t,e,n){"use strict";var r=n(15).f;t.exports=function(t,e,n){n in t||r(t,n,{configurable:!0,get:function(){return e[n]},set:function(t){e[n]=t}})}},function(t,e,n){"use strict";var r=n(1),o=n(6),i=n(63);t.exports=function(t,e,n){var a,s;return i&&r(a=e.constructor)&&a!==n&&o(s=a.prototype)&&s!==n.prototype&&i(t,s),t}},function(t,e,n){"use strict";var r=n(95);t.exports=function(t,e){return void 0===t?arguments.length<2?"":e:r(t)}},function(t,e,n){"use strict";var r=n(136),o=n(1),i=n(16),a=n(32)("toStringTag"),s=Object,c="Arguments"===i(function(){return arguments}());t.exports=r?i:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=s(t),a))?n:c?i(e):"Object"===(r=i(e))&&o(e.callee)?"Arguments":r}},function(t,e,n){"use strict";var r={};r[n(32)("toStringTag")]="z",t.exports="[object z]"===String(r)},function(t,e,n){"use strict";var r=n(6),o=n(13);t.exports=function(t,e){r(e)&&"cause"in e&&o(t,"cause",e.cause)}},function(t,e,n){"use strict";var r=n(13),o=n(139),i=n(140),a=Error.captureStackTrace;t.exports=function(t,e,n,s){i&&(a?a(t,e):r(t,"stack",o(n,s)))}},function(t,e,n){"use strict";var r=n(2),o=Error,i=r("".replace),a=String(new o("zxcasd").stack),s=/\n\s*at [^:]*:[^\n]*/,c=s.test(a);t.exports=function(t,e){if(c&&"string"==typeof t&&!o.prepareStackTrace)for(;e--;)t=i(t,s,"");return t}},function(t,e,n){"use strict";var r=n(3),o=n(27);t.exports=!r((function(){var t=new Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",o(1,7)),7!==t.stack)}))},function(t,e,n){"use strict";var r=n(5),o=n(142),i=TypeError,a=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();t.exports=s?function(t,e){if(o(t)&&!a(t,"length").writable)throw new i("Cannot set read only .length");return t.length=e}:function(t,e){return t.length=e}},function(t,e,n){"use strict";var r=n(16);t.exports=Array.isArray||function(t){return"Array"===r(t)}},function(t,e,n){"use strict";var r=TypeError;t.exports=function(t){if(t>9007199254740991)throw r("Maximum allowed index exceeded");return t}},function(t,e,n){var r=n(64),o=n(145);t.exports=function t(e,n,i,a,s){var c=-1,u=e.length;for(i||(i=o),s||(s=[]);++c0&&i(l)?n>1?t(l,n-1,i,a,s):r(s,l):a||(s[s.length]=l)}return s}},function(t,e,n){var r=n(14),o=n(37),i=n(4),a=r?r.isConcatSpreadable:void 0;t.exports=function(t){return i(t)||o(t)||!!(a&&t&&t[a])}},function(t,e,n){var r=n(12),o=n(11);t.exports=function(t){return o(t)&&"[object Arguments]"==r(t)}},function(t,e,n){var r=n(14),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=i.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var o=a.call(t);return r&&(e?t[s]=n:delete t[s]),o}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r=n(150),o=n(206),i=n(45),a=n(4),s=n(216);t.exports=function(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?a(t)?o(t[0],t[1]):r(t):s(t)}},function(t,e,n){var r=n(151),o=n(205),i=n(82);t.exports=function(t){var e=o(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(66),o=n(70);t.exports=function(t,e,n,i){var a=n.length,s=a,c=!i;if(null==t)return!s;for(t=Object(t);a--;){var u=n[a];if(c&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++a-1}},function(t,e,n){var r=n(18);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},function(t,e,n){var r=n(17);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(17),o=n(38),i=n(40);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!o||a.length<199)return a.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(a)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(68),o=n(163),i=n(39),a=n(69),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,f=u.hasOwnProperty,p=RegExp("^"+l.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||o(t))&&(r(t)?p:s).test(a(t))}},function(t,e,n){var r,o=n(164),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!i&&i in t}},function(t,e,n){var r=n(7)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(167),o=n(17),i=n(38);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},function(t,e,n){var r=n(168),o=n(169),i=n(170),a=n(171),s=n(172);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(72),o=n(228),i=n(233),a=n(73),s=n(234),c=n(41);t.exports=function(t,e,n){var u=-1,l=o,f=t.length,p=!0,d=[],h=d;if(n)p=!1,l=i;else if(f>=200){var v=e?null:s(t);if(v)return c(v);p=!1,l=a,h=new r}else h=e?[]:d;t:for(;++u-1}},function(t,e,n){var r=n(230),o=n(231),i=n(232);t.exports=function(t,e,n){return e==e?i(t,e,n):r(t,o,n)}},function(t,e){t.exports=function(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,g,2):String(t)}function g(t,e){return e&&e.__v_isRef?e.value:e}function y(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var x=Object.prototype.hasOwnProperty;function O(t,e){return x.call(t,e)}function S(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var C=/-(\w)/g,$=S((function(t){return t.replace(C,(function(t,e){return e?e.toUpperCase():""}))})),k=S((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),E=/\B([A-Z])/g,j=S((function(t){return t.replace(E,"-$1").toLowerCase()}));var T=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function A(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function P(t,e){for(var n in e)t[n]=e[n];return t}function L(t){for(var e={},n=0;n0,Q=G&&G.indexOf("edge/")>0;G&&G.indexOf("android");var tt=G&&/iphone|ipad|ipod|ios/.test(G);G&&/chrome\/\d+/.test(G),G&&/phantomjs/.test(G);var et,nt=G&&G.match(/firefox\/(\d+)/),rt={}.watch,ot=!1;if(X)try{var it={};Object.defineProperty(it,"passive",{get:function(){ot=!0}}),window.addEventListener("test-passive",null,it)}catch(t){}var at=function(){return void 0===et&&(et=!X&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),et},st=X&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ct(t){return"function"==typeof t&&/native code/.test(t.toString())}var ut,lt="undefined"!=typeof Symbol&&ct(Symbol)&&"undefined"!=typeof Reflect&&ct(Reflect.ownKeys);ut="undefined"!=typeof Set&&ct(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ft=null;function pt(t){void 0===t&&(t=null),t||ft&&ft._scope.off(),ft=t,t&&t._scope.on()}var dt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),ht=function(t){void 0===t&&(t="");var e=new dt;return e.text=t,e.isComment=!0,e};function vt(t){return new dt(void 0,void 0,void 0,String(t))}function mt(t){var e=new dt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}"function"==typeof SuppressedError&&SuppressedError;var gt=0,yt=[],bt=function(){function t(){this._pending=!1,this.id=gt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,yt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.filter((function(t){return t}));for(var n=0,r=e.length;n0&&(Gt((u=t(u,"".concat(n||"","_").concat(r)))[0])&&Gt(f)&&(p[l]=vt(f.text+u[0].text),u.shift()),p.push.apply(p,u)):c(u)?Gt(f)?p[l]=vt(f.text+u):""!==u&&p.push(vt(u)):Gt(u)&&Gt(f)?p[l]=vt(f.text+u.text):(s(e._isVList)&&a(u.tag)&&i(u.key)&&a(n)&&(u.key="__vlist".concat(n,"_").concat(r,"__")),p.push(u)));return p}(t):void 0}function Gt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Jt(t,e){var n,r,i,s,c=null;if(o(t)||"string"==typeof t)for(c=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,c=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},e)e[u]&&"$"!==u[0]&&(i[u]=me(t,n,u,e[u]))}else i={};for(var l in n)l in i||(i[l]=ge(n,l));return e&&Object.isExtensible(e)&&(e._normalized=i),W(i,"$stable",s),W(i,"$key",c),W(i,"$hasNormal",a),i}function me(t,e,n,r){var i=function(){var e=ft;pt(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Xt(n))&&n[0];return pt(e),n&&(!i||1===n.length&&i.isComment&&!he(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function ge(t,e){return function(){return t[e]}}function ye(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};W(e,"_v_attr_proxy",!0),be(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||be(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||we(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:T(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Ut(t,e,n)}))}}}function be(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,_e(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function _e(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function we(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var xe=null;function Oe(t,e){return(t.__esModule||lt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function Se(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(un=function(){return ln.now()})}var fn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function pn(){var t,e;for(cn=un(),an=!0,en.sort(fn),sn=0;snsn&&en[n].id>t.id;)n--;en.splice(n+1,0,t)}else en.push(t);on||(on=!0,De(pn))}}function hn(t,e){if(t){for(var n=Object.create(null),r=lt?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!O(o,"default"))a=!1;else if(""===a||a===j(t)){var c=Mn(String,o.type);(c<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function Jn(t,e){var n=t.cache,r=t.keys,o=t._vnode,i=t.$vnode;for(var a in n){var s=n[a];if(s){var c=s.name;c&&!e(c)&&Zn(n,a,r,o)}}i.componentOptions.children=void 0}function Zn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,w(n,e)}Kn.prototype._init=function(t){var e=this;e._uid=qn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Bt(!0),e._scope.parent=void 0,e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Tn(Wn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Xe(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=pe(e._renderChildren,o),t.$scopedSlots=n?ve(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return Ce(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Ce(t,e,n,r,o,!0)};var i=n&&n.data;Pt(t,"$attrs",i&&i.attrs||r,null,!0),Pt(t,"$listeners",e._parentListeners||r,null,!0)}(e),tn(e,"beforeCreate",void 0,!1),function(t){var e=hn(t.$options.inject,t);e&&(Et(!1),Object.keys(e).forEach((function(n){Pt(t,n,e[n])})),Et(!0))}(e),Dn(e),function(t){var e=t.$options.provide;if(e){var n=u(e)?e.call(t):e;if(!l(n))return;for(var r=Ft(t),o=lt?Reflect.ownKeys(n):Object.keys(n),i=0;i1?A(n):n;for(var r=A(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Zn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Zn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Jn(t,(function(t){return Gn(e,t)}))})),this.$watch("exclude",(function(e){Jn(t,(function(t){return!Gn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=Se(t),n=e&&e.componentOptions;if(n){var r=Xn(n),o=this.include,i=this.exclude;if(o&&(!r||!Gn(o,r))||i&&r&&Gn(i,r))return e;var a=this.cache,s=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,w(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return F}};Object.defineProperty(t,"config",e),t.util={warn:On,extend:P,mergeOptions:Tn,defineReactive:Pt},t.set=Lt,t.delete=zt,t.nextTick=De,t.observable=function(t){return At(t),t},t.options=Object.create(null),H.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,P(t.options.components,tr),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=A(arguments,1);return n.unshift(this),u(t.install)?t.install.apply(t,n):u(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Tn(this.options,t),this}}(t),Yn(t),function(t){H.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&u(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Kn),Object.defineProperty(Kn.prototype,"$isServer",{get:at}),Object.defineProperty(Kn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Kn,"FunctionalRenderContext",{value:vn}),Kn.version="2.7.16";var er=b("style,class"),nr=b("input,textarea,option,select,progress"),rr=b("contenteditable,draggable,spellcheck"),or=b("events,caret,typing,plaintext-only"),ir=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ar="http://www.w3.org/1999/xlink",sr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},cr=function(t){return sr(t)?t.slice(6,t.length):""},ur=function(t){return null==t||!1===t};function lr(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=fr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=fr(e,n.data));return function(t,e){if(a(t)||a(e))return pr(t,dr(e));return""}(e.staticClass,e.class)}function fr(t,e){return{staticClass:pr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function pr(t,e){return t?e?t+" "+e:t:e||""}function dr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Ir(t,e,n):ir(e)?ur(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):rr(e)?t.setAttribute(e,function(t,e){return ur(e)||"false"===e?"false":"contenteditable"===t&&or(e)?e:"true"}(e,n)):sr(e)?ur(n)?t.removeAttributeNS(ar,cr(e)):t.setAttributeNS(ar,e,n):Ir(t,e,n)}function Ir(t,e,n){if(ur(n))t.removeAttribute(e);else{if(J&&!Z&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Nr={create:Rr,update:Rr};function Dr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=lr(e),c=n._transitionClasses;a(c)&&(s=pr(s,dr(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ur,Hr={create:Dr,update:Dr};function Br(t,e,n){var r=Ur;return function o(){var i=e.apply(null,arguments);null!==i&&qr(t,o,n,r)}}var Fr=Ae&&!(nt&&Number(nt[1])<=53);function Vr(t,e,n,r){if(Fr){var o=cn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Ur.addEventListener(t,e,ot?{capture:n,passive:r}:n)}function qr(t,e,n,r){(r||Ur).removeEventListener(t,e._wrapper||e,n)}function Wr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Ur=e.elm||t.elm,function(t){if(a(t.__r)){var e=J?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Wt(n,r,Vr,qr,Br,e.context),Ur=void 0}}var Kr,Yr={create:Wr,update:Wr,destroy:function(t){return Wr(t,Sr)}};function Xr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(n in(a(u.__ob__)||s(u._v_attr_proxy))&&(u=e.data.domProps=P({},u)),c)n in u||(o[n]="");for(n in u){if(r=u[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===c[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var l=i(r)?"":String(r);Gr(o,l)&&(o.value=l)}else if("innerHTML"===n&&mr(o.tagName)&&i(o.innerHTML)){(Kr=Kr||document.createElement("div")).innerHTML="");for(var f=Kr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==c[n])try{o[n]=r}catch(t){}}}}function Gr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return y(n)!==y(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Jr={create:Xr,update:Xr},Zr=S((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Qr(t){var e=to(t.style);return t.staticStyle?P(t.staticStyle,e):e}function to(t){return Array.isArray(t)?L(t):"string"==typeof t?Zr(t):t}var eo,no=/^--/,ro=/\s*!important$/,oo=function(t,e,n){if(no.test(e))t.style.setProperty(e,n);else if(ro.test(n))t.style.setProperty(j(e),n.replace(ro,""),"important");else{var r=ao(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(uo).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function fo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(uo).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function po(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&P(e,ho(t.name||"v")),P(e,t),e}return"string"==typeof t?ho(t):void 0}}var ho=S((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),vo=X&&!Z,mo="transition",go="transitionend",yo="animation",bo="animationend";vo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(mo="WebkitTransition",go="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(yo="WebkitAnimation",bo="webkitAnimationEnd"));var _o=X?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function wo(t){_o((function(){_o(t)}))}function xo(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),lo(t,e))}function Oo(t,e){t._transitionClasses&&w(t._transitionClasses,e),fo(t,e)}function So(t,e,n){var r=$o(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?go:bo,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c0&&(n="transition",l=a,f=i.length):"animation"===e?u>0&&(n="animation",l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?"transition":"animation":null)?"transition"===n?i.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&Co.test(r[mo+"Property"])}}function ko(t,e){for(;t.length1}function Lo(t,e){!0!==e.data.show&&jo(e)}var zo=function(t){var e,n,r={},u=t.modules,l=t.nodeOps;for(e=0;eh?_(t,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&x(e,f,h)}(f,v,g,n,u):a(g)?(a(t.text)&&l.setTextContent(f,""),_(f,null,g,0,g.length-1,n)):a(v)?x(v,0,v.length-1):a(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),a(h)&&a(d=h.hook)&&a(d=d.postpatch)&&d(t,e)}}}function $(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(I(Do(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function No(t,e){return e.every((function(e){return!I(e,t)}))}function Do(t){return"_value"in t?t._value:t.value}function Uo(t){t.target.composing=!0}function Ho(t){t.target.composing&&(t.target.composing=!1,Bo(t.target,"input"))}function Bo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Fo(t){return!t.componentInstance||t.data&&t.data.transition?t:Fo(t.componentInstance._vnode)}var Vo={model:Ro,show:{bind:function(t,e,n){var r=e.value,o=(n=Fo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,jo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=Fo(n)).data&&n.data.transition?(n.data.show=!0,r?jo(n,(function(){t.style.display=t.__vOriginalDisplay})):To(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},qo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Wo(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Wo(Se(e.children)):t}function Ko(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[$(r)]=o[r];return e}function Yo(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Xo=function(t){return t.tag||he(t)},Go=function(t){return"show"===t.name},Jo={name:"transition",props:qo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Xo)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Wo(o);if(!i)return o;if(this._leaving)return Yo(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:c(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Ko(this),u=this._vnode,l=Wo(u);if(i.data.directives&&i.data.directives.some(Go)&&(i.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,l)&&!he(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=P({},s);if("out-in"===r)return this._leaving=!0,Kt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Yo(t,o);if("in-out"===r){if(he(i))return u;var p,d=function(){p()};Kt(s,"afterEnter",d),Kt(s,"enterCancelled",d),Kt(f,"delayLeave",(function(t){p=t}))}}return o}}},Zo=P({tag:String,moveClass:String},qo);function Qo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function ti(t){t.data.newPos=t.elm.getBoundingClientRect()}function ei(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Zo.mode;var ni={Transition:Jo,TransitionGroup:{props:Zo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Je(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Ko(this),s=0;s-1?yr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:yr[t]=/HTMLUnknownElement/.test(e.toString())},P(Kn.options.directives,Vo),P(Kn.options.components,ni),Kn.prototype.__patch__=X?zo:z,Kn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=ht),tn(t,"beforeMount"),r=function(){t._update(t._render(),n)},new qe(t,r,z,{before:function(){t._isMounted&&!t._isDestroyed&&tn(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i0?ci(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function fi(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return si(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(si(e)):r.push(si(e)+"="+si(t)))})),r.join("&")}return si(e)+"="+si(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var pi=/\/?$/;function di(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=hi(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:gi(e,o),matched:t?mi(t):[]};return n&&(a.redirectedFrom=gi(n,o)),Object.freeze(a)}function hi(t){if(Array.isArray(t))return t.map(hi);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=hi(t[n]);return e}return t}var vi=di(null,{path:"/"});function mi(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function gi(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||fi)(r)+o}function yi(t,e,n){return e===vi?t===e:!!e&&(t.path&&e.path?t.path.replace(pi,"")===e.path.replace(pi,"")&&(n||t.hash===e.hash&&bi(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&bi(t.query,e.query)&&bi(t.params,e.params))))}function bi(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((function(n,o){var i=t[n];if(r[o]!==n)return!1;var a=e[n];return null==i||null==a?i===a:"object"==typeof i&&"object"==typeof a?bi(i,a):String(i)===String(a)}))}function _i(t){for(var e=0;e=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),u=e&&e.path||"/",l=c.path?Oi(c.path,u,n||o.append):u,f=function(t,e,n){void 0===e&&(e={});var r,o=n||li;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(ui):ui(a)}return r}(c.query,o.query,r&&r.options.parseQuery),p=o.hash||c.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:l,query:f,hash:p}}var Vi,qi=function(){},Wi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,c={},u=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==u?"router-link-active":u,p=null==l?"router-link-exact-active":l,d=null==this.activeClass?f:this.activeClass,h=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?di(null,Fi(a.redirectedFrom),null,n):a;c[h]=yi(r,v,this.exactPath),c[d]=this.exact||this.exactPath?c[h]:function(t,e){return 0===t.path.replace(pi,"/").indexOf(e.path.replace(pi,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=c[h]?this.ariaCurrentValue:null,g=function(t){Ki(t)&&(e.replace?n.replace(i,qi):n.push(i,qi))},y={click:Ki};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:c},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:c[d],isExactActive:c[h]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var w=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Bi(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var d=0;d-1}function Sa(t,e){return Oa(t)&&t._isRouter&&(null==e||t.type===e)}function Ca(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function $a(t){return function(e,n,r){var o=!1,i=0,a=null;ka(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,u=Ta((function(e){var o;((o=e).__esModule||ja&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:Vi.extend(e),n.components[s]=e,--i<=0&&r()})),l=Ta((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Oa(t)?t:new Error(e),r(a))}));try{c=t(u,l)}catch(t){l(t)}if(c)if("function"==typeof c.then)c.then(u,l);else{var f=c.component;f&&"function"==typeof f.then&&f.then(u,l)}}})),o||r()}}function ka(t,e){return Ea(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Ea(t){return Array.prototype.concat.apply([],t)}var ja="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ta(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Aa=function(t,e){this.router=t,this.base=function(t){if(!t)if(Yi){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=vi,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Pa(t,e,n,r){var o=ka(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=Vi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Ea(r?o.reverse():o)}function La(t,e){if(e)return function(){return t.apply(e,arguments)}}Aa.prototype.listen=function(t){this.cb=t},Aa.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Aa.prototype.onError=function(t){this.errorCbs.push(t)},Aa.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(Sa(t,ya.redirected)&&i===vi||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Aa.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!Sa(t)&&Oa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},c=t.matched.length-1,u=o.matched.length-1;if(yi(t,o)&&c===u&&t.matched[c]===o.matched[u])return this.ensureURL(),t.hash&&aa(this.router,o,t,!1),s(((a=wa(i=o,t,ya.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=va&&n;r&&this.listeners.push(ia());var o=function(){var n=t.current,o=Ra(t.base);t.current===vi&&o===t._startLocation||t.transitionTo(o,(function(t){r&&aa(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ma(Si(r.base+t.fullPath)),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ga(Si(r.base+t.fullPath)),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ra(this.base)!==this.current.fullPath){var e=Si(this.base+this.current.fullPath);t?ma(e):ga(e)}},e.prototype.getCurrentLocation=function(){return Ra(this.base)},e}(Aa);function Ra(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(Si(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ma=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ra(t);if(!/^\/#/.test(e))return window.location.replace(Si(t+"/#"+e)),!0}(this.base)||Ia()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=va&&e;n&&this.listeners.push(ia());var r=function(){var e=t.current;Ia()&&t.transitionTo(Na(),(function(r){n&&aa(t.router,r,e,!0),va||Ha(r.fullPath)}))},o=va?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Ua(t.fullPath),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Ha(t.fullPath),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Na()!==e&&(t?Ua(e):Ha(e))},e.prototype.getCurrentLocation=function(){return Na()},e}(Aa);function Ia(){var t=Na();return"/"===t.charAt(0)||(Ha("/"+t),!1)}function Na(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Da(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Ua(t){va?ma(Da(t)):window.location.hash=t}function Ha(t){va?ga(Da(t)):window.location.replace(Da(t))}var Ba=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Sa(t,ya.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Aa),Fa=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Ji(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!va&&!1!==t.fallback,this.fallback&&(e="hash"),Yi||(e="abstract"),this.mode=e,e){case"history":this.history=new za(this,t.base);break;case"hash":this.history=new Ma(this,t.base,this.fallback);break;case"abstract":this.history=new Ba(this,t.base);break;default:0}},Va={currentRoute:{configurable:!0}};Fa.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Va.currentRoute.get=function(){return this.history&&this.history.current},Fa.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof za||n instanceof Ma){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;va&&o&&"fullPath"in t&&aa(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Fa.prototype.beforeEach=function(t){return Wa(this.beforeHooks,t)},Fa.prototype.beforeResolve=function(t){return Wa(this.resolveHooks,t)},Fa.prototype.afterEach=function(t){return Wa(this.afterHooks,t)},Fa.prototype.onReady=function(t,e){this.history.onReady(t,e)},Fa.prototype.onError=function(t){this.history.onError(t)},Fa.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Fa.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Fa.prototype.go=function(t){this.history.go(t)},Fa.prototype.back=function(){this.go(-1)},Fa.prototype.forward=function(){this.go(1)},Fa.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Fa.prototype.resolve=function(t,e,n){var r=Fi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?Si(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Fa.prototype.getRoutes=function(){return this.matcher.getRoutes()},Fa.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==vi&&this.history.transitionTo(this.history.getCurrentLocation())},Fa.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==vi&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Fa.prototype,Va);var qa=Fa;function Wa(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Fa.install=function t(e){if(!t.installed||Vi!==e){t.installed=!0,Vi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",wi),e.component("RouterLink",Wi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Fa.version="3.6.5",Fa.isNavigationFailure=Sa,Fa.NavigationFailureType=ya,Fa.START_LOCATION=vi,Yi&&window.Vue&&window.Vue.use(Fa);n(99);n(126),n(92);var Ka={"components/AlgoliaSearchBox":()=>Promise.all([n.e(0),n.e(13)]).then(n.bind(null,313)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(14)]).then(n.bind(null,261)),"components/DropdownTransition":()=>Promise.all([n.e(0),n.e(19)]).then(n.bind(null,249)),"components/Home":()=>Promise.all([n.e(0),n.e(16)]).then(n.bind(null,287)),"components/NavLink":()=>n.e(23).then(n.bind(null,248)),"components/NavLinks":()=>Promise.all([n.e(0),n.e(12)]).then(n.bind(null,272)),"components/Navbar":()=>Promise.all([n.e(0),n.e(1)]).then(n.bind(null,310)),"components/Page":()=>Promise.all([n.e(0),n.e(11)]).then(n.bind(null,288)),"components/PageEdit":()=>Promise.all([n.e(0),n.e(17)]).then(n.bind(null,274)),"components/PageNav":()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,275)),"components/Sidebar":()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,289)),"components/SidebarButton":()=>Promise.all([n.e(0),n.e(20)]).then(n.bind(null,290)),"components/SidebarGroup":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,273)),"components/SidebarLink":()=>Promise.all([n.e(0),n.e(18)]).then(n.bind(null,262)),"components/SidebarLinks":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,260)),"global-components/Badge":()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,318)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,314)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,315)),"layouts/404":()=>n.e(7).then(n.bind(null,316)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,317)),NotFound:()=>n.e(7).then(n.bind(null,316)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,317))},Ya={"v-862b2260":()=>n.e(29).then(n.bind(null,319)),"v-3e0654b8":()=>n.e(30).then(n.bind(null,320)),"v-25a82b36":()=>n.e(31).then(n.bind(null,321)),"v-16284f9c":()=>n.e(21).then(n.bind(null,322)),"v-46e4a2a0":()=>n.e(25).then(n.bind(null,323)),"v-0d4a01b4":()=>n.e(24).then(n.bind(null,324)),"v-77a0f5a4":()=>n.e(26).then(n.bind(null,325)),"v-a85d48a8":()=>n.e(27).then(n.bind(null,326)),"v-d9199bac":()=>n.e(22).then(n.bind(null,327)),"v-7b1508a8":()=>n.e(28).then(n.bind(null,328)),"v-62fd777c":()=>n.e(32).then(n.bind(null,329))};function Xa(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Ga=/-(\w)/g,Ja=Xa(t=>t.replace(Ga,(t,e)=>e?e.toUpperCase():"")),Za=/\B([A-Z])/g,Qa=Xa(t=>t.replace(Za,"-$1").toLowerCase()),ts=Xa(t=>t.charAt(0).toUpperCase()+t.slice(1));function es(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(ts(Ja(e))):t(ts(e))||t(Qa(e))}const ns=Object.assign({},Ka,Ya),rs=t=>ns[t],os=t=>Ya[t],is=t=>Ka[t],as=t=>Kn.component(t);function ss(t){return es(os,t)}function cs(t){return es(is,t)}function us(t){return es(rs,t)}function ls(t){return es(as,t)}function fs(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!ls(t)&&us(t)){const e=await us(t)();Kn.component(t,e.default)}}))}function ps(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var ds=n(89),hs=n.n(ds),vs=n(90),ms=n.n(vs),gs={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${ms()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=bs(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=_s(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return hs()([{name:"description",content:this.$description}],t,this.siteMeta,ws)},updateCanonicalLink(){ys(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",bs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){_s(null,this.currentMetaTags),ys()}};function ys(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function bs(t=""){return t?``:""}function _s(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function ws(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var xs=n(22),Os=n.n(xs),Ss={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:Os()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Cs=n(23),$s=n.n(Cs),ks={mounted(){$s.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Kn.component(t.name)||$s.a.start(),n()}),this.$router.afterEach(()=>{$s.a.done(),this.isSidebarOpen=!1})}},Es=(n(237),Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(t){function e(){}t(e,e)},o=function(t){var e=t.target;e!==C?-1!==b.indexOf(e)&&v({target:e}):h()},i=function(){if(!w&&S.original){var t=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(x-t)>O.scrollOffset&&setTimeout(h,150)}},a=function(t){var e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||h()},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t;if(t.background&&(C.style.background=t.background),t.container&&t.container instanceof Object&&(e.container=Es({},O.container,t.container)),t.template){var n=Ts(t.template)?t.template:document.querySelector(t.template);e.template=n}return O=Es({},O,e),b.forEach((function(t){t.dispatchEvent(Rs("medium-zoom:update",{detail:{zoom:$}}))})),$},c=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(Es({},O,e))},u=function(){for(var t=arguments.length,e=Array(t),n=0;n0?e.reduce((function(t,e){return[].concat(t,Ps(e))}),[]):b;return r.forEach((function(t){t.classList.remove("medium-zoom-image"),t.dispatchEvent(Rs("medium-zoom:detach",{detail:{zoom:$}}))})),b=b.filter((function(t){return-1===r.indexOf(t)})),$},f=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return b.forEach((function(r){r.addEventListener("medium-zoom:"+t,e,n)})),_.push({type:"medium-zoom:"+t,listener:e,options:n}),$},p=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return b.forEach((function(r){r.removeEventListener("medium-zoom:"+t,e,n)})),_=_.filter((function(n){return!(n.type==="medium-zoom:"+t&&n.listener.toString()===e.toString())})),$},d=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target,n=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},e=void 0,n=void 0;if(O.container)if(O.container instanceof Object)e=(t=Es({},t,O.container)).width-t.left-t.right-2*O.margin,n=t.height-t.top-t.bottom-2*O.margin;else{var r=(Ts(O.container)?O.container:document.querySelector(O.container)).getBoundingClientRect(),o=r.width,i=r.height,a=r.left,s=r.top;t=Es({},t,{width:o,height:i,left:a,top:s})}e=e||t.width-2*O.margin,n=n||t.height-2*O.margin;var c=S.zoomedHd||S.original,u=As(c)?e:c.naturalWidth||e,l=As(c)?n:c.naturalHeight||n,f=c.getBoundingClientRect(),p=f.top,d=f.left,h=f.width,v=f.height,m=Math.min(Math.max(h,u),e)/h,g=Math.min(Math.max(v,l),n)/v,y=Math.min(m,g),b="scale("+y+") translate3d("+((e-h)/2-d+O.margin+t.left)/y+"px, "+((n-v)/2-p+O.margin+t.top)/y+"px, 0)";S.zoomed.style.transform=b,S.zoomedHd&&(S.zoomedHd.style.transform=b)};return new r((function(t){if(e&&-1===b.indexOf(e))t($);else{if(S.zoomed)t($);else{if(e)S.original=e;else{if(!(b.length>0))return void t($);var r=b;S.original=r[0]}if(S.original.dispatchEvent(Rs("medium-zoom:open",{detail:{zoom:$}})),x=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,w=!0,S.zoomed=zs(S.original),document.body.appendChild(C),O.template){var o=Ts(O.template)?O.template:document.querySelector(O.template);S.template=document.createElement("div"),S.template.appendChild(o.content.cloneNode(!0)),document.body.appendChild(S.template)}if(S.original.parentElement&&"PICTURE"===S.original.parentElement.tagName&&S.original.currentSrc&&(S.zoomed.src=S.original.currentSrc),document.body.appendChild(S.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),S.original.classList.add("medium-zoom-image--hidden"),S.zoomed.classList.add("medium-zoom-image--opened"),S.zoomed.addEventListener("click",h),S.zoomed.addEventListener("transitionend",(function e(){w=!1,S.zoomed.removeEventListener("transitionend",e),S.original.dispatchEvent(Rs("medium-zoom:opened",{detail:{zoom:$}})),t($)})),S.original.getAttribute("data-zoom-src")){S.zoomedHd=S.zoomed.cloneNode(),S.zoomedHd.removeAttribute("srcset"),S.zoomedHd.removeAttribute("sizes"),S.zoomedHd.removeAttribute("loading"),S.zoomedHd.src=S.zoomed.getAttribute("data-zoom-src"),S.zoomedHd.onerror=function(){clearInterval(i),console.warn("Unable to reach the zoom image target "+S.zoomedHd.src),S.zoomedHd=null,n()};var i=setInterval((function(){S.zoomedHd.complete&&(clearInterval(i),S.zoomedHd.classList.add("medium-zoom-image--opened"),S.zoomedHd.addEventListener("click",h),document.body.appendChild(S.zoomedHd),n())}),10)}else if(S.original.hasAttribute("srcset")){S.zoomedHd=S.zoomed.cloneNode(),S.zoomedHd.removeAttribute("sizes"),S.zoomedHd.removeAttribute("loading");var a=S.zoomedHd.addEventListener("load",(function(){S.zoomedHd.removeEventListener("load",a),S.zoomedHd.classList.add("medium-zoom-image--opened"),S.zoomedHd.addEventListener("click",h),document.body.appendChild(S.zoomedHd),n()}))}else n()}}}))},h=function(){return new r((function(t){if(!w&&S.original){w=!0,document.body.classList.remove("medium-zoom--opened"),S.zoomed.style.transform="",S.zoomedHd&&(S.zoomedHd.style.transform=""),S.template&&(S.template.style.transition="opacity 150ms",S.template.style.opacity=0),S.original.dispatchEvent(Rs("medium-zoom:close",{detail:{zoom:$}})),S.zoomed.addEventListener("transitionend",(function e(){S.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(S.zoomed),S.zoomedHd&&document.body.removeChild(S.zoomedHd),document.body.removeChild(C),S.zoomed.classList.remove("medium-zoom-image--opened"),S.template&&document.body.removeChild(S.template),w=!1,S.zoomed.removeEventListener("transitionend",e),S.original.dispatchEvent(Rs("medium-zoom:closed",{detail:{zoom:$}})),S.original=null,S.zoomed=null,S.zoomedHd=null,S.template=null,t($)}))}else t($)}))},v=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target;return S.original?h():d({target:e})},m=function(){return O},g=function(){return b},y=function(){return S.original},b=[],_=[],w=!1,x=0,O=n,S={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(e)?O=e:(e||"string"==typeof e)&&u(e),O=Es({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},O);var C=Ls(O.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",i),window.addEventListener("resize",h);var $={open:d,close:h,toggle:v,update:s,clone:c,attach:u,detach:l,on:f,off:p,getOptions:m,getImages:g,getZoomedImage:y};return $},Is={data:()=>({zoom:null}),mounted(){this.updateZoom()},updated(){this.updateZoom()},methods:{updateZoom(){setTimeout(()=>{this.zoom&&this.zoom.detach(),this.zoom=Ms(".theme-default-content :not(a) > img",void 0)},1e3)}}},Ns=n(91),Ds=n.n(Ns),Us=(n(238),[gs,Ss,ks,Is,{mounted(){Ds.a.polyfill()}}]),Hs={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return ps("layout",t),Kn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},Bs=n(8),Fs=Object(Bs.a)(Hs,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Fs,"mixins",Us);const Vs=[{name:"v-862b2260",path:"/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-862b2260").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-3e0654b8",path:"/part-01/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-3e0654b8").then(n)}},{path:"/part-01/index.html",redirect:"/part-01/"},{name:"v-25a82b36",path:"/part-02/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-25a82b36").then(n)}},{path:"/part-02/index.html",redirect:"/part-02/"},{name:"v-16284f9c",path:"/part-04/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-16284f9c").then(n)}},{path:"/part-04/index.html",redirect:"/part-04/"},{name:"v-46e4a2a0",path:"/part-05/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-46e4a2a0").then(n)}},{path:"/part-05/index.html",redirect:"/part-05/"},{name:"v-0d4a01b4",path:"/part-03/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-0d4a01b4").then(n)}},{path:"/part-03/index.html",redirect:"/part-03/"},{name:"v-77a0f5a4",path:"/part-06/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-77a0f5a4").then(n)}},{path:"/part-06/index.html",redirect:"/part-06/"},{name:"v-a85d48a8",path:"/part-07/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-a85d48a8").then(n)}},{path:"/part-07/index.html",redirect:"/part-07/"},{name:"v-d9199bac",path:"/part-08/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-d9199bac").then(n)}},{path:"/part-08/index.html",redirect:"/part-08/"},{name:"v-7b1508a8",path:"/part-09/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-7b1508a8").then(n)}},{path:"/part-09/index.html",redirect:"/part-09/"},{name:"v-62fd777c",path:"/part-10/",component:Fs,beforeEnter:(t,e,n)=>{fs("Layout","v-62fd777c").then(n)}},{path:"/part-10/index.html",redirect:"/part-10/"},{path:"*",component:Fs}],qs={title:"Kubernetes + Knative + GitLab + Harbor",description:"Kubernetes + Knative + GitLab + Harbor",base:"/k8s-knative-gitlab-harbor/",headTags:[["link",{rel:"icon",href:"https://kubernetes.io/images/favicon.png"}]],pages:[{title:"Kubernetes + Knative + GitLab + Harbor",frontmatter:{readingShow:"top"},regularPath:"/",relativePath:"README.md",key:"v-862b2260",path:"/",headers:[{level:2,title:"Requirements",slug:"requirements"},{level:2,title:"Content",slug:"content"},{level:2,title:"Asciinema",slug:"asciinema"}],lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3},{title:"Create k8s cluster",frontmatter:{readingShow:"top"},regularPath:"/part-01/",relativePath:"part-01/README.md",key:"v-3e0654b8",path:"/part-01/",headers:[{level:2,title:"Prepare the local working environment",slug:"prepare-the-local-working-environment"},{level:2,title:"Configure AWS",slug:"configure-aws"},{level:2,title:"Create K8s in AWS",slug:"create-k8s-in-aws"}],lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3},{title:"Install Helm",frontmatter:{readingShow:"top"},regularPath:"/part-02/",relativePath:"part-02/README.md",key:"v-25a82b36",path:"/part-02/",lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3},{title:"Install Harbor",frontmatter:{readingShow:"top"},regularPath:"/part-04/",relativePath:"part-04/README.md",key:"v-16284f9c",path:"/part-04/",lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3},{title:"Install GitLab",frontmatter:{readingShow:"top"},regularPath:"/part-05/",relativePath:"part-05/README.md",key:"v-46e4a2a0",path:"/part-05/",lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3},{title:"Istio + Knative + cert-manager + kubed installation",frontmatter:{readingShow:"top"},regularPath:"/part-03/",relativePath:"part-03/README.md",key:"v-0d4a01b4",path:"/part-03/",headers:[{level:2,title:"Install cert-manager",slug:"install-cert-manager"},{level:3,title:"Create ClusterIssuer for Let's Encrypt",slug:"create-clusterissuer-for-let-s-encrypt"},{level:2,title:"Generate TLS certificate",slug:"generate-tls-certificate"},{level:2,title:"Install kubed",slug:"install-kubed"},{level:2,title:"Install Istio",slug:"install-istio"},{level:2,title:"Create DNS records",slug:"create-dns-records"}],lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3},{title:"Install Knative",frontmatter:{readingShow:"top"},regularPath:"/part-06/",relativePath:"part-06/README.md",key:"v-77a0f5a4",path:"/part-06/",headers:[{level:2,title:"Enable automatic TLS certificate provisioning for Knative",slug:"enable-automatic-tls-certificate-provisioning-for-knative"}],lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3},{title:"Build and run container image using Knative + Tekton",frontmatter:{readingShow:"top"},regularPath:"/part-07/",relativePath:"part-07/README.md",key:"v-a85d48a8",path:"/part-07/",lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3},{title:"Automated deployment with Tekton",frontmatter:{readingShow:"top"},regularPath:"/part-08/",relativePath:"part-08/README.md",key:"v-d9199bac",path:"/part-08/",headers:[{level:2,title:"Fork podinfo application",slug:"fork-podinfo-application"},{level:2,title:"Create Tekton Triggers configuration",slug:"create-tekton-triggers-configuration"},{level:3,title:"Configure webhook",slug:"configure-webhook"},{level:2,title:"Change the source code of the app",slug:"change-the-source-code-of-the-app"}],lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3},{title:"Knative operations",frontmatter:{readingShow:"top"},regularPath:"/part-09/",relativePath:"part-09/README.md",key:"v-7b1508a8",path:"/part-09/",lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3},{title:"Clean-up",frontmatter:{readingShow:"top"},regularPath:"/part-10/",relativePath:"part-10/README.md",key:"v-62fd777c",path:"/part-10/",lastUpdated:"4/14/2024, 1:19:24 AM",lastUpdatedTimestamp:1713057564e3}],themeConfig:{displayAllHeaders:!0,lastUpdated:!0,repo:"ruzickap/k8s-knative-gitlab-harbor",docsDir:"docs",editLinks:!0,logo:"https://kubernetes.io/images/favicon.png",nav:[{text:"Home",link:"/"},{text:"Links",items:[{text:"GitLab",link:"https://gitlab.com"},{text:"Harbor",link:"https://goharbor.io"},{text:"Knative",link:"https://cloud.google.com/knative"}]}],sidebar:["/","/part-01/","/part-02/","/part-03/","/part-04/","/part-05/","/part-06/","/part-07/","/part-08/","/part-09/","/part-10/"]}};n(239);Kn.component("Badge",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,318))),Kn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,314))),Kn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,315)));n(240);var Ws={name:"BackToTop",props:{threshold:{type:Number,default:300}},data:()=>({scrollTop:null}),computed:{show(){return this.scrollTop>this.threshold}},mounted(){this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",Os()(()=>{this.scrollTop=this.getScrollTop()},100))},methods:{getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,scrollToTop(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0}}},Ks=(n(241),Object(Bs.a)(Ws,(function(){var t=this._self._c;return t("transition",{attrs:{name:"fade"}},[this.show?t("svg",{staticClass:"go-to-top",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 49.484 28.284"},on:{click:this.scrollToTop}},[t("g",{attrs:{transform:"translate(-229 -126.358)"}},[t("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(229 151.107) rotate(-45)"}}),this._v(" "),t("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(274.949 154.642) rotate(-135)"}})])]):this._e()])}),[],!1,null,"5fd4ef0c",null).exports),Ys={name:"ReadingProgress",data:()=>({readingTop:0,readingHeight:1,progressStyle:null,transform:void 0,running:!1}),watch:{$readingShow(){this.progressStyle=this.getProgressStyle(),this.$readingShow&&window.addEventListener("scroll",this.base)}},mounted(){this.transform=this.getTransform(),this.progressStyle=this.getProgressStyle(),this.$readingShow&&window.addEventListener("scroll",this.base)},beforeDestroy(){this.$readingShow&&window.removeEventListener("scroll",this.base)},methods:{base(){this.running||(this.running=!0,requestAnimationFrame(this.getReadingBase))},getReadingBase(){this.readingHeight=this.getReadingHeight()-this.getScreenHeight(),this.readingTop=this.getReadingTop(),this.progressStyle=this.getProgressStyle(),this.running=!1},getReadingHeight:()=>Math.max(document.body.scrollHeight,document.body.offsetHeight,0),getScreenHeight:()=>Math.max(window.innerHeight,document.documentElement.clientHeight,0),getReadingTop:()=>Math.max(window.pageYOffset,document.documentElement.scrollTop,0),getTransform(){const t=document.createElement("div");return["transform","-webkit-transform","-moz-transform","-o-transform","-ms-transform"].find(e=>e in t.style)||void 0},getProgressStyle(){const t=this.readingTop/this.readingHeight;switch(this.$readingShow){case"top":case"bottom":return this.transform?`${this.transform}: scaleX(${t})`:`width: ${100*t}%`;case"left":case"right":return this.transform?`${this.transform}: scaleY(${t})`:`height: ${100*t}%`;default:return null}}}},Xs=(n(242),Object(Bs.a)(Ys,(function(){var t=this._self._c;return t("ClientOnly",[this.$readingShow?t("div",{staticClass:"reading-progress",class:this.$readingShow},[t("div",{staticClass:"progress",style:this.progressStyle})]):this._e()])}),[],!1,null,"3640397f",null).exports);function Gs(t){const e=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-e.left,y:n.top-e.top}}var Js=[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({Vue:t})=>{t.component("BackToTop",Ks)},({Vue:t})=>{t.component(Xs.name,Xs),t.mixin({computed:{$readingShow(){return this.$page.frontmatter.readingShow}}})},({Vue:t,router:e})=>{e.options.scrollBehavior=(e,n,r)=>{if(r)return window.scrollTo({top:r.y,behavior:"smooth"});if(!e.hash)return window.scrollTo({top:0,behavior:"smooth"});{if(t.$vuepress.$get("disableScrollBehavior"))return;const n=e.hash.slice(1),r=document.getElementById(n)||document.querySelector(`[name='${n}']`);if(r)return window.scrollTo({top:Gs(r).y,behavior:"smooth"})}}}],Zs=["BackToTop","ReadingProgress"];class Qs extends class{constructor(){this.store=new Kn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Kn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Qs.prototype,{getPageAsyncComponent:ss,getLayoutAsyncComponent:cs,getAsyncComponent:us,getVueComponent:ls});var tc={install(t){const e=new Qs;t.$vuepress=e,t.prototype.$vuepress=e}};function ec(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var nc={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return ps("pageKey",e),Kn.component(e)||Kn.component(e,ss(e)),Kn.component(e)?t(e):t("")}},rc={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},oc={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},ic=(n(243),n(244),Object(Bs.a)(oc,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),ac={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Kn.config.productionTip=!1,Kn.use(qa),Kn.use(tc),Kn.mixin(function(t,e,n=Kn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Kn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(ec(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";ec(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";ec(t,o)?r(o):ec(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Js.filter(t=>"function"==typeof t).map(e=>e({Vue:Kn,options:r,router:n,siteData:qs,isServer:t})))}catch(t){console.error(t)}return{app:new Kn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Zs.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]);
\ No newline at end of file
diff --git a/assets/js/vendors~docsearch.857e8e87.js b/assets/js/vendors~docsearch.857e8e87.js
new file mode 100644
index 0000000..2268f29
--- /dev/null
+++ b/assets/js/vendors~docsearch.857e8e87.js
@@ -0,0 +1,3 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{311:function(t,e,n){
+/*! docsearch 2.6.3 | © Algolia | github.com/algolia/docsearch */
+var r;"undefined"!=typeof self&&self,r=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=22)}([function(t,e,n){"use strict";var r,i=n(1);function s(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,r){t&&(n.isArray(t)?e[r]=[].concat(t):n.isObject(t)&&(e[r]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(r,i){n&&(n=e.call(null,r,i,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(r,i){if(e.call(null,r,i,t))return n=!0,!1})),n):n},getUniqueId:(r=0,function(){return r++}),templatify:function(t){if(this.isFunction(t))return t;var e=i.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return(n?"":".")+t+e},escapeHighlightedString:function(t,e,n){e=e||"";var r=document.createElement("div");r.appendChild(document.createTextNode(e)),n=n||"";var i=document.createElement("div");i.appendChild(document.createTextNode(n));var o=document.createElement("div");return o.appendChild(document.createTextNode(t)),o.innerHTML.replace(RegExp(s(r.innerHTML),"g"),e).replace(RegExp(s(i.innerHTML),"g"),n)}}},function(t,e,n){"use strict";t.exports={element:null}},function(t,e){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString;t.exports=function(t,e,i){if("[object Function]"!==r.call(e))throw new TypeError("iterator must be a function");var s=t.length;if(s===+s)for(var o=0;o was loaded but did not call our provided callback"),JSONPScriptError:s("JSONPScriptError","
+