├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── archetypes └── default.md ├── config.toml ├── content ├── 01-workshop-overview │ ├── _index.md │ ├── agenda.md │ ├── objectives.md │ └── requirements.md ├── 02-kubernetes-cluster │ ├── _index.md │ ├── configure-gcp-account.md │ ├── create-gke-cluster.md │ └── prepare-local-working-environment.md ├── 03-servicemesh-overview │ ├── _index.md │ ├── distributed-system-complexity.md │ ├── introduction-service-mesh.md │ ├── istio-architecture.md │ └── microservices-evolution.md ├── 04-install-istio │ ├── _index.md │ ├── download-istio.md │ ├── download-labs-sources.md │ ├── install-helm.md │ ├── install-istio.md │ └── verify-installation.md ├── 05-dashboards-tour │ ├── _index.md │ ├── grafana.md │ ├── observability.md │ ├── promotheus.md │ └── tracing.md ├── 06-deploy-application │ ├── _index.md │ ├── application-architecture.md │ ├── deploy-application.md │ ├── deploy-application_skaffold.md │ └── verify-deployment.md ├── 07-configure-dns │ ├── _index.md │ ├── configure-google-dns.md │ ├── create-dns-account.md │ └── provision-dns-name.md ├── 08-sidecar-injection │ ├── _index.md │ ├── add-to-mesh.md │ └── enable-istio.md ├── 09-traffic-management │ ├── 01-ingress-gateway-exercise.md │ ├── 01-ingress-gateway.md │ ├── 03-traffic-splitting.md │ ├── 04-canary-deployment.md │ ├── 05-fault-injection.md │ ├── 06-circuit-breaker.md │ ├── 07-retry-strategy.md │ ├── 08-egress-gateway.md │ └── _index.md ├── 10-monitoring-and-obervability │ ├── 01-observability.md │ ├── 02-monitoring.md │ ├── 03-tracing.md │ └── _index.md ├── 11-security │ ├── 01-mTLS.md │ ├── 02-Let's encrypt.md │ ├── 03-RBAC authorization.md │ └── _index.md ├── 12-debugging │ ├── 01-istioctl-debug-command.md │ ├── 02-understand-proxy-logs.md │ └── _index.md ├── 13-conclusion │ └── _index.md ├── 14-Appendix │ ├── _index.md │ ├── cleanup.md │ ├── further-reading.md │ └── notes.md ├── 15-contribute │ └── _index.md ├── 16-contact │ └── _index.md ├── 17-credits │ └── _index.md ├── _index.md └── authors.md ├── layouts └── partials │ ├── favicon.html │ ├── logo.html │ └── toc.html ├── netlify.toml ├── static ├── css │ ├── theme-mine.css │ └── theme-mine.css.bak └── images │ ├── application-dns.png │ ├── application-view.png │ ├── canary-deployment-code.png │ ├── canary-deployment.png │ ├── cloud-dns-update-ingress.png │ ├── clouddnsnet.png │ ├── cloudns-activation-confirm.png │ ├── cloudns-activation.png │ ├── cloudns-add-new.png │ ├── cloudns-domain-dashboard.png │ ├── cloudns-domain-registration.png │ ├── cloudns-domain-update.png │ ├── cloudns-free-plan.png │ ├── cloudns-free-zone.png │ ├── cloudns-signup.png │ ├── code-oriented-frameworks.png │ ├── csharp-logo.png │ ├── dashboard-change-port-1.png │ ├── dashboard-change-port.png │ ├── envoy-downstream-upstream.png │ ├── envoy-logo.svg │ ├── fault-injection-503-kiali.png │ ├── fault-injection-503-recommandation.png │ ├── fault-injection-delay-recommandation.png │ ├── frontend-v0.12.png │ ├── frontend-v0.13.png │ ├── frontend-versions.png │ ├── gcloud-authorize.png │ ├── gcloud-dns-record-dashboard.png │ ├── gcloud-project-id.png │ ├── gcp-cloud-dns-create-record.png │ ├── gcp-cloud-dns-create-zone-1.png │ ├── gcp-cloud-dns-create-zone-2.png │ ├── gcp-cloud-dns-create-zone.png │ ├── gcp-cloud-dns-created-1.png │ ├── gcp-cloud-dns-created.png │ ├── gcp-cloud-dns-record-created.png │ ├── gcp-cloud-dns-record-updated.png │ ├── gcp-cloud-dns.png │ ├── gcp-redis-instance-details.png │ ├── go-logo-aqua.png │ ├── go-logo.png │ ├── google-consent.png │ ├── googlecloud-projectdashboard.png │ ├── googlecloud-projectselected.png │ ├── googlecloud-selectproject.png │ ├── googlecloud-shell.png │ ├── googlecloud-shellboostmode.png │ ├── googlecloud-shellwindow.png │ ├── googlecloud-startshell.png │ ├── googlecloud-terms.png │ ├── googlecloud-trialaccount.png │ ├── grafana-dashboard.png │ ├── grafana-istio-dashboards.png │ ├── grafana-mesh-dashboard.png │ ├── grafana-service-dashboard.png │ ├── helm-logo.png │ ├── helm-logo.svg │ ├── hipster-app-ingress.png │ ├── hipster-app-permissive-mtls.gif │ ├── hipster-app-permissive-mtls.png │ ├── hipster-application-architecture.png │ ├── hipster-application-architecture.svg │ ├── hipster-application-architecture1.svg │ ├── hipster-rbac-fails.png │ ├── hipster-shop-demo.png │ ├── incognito-window.png │ ├── istio-bluelogo-whitebackground-unframed.svg │ ├── istio-building-blocks.png │ ├── istio-circuit-breaker.png │ ├── istio-components-interaction.png │ ├── istio-default-dashboard.png │ ├── istio-egress-example.png │ ├── istio-egress-pattern.png │ ├── istio-icon.svg │ ├── istio-ingress-diagram.png │ ├── istio-ingress.png │ ├── istio-logo.svg │ ├── istio-mixer-adapters.png │ ├── istio-package-anatomy.png │ ├── istio-performance-dashboard.png │ ├── istio-rbac-auth.png │ ├── istio-retry-strategy.png │ ├── istio-security-architecture.svg │ ├── istio-traffic-splitting.png │ ├── istio-upstream-downstream.png │ ├── istio-whitelogo-bluebackground-unframed │ ├── istio-whitelogo-bluebackground.png │ ├── istio-whitelogo-nobackground-unframed.svg │ ├── jaeger-dag-graph.png │ ├── jaeger-dashboard.png │ ├── kiali-bug-version-label.png │ ├── kiali-dashbaord.png │ ├── kiali-login.png │ ├── kiali-missing-secret.png │ ├── kiali-missing-sidecar.png │ ├── kiali-service-graph.gif │ ├── kiali-service-graph.png │ ├── kiali-service-metrics.png │ ├── kiali-service-overview.png │ ├── kiali-traffic-splitting-1.png │ ├── kiali-traffic-splitting-2.png │ ├── kiali-traffic-splitting-3.png │ ├── kiali-traffic-splitting-5.png │ ├── locust-logo.png │ ├── microservices-building-blocks-istio.png │ ├── microservices-building-blocks-map.png │ ├── microservices-building-blocks.png │ ├── microservices-evolution.png │ ├── microservices-iceberg.png │ ├── prometheus-request-count.png │ ├── promotheus-dashboard.png │ ├── python-logo.png │ ├── rafik-linkedin.png │ ├── rafik8-twitter.png │ ├── redis-circuit-breaker.png │ ├── redis-logo.png │ ├── service-mesh-maturity-model-v0.1.png │ ├── servicemesh-highlevel-architecture.png │ ├── sidecar-oriented-pattern.png │ └── skaffold-on-gke.png └── themes └── hugo-theme-learn ├── .editorconfig ├── .gitignore ├── .grenrc.yml ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── archetypes ├── chapter.md └── default.md ├── exampleSite ├── LICENSE.md ├── config.toml ├── content │ ├── _index.en.md │ ├── _index.fr.md │ ├── basics │ │ ├── _index.en.md │ │ ├── _index.fr.md │ │ ├── configuration │ │ │ ├── _index.en.md │ │ │ └── _index.fr.md │ │ ├── installation │ │ │ ├── _index.en.md │ │ │ ├── _index.fr.md │ │ │ └── images │ │ │ │ └── chapter.png │ │ ├── requirements │ │ │ ├── _index.en.md │ │ │ ├── _index.fr.md │ │ │ └── images │ │ │ │ └── magic.gif │ │ └── style-customization │ │ │ ├── _index.en.md │ │ │ ├── _index.fr.md │ │ │ └── images │ │ │ ├── blue-variant.png │ │ │ ├── green-variant.png │ │ │ └── red-variant.png │ ├── cont │ │ ├── _index.en.md │ │ ├── _index.fr.md │ │ ├── archetypes.en.md │ │ ├── archetypes.fr.md │ │ ├── i18n │ │ │ ├── _index.en.md │ │ │ ├── _index.fr.md │ │ │ └── images │ │ │ │ └── i18n-menu.gif │ │ ├── icons.en.md │ │ ├── markdown.en.md │ │ ├── markdown.fr.md │ │ ├── menushortcuts.en.md │ │ ├── menushortcuts.fr.md │ │ ├── pages │ │ │ ├── _index.en.md │ │ │ ├── _index.fr.md │ │ │ └── images │ │ │ │ ├── frontmatter-icon.png │ │ │ │ ├── pages-chapter.png │ │ │ │ └── pages-default.png │ │ ├── tags.en.md │ │ └── tags.fr.md │ ├── credits.en.md │ ├── credits.fr.md │ ├── shortcodes │ │ ├── _index.en.md │ │ ├── _index.fr.md │ │ ├── attachments.en.files │ │ │ ├── BachGavotteShort.mp3 │ │ │ ├── Carroll_AliceAuPaysDesMerveilles.pdf │ │ │ ├── adivorciarsetoca00cape.pdf │ │ │ ├── hugo.png │ │ │ └── movieselectricsheep-flock-244-32500-2.mp4 │ │ ├── attachments.en.md │ │ ├── attachments.fr.files │ │ │ ├── BachGavotteShort.mp3 │ │ │ ├── Carroll_AliceAuPaysDesMerveilles.pdf │ │ │ ├── adivorciarsetoca00cape.pdf │ │ │ ├── hugo.png │ │ │ └── movieselectricsheep-flock-244-32500-2.mp4 │ │ ├── attachments.fr.md │ │ ├── button.en.md │ │ ├── button.fr.md │ │ ├── children │ │ │ ├── _index.en.md │ │ │ ├── _index.fr.md │ │ │ ├── children-1 │ │ │ │ ├── _index.en.md │ │ │ │ ├── _index.fr.md │ │ │ │ └── children-1-1 │ │ │ │ │ ├── _index.en.md │ │ │ │ │ ├── _index.fr.md │ │ │ │ │ └── children-1-1-1 │ │ │ │ │ ├── _index.en.md │ │ │ │ │ ├── _index.fr.md │ │ │ │ │ └── children-1-1-1-1 │ │ │ │ │ ├── _index.en.md │ │ │ │ │ ├── _index.fr.md │ │ │ │ │ └── children-1-1-1-1-1 │ │ │ │ │ ├── _index.en.md │ │ │ │ │ └── _index.fr.md │ │ │ ├── children-2 │ │ │ │ ├── _index.en.md │ │ │ │ ├── _index.fr.md │ │ │ │ ├── test3.en.md │ │ │ │ └── test3.fr.md │ │ │ ├── children-3 │ │ │ │ ├── _index.en.md │ │ │ │ └── _index.fr.md │ │ │ ├── children-4 │ │ │ │ ├── _index.en.md │ │ │ │ └── _index.fr.md │ │ │ ├── test.en.md │ │ │ └── test.fr.md │ │ ├── expand.en.md │ │ ├── expand.fr.md │ │ ├── mermaid.en.md │ │ ├── mermaid.fr.md │ │ ├── notice.en.md │ │ ├── notice.fr.md │ │ ├── siteparam.en.md │ │ └── siteparam.fr.md │ ├── showcase.en.md │ └── showcase.fr.md ├── layouts │ ├── partials │ │ ├── custom-footer.html │ │ ├── logo.html │ │ └── menu-footer.html │ └── shortcodes │ │ └── ghcontributors.html └── static │ ├── css │ └── theme-mine.css │ ├── fonts │ ├── monogramos-webfont.eot │ ├── monogramos-webfont.svg │ ├── monogramos-webfont.ttf │ ├── monogramos-webfont.woff │ └── monogramos-webfont.woff2 │ └── images │ └── showcase │ └── tat.png ├── i18n ├── ar.toml ├── de.toml ├── en.toml ├── es.toml ├── fr.toml ├── hi.toml ├── id.toml ├── nl.toml ├── pt.toml └── tr.toml ├── images ├── screenshot.png └── tn.png ├── layouts ├── 404.html ├── _default │ ├── list.html │ └── single.html ├── index.html ├── index.json ├── partials │ ├── custom-comments.html │ ├── custom-footer.html │ ├── custom-header.html │ ├── favicon.html │ ├── footer.html │ ├── header.html │ ├── logo.html │ ├── menu-footer.html │ ├── menu.html │ ├── meta.html │ ├── search.html │ ├── tags.html │ └── toc.html └── shortcodes │ ├── attachments.html │ ├── button.html │ ├── children.html │ ├── expand.html │ ├── mermaid.html │ ├── notice.html │ ├── ref.html │ ├── relref.html │ └── siteparam.html ├── netlify.toml ├── static ├── css │ ├── atom-one-dark-reasonable.css │ ├── auto-complete.css │ ├── featherlight.min.css │ ├── fontawesome-all.min.css │ ├── hugo-theme.css │ ├── hybrid.css │ ├── nucleus.css │ ├── perfect-scrollbar.min.css │ ├── tags.css │ ├── theme-blue.css │ ├── theme-green.css │ ├── theme-red.css │ └── theme.css ├── fonts │ ├── Inconsolata.eot │ ├── Inconsolata.svg │ ├── Inconsolata.ttf │ ├── Inconsolata.woff │ ├── Novecentosanswide-Normal-webfont.eot │ ├── Novecentosanswide-Normal-webfont.svg │ ├── Novecentosanswide-Normal-webfont.ttf │ ├── Novecentosanswide-Normal-webfont.woff │ ├── Novecentosanswide-Normal-webfont.woff2 │ ├── Novecentosanswide-UltraLight-webfont.eot │ ├── Novecentosanswide-UltraLight-webfont.svg │ ├── Novecentosanswide-UltraLight-webfont.ttf │ ├── Novecentosanswide-UltraLight-webfont.woff │ ├── Novecentosanswide-UltraLight-webfont.woff2 │ ├── Work_Sans_200.eot │ ├── Work_Sans_200.svg │ ├── Work_Sans_200.ttf │ ├── Work_Sans_200.woff │ ├── Work_Sans_200.woff2 │ ├── Work_Sans_300.eot │ ├── Work_Sans_300.svg │ ├── Work_Sans_300.ttf │ ├── Work_Sans_300.woff │ ├── Work_Sans_300.woff2 │ ├── Work_Sans_500.eot │ ├── Work_Sans_500.svg │ ├── Work_Sans_500.ttf │ ├── Work_Sans_500.woff │ └── Work_Sans_500.woff2 ├── images │ ├── clippy.svg │ ├── favicon.png │ └── gopher-404.jpg ├── js │ ├── auto-complete.js │ ├── clipboard.min.js │ ├── featherlight.min.js │ ├── highlight.pack.js │ ├── html5shiv-printshiv.min.js │ ├── hugo-learn.js │ ├── jquery-3.3.1.min.js │ ├── jquery.sticky.js │ ├── learn.js │ ├── lunr.min.js │ ├── modernizr.custom-3.6.0.js │ ├── perfect-scrollbar.jquery.min.js │ ├── perfect-scrollbar.min.js │ └── search.js ├── mermaid │ ├── mermaid.css │ ├── mermaid.dark.css │ ├── mermaid.forest.css │ └── mermaid.js └── webfonts │ ├── fa-brands-400.eot │ ├── fa-brands-400.svg │ ├── fa-brands-400.ttf │ ├── fa-brands-400.woff │ ├── fa-brands-400.woff2 │ ├── fa-regular-400.eot │ ├── fa-regular-400.svg │ ├── fa-regular-400.ttf │ ├── fa-regular-400.woff │ ├── fa-regular-400.woff2 │ ├── fa-solid-900.eot │ ├── fa-solid-900.svg │ ├── fa-solid-900.ttf │ ├── fa-solid-900.woff │ └── fa-solid-900.woff2 ├── theme.toml └── wercker.yml /.gitignore: -------------------------------------------------------------------------------- 1 | public/ 2 | npm-debug.log 3 | node_modules 4 | public 5 | .DS_Store 6 | *.swp 7 | releases/ 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "themes/learn"] 2 | path = themes/hugo-theme-learn 3 | url = https://github.com/matcornic/hugo-theme-learn.git 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Istio Service Mesh Workshop 2 | 3 | [![Netlify Status](https://api.netlify.com/api/v1/badges/8833e1ba-0ec3-490c-8216-2a7e470bfba4/deploy-status)](https://app.netlify.com/sites/condescending-varahamihira-878695/deploys) 4 | 5 | ### Setup: 6 | 7 | #### Install Hugo: 8 | On a mac: 9 | 10 | ```shell 11 | brew install hugo 12 | ``` 13 | 14 | On Linux: 15 | - Download from the releases page: https://github.com/gohugoio/hugo/releases/tag/v0.56.3 16 | - Extract and save the executable to `/usr/local/bin` 17 | 18 | #### Clone this repo: 19 | From wherever you checkout repos(or your fork): 20 | ```shell 21 | git clone https://github.com/rafik8/istio-workshop.git 22 | ``` 23 | 24 | #### Clone the theme submodule: 25 | ```shell 26 | cd istio-workshop 27 | ``` 28 | 29 | ```shell 30 | git submodule init 31 | git submodule update 32 | ``` 33 | 34 | #### Run Hugo locally: 35 | ```shell 36 | hugo server 37 | ``` 38 | 39 | #### View Hugo locally: 40 | Visit http://localhost:1313/ to see the site. 41 | 42 | #### Making Edits: 43 | As you save edits to a page, the site will live-reload to show your changes. 44 | 45 | #### Auto Deploy: 46 | Any commits to master will auto build and deploy in a couple of minutes. You can see the currently 47 | deployed hash at the bottom of the menu panel. 48 | 49 | Any commits to a branch will auto build and deploy in a couple of minutes to a custom route named with the branch name. You can see the currently 50 | deployed hash at the bottom of the menu panel. 51 | -------------------------------------------------------------------------------- /archetypes/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{ replace .Name "-" " " | title }}" 3 | date: {{ .Date }} 4 | draft: true 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /config.toml: -------------------------------------------------------------------------------- 1 | baseURL = "https://istioworkshop.io/" 2 | languageCode = "en-us" 3 | defaultContentLanguage = "en" 4 | 5 | title = "Istio Service Mesh Workshop" 6 | theme = "hugo-theme-learn" 7 | googleAnalytics = "UA-148326159-1" 8 | 9 | [params] 10 | 11 | editURL = "https://github.com/rafik8/istio-workshop/edit/master/content/" 12 | description = "Documentation for Istio Service Mesh Workshop" 13 | author = "Rafik Harabi" 14 | # Shows a checkmark for visited pages on the menu 15 | showVisitedLinks = true 16 | disableBreadcrumb = false 17 | disableNextPrev = false 18 | 19 | # Change default color scheme with a variant one. Can be "red", "blue", "green". 20 | themeVariant = "mine" 21 | 22 | [outputs] 23 | home = [ "HTML", "RSS", "JSON"] 24 | 25 | [[menu.shortcuts]] 26 | name = " Tags" 27 | url = "/tags" 28 | weight = 30 29 | -------------------------------------------------------------------------------- /content/01-workshop-overview/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Workshop overview" 3 | chapter: true 4 | weight: 1 5 | --- 6 | 7 | This workshop introduces you to Service Mesh technology for both DevOps and SRE teams. The workshop explains how to apply Service Mesh patterns to microservices-based container solution, complete with hands-on exercises. The training is based on Google Cloud Platform, but you can apply the skills you will learn to any Kubernetes based platform. After the workshop, you will be able to resolve microservices concerns using Service Mesh declarative way. 8 | 9 | 10 | {{% children showhidden="false" %}} 11 | -------------------------------------------------------------------------------- /content/01-workshop-overview/agenda.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Agenda" 3 | chapter: true 4 | weight: 2 5 | --- 6 | # Agenda 7 | 8 | During the workshop, we will walk through the following topics: 9 | 10 | ## Part 1: Introduce service mesh 11 | 12 | - Provision a Kubernetes Cluster 13 | - Service Mesh Overview 14 | - Install Istio 15 | - Deploy sample application 16 | - Dashboards Tour 17 | - Configure DNS 18 | 19 | ## Part 2: Traffic Management 20 | 21 | - Enable sidecars for Hipster app 22 | - Traffic management 23 | 24 | 25 | 26 | ## Part 3: Monitoring and Security 27 | 28 | - Monitoring and Observability 29 | - Application security 30 | 31 | 32 | ## Part 4: debugging and conclusion 33 | 34 | - Istio debugging tools 35 | - Conclusion and takeaways 36 | -------------------------------------------------------------------------------- /content/01-workshop-overview/objectives.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Objectives" 3 | chapter: true 4 | weight: 1 5 | --- 6 | # Workshop objectives 7 | 8 | Understand the capabilities of Istio Service Mesh technology to manage, secure and observe container-based solutions in a Kubernetes based environment. 9 | 10 | 11 | You should be able to by the end of this workshop to: 12 | 13 | - Understand service mesh and the capabilities it offers to manage microservices. 14 | - Understand the technology solution (Istio) high level architecture and components. 15 | - Install Istio service mesh on the top of a Kubernetes cluster. 16 | - Interact with service mesh using _istioctl_ command line tool. 17 | - Manage microservices behaviour using Istio. 18 | - Use Istio dashboards to monitor and debug microservices. 19 | - Debugging microservices running within the mesh network. 20 | -------------------------------------------------------------------------------- /content/01-workshop-overview/requirements.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Requirements" 3 | chapter: true 4 | weight: 3 5 | --- 6 | # Requirements 7 | 8 | 1. This lab will take you through a journey of using Istio on Kubernetes. A prerequisite of this lab is basic understanding of Kubernetes. 9 | 10 | 2. The workshop will be based on **Google Cloud Platform**. Labs accounts will be provided to run the workshop during the event. If you are running the workshop outside of the event, you have to create a Google Cloud Platform account. 11 | -------------------------------------------------------------------------------- /content/02-kubernetes-cluster/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Provision a Kubernetes Cluster" 3 | chapter: true 4 | weight: 2 5 | --- 6 | # Provision a Kubernetes Cluster 7 | In this section we will create a Kubernetes cluster based on Google Cloud Platform managed Kubernetes (GKE). 8 | 9 | {{% children showhidden="false" %}} 10 | -------------------------------------------------------------------------------- /content/02-kubernetes-cluster/configure-gcp-account.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Configure GCP account" 3 | chapter: true 4 | weight: 2 5 | --- 6 | # Configure GCP account 7 | 8 | 9 | 1. Get the project ID: 10 | 11 | 12 | ![GCP project ID](/images/gcloud-project-id.png?width=40pc "GCP project ID") 13 | 14 | 1. Set the default project (replace **PROJECT_ID** with the project during the event workshop or your own project): 15 | 16 | ``` 17 | export PROJECT_ID=srecon19-workshop-250603 18 | ``` 19 | 20 | ``` 21 | gcloud config set project $PROJECT_ID 22 | ``` 23 | 24 | 1. Set the default compute region and zone: 25 | 26 | ``` 27 | export REGION_ID=europe-west1 28 | ``` 29 | 30 | ``` 31 | gcloud config set compute/region $REGION_ID 32 | ``` 33 | 34 | ``` 35 | export ZONE_ID=europe-west1-b 36 | ``` 37 | 38 | ``` 39 | gcloud config set compute/zone $ZONE_ID 40 | ``` 41 | 42 | 1. Check the configuration: 43 | ``` 44 | gcloud config list 45 | ``` 46 | 47 | ``` 48 | [compute] 49 | region = europe-west1 50 | zone = europe-west1-b 51 | [core] 52 | account = trainee001.srecon19@innovsquare.com 53 | disable_usage_reporting = True 54 | project = srecon19-workshop-250603 55 | ``` 56 | 57 | Now, everything is prepared to create a Kubernetes cluster. 58 | -------------------------------------------------------------------------------- /content/03-servicemesh-overview/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Service Mesh Overview" 3 | chapter: true 4 | weight: 3 5 | --- 6 | In this section, we will have a walk-through of service mesh history, concepts and patterns to tackle microservices challenges. 7 | 8 | Specifically, we will walk you through the following topics: 9 | 10 | {{% children showhidden="false" %}} 11 | 12 | 13 | 14 | **Presentation**: 15 | [Service Mesh Overview](https://bit.ly/2MnIi7J) 16 | -------------------------------------------------------------------------------- /content/03-servicemesh-overview/distributed-system-complexity.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Distributed is hard" 3 | chapter: true 4 | weight: 3 5 | draft: true 6 | --- 7 | 8 | Companies with large, monolithic applications are increasingly breaking these unwieldy apps into smaller, containerized microservices. Microservices are popular because they offer agility, speed, and flexibility, but they can be complex, which can be a hurdle for adoption. And having multiple microservices, rather than a single monolith, can increase the attack surface of the app. 9 | 10 | 11 | # Distributed is hard 12 | A realistic application will have multiple components packaged across multiple containers, with multiple instances of those components deployed across multiple machines. That’s a lot of multiplication, and in a fast-moving environment it can quickly become hard to manage and keep track of everything. How do component instances find each other? How does network traffic get routed between containers? Was my recent deployment successful? Did our latest roll out affect end users? How does a Dev and DevOps team understand all of the application interactions that are happening? 13 | 14 | 15 | # Target: 16 | With Istio, it’s easier to observe what is happening across an entire network of microservices, secure communication between services, and ensure that policies are enforced. 17 | -------------------------------------------------------------------------------- /content/03-servicemesh-overview/microservices-evolution.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "The evolution of microservices" 3 | chapter: true 4 | weight: 1 5 | tags: ["microservices", "basics"] 6 | --- 7 | 8 | ## The evolution of microservices 9 | 10 | Companies with large, monolithic applications are increasingly breaking these unwieldy apps into smaller, containerized microservices. 11 | Microservices are popular because they offer **agility**, speed, and **flexibility**, but they can be complex, which can be a hurdle for adoption. 12 | 13 | In recent years evolving software development practices have fundamentally changed applications. These changes have impacted the requirements to the underlying infrastructure, tools, and processes to manage applications properly throughout the lifecycle. 14 | Applications transformed from large monolithic code bases to collections of many small services, loosely coupled together into what is called a microservices architecture. Driven by the desire to ship more software, faster in a way that is portable across infrastructure, the resulting benefits of more agile organizations. 15 | 16 | Such microservices architectures provide agility to development teams. But, it also introduces **operational complexity**. Both Dev and Ops teams often struggle during the migration to microservices. When a monolith is broken into tens or even hundreds of microservices, how do these components discover and communicate with each other? Where to begin debugging efforts? What is the service dependency graph? Who is calling whom? These are questions that they did not have to answer in the monolithic world. In a microservices world where a microservices architecture may seem like a distributed service mess, they must have these answers and more. 17 | 18 | ![Microservices evolution](/images/microservices-evolution.png) 19 | 20 | 21 | ## Microservices challenges 22 | 23 | Adopting a microservices oriented architecture brings new challenges: 24 | 25 | - M to N communication. 26 | - Distributed software interconnection and troubleshooting is hard. 27 | - Containers should stay thin and platform agnostic. 28 | - Upgrade of polyglot microservices is hard at scale. 29 | 30 | 31 | ![Microservices evolution](/images/microservices-building-blocks.png) 32 | 33 | 34 | 35 | The only value visible from business stakeholders is the business service so we have a develop a bench of microservices concerns to deliver a new business value. 36 | 37 | ![Microservices evolution](/images/microservices-iceberg.png) 38 | -------------------------------------------------------------------------------- /content/04-install-istio/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Install Istio" 3 | chapter: true 4 | weight: 4 5 | --- 6 | # Install Istio 7 | 8 | In this section we will install Istio on the Kubernetes cluster already provisioned. 9 | 10 | {{% children showhidden="false" %}} 11 | -------------------------------------------------------------------------------- /content/04-install-istio/download-istio.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Download Istio" 3 | chapter: true 4 | weight: 1 5 | --- 6 | # Download Istio 7 | 8 | 1. We will create working directory for the workshop that we will refer it by the environment variable: `WORKSHOP_HOME`. 9 | 10 | ``` 11 | mkdir ~/istio-workshop && cd ~/istio-workshop 12 | ``` 13 | ``` 14 | export WORKSHOP_HOME=~/istio-workshop 15 | ``` 16 | 17 | 1. Set Istio version in an environment variable (we will use the latest stable version): 18 | 19 | ``` 20 | export ISTIO_VERSION=1.3.1 21 | ``` 22 | 23 | 1. Download Istio: 24 | 25 | ``` 26 | curl -L https://git.io/getLatestIstio | sh - 27 | 28 | ``` 29 | 30 | 1. add `istioctl` to your path: 31 | 32 | ``` 33 | export PATH="$PATH:$WORKSHOP_HOME/istio-$ISTIO_VERSION/bin" 34 | ``` 35 | 36 | 1. Check `istioctl` version: 37 | 38 | ``` 39 | istioctl version --remote=false 40 | ``` 41 | 42 | ``` 43 | 1.3.1 44 | ``` 45 | 46 | ## Anatomy of an Istio package: 47 | 48 | Below an overview on an Istio release package: 49 | 50 | 51 | ![Istio package anatomy](/images/istio-package-anatomy.png?width=40pc "Istio package anatomy") 52 | 53 | We can categorize Istio release package into 4 sections: 54 | 55 | - `bin/istioctl`: is the CLI for the Istio control plane similar to `kubectl`. 56 | 57 | - `install`: contains various installation options for the different platform. For Kubernetes, official support for [Helm Chart](https://helm.sh) and [Operator Framework](https://github.com/operator-framework). 58 | 59 | - `sample`: contains various samples to get started with Istio and embrace its features. 60 | 61 | - `tools`: contains tooling for perf testing, etc ... 62 | -------------------------------------------------------------------------------- /content/04-install-istio/download-labs-sources.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Download Labs sources" 3 | chapter: true 4 | weight: 2 5 | --- 6 | # Download Labs sources 7 | 8 | 1. Download the lab sources under the working directory : 9 | 10 | ``` 11 | cd $WORKSHOP_HOME 12 | 13 | git clone https://github.com/rafik8/istio-workshop-labs.git 14 | 15 | chmod +x $WORKSHOP_HOME/istio-workshop-labs/*.sh 16 | ``` 17 | -------------------------------------------------------------------------------- /content/05-dashboards-tour/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Dashboards Tour" 3 | chapter: true 4 | weight: 5 5 | --- 6 | # Dashboards Tour 7 | 8 | We will explore the different dashboards that we have enabled with Istio: 9 | 10 | 11 | **Grafana**: exposes monitoring metrics for services running within the mesh. 12 | 13 | 14 | **Tracing**: offers end to end tracing of http requests going through different layers and containers. 15 | 16 | **Kiali**: Kiali offers visibility and real time observability for the services running within the mesh including Istio components. 17 | 18 | 19 | {{% notice note %}} 20 | Istio offers a flexible pluggable system so you could plug Istio to different external addons that you are already using such as GCP StackDriver, Amazon Cloud Watch, DataDog ... to list fews. 21 | You could also integrated you own system using the **Mixer Configuration Model**: [Mixer overview](https://istio.io/docs/reference/config/policy-and-telemetry/mixer-overview/) 22 | 23 | {{% /notice%}} 24 | 25 | ![Istio mixer adapters ](/images/istio-mixer-adapters.png?width=50pc) 26 | 27 | {{% children showhidden="false" %}} 28 | -------------------------------------------------------------------------------- /content/05-dashboards-tour/grafana.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Grafana" 3 | chapter: true 4 | weight: 1 5 | --- 6 | # Grafana 7 | 8 | 1. Use `istioctl dashboard` command line to establish a secure tunnel to the Grafana pod: 9 | 10 | ``` 11 | istioctl dashboard grafana 12 | ``` 13 | 14 | 1. In the Grafana Dashboard, click **Home → Istio**: 15 | 16 | Istio comes with 6 default dashboards, you can add you owns or customise the existing ones: 17 | 18 | ![Istio default dashboard](/images/istio-default-dashboard.png?width=50pc) 19 | 20 | 1. Click **Home → Istio → Istio Performance Dashboard**: 21 | 22 | ![Dashboard change port](/images/grafana-istio-dashboards.png?width=50pc) 23 | 24 | ![Dashboard change port](/images/istio-performance-dashboard.png?width=50pc) 25 | 26 | 27 | The dashboard shows Istio core components performance and resource utilization. We will use it later the others dashboard within the deployed application. 28 | 29 | 30 | 39 | -------------------------------------------------------------------------------- /content/05-dashboards-tour/observability.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Observability" 3 | chapter: true 4 | weight: 3 5 | --- 6 | # Observability 7 | 8 | 1. Use `istioctl dashboard` command line to establish a secure tunnel to the Kiali pod: 9 | 10 | ``` 11 | istioctl dashboard kiali 12 | ``` 13 | 14 | 1. The Kiali UI will be opened in your default web browser: ![Kiali missing secret](/images/kiali-missing-secret.png?width=50pc) 15 | 16 | 17 | 1. For the demo purpose, we will create a demo user account. Execute the following command to create the Kiali secret: 18 | 19 | ``` 20 | kubectl apply -f $WORKSHOP_HOME/istio-workshop-labs/kiali-secret.yaml 21 | ``` 22 | 23 | 1. Refresh Kiali home page and the error message should disappear: ![Kiali login](/images/kiali-login.png?width=50pc) 24 | 25 | 26 | 1. Enter the login password and the Kiali page: ![Kiali dashbaord](/images/kiali-dashbaord.png?width=50pc) 27 | 28 | 29 | 1. The workload tab show the the service are running without sidecars as we haven't yet deployed the: 30 | 31 | ![Kiali missing secret](/images/kiali-missing-sidecar.png?width=50pc) 32 | 33 | 34 | We will explore different Kiali features later with the application. 35 | -------------------------------------------------------------------------------- /content/05-dashboards-tour/promotheus.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Prometheus" 3 | chapter: true 4 | weight: 4 5 | --- 6 | # Prometheus 7 | 8 | 1. Use `istioctl dashboard` command line to Establish a secure tunnel to the Prometheus pod:: 9 | 10 | ``` 11 | istioctl dashboard prometheus 12 | ``` 13 | 14 | 1. The Prometheus UI will be opened in your default web browser: 15 | ![Jaeger dashboard](/images/promotheus-dashboard.png?width=50pc) 16 | 17 | 1. Choose the api server request count then click **execute**: 18 | ![Promethus request count](/images/prometheus-request-count.png?width=50pc) 19 | The number of request to the api server is displayed for each requester. 20 | -------------------------------------------------------------------------------- /content/05-dashboards-tour/tracing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tracing" 3 | chapter: true 4 | weight: 2 5 | --- 6 | 7 | # tracing 8 | 9 | 1. Use `istioctl dashboard` command line to establish a secure tunnel to the Jaeger pod: 10 | 11 | 12 | ``` 13 | istioctl dashboard jaeger 14 | ``` 15 | 16 | 2. The Jaeger UI will be opened in your default web browser: 17 | 18 | ![Jaeger dashboard](/images/jaeger-dashboard.png?width=50pc) 19 | 20 | We don't have any service running actually within the mesh that's why we have zero service with tracing. 21 | -------------------------------------------------------------------------------- /content/06-deploy-application/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Deploy Hipster application" 3 | chapter: true 4 | weight: 6 5 | --- 6 | 7 | ## Introducing the demo application 8 | 9 | For the purpose of this workshop we will use the awesome web-based e-commerce demo application **Hipster Shop** from _Google Cloud Platform_ team. 10 | 11 | 12 | **Sources**: [https://github.com/GoogleCloudPlatform/microservices-demo](https://github.com/GoogleCloudPlatform/microservices-demo) 13 | 14 | **Live Demo**: http://35.238.163.103 15 | 16 | ![Hipster Shop Demo](/images/hipster-shop-demo.png?width=50pc) 17 | 18 | 19 | 20 | {{% children showhidden="false" %}} 21 | -------------------------------------------------------------------------------- /content/06-deploy-application/application-architecture.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Application architecture" 3 | chapter: true 4 | weight: 1 5 | --- 6 | ## Application architecture 7 | 8 | The application is composed of 10 disparate microservices which is make it a perfect choice for our scenario to use and test istio features and address microservices chanllenges. 9 | 10 | 11 | ![Hipster Shop Architecture](/images/hipster-application-architecture.png) 12 | -------------------------------------------------------------------------------- /content/06-deploy-application/verify-deployment.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Verify deployment" 3 | chapter: true 4 | weight: 3 5 | --- 6 | 7 | # Verify Application deployment 8 | 9 | ## Explore the application: 10 | 11 | 1. Find the IP address of your application, then visit the application on your browser to confirm installation: 12 | 13 | ``` 14 | kubectl get service frontend-external 15 | ``` 16 | 17 | ``` 18 | NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 19 | frontend-external LoadBalancer 10.19.244.242 146.148.112.234 80:31937/TCP 45h 20 | ``` 21 | 22 | 2. Visit http://EXTERNAL-IP/ and the application home page should be rendered: 23 | 24 | ![Hipster Shop Demo](/images/application-view.png?width=50pc) 25 | 26 | 27 | 28 | {{% notice note %}} 29 | We are exposing the frontend application using service of type Load LoadBalancer. Lately, we will changed to ClusterIP and use the _Service Mesh Ingress Gateway_ to expose the service outside of the cluster. 30 | [kubernetes-manifests/frontend.yaml#L89](https://github.com/GoogleCloudPlatform/microservices-demo/blob/master/kubernetes-manifests/frontend.yaml#L89) 31 | 32 | 33 | {{< highlight yaml >}} 34 | apiVersion: v1 35 | kind: Service 36 | metadata: 37 | name: frontend-external 38 | spec: 39 | type: LoadBalancer 40 | selector: 41 | app: frontend 42 | ports: 43 | - name: http 44 | port: 80 45 | targetPort: 8080 46 | {{< /highlight >}} 47 | 48 | {{% /notice%}} 49 | -------------------------------------------------------------------------------- /content/07-configure-dns/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Configure DNS" 3 | chapter: true 4 | weight: 7 5 | --- 6 | 7 | We will use a dns name in order to access cluster services. 8 | 9 | 10 | {{% children showhidden="false" %}} 11 | -------------------------------------------------------------------------------- /content/07-configure-dns/configure-google-dns.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Configure DNS entry" 3 | chapter: true 4 | weight: 3 5 | --- 6 | # Configure Google DNS 7 | 8 | In the previous section we had configure our domain to be resolved by **[GCP Cloud DNS](https://cloud.google.com/dns/)**. 9 | 10 | In this section we will configure Cloud DNS to assign the domain to the Kubernetes Cluster load balancer. 11 | 12 | 1. On Google Cloud dashboard menu, select **Network services → Cloud DNS**: 13 | ![GCP Cloud DNS](/images/gcp-cloud-dns.png?width=50pc) 14 | 15 | 2. Click on **Create zone**: 16 | ![GCP Cloud DNS create zone](/images/gcp-cloud-dns-create-zone.png?width=50pc) 17 | 18 | 3. Create the zone with: 19 | 20 | - Set **Zone type** to _public_ 21 | - **DNS name**: enter the dns name. for the purpose of the workshop we will the Domain `innovlabs.io` 22 | - **Zone name**: use the training account as a name or select you cluster name (for example: `trainee001-srecon19`) 23 | - Set **DNSSEC** to _ON_ 24 | the click on **Create** 25 | ![GCP Cloud DNS create zone](/images/gcp-cloud-dns-create-zone-2.png?width=50pc) 26 | 27 | 4. The created DNS zone details should be displayed: 28 | ![GCP Cloud DNS created](/images/gcp-cloud-dns-created-1.png?width=50pc) 29 | 30 | 5. We will add a record set for the hispter e-commerce app, click on **Add record set**: 31 | - Enter _hipster_ for **DNS Name** 32 | - Select _A_ from the **Resource Record Type** menu and set **TTL** to 1 minute. 33 | - Enter the IP of the Load Balancer previously created for hipster app : `kubectl get service frontend-external` for **IPv4 Address**. 34 | then Click on **Create**: 35 | ![GCP Cloud DNS created](/images/gcp-cloud-dns-create-record.png?width=40pc) 36 | the DNS zone will be updated with the new Record: 37 | ![GCP Cloud DNS created](/images/gcp-cloud-dns-record-created.png?width=40pc) 38 | 39 | 6. wait a minute to get DNS cache updated and then open the application: 40 | ``` 41 | http://YOUR-APPLICATION-DOMAIN/ 42 | ``` 43 | 44 | ![GCP Cloud DNS created](/images/application-dns.png?width=40pc) 45 | -------------------------------------------------------------------------------- /content/07-configure-dns/create-dns-account.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Create DNS Account" 3 | chapter: true 4 | weight: 1 5 | draft: true 6 | --- 7 | 8 | # Create DNS Account 9 | 10 | We will use Cloud DNS who is providing a free DNS service that feat to our need. 11 | 12 | ![Cloud DNS .Net](/images/clouddnsnet.png?width=20pc) 13 | 14 | ![Cloud DNS .Net](/images/cloudns-free-plan.png?width=20pc) 15 | 16 | 1. Go to [https://www.cloudns.net/](https://www.cloudns.net/) and click on **SIGN UP FOR FREE**, Then enter your email address and an enough secure password, accept the **Terms of Service**: 17 | 18 | ![Cloud DNS sign up](/images/cloudns-signup.png?width=30pc) 19 | 20 | 2. A activation link will be sent to your email address, please click on the link to activate your account: 21 | 22 | ![Cloud DNS sign up](/images/cloudns-activation.png?width=50pc) 23 | 24 | You should get a popup confirming the account activation: 25 | 26 | ![Cloud DNS sign up](/images/cloudns-activation-confirm.png?width=25pc) 27 | -------------------------------------------------------------------------------- /content/07-configure-dns/provision-dns-name.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Add Cloud DNS zone" 3 | chapter: true 4 | weight: 2 5 | draft: true 6 | --- 7 | 8 | # Provision DNS name 9 | 10 | 1. Click on **Sign In** and Enter you login and password. 11 | 12 | 2. Once connected, go through the quick tour and then click on **DNS zones → Add new**: 13 | 14 | ![Cloud DNS add new](/images/cloudns-add-new.png?width=50pc) 15 | 16 | 17 | 3. Select **Free Zone** to create a free DNS entry: 18 | 19 | ![Cloud DNS free zone](/images/cloudns-free-zone.png?width=50pc) 20 | 21 | 4. Enter the provided username if you are running this workshop as a part of [SRECON 19](https://srecon19emea.sched.com/event/Scjb/managing-microservices-with-istio-service-mesh) or choose your own if you are running the workshop outside of the event then click **REGISTER**. 22 | 23 | ![Cloud DNS domain registration](/images/cloudns-domain-registration.png?width=50pc) 24 | 25 | 5. After registration, you will be redirected to the domain dashboard: 26 | 27 | ![Cloud DNS domain dashboard](/images/cloudns-domain-dashboard.png?width=50pc) 28 | 29 | 4. You need to change the NS entries and point to **Google Cloud DNS servers**: 30 | 31 | ```html 32 | ns-cloud-c1.googledomains.com 33 | ns-cloud-c2.googledomains.com 34 | ns-cloud-c3.googledomains.com 35 | ns-cloud-c4.googledomains.com 36 | ``` 37 | 38 | ![Cloud DNS domain dashboard](/images/cloudns-domain-update.png?width=50pc) 39 | -------------------------------------------------------------------------------- /content/08-sidecar-injection/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Enable Istio for Hipster app" 3 | chapter: true 4 | weight: 8 5 | --- 6 | 7 | # Enable Istio for Hispter app 8 | 9 | We have seen in the previous chapter that we deployed the hipster commerce application and associate a DNS name for it. 10 | Now, we will enable the service mesh for the application. 11 | Istio suggests 3 methods enables service mesh: 12 | 13 | **Automatic sidecar injection**: Automatic sidecar injection via a Mutating Admission Webhook. when a namespace is labelled `istio-injection=enabled`, every pod deployed to the namespace get a side car injected by `sidecar-injector` pod. 14 | 15 | **Manual sidecar injection**: 16 | Manual sidecar injection will add a sidecar to the deployment: 17 | ``` 18 | istioctl kube-inject -f deployment.yaml 19 | ``` 20 | **Single pod injection** (Experimental): 21 | This is really useful when we want to enable mesh for only a specific service and start testing its compatibility with Istio. 22 | 23 | ``` 24 | istioctl experimental add-to-mesh service [flags] 25 | ``` 26 | 27 | In this workshop, we will use the **manual sidecar injection** method. 28 | 29 | 30 | {{% children showhidden="false" %}} 31 | -------------------------------------------------------------------------------- /content/08-sidecar-injection/add-to-mesh.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Add to mesh" 3 | chapter: true 4 | weight: 2 5 | draft: true 6 | --- 7 | -------------------------------------------------------------------------------- /content/09-traffic-management/01-ingress-gateway-exercise.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Ingress Gateway Exercise Solution" 3 | chapter: true 4 | weight: 1 5 | --- 6 | 7 | ## Ingress Gateway Exercise Solution 8 | 9 | 1. Get the IP address of the Ingress Gateway: 10 | 11 | ``` 12 | echo $INGRESS_IP 13 | ``` 14 | 15 | 1. Configure Cloud DNS with `dashboard.domain-srecon19.innovlabs.io` to point to the Ingress Gateway: 16 | ![Cloud DNS dashbaord record](/images/gcloud-dns-record-dashboard.png?width=40pc) 17 | 18 | 19 | 1. Create a Gateway for Istio addons: 20 | 21 | ``` 22 | apiVersion: networking.istio.io/v1alpha3 23 | kind: Gateway 24 | metadata: 25 | name: addons-gateway 26 | spec: 27 | selector: 28 | istio: ingressgateway # use istio default controller 29 | servers: 30 | - port: 31 | number: 80 32 | name: http 33 | protocol: HTTP 34 | hosts: 35 | - "dashboard.trainee001-srecon19.innovlabs.io" 36 | ``` 37 | 38 | 1. Create Virtual Service for both Kiali and Jager: 39 | **Kiali**: 40 | 41 | ``` 42 | apiVersion: networking.istio.io/v1alpha3 43 | kind: VirtualService 44 | metadata: 45 | name: kiali 46 | spec: 47 | hosts: 48 | - "dashboard.trainee001-srecon19.innovlabs.io" 49 | gateways: 50 | - addons-gateway 51 | http: 52 | - match: 53 | - uri: 54 | prefix: /kiali 55 | route: 56 | - destination: 57 | host: kiali 58 | port: 59 | number: 20001 60 | ``` 61 | **Jaeger**: 62 | ``` 63 | apiVersion: networking.istio.io/v1alpha3 64 | kind: VirtualService 65 | metadata: 66 | name: tracing 67 | spec: 68 | hosts: 69 | - "dashboard.trainee001-srecon19.innovlabs.io" 70 | gateways: 71 | - addons-gateway 72 | http: 73 | - match: 74 | - uri: 75 | prefix: /jaeger 76 | route: 77 | - destination: 78 | host: tracing 79 | port: 80 | number: 80 81 | ``` 82 | 1. Apply the configuration: 83 | ``` 84 | kubectl apply -f $WORKSHOP_HOME/istio-workshop-labs/addons-ingress.yaml -n istio-system 85 | 86 | ``` 87 | -------------------------------------------------------------------------------- /content/09-traffic-management/04-canary-deployment.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Canary Deployment" 3 | chapter: true 4 | weight: 4 5 | --- 6 | 7 | # Canary release with Istio 8 | 9 | In Canary Deployments, newer versions of services are incrementally rolled out to users to minimize the risk and impact of any bugs introduced by the newer version. To begin incrementally routing traffic to the newer version of the frontend service, modify the original **VirtualService** rule: 10 | 11 | 12 | ![Canary Deployment](/images/canary-deployment.png?width=30pc) 13 | 14 | 1. Modify the `weight` in `$WORKSHOP_HOME/istio-workshop-labs/frontend-virtualservice.yaml` in order to shift traffic gradually: 15 | 16 | ![Canary Deployment sample](/images/canary-deployment-code.png?width=30pc) 17 | -------------------------------------------------------------------------------- /content/09-traffic-management/06-circuit-breaker.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Circuit Breaker" 3 | chapter: true 4 | weight: 6 5 | --- 6 | # Circuit Breaker 7 | 8 | ## The pattern 9 | 10 | Circuit breaking enables to fail quickly and apply back pressure downstream as soon as possible. Istio enforces circuit breaking limits at the network level using envoy sidecar as opposed to having to configure and code each application independently. 11 | 12 | There is two types of Circuit Breaker: 13 | 14 | **Maximum Connections**: Maximum number of connections to a service. Any excess connection will be pending in a queue. You can modify this number by changing the `maxConnections` field. 15 | **Maximum Pending Requests**: Maximum number of pending requests to a service. Any excess pending requests will be denied. You can modify this number by changing the `http1MaxPendingRequests` field. 16 | 17 | 18 | ## How it works 19 | 20 | The Fault injection is handled by the following Istio Object: 21 | 22 | 23 | | Object | API | Version | 24 | | -----------------| --------------------|----------- | 25 | | DestinationRule | networking.istio.io | v1alpha3 | 26 | 27 | 28 | ![Istion Circuit Breaker](/images/istio-circuit-breaker.png?width=70pc) 29 | 30 | ## Circuit Breaker in practice 31 | 32 | __Scenario__: We set redis-cart maximum connections to 1 and Maximum pending requests to 1. Thus, if we sent more than 2 requests at once to redis-cart, redis-cart will have 1 pending request and deny any additional requests until the pending request is processed. 33 | 34 | ``` 35 | apiVersion: networking.istio.io/v1alpha3 36 | kind: DestinationRule 37 | metadata: 38 | name: redis-cb 39 | namespace: hipster-app 40 | spec: 41 | host: redis-cart 42 | trafficPolicy: 43 | connectionPool: 44 | tcp: 45 | maxConnections: 1 46 | http: 47 | http1MaxPendingRequests: 1 48 | maxRequestsPerConnection: 1 49 | outlierDetection: 50 | consecutiveErrors: 1 51 | interval: 1s 52 | baseEjectionTime: 3m 53 | maxEjectionPercent: 100 54 | ``` 55 | 56 | Istio will detect any host that triggers a server error (5XX code) in the redis-cart's Envoy and eject the pod out of the load balancing pool for 3 minutes. 57 | 58 | Applying a back pressure avoid a full system outage and preserve a minimal service. Besides, we could apply other Kubernetes patterns to scale the service (Horizontal Pod Autoscaler, ...). 59 | 60 | 61 | 1. Apply the circuit breaker rule: 62 | 63 | ``` 64 | kubectl apply -f $WORKSHOP_HOME/istio-workshop-labs/redis-circuitbreaker.yaml 65 | ``` 66 | 67 | 2. on Kiali dashboard, check the `redis-cart` service: 68 | 69 | ![Redis Circuit Breaker](/images/redis-circuit-breaker.png?width=70pc) 70 | -------------------------------------------------------------------------------- /content/09-traffic-management/07-retry-strategy.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Retry Strategy" 3 | chapter: true 4 | weight: 7 5 | --- 6 | # Retry Strategy 7 | 8 | ## The pattern 9 | A retry setting specifies the maximum number of times an Envoy proxy attempts to connect to a service if the initial call fails. Retries can enhance service availability and application performance by making sure that calls don’t fail permanently because of transient problems such as a temporarily overloaded service or network. 10 | 11 | A retry is configured using two fields: 12 | 13 | - `attempts`: The number of retries before activating a circuit breaker. 14 | 15 | - `perTryTimeout`: the timeout per each request. 16 | 17 | 18 | ## How it works 19 | 20 | The Fault injection is handled by the following Istio Object: 21 | 22 | 23 | | Object | API | Version | 24 | | -----------------| --------------------|----------- | 25 | | VirtualService | networking.istio.io | v1alpha3 | 26 | 27 | 28 | ![Istio retry](/images/istio-retry-strategy.png?width=70pc) 29 | 30 | 31 | ## Retry in practice 32 | 33 | 34 | 1. We will configure shippingservice to have three times retry in case of failures, this increasing the chance of resulting in a successful response in case of temporary outage. we configure also the retry time to 3 seconds. 35 | 36 | ``` 37 | apiVersion: networking.istio.io/v1alpha3 38 | kind: VirtualService 39 | metadata: 40 | name: shippingservice-retry 41 | spec: 42 | hosts: 43 | - shippingservice 44 | http: 45 | - route: 46 | - destination: 47 | host: shippingservice 48 | retries: 49 | attempts: 3 50 | perTryTimeout: 3s 51 | ``` 52 | 53 | 2. Apply the configuration with the command below: 54 | 55 | 56 | ``` 57 | kubectl apply -f $WORKSHOP_HOME/istio-workshop-labs/shippingservice-retry.yaml 58 | ``` 59 | 60 | 63 | -------------------------------------------------------------------------------- /content/09-traffic-management/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Traffic management" 3 | chapter: true 4 | weight: 9 5 | --- 6 | # Traffic management 7 | In the section will deep dive with traffic managemment capabitites provides by Istio. 8 | 9 | 10 | {{% children showhidden="false" %}} 11 | -------------------------------------------------------------------------------- /content/10-monitoring-and-obervability/01-observability.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Observability" 3 | chapter: true 4 | weight: 1 5 | --- 6 | # Visualizing Your Mesh with Kiali 7 | 8 | Kiali enable service mesh visualizing and Observability by providing a set of views to inspect services running within the mesh: 9 | 10 | 1. Execute the following command to open the Kiali UI: 11 | 12 | ``` 13 | istioctl dashboard kiali 14 | ``` 15 | 16 | 1. **Overview** view: The Overview page displays a summary of all the namespaces with the numbers of applications, health Check status and the traffic. 17 | 18 | 19 | ![Kiali Service Overview](/images/kiali-service-overview.png) 20 | 21 | 2.**Graph** view: Observe Real time traffic with Kiali graph: 22 | 23 | ![Kiali Service Graph](/images/kiali-service-graph.png) 24 | 25 | 3. To view a summary of metrics for a service, select the service in the graph and a panel on the right will appear to display its metric details. 26 | 27 | ![Kiali Service Metrics](/images/kiali-service-metrics.png) 28 | -------------------------------------------------------------------------------- /content/10-monitoring-and-obervability/02-monitoring.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Monitoring" 3 | chapter: true 4 | weight: 2 5 | --- 6 | ## Monitoring with Grafana 7 | 8 | 9 | 1. Execute the following command to open the Kiali UI: 10 | 11 | ``` 12 | istioctl dashboard grafana 13 | ``` 14 | 15 | 2. Mesh overview: In the Grafana dashboard, click **Home → Istio → Istio Mesh dashboard**: 16 | 17 | 18 | ![Grafana mesh dashboard](/images/grafana-mesh-dashboard.png) 19 | 20 | This gives the global view of the Mesh along with services and workloads in the mesh. 21 | 22 | 23 | 3. Service Dashboard: 24 | 25 | ![Grafana mesh dashboard](/images/grafana-service-dashboard.png) 26 | -------------------------------------------------------------------------------- /content/10-monitoring-and-obervability/03-tracing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Distributed Tracing" 3 | chapter: true 4 | weight: 3 5 | --- 6 | 7 | # Distributed Tracing with Jaeger 8 | 9 | 10 | 1. Execute the following command to open the Kiali UI: 11 | 12 | ``` 13 | istioctl dashboard jaeger 14 | ``` 15 | 16 | 2. Jaeger DAG graph overview: 17 | 18 | Directed Acyclic Graph(DAG) is a graph that is directed and without cycles connecting the other edges. The graph enables to detect any cyclic dependencies between the microservices. 19 | 20 | ![Jaeger DAG Graph](/images/jaeger-dag-graph.png) 21 | -------------------------------------------------------------------------------- /content/10-monitoring-and-obervability/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Monitoring and Observability" 3 | chapter: true 4 | weight: 10 5 | --- 6 | # Monitoring and Observability 7 | 8 | In this chapter we will deep dive into the capabilities provided by Istio Addons for Observability, Monitoring and Tracing. 9 | 10 | {{% children showhidden="false" %}} 11 | -------------------------------------------------------------------------------- /content/11-security/03-RBAC authorization.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Service Authorization using RBAC" 3 | chapter: true 4 | weight: 2 5 | draft: true 6 | --- 7 | # Service Authorization using RBAC 8 | 9 | ## Introduction 10 | 11 | In large system, we need to isolate services and their interaction to avoid security issues and make sure that the flow is similar to what been designed. 12 | ## How it works 13 | 14 | ![Istio RBAC Authorization](/images/istio-rbac-auth.png) 15 | 16 | 17 | ## RBAC authorization in practice 18 | 19 | 1. Enable Istio RBAC for the `hipster-app` namespace. 20 | 21 | ``` 22 | apiVersion: "rbac.istio.io/v1alpha1" 23 | kind: RbacConfig 24 | metadata: 25 | name: default 26 | spec: 27 | mode: 'ON_WITH_INCLUSION' 28 | inclusion: 29 | namespaces: ["hipster-app"] 30 | ``` 31 | 32 | ``` 33 | kubectl apply -f $WORKSHOP_HOME/istio-workshop-labs/istio-auth-rbac.yaml 34 | ``` 35 | 36 | 1. Try to access to the hipster app: 37 | 38 | 39 | ![Istio RBAC Authorization](/images/hipster-rbac-fails.png) 40 | 41 | 42 | 2. Let's define a RBAC role: 43 | 44 | ``` 45 | apiVersion: "rbac.istio.io/v1alpha1" 46 | kind: ServiceRole 47 | metadata: 48 | name: viewer 49 | namespace: hipster-app 50 | spec: 51 | rules: 52 | - services: ["*.hipster-app.svc.cluster.local"] 53 | methods: ["GET", "POST", "HEAD"] 54 | --- 55 | apiVersion: rbac.istio.io/v1alpha1 56 | kind: ServiceRoleBinding 57 | metadata: 58 | name: bind-viewer 59 | namespace: hipster-app 60 | spec: 61 | subjects: 62 | - user: "*" 63 | roleRef: 64 | kind: ServiceRole 65 | name: viewer 66 | ``` 67 | 68 | Apply the configuration: 69 | 70 | 71 | ``` 72 | kubectl apply -f $WORKSHOP_HOME/istio-workshop-labs/istio-role-viewer.yaml 73 | ``` 74 | 75 | 81 | ``` 82 | -------------------------------------------------------------------------------- /content/11-security/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Application security" 3 | chapter: true 4 | weight: 11 5 | --- 6 | # Application security 7 | 8 | In this chapter, we will have hand-on of the following security items: 9 | 10 | {{% children showhidden="false" %}} 11 | -------------------------------------------------------------------------------- /content/12-debugging/02-understand-proxy-logs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Understand sidecar logs" 3 | chapter: true 4 | weight: 2 5 | --- 6 | ## Understand proxy logs 7 | 8 | Nothing to tell, something to share :) 9 | 10 | {{< tweet 1157029140693995521 >}} 11 | -------------------------------------------------------------------------------- /content/12-debugging/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Istio Debugging" 3 | chapter: true 4 | weight: 12 5 | --- 6 | 7 | # Istio Debugging 8 | 9 | {{% children showhidden="false" %}} 10 | -------------------------------------------------------------------------------- /content/13-conclusion/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Conclusion and takeaways" 3 | chapter: true 4 | weight: 13 5 | --- 6 | # Conclusion and takeaways 7 | 8 | 9 | - The network is definitely NOT reliable. 10 | 11 | - Istio bring tools to DevOps and SRE to manage network concerns on behalf of Dev teams letting then focus on delivering business value. 12 | 13 | - The sidecar patterns tackles microservices concerns in a uniform and declarative way. 14 | 15 | - “**Istio can (and should) be adopted incrementally.**” _Christian Posta_, Istio in Action 16 | 17 | - Benchmark other service mesh technologies: [Linkerd](https://linkerd.io) is an option to consider also. 18 | 19 | - Service mesh maturity model: 20 | 21 | ![Service mesh maturity model](/images/service-mesh-maturity-model-v0.1.png) 22 | 23 | 24 | {{% children showhidden="false" %}} 25 | -------------------------------------------------------------------------------- /content/14-Appendix/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Appendix" 3 | chapter: true 4 | weight: 14 5 | --- 6 | # Appendix 7 | 8 | 9 | {{% children showhidden="false" %}} 10 | -------------------------------------------------------------------------------- /content/14-Appendix/cleanup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Cleanup" 3 | chapter: true 4 | weight: 1 5 | --- 6 | 7 | ## Undeploy sample application: 8 | 9 | 10 | **Skaffold**: you can run the following command to clean up the deployed resources. 11 | ``` 12 | skaffold delete 13 | ``` 14 | 15 | **kubectl**: you can run the following command to clean up the deployed resources. 16 | 17 | ``` 18 | kubectl delete -f ./release/kubernetes-manifests.yaml 19 | ``` 20 | 21 | 22 | ## Uninstall Istio 23 | 24 | ``` 25 | helm delete istio --purge 26 | helm delete istio-init --purge 27 | helm delete istio-cni --purge 28 | 29 | helm ls 30 | 31 | kubectl -n istio-system delete job --all 32 | kubectl delete namespace istio-system 33 | kubectl delete -f $WORKSHOP_HOME/istio-$ISTIO_VERSION/install/kubernetes/helm/istio-init/files 34 | ``` 35 | 36 | ## Delete Kubernetes cluster 37 | ```shell 38 | gcloud container clusters delete [CLUSTER_NAME] 39 | ``` 40 | 41 | ``` 42 | The following clusters will be deleted. 43 | - [istio-workshop] in [europe-west1-b] 44 | 45 | Do you want to continue (Y/n)? Y 46 | 47 | Deleting cluster istio-workshop...done. 48 | Deleted [https://container.googleapis.com/v1/projects/srecon19-workshop-250603/zones/europe-west1-b/clusters/istio-workshop]. 49 | ``` 50 | 51 | ## Delete Redis instance 52 | 53 | ``` 54 | gcloud redis instances delete redis-cart --region=$REGION_ID 55 | ``` 56 | -------------------------------------------------------------------------------- /content/14-Appendix/further-reading.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Further reading" 3 | chapter: true 4 | weight: 1 5 | draft: true 6 | --- 7 | # Further reading 8 | -------------------------------------------------------------------------------- /content/14-Appendix/notes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Notes" 3 | chapter: true 4 | weight: 3 5 | draft: true 6 | --- 7 | ### GKE 8 | If you are running on a GKE cluster with RBAC enabled you need to grant a cluster role of cluster-admin to your Google account: 9 | 10 | ``` 11 | kubectl create clusterrolebinding cluster-admin-binding-$USER \ 12 | --clusterrole=cluster-admin --user=$(gcloud config get-value account) 13 | ``` 14 | -------------------------------------------------------------------------------- /content/15-contribute/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contribute" 3 | chapter: true 4 | weight: 15 5 | --- 6 | 7 | # Contribute 8 | 9 | If you want to contribute to this workshop, extend it with new concepts or bring a correction/precision you are more than welcome. 10 | 11 | Sources of the workshop are on github: https://github.com/rafik8/istio-workshop 12 | -------------------------------------------------------------------------------- /content/16-contact/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contact" 3 | chapter: true 4 | weight: 16 5 | --- 6 | # Contact 7 | 8 | 9 | 10 | 11 | You could reach me: 12 | 13 | Mail: rafik.harabi@innovsquare.com 14 | 15 | Twitter: https://twitter.com/rafik8_ 16 | 17 | ![Rafik Twitter](/images/rafik8-twitter.png?width=10pc) 18 | 19 | Linkedin: https://www.linkedin.com/in/rafikharabi/ 20 | 21 | ![Rafik Linkedin](/images/rafik-linkedin.png?width=10pc) 22 | -------------------------------------------------------------------------------- /content/17-credits/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Credits" 3 | chapter: true 4 | weight: 17 5 | --- 6 | # Credits 7 | 8 | 1. [Hugo learn theme](https://github.com/matcornic/hugo-theme-learn/) for providing this great theme. 9 | 10 | 2. I would like to thanks the following people for her support to elaborate this workshop: 11 | - **[Arshia Mufti](https://twitter.com/arshia__)** for rehearsals session and her feedbacks before my workshop at [_SRECon EMEA 2019_](https://www.usenix.org/conference/srecon19emea/presentation/harabi). 12 | - My friends [Chekib Ayed](https://twitter.com/ChekibAyed) and [Mohamed Ali Ben Mansour](https://twitter.com/dalibenman) for their review. 13 | -------------------------------------------------------------------------------- /content/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Istio Service Mesh Workshop" 3 | chapter: true 4 | weight: 1 5 | --- 6 | # Istio Service Mesh Workshop 7 | 8 | Welcome to the Istio Service Mesh Workshop! 9 | 10 | A labs driven workshop to explore service mesh technology and patterns using [Istio](https://istio.io) open source project. 11 | 12 | ![Istio logo](/images/istio-whitelogo-bluebackground.png?width=10pc) 13 | -------------------------------------------------------------------------------- /content/authors.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Authors 3 | disableToc: true 4 | --- 5 | 6 | ### Thanks to our wonderful contributors for making Open Source a better place! 7 | 8 | 12 | -------------------------------------------------------------------------------- /layouts/partials/favicon.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /layouts/partials/logo.html: -------------------------------------------------------------------------------- 1 | 2 | 13 | -------------------------------------------------------------------------------- /layouts/partials/toc.html: -------------------------------------------------------------------------------- 1 | {{ if and (gt .WordCount 400 ) (.Params.toc) }} 2 | 8 | {{ end }} 9 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "public" 3 | command = "hugo --gc --minify" 4 | 5 | [context.production.environment] 6 | HUGO_VERSION = "0.56.3" 7 | HUGO_ENV = "production" 8 | HUGO_ENABLEGITINFO = "true" 9 | 10 | [context.split1] 11 | command = "hugo --gc --minify --enableGitInfo" 12 | 13 | [context.split1.environment] 14 | HUGO_VERSION = "0.56.3" 15 | HUGO_ENV = "production" 16 | 17 | [context.deploy-preview] 18 | command = "hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL" 19 | 20 | [context.deploy-preview.environment] 21 | HUGO_VERSION = "0.56.3" 22 | 23 | [context.branch-deploy] 24 | command = "hugo --gc --minify -b $DEPLOY_PRIME_URL" 25 | 26 | [context.branch-deploy.environment] 27 | HUGO_VERSION = "0.56.3" 28 | 29 | [context.next.environment] 30 | HUGO_ENABLEGITINFO = "true" 31 | -------------------------------------------------------------------------------- /static/css/theme-mine.css: -------------------------------------------------------------------------------- 1 | /* #chapter { 2 | display: flex; 3 | align-items: flex-start; 4 | justify-content: flex-start; 5 | height: 100%; 6 | padding: 2rem 0; 7 | } */ 8 | 9 | /* #chapter p { 10 | text-align: justify; 11 | } */ 12 | 13 | pre { 14 | padding: 1rem; 15 | margin: 2rem 0; 16 | background: #282c34; 17 | border: 0; 18 | border-radius: 2px; 19 | line-height: 1.15; 20 | } 21 | 22 | #chapter p { 23 | text-align: left; 24 | font-size: 1.2rem; 25 | } 26 | 27 | #chapter h3 { 28 | text-align: left; 29 | } 30 | -------------------------------------------------------------------------------- /static/images/application-dns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/application-dns.png -------------------------------------------------------------------------------- /static/images/application-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/application-view.png -------------------------------------------------------------------------------- /static/images/canary-deployment-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/canary-deployment-code.png -------------------------------------------------------------------------------- /static/images/canary-deployment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/canary-deployment.png -------------------------------------------------------------------------------- /static/images/cloud-dns-update-ingress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/cloud-dns-update-ingress.png -------------------------------------------------------------------------------- /static/images/clouddnsnet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/clouddnsnet.png -------------------------------------------------------------------------------- /static/images/cloudns-activation-confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/cloudns-activation-confirm.png -------------------------------------------------------------------------------- /static/images/cloudns-activation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/cloudns-activation.png -------------------------------------------------------------------------------- /static/images/cloudns-add-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/cloudns-add-new.png -------------------------------------------------------------------------------- /static/images/cloudns-domain-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/cloudns-domain-dashboard.png -------------------------------------------------------------------------------- /static/images/cloudns-domain-registration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/cloudns-domain-registration.png -------------------------------------------------------------------------------- /static/images/cloudns-domain-update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/cloudns-domain-update.png -------------------------------------------------------------------------------- /static/images/cloudns-free-plan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/cloudns-free-plan.png -------------------------------------------------------------------------------- /static/images/cloudns-free-zone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/cloudns-free-zone.png -------------------------------------------------------------------------------- /static/images/cloudns-signup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/cloudns-signup.png -------------------------------------------------------------------------------- /static/images/code-oriented-frameworks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/code-oriented-frameworks.png -------------------------------------------------------------------------------- /static/images/csharp-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/csharp-logo.png -------------------------------------------------------------------------------- /static/images/dashboard-change-port-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/dashboard-change-port-1.png -------------------------------------------------------------------------------- /static/images/dashboard-change-port.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/dashboard-change-port.png -------------------------------------------------------------------------------- /static/images/envoy-downstream-upstream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/envoy-downstream-upstream.png -------------------------------------------------------------------------------- /static/images/fault-injection-503-kiali.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/fault-injection-503-kiali.png -------------------------------------------------------------------------------- /static/images/fault-injection-503-recommandation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/fault-injection-503-recommandation.png -------------------------------------------------------------------------------- /static/images/fault-injection-delay-recommandation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/fault-injection-delay-recommandation.png -------------------------------------------------------------------------------- /static/images/frontend-v0.12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/frontend-v0.12.png -------------------------------------------------------------------------------- /static/images/frontend-v0.13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/frontend-v0.13.png -------------------------------------------------------------------------------- /static/images/frontend-versions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/frontend-versions.png -------------------------------------------------------------------------------- /static/images/gcloud-authorize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcloud-authorize.png -------------------------------------------------------------------------------- /static/images/gcloud-dns-record-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcloud-dns-record-dashboard.png -------------------------------------------------------------------------------- /static/images/gcloud-project-id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcloud-project-id.png -------------------------------------------------------------------------------- /static/images/gcp-cloud-dns-create-record.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcp-cloud-dns-create-record.png -------------------------------------------------------------------------------- /static/images/gcp-cloud-dns-create-zone-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcp-cloud-dns-create-zone-1.png -------------------------------------------------------------------------------- /static/images/gcp-cloud-dns-create-zone-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcp-cloud-dns-create-zone-2.png -------------------------------------------------------------------------------- /static/images/gcp-cloud-dns-create-zone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcp-cloud-dns-create-zone.png -------------------------------------------------------------------------------- /static/images/gcp-cloud-dns-created-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcp-cloud-dns-created-1.png -------------------------------------------------------------------------------- /static/images/gcp-cloud-dns-created.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcp-cloud-dns-created.png -------------------------------------------------------------------------------- /static/images/gcp-cloud-dns-record-created.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcp-cloud-dns-record-created.png -------------------------------------------------------------------------------- /static/images/gcp-cloud-dns-record-updated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcp-cloud-dns-record-updated.png -------------------------------------------------------------------------------- /static/images/gcp-cloud-dns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcp-cloud-dns.png -------------------------------------------------------------------------------- /static/images/gcp-redis-instance-details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/gcp-redis-instance-details.png -------------------------------------------------------------------------------- /static/images/go-logo-aqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/go-logo-aqua.png -------------------------------------------------------------------------------- /static/images/go-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/go-logo.png -------------------------------------------------------------------------------- /static/images/google-consent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/google-consent.png -------------------------------------------------------------------------------- /static/images/googlecloud-projectdashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/googlecloud-projectdashboard.png -------------------------------------------------------------------------------- /static/images/googlecloud-projectselected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/googlecloud-projectselected.png -------------------------------------------------------------------------------- /static/images/googlecloud-selectproject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/googlecloud-selectproject.png -------------------------------------------------------------------------------- /static/images/googlecloud-shell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/googlecloud-shell.png -------------------------------------------------------------------------------- /static/images/googlecloud-shellboostmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/googlecloud-shellboostmode.png -------------------------------------------------------------------------------- /static/images/googlecloud-shellwindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/googlecloud-shellwindow.png -------------------------------------------------------------------------------- /static/images/googlecloud-startshell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/googlecloud-startshell.png -------------------------------------------------------------------------------- /static/images/googlecloud-terms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/googlecloud-terms.png -------------------------------------------------------------------------------- /static/images/googlecloud-trialaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/googlecloud-trialaccount.png -------------------------------------------------------------------------------- /static/images/grafana-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/grafana-dashboard.png -------------------------------------------------------------------------------- /static/images/grafana-istio-dashboards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/grafana-istio-dashboards.png -------------------------------------------------------------------------------- /static/images/grafana-mesh-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/grafana-mesh-dashboard.png -------------------------------------------------------------------------------- /static/images/grafana-service-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/grafana-service-dashboard.png -------------------------------------------------------------------------------- /static/images/helm-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/helm-logo.png -------------------------------------------------------------------------------- /static/images/hipster-app-ingress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/hipster-app-ingress.png -------------------------------------------------------------------------------- /static/images/hipster-app-permissive-mtls.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/hipster-app-permissive-mtls.gif -------------------------------------------------------------------------------- /static/images/hipster-app-permissive-mtls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/hipster-app-permissive-mtls.png -------------------------------------------------------------------------------- /static/images/hipster-application-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/hipster-application-architecture.png -------------------------------------------------------------------------------- /static/images/hipster-rbac-fails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/hipster-rbac-fails.png -------------------------------------------------------------------------------- /static/images/hipster-shop-demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/hipster-shop-demo.png -------------------------------------------------------------------------------- /static/images/incognito-window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/incognito-window.png -------------------------------------------------------------------------------- /static/images/istio-bluelogo-whitebackground-unframed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /static/images/istio-building-blocks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-building-blocks.png -------------------------------------------------------------------------------- /static/images/istio-circuit-breaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-circuit-breaker.png -------------------------------------------------------------------------------- /static/images/istio-components-interaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-components-interaction.png -------------------------------------------------------------------------------- /static/images/istio-default-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-default-dashboard.png -------------------------------------------------------------------------------- /static/images/istio-egress-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-egress-example.png -------------------------------------------------------------------------------- /static/images/istio-egress-pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-egress-pattern.png -------------------------------------------------------------------------------- /static/images/istio-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/images/istio-ingress-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-ingress-diagram.png -------------------------------------------------------------------------------- /static/images/istio-ingress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-ingress.png -------------------------------------------------------------------------------- /static/images/istio-logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/images/istio-mixer-adapters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-mixer-adapters.png -------------------------------------------------------------------------------- /static/images/istio-package-anatomy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-package-anatomy.png -------------------------------------------------------------------------------- /static/images/istio-performance-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-performance-dashboard.png -------------------------------------------------------------------------------- /static/images/istio-rbac-auth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-rbac-auth.png -------------------------------------------------------------------------------- /static/images/istio-retry-strategy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-retry-strategy.png -------------------------------------------------------------------------------- /static/images/istio-traffic-splitting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-traffic-splitting.png -------------------------------------------------------------------------------- /static/images/istio-upstream-downstream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-upstream-downstream.png -------------------------------------------------------------------------------- /static/images/istio-whitelogo-bluebackground-unframed: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /static/images/istio-whitelogo-bluebackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/istio-whitelogo-bluebackground.png -------------------------------------------------------------------------------- /static/images/istio-whitelogo-nobackground-unframed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /static/images/jaeger-dag-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/jaeger-dag-graph.png -------------------------------------------------------------------------------- /static/images/jaeger-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/jaeger-dashboard.png -------------------------------------------------------------------------------- /static/images/kiali-bug-version-label.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-bug-version-label.png -------------------------------------------------------------------------------- /static/images/kiali-dashbaord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-dashbaord.png -------------------------------------------------------------------------------- /static/images/kiali-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-login.png -------------------------------------------------------------------------------- /static/images/kiali-missing-secret.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-missing-secret.png -------------------------------------------------------------------------------- /static/images/kiali-missing-sidecar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-missing-sidecar.png -------------------------------------------------------------------------------- /static/images/kiali-service-graph.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-service-graph.gif -------------------------------------------------------------------------------- /static/images/kiali-service-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-service-graph.png -------------------------------------------------------------------------------- /static/images/kiali-service-metrics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-service-metrics.png -------------------------------------------------------------------------------- /static/images/kiali-service-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-service-overview.png -------------------------------------------------------------------------------- /static/images/kiali-traffic-splitting-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-traffic-splitting-1.png -------------------------------------------------------------------------------- /static/images/kiali-traffic-splitting-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-traffic-splitting-2.png -------------------------------------------------------------------------------- /static/images/kiali-traffic-splitting-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-traffic-splitting-3.png -------------------------------------------------------------------------------- /static/images/kiali-traffic-splitting-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/kiali-traffic-splitting-5.png -------------------------------------------------------------------------------- /static/images/locust-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/locust-logo.png -------------------------------------------------------------------------------- /static/images/microservices-building-blocks-istio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/microservices-building-blocks-istio.png -------------------------------------------------------------------------------- /static/images/microservices-building-blocks-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/microservices-building-blocks-map.png -------------------------------------------------------------------------------- /static/images/microservices-building-blocks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/microservices-building-blocks.png -------------------------------------------------------------------------------- /static/images/microservices-evolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/microservices-evolution.png -------------------------------------------------------------------------------- /static/images/microservices-iceberg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/microservices-iceberg.png -------------------------------------------------------------------------------- /static/images/prometheus-request-count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/prometheus-request-count.png -------------------------------------------------------------------------------- /static/images/promotheus-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/promotheus-dashboard.png -------------------------------------------------------------------------------- /static/images/python-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/python-logo.png -------------------------------------------------------------------------------- /static/images/rafik-linkedin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/rafik-linkedin.png -------------------------------------------------------------------------------- /static/images/rafik8-twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/rafik8-twitter.png -------------------------------------------------------------------------------- /static/images/redis-circuit-breaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/redis-circuit-breaker.png -------------------------------------------------------------------------------- /static/images/redis-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/redis-logo.png -------------------------------------------------------------------------------- /static/images/service-mesh-maturity-model-v0.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/service-mesh-maturity-model-v0.1.png -------------------------------------------------------------------------------- /static/images/servicemesh-highlevel-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/servicemesh-highlevel-architecture.png -------------------------------------------------------------------------------- /static/images/sidecar-oriented-pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/sidecar-oriented-pattern.png -------------------------------------------------------------------------------- /static/images/skaffold-on-gke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/static/images/skaffold-on-gke.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | indent_size = 2 9 | indent_style = space 10 | trim_trailing_whitespace = true 11 | 12 | [*.js] 13 | insert_final_newline = true 14 | 15 | [*.md] 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | public/ 3 | exampleSite/public 4 | releases/ 5 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/.grenrc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | dataSource: "prs" 3 | prefix: "v" 4 | onlyMilestones: false 5 | changelogFilename: "CHANGELOG.md" 6 | includeMessages: "all" 7 | ignoreIssuesWith: 8 | - "support" 9 | ignoreLabels: 10 | - "duplicate" 11 | - "invalid" 12 | - "wontfix" 13 | groupBy: 14 | New features: 15 | - "feature" 16 | Bug Fixes: 17 | - "bug" 18 | Enhancements: 19 | - "enhancement" 20 | Internationalisation: 21 | - "i18n" 22 | Theme Meta: 23 | - "meta" 24 | Uncategorised: 25 | - "closed" 26 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Grav 4 | Copyright (c) 2016 MATHIEU CORNIC 5 | Copyright (c) 2017 Valere JEANTET 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | this software and associated documentation files (the "Software"), to deal in 9 | the Software without restriction, including without limitation the rights to 10 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | the Software, and to permit persons to whom the Software is furnished to do so, 12 | subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/README.md: -------------------------------------------------------------------------------- 1 | # Hugo Learn Theme 2 | 3 | This repository contains a theme for [Hugo](https://gohugo.io/), based on great [Grav Learn Theme](https://learn.getgrav.org/). 4 | 5 | Visit the [theme documentation](https://learn.netlify.com/en/) to see what is going on. It is actually built with this theme. 6 | 7 | [![wercker status](https://app.wercker.com/status/233466a2be73fcea400e7dc02ef6adf9/s/master "wercker status")](https://app.wercker.com/project/byKey/233466a2be73fcea400e7dc02ef6adf9) 8 | [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmatcornic%2Fhugo-theme-learn.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fmatcornic%2Fhugo-theme-learn?ref=badge_shield) 9 | 10 | ## Main features 11 | 12 | - Automatic Search 13 | - Multilingual mode 14 | - Unlimited menu levels 15 | - Automatic next/prev buttons to navigate through menu entries 16 | - Image resizing, shadow… 17 | - Attachments files 18 | - List child pages 19 | - Mermaid diagram (flowchart, sequence, gantt) 20 | - Customizable look and feel and themes variants 21 | - Buttons, Tip/Note/Info/Warning boxes, Expand 22 | 23 | ## Installation 24 | 25 | Navigate to your themes folder in your Hugo site and use the following commands: 26 | 27 | ``` 28 | $ cd themes 29 | $ git clone https://github.com/matcornic/hugo-theme-learn.git 30 | ``` 31 | 32 | Check that your Hugo version is minimum `0.25` with `hugo version`. 33 | 34 | ![Overview](https://github.com/matcornic/hugo-theme-learn/raw/master/images/tn.png) 35 | 36 | ## Usage 37 | 38 | - [Visit the documentation](https://learn.netlify.com/en/) 39 | 40 | ## Download old versions (prior to 2.0.0) 41 | 42 | If you need old version for compatibility purpose, either download [theme source code from releases](https://github.com/matcornic/hugo-theme-learn/releases) or use the right git tag. For example, with `1.1.0` 43 | 44 | - Direct download way: https://github.com/matcornic/hugo-theme-learn/archive/1.1.0.zip 45 | - Git way: 46 | 47 | ```shell 48 | cd themes/hugo-theme-learn 49 | git checkout tags/1.1.0 50 | ``` 51 | 52 | For both solutions, the documentation is available at https://github.com/matcornic/hugo-theme-learn/releases/download/1.1.0/hugo-learn-doc-1.1.0.zip 53 | 54 | ## Credits 55 | 56 | Many thanks to [@vjeantet](https://github.com/vjeantet/) for the fork [docdock](https://github.com/vjeantet/hugo-theme-docdock). The v2 of this theme is mainly based on his work ! 57 | 58 | 59 | ## License 60 | [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmatcornic%2Fhugo-theme-learn.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fmatcornic%2Fhugo-theme-learn?ref=badge_large) 61 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/archetypes/chapter.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "{{ replace .Name "-" " " | title }}" 3 | date = {{ .Date }} 4 | weight = 5 5 | chapter = true 6 | pre = "X. " 7 | +++ 8 | 9 | ### Chapter X 10 | 11 | # Some Chapter title 12 | 13 | Lorem Ipsum. -------------------------------------------------------------------------------- /themes/hugo-theme-learn/archetypes/default.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "{{ replace .Name "-" " " | title }}" 3 | date = {{ .Date }} 4 | weight = 5 5 | +++ 6 | 7 | Lorem Ipsum. -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 MATHIEU CORNIC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/config.toml: -------------------------------------------------------------------------------- 1 | baseURL = "/" 2 | languageCode = "en-US" 3 | defaultContentLanguage = "en" 4 | 5 | title = "Hugo Learn Documentation" 6 | theme = "hugo-theme-learn" 7 | themesdir = "../.." 8 | metaDataFormat = "yaml" 9 | defaultContentLanguageInSubdir= true 10 | 11 | [params] 12 | editURL = "https://github.com/matcornic/hugo-theme-learn/edit/master/exampleSite/content/" 13 | description = "Documentation for Hugo Learn Theme" 14 | author = "Mathieu Cornic" 15 | showVisitedLinks = true 16 | disableBreadcrumb = false 17 | disableNextPrev = false 18 | 19 | [outputs] 20 | home = [ "HTML", "RSS", "JSON"] 21 | 22 | [Languages] 23 | [Languages.en] 24 | title = "Documentation for Hugo Learn Theme" 25 | weight = 1 26 | languageName = "English" 27 | 28 | [[Languages.en.menu.shortcuts]] 29 | name = " GitHub repo" 30 | identifier = "ds" 31 | url = "https://github.com/matcornic/hugo-theme-learn" 32 | weight = 10 33 | 34 | [[Languages.en.menu.shortcuts]] 35 | name = " Showcases" 36 | url = "showcase" 37 | weight = 11 38 | 39 | [[Languages.en.menu.shortcuts]] 40 | name = " Hugo Documentation" 41 | identifier = "hugodoc" 42 | url = "https://gohugo.io/" 43 | weight = 20 44 | 45 | [[Languages.en.menu.shortcuts]] 46 | name = " Credits" 47 | url = "/credits" 48 | weight = 30 49 | 50 | [Languages.fr] 51 | title = "Documentation du thème Hugo Learn" 52 | weight = 2 53 | languageName = "Français" 54 | 55 | [[Languages.fr.menu.shortcuts]] 56 | name = " Repo GitHub" 57 | identifier = "ds" 58 | url = "https://github.com/matcornic/hugo-theme-learn" 59 | weight = 10 60 | 61 | [[Languages.fr.menu.shortcuts]] 62 | name = " Vitrine" 63 | url = "/showcase" 64 | weight = 11 65 | 66 | [[Languages.fr.menu.shortcuts]] 67 | name = " Documentation Hugo" 68 | identifier = "hugodoc" 69 | url = "https://gohugo.io/" 70 | weight = 20 71 | 72 | [[Languages.fr.menu.shortcuts]] 73 | name = " Crédits" 74 | url = "/credits" 75 | weight = 30 76 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/_index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Learn Theme for Hugo" 3 | --- 4 | 5 | # Hugo learn theme 6 | 7 | [Hugo-theme-learn](http://github.com/matcornic/hugo-theme-learn) is a theme for [Hugo](https://gohugo.io/), a fast and modern static website engine written in Go. Where Hugo is often used for blogs, this multilingual-ready theme is **fully designed for documentation**. 8 | 9 | This theme is a partial porting of the [Learn theme](http://learn.getgrav.org/) of [Grav](https://getgrav.org/), a modern flat-file CMS written in PHP. 10 | 11 | {{% notice tip %}}Learn theme works with a _page tree structure_ to organize content : All contents are pages, which belong to other pages. [read more about this]({{%relref "cont/pages/_index.md"%}}) 12 | {{% /notice %}} 13 | 14 | ## Main features 15 | 16 | * [Automatic Search]({{%relref "basics/configuration/_index.md#activate-search" %}}) 17 | * [Multilingual mode]({{%relref "cont/i18n/_index.md" %}}) 18 | * **Unlimited menu levels** 19 | * **Automatic next/prev buttons to navigate through menu entries** 20 | * [Image resizing, shadow...]({{%relref "cont/markdown.en.md#images" %}}) 21 | * [Attachments files]({{%relref "shortcodes/attachments.en.md" %}}) 22 | * [List child pages]({{%relref "shortcodes/children/_index.md" %}}) 23 | * [Mermaid diagram]({{%relref "shortcodes/mermaid.en.md" %}}) (flowchart, sequence, gantt) 24 | * [Customizable look and feel and themes variants]({{%relref "basics/style-customization/_index.md"%}}) 25 | * [Buttons]({{%relref "shortcodes/button.en.md" %}}), [Tip/Note/Info/Warning boxes]({{%relref "shortcodes/notice.en.md" %}}), [Expand]({{%relref "shortcodes/expand.en.md" %}}) 26 | 27 | ![Screenshot](https://github.com/matcornic/hugo-theme-learn/raw/master/images/screenshot.png?width=40pc&classes=shadow) 28 | 29 | ## Contribute to this documentation 30 | Feel free to update this content, just click the **Edit this page** link displayed on top right of each page, and pullrequest it 31 | 32 | {{% notice info %}} 33 | Your modification will be deployed automatically when merged. 34 | {{% /notice %}} 35 | 36 | ## Documentation website 37 | This current documentation has been statically generated with Hugo with a simple command : `hugo -t hugo-theme-learn` -- source code is [available here at GitHub](https://github.com/matcornic/hugo-theme-learn) 38 | 39 | {{% notice note %}} 40 | Automatically published and hosted thanks to [Netlify](https://www.netlify.com/). Read more about [Automated HUGO deployments with Netlify](https://www.netlify.com/blog/2015/07/30/hosting-hugo-on-netlifyinsanely-fast-deploys/) 41 | {{% /notice %}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/_index.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Learn Theme for Hugo" 3 | --- 4 | 5 | # Thème Hugo learn 6 | 7 | [Hugo-theme-learn](http://github.com/matcornic/hugo-theme-learn) est un thème pour [Hugo](https://gohugo.io/), un générateur de site statique, rapide et modern, écrit en Go. Tandis que Hugo est souvent utilisé pour des blogs, ce thème multi-langue est **entièrement conçu pour la documentation**. 8 | 9 | Ce thème est un portage partiel du [thème Learn](http://learn.getgrav.org/) de [Grav](https://getgrav.org/), un CMS modern écrit en PHP. 10 | 11 | {{% notice tip %}}Le thème Learn fonctionne grâce à la structure de page aborescentes pour organiser le contenu: tous les contenus sont des pages qui appartiennent à d'autres pages. [Plus d'infos]({{%relref "cont/pages/_index.md"%}}) 12 | {{% /notice %}} 13 | 14 | ## Fonctionnalités principales 15 | 16 | * [Recherche automatique]({{%relref "basics/configuration/_index.md#activer-recherche" %}}) 17 | * [Mode multi-langue]({{%relref "cont/i18n/_index.md" %}}) 18 | * **Nombre de niveau infini dans le menu** 19 | * **Boutons suivant/précédent automatiquement générés pour naviguer entre les items du menu** 20 | * [Taille d'image, ombres...]({{%relref "cont/markdown.fr.md#images" %}}) 21 | * [Fichiers joints]({{%relref "shortcodes/attachments.fr.md" %}}) 22 | * [Lister les pages filles]({{%relref "shortcodes/children/_index.md" %}}) 23 | * [Diagrammes Mermaid]({{%relref "shortcodes/mermaid.fr.md" %}}) (flowchart, sequence, gantt) 24 | * [Style configurable and variantes de couleurs]({{%relref "basics/style-customization/_index.md"%}}) 25 | * [Boutons]({{%relref "shortcodes/button.fr.md" %}}), [Messages Astuce/Note/Info/Attention]({{%relref "shortcodes/notice.fr.md" %}}), [Expand]({{%relref "shortcodes/expand.fr.md" %}}) 26 | 27 | ![Screenshot](https://github.com/matcornic/hugo-theme-learn/raw/master/images/screenshot.png?width=40pc&classes=shadow) 28 | 29 | ## Contribuer à cette documentation 30 | 31 | N'hésitez pas à mettre à jour ce contenu en cliquant sur le lien **Modifier cette page** en haut de chaque page, et créer la Pull Request associée. 32 | 33 | {{% notice info %}} 34 | Votre modification sera déployée automatiquement quand elle sera mergée. 35 | {{% /notice %}} 36 | 37 | ## Site de documentation 38 | 39 | Cette documentation statique a été générée avec Hugo avec une simple commande : `hugo -t hugo-theme-learn` -- le code source est [disponible sur Github](https://github.com/matcornic/hugo-theme-learn) 40 | 41 | {{% notice note %}} 42 | Le site est auomatiquement publié et hébergé par [Netlify](https://www.netlify.com/). Plus d'infos sur le [déploiement de site Hugo avec Netlify](https://www.netlify.com/blog/2015/07/30/hosting-hugo-on-netlifyinsanely-fast-deploys/)(En anglais) 43 | {{% /notice %}} 44 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/_index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Basics 3 | weight: 5 4 | pre: "1. " 5 | chapter: true 6 | --- 7 | 8 | ### Chapter 1 9 | 10 | # Basics 11 | 12 | Discover what this Hugo theme is all about and the core-concepts behind it. 13 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/_index.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Démarrage 3 | weight: 5 4 | pre: "1. " 5 | chapter: true 6 | --- 7 | 8 | ### Chapitre 1 9 | 10 | # Démarrage 11 | 12 | Découvrez comment utiliser ce thème Hugo et apprenez-en les concepts 13 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/configuration/_index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2016-04-09T16:50:16+02:00 3 | title: Configuration 4 | weight: 20 5 | --- 6 | 7 | ## Global site parameters 8 | 9 | On top of [Hugo global configuration](https://gohugo.io/overview/configuration/), **Hugo-theme-learn** lets you define the following parameters in your `config.toml` (here, values are default). 10 | 11 | Note that some of these parameters are explained in details in other sections of this documentation. 12 | 13 | ```toml 14 | [params] 15 | # Prefix URL to edit current page. Will display an "Edit this page" button on top right hand corner of every page. 16 | # Useful to give opportunity to people to create merge request for your doc. 17 | # See the config.toml file from this documentation site to have an example. 18 | editURL = "" 19 | # Author of the site, will be used in meta information 20 | author = "" 21 | # Description of the site, will be used in meta information 22 | description = "" 23 | # Shows a checkmark for visited pages on the menu 24 | showVisitedLinks = false 25 | # Disable search function. It will hide search bar 26 | disableSearch = false 27 | # Javascript and CSS cache are automatically busted when new version of site is generated. 28 | # Set this to true to disable this behavior (some proxies don't handle well this optimization) 29 | disableAssetsBusting = false 30 | # Set this to true to disable copy-to-clipboard button for inline code. 31 | disableInlineCopyToClipBoard = false 32 | # A title for shortcuts in menu is set by default. Set this to true to disable it. 33 | disableShortcutsTitle = false 34 | # When using mulitlingual website, disable the switch language button. 35 | disableLanguageSwitchingButton = false 36 | # Hide breadcrumbs in the header and only show the current page title 37 | disableBreadcrumb = true 38 | # Hide Next and Previous page buttons normally displayed full height beside content 39 | disableNextPrev = true 40 | # Order sections in menu by "weight" or "title". Default to "weight" 41 | ordersectionsby = "weight" 42 | # Change default color scheme with a variant one. Can be "red", "blue", "green". 43 | themeVariant = "" 44 | ``` 45 | 46 | ## Activate search 47 | 48 | If not already present, add the follow lines in the same `config.toml` file. 49 | 50 | ```toml 51 | [outputs] 52 | home = [ "HTML", "RSS", "JSON"] 53 | ``` 54 | 55 | Learn theme uses the last improvement available in hugo version 20+ to generate a json index file ready to be consumed by lunr.js javascript search engine. 56 | 57 | > Hugo generate lunrjs index.json at the root of public folder. 58 | > When you build the site with `hugo server`, hugo generates it internally and of course it doesn’t show up in the filesystem 59 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/configuration/_index.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2016-04-09T16:50:16+02:00 3 | title: Configuration 4 | weight: 20 5 | --- 6 | 7 | ## Paramètres globaux du site 8 | 9 | En plus de la [configuration globale d'Hugo](https://gohugo.io/overview/configuration/), **Hugo-theme-learn** vous permet de définir les paramètres suivant dans votre fichier `config.toml` (ci-dessous sont affichées les valeurs par défaut). 10 | 11 | Notez que certains de ces paramètres sont expliqués en détails dans d'autres sections de cette documentation. 12 | 13 | ```toml 14 | [params] 15 | # L'URL préfixe pour éditer la page courante. Ce paramètre affichera un bouton "Modifier cette page" on haut de de chacune des pages. 16 | # Pratique pour donner les possibilité à vos utilisateurs de créer une merge request pour votre doc. 17 | # Allez voir le fichier config.toml de cette documentation pour avoir un exemple. 18 | editURL = "" 19 | # Autheur du site, est utilisé dans les informations meta 20 | author = "" 21 | # Description du site, est utilisé dans les informations meta 22 | description = "" 23 | # Affiche une icône lorsque la page a été visitée 24 | showVisitedLinks = false 25 | # Désactive la fonction de recherche. Une valeur à true cache la barre de recherche. 26 | disableSearch = false 27 | # Par défaut, le cache Javascript et CSS est automatiquement vidé lorsqu'une nouvelle version du site est générée. 28 | # Utilisez ce paramètre lorsque vous voulez désactiver ce comportement (c'est parfois incompatible avec certains proxys) 29 | disableAssetsBusting = false 30 | # Utilisez ce paramètre pour désactiver le bouton copy-to-clipboard pour le code formatté sur une ligne. 31 | disableInlineCopyToClipBoard = false 32 | # Un titre est défini par défaut lorsque vous utilisez un raccourci dans le menu. Utilisez ce paramètre pour le cacher. 33 | disableShortcutsTitle = false 34 | # Quand vous utilisez un site multi-langue, utilisez ce paramètre pour désactiver le bouton de changement de langue. 35 | disableLanguageSwitchingButton = false 36 | # Ordonne les sections dans menu par poids ("weight") ou titre ("title"). Défaut à "weight" 37 | ordersectionsby = "weight" 38 | # Utilisez ce paramètre pour modifier le schéma de couleur du site. Les valeurs par défaut sont "red", "blue", "green". 39 | themeVariant = "" 40 | ``` 41 | 42 | ## Activer la recherche {#activer-recherche} 43 | 44 | Si ce n'est pas déjà présent, ajoutez les lignes suivantes dans le fichier `config.toml`. 45 | 46 | ```toml 47 | [outputs] 48 | home = [ "HTML", "RSS", "JSON"] 49 | ``` 50 | 51 | Le thème *Learn* utilise les dernières amélioraions d'Hugo pour générer un fichier d'index JSON, prêt à être consommé par le moteur de recherche lunr.js. 52 | 53 | > Hugo génère lunrjs index.json à la racine du dossier `public`. 54 | > Quand vous générez le site avec `hugo server`, Hugo génère le fichier en mémoire, il n'est donc pas disponible sur le disque. -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/installation/images/chapter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/basics/installation/images/chapter.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/requirements/_index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Requirements 3 | weight: 10 4 | disableToc: true 5 | --- 6 | 7 | Thanks to the simplicity of Hugo, this page is as empty as this theme needs requirements. 8 | 9 | Just download latest version of [Hugo binary (> 0.25)](https://gohugo.io/getting-started/installing/) for your OS (Windows, Linux, Mac) : it's that simple. 10 | 11 | ![Magic](/en/basics/requirements/images/magic.gif?classes=shadow) 12 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/requirements/_index.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Prérequis 3 | weight: 10 4 | disableToc: true 5 | --- 6 | 7 | Grâce à la simplicité d'Hugo, cette page est vide car il n'y a quasi pas de prérequis pour utiliser le thème. 8 | 9 | Téléchargez la dernière version du [binaire Hugo (> 0.25)](https://gohugo.io/getting-started/installing/) pour votre Système d'exploitation (Windows, Linux, Mac) : et c'est tout ! 10 | 11 | ![Magic](/en/basics/requirements/images/magic.gif?classes=shadow) 12 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/requirements/images/magic.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/basics/requirements/images/magic.gif -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/blue-variant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/blue-variant.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/green-variant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/green-variant.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/red-variant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/red-variant.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/_index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Content 3 | weight: 10 4 | chapter: true 5 | pre: "2. " 6 | --- 7 | 8 | ### Chapter 2 9 | 10 | # Content 11 | 12 | Find out how to create and organize your content quickly and intuitively. 13 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/_index.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contenu 3 | weight: 10 4 | chapter: true 5 | pre: "2. " 6 | --- 7 | 8 | ### Chapitre 2 9 | 10 | # Contenu 11 | 12 | Découvrez comment créer et organiser votre contenu facilement et intuitivement. 13 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/archetypes.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Archetypes 3 | weight: 10 4 | --- 5 | 6 | Using the command: `hugo new [relative new content path]`, you can start a content file with the date and title automatically set. While this is a welcome feature, active writers need more : [archetypes](https://gohugo.io/content/archetypes/). 7 | 8 | It is pre-configured skeleton pages with default front matter. Please refer to the documentation for types of page to understand the differences. 9 | 10 | ## Chapter {#archetypes-chapter} 11 | 12 | To create a Chapter page, run the following commands 13 | 14 | ``` 15 | hugo new --kind chapter /_index.md 16 | ``` 17 | 18 | It will create a page with predefined Front-Matter: 19 | 20 | ```markdown 21 | +++ 22 | title = "{{ replace .Name "-" " " | title }}" 23 | date = {{ .Date }} 24 | weight = 5 25 | chapter = true 26 | pre = "X. " 27 | +++ 28 | 29 | ### Chapter X 30 | 31 | # Some Chapter title 32 | 33 | Lorem Ipsum. 34 | ``` 35 | 36 | ## Default 37 | 38 | To create a default page, run either one of the following commands 39 | 40 | ``` 41 | # Either 42 | hugo new //_index.md 43 | # Or 44 | hugo new /.md 45 | ``` 46 | 47 | It will create a page with predefined Front-Matter: 48 | 49 | ```markdown 50 | +++ 51 | title = "{{ replace .Name "-" " " | title }}" 52 | date = {{ .Date }} 53 | weight = 5 54 | +++ 55 | 56 | Lorem Ipsum. 57 | ``` -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/archetypes.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Archétypes 3 | weight: 10 4 | --- 5 | 6 | En utilisant la commande: `hugo new [chemin vers nouveau contenu]`, vous pouvez créer un nouveau fichier avec la date et le title automatiquement initialisé. Même si c'est une fonctionnalité intéressante, elle reste limitée pour les auteurs actifs qui ont besoin de mieux : les [archetypes](https://gohugo.io/content/archetypes/). 7 | 8 | Les archétypes sont des squelettes de pages préconfigurées avec un Front Matter par défaut. Merci de vous référer à la documentation pour connaitre les différents types de page. 9 | 10 | ## Chapitre {#archetypes-chapter} 11 | 12 | Pour créer un chapitre, lancez les commandes suivantes 13 | 14 | ``` 15 | hugo new --kind chapter /_index.md 16 | ``` 17 | 18 | Cela crééra une page avec le Front Matter suivant: 19 | 20 | ```markdown 21 | +++ 22 | title = "{{ replace .Name "-" " " | title }}" 23 | date = {{ .Date }} 24 | weight = 5 25 | chapter = true 26 | pre = "X. " 27 | +++ 28 | 29 | ### Chapter X 30 | 31 | # Some Chapter title 32 | 33 | Lorem Ipsum. 34 | ``` 35 | 36 | ## Défaut 37 | 38 | Pour créer une page classique, lancer l'une des deux commandes suivantes 39 | 40 | ``` 41 | # Soit 42 | hugo new //_index.md 43 | # Ou 44 | hugo new /.md 45 | ``` 46 | 47 | Cela crééra une page avec le Front Matter suivant: 48 | 49 | ```markdown 50 | +++ 51 | title = "{{ replace .Name "-" " " | title }}" 52 | date = {{ .Date }} 53 | weight = 5 54 | +++ 55 | 56 | Lorem Ipsum. 57 | ``` -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/i18n/_index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2016-04-09T16:50:16+02:00 3 | title: Multilingual and i18n 4 | weight: 30 5 | --- 6 | 7 | **Learn theme** is fully compatible with Hugo multilingual mode. 8 | 9 | It provides: 10 | 11 | - Translation strings for default values (English and French). Feel free to contribute ! 12 | - Automatic menu generation from multilingual content 13 | - In-browser language switching 14 | 15 | ![I18n menu](/en/cont/i18n/images/i18n-menu.gif) 16 | 17 | ## Basic configuration 18 | 19 | After learning [how Hugo handle multilingual websites](https://gohugo.io/content-management/multilingual), define your languages in your `config.toml` file. 20 | 21 | For example with current French and English website. 22 | 23 | ```toml 24 | # English is the default language 25 | defaultContentLanguage = "en" 26 | # Force to have /en/my-page and /fr/my-page routes, even for default language. 27 | defaultContentLanguageInSubdir= true 28 | 29 | [Languages] 30 | [Languages.en] 31 | title = "Documentation for Hugo Learn Theme" 32 | weight = 1 33 | languageName = "English" 34 | 35 | [Languages.fr] 36 | title = "Documentation du thème Hugo Learn" 37 | weight = 2 38 | languageName = "Français" 39 | ``` 40 | 41 | Then, for each new page, append the *id* of the language to the file. 42 | 43 | - Single file `my-page.md` is split in two files: 44 | - in English: `my-page.en.md` 45 | - in French: `my-page.fr.md` 46 | - Single file `_index.md` is split in two files: 47 | - in English: `_index.en.md` 48 | - in French: `_index.fr.md` 49 | 50 | {{% notice info %}} 51 | Be aware that only translated pages are displayed in menu. It's not replaced with default language content. 52 | {{% /notice %}} 53 | 54 | {{% notice tip %}} 55 | Use [slug](https://gohugo.io/content-management/multilingual/#translate-your-content) Front Matter parameter to translate urls too. 56 | {{% /notice %}} 57 | 58 | ## Overwrite translation strings 59 | 60 | Translations strings are used for common default values used in the theme (*Edit this page* button, *Search placeholder* and so on). Translations are available in french and english but you may use another language or want to override default values. 61 | 62 | To override these values, create a new file in your local i18n folder `i18n/.toml` and inspire yourself from the theme `themes/hugo-theme-learn/i18n/en.toml` 63 | 64 | By the way, as these translations could be used by other people, please take the time to propose a translation by [making a PR](https://github.com/matcornic/hugo-theme-learn/pulls) to the theme ! 65 | 66 | ## Disable language switching 67 | 68 | Switching the language in the browser is a great feature, but for some reasons you may want to disable it. 69 | 70 | Just set `disableLanguageSwitchingButton=true` in your `config.toml` 71 | 72 | ```toml 73 | [params] 74 | # When using mulitlingual website, disable the switch language button. 75 | disableLanguageSwitchingButton = true 76 | ``` 77 | 78 | ![I18n menu](/en/cont/i18n/images/i18n-menu.gif) -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/i18n/images/i18n-menu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/cont/i18n/images/i18n-menu.gif -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/icons.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Icons and logos 3 | weight: 27 4 | --- 5 | 6 | The Learn theme for Hugo loads the [**Font Awesome**](https://fontawesome.com) library, allowing you to easily display any icon or logo available in the Font Awesome free collection. 7 | 8 | ## Finding an icon 9 | 10 | Browse through the available icons in the [Font Awesome Gallery](https://fontawesome.com/icons?d=gallery&m=free). Notice that the **free** filter is enabled, as only the free icons are available by default. 11 | 12 | Once on the Font Awesome page for a specific icon, for example the page for the [heart](https://fontawesome.com/icons/heart?style=solid), copy the HTML reference and paste into the markdown content. 13 | 14 | The HTML to include the heart icon is: 15 | 16 | ``` 17 | 18 | ``` 19 | 20 | ## Including in markdown 21 | 22 | Paste the `` HTML into markup and Font Awesome will load the relevant icon. 23 | 24 | ``` 25 | Built with from Grav and Hugo 26 | ``` 27 | 28 | Which appears as 29 | 30 | Built with from Grav and Hugo 31 | 32 | ## Customising icons 33 | 34 | Font Awesome provides many ways to modify the icon 35 | 36 | * Change colour (by default the icon will inherit the parent colour) 37 | * Increase or decrease size 38 | * Rotate 39 | * Combine with other icons 40 | 41 | Check the full documentation on [web fonts with CSS](https://fontawesome.com/how-to-use/web-fonts-with-css) for more. 42 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/pages/images/frontmatter-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/cont/pages/images/frontmatter-icon.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/pages/images/pages-chapter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/cont/pages/images/pages-chapter.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/pages/images/pages-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/cont/pages/images/pages-default.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/tags.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2018-11-29T08:41:44+01:00 3 | title: Tags 4 | weight: 40 5 | tags: ["documentation", "tutorial"] 6 | --- 7 | 8 | *Learn theme* support one default taxonomy of gohugo: the *tag* feature. 9 | 10 | ## Configuration 11 | 12 | Just add tags to any page: 13 | 14 | ```markdown 15 | --- 16 | date: 2018-11-29T08:41:44+01:00 17 | title: Theme tutorial 18 | weight: 15 19 | tags: ["tutorial", "theme"] 20 | --- 21 | ``` 22 | 23 | ## Behavior 24 | 25 | 26 | The tags are displayed at the top of the page, in their insertion order. 27 | 28 | Each tag is a link to a *Taxonomy* page displaying all the articles with the given tag. 29 | 30 | ## List all the tags 31 | 32 | In the `config.toml` file you can add a shortcut to display all the tags 33 | 34 | ```toml 35 | [[menu.shortcuts]] 36 | name = " Tags" 37 | url = "/tags" 38 | weight = 30 39 | ``` -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/cont/tags.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2018-11-29T08:41:44+01:00 3 | title: Tags 4 | weight: 40 5 | tags: ["documentation", "tutorial"] 6 | --- 7 | 8 | 9 | Le *thème Learn* supporte une des taxonomy par défaut de GoHugo : les tags. 10 | 11 | ## Configuration 12 | 13 | Il suffit d'ajouter un tableau de tags sur la page : 14 | 15 | ```markdown 16 | --- 17 | date: 2018-11-29T08:41:44+01:00 18 | title: Tutoriel pour le thème 19 | weight: 15 20 | tags: ["tutoriel", "theme"] 21 | --- 22 | ``` 23 | 24 | ## Comportement 25 | 26 | Les tags sont affichés en haut de la page, dans l'ordre dans lequel ils ont été saisis. 27 | 28 | Chaque tag est un lien vers une page *Taxonomy*, qui affiche tous les article avec ce tag. 29 | 30 | 31 | ## Liste des tags 32 | 33 | Il est possible de rajouter un raccourci dans le fichier `config.toml` afin d'afficher une page listant tous les tags 34 | 35 | ```toml 36 | [[menu.shortcuts]] 37 | name = " Tags" 38 | url = "/tags" 39 | weight = 30 40 | ``` -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/credits.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Credits 3 | disableToc: true 4 | --- 5 | 6 | ## Contributors 7 | 8 | Thanks to them for making Open Source Software a better place ! 9 | 10 | {{% ghcontributors "https://api.github.com/repos/matcornic/hugo-theme-learn/contributors?per_page=100" %}} 11 | 12 | And a special thanks to [@vjeantet](https://github.com/vjeantet) for his work on [docdock](https://github.com/vjeantet/hugo-theme-docdock), a fork of hugo-theme-learn. v2.0.0 of this theme is inspired by his work. 13 | 14 | ## Packages and libraries 15 | * [mermaid](https://knsv.github.io/mermaid) - generation of diagram and flowchart from text in a similar manner as markdown 16 | * [font awesome](http://fontawesome.io/) - the iconic font and CSS framework 17 | * [jQuery](https://jquery.com) - The Write Less, Do More, JavaScript Library 18 | * [lunr](https://lunrjs.com) - Lunr enables you to provide a great search experience without the need for external, server-side, search services... 19 | * [horsey](https://bevacqua.github.io/horsey/) - Progressive and customizable autocomplete component 20 | * [clipboard.js](https://zenorocha.github.io/clipboard.js) - copy text to clipboard 21 | * [highlight.js](https://highlightjs.org) - Javascript syntax highlighter 22 | * [modernizr](https://modernizr.com) - A JavaScript toolkit that allows web developers to use new CSS3 and HTML5 features while maintaining a fine level of control over browsers that don't support 23 | 24 | ## Tooling 25 | 26 | * [Netlify](https://www.netlify.com) - Continuous deployement and hosting of this documentation 27 | * [Hugo](https://gohugo.io/) 28 | 29 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/credits.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Crédits 3 | disableToc: true 4 | --- 5 | 6 | ## Contributeurs 7 | 8 | Merci à eux de rendre le monde Open Source meilleur ! 9 | 10 | {{% ghcontributors "https://api.github.com/repos/matcornic/hugo-theme-learn/contributors?per_page=100" %}} 11 | 12 | Et un grand merci à [@vjeantet](https://github.com/vjeantet) pour son travail sur [docdock](https://github.com/vjeantet/hugo-theme-docdock), un fork de _hugo-theme-learn_. La v2.0.0 du thème est en grande partie inspirée de son travail. 13 | 14 | ## Packages et librairies 15 | * [mermaid](https://knsv.github.io/mermaid) - géneration de diagrames et graphiques à partir de texte similaire à Markdown 16 | * [font awesome](http://fontawesome.io/) - Le framework de polices iconiques 17 | * [jQuery](https://jquery.com) - La plus connue des librairies Javascript 18 | * [lunr](https://lunrjs.com) - Lunr fournit des fonctions de recherche sans service externe 19 | * [horsey](https://bevacqua.github.io/horsey/) - Autocomplétion de composants (utiliser pour les suggestions de recherche) 20 | * [clipboard.js](https://zenorocha.github.io/clipboard.js) - Copier le texte dans le presse-papier 21 | * [highlight.js](https://highlightjs.org) - Mise en valeur de syntaxes 22 | * [modernizr](https://modernizr.com) - Une boite à outil Javascript qui permet aux développeurs d'utiliser les dernières fonctionnalités de CSS et HTML5, même sur de vieux navigateurs. 23 | 24 | ## Outils 25 | 26 | * [Netlify](https://www.netlify.com) - Déploiement continue et hébergement de cette documentation 27 | * [Hugo](https://gohugo.io/) 28 | 29 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/_index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2016-04-09T16:50:16+02:00 3 | title: Shortcodes 4 | pre: "3. " 5 | weight: 15 6 | --- 7 | 8 | Hugo uses Markdown for its simple content format. However, there are a lot of things that Markdown doesn’t support well. You could use pure HTML to expand possibilities. 9 | 10 | But this happens to be a bad idea. Everyone uses Markdown because it's pure and simple to read even non-rendered. You should avoid HTML to keep it as simple as possible. 11 | 12 | To avoid this limitations, Hugo created [shortcodes](https://gohugo.io/extras/shortcodes/). A shortcode is a simple snippet inside a page. 13 | 14 | **Hugo-theme-learn** provides multiple shortcodes on top of existing ones. 15 | 16 | {{%children style="h2" description="true" %}} 17 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/_index.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2016-04-09T16:50:16+02:00 3 | title: Shortcodes 4 | pre: "3. " 5 | weight: 15 6 | --- 7 | 8 | Hugo utilise Markdown pour son format simple. Cependant, il y a beaucoup de chose que Markdown ne supporte pas bien. On pourrait utiliser du HTML pur pour améliorer les capacité du Markdown. 9 | 10 | Mais c'est probablement une mauvaise idée. Tout le monde utilise le Markdown parce que c'est pur et simple à lire même lorsqu'il est affiché en texte brut. Vous devez éviter le HTML autant que possible pour garder le contenu simple. 11 | 12 | Cependant, pour éviter les limitations, Hugo a créé les [shortcodes](https://gohugo.io/extras/shortcodes/). Un shortcode est un bout de code (*snippet*) dans une page. 13 | 14 | **Hugo-theme-learn** fournit de multiple shortcodes en plus de ceux existant. 15 | 16 | {{%children style="h2" description="true" %}} 17 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/BachGavotteShort.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/BachGavotteShort.mp3 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/Carroll_AliceAuPaysDesMerveilles.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/Carroll_AliceAuPaysDesMerveilles.pdf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/adivorciarsetoca00cape.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/adivorciarsetoca00cape.pdf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/hugo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/hugo.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/movieselectricsheep-flock-244-32500-2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/movieselectricsheep-flock-244-32500-2.mp4 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Attachments 3 | description : "The Attachments shortcode displays a list of files attached to a page." 4 | --- 5 | 6 | The Attachments shortcode displays a list of files attached to a page. 7 | 8 | {{% attachments /%}} 9 | 10 | ## Usage 11 | 12 | The shortcurt lists files found in a **specific folder**. 13 | Currently, it support two implementations for pages 14 | 15 | 1. If your page is a markdown file, attachements must be place in a **folder** named like your page and ending with **.files**. 16 | 17 | > * content 18 | > * _index.md 19 | > * page.files 20 | > * attachment.pdf 21 | > * page.md 22 | 23 | 2. If your page is a **folder**, attachements must be place in a nested **'files'** folder. 24 | 25 | > * content 26 | > * _index.md 27 | > * page 28 | > * index.md 29 | > * files 30 | > * attachment.pdf 31 | 32 | Be aware that if you use a multilingual website, you will need to have as many folders as languages. 33 | 34 | That's all ! 35 | 36 | ### Parameters 37 | 38 | | Parameter | Default | Description | 39 | |:--|:--|:--| 40 | | title | "Attachments" | List's title | 41 | | style | "" | Choose between "orange", "grey", "blue" and "green" for nice style | 42 | | pattern | ".*" | A regular expressions, used to filter the attachments by file name.

