An Azure template is a JSON file that can be used to automate the deployment of a set of related resources. The template uses declarative syntax, which lets you state what you intend to deploy without having to write the sequence of programming commands to create it. In the template, you specify the resources to deploy and the properties for those resources.
Deploying a template with AzureRMR is just a matter of calling a
resource group object’s deploy_template
method. This takes
two arguments, template
and parameters
.
deploy_template
is very flexible in how you can specify its
arguments:
jsonlite::toJSON
.parameters
argument, this can also be a
character vector containing the types of each parameter.vm_tpl <- rg$deploy_template("myNewVirtualMachine",
template="vm_template.json",
parameters=list(
os="Linux",
size="Standard_DS2_v2",
username="ruser",
publickey=readLines("~/id_rsa.pub")
))
Normally, deleting a template doesn’t touch the resources it creates: it only deletes the template itself. However, AzureRMR optionally allows you to free any resources created when you delete a template. This is useful when managing complex objects like VMs, which actually consist of multiple individual resources in Azure (storage account, disk, network interface, etc). When you are done with the VM, deleting the template lets you free all these resources with a single command.
AzureRMR also provides the build_template_definition
and
build_template_parameters
functions to help you construct
or modify a template. Both of these are generics and can be extended by
other packages to handle specific deployment scenarios, eg virtual
machines.
build_template_definition
is used to generate the
template JSON. The default method has 4 arguments
parameters
, variables
, resources
and outputs
, which are the components of a template; these
should be either strings containing the unparsed JSON text, or lists to
be converted into JSON. build_template_parameters
is for
creating the list of parameters to be passed along with the template.
Its arguments should all be named, and contain either the JSON text or
an R list giving the parsed JSON.
# a storage account template
storage_tpl <- build_template_definition(
parameters=c(
name="string",
location="string",
sku="string"
),
variables=list(
id="[resourceId('Microsoft.Storage/storageAccounts', parameters('name'))]"
),
resources=list(
list(
name="[parameters('name')]",
location="[parameters('location')]",
type="Microsoft.Storage/storageAccounts",
apiVersion="2018-07-01",
sku=list(
name="[parameters('sku')]"
),
kind="Storage"
)
),
outputs=list(
storageId="[variables('id')]"
)
)
# the corresponding parameters
storage_pars <- build_template_parameters(
name="mystorageacct",
location="westus",
sku="Standard_LRS"
)
Once created, the template defintion and parameters can be passed
directly to deploy_template
: