{"id":103,"date":"2026-01-29T12:00:00","date_gmt":"2026-01-29T12:00:00","guid":{"rendered":"https:\/\/rezachegini.com\/?p=103"},"modified":"2026-10-30T07:03:16","modified_gmt":"2026-10-30T07:03:16","slug":"understanding-linked-templates-in-arm-making-code-reusable","status":"publish","type":"post","link":"https:\/\/rezachegini.com\/?p=103","title":{"rendered":"Understanding Linked Templates in ARM: Making Code Reusable"},"content":{"rendered":"<h3 class=\"wp-block-heading\">Why I Needed Linked Templates<\/h3><p class=\"wp-block-paragraph\">Hello everyone! After I created my VM template (250+ lines!), I had a problem. Every time I wanted to deploy a VM with SQL Database, I copied the same code many times. This was bad:<\/p><ol class=\"wp-block-list\"><li>Same code everywhere &#8211; I copy-paste SQL code in every template<\/li><li>Hard to fix bugs &#8211; If I find a bug, I must fix it in 10 different files<\/li><li>Files too big &#8211; 500+ lines in one file is hard to read<\/li><li>Cannot share &#8211; My team cannot use my SQL code easily<\/li><\/ol><p class=\"wp-block-paragraph\">Then I learned about Linked Templates. This solved all my problems!<\/p><h3 class=\"wp-block-heading\">What Are Linked Templates?<\/h3><p class=\"wp-block-paragraph\">Linked templates help you split one big template into small pieces. Each piece is a separate file. You can use the same piece many times.<\/p><p class=\"wp-block-paragraph\">Simple example:<\/p><p class=\"wp-block-paragraph\">Before (one big file):<\/p><pre class=\"wp-block-code\"><code>my-big-template.json (500 lines)\n- Network code\n- Storage code\n- SQL code\n- VM code\n- Web App code<\/code><\/pre><p class=\"wp-block-paragraph\">After (many small files):<\/p><pre class=\"wp-block-code\"><code>main.json (50 lines)\n- Links to sql.json (80 lines)\n- Links to network.json (100 lines)\n- Links to storage.json (30 lines)<\/code><\/pre><p class=\"wp-block-paragraph\">It&#8217;s like Lego blocks! Each block is separate, but you connect them together.<\/p><h3 class=\"wp-block-heading\">My First Linked Template<\/h3><p class=\"wp-block-paragraph\">I want to create:<\/p><ol class=\"wp-block-list\"><li>Web App &#8211; In main template<\/li><li>SQL Database &#8211; In linked template (separate file)<\/li><\/ol><p class=\"wp-block-paragraph\">Why? Because I can use the SQL template again in other projects!<\/p><h3 class=\"wp-block-heading\">Step 1: Create SQL Template File<\/h3><p class=\"wp-block-paragraph\">This is my SQL template. It will be the &#8220;linked&#8221; file:<\/p><p class=\"wp-block-paragraph\">File name: 03-sqldatabase.json<\/p><pre class=\"wp-block-code\"><code>{\n    \"$schema\": \"https:\/\/schema.management.azure.com\/schemas\/2019-04-01\/deploymentTemplate.json#\",\n    \"contentVersion\": \"1.0.0.0\",\n    \"parameters\": {\n        \"SQLLogin\": {\n            \"type\": \"string\",\n            \"metadata\": {\n              \"description\": \"The administrator user name for the Azure SQL Server\"\n            }\n        },\n        \"SQLPassword\": {\n            \"type\": \"secureString\",\n            \"metadata\": {\n              \"description\": \"The administrator password for the Azure SQL Server\"\n            }\n        }\n    },\n    \"functions\": [],\n    \"variables\": { },\n    \"resources\": [\n        {\n            \"name\": \"sqlserver500505\",\n            \"type\": \"Microsoft.Sql\/servers\",\n            \"apiVersion\": \"2021-08-01-preview\",\n            \"location\": \"[resourceGroup().location]\",\n            \"properties\": {\n                \"administratorLogin\": \"[parameters('SQLLogin')]\",\n                \"administratorLoginPassword\": \"[parameters('SQLPassword')]\"\n            }\n        },\n        {\n            \"name\": \"[format('{0}\/{1}', 'sqlserver500505', 'appdb')]\",\n            \"type\": \"Microsoft.Sql\/servers\/databases\",\n            \"apiVersion\": \"2021-08-01-preview\",\n            \"location\": \"[resourceGroup().location]\",\n            \"dependsOn\": [\n                \"[resourceId('Microsoft.Sql\/servers', 'sqlserver500505')]\"\n            ],\n            \"sku\": {\n                \"name\": \"Basic\",\n                \"tier\": \"Basic\"\n            },\n            \"properties\": {}\n        }\n    ],\n    \"outputs\": {}\n}<\/code><\/pre><p class=\"wp-block-paragraph\">This is just a normal ARM template for SQL Server and Database. Nothing special yet!<\/p><p class=\"wp-block-paragraph\">Important: It uses parameters, not hardcoded values. This makes it reusable.<\/p><h3 class=\"wp-block-heading\">Step 2: Create Parameter File<\/h3><p class=\"wp-block-paragraph\">I create a separate file for the parameter values:<\/p><p class=\"wp-block-paragraph\">File name: 02-sqldatabase-parameters.json<\/p><pre class=\"wp-block-code\"><code>{\n  \"$schema\": \"https:\/\/schema.management.azure.com\/schemas\/2019-04-01\/deploymentParameters.json#\",\n  \"contentVersion\": \"1.0.0.0\",\n  \"parameters\": {\n    \"SQLLogin\": {\n      \"value\": \"sqlusr\"\n    },\n    \"SQLPassword\": {\n      \"value\": \"Azure@123\"\n    }\n  }\n}<\/code><\/pre><p class=\"wp-block-paragraph\">This file has the actual username and password.<\/p><p class=\"wp-block-paragraph\">Why separate files?<\/p><ul class=\"wp-block-list\"><li>Template = What to create<\/li><li>Parameters = The values to use<\/li><\/ul><p class=\"wp-block-paragraph\">I can have different parameter files for dev, test, and production!<\/p><h3 class=\"wp-block-heading\">Step 3: Upload Files to Azure Blob Storage<\/h3><p class=\"wp-block-paragraph\">Linked templates must be on the internet. Azure needs to download them. I use Azure Blob Storage.<\/p><h3 class=\"wp-block-heading\">Create Storage Account<\/h3><pre class=\"wp-block-code\"><code># Create storage account\naz storage account create \\\n  --name rezatemplate9473 \\\n  --resource-group template-grp \\\n  --location \"North Europe\" \\\n  --sku Standard_LRS\n\n# Get the key\nSTORAGE_KEY=$(az storage account keys list \\\n  --resource-group template-grp \\\n  --account-name rezatemplate9473 \\\n  --query '[0].value' \\\n  --output tsv)\n\n# Create container (like a folder)\naz storage container create \\\n  --name template \\\n  --account-name rezatemplate9473 \\\n  --account-key $STORAGE_KEY \\\n  --public-access blob<\/code><\/pre><p class=\"wp-block-paragraph\">Important: &#8211;public-access blob means anyone can read the files. This is OK for learning. For production, use better security!<\/p><h3 class=\"wp-block-heading\">Upload Files<\/h3><pre class=\"wp-block-code\"><code># Upload SQL template\naz storage blob upload \\\n  --account-name rezatemplate9473 \\\n  --account-key $STORAGE_KEY \\\n  --container-name template \\\n  --name 03-sqldatabase.json \\\n  --file 03-sqldatabase.json\n\n# Upload parameter file\naz storage blob upload \\\n  --account-name rezatemplate9473 \\\n  --account-key $STORAGE_KEY \\\n  --container-name template \\\n  --name 02-sqldatabase-parameters.json \\\n  --file 02-sqldatabase-parameters.json<\/code><\/pre><p class=\"wp-block-paragraph\">Now my files are on the internet!<\/p><h3 class=\"wp-block-heading\">Get the URL<\/h3><pre class=\"wp-block-code\"><code>az storage blob url \\\n  --account-name rezatemplate9473 \\\n  --container-name template \\\n  --name 03-sqldatabase.json \\\n  --output tsv<\/code><\/pre><p class=\"wp-block-paragraph\">This gives me:<\/p><pre class=\"wp-block-code\"><code>https:\/\/rezatemplate9473.blob.core.windows.net\/template\/03-sqldatabase.json<\/code><\/pre><p class=\"wp-block-paragraph\">I will use this URL in my main template!<\/p><h3 class=\"wp-block-heading\">Step 4: Create Main Template<\/h3><p class=\"wp-block-paragraph\">Now I create the main template. This template will &#8220;call&#8221; the SQL template:<\/p><p class=\"wp-block-paragraph\">File name: 01-main.json<\/p><pre class=\"wp-block-code\"><code>{\n    \"$schema\": \"https:\/\/schema.management.azure.com\/schemas\/2019-04-01\/deploymentTemplate.json#\",\n    \"contentVersion\": \"1.0.0.0\",\n    \"parameters\": {},\n    \"functions\": [],\n    \"variables\": {},\n    \"resources\": [\n        {\n            \"name\": \"plan787878\",\n            \"type\": \"Microsoft.Web\/serverfarms\",\n            \"apiVersion\": \"2020-12-01\",\n            \"location\": \"[resourceGroup().location]\",\n            \"sku\": {\n                \"name\": \"S1\",\n                \"capacity\": 1\n            },\n            \"properties\": {\n                \"name\": \"plan787878\"\n            }\n        },\n        {\n            \"name\": \"newapp994848\",\n            \"type\": \"Microsoft.Web\/sites\",\n            \"apiVersion\": \"2020-12-01\",\n            \"location\": \"[resourceGroup().location]\",\n            \"dependsOn\": [\n                \"[resourceId('Microsoft.Web\/serverfarms', 'plan787878')]\"\n            ],\n            \"properties\": {\n                \"name\": \"newapp994848\",\n                \"serverFarmId\": \"[resourceId('Microsoft.Web\/serverfarms', 'plan787878')]\"\n            }\n        },\n        {\n            \"type\": \"Microsoft.Resources\/deployments\",\n            \"apiVersion\": \"2021-04-01\",\n            \"name\": \"LinkedTemplate\",\n            \"properties\": {\n                \"mode\": \"Incremental\",\n                \"templateLink\": {\n                  \"uri\": \"https:\/\/rezatemplate9473.blob.core.windows.net\/template\/03-sqldatabase.json\",\n                  \"contentVersion\": \"1.0.0.0\"\n                },\n                \"parametersLink\": {\n                    \"uri\": \"https:\/\/rezatemplate9473.blob.core.windows.net\/template\/02-sqldatabase-parameters.json\",\n                    \"contentVersion\": \"1.0.0.0\"\n                }\n            }\n        }\n    ],\n    \"outputs\": {}\n}<\/code><\/pre><h3 class=\"wp-block-heading\">The Important Part &#8211; Linked Deployment<\/h3><p class=\"wp-block-paragraph\">Look at this section:<\/p><pre class=\"wp-block-code\"><code>{\n    \"type\": \"Microsoft.Resources\/deployments\",\n    \"apiVersion\": \"2021-04-01\",\n    \"name\": \"LinkedTemplate\",\n    \"properties\": {\n        \"mode\": \"Incremental\",\n        \"templateLink\": {\n          \"uri\": \"https:\/\/rezatemplate9473.blob.core.windows.net\/template\/03-sqldatabase.json\",\n          \"contentVersion\": \"1.0.0.0\"\n        },\n        \"parametersLink\": {\n            \"uri\": \"https:\/\/rezatemplate9473.blob.core.windows.net\/template\/02-sqldatabase-parameters.json\",\n            \"contentVersion\": \"1.0.0.0\"\n        }\n    }\n}<\/code><\/pre><p class=\"wp-block-paragraph\">What does this do?<\/p><ol class=\"wp-block-list\"><li>type: Microsoft.Resources\/deployments &#8211; This is a special resource. It calls another template.<\/li><li>name: LinkedTemplate &#8211; Just a name. I can use any name.<\/li><li>mode: Incremental &#8211; This means &#8220;only create new resources, don&#8217;t delete existing ones&#8221;. Always use this!<\/li><li>templateLink: uri &#8211; URL to my SQL template<\/li><li>parametersLink: uri &#8211; URL to my parameter file<\/li><\/ol><p class=\"wp-block-paragraph\">Simple explanation:<\/p><p class=\"wp-block-paragraph\">&#8220;Hey Azure, please download the SQL template from this URL, download the parameters from this URL, and deploy them!&#8221;<\/p><h3 class=\"wp-block-heading\">Step 5: Deploy Everything<\/h3><p class=\"wp-block-paragraph\">Now I deploy the main template:<\/p><pre class=\"wp-block-code\"><code># Create resource group\naz group create \\\n  --name linked-template-grp \\\n  --location \"North Europe\"\n\n# Deploy main template\naz deployment group create \\\n  --resource-group linked-template-grp \\\n  --template-file 01-main.json<\/code><\/pre><p class=\"wp-block-paragraph\">What happens:<\/p><ol class=\"wp-block-list\"><li>Azure starts deploying main template<\/li><li>Azure creates App Service Plan<\/li><li>Azure creates Web App<\/li><li>Azure sees the linked deployment resource<\/li><li>Azure downloads SQL template from blob storage<\/li><li>Azure downloads parameter file from blob storage<\/li><li>Azure deploys SQL Server and Database<\/li><li>Done!<\/li><\/ol><p class=\"wp-block-paragraph\">Total time: about 8 minutes.<\/p><h3 class=\"wp-block-heading\">My Mistakes and Fixes<\/h3><h3 class=\"wp-block-heading\">Mistake 1: Forgot to Make Container Public<\/h3><p class=\"wp-block-paragraph\">I created the container but forgot &#8211;public-access blob.<\/p><p class=\"wp-block-paragraph\">Error:<\/p><pre class=\"wp-block-code\"><code>Failed to download template\nStatus code: 404<\/code><\/pre><p class=\"wp-block-paragraph\">Azure couldn&#8217;t download my template because it was private!<\/p><p class=\"wp-block-paragraph\">Fix:<\/p><pre class=\"wp-block-code\"><code>az storage container set-permission \\\n  --name template \\\n  --account-name rezatemplate9473 \\\n  --public-access blob<\/code><\/pre><h3 class=\"wp-block-heading\">Mistake 2: Wrong URL<\/h3><p class=\"wp-block-paragraph\">I typed the URL wrong in my main template:<\/p><pre class=\"wp-block-code\"><code>\"uri\": \"https:\/\/rezatemplate9473.blob.core.windows.net\/template\/sqldatabase.json\"\n\/\/ I forgot the \"03-\" at the start!<\/code><\/pre><p class=\"wp-block-paragraph\">Fix: Copy the exact URL from Azure CLI:<\/p><pre class=\"wp-block-code\"><code>az storage blob url \\\n  --account-name rezatemplate9473 \\\n  --container-name template \\\n  --name 03-sqldatabase.json<\/code><\/pre><p class=\"wp-block-paragraph\">Then paste it carefully!<\/p><h3 class=\"wp-block-heading\">Mistake 3: Used &#8220;Complete&#8221; Mode<\/h3><p class=\"wp-block-paragraph\">First time I wrote:<\/p><pre class=\"wp-block-code\"><code>\"mode\": \"Complete\"<\/code><\/pre><p class=\"wp-block-paragraph\">This is dangerous! &#8220;Complete&#8221; mode deletes resources that are NOT in the template.<\/p><p class=\"wp-block-paragraph\">I had a storage account in my resource group. When I deployed with &#8220;Complete&#8221; mode, Azure deleted my storage account!<\/p><p class=\"wp-block-paragraph\">Fix: Always use &#8220;Incremental&#8221; mode:<\/p><pre class=\"wp-block-code\"><code>\"mode\": \"Incremental\"<\/code><\/pre><h3 class=\"wp-block-heading\">Mistake 4: Parameter Names Don&#8217;t Match<\/h3><p class=\"wp-block-paragraph\">In my template:<\/p><pre class=\"wp-block-code\"><code>\"parameters\": {\n    \"SQLLogin\": {  \/\/ Capital L<\/code><\/pre><p class=\"wp-block-paragraph\">In my parameter file:<\/p><pre class=\"wp-block-code\"><code>\"parameters\": {\n    \"sqlLogin\": {  \/\/ lowercase l<\/code><\/pre><p class=\"wp-block-paragraph\">Error:<\/p><pre class=\"wp-block-code\"><code>Template parameter 'SQLLogin' is not provided<\/code><\/pre><p class=\"wp-block-paragraph\">Parameter names are case-sensitive! They must match exactly.<\/p><p class=\"wp-block-paragraph\">Fix: Use the same name everywhere.<\/p><h3 class=\"wp-block-heading\">Why Linked Templates Are Good<\/h3><p class=\"wp-block-paragraph\">After I started using linked templates, I learned these benefits:<\/p><h3 class=\"wp-block-heading\">1. I Can Reuse Code<\/h3><p class=\"wp-block-paragraph\">I created one SQL template. Now I use it in 5 projects:<\/p><ul class=\"wp-block-list\"><li>Project A: Web App + SQL<\/li><li>Project B: VM + SQL<\/li><li>Project C: Function App + SQL<\/li><\/ul><p class=\"wp-block-paragraph\">Same SQL code everywhere! I don&#8217;t copy-paste anymore.<\/p><h3 class=\"wp-block-heading\">2. Easy to Fix Bugs<\/h3><p class=\"wp-block-paragraph\">I found a bug in my SQL template. I only need to fix it once:<\/p><pre class=\"wp-block-code\"><code># Fix the template\nvim 03-sqldatabase.json\n\n# Upload new version\naz storage blob upload \\\n  --account-name rezatemplate9473 \\\n  --container-name template \\\n  --name 03-sqldatabase.json \\\n  --file 03-sqldatabase.json \\\n  --overwrite<\/code><\/pre><p class=\"wp-block-paragraph\">Done! All 5 projects get the fix on next deployment.<\/p><h3 class=\"wp-block-heading\">3. Smaller Files<\/h3><p class=\"wp-block-paragraph\">Before: One file with 500 lines &#8211; hard to read!<\/p><p class=\"wp-block-paragraph\">After:<\/p><ul class=\"wp-block-list\"><li>Main file: 50 lines<\/li><li>SQL file: 80 lines<\/li><li>Network file: 100 lines<\/li><\/ul><p class=\"wp-block-paragraph\">Each file is small and easy to understand.<\/p><h3 class=\"wp-block-heading\">4. Team Can Share<\/h3><p class=\"wp-block-paragraph\">My team has different people:<\/p><ul class=\"wp-block-list\"><li>Network expert makes network templates<\/li><li>Database expert makes SQL templates<\/li><li>I make Web App templates<\/li><\/ul><p class=\"wp-block-paragraph\">We share templates! I use their templates in my projects.<\/p><h3 class=\"wp-block-heading\">5. Easy to Test<\/h3><p class=\"wp-block-paragraph\">I can test each template separately:<\/p><pre class=\"wp-block-code\"><code># Test only SQL template\naz deployment group create \\\n  --resource-group test-rg \\\n  --template-uri \"https:\/\/rezatemplate9473.blob.core.windows.net\/template\/03-sqldatabase.json\" \\\n  --parameters SQLLogin=test SQLPassword='Test@123'<\/code><\/pre><p class=\"wp-block-paragraph\">If SQL template works alone, then it will work in my main template too!<\/p><h3 class=\"wp-block-heading\">Two Ways to Pass Parameters<\/h3><p class=\"wp-block-paragraph\">I showed you parametersLink (parameter file URL). But there&#8217;s another way!<\/p><h3 class=\"wp-block-heading\">Way 1: Use Parameter File (What I Showed)<\/h3><pre class=\"wp-block-code\"><code>{\n    \"type\": \"Microsoft.Resources\/deployments\",\n    \"name\": \"LinkedTemplate\",\n    \"properties\": {\n        \"mode\": \"Incremental\",\n        \"templateLink\": {\n          \"uri\": \"https:\/\/...\/template.json\"\n        },\n        \"parametersLink\": {\n            \"uri\": \"https:\/\/...\/parameters.json\"\n        }\n    }\n}<\/code><\/pre><p class=\"wp-block-paragraph\">Good for: Many parameters, reusing parameters<\/p><h3 class=\"wp-block-heading\">Way 2: Write Parameters Inline<\/h3><pre class=\"wp-block-code\"><code>{\n    \"type\": \"Microsoft.Resources\/deployments\",\n    \"name\": \"LinkedTemplate\",\n    \"properties\": {\n        \"mode\": \"Incremental\",\n        \"templateLink\": {\n          \"uri\": \"https:\/\/...\/template.json\"\n        },\n        \"parameters\": {\n            \"SQLLogin\": {\n                \"value\": \"sqlusr\"\n            },\n            \"SQLPassword\": {\n                \"value\": \"Azure@123\"\n            }\n        }\n    }\n}<\/code><\/pre><p class=\"wp-block-paragraph\">Good for: Few parameters, passing values from main template<\/p><p class=\"wp-block-paragraph\">Both ways work! Choose what you like.<\/p><h3 class=\"wp-block-heading\">Linked vs Nested Templates<\/h3><p class=\"wp-block-paragraph\">Some people talk about &#8220;nested templates&#8221;. What&#8217;s the difference?<\/p><p class=\"wp-block-paragraph\">Linked Template (what I use):<\/p><ul class=\"wp-block-list\"><li>Template file is at a URL (like blob storage)<\/li><li>You can use it many times<\/li><li>Easy to share with team<\/li><\/ul><pre class=\"wp-block-code\"><code>\"templateLink\": {\n  \"uri\": \"https:\/\/...\/template.json\"  \/\/ External file\n}<\/code><\/pre><p class=\"wp-block-paragraph\">Nested Template:<\/p><ul class=\"wp-block-list\"><li>Template code is inside the main template<\/li><li>All code in one file<\/li><li>Cannot reuse easily<\/li><\/ul><pre class=\"wp-block-code\"><code>\"template\": {  \/\/ Code directly here\n    \"$schema\": \"...\",\n    \"resources\": [...]\n}<\/code><\/pre><p class=\"wp-block-paragraph\">I prefer Linked Templates because:<\/p><ul class=\"wp-block-list\"><li>Easier to read<\/li><li>Can test separately<\/li><li>Can reuse in many projects<\/li><li>Team can share templates<\/li><\/ul><h3 class=\"wp-block-heading\">Simple Security Tips<\/h3><p class=\"wp-block-paragraph\">My setup uses public blob access. This is OK for learning. But for production (real work), do this:<\/p><h3 class=\"wp-block-heading\">1. Use SAS Token<\/h3><p class=\"wp-block-paragraph\">SAS token = Special URL that expires after some time.<\/p><pre class=\"wp-block-code\"><code># Create token that works for 1 year\nEXPIRY=$(date -u -d \"1 year\" '+%Y-%m-%dT%H:%MZ')\n\nSAS_TOKEN=$(az storage container generate-sas \\\n  --account-name rezatemplate9473 \\\n  --name template \\\n  --permissions r \\\n  --expiry $EXPIRY \\\n  --output tsv)<\/code><\/pre><p class=\"wp-block-paragraph\">Then use URL with token:<\/p><pre class=\"wp-block-code\"><code>https:\/\/rezatemplate9473.blob.core.windows.net\/template\/03-sqldatabase.json?sp=r&amp;st=...<\/code><\/pre><h3 class=\"wp-block-heading\">2. Don&#8217;t Put Passwords in Git<\/h3><p class=\"wp-block-paragraph\">Bad:<\/p><pre class=\"wp-block-code\"><code>\/\/ parameters.json in Git\n{\n  \"SQLPassword\": {\n    \"value\": \"Azure@123\"  \/\/ Everyone can see this!\n  }\n}<\/code><\/pre><p class=\"wp-block-paragraph\">Good: Pass password when deploying:<\/p><pre class=\"wp-block-code\"><code>az deployment group create \\\n  --template-file main.json \\\n  --parameters SQLPassword='SecretPassword123!'<\/code><\/pre><p class=\"wp-block-paragraph\">Or use Azure Key Vault for secrets.<\/p><h3 class=\"wp-block-heading\">What I Learned<\/h3><ol class=\"wp-block-list\"><li>Linked templates help reuse code &#8211; Write once, use many times<\/li><li>Blob storage is easy &#8211; Just upload files and use URL<\/li><li>Always use Incremental mode &#8211; Complete mode is dangerous<\/li><li>Public access is OK for learning &#8211; But use SAS tokens for production<\/li><li>Parameter files are separate &#8211; Template has logic, parameters have values<\/li><li>Test templates separately &#8211; Makes debugging easier<\/li><li>Team can share templates &#8211; Everyone benefits<\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>Why I Needed Linked Templates Hello everyone! After I created my VM template (250+ lines!), I had a problem. Every time I&hellip;<\/p>\n","protected":false},"author":2,"featured_media":105,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_rezaops_part":"4","_rezaops_linkedin_url":"https:\/\/www.linkedin.com\/pulse\/understanding-linked-templates-arm-making-code-reusable-reza-chegini-iuvic\/","footnotes":""},"categories":[50,10],"tags":[53,52,8,55],"series":[51],"class_list":["post-103","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure","category-devops","tag-arm-templates","tag-azure","tag-devops","tag-iac","series-azure-arm-templates"],"jetpack_featured_media_url":"https:\/\/rezachegini.com\/wp-content\/uploads\/2026\/10\/understanding-linked-templates-arm-cover.png","_links":{"self":[{"href":"https:\/\/rezachegini.com\/index.php?rest_route=\/wp\/v2\/posts\/103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rezachegini.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rezachegini.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rezachegini.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/rezachegini.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=103"}],"version-history":[{"count":1,"href":"https:\/\/rezachegini.com\/index.php?rest_route=\/wp\/v2\/posts\/103\/revisions"}],"predecessor-version":[{"id":104,"href":"https:\/\/rezachegini.com\/index.php?rest_route=\/wp\/v2\/posts\/103\/revisions\/104"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rezachegini.com\/index.php?rest_route=\/wp\/v2\/media\/105"}],"wp:attachment":[{"href":"https:\/\/rezachegini.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rezachegini.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rezachegini.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=103"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/rezachegini.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}