Azure Plugin
Get the latest docs
You are looking at documentation for an older release. Not what you want? Go to the current release documentation.
The Azure plugin allows users to use Cloudify to manage cloud resources on Azure. See below for currently supported resource types.
This documentation covers the superficial usage via node types. For more information on the python code see the python docs. These can be generated using Sphinx.
Plugin Requirements
- Python Versions 2.7.x.
- Azure account
Compatibility
The Azure plugin is tested against these Azure API Versions:
RESOURCES = ‘2016-02-01’ STORAGE = ‘2015-06-15’ NETWORK = ‘2016-03-30’ COMPUTE = ‘2016-03-30’
Types
The following are node type definitions. Nodes describe resources in your cloud infrastructure. For more information, see node type.
Common Properties
All cloud resource nodes have common properties:
namelocationtagsretry_afterBecause Azure’s API is asynchronous, this value indicates the interval between retries.
Properties
Every time you manage a resource with Cloudify, we create one or more clients with Azure API. You specify the configuration for these clients using the azure_config property. It should be a dictionary, with the following values:
Your Azure API access credentials
subscription_idtenant_idclient_idclient_secret
See the cloudify.datatypes.azure.Config data type definition in the plugin’s plugin.yaml.
cloudify.azure.nodes.ResourceGroup
Derived From: cloudify.nodes.Root
Properties:
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
resourcegroup:
type: cloudify.azure.nodes.ResourceGroup
properties:
name: {concat:[ { get_input: resource_prefix }, rg ] }
location: { get_input: location }
azure_config:
subscription_id: { get_input: subscription_id }
tenant_id: { get_input: tenant_id }
client_id: { get_input: client_id }
client_secret: { get_input: client_secret }
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the resource group.cloudify.interfaces.lifecycle.deletedeletes the resource group.
cloudify.azure.nodes.storage.StorageAccount
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.resource_configa dict with the following key:accountTypea storage account type.
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
storageaccount:
type: cloudify.azure.nodes.storage.StorageAccount
properties:
name: mysa01
location: { get_input: location }
retry_after: { get_input: retry_after }
resource_config:
accountType: Standard_LRS
azure_config: *azure_config
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the storage account.cloudify.interfaces.lifecycle.deletedeletes the storage account.
cloudify.azure.nodes.network.VirtualNetwork
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.resource_configa dict with the following keys:addressSpace:addressPrefixes: a list of address prefixes
dhcpOptions: list of dhcp optionssubnets: list of subnets
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
virtual_network:
type: cloudify.azure.nodes.network.VirtualNetwork
properties:
name: myvnet01
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the network.cloudify.interfaces.lifecycle.deletedeletes the network.
cloudify.azure.nodes.network.Subnet
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.virtual_network_nameThe name of the network in which you wish to create this subnet.resource_configa dict with the following keys:addressPrefixAn address prefix to usenetworkSecurityGroupThe name of a security group you want to attach if one existsrouteTableThe name of a route table to use if one exists.
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
subnet:
type: cloudify.azure.nodes.network.Subnet
properties:
name: mysubnet
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
resource_config:
addressPrefix: { get_input: subnet_private_cidr }
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the subnet.cloudify.interfaces.lifecycle.deletedeletes the subnet.
cloudify.azure.nodes.network.NetworkSecurityGroup
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.resource_configa dict with the following key:securityRulesan optional list of rules
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
networksecuritygroup:
type: cloudify.azure.nodes.network.NetworkSecurityGroup
properties:
name: mynsg
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
resource_config:
securityRules:
- name: nsr_ssh
properties:
description: SSH access
protocol: Tcp
sourcePortRange: '*'
destinationPortRange: 22
sourceAddressPrefix: '*'
destinationAddressPrefix: '*'
priority: 100
access: Allow
direction: Inbound
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the network security group.cloudify.interfaces.lifecycle.deletedeletes the network security group.
cloudify.azure.nodes.network.NetworkSecurityRule
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.network_security_group_nameThe name of the security group that you want to create this resource in.resource_configa dict with the following keys:descriptionSome string to desribe the rule.protocolEither Tcp or UdpsourcePortRangeAny integer from 1 to 65535.destinationPortRangeAny integer from 1 to 65535 (should be greater than sourcePortRange).sourceAddressPrefixThe source address prefix of the network, subnet, or IP.destinationAddressPrefixThe destination address prefix of the network, subnet, or NIC.accessAllow or DenypriorityUnique NumberdirectionInbound or Outbound
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
network_security_rule:
type: cloudify.azure.nodes.network.NetworkSecurityRule
properties:
name: mocknsr
location: eastus
azure_config: *azure_config
network_security_group_name: mocknsg
resource_config:
description: RDP access
protocol: Tcp
sourcePortRange: '*'
destinationPortRange: 3389
sourceAddressPrefix: '*'
destinationAddressPrefix: '*'
priority: 100
access: Allow
direction: Inbound
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the network security group rule.cloudify.interfaces.lifecycle.deletedeletes the network security group rule.
cloudify.azure.nodes.network.RouteTable
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.network_security_group_nameThe name of the security group that you want to create this resource in.resource_configa dict with the following key:routesan optional list of routes
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
routetable:
type: cloudify.azure.nodes.network.RouteTable
properties:
name: myrt
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the route table.cloudify.interfaces.lifecycle.deletedeletes the route table.
cloudify.azure.nodes.network.Route
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.route_table_nameThe name of the route table that you want to create this rule in.resource_configa dict with the following keys:addressPrefixThe destination CIDR to which the route appnextHopTypeThe type of Azure hop the packet should be sent tonextHopIpAddressOptional the IP address packets should be forwarded to
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
internetroute:
type: cloudify.azure.nodes.network.Route
properties:
name: myir
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
resource_config:
addressPrefix: 0.0.0.0/0
nextHopType: Internet
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the route rule.cloudify.interfaces.lifecycle.deletedeletes the route rule.
cloudify.azure.nodes.network.IPConfiguration
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.resource_configa dict with the following key:privateIPAddressStatic, private IP AddressprivateIPAllocationMethodDefines how a private IP address is assigned. Options are ‘Static’ or ‘Dynamic’.
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
ubuntuipconfig:
type: cloudify.azure.nodes.network.IPConfiguration
properties:
name: myuic
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
resource_config:
privateIPAllocationMethod: Dynamic
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the route ip config.cloudify.interfaces.lifecycle.deletedeletes the route ip config.
cloudify.azure.nodes.network.PublicIPAddress
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.resource_configa dict with the following keys:publicIPAllocationMethodStatic or DynamicidleTimeoutInMinutesSpecifies the timeout (in minutes) for the TCP idle connection.domainNameLabelThe concatenation of the domain name label and the regionalized DNS zone make up the fully qualified domain name associated with the public IP address.reverseFqdnA fully qualified domain name that resolves to this public IP address.
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
ubuntuipconfig:
type: cloudify.azure.nodes.network.IPConfiguration
properties:
name: myuic
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
resource_config:
privateIPAllocationMethod: Dynamic
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the public ip address.cloudify.interfaces.lifecycle.deletedeletes the public ip address.
cloudify.azure.nodes.compute.AvailabilitySet
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.resource_configa dict with the following keys:platformUpdateDomainCountSpecifies the number of update domains that are usedplatformFaultDomainCountSpecifies the number of fault domains that are used
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
availabilityset:
type: cloudify.azure.nodes.compute.AvailabilitySet
properties:
name: myac
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the Availability Set.cloudify.interfaces.lifecycle.deletedeletes the Availability Set.
cloudify.azure.nodes.compute.VirtualMachine
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.use_public_ipTells the deployment to use the public IP (if available) of the resource for Cloudify Agent connections.resource_configSee: https://msdn.microsoft.com/en-us/library/azure/mt163591.aspx.hardwareProfilestorageProfileosProfile
ipProperty specifying the IP address of the resource to use for the agent installer.os_familyProperty specifying what type of operating system family Property specifying what type of operating system family
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
host:
type: cloudify.azure.nodes.compute.VirtualMachine
properties:
name: myhost
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
os_family: { get_input: os_family_linux }
use_public_ip: false
resource_config:
hardwareProfile:
vmSize: { get_input: standard_a2_size }
storageProfile:
imageReference:
publisher: { get_input: image_publisher_centos_final }
offer: { get_input: image_offer_centos_final }
sku: { get_input: image_sku_centos_final }
version: { get_input: image_version_centos_final }
osProfile:
computerName: { get_property: [SELF, name] }
adminUsername: { get_input: username_centos_final }
adminPassword: { get_input: password }
linuxConfiguration:
ssh:
publicKeys:
- path: { get_input: authorized_keys_centos }
keyData: { get_input: keydata }
disablePasswordAuthentication: { get_input: public_key_auth_only }
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the VM.cloudify.interfaces.lifecycle.configureconfigures the VM.commands_to_executeInput. This is the command that the CustomScriptExtension extension will execute.file_urisThe SAS URL to download the script from.
cloudify.interfaces.lifecycle.deletedeletes the VM.
cloudify.azure.nodes.compute.VirtualMachineExtension
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.virtual_machine_nameThe VM that should be used.resource_config:publisherExtensions publisherext_typeTypetypeHandlerVersionType Handler VersionsettingsSettings accepts the file_uri and commands to execute objects. (See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
webserver:
type: cloudify.azure.nodes.compute.VirtualMachineExtension
properties:
name: vm1_webserver
location: { get_input: location }
retry_after: { get_input: retry_after }
resource_config:
publisher: Microsoft.Powershell
ext_type: DSC
typeHandlerVersion: '2.8'
settings:
ModulesUrl: https://www.example.com/modules.zip
ConfigurationFunction: windows-iis-webapp.ps1\CloudifyExample
Properties:
MachineName: { get_property: [vm1, name] }
WebServerPort: { get_input: webserver_port }
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the VM Extension.cloudify.interfaces.lifecycle.deletedeletes the VM Extension.
cloudify.azure.nodes.network.LoadBalancer
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.resource_config:frontendIPConfigurationsa Load balancer can include one or more front end IP addresses, otherwise known as a virtual IPs.backendAddressPoolsthese are IP addresses associated with the virtual machine Network Interface CardloadBalancingRulesa rule property maps a given front end IP and port combination to a set of back end IP addresses and port combination.inboundNatRulesNAT rules defining the inbound traffic flowing through the front end IP and distributed to the back end IP.
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
loadbalancer:
type: cloudify.azure.nodes.network.LoadBalancer
properties:
name: mylb
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
relationships:
- type: cloudify.azure.relationships.contained_in_resource_group
target: resourcegroup
- type: cloudify.azure.relationships.connected_to_ip_configuration
target: loadbalanceripcfg
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the LB.cloudify.interfaces.lifecycle.deletedeletes the LB.
cloudify.azure.nodes.network.LoadBalancer.BackendAddressPool
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.load_balancer_nameThe name of the load balancer to create this pool inside.
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
loadbalancerbackendpool:
type: cloudify.azure.nodes.network.LoadBalancer.BackendAddressPool
properties:
name: mylb
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
relationships:
- type: cloudify.azure.relationships.contained_in_load_balancer
target: loadbalancer
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the LB pool.cloudify.interfaces.lifecycle.deletedeletes the LB pool.
cloudify.azure.nodes.network.LoadBalancer.Probe
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.load_balancer_nameThe name of the load balancer to create this pool inside.resource_configprotocolIP ProtocolportPortrequestPathRequest URIintervalInSecondsInterval between probesnumberofProbesHow many proves
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
loadbalancerprobe:
type: cloudify.azure.nodes.network.LoadBalancer.Probe
properties:
name: lbprobe
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
resource_config:
protocol: Http
port: { get_input: webserver_port }
requestPath: index.html
relationships:
- type: cloudify.azure.relationships.contained_in_load_balancer
target: loadbalancer
- type: cloudify.relationships.depends_on
target: loadbalancerbackendpool
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the LB probe.cloudify.interfaces.lifecycle.deletedeletes the LB probe.
cloudify.azure.nodes.network.LoadBalancer.IncomingNATRule
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.load_balancer_nameThe name of the load balancer to create this pool inside.resource_configprotocolIP protocolfrontendPortInbound portbackendPortOutbound port
(See #common-properties)
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the NAT Rule.cloudify.interfaces.lifecycle.deletedeletes the NAT Rule.
cloudify.azure.nodes.network.LoadBalancer.Rule
Derived From: cloudify.nodes.Root
Properties:
resource_group_nameThe name of the resource group in which you wish to create this resource.load_balancer_nameThe name of the load balancer to create this pool inside.resource_configprotocolIP PortfrontendPortInbound portbackendPortOutbound portenableFloatingIPAllow floating IPidleTimeoutInMinutesHow long to waitloadDistributionsize of load to distribute
(See #common-properties)
Example
This example shows adding additional parameters, and explicitly defining the azure_config.
loadbalancerrule:
type: cloudify.azure.nodes.network.LoadBalancer.Rule
properties:
name: mylbrule
location: { get_input: location }
retry_after: { get_input: retry_after }
azure_config: *azure_config
resource_config:
protocol: Tcp
backendPort: { get_input: webserver_port }
frontendPort: { get_input: loadbalancer_port }
relationships:
- type: cloudify.azure.relationships.contained_in_load_balancer
target: loadbalancer
- type: cloudify.azure.relationships.connected_to_ip_configuration
target: loadbalanceripcfg
- type: cloudify.azure.relationships.connected_to_lb_be_pool
target: loadbalancerbackendpool
- type: cloudify.azure.relationships.connected_to_lb_probe
target: loadbalancerprobe
Mapped Operations:
cloudify.interfaces.lifecycle.createcreates the LB rule.cloudify.interfaces.lifecycle.deletedeletes the LB rule.
Relationships
See relationships.
The following plugin relationship operations are defined in the Azure plugin:
cloudify.azure.relationships.contained_in_resource_groupSets a dependency between the resource and the resource group that contains it.cloudify.azure.relationships.contained_in_virtual_networkSets a dependency between the resource and the virtual network that contains it.cloudify.azure.relationships.contained_in_network_security_groupSets a dependency between the resource and the network security group that contains it.cloudify.azure.relationships.contained_in_route_tableSets a dependency between the resource and the route table that contains it.cloudify.azure.relationships.contained_in_load_balancerSets a dependency between the resource and the load balancer.cloudify.azure.relationships.network_security_group_attached_to_subnetAttaches a network security group to a subnet.cloudify.azure.relationships.route_table_attached_to_subnetAttaches a network route table to a subnet.cloudify.azure.relationships.nic_connected_to_network_security_groupAttaches a NIC to a network security group.cloudify.azure.relationships.ip_configuration_connected_to_subnetSets a dependency between an IP configuration and a subnet.cloudify.azure.relationships.ip_configuration_connected_to_public_ipSets a dependency between an IP configuration and a public IP.cloudify.azure.relationships.connected_to_storage_accountSets a dependency between the resource and a storage account.cloudify.azure.relationships.connected_to_availability_setSets a dependency between the resource and an availability set.cloudify.azure.relationships.connected_to_ip_configurationSets a dependency between the resource and an IP configuration.cloudify.azure.relationships.connected_to_nicSets a dependency between the resource and a NIC.cloudify.azure.relationships.connected_to_lb_be_poolSets a dependency between the resource and a LB pool.cloudify.azure.relationships.connected_to_lb_probeSets a dependency between the resource and a LB probe.cloudify.azure.relationships.vmx_contained_in_vmSets a dependency between a VM extension and a VM.cloudify.azure.relationships.nic_connected_to_lb_be_poolSets a dependency between a NIC and a LB pool.
Types Common Behaviors
Using Existing Resources
It is possible to use existing resources on Azure - whether these have been created by a different Cloudify deployment or not via Cloudify at all.
All Cloudify Azure types have a property named use_external_resource, whose default value is false. When set to true, the plugin will apply different semantics for each of the operations executed on the relevant node’s instances:
If use_external_resource is set to true in the blueprint, the name must be that resource’s name in Azure.
This behavior is common to all resource types:
createIfuse_external_resourceis true, the plugin will check if the resource is available in your account.deleteIfuse_external_resourceis true, the plugin will check if the resource is available in your account.