arm-template-merge v1.1.5
arm-template-merge
Azure Resource Manager (ARM) Template Merge
This tool merges multiple Azure Resource Manager (ARM) template files into a single template file.
Although linked templates may be used for combining multiple resources into a single deployment, they have some drawbacks:
- All linked templates must be accessible via a public URL so Azure Resource Manager can reach them during deployment, which may not be possible or cumbersome on some scenarios.
- Each linked template is resolved as a separate deployment, which may not be desired.
- Only the incremental deployment mode is allowed for linked templates.
Prerequisites
How to use
Install the CLI globally:
npm install -g arm-template-mergeThen run arm-template-merge without any arguments for details on its utilization.
Alternatively, you can execute the CLI without installing it by running:
npx arm-template-mergeAdding it as a dependency
You may add it to your project as a dependency:
npm install arm-template-mergeAnd use the merge functionality from your code:
const fs = require('fs');
const mergeARMTemplates = require('arm-template-merge');
let template1 = JSON.parse(fs.readFileSync('template1.json', 'utf8'));
let template2 = JSON.parse(fs.readFileSync('template2.json', 'utf8'));
let merged = {};
merged = mergeARMTemplates(merged, template1);
merged = mergeARMTemplates(merged, template2);
fs.writeFileSync('merged-template.json', JSON.stringify(merged), 'utf8');Rules
The following rules are used for merging ARM template files:
- All files MUST share the same exact values for the following fields: - $schema
- contentVersion
- apiProfile(if present)
 
- All files' - functionsand- resourcescollections will each be combined into a single collection. Objects within a collection that are exact copies will yield a single object in the merged collection:- [ | [ | [ { <object-A> }, --|-------------------------|--> { <object-A> }, | { <object-B> }, --|--> { <object-B> }, { <object-C> }, | { <object-C> }, | { <object-C> } ] | ] | ]
- All files' - parameters,- variablesand- outputsobjects will each be combined into a single object. Files declaring the same key within an object MUST have the same exact value, or an error will be thrown:- { | { | { "A": <value-A>, --|-------------------------|--> "A": <value-A>, | "B": <value-B>, --|--> "B": <value-B>, "C": <value-C>, | "C": <value-C>, | "C": <value-C> "D": <value-D1> | "D": <value-D2> | <<< ERROR >>> } | } | }
- Value and object equality follows Node.js' - assert.deepStrictEqual()rules.