Skip to main content

A tool to compare ARM templates (Azure).

Project description

ARM Compare

ARM Compare is a Python script designed to compare two Azure Resource Manager (ARM) template export files. The script focuses on comparing the configuration attributes of resources, generating a detailed report that includes both a summary and a full property-by-property comparison for each matched resource.

The report contains clickable anchors in the summary table, allowing you to jump directly to the detailed comparison for any resource.

Features

  • Resource Pairing by Type and Name:
    Automatically pairs resources based on their type and name. You can also provide custom mappings in a YAML configuration file if resource names differ.

  • Enhanced Prefix-Based Resource Mapping:
    When you provide a mapping with a base resource type and name, child resources are automatically paired by appending any additional segments. For example, a mapping defined for
    Microsoft.Storage/storageAccounts with name storage001 will automatically map a resource such as
    Microsoft.Storage/storageAccounts/blobServices with name storage001/default to the corresponding target by appending /blobServices and /default to the right-side mapping.

  • Wildcard Ignore Rules:
    Exclude specific properties from the comparison using wildcard patterns (e.g., tags.* or dependsOn*).

  • Detailed Report Generation:
    Generates a report with a summary table and detailed comparison tables. For Markdown output, the tables list properties side-by-side with a Fail column marking differences using a cross (✗).

  • Clickable Anchors:
    The resource names in the summary are clickable links that scroll down to their detailed comparison sections.

Setup

  1. Clone the Repository:

    git clone https://github.com/Philcartmell/azure-arm-compare.git
    cd azure-arm-compare
    
  2. Install Dependencies:

    pip install -r requirements.txt
    

Exporting ARM Templates

When exporting ARM templates from Azure, ensure that you exclude parameters. This ensures that resource names remain fixed in the output, which is critical for accurate comparisons.

Configuration

A YAML configuration file is optional but recommended if your ARM templates use different resource names for corresponding resources. Use the configuration file to define additional ignore rules and resource mappings.

Sample YAML Configuration (config.yaml)

The config.yaml file is optional, but unless the resource names are identical you'll probably want to provide it.

ignoreRules:
  - "name"
  - "dependsOn*"
resourceMappings:
  - leftResourceType: "Microsoft.Storage/storageAccounts"
    leftResourceName: "storage001"
    rightResourceType: "Microsoft.Storage/storageAccounts"
    rightResourceName: "storage002"
  • ignoreRules: A list of property paths to ignore during comparison. Wildcards are supported.
  • resourceMappings:
    A list of mappings to manually pair resources if their names differ between the left and right ARM templates. The enhanced mapping logic supports prefix-based matching so that if a resource’s type and name start with the specified mapping values, any additional segments (child resources) are automatically appended to the right-side mapping.

How to Use It

Run the script using the command line with the following arguments:

  • --left: Path to the left ARM template JSON file.
  • --right: Path to the right ARM template JSON file.
  • --config: (Optional) Path to a YAML configuration file.
  • --output: Path to the output file where the comparison result will be saved.
  • --format: (Optional) Output format: either markdown or html (default).

Example Execution

python arm-compare.py --left samples/left.json --right samples/right.json --config config.yaml --output sample_output.md

Release History

Version 0.0.2 (Latest)

  • HTML as Default Output: HTML output is now the default output format.
  • Expandable Value Cells:
    For HTML output, if a left or right value exceeds 64 characters, the script truncates it and provides a [more] link. Clicking the link expands the full value and toggles to [less] to collapse it again.
  • Row Highlight on Click:
    In HTML output, clicking on a cell in the Property Path column highlights the entire row in yellow, making it easier to compare properties across the row.
  • Enhanced Summary:
    The summary table now includes an additional "Ignored" column. The summary aggregates the counts so that the sum of Ignored, Correct, and Incorrect equals the Total Properties compared.

Version 0.0.1 (Initial Release)

  • Markdown Report Generation:
    Initially generated a Markdown report with a summary table and detailed property-by-property comparisons.
  • Resource Pairing by Type and Name:
    Automatic pairing of resources by type and name with clickable anchors in the summary.
  • Enhanced Prefix-Based Resource Mapping:
    Support for prefix-based matching in resource mappings.
  • Wildcard Ignore Rules:
    Ability to ignore properties using wildcard patterns.

Contributing

Contributions and improvements are welcome! Feel free to fork the repository and submit pull requests for enhancements or bug fixes.

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

azure_arm_compare-0.0.2.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

azure_arm_compare-0.0.2-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file azure_arm_compare-0.0.2.tar.gz.

File metadata

  • Download URL: azure_arm_compare-0.0.2.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for azure_arm_compare-0.0.2.tar.gz
Algorithm Hash digest
SHA256 f92e5f12b25ab4c964fdf7e1eb8cc1e6f2d9e8e5cddf9509a0c1bfb675dcb7d8
MD5 979e2bb30e9694d8b62b66b62e2461e7
BLAKE2b-256 b0a250afab88903cfb09897af81ec0b068e954915b952f4ff2a7c09b6efd2f6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for azure_arm_compare-0.0.2.tar.gz:

Publisher: publish.yml on Philcartmell/azure-arm-compare

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file azure_arm_compare-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for azure_arm_compare-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e4f2ad5beb4ca0ed34e625271eb7f595894d9bc5fec00621425aefad4ebcc244
MD5 c4296e3c4fdd6987e06bbe05a9fa67aa
BLAKE2b-256 4d3225217f76a2a524b0ae0bb27285302feeb61a0fd9c98117f54116ce403cfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for azure_arm_compare-0.0.2-py3-none-any.whl:

Publisher: publish.yml on Philcartmell/azure-arm-compare

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page