| title | Azure Plugin | ||
|---|---|---|---|
| category | Official Plugins | ||
| description | The Azure plugin enables you to manage cloud resources on Azure | ||
| draft | false | ||
| weight | 110 | ||
| aliases |
|
The Azure plugin enables you to use {{< param product_name >}} to manage cloud resources on Azure. See below for currently supported resource types.
- Python Versions 2.7.x.
- Azure account.
The Azure plugin has two methods for interacting with Azure services: legacy and SDK based.
The legacy library is tested against these Azure API Versions:
RESOURCES = '2017-05-10'
STORAGE = '2015-06-15'
NETWORK = '2016-03-30'
COMPUTE = '2016-03-30'
The SDK-based method is dependent on the SDK library versions. (See the setup.py for current versions.) Currently only ARM resource template node templates use this method.
Each Azure resource node template must include a property azure_config for authentication. This consists of a tenant_id, client_id, client_secret or client_assertion, and subscription_id. These can be provided via secrets for better security coverage.
Plugin 1.8.0 introduced support for certificate-based authentication. Provide subscription_id, tenant_id, client_id and client_assertion. For more information see overview of client_assertion authentication and how to create an AD client certificate.
Authentication with Azure services requires a Service Principal. See this documentation from Microsoft on creating a Service Principal.
client_idis the Service PrincipalappId.client_secretis the Service Principalpassword.tenant_idis the Service Principaltenant.
It is recommended that you store your credentials as [secrets]({{< relref "working_with/manager/using-secrets.md" >}}). You can do this using the [CLI]({{< relref "cli/orch_cli/secrets.md" >}}). Secrets can then be accessed inside your blueprints, as follows:
{{< highlight yaml >}} resource_group: type: cloudify.azure.nodes.ResourceGroup properties: name: my_resource_group location: { get_secret: location } azure_config: subscription_id: { get_secret: subscription_id } tenant_id: { get_secret: tenant_id } client_id: { get_secret: client_id } client_secret: { get_secret: client_secret } {{< /highlight >}}
{{< param product_name >}} Azure Plugin version 1.6.0 introduced support for Azure Stack.
To configure your client, add the appropriate values for your endpoint keys, such as endpoint_resource, endpoints_resource_manager, endpoint_verify, and endpoints_active_directory.
Make sure to specify the appropriate api_version of the Azure resource that is currently supported in your Azure stack.
Example:
{{< highlight yaml >}} resource_group: type: cloudify.azure.nodes.ResourceGroup properties: api_version: 2017-05-10 name: my_resource_group location: { get_secret: location } azure_config: subscription_id: { get_secret: subscription_id } tenant_id: { get_secret: tenant_id } client_id: { get_secret: client_id } client_secret: { get_secret: client_secret } endpoint_resource: https://management.core.windows.net/ endpoints_resource_manager: https://management.azure.com endpoint_verify: True endpoints_active_directory: https://login.microsoftonline.com {{< /highlight >}}
The following are [node type]({{< relref "developer/blueprints/spec-node-types.md" >}}) definitions. Nodes describe resources in your cloud infrastructure. For more information, see [node types]({{< relref "developer/blueprints/spec-node-types.md" >}}).
All cloud resource nodes have common properties:
namelocationtagsretry_afterBecause Azure's API is asynchronous, the value indicates the interval between retries.
Properties
Each time that you manage a resource with {{< param product_name >}}, one or more clients are created by {{< param product_name >}} through the 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.
Manage Azure resources that do not have a plugin implementation.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
See the Common Properties section.
resource_configA dictionary with the following keys:custom_resource_module: The path to a Python module from which you wish to import an Azure client.custom_resource_class_name: The name of the Azure client, which is at the custom_resource_module import location.custom_resource_object_name: The name of the resource managed fromcustom_resource_class_name.create_fn_name: The name of the function used for creating the resource on thecustom_resource_object_name.update_fn_name: The name of the function used for updating the resource on thecustom_resource_object_name.delete_fn_name: The name of the function used for deleting the resource on thecustom_resource_object_name.get_fn_name: The name of the function used for getting the resource on thecustom_resource_object_name.get_params: The parameters used for getting the resource via get_fn_name.
operation_configThe path to a blueprint resource containing an Azure Resource Template.create: The parameters to send to create_fn_name.update: The parameters to send to update_fn_name.delete: The parameters to send to delete_fn_name.
Runtime Properties:
resourceThe result of get/create Azure deployment operation.create_resultThe result of the create_fn_name.__RESOURCE_CREATEDIf the resource has been created or not.update_resultThe result of update_fn_name.__RESOURCE_DELETEDIf the resource has been deleted or not.delete_resultThe result of the delete_fn_name.
Example
This example shows a very basic usage for creating a resource group.
{{< highlight yaml >}} resource_group: type: cloudify.nodes.azure.CustomTypes properties: api_version: '2017-05-10' location: eastus client_config: *azure_config resource_config: custom_resource_module: azure.mgmt.resource custom_resource_class_name: ResourceManagementClient custom_resource_object_name: resource_groups create_fn_name: create_or_update update_fn_name: create_or_update delete_fn_name: delete get_params: &resource_group_params resource_group_name: mynewresourcegroup operation_config: create: <<: *resource_group_params parameters: location: { get_property: [ SELF, location ] } delete: *resource_group_params {{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates the resource.cloudify.interfaces.lifecycle.startUpdates the resource.cloudify.interfaces.lifecycle.deleteDeletes the resource.
Deploy an Azure ARM Template.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
See the Common Properties section.
resource_group_nameThe name of the resource group in which to create the resource.template_fileThe path to a blueprint resource containing an Azure Resource Template.templateThe content of an Azure Resource Template.paramsParameters to provide to the Azure Resource Template.
Runtime Properties:
resource_idThe id of the Azure deployment.resourceThe result of get/create Azure deployment operation.templateContent of the template that the Azure deployment was created with.outputsAzure deployment outputs.stateThe state of the Azure deployment. I.e, a list of resources id's created by the Azure deployment and exist in Azure.is_driftedBoolean that indicates whether one or more of the resources created by the Azure deployment was deleted.
Example
This example shows adding resource parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
deployment: type: cloudify.azure.Deployment properties: name: azure-python-deployment-sample location: { get_input: location } azure_config: *azure_config params: sshKeyData: { get_input: public_key } vmName: { get_input: vm_name } dnsLabelPrefix: { get_input: vm_dns_name } template_file: template.json
{{< /highlight >}}
{{< highlight yaml >}}
deployment: type: cloudify.azure.Deployment properties: name: azure-python-deployment-sample location: { get_input: location } azure_config: *azure_config params: sshKeyData: { get_input: public_key } vmName: { get_input: vm_name } dnsLabelPrefix: { get_input: vm_dns_name } # The following template has been truncated. template: { "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json", "contentVersion": "1.0.0.0", "parameters": {...}, "variables": {...}, "resources": [...] }
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a resource group.cloudify.interfaces.lifecycle.startPulls the state of the Azure deployment.Updatestateandis_driftedruntime properties.cloudify.interfaces.lifecycle.deleteDeletes a resource group.cloudify.interfaces.lifecycle.pullPulls the state of the Azure deployment.Updatestateandis_driftedruntime properties.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
See the Common Properties section.
Example
This example shows adding resource parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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 }
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a resource group.cloudify.interfaces.lifecycle.deleteDeletes a resource group.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.resource_configS dictionary with the following key:accountTypeA storage account type.
See the Common Properties section.
Example
This example shows adding storage parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a storage account.cloudify.interfaces.lifecycle.deleteDeletes a storage account.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.resource_configA dictionary with the following keys:addressSpace:addressPrefixesA list of address prefixes.
dhcpOptionsA list of DHCP options.subnetsA list of subnets.
See the Common Properties section.
Example
This example shows adding virtual network parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a network.cloudify.interfaces.lifecycle.deleteDeletes a network.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.virtual_network_nameThe name of the network in which the subnet is to be created.resource_configA dictionary with the following keys:addressPrefixThe address prefix to use.networkSecurityGroupThe name of a security group to attach, if one exists.routeTableThe name of a route table to use, if one exists.
See the Common Properties section.
Example
This example shows adding subnet parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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 }
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a subnet.cloudify.interfaces.lifecycle.deleteDeletes a subnet.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.resource_configA dictionary with the following key:securityRulesAn optional list of rules.
See the Common Properties section.
Example
This example shows adding security group parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a network security group.cloudify.interfaces.lifecycle.deleteDeletes a network security group.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.network_security_group_nameThe name of the security group in which to create the resource.resource_configA dictionary with the following keys:descriptionA string to describe the rule.protocolEither TCP or UDP.sourcePortRangeAn integer between 1 and 65535.destinationPortRangeAn integer between 1 and 65535 that is greater thansourcePortRange.sourceAddressPrefixThe source address prefix of the network, subnet, or IP.destinationAddressPrefixThe destination address prefix of the network, subnet, or NIC.accessEitherAlloworDeny.priorityA unique number.directionEitherInboundorOutbound.
See the Common Properties section.
Example
This example shows adding security group rule parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a network security group rule.cloudify.interfaces.lifecycle.deleteDeletes a network security group rule.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.network_security_group_nameThe name of the security group in which to create the resource.resource_configA dictionary with the following key:routesAn optional list of routes.
See the Common Properties section.
Example
This example shows adding route table parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
routetable: type: cloudify.azure.nodes.network.RouteTable properties: name: myrt location: { get_input: location } retry_after: { get_input: retry_after } azure_config: *azure_config
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a route table.cloudify.interfaces.lifecycle.deleteDeletes a route table.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.route_table_nameThe name of the route table tin which to create the rule.resource_configA dictionary with the following keys:addressPrefixThe destination CIDR to which to route the appnextHopTypeThe type of Azure hop to which the packet is to be be sent.nextHopIpAddressAn optional IP address to which packets are to be forwarded.
See the Common Properties section.
Example
This example shows adding route rule parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates the route rule.cloudify.interfaces.lifecycle.deleteDeletes the route rule.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.resource_configA dictionary with the following key:privateIPAddressStatic, private IP addressprivateIPAllocationMethodDefines how a private IP address is assigned. Options areStaticorDynamic.
See the Common Properties section.
Example
This example shows adding route IP configuration parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates the route IP configuration.cloudify.interfaces.lifecycle.deleteDeletes the route IP configuration.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.resource_configA dictionary with the following keys:publicIPAllocationMethodStaticorDynamic.idleTimeoutInMinutesThe timeout (in minutes) for the TCP idle connection.domainNameLabelThe concatenation of the domain name label and the regionalized DNS zone, resulting in the fully qualified domain name associated with the public IP address.reverseFqdnA fully qualified domain name that resolves to this public IP address.
See the Common Properties section.
Example
This example shows adding public IP address parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates the public IP address.cloudify.interfaces.lifecycle.deleteDeletes the public IP address.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.resource_configA dictionarey with the following keys:platformUpdateDomainCountSpecifies the number of update domains that are used.platformFaultDomainCountSpecifies the number of fault domains that are used.
See the Common Properties section.
Example
This example shows adding availability set parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
availabilityset: type: cloudify.azure.nodes.compute.AvailabilitySet properties: name: myac location: { get_input: location } retry_after: { get_input: retry_after } azure_config: *azure_config
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates the availability set.cloudify.interfaces.lifecycle.deleteDeletes the availability set.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.use_public_ipTriggers the deployment to use the public IP (if available) of the resource for {{< param product_name >}} Agent connections.resource_configSee: https://msdn.microsoft.com/en-us/library/azure/mt163591.aspx. You can override these values via theargsinput to the create operation.hardwareProfilestorageProfileosProfile
ipProperty specifying the IP address of the resource to use for the agent installer.os_familyProperty specifying the type of operating system family.
See the Common Properties section.
Example
This example shows adding VM parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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 }
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates the VM. Theargsinput overrides members of theresource_confignode property.cloudify.interfaces.lifecycle.configureCompares the user VM config inputs with the state of the VM in Azure and update the VM if needed(useful when usinguse_external_resource).cloudify.interfaces.lifecycle.startConfigures the VM.commands_to_executeInput. The command that theCustomScriptExtensionextension executes.file_urisThe SAS URL from which to download the script.
cloudify.interfaces.lifecycle.deleteDeletes the VM.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.virtual_machine_nameThe VM to use.resource_config:publisherExtensions publisher.ext_typeType.typeHandlerVersionType handler version.settingsAccepts the file_uri and commands to execute objects. See the Common Properties section.
Example
This example shows adding VM extension parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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 }
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates the VM extension.cloudify.interfaces.lifecycle.deleteDeletes the VM extension.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.resource_config:frontendIPConfigurationsA Load balancer that can include one or more front-end IP addresses, (virtual IPs).backendAddressPoolsThe IP addresses associated with the virtual machine NIC.loadBalancingRulesA rule property that maps a specific front-end IP and port combination to a set of back-end IP addresses and port combination.inboundNatRulesNAT rules that define the inbound traffic flowing through the front-end IP and distributed to the back end IP.
See the Common Properties section.
Example
This example shows adding load balancer parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a load balancer.cloudify.interfaces.lifecycle.deleteDeletes a load balancer.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resourceload_balancer_nameThe name of the load balancer within which to create the pool.
See the Common Properties section.
Example
This example shows adding load balancer pool parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a load balancer pool.cloudify.interfaces.lifecycle.deleteDeletes a load balancer pool.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.load_balancer_nameThe name of the load balancer within which to create the pool.resource_configprotocolIP Protocol.portPort.requestPathRequest URI.intervalInSecondsInterval between probes.numberofProbesNumber of probes.
See the Common Properties section.
Example
This example shows adding load balancer probe parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a load balancer probe.cloudify.interfaces.lifecycle.deleteDeletes a load balancer probe.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.load_balancer_nameThe name of the load balancer within which to create the pool.resource_configprotocolIP protocol.frontendPortInbound port.backendPortOutbound port.
See the Common Properties section.
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a NAT Rule.cloudify.interfaces.lifecycle.deleteDeletes a NAT Rule.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_group_nameThe name of the resource group in which to create the resource.load_balancer_nameThe name of the load balancer within which to create the pool.resource_configprotocolIP port.frontendPortInbound port.backendPortOutbound port.enableFloatingIPEnables a floating IP address.idleTimeoutInMinutesHow long to wait before a timeout.loadDistributionThe size of the load to distribute.
See the Common Properties section.
Example
This example shows adding load balancer rule parameters, and explicitly defining the azure_config.
{{< highlight yaml >}}
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
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates a load balancer rule.cloudify.interfaces.lifecycle.deleteDeletes a load balancer rule.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
Properties:
resource_groupThe name of the resource group in which to create the resource.nameThe name of the AKS clusterresource_configSee: https://docs.microsoft.com/en-us/rest/api/aks/managedclusters/createorupdate , A dictionary with the following keys :locationazure region to create the cluster.tagsA dict of key value to add to the cluster.kubernetes_versionkubernetes version to be used in the cluster setup.dns_prefixdns prefix to be used.agent_pool_profilesa list of agent pool profiles .linux_profilelinux profile username, publicKeys.network_profileused to define loadbalancer,outbound,IPs .windows_profilewindows profile with user name and password.service_principal_profiledict to define service service_principal_profile [client_id, secret].addon_profilesdict to define addons to be added to the cluster setup.enable_rbacboolean to specify whether to enable Kubernetes Role-Based Access Control.
store_kube_config_in_runtimeProperty to store kubernetes config in a runtime property to be used later.
See the Common Properties section.
Example
This example shows creating AKS Cluster, and explicitly defining the azure_config.
{{< highlight yaml >}}
resource_group: type: cloudify.azure.nodes.ResourceGroup properties: name: { get_input: resource_group_name } location: { get_input: location } azure_config: *azure_config
managed_cluster: type: cloudify.azure.nodes.compute.ManagedCluster properties: resource_group: { get_input: resource_group_name } name: { get_input: managed_cluster_name } resource_config: location: { get_input: location } tags: Name: "AKS_Test" tier: "Testing" kubernetes_version: "" # keep default dns_prefix: "akstest" agent_pool_profiles: - name: "nodepool1" count: 3 vmSize: "Standard_DS1_v2" osType: "Linux" type: "VirtualMachineScaleSets" availabilityZones: - "1" - "2" - "3" enableNodePublicIP: true linux_profile: adminUsername: "azureuser" ssh: publicKeys: - keyData : { get_input: public_key } network_profile: loadBalancerSku: "standard" outboundType: "loadBalancer" loadBalancerProfile: managedOutboundIPs: count: 2 windows_profile: adminUsername: "azureuser" adminPassword: "az#1234" service_principal_profile: clientId: { get_input: client_id } secret: { get_input: client_secret } addon_profiles: {} enable_rbac: true azure_config: *azure_config store_kube_config_in_runtime: true relationships: - type: cloudify.azure.relationships.contained_in_resource_group target: resource_group
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createCreates the Cluster.cloudify.interfaces.lifecycle.configureSaves kubeconfig in runtime properties ifstore_kube_config_in_runtimeset.cloudify.interfaces.lifecycle.deleteDeletes the Cluster.
Derived From: [cloudify.nodes.Root]({{< relref "developer/blueprints/built-in-types.md" >}})
A node used with the discovery feature to discover types of resources for usage in other "existing resource" deployments.
Properties:
resource_config: A dictionary with the following keys:resource_types: a list of resource types to support, for example:[Microsoft.ContainerService/ManagedClusters].
locationsA list of regions to look for resources. Default is [], which represents all regions.
See the Common Properties section.
Example
{{< highlight yaml >}}
azure_account: type: cloudify.azure.nodes.resources.Azure properties: client_config: *azure_config
{{< /highlight >}}
Mapped Operations:
cloudify.interfaces.lifecycle.createInitialize the account type.cloudify.interfaces.lifecycle.deleteDeinitialize the account type.
Workflows
Execute the discover_and_deploy workflow from an "Account" deployment to identify resources of the desired types and to deploy "existing resource" deployments.
See [relationships]({{< relref "developer/blueprints/spec-relationships.md" >}}).
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 in which it is contained.cloudify.azure.relationships.contained_in_virtual_networkSets a dependency between the resource and the virtual network in which it is contained.cloudify.azure.relationships.contained_in_network_security_groupSets a dependency between the resource and the network security group in which it is contained.cloudify.azure.relationships.contained_in_route_tableSets a dependency between the resource and the route table in which it is contained.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, except for NICs. (see cloudify.azure.relationships.nic_connected_to_ip_configuration)cloudify.azure.relationships.nic_connected_to_ip_configurationSets a dependency between acloudify.azure.nodes.network.NetworkInterfaceCardresource type to acloudify.azure.nodes.network.IPConfigurationresource type.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 load balancer pool.cloudify.azure.relationships.connected_to_lb_probeSets a dependency between the resource and a load balancer 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 load balancer pool.
You can use existing resources on Azure, regardless of whether they have been created by a different {{< param product_name >}} deployment or outside of {{< param product_name >}}.
All {{< param product_name >}} Azure types have these properties that determine the behaviour:
use_external_resource- Indicate whether the resource exists or if {{< param product_name >}} should create the resource.create_if_missing- If use_external_resource is true, and the resource does not exist, create it.use_if_exists- If use_external_resource is false, but the resource does exist, use it.
If use_external_resource is set to true in the blueprint, the name must be that resource's name in Azure.