The **pattern** parameter value must be [regular expressions](https://en.wikipedia.org/wiki/Regular_expression). 43 | 44 | For example: 45 | 46 | * To match a file suffix of 'jpg', use **.*jpg** (not *.jpg). 47 | * To match file names ending in 'jpg' or 'png', use **.*(jpg|png)** 48 | 49 | ### Examples 50 | 51 | #### List of attachments ending in pdf or mp4 52 | 53 | 54 | {{%/*attachments title="Related files" pattern=".*(pdf|mp4)"/*/%}} 55 | 56 | renders as 57 | 58 | {{%attachments title="Related files" pattern=".*(pdf|mp4)"/%}} 59 | 60 | #### Colored styled box 61 | 62 | {{%/*attachments style="orange" /*/%}} 63 | 64 | renders as 65 | 66 | {{% attachments style="orange" /%}} 67 | 68 | 69 | {{%/*attachments style="grey" /*/%}} 70 | 71 | renders as 72 | 73 | {{% attachments style="grey" /%}} 74 | 75 | {{%/*attachments style="blue" /*/%}} 76 | 77 | renders as 78 | 79 | {{% attachments style="blue" /%}} 80 | 81 | {{%/*attachments style="green" /*/%}} 82 | 83 | renders as 84 | 85 | {{% attachments style="green" /%}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/BachGavotteShort.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/BachGavotteShort.mp3 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/Carroll_AliceAuPaysDesMerveilles.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/Carroll_AliceAuPaysDesMerveilles.pdf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/adivorciarsetoca00cape.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/adivorciarsetoca00cape.pdf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/hugo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/hugo.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/movieselectricsheep-flock-244-32500-2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/movieselectricsheep-flock-244-32500-2.mp4 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Attachments (Pièces jointes) 3 | description : "The Attachments shortcode displays a list of files attached to a page." 4 | --- 5 | 6 | Le shortcode *Attachments* affiche une liste de pièces jointes d'une page. 7 | 8 | {{% attachments /%}} 9 | 10 | ## Utilisation 11 | 12 | Le shortcode affiche la liste de fichiers trouvés dans un **dossier spécifique** 13 | A l'heure actuelle, il supporte deux implémentations 14 | 15 | 1. Si votre page est un fichier Markdown, les pièces jointes doivent être placée dans un **dossier** nommé comme le nom de la page et suffixé par **.files**. 16 | 17 | > * content 18 | > * _index.md 19 | > * page.files 20 | > * attachment.pdf 21 | > * page.md 22 | 23 | 2. Si votre page est un **dossier**, les pièces jointes doivent être placées dans un dossier fils **'files'**. 24 | 25 | > * content 26 | > * _index.md 27 | > * page 28 | > * index.md 29 | > * files 30 | > * attachment.pdf 31 | 32 | Attention, si votre site est multi-langue, vous devrez avec autant de dossier qu'il y a de langues. 33 | 34 | C'est tout ! 35 | 36 | ### Paramètres 37 | 38 | | Paramètre | Défaut | Description | 39 | |:--|:--|:--| 40 | | title | "Pièces jointes" | Titre de la liste | 41 | | style | "" | Choisir entre "orange", "grey", "blue" et "green" pour un style plus sympa | 42 | | pattern | ".*" | Une expression régulière, utilisée pour filtrer les pièces jointes par leur nom de fichier.

Le paramètre **pattern** doit être une [expression régulière](https://en.wikipedia.org/wiki/Regular_expression). 43 | 44 | Par exemple: 45 | 46 | * Pour trouver les fichiers avec le suffixe 'jpg', utilisez **.*jpg** (pas *.jpg). 47 | * Pour trouver les fichiers avec les suffixe 'jpg' ou 'png', utilisez **.*(jpg|png)** 48 | 49 | ### Exemples 50 | 51 | #### Lister les pièces jointes de type pdf ou mp4 52 | 53 | 54 | {{%/*attachments title="Fichiers associés" pattern=".*(pdf|mp4)"/*/%}} 55 | 56 | s'affiche comme 57 | 58 | {{%attachments title="Fichiers associés" pattern=".*(pdf|mp4)"/%}} 59 | 60 | #### Modifier le style 61 | 62 | {{%/*attachments style="orange" /*/%}} 63 | 64 | s'affiche comme 65 | 66 | {{% attachments style="orange" /%}} 67 | 68 | 69 | {{%/*attachments style="grey" /*/%}} 70 | 71 | s'affiche comme 72 | 73 | {{% attachments style="grey" /%}} 74 | 75 | {{%/*attachments style="blue" /*/%}} 76 | 77 | s'affiche comme 78 | 79 | {{% attachments style="blue" /%}} 80 | 81 | {{%/*attachments style="green" /*/%}} 82 | 83 | s'affiche comme 84 | 85 | {{% attachments style="green" /%}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/button.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Button 3 | description : "Nice buttons on your page." 4 | --- 5 | 6 | A button is a just a clickable button with optional icon. 7 | 8 | ``` 9 | {{%/* button href="https://getgrav.org/" */%}}Get Grav{{%/* /button */%}} 10 | {{%/* button href="https://getgrav.org/" icon="fas fa-download" */%}}Get Grav with icon{{%/* /button */%}} 11 | {{%/* button href="https://getgrav.org/" icon="fas fa-download" icon-position="right" */%}}Get Grav with icon right{{%/* /button */%}} 12 | ``` 13 | 14 | {{% button href="https://getgrav.org/" %}}Get Grav{{% /button %}} 15 | {{% button href="https://getgrav.org/" icon="fas fa-download" %}}Get Grav with icon{{% /button %}} 16 | {{% button href="https://getgrav.org/" icon="fas fa-download" icon-position="right" %}}Get Grav with icon right{{% /button %}} 17 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/button.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Button (Bouton) 3 | description : "De beaux boutons sur votre page." 4 | --- 5 | 6 | Le shortcode *button* est simplement un bouton cliquable avec une icône optionnelle. 7 | 8 | ``` 9 | {{%/* button href="https://getgrav.org/" */%}}Téléchargez Grav{{%/* /button */%}} 10 | {{%/* button href="https://getgrav.org/" icon="fas fa-download" */%}}Téléchargez Grav avec icône{{%/* /button */%}} 11 | {{%/* button href="https://getgrav.org/" icon="fas fa-download" icon-position="right" */%}}Téléchargez Grav avec icône à droite{{%/* /button */%}} 12 | ``` 13 | 14 | {{% button href="https://getgrav.org/" %}}Téléchargez Grav{{% /button %}} 15 | {{% button href="https://getgrav.org/" icon="fas fa-download" %}}Téléchargez Grav avec icône{{% /button %}} 16 | {{% button href="https://getgrav.org/" icon="fas fa-download" icon-position="right" %}}Téléchargez Grav avec icône à droite{{% /button %}} 17 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/_index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : Children 3 | description : List the child pages of a page 4 | --- 5 | 6 | Use the children shortcode to list the child pages of a page and the further descendants (children's children). By default, the shortcode displays links to the child pages. 7 | 8 | ## Usage 9 | 10 | | Parameter | Default | Description | 11 | |:--|:--|:--| 12 | | page | _current_ | Specify the page name (section name) to display children for | 13 | | style | "li" | Choose the style used to display descendants. It could be any HTML tag name | 14 | | showhidden | "false" | When true, child pages hidden from the menu will be displayed | 15 | | description | "false" | Allows you to include a short text under each page in the list.
when no description exists for the page, children shortcode takes the first 70 words of your content. [read more info about summaries on gohugo.io](https://gohugo.io/content/summaries/) | 16 | | depth | 1 | Enter a number to specify the depth of descendants to display. For example, if the value is 2, the shortcode will display 2 levels of child pages.
**Tips:** set 999 to get all descendants| 17 | | sort | none | Sort Children By
  • Weight - to sort on menu order
  • Name - to sort alphabetically on menu label
  • Identifier - to sort alphabetically on identifier set in frontmatter
  • URL - URL
  • | 18 | 19 | ## Demo 20 | 21 | {{%/* children */%}} 22 | 23 | {{% children %}} 24 | 25 | {{%/* children description="true" */%}} 26 | 27 | {{%children description="true" %}} 28 | 29 | {{%/* children depth="3" showhidden="true" */%}} 30 | 31 | {{% children depth="3" showhidden="true" %}} 32 | 33 | {{%/* children style="h2" depth="3" description="true" */%}} 34 | 35 | {{% children style="h2" depth="3" description="true" %}} 36 | 37 | {{%/* children style="div" depth="999" */%}} 38 | 39 | {{% children style="div" depth="999" %}} 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/_index.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : Children (Pages filles) 3 | description : Liste les pages filles de la page 4 | --- 5 | 6 | Utilisez le shortcode *children* pour lister les pages filles de la page et tous ses déscendants (pages filles de pages filles). Par défaut, le shortcode affiche des liens vers les pages filles. 7 | 8 | ## Utilisation 9 | 10 | | Paramètre | Défaut | Description | 11 | |:--|:--|:--| 12 | | page | _current_ | Spécifie le nom de la page (nom de la section) à afficher | 13 | | style | "li" | Choisi le style à utiliser pour afficher les descendants. Cela peut être n'importe quel balise HTML | 14 | | showhidden | "false" | Quand *true*, pages filles cachées dans le menu seront affichées quand même | 15 | | description | "false" | Permet d'inclure le texte de la description de la page sous chaque entré de la liste.
    quand aucune description existe pour la page, le shortcode prend les 70 premiers mots du contenu. [plus d'infos sur gohugo.io](https://gohugo.io/content/summaries/) | 16 | | depth | 1 | Nombre de descendants à afficher. Par exemple, si la valeur est 2, le shortcode va afficher 2 niveaux de pages filels.
    **Astuce:** Utilisez 999 pour avoir tous les descendants| 17 | | sort | | Tri les pages filles par
  • Weight - Poids
  • Name - Nom
  • Identifier - Trier alphabétiquement par identifiant configuré dans le front matter
  • URL - URL
  • | 18 | 19 | ## Démo 20 | 21 | {{%/* children */%}} 22 | 23 | {{% children %}} 24 | 25 | {{%/* children description="true" */%}} 26 | 27 | {{%children description="true" %}} 28 | 29 | {{%/* children depth="3" showhidden="true" */%}} 30 | 31 | {{% children depth="3" showhidden="true" %}} 32 | 33 | {{%/* children style="h2" depth="3" description="true" */%}} 34 | 35 | {{% children style="h2" depth="3" description="true" %}} 36 | 37 | {{%/* children style="div" depth="999" */%}} 38 | 39 | {{% children style="div" depth="999" %}} 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/_index.en.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 1" 3 | description = "This is a demo child page" 4 | +++ 5 | 6 | This is a demo child page -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/_index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 1" 3 | description = "Ceci est une page test" 4 | +++ 5 | 6 | Ceci est une page de demo -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/_index.en.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 1-1" 3 | description = "This is a demo child page" 4 | +++ 5 | 6 | This is a demo child page -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/_index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 1-1" 3 | description = "Ceci est une page test" 4 | +++ 5 | 6 | Ceci est une page de demo -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/_index.en.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 1-1-1" 3 | description = "This is a demo child page" 4 | +++ 5 | 6 | This is a demo child page -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/_index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 1-1-1" 3 | description = "Ceci est une page test" 4 | +++ 5 | 6 | Ceci est une page de demo -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/_index.en.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 1-1-1-1" 3 | description = "This is a demo child page" 4 | +++ 5 | 6 | This is a demo child page -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/_index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 1-1-1-1" 3 | description = "Ceci est une page test" 4 | +++ 5 | 6 | Ceci est une page de demo -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/children-1-1-1-1-1/_index.en.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 1-1-1-1-1" 3 | description = "This is a demo child page" 4 | +++ 5 | 6 | This is a demo child page -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/children-1-1-1-1-1/_index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 1-1-1-1-1" 3 | description = "Ceci est une page test" 4 | +++ 5 | 6 | Ceci est une page de demo -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/_index.en.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 2" 3 | description = "" 4 | +++ 5 | 6 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 7 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 8 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 9 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 10 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 11 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/_index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 2" 3 | description = "" 4 | +++ 5 | 6 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 7 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 8 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 9 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 10 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 11 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/test3.en.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page test 3" 3 | description = "This is a page test" 4 | +++ 5 | 6 | This is a test 3 demo child page -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/test3.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page test 3" 3 | description = "Ceci est une page test" 4 | +++ 5 | 6 | Ceci est une page de demo test 3 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-3/_index.en.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 3" 3 | description = "This is a demo child page" 4 | +++ 5 | 6 | This is a demo child page, not displayed in the menu -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-3/_index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 3" 3 | description = "Ceci est une page test" 4 | +++ 5 | 6 | Ceci est une page de demo -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-4/_index.en.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 4" 3 | description = "This is a demo child page" 4 | hidden = true 5 | +++ 6 | 7 | This is a demo child page, not displayed in the menu -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-4/_index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page 4" 3 | description = "Ceci est une page test" 4 | hidden = true 5 | +++ 6 | 7 | Ceci est une page de demo -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/test.en.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page test" 3 | description = "This is a page test" 4 | +++ 5 | 6 | This is a test demo child page -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/children/test.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "page test" 3 | description = "Ceci est une page test" 4 | +++ 5 | 6 | Ceci est une page de demo -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/expand.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : Expand 3 | description : "Displays an expandable/collapsible section of text on your page" 4 | --- 5 | 6 | The Expand shortcode displays an expandable/collapsible section of text on your page. 7 | Here is an example 8 | 9 | {{%expand%}} 10 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 11 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 12 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 13 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 14 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 15 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 16 | {{%/expand%}} 17 | 18 | 19 | ## Usage 20 | 21 | 22 | this shortcode takes exactly one optional parameter to define the text that appears next to the expand/collapse icon. (default is "Expand me...") 23 | 24 | {{%/*expand "Is this learn theme rocks ?" */%}}Yes !.{{%/* /expand*/%}} 25 | 26 | {{%expand "Is this learn theme rocks ?" %}}Yes !{{% /expand%}} 27 | 28 | # Demo 29 | 30 | {{%/*expand*/%}} 31 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 32 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 33 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 34 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 35 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 36 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 37 | {{%/* /expand*/%}} 38 | 39 | 40 | {{%expand%}}Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 41 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 42 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 43 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 44 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 45 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.{{% /expand%}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/expand.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : Expand 3 | description : "Affiche une section de texte qui se plie et se déplie" 4 | --- 5 | 6 | Le shortcode *Expand* affiche une section de texte qui se plie et se déplie. 7 | Ci-dessous un exemple. 8 | 9 | {{%expand%}} 10 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 11 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 12 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 13 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 14 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 15 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 16 | {{%/expand%}} 17 | 18 | 19 | ## Utilisation 20 | 21 | 22 | Ce shortcode prends exactement un paramètre optionel pour définir le texte à côté de l'icone. (valeur par défaut est "Déroulez-moi...") 23 | 24 | {{%/*expand "Est-ce que ce thème envoie du pâté ?" */%}}Oui !.{{%/* /expand*/%}} 25 | 26 | {{%expand "Est-ce que ce thème envoie du pâté ?" %}}Oui !{{% /expand%}} 27 | 28 | # Demo 29 | 30 | {{%/*expand*/%}} 31 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 32 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 33 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 34 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 35 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 36 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 37 | {{%/* /expand*/%}} 38 | 39 | 40 | {{%expand%}}Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 41 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 42 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 43 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 44 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 45 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.{{% /expand%}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/notice.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Notice 3 | description : "Disclaimers to help you structure your page" 4 | --- 5 | 6 | The notice shortcode shows 4 types of disclaimers to help you structure your page. 7 | 8 | ### Note 9 | 10 | ``` 11 | {{%/* notice note */%}} 12 | A notice disclaimer 13 | {{%/* /notice */%}} 14 | ``` 15 | 16 | renders as 17 | 18 | {{% notice note %}} 19 | A notice disclaimer 20 | {{% /notice %}} 21 | 22 | ### Info 23 | 24 | ``` 25 | {{%/* notice info */%}} 26 | An information disclaimer 27 | {{%/* /notice */%}} 28 | ``` 29 | 30 | renders as 31 | 32 | {{% notice info %}} 33 | An information disclaimer 34 | {{% /notice %}} 35 | 36 | ### Tip 37 | 38 | ``` 39 | {{%/* notice tip */%}} 40 | A tip disclaimer 41 | {{%/* /notice */%}} 42 | ``` 43 | 44 | renders as 45 | 46 | {{% notice tip %}} 47 | A tip disclaimer 48 | {{% /notice %}} 49 | 50 | ### Warning 51 | 52 | ``` 53 | {{%/* notice warning */%}} 54 | An warning disclaimer 55 | {{%/* /notice */%}} 56 | ``` 57 | 58 | renders as 59 | 60 | {{% notice warning %}} 61 | A warning disclaimer 62 | {{% /notice %}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/notice.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Notice 3 | description : "Message pour vous aider à structurer votre contenu" 4 | --- 5 | 6 | Le shortcode *Notice* permet d'afficher 4 types de message pour vous aider à structurer votre contenu. 7 | 8 | ### Note 9 | 10 | ``` 11 | {{%/* notice note */%}} 12 | Une notice de type *note* 13 | {{%/* /notice */%}} 14 | ``` 15 | 16 | s'affiche comme 17 | 18 | {{% notice note %}} 19 | Une notice de type *note* 20 | {{% /notice %}} 21 | 22 | ### Info 23 | 24 | ``` 25 | {{%/* notice info */%}} 26 | Une notice de type *info* 27 | {{%/* /notice */%}} 28 | ``` 29 | 30 | s'affiche comme 31 | 32 | {{% notice info %}} 33 | Une notice de type *info* 34 | {{% /notice %}} 35 | 36 | ### Tip 37 | 38 | ``` 39 | {{%/* notice tip */%}} 40 | Une notice de type *tip* 41 | {{%/* /notice */%}} 42 | ``` 43 | 44 | s'affiche comme 45 | 46 | {{% notice tip %}} 47 | Une notice de type *tip* 48 | {{% /notice %}} 49 | 50 | ### Warning 51 | 52 | ``` 53 | {{%/* notice warning */%}} 54 | Une notice de type *warning* 55 | {{%/* /notice */%}} 56 | ``` 57 | 58 | s'affiche comme 59 | 60 | {{% notice warning %}} 61 | Une notice de type *warning* 62 | {{% /notice %}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/siteparam.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Site param 3 | description : "Get value of site params variables in your page." 4 | --- 5 | 6 | `siteparam` shortcode is used to help you print values of site params. 7 | 8 | For instance, in this current site, the `editURL` variable is used in `config.toml` 9 | 10 | ```toml 11 | [params] 12 | editURL = "https://github.com/matcornic/hugo-theme-learn/edit/master/exampleSite/content/" 13 | ``` 14 | 15 | Use the `siteparam` shortcode to display its value. 16 | 17 | ``` 18 | `editURL` Value : {{%/* siteparam "editURL" */%}} 19 | ``` 20 | 21 | is displayed as 22 | 23 | `editURL` Value : {{% siteparam "editURL" %}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/shortcodes/siteparam.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Site param 3 | description : "Afficher la valeur d'un paramètre global du site dans votre page" 4 | --- 5 | 6 | Les shortcode `siteparam` est utilisé pour vous aider à afficher des valeurs provenant des paramètres globaux du site. 7 | 8 | Par exemple, dans ce site, le paramètre `editURL` est utilisé dans le fichier `config.toml` 9 | 10 | ```toml 11 | [params] 12 | editURL = "https://github.com/matcornic/hugo-theme-learn/edit/master/exampleSite/content/" 13 | ``` 14 | 15 | Utilisez le shortcode `siteparam` pour affichier sa valeur. 16 | 17 | ``` 18 | Valeur de `editURL` : {{%/* siteparam "editURL" */%}} 19 | ``` 20 | 21 | s'affiche comme 22 | 23 | Valeur de `editURL` : {{% siteparam "editURL" %}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/showcase.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Showcase 3 | disableToc: true 4 | --- 5 | 6 | #### [TAT](https://ovh.github.io/tat/overview/) by OVH 7 | ![TAT image](/images/showcase/tat.png?width=50pc) 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/content/showcase.fr.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Vitrine 3 | disableToc: true 4 | slug: vitrine 5 | --- 6 | 7 | #### [TAT](https://ovh.github.io/tat/overview/) par OVH 8 | ![TAT image](/images/showcase/tat.png?width=50pc) 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/layouts/partials/custom-footer.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/layouts/partials/menu-footer.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 | Download 4 | 5 | 6 | Star 7 | 8 | 9 | Fork 10 | 11 |

    Built with from Grav and Hugo

    12 |
    13 | 14 | 15 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/layouts/shortcodes/ghcontributors.html: -------------------------------------------------------------------------------- 1 | 22 |
    23 | {{ $url := .Get 0 }} 24 | {{ range getJSON $url }} 25 |
    26 | 27 | 28 | {{.contributions}} commits 29 |
    30 | {{ end }} 31 |
    -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.eot -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.ttf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.woff -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.woff2 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/exampleSite/static/images/showcase/tat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/exampleSite/static/images/showcase/tat.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/i18n/ar.toml: -------------------------------------------------------------------------------- 1 | [Search-placeholder] 2 | other = "...البحث" 3 | 4 | [Clear-History] 5 | other = "مسح السجل" 6 | 7 | [Attachments-label] 8 | other = "مرفقات" 9 | 10 | [title-404] 11 | other = "خطأ" 12 | 13 | [message-404] 14 | other = ".¯\\_(ツ)_/¯أوبس. يبدو أن هذه الصفحة غير موجودة" 15 | 16 | [Go-to-homepage] 17 | other = "الذهاب إلى الصفحة الرئيسية" 18 | 19 | [Edit-this-page] 20 | other = "تعديل هذه الصفحة" 21 | 22 | [Shortcuts-Title] 23 | other = "المزيد" 24 | 25 | [Expand-title] 26 | other = "...قم بتوسيع" -------------------------------------------------------------------------------- /themes/hugo-theme-learn/i18n/de.toml: -------------------------------------------------------------------------------- 1 | [Search-placeholder] 2 | other = "Suchen..." 3 | 4 | [Clear-History] 5 | other = "Verlauf löschen" 6 | 7 | [Attachments-label] 8 | other = "Anhänge" 9 | 10 | [title-404] 11 | other = "Fehler" 12 | 13 | [message-404] 14 | other = "Huch. Diese Seite scheint nicht zu existieren ¯\\_(ツ)_/¯." 15 | 16 | [Go-to-homepage] 17 | other = "Gehe zur Homepage" 18 | 19 | [Edit-this-page] 20 | other = "Bearbeite diese Seite" 21 | 22 | [Shortcuts-Title] 23 | other = "Mehr" 24 | 25 | [Expand-title] 26 | other = "Erweitere mich..." -------------------------------------------------------------------------------- /themes/hugo-theme-learn/i18n/en.toml: -------------------------------------------------------------------------------- 1 | [Search-placeholder] 2 | other = "Search..." 3 | 4 | [Clear-History] 5 | other = "Clear History" 6 | 7 | [Attachments-label] 8 | other = "Attachments" 9 | 10 | [title-404] 11 | other = "Error" 12 | 13 | [message-404] 14 | other = "Woops. Looks like this page doesn't exist ¯\\_(ツ)_/¯." 15 | 16 | [Go-to-homepage] 17 | other = "Go to homepage" 18 | 19 | [Edit-this-page] 20 | other = "Edit this page" 21 | 22 | [Shortcuts-Title] 23 | other = "More" 24 | 25 | [Expand-title] 26 | other = "Expand me..." -------------------------------------------------------------------------------- /themes/hugo-theme-learn/i18n/es.toml: -------------------------------------------------------------------------------- 1 | [Search-placeholder] 2 | other = "Buscar..." 3 | 4 | [Clear-History] 5 | other = "Borrar Historial" 6 | 7 | [Attachments-label] 8 | other = "Adjuntos" 9 | 10 | [title-404] 11 | other = "Error" 12 | 13 | [message-404] 14 | other = "Ups. Parece que la página no existe ¯\\_(ツ)_/¯." 15 | 16 | [Go-to-homepage] 17 | other = "Ir al inicio" 18 | 19 | [Edit-this-page] 20 | other = "Editar esta página" 21 | 22 | [Shortcuts-Title] 23 | other = "Más" 24 | 25 | [Expand-title] 26 | other = "Expandir..." 27 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/i18n/fr.toml: -------------------------------------------------------------------------------- 1 | [Search-placeholder] 2 | other = "Rechercher..." 3 | 4 | [Clear-History] 5 | other = "Supprimer l'historique" 6 | 7 | [Attachments-label] 8 | other = "Pièces jointes" 9 | 10 | [title-404] 11 | other = "Erreur" 12 | 13 | [message-404] 14 | other = "Oups. On dirait que cette page n'existe pas ¯\\_(ツ)_/¯" 15 | 16 | [Go-to-homepage] 17 | other = "Vers la page d'accueil" 18 | 19 | [Edit-this-page] 20 | other = "Modifier la page" 21 | 22 | [Shortcuts-Title] 23 | other = "Aller plus loin" 24 | 25 | [Expand-title] 26 | other = "Déroulez-moi..." -------------------------------------------------------------------------------- /themes/hugo-theme-learn/i18n/hi.toml: -------------------------------------------------------------------------------- 1 | [Search-placeholder] 2 | other = "खोजे..." 3 | 4 | [Clear-History] 5 | other = "इतिहास मिटाएँ" 6 | 7 | [Attachments-label] 8 | other = "संलग्नंक (अटैचमेंट)" 9 | 10 | [title-404] 11 | other = "त्रुटि" 12 | 13 | [message-404] 14 | other = "यह पृष्ठ अभि अनुपलब्ध है!" 15 | 16 | [Go-to-homepage] 17 | other = "मुख्य पृष्ठ पर जाऐ" 18 | 19 | [Edit-this-page] 20 | other = "यह पृष्ठ संपादित करें" 21 | 22 | [Shortcuts-Title] 23 | other = "अधिक सामग्री दिखाएं" 24 | 25 | [Expand-title] 26 | other = "विस्तार करे..." 27 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/i18n/id.toml: -------------------------------------------------------------------------------- 1 | [Search-placeholder] 2 | other = "Telusuri..." 3 | 4 | [Clear-History] 5 | other = "Bersihkan Riwayat" 6 | 7 | [Attachments-label] 8 | other = "Lampiran" 9 | 10 | [title-404] 11 | other = "Kesalahan" 12 | 13 | [message-404] 14 | other = "Oops. Sepertinya halaman ini tidak ada ¯\\_(ツ)_/¯." 15 | 16 | [Go-to-homepage] 17 | other = "Ke halaman depan" 18 | 19 | [Edit-this-page] 20 | other = "Edit halaman ini" 21 | 22 | [Shortcuts-Title] 23 | other = "Lainnya" 24 | 25 | [Expand-title] 26 | other = "Bentangkan..." 27 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/i18n/nl.toml: -------------------------------------------------------------------------------- 1 | [Search-placeholder] 2 | other = "Zoeken..." 3 | 4 | [Clear-History] 5 | other = "Wis geschiedenis" 6 | 7 | [Attachments-label] 8 | other = "Bijlagen" 9 | 10 | [title-404] 11 | other = "Error" 12 | 13 | [message-404] 14 | other = "Blijkbaar bestaat deze pagina niet ¯\\_(ツ)_/¯." 15 | 16 | [Go-to-homepage] 17 | other = "Naar startpagina" 18 | 19 | [Edit-this-page] 20 | other = "Deze pagina bewerken" 21 | 22 | [Shortcuts-Title] 23 | other = "Snelkoppelingen" 24 | 25 | [Expand-title] 26 | other = "Lees meer..." 27 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/i18n/pt.toml: -------------------------------------------------------------------------------- 1 | [Search-placeholder] 2 | other = "Procurar..." 3 | 4 | [Clear-History] 5 | other = "Limpar Histórico" 6 | 7 | [Attachments-label] 8 | other = "Anexos" 9 | 10 | [title-404] 11 | other = "Erro" 12 | 13 | [message-404] 14 | other = "Ops. Parece que a página não existe ¯\\_(ツ)_/¯." 15 | 16 | [Go-to-homepage] 17 | other = "Ir para o início" 18 | 19 | [Edit-this-page] 20 | other = "Editar esta página" 21 | 22 | [Shortcuts-Title] 23 | other = "Mais" 24 | 25 | [Expand-title] 26 | other = "Expandir..." 27 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/i18n/tr.toml: -------------------------------------------------------------------------------- 1 | [Search-placeholder] 2 | other = "Ara..." 3 | 4 | [Clear-History] 5 | other = "Geçmişi Temizle" 6 | 7 | [Attachments-label] 8 | other = "Ekler" 9 | 10 | [title-404] 11 | other = "Hata" 12 | 13 | [message-404] 14 | other = "Uups. Görünüşe göre böyle bir sayfa yok ¯\\_(ツ)_/¯" 15 | 16 | [Go-to-homepage] 17 | other = "Anasayfaya dön" 18 | 19 | [Edit-this-page] 20 | other = "Sayfayı düzenle" 21 | 22 | [Shortcuts-Title] 23 | other = "Dahası Var" 24 | 25 | [Expand-title] 26 | other = "Genişlet..." 27 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/images/screenshot.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/images/tn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/images/tn.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ partial "meta.html" . }} {{ partial "favicon.html" . }} {{ .Scratch.Add "title" "" }}{{ if eq .Site.Data.titles .Title }}{{ .Scratch.Set "title" (index .Site.Data.titles .Title).title }}{{ else }}{{ .Scratch.Set "title" .Title}}{{end}} 6 | {{ .Scratch.Get "title" }} 7 | 8 | {{ $assetBusting := not .Site.Params.disableAssetsBusting }} 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {{with .Site.Params.themeVariant}} 17 | 18 | {{end}} 19 | 34 | {{ partial "custom-header.html" . }} 35 | 36 | 37 | 38 | 39 |
    40 |
    41 |
    42 |
    43 |

    {{T "title-404"}}

    44 |

    45 |

    46 |

    {{T "message-404"}}

    47 |

    48 |

    {{T "Go-to-homepage"}}

    49 |

    Page not found!

    50 |
    51 |
    52 | 53 |
    54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/_default/list.html: -------------------------------------------------------------------------------- 1 | {{ partial "header.html" . }} 2 | 3 | {{ if eq .Kind "section" }} 4 | {{ .Content }} 5 | {{end}} 6 | 7 | {{ if or (eq .Kind "taxonomy") (eq .Kind "taxonomyTerm") }} 8 |
      9 | {{ range .Pages }} 10 |
    • {{.Title}}
    • 11 | {{ end }} 12 |
    13 | {{end}} 14 | 15 |
    16 | {{with .Params.LastModifierDisplayName}} 17 | {{ . }} {{with $.Date}} {{ .Format "02/01/2006" }}{{end}} 18 | 19 | {{end}} 20 |
    21 | 22 | {{ partial "footer.html" . }} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/_default/single.html: -------------------------------------------------------------------------------- 1 | {{ partial "header.html" . }} 2 | 3 | {{ .Content }} 4 | 5 |
    6 | {{with .Params.LastModifierDisplayName}} 7 | {{ . }} {{with $.Date}} {{ .Format "02/01/2006" }}{{end}} 8 | 9 | {{end}} 10 |
    11 | 12 | 13 | {{ partial "footer.html" . }} 14 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/index.html: -------------------------------------------------------------------------------- 1 | {{ partial "header.html" . }} 2 | 3 | navigation 4 | 5 | 6 | {{if .Site.Home.Content }} 7 | {{.Site.Home.Content}} 8 | {{else}} 9 | {{if eq .Site.Language.Lang "fr"}} 10 |

    Personaliser la page d'accueil

    11 |

    12 | Le site fonctionne. Ne pas oublier de personaliser cette page avec votre propre contenu. 3 manières de faire : 13 |

    14 |
      15 |
    • 1. Créer un fichier _index.md dans le dossier content et le remplir de Markdown
    • 16 |
    • 2. Créer un fichier index.html dans le dossier static et le remplir de code HTML
    • 17 |
    • 3. Configurer le serveur http pour rediriger automatiquement la homepage vers la page de votre choix dans le site
    • 18 |
    19 | {{else}} 20 |

    Customize your own home page

    21 |

    22 | The site is working. Don't forget to customize this homepage with your own. You typically have 3 choices : 23 |

    24 |
      25 |
    • 1. Create an _index.md document in content folder and fill it with Markdown content
    • 26 |
    • 2. Create an index.html file in the static folder and fill the file with HTML content
    • 27 |
    • 3. Configure your server to automatically redirect home page to one your documentation page
    • 28 |
    29 | {{end}} 30 | {{ end }} 31 | {{ partial "footer.html" . }} 32 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/index.json: -------------------------------------------------------------------------------- 1 | [{{ range $index, $page := .Site.Pages }} 2 | {{- if ne $page.Type "json" -}} 3 | {{- if and $index (gt $index 0) -}},{{- end }} 4 | { 5 | "uri": "{{ $page.Permalink }}", 6 | "title": "{{ htmlEscape $page.Title}}", 7 | "tags": [{{ range $tindex, $tag := $page.Params.tags }}{{ if $tindex }}, {{ end }}"{{ $tag| htmlEscape }}"{{ end }}], 8 | "description": "{{ htmlEscape .Description}}", 9 | "content": {{$page.Plain | jsonify}} 10 | } 11 | {{- end -}} 12 | {{- end -}}] -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/partials/custom-comments.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/partials/custom-footer.html: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/partials/custom-header.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/partials/favicon.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/partials/menu-footer.html: -------------------------------------------------------------------------------- 1 |

    Built with from Grav and Hugo

    2 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/partials/meta.html: -------------------------------------------------------------------------------- 1 | 2 | {{ with .Site.Params.author }}{{ end }} 3 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/partials/search.html: -------------------------------------------------------------------------------- 1 | 6 | {{ $assetBusting := not .Site.Params.disableAssetsBusting }} 7 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/partials/tags.html: -------------------------------------------------------------------------------- 1 | {{ if .Params.tags }} 2 |
    3 | {{range .Params.tags}} 4 | {{ . }} 5 | {{end}} 6 |
    7 | {{end}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/partials/toc.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | {{ .TableOfContents }} 4 |
    5 |
    6 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/shortcodes/attachments.html: -------------------------------------------------------------------------------- 1 | {{ $_hugo_config := `{ "version": 1 }` }} 2 |
    3 | 7 | {{if eq .Page.File.BaseFileName "index"}} 8 | {{$.Scratch.Add "filesName" "files"}} 9 | {{else}} 10 | {{$.Scratch.Add "filesName" (printf "%s.files" .Page.File.BaseFileName)}} 11 | {{end}} 12 |
    13 | {{ range (readDir (printf "./content/%s%s" .Page.File.Dir ($.Scratch.Get "filesName")) ) }} 14 | {{ $fileDir := replace $.Page.File.Dir "\\" "/" }} 15 | {{if ($.Get "pattern")}} 16 | {{if (findRE ($.Get "pattern") .Name)}} 17 |
  • 18 | 19 | {{.Name}} 20 | 21 | ({{div .Size 1024 }} ko) 22 |
  • 23 | {{end}} 24 | {{else}} 25 |
  • 26 | 27 | {{.Name}} 28 | 29 | ({{div .Size 1024 }} ko) 30 |
  • 31 | {{end}} 32 | {{end}} 33 |
    34 | {{.Inner}} 35 |
    36 | 37 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/shortcodes/button.html: -------------------------------------------------------------------------------- 1 | {{ $_hugo_config := `{ "version": 1 }` }} 2 | 3 | {{ $icon := .Get "icon" }} 4 | {{ $iconposition := .Get "icon-position" }} 5 | {{ if ($icon) }} 6 | {{ if or (not ($iconposition)) (eq $iconposition "left") }} 7 | 8 | {{ end }} 9 | {{ end }} 10 | {{ .Inner }} 11 | {{ if and ($icon) (eq $iconposition "right")}} 12 | 13 | {{ end }} 14 | 15 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/shortcodes/expand.html: -------------------------------------------------------------------------------- 1 | {{ $_hugo_config := `{ "version": 1 }` }} 2 |
    3 |
    4 | 5 | 6 | {{$expandMessage := T "Expand-title"}} 7 | {{ if .IsNamedParams }} 8 | {{.Get "default" | default $expandMessage}} 9 | {{else}} 10 | {{.Get 0 | default $expandMessage}} 11 | {{end}} 12 | 13 |
    14 | 17 |
    -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/shortcodes/mermaid.html: -------------------------------------------------------------------------------- 1 | {{ $_hugo_config := `{ "version": 1 }` }} 2 |
    {{ safeHTML .Inner }}
    3 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/shortcodes/notice.html: -------------------------------------------------------------------------------- 1 | {{ $_hugo_config := `{ "version": 1 }` }} 2 |
    {{ .Inner }}
    3 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/shortcodes/ref.html: -------------------------------------------------------------------------------- 1 | {{- if in (.Get 0) "/_index.md" -}} 2 | {{- $paths := (split (.Get 0) "_index.md") -}} 3 | {{- $pagepath := index $paths 0 -}} 4 | {{- $anchor := index $paths 1 -}} 5 | {{- with .Site.GetPage "section" (trim $pagepath "/") -}} 6 | {{- ( printf "%s%s" $pagepath $anchor ) | relLangURL -}} 7 | {{- end -}} 8 | {{- else -}} 9 | {{- with .Site.GetPage "section" (.Get 0) }} 10 | {{- .RelPermalink -}} 11 | {{- else -}} 12 | {{- .Get 0 | relref .Page -}} 13 | {{- end -}} 14 | {{- end -}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/shortcodes/relref.html: -------------------------------------------------------------------------------- 1 | {{- if in (.Get 0) "/_index.md" -}} 2 | {{- $paths := (split (.Get 0) "_index.md") -}} 3 | {{- $pagepath := index $paths 0 -}} 4 | {{- $anchor := index $paths 1 -}} 5 | {{- with .Site.GetPage "section" (trim $pagepath "/") -}} 6 | {{- ( printf "%s%s" $pagepath $anchor ) | relLangURL -}} 7 | {{- end -}} 8 | {{- else -}} 9 | {{- with .Site.GetPage "section" (.Get 0) }} 10 | {{- .RelPermalink -}} 11 | {{- else -}} 12 | {{- .Get 0 | relref .Page -}} 13 | {{- end -}} 14 | {{- end -}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/layouts/shortcodes/siteparam.html: -------------------------------------------------------------------------------- 1 | {{- $paramName := (.Get 0) -}} 2 | {{- $siteParams := .Site.Params -}} 3 | {{- with $paramName -}} 4 | {{- with $siteParams -}} 5 | {{- index . (lower $paramName) -}} 6 | {{- end -}} 7 | {{- end -}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "exampleSite/public" 3 | command = "hugo -s exampleSite" 4 | 5 | [build.environment] 6 | HUGO_THEME = "repo" 7 | HUGO_THEMESDIR = "/opt/build" 8 | HUGO_VERSION = "0.55.5" 9 | 10 | [context.production.environment] 11 | HUGO_BASEURL = "https://learn.netlify.com/" 12 | 13 | [context.deploy-preview] 14 | command = "hugo -s exampleSite -b $DEPLOY_PRIME_URL" 15 | 16 | [context.deploy-preview.environment] 17 | HUGO_ENABLEGITINFO = "true" 18 | 19 | [context.branch-deplpy] 20 | command = "hugo -s exampleSite -b $DEPLOY_PRIME_URL" 21 | 22 | [context.branch-deploy.environment] 23 | HUGO_ENABLEGITINFO = "true" 24 | 25 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/css/atom-one-dark-reasonable.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Atom One Dark With support for ReasonML by Gidi Morris, based off work by Daniel Gamage 4 | 5 | Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax 6 | 7 | */ 8 | .hljs { 9 | display: block; 10 | overflow-x: auto; 11 | padding: 0.5em; 12 | line-height: 1.3em; 13 | color: #abb2bf; 14 | background: #282c34; 15 | border-radius: 5px; 16 | } 17 | .hljs-keyword, .hljs-operator { 18 | color: #F92672; 19 | } 20 | .hljs-pattern-match { 21 | color: #F92672; 22 | } 23 | .hljs-pattern-match .hljs-constructor { 24 | color: #61aeee; 25 | } 26 | .hljs-function { 27 | color: #61aeee; 28 | } 29 | .hljs-function .hljs-params { 30 | color: #A6E22E; 31 | } 32 | .hljs-function .hljs-params .hljs-typing { 33 | color: #FD971F; 34 | } 35 | .hljs-module-access .hljs-module { 36 | color: #7e57c2; 37 | } 38 | .hljs-constructor { 39 | color: #e2b93d; 40 | } 41 | .hljs-constructor .hljs-string { 42 | color: #9CCC65; 43 | } 44 | .hljs-comment, .hljs-quote { 45 | color: #b18eb1; 46 | font-style: italic; 47 | } 48 | .hljs-doctag, .hljs-formula { 49 | color: #c678dd; 50 | } 51 | .hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst { 52 | color: #e06c75; 53 | } 54 | .hljs-literal { 55 | color: #56b6c2; 56 | } 57 | .hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string { 58 | color: #98c379; 59 | } 60 | .hljs-built_in, .hljs-class .hljs-title { 61 | color: #e6c07b; 62 | } 63 | .hljs-attr, .hljs-variable, .hljs-template-variable, .hljs-type, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-number { 64 | color: #d19a66; 65 | } 66 | .hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title { 67 | color: #61aeee; 68 | } 69 | .hljs-emphasis { 70 | font-style: italic; 71 | } 72 | .hljs-strong { 73 | font-weight: bold; 74 | } 75 | .hljs-link { 76 | text-decoration: underline; 77 | } 78 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/css/auto-complete.css: -------------------------------------------------------------------------------- 1 | .autocomplete-suggestions { 2 | text-align: left; 3 | cursor: default; 4 | border: 1px solid #ccc; 5 | border-top: 0; 6 | background: #fff; 7 | box-shadow: -1px 1px 3px rgba(0,0,0,.1); 8 | 9 | /* core styles should not be changed */ 10 | position: absolute; 11 | display: none; 12 | z-index: 9999; 13 | max-height: 254px; 14 | overflow: hidden; 15 | overflow-y: auto; 16 | box-sizing: border-box; 17 | 18 | } 19 | .autocomplete-suggestion { 20 | position: relative; 21 | cursor: pointer; 22 | padding: 7px; 23 | line-height: 23px; 24 | white-space: nowrap; 25 | overflow: hidden; 26 | text-overflow: ellipsis; 27 | color: #333; 28 | } 29 | 30 | .autocomplete-suggestion b { 31 | font-weight: normal; 32 | color: #1f8dd6; 33 | } 34 | 35 | .autocomplete-suggestion.selected { 36 | background: #333; 37 | color: #fff; 38 | } 39 | 40 | .autocomplete-suggestion:hover { 41 | background: #444; 42 | color: #fff; 43 | } 44 | 45 | .autocomplete-suggestion > .context { 46 | font-size: 12px; 47 | } 48 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/css/featherlight.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Featherlight - ultra slim jQuery lightbox 3 | * Version 1.7.13 - http://noelboss.github.io/featherlight/ 4 | * 5 | * Copyright 2018, Noël Raoul Bossart (http://www.noelboss.com) 6 | * MIT Licensed. 7 | **/ 8 | html.with-featherlight{overflow:hidden}.featherlight{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483647;text-align:center;white-space:nowrap;cursor:pointer;background:#333;background:rgba(0,0,0,0)}.featherlight:last-of-type{background:rgba(0,0,0,.8)}.featherlight:before{content:'';display:inline-block;height:100%;vertical-align:middle}.featherlight .featherlight-content{position:relative;text-align:left;vertical-align:middle;display:inline-block;overflow:auto;padding:25px 25px 0;border-bottom:25px solid transparent;margin-left:5%;margin-right:5%;max-height:95%;background:#fff;cursor:auto;white-space:normal}.featherlight .featherlight-inner{display:block}.featherlight link.featherlight-inner,.featherlight script.featherlight-inner,.featherlight style.featherlight-inner{display:none}.featherlight .featherlight-close-icon{position:absolute;z-index:9999;top:0;right:0;line-height:25px;width:25px;cursor:pointer;text-align:center;font-family:Arial,sans-serif;background:#fff;background:rgba(255,255,255,.3);color:#000;border:0;padding:0}.featherlight .featherlight-close-icon::-moz-focus-inner{border:0;padding:0}.featherlight .featherlight-image{width:100%}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0;-webkit-overflow-scrolling:touch}.featherlight iframe{border:0}.featherlight *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media only screen and (max-width:1024px){.featherlight .featherlight-content{margin-left:0;margin-right:0;max-height:98%;padding:10px 10px 0;border-bottom:10px solid transparent}}@media print{html.with-featherlight>*>:not(.featherlight){display:none}} -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/css/hybrid.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid) 4 | 5 | */ 6 | 7 | /*background color*/ 8 | .hljs { 9 | display: block; 10 | overflow-x: auto; 11 | padding: 0.5em; 12 | background: #1d1f21; 13 | } 14 | 15 | /*selection color*/ 16 | .hljs::selection, 17 | .hljs span::selection { 18 | background: #373b41; 19 | } 20 | 21 | .hljs::-moz-selection, 22 | .hljs span::-moz-selection { 23 | background: #373b41; 24 | } 25 | 26 | /*foreground color*/ 27 | .hljs { 28 | color: #c5c8c6; 29 | } 30 | 31 | /*color: fg_yellow*/ 32 | .hljs-title, 33 | .hljs-name { 34 | color: #f0c674; 35 | } 36 | 37 | /*color: fg_comment*/ 38 | .hljs-comment, 39 | .hljs-meta, 40 | .hljs-meta .hljs-keyword { 41 | color: #707880; 42 | } 43 | 44 | /*color: fg_red*/ 45 | .hljs-number, 46 | .hljs-symbol, 47 | .hljs-literal, 48 | .hljs-deletion, 49 | .hljs-link { 50 | color: #cc6666 51 | } 52 | 53 | /*color: fg_green*/ 54 | .hljs-string, 55 | .hljs-doctag, 56 | .hljs-addition, 57 | .hljs-regexp, 58 | .hljs-selector-attr, 59 | .hljs-selector-pseudo { 60 | color: #b5bd68; 61 | } 62 | 63 | /*color: fg_purple*/ 64 | .hljs-attribute, 65 | .hljs-code, 66 | .hljs-selector-id { 67 | color: #b294bb; 68 | } 69 | 70 | /*color: fg_blue*/ 71 | .hljs-keyword, 72 | .hljs-selector-tag, 73 | .hljs-bullet, 74 | .hljs-tag { 75 | color: #81a2be; 76 | } 77 | 78 | /*color: fg_aqua*/ 79 | .hljs-subst, 80 | .hljs-variable, 81 | .hljs-template-tag, 82 | .hljs-template-variable { 83 | color: #8abeb7; 84 | } 85 | 86 | /*color: fg_orange*/ 87 | .hljs-type, 88 | .hljs-built_in, 89 | .hljs-builtin-name, 90 | .hljs-quote, 91 | .hljs-section, 92 | .hljs-selector-class { 93 | color: #de935f; 94 | } 95 | 96 | .hljs-emphasis { 97 | font-style: italic; 98 | } 99 | 100 | .hljs-strong { 101 | font-weight: bold; 102 | } 103 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/css/tags.css: -------------------------------------------------------------------------------- 1 | /* Tags */ 2 | 3 | #head-tags{ 4 | margin-left:1em; 5 | margin-top:1em; 6 | } 7 | 8 | #body .tags a.tag-link { 9 | display: inline-block; 10 | line-height: 2em; 11 | font-size: 0.8em; 12 | position: relative; 13 | margin: 0 16px 8px 0; 14 | padding: 0 10px 0 12px; 15 | background: #8451a1; 16 | 17 | -webkit-border-bottom-right-radius: 3px; 18 | border-bottom-right-radius: 3px; 19 | -webkit-border-top-right-radius: 3px; 20 | border-top-right-radius: 3px; 21 | 22 | -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.2); 23 | box-shadow: 0 1px 2px rgba(0,0,0,0.2); 24 | color: #fff; 25 | } 26 | 27 | #body .tags a.tag-link:before { 28 | content: ""; 29 | position: absolute; 30 | top:0; 31 | left: -1em; 32 | width: 0; 33 | height: 0; 34 | border-color: transparent #8451a1 transparent transparent; 35 | border-style: solid; 36 | border-width: 1em 1em 1em 0; 37 | } 38 | 39 | #body .tags a.tag-link:after { 40 | content: ""; 41 | position: absolute; 42 | top: 10px; 43 | left: 1px; 44 | width: 5px; 45 | height: 5px; 46 | -webkit-border-radius: 50%; 47 | border-radius: 100%; 48 | background: #fff; 49 | } 50 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Inconsolata.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Inconsolata.eot -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Inconsolata.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Inconsolata.ttf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Inconsolata.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Inconsolata.woff -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.eot -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.ttf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.woff -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.woff2 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.eot -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.ttf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.woff -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.woff2 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_200.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_200.eot -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_200.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_200.ttf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_200.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_200.woff -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_200.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_200.woff2 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_300.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_300.eot -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_300.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_300.ttf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_300.woff -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_300.woff2 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_500.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_500.eot -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_500.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_500.ttf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_500.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_500.woff -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/fonts/Work_Sans_500.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/fonts/Work_Sans_500.woff2 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/images/clippy.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/images/favicon.png -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/images/gopher-404.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/images/gopher-404.jpg -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/js/hugo-learn.js: -------------------------------------------------------------------------------- 1 | // Get Parameters from some url 2 | var getUrlParameter = function getUrlParameter(sPageURL) { 3 | var url = sPageURL.split('?'); 4 | var obj = {}; 5 | if (url.length == 2) { 6 | var sURLVariables = url[1].split('&'), 7 | sParameterName, 8 | i; 9 | for (i = 0; i < sURLVariables.length; i++) { 10 | sParameterName = sURLVariables[i].split('='); 11 | obj[sParameterName[0]] = sParameterName[1]; 12 | } 13 | return obj; 14 | } else { 15 | return undefined; 16 | } 17 | }; 18 | 19 | // Execute actions on images generated from Markdown pages 20 | var images = $("div#body-inner img").not(".inline"); 21 | // Wrap image inside a featherlight (to get a full size view in a popup) 22 | images.wrap(function(){ 23 | var image =$(this); 24 | if (!image.parent("a").length) { 25 | return ""; 26 | } 27 | }); 28 | 29 | // Change styles, depending on parameters set to the image 30 | images.each(function(index){ 31 | var image = $(this) 32 | var o = getUrlParameter(image[0].src); 33 | if (typeof o !== "undefined") { 34 | var h = o["height"]; 35 | var w = o["width"]; 36 | var c = o["classes"]; 37 | image.css("width", function() { 38 | if (typeof w !== "undefined") { 39 | return w; 40 | } else { 41 | return "auto"; 42 | } 43 | }); 44 | image.css("height", function() { 45 | if (typeof h !== "undefined") { 46 | return h; 47 | } else { 48 | return "auto"; 49 | } 50 | }); 51 | if (typeof c !== "undefined") { 52 | var classes = c.split(','); 53 | for (i = 0; i < classes.length; i++) { 54 | image.addClass(classes[i]); 55 | } 56 | } 57 | } 58 | }); 59 | 60 | // Stick the top to the top of the screen when scrolling 61 | $(document).ready(function(){ 62 | $("#top-bar").sticky({topSpacing:0, zIndex: 1000}); 63 | }); 64 | 65 | 66 | jQuery(document).ready(function() { 67 | // Add link button for every 68 | var text, clip = new ClipboardJS('.anchor'); 69 | $("h1~h2,h1~h3,h1~h4,h1~h5,h1~h6").append(function(index, html){ 70 | var element = $(this); 71 | var url = encodeURI(document.location.origin + document.location.pathname); 72 | var link = url + "#"+element[0].id; 73 | return " " + 74 | "" + 75 | "" 76 | ; 77 | }); 78 | 79 | $(".anchor").on('mouseleave', function(e) { 80 | $(this).attr('aria-label', null).removeClass('tooltipped tooltipped-s tooltipped-w'); 81 | }); 82 | 83 | clip.on('success', function(e) { 84 | e.clearSelection(); 85 | $(e.trigger).attr('aria-label', 'Link copied to clipboard!').addClass('tooltipped tooltipped-s'); 86 | }); 87 | $('code.language-mermaid').each(function(index, element) { 88 | var content = $(element).html().replace(/&/g, '&'); 89 | $(element).parent().replaceWith('
    ' + content + '
    '); 90 | }); 91 | }); 92 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /themes/hugo-theme-learn/static/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafik8/istio-workshop/f37b460e1cab8f3804c9180f30e529d6e71eb2a5/themes/hugo-theme-learn/static/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /themes/hugo-theme-learn/theme.toml: -------------------------------------------------------------------------------- 1 | # theme.toml template for a Hugo theme 2 | # See https://github.com/spf13/hugoThemes#themetoml for an example 3 | 4 | name = "Learn" 5 | license = "MIT" 6 | licenselink = "https://github.com/matcornic/hugo-theme-learn/blob/master/LICENSE.md" 7 | description = "Documentation theme for Hugo, based on Grav Learn theme" 8 | homepage = "https://github.com/matcornic/hugo-theme-learn/" 9 | repo = "https://github.com/matcornic/hugo-theme-learn" 10 | tags = ["documentation", "grav", "learn", "doc", "search"] 11 | features = ["documentation", "menu", "nested sections", "search", "mermaid"] 12 | min_version = 0.25 13 | 14 | [author] 15 | name = "Mathieu Cornic" 16 | homepage = "https://matcornic.github.io/" 17 | 18 | [original] 19 | name = "Grav Learn" 20 | homepage = "https://learn.getgrav.org/" 21 | repo = "https://github.com/getgrav/grav-learn" 22 | -------------------------------------------------------------------------------- /themes/hugo-theme-learn/wercker.yml: -------------------------------------------------------------------------------- 1 | box: golang 2 | build: 3 | steps: 4 | # Gets the dependencies 5 | - script: 6 | name: get hugo 7 | code: | 8 | git clone https://github.com/gohugoio/hugo.git && cd hugo && go install 9 | # Sets the go workspace and places you package 10 | # at the right place in the workspace tree 11 | - setup-go-workspace 12 | # Build the project 13 | - script: 14 | name: build site 15 | code: | 16 | cd exampleSite && hugo --------------------------------------------------------------------------------