ARM templates can be authored as generic templates where most of the values assigned to variables, if not all, are obtained as parameters. This allows the person using the template to pass any value they deem necessary to deploy resources in Azure. For example, the person deploying the template could choose a virtual machine of any size, any number of virtual machines, and any configuration for its storage and networks. This is known as free-flow configuration, where most of the configuration is allowed and the templates indeed come from the user instead of being declared within the template.
There are challenges with this kind of configuration. The biggest one is that not all configurations are supported on every Azure region and data center in Azure. The templates will fail to create resources if those resources are not allowed to be created in a specific...