diff --git a/.gitignore b/.gitignore index 3693a51eb..ffa80b87f 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,4 @@ Gemfile.lock .idea .vale modules/.vale.ini -.vale.ini \ No newline at end of file +.vale.ini diff --git a/assets/images/og-template-base.svg b/assets/images/og-template-base.svg new file mode 100644 index 000000000..ff67c76e6 --- /dev/null +++ b/assets/images/og-template-base.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Validated Patterns + + + + + + diff --git a/config.yaml b/config.yaml index e86cc6697..52770e0d1 100644 --- a/config.yaml +++ b/config.yaml @@ -7,6 +7,12 @@ paginate: 6 timeout: 300 params: site_logo: /images/validated-patterns.png + # SEO and Social Media Settings + description: "Validated Patterns are GitOps-driven, automated, and rigorously tested application stacks for hybrid cloud deployments on Red Hat OpenShift. Deploy complex solutions with unprecedented speed and confidence." + default_share_image: /images/validated-patterns.png + twitter_handle: "@RedHat" + github_repo: "validatedpatterns/docs" + github_branch: "main" security: exec: allow: ["^dart-sass-embedded$", "^go$", "^npx$", "^postcss$", "^asciidoctor$"] @@ -45,3 +51,8 @@ menus: - name: Workshop url: https://play.validatedpatterns.io weight: 25 +sitemap: + changeFreq: monthly + priority: 0.5 + filename: sitemap.xml +enableRobotsTXT: true diff --git a/content/blog/2021-12-31-medical-diagnosis.md b/content/blog/2021-12-31-medical-diagnosis.md index 035583283..59cc35c23 100644 --- a/content/blog/2021-12-31-medical-diagnosis.md +++ b/content/blog/2021-12-31-medical-diagnosis.md @@ -8,6 +8,15 @@ blog_tags: - xray - validated-pattern aliases: /2021/12/31/medical-diagnosis/ +keywords: +- medical diagnosis +- ai machine learning +- xray analysis +- healthcare +- validated patterns +- pneumonia detection +- knative +- kafka --- # Validated Pattern: Medical Diagnosis diff --git a/content/blog/2022-03-23-acm-mustonlyhave.md b/content/blog/2022-03-23-acm-mustonlyhave.md index 770d23b71..4eba7c6f8 100644 --- a/content/blog/2022-03-23-acm-mustonlyhave.md +++ b/content/blog/2022-03-23-acm-mustonlyhave.md @@ -6,6 +6,14 @@ author: Michele Baldessari blog_tags: - acm aliases: /2022/03/23/acm-mustonlyhave/ +keywords: +- rhacm +- policy enforcement +- musthave +- mustonlyhave +- validated patterns +- cluster governance +- openshift --- Recently a user reported an issue when using the multicloud-gitops pattern: Namely, after testing changes in a feature branch (adding a helm application), said changes were not appearing on the remote clusters. diff --git a/content/blog/2022-03-30-multicloud-gitops.md b/content/blog/2022-03-30-multicloud-gitops.md index bee0ce443..f05b70012 100644 --- a/content/blog/2022-03-30-multicloud-gitops.md +++ b/content/blog/2022-03-30-multicloud-gitops.md @@ -8,6 +8,15 @@ blog_tags: - xray - validated-pattern aliases: /2022/03/30/multicloud-gitops/ +keywords: +- multicloud +- gitops +- argocd +- rhacm +- kubernetes +- openshift +- validated patterns +- cluster management --- # Validated Pattern: Multi-Cloud GitOps diff --git a/content/blog/2022-06-30-ansible-edge-gitops.md b/content/blog/2022-06-30-ansible-edge-gitops.md index 83411e9b8..029c17b6c 100644 --- a/content/blog/2022-06-30-ansible-edge-gitops.md +++ b/content/blog/2022-06-30-ansible-edge-gitops.md @@ -7,6 +7,13 @@ blog_tags: - ansible-edge-gitops - patterns aliases: /2022/06/30/ansible-edge-gitops/ +keywords: +- ansible automation +- edge computing +- gitops +- openshift virtualization +- validated patterns +- hybrid cloud --- # Validated Pattern: Ansible Edge GitOps diff --git a/content/blog/2022-07-15-push-vs-pull.md b/content/blog/2022-07-15-push-vs-pull.md index 7c68f77f7..13f52a875 100644 --- a/content/blog/2022-07-15-push-vs-pull.md +++ b/content/blog/2022-07-15-push-vs-pull.md @@ -8,6 +8,14 @@ blog_tags: - patterns - GitOps aliases: /2022/07/15/push-vs-pull/ +keywords: +- push vs pull +- change management +- gitops +- ansible +- validated patterns +- edge computing +- deployment strategies --- # Push or Pull? Strategies for Large Scale Technology Change Management on the Edge diff --git a/content/blog/2022-08-24-clustergroups.md b/content/blog/2022-08-24-clustergroups.md index 9f2f298af..430d935e5 100644 --- a/content/blog/2022-08-24-clustergroups.md +++ b/content/blog/2022-08-24-clustergroups.md @@ -6,6 +6,14 @@ author: Martin Jackson blog_tags: - validated-pattern aliases: /2022/08/24/clustergroups/ +keywords: +- clustergroups +- multicluster +- validated patterns +- kubernetes +- openshift +- cluster management +- gitops --- # What Is a clusterGroup? diff --git a/content/blog/2022-09-02-route.md b/content/blog/2022-09-02-route.md index 8fd7a49db..036d9d2bb 100644 --- a/content/blog/2022-09-02-route.md +++ b/content/blog/2022-09-02-route.md @@ -8,6 +8,13 @@ blog_tags: - openshift - route aliases: /2022/09/02/route/ +keywords: +- openshift routes +- subdomain +- kubernetes ingress +- networking +- validated patterns +- dns --- # What Is a route in OpenShift? diff --git a/content/blog/2022-10-12-acm-provisioning.md b/content/blog/2022-10-12-acm-provisioning.md index 6fc584601..77044bc1f 100644 --- a/content/blog/2022-10-12-acm-provisioning.md +++ b/content/blog/2022-10-12-acm-provisioning.md @@ -9,6 +9,14 @@ blog_tags: - patterns - GitOps aliases: /2022/10/12/acm-provisioning/ +keywords: +- rhacm +- cluster provisioning +- multicluster +- gitops +- validated patterns +- openshift +- cluster management --- # Multi-cluster GitOps with Provisioning diff --git a/content/blog/2022-11-20-argo-rollouts.md b/content/blog/2022-11-20-argo-rollouts.md index 9b91edb78..07da9c103 100644 --- a/content/blog/2022-11-20-argo-rollouts.md +++ b/content/blog/2022-11-20-argo-rollouts.md @@ -7,6 +7,14 @@ blog_tags: - patterns - GitOps aliases: /2022/11/03/argo-rollouts/ +keywords: +- argo rollouts +- progressive delivery +- blue green deployment +- canary deployment +- gitops +- validated patterns +- kubernetes --- # Progressive Delivery with Argo Rollouts diff --git a/content/blog/2022-12-01-multicluster-devsecops.md b/content/blog/2022-12-01-multicluster-devsecops.md index c08321dc8..750dcce1a 100644 --- a/content/blog/2022-12-01-multicluster-devsecops.md +++ b/content/blog/2022-12-01-multicluster-devsecops.md @@ -13,6 +13,15 @@ blog_tags: - pipelines - quay aliases: /2022/12/01/multicluster-devsecops/ +keywords: +- devsecops +- openshift pipelines +- security scanning +- quay registry +- advanced cluster security +- validated patterns +- ci/cd +- gitops --- # Multicluster DevSecOps diff --git a/content/blog/2023-11-17-argo-configmanagement-plugins.md b/content/blog/2023-11-17-argo-configmanagement-plugins.md index 3c379b792..14f4a4d48 100644 --- a/content/blog/2023-11-17-argo-configmanagement-plugins.md +++ b/content/blog/2023-11-17-argo-configmanagement-plugins.md @@ -11,6 +11,14 @@ blog_tags: - pipelines - gitops aliases: /2023/11/17/argocd-cmps/ +keywords: +- argocd +- config management plugins +- gitops +- validated patterns +- kubernetes +- openshift +- sidecar plugins --- # Argo CD Configuration Management Plugins and the Validated Patterns Framework diff --git a/content/blog/2023-12-01-new-pattern-tiers.md b/content/blog/2023-12-01-new-pattern-tiers.md index 0279a80aa..8adba3355 100644 --- a/content/blog/2023-12-01-new-pattern-tiers.md +++ b/content/blog/2023-12-01-new-pattern-tiers.md @@ -7,6 +7,13 @@ blog_tags: - patterns - announce aliases: /2023/12/01/pattern-tiers/ +keywords: +- pattern tiers +- validated patterns +- sandbox +- tested +- maintained +- pattern classification --- The efforts here started off with 2 different classes of patterns: “Community” and “Validated”, however this terminology dates back to before the effort had arrived at “Validated Patterns” as the official project name. diff --git a/content/blog/2023-12-05-nutanix-testing.md b/content/blog/2023-12-05-nutanix-testing.md index f525b7332..7a6e2af53 100644 --- a/content/blog/2023-12-05-nutanix-testing.md +++ b/content/blog/2023-12-05-nutanix-testing.md @@ -8,6 +8,13 @@ - announce - nutanix aliases: /2023/12/04/nutanix-platform-announce/ + keywords: + - nutanix platform + - multicloud gitops + - validated patterns + - platform testing + - openshift + - ci testing --- I am pleased to announce the addition of the Nutanix platform to our CI dashboard for the Multi-cloud GitOps pattern. diff --git a/content/blog/2023-12-15-understanding-namespaces.md b/content/blog/2023-12-15-understanding-namespaces.md index 2b046a878..1432e79bc 100644 --- a/content/blog/2023-12-15-understanding-namespaces.md +++ b/content/blog/2023-12-15-understanding-namespaces.md @@ -6,6 +6,13 @@ blog_tags: - patterns aliases: /2023/12/15/understanding-namespaces/ + keywords: + - kubernetes namespaces + - operator groups + - openshift + - validated patterns + - namespace management + - clustergroup --- # Understanding Namespace Creation using the Validated Patterns Framework diff --git a/content/blog/2023-12-20-private-repos.md b/content/blog/2023-12-20-private-repos.md index 4ee92e925..6eb7904e3 100644 --- a/content/blog/2023-12-20-private-repos.md +++ b/content/blog/2023-12-20-private-repos.md @@ -7,6 +7,13 @@ - patterns - announce aliases: /2023/12/20/private-repositories/ + keywords: + - private git repositories + - ssh authentication + - argocd + - validated patterns + - git security + - repository access --- We're excited to announce that support for private repositories is now diff --git a/content/blog/2024-01-16-deploying-mcg-with-cisco-flashstack-portworx.md b/content/blog/2024-01-16-deploying-mcg-with-cisco-flashstack-portworx.md index 42c7c9de9..6c8085bd1 100644 --- a/content/blog/2024-01-16-deploying-mcg-with-cisco-flashstack-portworx.md +++ b/content/blog/2024-01-16-deploying-mcg-with-cisco-flashstack-portworx.md @@ -5,6 +5,14 @@ author: Lester Claudio blog_tags: - patterns + keywords: + - cisco flashstack + - portworx enterprise + - multicloud gitops + - validated patterns + - openshift + - data center + - storage --- # Deploying Multicloud GitOps with Cisco FlashStack Data Center and Portworx Enterprise diff --git a/content/blog/2024-01-26-more-secrets-options.md b/content/blog/2024-01-26-more-secrets-options.md index 3a6c9eadb..b5dc63297 100644 --- a/content/blog/2024-01-26-more-secrets-options.md +++ b/content/blog/2024-01-26-more-secrets-options.md @@ -6,6 +6,13 @@ blog_tags: - patterns - secrets + keywords: + - secrets management + - hashicorp vault + - external secrets operator + - kubernetes secrets + - validated patterns + - security --- # More Secrets Options Now Available with Validated Patterns diff --git a/content/blog/2024-02-07-hcp-htpasswd-config.md b/content/blog/2024-02-07-hcp-htpasswd-config.md index 658755376..ad85b8084 100644 --- a/content/blog/2024-02-07-hcp-htpasswd-config.md +++ b/content/blog/2024-02-07-hcp-htpasswd-config.md @@ -6,6 +6,14 @@ author: Jonny Rickard blog_tags: - patterns - how-to +keywords: +- htpasswd +- oauth +- authentication +- hosted control plane +- openshift +- validated patterns +- cluster configuration --- # Configure HTPasswd OAuth provider for hosted clusters diff --git a/content/blog/2024-03-05-intel-accelerated-patterns.md b/content/blog/2024-03-05-intel-accelerated-patterns.md index d06dbc5ee..55ea9522f 100644 --- a/content/blog/2024-03-05-intel-accelerated-patterns.md +++ b/content/blog/2024-03-05-intel-accelerated-patterns.md @@ -7,6 +7,15 @@ blog_tags: - patterns - announce aliases: /2024/02/02/intel-patterns/ +keywords: +- intel amx +- hardware acceleration +- ai workloads +- machine learning +- intel xeon +- validated patterns +- openshift ai +- deep learning --- # Intel AMX accelerated patterns increase AI performance while reducing cost diff --git a/content/blog/2024-07-12-in-cluster-git.md b/content/blog/2024-07-12-in-cluster-git.md index f3cea4adf..842da4715 100644 --- a/content/blog/2024-07-12-in-cluster-git.md +++ b/content/blog/2024-07-12-in-cluster-git.md @@ -6,6 +6,14 @@ blog_tags: - patterns - git + keywords: + - gitea + - in-cluster git + - git server + - validated patterns + - gitops + - kubernetes + - openshift --- # In-cluster Git Server diff --git a/content/blog/2024-07-19-write-token-kubeconfig.md b/content/blog/2024-07-19-write-token-kubeconfig.md index d1399ff8a..f9088425f 100644 --- a/content/blog/2024-07-19-write-token-kubeconfig.md +++ b/content/blog/2024-07-19-write-token-kubeconfig.md @@ -5,6 +5,13 @@ author: Martin Jackson blog_tags: - patterns + keywords: + - kubeconfig + - kubernetes authentication + - token authentication + - openshift + - validated patterns + - cluster access --- # Writing a Kubeconfig File if You Need One diff --git a/content/blog/2024-08-30-push-secrets.md b/content/blog/2024-08-30-push-secrets.md index 6fad88183..3e05c320a 100644 --- a/content/blog/2024-08-30-push-secrets.md +++ b/content/blog/2024-08-30-push-secrets.md @@ -5,6 +5,14 @@ author: Michele Baldessari blog_tags: - patterns + keywords: + - hashicorp vault + - kubernetes secrets + - secret management + - external secrets + - pushsecret + - validated patterns + - gitops --- # Pushing Secrets to HashiCorp Vault diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index f76b3cfd7..c7bb0d272 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -1,5 +1,5 @@ - + {{- partial "head.html" . -}}
diff --git a/layouts/partials/generate-og-image-advanced.html b/layouts/partials/generate-og-image-advanced.html new file mode 100644 index 000000000..bcc1f349d --- /dev/null +++ b/layouts/partials/generate-og-image-advanced.html @@ -0,0 +1,83 @@ +{{- /* + Advanced OG Image Generator with Text Overlay + This requires Hugo Extended version with image filter support + Creates branded OG images with the post title overlaid on a base image +*/ -}} + +{{- $ogImage := "" }} +{{- $pageTitle := .Title }} +{{- $truncatedTitle := $pageTitle }} +{{- if gt (len $pageTitle) 80 }} + {{- $truncatedTitle = printf "%s..." (substr $pageTitle 0 77) }} +{{- end }} + +{{- /* Check for custom image in front matter */ -}} +{{- if .Params.og_image }} + {{- with resources.Get .Params.og_image }} + {{- $ogImage = . }} + {{- else }} + {{- $ogImage = .Params.og_image | absURL }} + {{- end }} +{{- else if .Params.image }} + {{- with resources.Get .Params.image }} + {{- /* Resize custom image to OG dimensions */ -}} + {{- $ogImage = .Resize "1200x630 Center" }} + {{- else }} + {{- $ogImage = .Params.image | absURL }} + {{- end }} +{{- else if .Params.featured_image }} + {{- with resources.Get .Params.featured_image }} + {{- $ogImage = .Resize "1200x630 Center" }} + {{- else }} + {{- $ogImage = .Params.featured_image | absURL }} + {{- end }} +{{- end }} + +{{- /* Generate dynamic image for blog posts without custom images */ -}} +{{- if and (not $ogImage) (eq .Section "blog") }} + {{- /* Try to get a base template image */ -}} + {{- $baseImage := resources.Get "images/og-template-base.png" }} + + {{- if not $baseImage }} + {{- /* Fallback: use the site logo as base */ -}} + {{- $baseImage = resources.Get "images/validated-patterns.png" }} + {{- end }} + + {{- if $baseImage }} + {{- /* Resize to OG dimensions */ -}} + {{- $resized := $baseImage.Fit "1200x630" }} + + {{- /* Apply filters for a nice background effect */ -}} + {{- $processed := $resized }} + {{- $processed = $processed.Filter (images.Brightness 10) }} + {{- $processed = $processed.Filter (images.Contrast 10) }} + + {{- /* Note: Text overlay would require Hugo Extended with overlay filter + For now, we create a visually appealing base image + Consider using external service or pre-generated templates for text */ -}} + + {{- /* Store the processed image */ -}} + {{- $filename := printf "og-generated/%s.jpg" .File.ContentBaseName }} + {{- $ogImage = $processed }} + {{- end }} +{{- end }} + +{{- /* Ultimate fallback */ -}} +{{- if not $ogImage }} + {{- $ogImage = resources.Get "images/validated-patterns.png" }} + {{- if $ogImage }} + {{- $ogImage = $ogImage.Resize "1200x630" }} + {{- end }} +{{- end }} + +{{- /* Return the image permalink or URL */ -}} +{{- if $ogImage }} + {{- if reflect.IsMap $ogImage }} + {{- return $ogImage.Permalink }} + {{- else }} + {{- return $ogImage }} + {{- end }} +{{- else }} + {{- return (.Site.Params.site_logo | absURL) }} +{{- end }} + diff --git a/layouts/partials/generate-og-image.html b/layouts/partials/generate-og-image.html new file mode 100644 index 000000000..c46e2b6bc --- /dev/null +++ b/layouts/partials/generate-og-image.html @@ -0,0 +1,88 @@ +{{- /* + Generate a dynamic Open Graph image for blog posts + This partial creates a custom OG image with the blog post title + Falls back to default images if generation fails +*/ -}} + +{{- $ogImage := "" }} +{{- $pageTitle := .Title }} +{{- $pageDate := .Date.Format "January 2, 2006" }} +{{- $author := .Params.author | default "Validated Patterns" }} + +{{- /* Check if page has a custom image first */ -}} +{{- if .Params.image }} + {{- with resources.Get .Params.image }} + {{- $ogImage = . }} + {{- else }} + {{- /* Image is a URL, return it directly */ -}} + {{- $ogImage = .Params.image }} + {{- end }} +{{- else if .Params.featured_image }} + {{- with resources.Get .Params.featured_image }} + {{- $ogImage = . }} + {{- else }} + {{- $ogImage = .Params.featured_image }} + {{- end }} +{{- else if eq .Section "blog" }} + {{- /* Generate dynamic OG image for blog posts */ -}} + {{- $baseImage := resources.Get "images/validated-patterns.png" }} + {{- if $baseImage }} + {{- /* Create a processed version of the image for OG */ -}} + {{- $ogImage = $baseImage.Resize "1200x630 Center" }} + {{- $ogImage = $ogImage.Filter (images.GaussianBlur 2) }} + {{- $ogImage = $ogImage.Filter (images.Brightness -20) }} + {{- end }} + + {{- /* If we want to use SVG-based generation instead */ -}} + {{- /* Note: SVG generation for better text rendering */ -}} + {{- if not $ogImage }} + {{- $svg := printf ` + + + + + + + + + + %s + + + %s + + + Validated Patterns Blog + + ` (substr $pageTitle 0 60) $pageDate }} + + {{- $svgContent := $svg | resources.FromString (printf "og-images/blog/%s.svg" .File.BaseFileName) }} + {{- $ogImage = $svgContent }} + {{- end }} +{{- end }} + +{{- /* Fallback to site defaults */ -}} +{{- if not $ogImage }} + {{- if .Site.Params.default_share_image }} + {{- $ogImage = resources.Get .Site.Params.default_share_image }} + {{- if not $ogImage }} + {{- $ogImage = .Site.Params.default_share_image }} + {{- end }} + {{- else }} + {{- $ogImage = resources.Get "images/validated-patterns.png" }} + {{- end }} +{{- end }} + +{{- /* Return the final image URL */ -}} +{{- if $ogImage }} + {{- if reflect.IsMap $ogImage }} + {{- /* It's a Hugo resource */ -}} + {{- return $ogImage.Permalink }} + {{- else }} + {{- /* It's a string URL */ -}} + {{- return ($ogImage | absURL) }} + {{- end }} +{{- else }} + {{- return (.Site.Params.site_logo | absURL) }} +{{- end }} + diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 93a390fa7..26688cedb 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -1,6 +1,129 @@ + + {{- /* Description Meta Tag */ -}} + {{- $description := "" }} + {{- if .Description }} + {{- $description = .Description }} + {{- else if .Summary }} + {{- $description = .Summary | truncate 155 }} + {{- else if .Site.Params.description }} + {{- $description = .Site.Params.description }} + {{- else }} + {{- $description = "Validated Patterns are an evolution of how you deploy applications in a hybrid cloud. Deploy full application stacks through GitOps-based frameworks for business-centric solutions with CI." }} + {{- end }} + + + {{- /* Author Meta Tag for Blog Posts */ -}} + {{- if and (eq .Section "blog") .Params.author }} + + {{- end }} + + {{- /* Keywords Meta Tag */ -}} + {{- if .Params.keywords }} + + {{- end }} + + {{- /* Theme Color for Mobile Browsers */ -}} + + + {{- /* Canonical URL */ -}} + {{- if .Params.canonical_url }} + + {{- else }} + + {{- end }} + + {{- /* Favicon */ -}} + + + + {{- /* DNS Prefetch and Preconnect for Performance */ -}} + + + + + {{- /* Open Graph Meta Tags */ -}} + {{- $ogTitle := .Title }} + {{- if .IsHome }} + {{- $ogTitle = .Site.Title }} + {{- end }} + + + + + + + {{- /* Open Graph Image - Use dynamic generation for blog posts */ -}} + {{- $ogImage := "" }} + {{- if .Params.og_image }} + {{- /* Custom OG image specified in front matter */ -}} + {{- $ogImage = .Params.og_image | absURL }} + {{- else if .Params.image }} + {{- $ogImage = .Params.image | absURL }} + {{- else if .Params.featured_image }} + {{- $ogImage = .Params.featured_image | absURL }} + {{- else if and (eq .Section "blog") (not .IsHome) }} + {{- /* Generate dynamic OG image for blog posts */ -}} + {{- $ogImage = partial "render-blog-og-image.html" . }} + {{- else if .Site.Params.default_share_image }} + {{- $ogImage = .Site.Params.default_share_image | absURL }} + {{- else }} + {{- $ogImage = .Site.Params.site_logo | absURL }} + {{- end }} + {{- if $ogImage }} + + + + + {{- end }} + + {{- /* Open Graph Type and Article Metadata */ -}} + {{- if eq .Section "blog" }} + + {{- if .Date }} + + {{- end }} + {{- if .Lastmod }} + + {{- end }} + {{- if .Params.author }} + + {{- end }} + {{- if .Params.blog_tags }} + {{- range .Params.blog_tags }} + + {{- end }} + {{- end }} + {{- else }} + + {{- end }} + + {{- /* Twitter Card Meta Tags */ -}} + + + + {{- if $ogImage }} + + + {{- end }} + {{- if .Site.Params.twitter_handle }} + + + {{- end }} + + {{- /* Structured Data - JSON-LD Schemas */ -}} + {{ partial "schema-website.html" . }} + {{ partial "schema-organization.html" . }} + {{ partial "schema-breadcrumbs.html" . }} + {{- if eq .Section "blog" }} + {{ partial "schema-article.html" . }} + {{- end }} + {{- if eq .Section "patterns" }} + {{ partial "schema-techarticle.html" . }} + {{- end }} + {{ $sass := resources.Get "sass/patternfly.scss" }} {{ $style := $sass | resources.ToCSS }} @@ -12,7 +135,7 @@ {{ if eq .IsHome false }}{{ .Title }} | {{ end }}{{ .Site.Title }} - + +{{- end -}} + diff --git a/layouts/partials/schema-breadcrumbs.html b/layouts/partials/schema-breadcrumbs.html new file mode 100644 index 000000000..fd3353405 --- /dev/null +++ b/layouts/partials/schema-breadcrumbs.html @@ -0,0 +1,38 @@ +{{- if not .IsHome -}} +{{- $url := .Permalink -}} +{{- $sections := split .RelPermalink "/" -}} +{{- $position := 1 -}} +{{- $breadcrumbItems := slice -}} + +{{- /* Add Home breadcrumb */ -}} +{{- $homeItem := dict "@type" "ListItem" "position" $position "name" "Home" "item" .Site.BaseURL -}} +{{- $breadcrumbItems = $breadcrumbItems | append $homeItem -}} +{{- $position = add $position 1 -}} + +{{- /* Build breadcrumb path */ -}} +{{- $currentPath := "" -}} +{{- range $index, $section := $sections -}} + {{- if and (ne $section "") (ne $section "index.html") -}} + {{- $currentPath = printf "%s/%s" $currentPath $section -}} + {{- $sectionPage := $.Site.GetPage $currentPath -}} + {{- $name := $section | humanize | title -}} + {{- if $sectionPage -}} + {{- $name = $sectionPage.Title -}} + {{- end -}} + {{- $item := dict "@type" "ListItem" "position" $position "name" $name "item" (printf "%s%s" $.Site.BaseURL $currentPath) -}} + {{- $breadcrumbItems = $breadcrumbItems | append $item -}} + {{- $position = add $position 1 -}} + {{- end -}} +{{- end -}} + +{{- if gt (len $breadcrumbItems) 1 -}} + +{{- end -}} +{{- end -}} + diff --git a/layouts/partials/schema-organization.html b/layouts/partials/schema-organization.html new file mode 100644 index 000000000..6314c07f9 --- /dev/null +++ b/layouts/partials/schema-organization.html @@ -0,0 +1,27 @@ +{{- if .IsHome -}} + +{{- end -}} + diff --git a/layouts/partials/schema-techarticle.html b/layouts/partials/schema-techarticle.html new file mode 100644 index 000000000..e6904279a --- /dev/null +++ b/layouts/partials/schema-techarticle.html @@ -0,0 +1,80 @@ +{{- if and (eq .Section "patterns") (not .IsNode) -}} +{{- $image := "" -}} +{{- if .Params.image -}} + {{- $image = .Params.image | absURL -}} +{{- else if .Params.featured_image -}} + {{- $image = .Params.featured_image | absURL -}} +{{- else if .Site.Params.default_share_image -}} + {{- $image = .Site.Params.default_share_image | absURL -}} +{{- else -}} + {{- $image = .Site.Params.site_logo | absURL -}} +{{- end -}} + +{{- $description := "" -}} +{{- if .Description -}} + {{- $description = .Description -}} +{{- else if .Summary -}} + {{- $description = .Summary -}} +{{- else -}} + {{- $description = .Site.Params.description | default "Validated Patterns documentation" -}} +{{- end -}} + + +{{- end -}} + diff --git a/layouts/partials/schema-website.html b/layouts/partials/schema-website.html new file mode 100644 index 000000000..920780044 --- /dev/null +++ b/layouts/partials/schema-website.html @@ -0,0 +1,21 @@ +{{- if .IsHome -}} + +{{- end -}} + diff --git a/layouts/sitemap.xml b/layouts/sitemap.xml new file mode 100644 index 000000000..dd95cb2b9 --- /dev/null +++ b/layouts/sitemap.xml @@ -0,0 +1,15 @@ +{{ printf "" | safeHTML }} + + {{ range .Pages }} + + {{ .Permalink }} + {{ if not .Lastmod.IsZero }} + {{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }} + {{ end }} + {{ with .Sitemap.ChangeFreq }} + {{ . }} + {{ end }} + + {{ end }} + \ No newline at end of file diff --git a/static/llms.txt b/static/llms.txt new file mode 100644 index 000000000..ec8e99a2d --- /dev/null +++ b/static/llms.txt @@ -0,0 +1,60 @@ +# Validated Patterns + +> Validated Patterns are GitOps-driven, automated, and rigorously tested application stacks for hybrid cloud deployments on Red Hat OpenShift. They go beyond traditional reference architectures by providing deployable, testable software artifacts with automated deployment that enhance speed, reliability, and consistency across environments. + +Important notes: + +- Validated Patterns are built on OpenShift Container Platform (Kubernetes) and leverage GitOps principles using ArgoCD, Red Hat Advanced Cluster Management (RHACM), and Tekton +- They are designed for IT architects, advanced developers, and system administrators familiar with Kubernetes and OpenShift +- Patterns can be deployed using either the OpenShift-based Validated Patterns framework or the Ansible GitOps Framework (AGOF) +- All patterns require an available OpenShift 4.12+ cluster with cluster-admin privileges, at least 8 CPU cores, 16GB RAM, and dynamic storage provisioning +- Each pattern includes values files (values-global.yaml, values-hub.yaml) for customization and secrets management without committing sensitive data to git repositories + +## Getting Started + +- [Patterns quick start](https://validatedpatterns.io/learn/quickstart/): Streamlined guide to deploying your first validated pattern with step-by-step instructions +- [About Validated Patterns](https://validatedpatterns.io/learn/about-validated-patterns/): Overview of what Validated Patterns are, why they exist, and their advantages over traditional reference architectures +- [Key concepts](https://validatedpatterns.io/learn/keyconcepts/): Core concepts and terminology used throughout the Validated Patterns framework +- [Workflow](https://validatedpatterns.io/learn/workflow/): Understanding the deployment workflow and GitOps processes + +## Core Documentation + +- [Validated Patterns frameworks](https://validatedpatterns.io/learn/validated_patterns_frameworks/): Overview of the OpenShift and Ansible-based frameworks +- [Using the Validated Pattern Operator](https://validatedpatterns.io/learn/using-validated-pattern-operator/): How to install and use the operator for pattern deployment +- [Values files](https://validatedpatterns.io/learn/values-files/): Understanding and customizing values files for pattern configuration +- [Secrets management](https://validatedpatterns.io/learn/secrets-management-in-the-Validated-Patterns-framework/): How secrets are managed securely in the framework +- [ClusterGroup in values files](https://validatedpatterns.io/learn/clustergroup-in-values-files/): Understanding ClusterGroup configuration for multi-cluster deployments +- [Importing a cluster](https://validatedpatterns.io/learn/importing-a-cluster/): How to import edge or managed clusters into the hub cluster + +## Pattern Examples + +- [Multicloud GitOps](https://validatedpatterns.io/patterns/multicloud-gitops/): Foundational pattern demonstrating GitOps across multiple clusters - recommended starting point +- [Industrial Edge](https://validatedpatterns.io/patterns/industrial-edge/): Edge computing pattern for manufacturing and industrial use cases +- [Medical Diagnosis](https://validatedpatterns.io/patterns/medical-diagnosis/): AI/ML pattern for medical imaging and diagnosis with Intel optimizations +- [Retail](https://validatedpatterns.io/patterns/retail/): Retail industry pattern with edge deployments for store locations +- [Ansible Edge GitOps](https://validatedpatterns.io/patterns/ansible-edge-gitops/): Pattern combining Ansible Automation Platform with GitOps at the edge +- [DevSecOps](https://validatedpatterns.io/patterns/devsecops/): Secure software supply chain and development pipeline pattern +- [RAG LLM GitOps](https://validatedpatterns.io/patterns/rag-llm-gitops/): Retrieval-Augmented Generation pattern for Large Language Models +- [OpenShift AI](https://validatedpatterns.io/patterns/openshift-ai/): Pattern for deploying and managing AI/ML workloads on OpenShift + +## Advanced Topics + +- [Pattern structure](https://validatedpatterns.io/learn/vp_structure_vp_pattern/): Deep dive into the structure and components of a validated pattern +- [Ansible GitOps Framework (AGOF)](https://validatedpatterns.io/learn/vp_agof/): Using Ansible for GitOps-based deployments +- [OpenShift framework](https://validatedpatterns.io/learn/vp_openshift_framework/): Details on the OpenShift-based framework +- [Infrastructure](https://validatedpatterns.io/learn/infrastructure/): Infrastructure considerations for pattern deployments +- [Cluster sizing](https://validatedpatterns.io/learn/ocp-cluster-general-sizing/): General guidance on OpenShift cluster sizing for patterns + +## Contributing + +- [Contribute to Validated Patterns](https://validatedpatterns.io/contribute/): How to contribute to the project +- [Documentation guidelines](https://validatedpatterns.io/contribute/documentation-guidelines/): Guidelines for contributing to documentation +- [Preview documentation locally](https://validatedpatterns.io/contribute/contribute-to-docs/): How to build and preview the documentation site + +## Optional + +- [FAQ](https://validatedpatterns.io/learn/faq/): Frequently asked questions about Validated Patterns +- [About pattern tiers and types](https://validatedpatterns.io/learn/about-pattern-tiers-types/): Understanding different pattern maturity levels and classifications +- [HashiCorp Vault](https://validatedpatterns.io/learn/vault/): Using Vault for secrets management in patterns +- [All available patterns](https://validatedpatterns.io/patterns/): Browse all 30+ patterns by industry, product, and use case +