<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Tushar Verma | DevOps Engineer]]></title><description><![CDATA[Hi, I'm Tushar Verma — a DevOps Engineer from Punjab, India.
This blog is my Learn in Public journey where I openly document my open-source contributions, real-]]></description><link>https://tusharrverma.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/69e538b713e74eec584d0922/aec96bec-8428-4162-a76d-2b101eba411c.jpg</url><title>Tushar Verma | DevOps Engineer</title><link>https://tusharrverma.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 23:21:29 GMT</lastBuildDate><atom:link href="https://tusharrverma.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[I Built a Free CAF compliant Azure Resource Naming Tool]]></title><description><![CDATA[Naming Azure resources is one of those deceptively annoying problems. Microsoft's Cloud Adoption Framework (CAF) gives you a solid convention, but the rules are scattered across docs — and every resou]]></description><link>https://tusharrverma.hashnode.dev/i-built-a-free-caf-compliant-azure-resource-naming-tool</link><guid isPermaLink="true">https://tusharrverma.hashnode.dev/i-built-a-free-caf-compliant-azure-resource-naming-tool</guid><category><![CDATA[Azure]]></category><category><![CDATA[azure-devops]]></category><category><![CDATA[Terraform]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[#IaC]]></category><category><![CDATA[Azure Policy]]></category><category><![CDATA[azure naming tools]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[Tushar Verma]]></dc:creator><pubDate>Mon, 29 Jun 2026 13:27:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69e538b713e74eec584d0922/30800f09-81cd-440a-b18d-ac6eec41b9ff.svg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Naming Azure resources is one of those deceptively annoying problems. Microsoft's Cloud Adoption Framework (CAF) gives you a solid convention, but the rules are scattered across docs — and <strong>every resource type has its own constraints</strong>. Get one wrong and you often can't rename it; you delete and recreate.</p>
<p>After hitting this across enough client projects, I built a free tool to fix it: <a href="https://azurenamingconventions.com/">AzureNamer</a>.</p>
<h2><strong>The part that actually bites: per-resource rules</strong></h2>
<p>The pattern itself is simple — <code>{type}-{workload}-{environment}-{region}-{instance}</code>, e.g. <code>kv-payments-prod-eus-001</code>. What's <em>not</em> simple is that the rules change per resource:</p>
<table>
<thead>
<tr>
<th><strong>Resource</strong></th>
<th><strong>Limit</strong></th>
<th><strong>Catch</strong></th>
</tr>
</thead>
<tbody><tr>
<td>Storage account</td>
<td>3–24</td>
<td>lowercase, <strong>no hyphens</strong>, globally unique</td>
</tr>
<tr>
<td>Windows VM</td>
<td>15</td>
<td>NetBIOS host-name limit (Linux allows 64)</td>
</tr>
<tr>
<td>Container registry</td>
<td>5–50</td>
<td>alphanumeric, <strong>no hyphens</strong></td>
</tr>
<tr>
<td>Key Vault</td>
<td>3–24</td>
<td>no consecutive hyphens, globally unique</td>
</tr>
<tr>
<td>App Service</td>
<td>60</td>
<td>hyphens fine</td>
</tr>
</tbody></table>
<p>So <code>stPayments-Prod</code> looks perfectly reasonable and then fails at deploy — storage accounts reject hyphens and capitals. Multiply that across 200+ resource types and you've got the problem.</p>
<h2><strong>What the tool does</strong></h2>
<ul>
<li><p><strong>Generates CAF compliant names for 200+ resource types</strong>, applying each one's real length and character rules automatically (verified against Microsoft's official naming-rules doc).</p>
</li>
<li><p><strong>Exports straight to CSV, Terraform, Bicep, JSON or a Markdown</strong> — so you get multiple options to export as per your needs.</p>
</li>
<li><p><strong>Reverse parser:</strong> paste an existing name (<code>kv-payments-prod-eus-001</code>) and it breaks back into type / workload / environment / region.</p>
</li>
<li><p><strong>Free, no login, no signup.</strong> It's a static site — nothing to deploy or configure.</p>
</li>
</ul>
<h2><strong>Honest scope</strong></h2>
<p>It validates <em>format</em> — length, characters, separators. It can't check <em>global uniqueness</em> (that needs a live Azure API call), so it won't save you from a <code>StorageAccountAlreadyTaken</code> collision — but it flags which resources are global and bakes in region + instance entropy to lower the odds.</p>
<p>I'd genuinely like feedback — wrong abbreviations, missing resources, anything off. There's a feedback link on the site.</p>
<p>If naming Azure resources has ever cost you a deploy: <a href="https://azurenamingconventions.com">https://azurenamingconventions.com</a></p>
]]></content:encoded></item><item><title><![CDATA[My First Two Contributions to the Official Terraform AzureRM Provider]]></title><description><![CDATA[I'm Tushar, a DevOps Engineer from Punjab, India.
This blog is my Learn in Public journey where I openly document my open-source contributions, real-world DevOps challenges, and the lessons I learn al]]></description><link>https://tusharrverma.hashnode.dev/my-first-two-contributions-to-the-official-terraform-azurerm-provider</link><guid isPermaLink="true">https://tusharrverma.hashnode.dev/my-first-two-contributions-to-the-official-terraform-azurerm-provider</guid><category><![CDATA[Terraform]]></category><category><![CDATA[AzureRM]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Devops]]></category><category><![CDATA[#LearninPublic]]></category><category><![CDATA[#IaC]]></category><category><![CDATA[golang]]></category><dc:creator><![CDATA[Tushar Verma]]></dc:creator><pubDate>Tue, 21 Apr 2026 06:05:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69e538b713e74eec584d0922/7203162c-bc06-45d5-9497-d298aaa29478.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I'm Tushar, a DevOps Engineer from Punjab, India.</p>
<p>This blog is my <strong>Learn in Public</strong> journey where I openly document my open-source contributions, real-world DevOps challenges, and the lessons I learn along the way.</p>
<p>This week I shipped <strong>my first two Pull Requests</strong> to the official <a href="https://github.com/hashicorp/terraform-provider-azurerm"><code>hashicorp/terraform-provider-azurerm</code></a> repository. Here's the complete story.</p>
<h3>PR #1: Better Documentation for <code>capacity_reservation_group_id</code></h3>
<p><strong>Issue:</strong> <a href="https://github.com/hashicorp/terraform-provider-azurerm/issues/32197">#32197</a></p>
<p>When you associate an existing zonal VM to a Capacity Reservation Group, Terraform was causing a reboot. The reporter asked: <em>“Should this require a reboot, or should the documentation clearly state it?”</em></p>
<p><strong>What I did:</strong></p>
<ul>
<li><p>Added a clear warning in both <code>azurerm_linux_virtual_machine</code> and <code>azurerm_windows_virtual_machine</code> resources.</p>
</li>
<li><p>Explained that for <strong>zonal VMs</strong> this is possible without deallocation, but the feature is currently in <strong>Preview</strong> by Microsoft.</p>
</li>
<li><p>Updated the public documentation with the same note and link to Microsoft docs.</p>
</li>
</ul>
<p><strong>PR:</strong> <a href="https://github.com/hashicorp/terraform-provider-azurerm/pull/32207">docs: improve capacity_reservation_group_id documentation with reboot/Preview note (closes #32197)</a></p>
<h3>PR #2: Fixing a Regression in <code>azurerm_private_endpoint</code></h3>
<p><strong>Issue:</strong> <a href="https://github.com/hashicorp/terraform-provider-azurerm/issues/32206">#32206</a></p>
<p>A recent change (<a href="https://github.com/hashicorp/terraform-provider-azurerm/pull/31705">#31705</a>) moved validation to plan-time. Suddenly, this config started failing:</p>
<pre><code class="language-hcl">private_service_connection {
  name                              = "x_private_endpoint"
  is_manual_connection              = true
  private_connection_resource_alias = "..."
  request_message                   = ""   # ← This was now invalid
}
</code></pre>
<p><strong>What I did:</strong></p>
<ul>
<li><p>Changed validation from StringLenBetween(1, 140) to StringLenBetween(0, 140).</p>
</li>
<li><p>Removed the overly strict empty-string check in CustomizeDiff.</p>
</li>
</ul>
<p>Now the behavior matches the official documentation (the field is truly <strong>Optional</strong> when is_manual_connection = true).</p>
<p><strong>PR:</strong> <a href="https://github.com/hashicorp/terraform-provider-azurerm/pull/32216">fix: allow empty request_message when is_manual_connection = true in azurerm_private_endpoint (closes #32206)</a></p>
<h3>The Real Journey</h3>
<p>The hardest part wasn’t the code — it was setting up the development environment on <strong>Windows</strong>:</p>
<ul>
<li><p>Fighting with .terraformrc vs terraform.rc</p>
</li>
<li><p>Understanding dev_overrides</p>
</li>
<li><p>Cleaning cache and lock files again and again</p>
</li>
<li><p>Relearning git rebase and force-pushing</p>
</li>
</ul>
<p>There were multiple moments where terraform plan kept using the old released version. The struggle taught me a lot about how Terraform providers actually work.</p>
<h3>What I Learned</h3>
<ul>
<li><p>How to properly claim issues and contribute to large Go-based providers.</p>
</li>
<li><p>The importance of reading CustomizeDiff and schema definitions.</p>
</li>
<li><p>Git workflow for open-source contributions.</p>
</li>
<li><p>That even “small” fixes (docs + validation) are genuinely valuable to the community.</p>
</li>
</ul>
<h3>What’s Next?</h3>
<p>I’m planning to continue contributing regularly to the Terraform AzureRM provider and other DevOps-related open-source projects.</p>
<p>Would love your suggestions — which issue should I tackle next? Drop a comment or tag me on X.</p>
<h3><strong>Links</strong></h3>
<ul>
<li><p>First PR: <a href="https://github.com/hashicorp/terraform-provider-azurerm/pull/32207">docs: improve capacity_reservation_group_id documentation with reboot/Preview note (closes #32197)</a></p>
</li>
<li><p>Second PR: <a href="https://github.com/hashicorp/terraform-provider-azurerm/pull/32216">fix: allow empty request_message when is_manual_connection = true in azurerm_private_endpoint (closes #32206)</a></p>
</li>
<li><p>Terraform AzureRM Provider: <a href="https://github.com/hashicorp/terraform-provider-azurerm">https://github.com/hashicorp/terraform-provider-azurerm</a></p>
</li>
</ul>
]]></content:encoded></item></channel></rss>