{"id":49950,"date":"2025-07-05T10:17:23","date_gmt":"2025-07-05T10:17:23","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49950"},"modified":"2025-07-05T10:17:23","modified_gmt":"2025-07-05T10:17:23","slug":"helmwave-tutorial-from-beginner-to-advanced","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/helmwave-tutorial-from-beginner-to-advanced\/","title":{"rendered":"Helmwave Tutorial: From Beginner to Advanced"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Introduction to Helmwave and Its Core Concepts<\/strong><\/h2>\n\n\n\n<p><strong>Helmwave<\/strong> is a modern tool for orchestrating complex Helm deployments, enabling you to manage, templatize, and execute multiple Helm chart releases\u2014<strong>in parallel and with high modularity<\/strong>. Unlike vanilla Helm or even Helmfile, Helmwave makes it easy to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Define<\/strong> all your Helm releases in one place<\/li>\n\n\n\n<li><strong>Model dependencies<\/strong> and parallelize deployments<\/li>\n\n\n\n<li><strong>Share configuration and secrets<\/strong> securely<\/li>\n\n\n\n<li><strong>Optimize for CI\/CD<\/strong> and multi-environment workflows<\/li>\n<\/ul>\n\n\n\n<p><strong>Key Concepts:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Helmwave Manifest:<\/strong> <code>helmwave.yml<\/code>\u2014your main configuration file.<\/li>\n\n\n\n<li><strong>Release:<\/strong> One Helm chart deployment.<\/li>\n\n\n\n<li><strong>Values:<\/strong> Configuration (YAML, templated) for each release.<\/li>\n\n\n\n<li><strong>Dependency Graph:<\/strong> Determines parallelism and ordering.<\/li>\n\n\n\n<li><strong>Environment Support:<\/strong> Easily target dev, staging, prod, etc.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Installation and Setup (Including Prerequisites)<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Prerequisites<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/helm.sh\/docs\/intro\/install\/\" target=\"_blank\" rel=\"noopener\">Helm 3.x<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/kubernetes.io\/docs\/tasks\/tools\/\" target=\"_blank\" rel=\"noopener\">kubectl<\/a><\/li>\n\n\n\n<li>Go (if building from source)<\/li>\n\n\n\n<li>Access to your Kubernetes cluster<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Install Helmwave<\/strong><\/h3>\n\n\n\n<p>The easiest way is via prebuilt binaries or Homebrew:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Using Homebrew (macOS\/Linux)<\/span>\nbrew install helmwave\/tap\/helmwave\n\n<span class=\"hljs-comment\"># Or download the latest release (Linux\/macOS\/Windows)<\/span>\ncurl -sSL https:<span class=\"hljs-comment\">\/\/github.com\/helmwave\/helmwave\/releases\/latest\/download\/helmwave-$(uname -s)-amd64.tar.gz | tar xz<\/span>\nsudo mv helmwave \/usr\/local\/bin\/\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Verify installation:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">helmwave --version\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Explanation of the <code>helmwave.yml<\/code> Configuration File Structure<\/strong><\/h2>\n\n\n\n<p>The <code>helmwave.yml<\/code> file is your manifest. Here\u2019s a minimal structure:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\"># helmwave.yml\nproject: my-app\nreleases:\n  - name: frontend\n    chart: stable\/nginx\n    namespace: frontend\n    values: &#91;frontend-values.yaml]\n  - name: backend\n    chart: stable\/redis\n    namespace: backend\n    values: &#91;backend-values.yaml]\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>Sections Explained<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>project:<\/strong> Optional project name.<\/li>\n\n\n\n<li><strong>releases:<\/strong> List of charts (each with name, chart, namespace, values).<\/li>\n\n\n\n<li><strong>depends_on:<\/strong> (Advanced) Specify dependencies between releases.<\/li>\n\n\n\n<li><strong>environments:<\/strong> (Advanced) Define multi-env setups.<\/li>\n\n\n\n<li><strong>templates:<\/strong> Use templates for DRY configs.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Creating and Managing Simple Deployments<\/strong><\/h2>\n\n\n\n<p><strong>Step 1: Scaffold your manifest<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">releases:\n  - name: my-nginx\n    chart: bitnami\/nginx\n    namespace: web\n    values: &#91;nginx-values.yaml]\n<\/code><\/span><\/pre>\n\n\n<p><strong>Step 2: Prepare your values files<\/strong><\/p>\n\n\n\n<p>Create <code>nginx-values.yaml<\/code> as needed.<\/p>\n\n\n\n<p><strong>Step 3: Render and apply<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Build the plan (renders manifests)<\/span>\nhelmwave build\n\n<span class=\"hljs-comment\"># Apply (deploy to your cluster)<\/span>\nhelmwave up\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. Handling Dependencies Between Releases<\/strong><\/h2>\n\n\n\n<p>You can model dependencies to ensure ordering:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">releases:\n  - name: database\n    chart: bitnami\/mysql\n    <span class=\"hljs-keyword\">namespace<\/span>: <span class=\"hljs-title\">data<\/span>\n  - <span class=\"hljs-title\">name<\/span>: <span class=\"hljs-title\">api<\/span>\n    <span class=\"hljs-title\">chart<\/span>: <span class=\"hljs-title\">myorg<\/span>\/<span class=\"hljs-title\">api<\/span>\n    <span class=\"hljs-title\">namespace<\/span>: <span class=\"hljs-title\">backend<\/span>\n    <span class=\"hljs-title\">depends_on<\/span>:\n      - <span class=\"hljs-title\">database<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Result:<\/strong><br><code>api<\/code> will be deployed after <code>database<\/code> is ready.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>6. Using Environment Variables and Secrets<\/strong><\/h2>\n\n\n\n<p>Helmwave supports <a href=\"https:\/\/github.com\/mozilla\/sops\" target=\"_blank\" rel=\"noopener\">SOPS<\/a> for secrets, and <code>.env<\/code> files for variables.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">releases:\n  - name: myapp\n    chart: myorg\/myapp\n    values: &#91;values.yaml, secrets.enc.yaml]   <span class=\"hljs-comment\"># secrets can be encrypted<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Using environment variables in values:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># values.yaml<\/span>\ndb_password: ${DB_PASSWORD}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Load env vars from <code>.env<\/code> file or your environment:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">export<\/span> DB_PASSWORD=supersecret\nhelmwave up\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>7. Parallel and Modular Deployments<\/strong><\/h2>\n\n\n\n<p><strong>Parallel execution<\/strong> is the default\u2014Helmwave will build a dependency graph and deploy releases in parallel where possible.<\/p>\n\n\n\n<p><strong>Modularity:<\/strong><br>You can split releases and values into separate files, reuse charts, and compose projects using templates.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">releases:\n  - name: payment\n    chart: myorg\/payment\n    values: &#91;env\/{{ .Environment.Name }}\/payment-values.yaml]\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>8. Advanced Templating and Use of Values<\/strong><\/h2>\n\n\n\n<p>Helmwave supports Go templating in YAML files:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">releases:\n  - name: <span class=\"hljs-string\">\"{{ .Values.name }}\"<\/span>\n    <span class=\"hljs-attr\">chart<\/span>: <span class=\"hljs-string\">\"{{ .Values.chart }}\"<\/span>\n    <span class=\"hljs-attr\">namespace<\/span>: <span class=\"hljs-string\">\"{{ .Values.namespace }}\"<\/span>\n    <span class=\"hljs-attr\">values<\/span>: &#91;<span class=\"hljs-string\">\"{{ .Values.valuesFile }}\"<\/span>]\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Use a <code>values.yaml<\/code> for DRY configs and import with <code>--values<\/code> or reference from environments.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>9. Best Practices for Multi-Environment Management<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Use environments:<\/strong><br>Structure your project like this: <code>environments: dev: values: [values-dev.yaml] prod: values: [values-prod.yaml]<\/code><\/li>\n\n\n\n<li><strong>Run per-environment:<\/strong> <code>helmwave --environment dev up helmwave --environment prod up<\/code><\/li>\n\n\n\n<li><strong>Directory layout:<\/strong> <code>helmwave.yml values-dev.yaml values-prod.yaml releases\/ frontend-values.yaml backend-values.yaml<\/code><\/li>\n\n\n\n<li><strong>DRY:<\/strong> Use templates and variables as much as possible.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>10. Integrating Helmwave into CI\/CD Pipelines<\/strong><\/h2>\n\n\n\n<p><strong>Example (GitHub Actions):<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">- name: <span class=\"hljs-built_in\">Set<\/span> up Helmwave\n  <span class=\"hljs-attr\">run<\/span>: |\n    curl -sSL https:<span class=\"hljs-comment\">\/\/github.com\/helmwave\/helmwave\/releases\/latest\/download\/helmwave-Linux-amd64.tar.gz | tar xz<\/span>\n    sudo mv helmwave \/usr\/local\/bin\/\n\n- name: Deploy <span class=\"hljs-keyword\">with<\/span> Helmwave\n  <span class=\"hljs-attr\">env<\/span>:\n    KUBECONFIG: ${{ secrets.KUBECONFIG }}\n  <span class=\"hljs-attr\">run<\/span>: |\n    helmwave build\n    helmwave up\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Tips:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Store secrets securely (GitHub Secrets, SOPS, etc.)<\/li>\n\n\n\n<li>Parameterize your pipeline for environments.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>11. Debugging, Troubleshooting, and Tips for Optimization<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <code>helmwave plan<\/code> to preview changes before applying.<\/li>\n\n\n\n<li>Run with increased verbosity: <code>helmwave --log-level debug up<\/code><\/li>\n\n\n\n<li>For failed releases, check Helm logs: <code>helm ls -n &lt;namespace><\/code><\/li>\n\n\n\n<li>Validate your manifest: <code>helmwave lint<\/code><\/li>\n\n\n\n<li>Use <code>helmwave down<\/code> to remove all releases managed by your manifest.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>12. Real-World Examples and Sample Projects<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sample Project Structure:<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">my-helmwave-project\/\n  helmwave.yml\n  values-dev.yaml\n  values-prod.yaml\n  releases\/\n    nginx-values.yaml\n    redis-values.yaml\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>Example: Microservices Stack<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">releases:\n  - name: users\n    chart: myorg\/users-service\n    namespace: micro\n    values: &#91;releases\/users-values.yaml]\n    depends_on: &#91;]\n  - name: orders\n    chart: myorg\/orders-service\n    namespace: micro\n    values: &#91;releases\/orders-values.yaml]\n    depends_on: &#91;users]\n  - name: payment\n    chart: myorg\/payment-service\n    namespace: micro\n    values: &#91;releases\/payment-values.yaml]\n    depends_on: &#91;orders]\n<\/code><\/span><\/pre>\n\n\n<p>This sets up <code>users<\/code> first, then <code>orders<\/code>, then <code>payment<\/code>\u2014with each using its own values file.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>13. Comparison with Similar Tools<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Helmwave<\/th><th>Helmfile<\/th><th>Helmsman<\/th><\/tr><\/thead><tbody><tr><td>Config Format<\/td><td>YAML (templated)<\/td><td>YAML (templated)<\/td><td>YAML\/JSON\/DSL<\/td><\/tr><tr><td>Dependency Graph &amp; Parallelism<\/td><td>\u2705 (core feature)<\/td><td>\ud83d\udeab (serial or basic ordering)<\/td><td>\ud83d\udeab (basic priorities)<\/td><\/tr><tr><td>Modularity<\/td><td>\u2705<\/td><td>\u26a0\ufe0f (some)<\/td><td>\u26a0\ufe0f (some)<\/td><\/tr><tr><td>Secret Mgmt<\/td><td>\u2705 (via SOPS)<\/td><td>\u2705 (various)<\/td><td>\u2705 (native)<\/td><\/tr><tr><td>CI\/CD Friendly<\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u2705<\/td><\/tr><tr><td>RBAC &amp; Policy<\/td><td>\u26a0\ufe0f (some)<\/td><td>\u26a0\ufe0f (some)<\/td><td>\u2705 (core feature)<\/td><\/tr><tr><td>Drift Detection<\/td><td>\ud83d\udeab<\/td><td>\ud83d\udeab<\/td><td>\u2705<\/td><\/tr><tr><td>Adoption\/Maturity<\/td><td>Medium<\/td><td>High<\/td><td>Medium<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Helmwave:<\/strong> Best for parallel, modular, fast deployments; modern design for CI\/CD.<\/li>\n\n\n\n<li><strong>Helmfile:<\/strong> Most widely used, flexible, simple for most teams.<\/li>\n\n\n\n<li><strong>Helmsman:<\/strong> Focuses on governance, drift detection, and policy.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>Helmwave is a powerful tool for anyone looking to <strong>scale, speed up, and organize Helm-based Kubernetes deployments<\/strong>. With built-in support for parallelism, modularity, and multi-environment management, it fits perfectly into modern GitOps and CI\/CD workflows.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Additional Resources<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/helmwave\/helmwave\" target=\"_blank\" rel=\"noopener\">Helmwave GitHub<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/helmwave.github.io\/\" target=\"_blank\" rel=\"noopener\">Official Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/artifacthub.io\/packages\/search?kind=0\" target=\"_blank\" rel=\"noopener\">Helm Chart Hub<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction to Helmwave and Its Core Concepts Helmwave is a modern tool for orchestrating complex Helm deployments, enabling you to manage, templatize, and execute multiple Helm chart releases\u2014in parallel&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49950","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49950"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49950\/revisions"}],"predecessor-version":[{"id":49951,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49950\/revisions\/49951"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}