##################################################################################
# Cloudify Azure built in types and plugins definitions.
##################################################################################

plugins:
  pkg:
    executor: central_deployment_agent
    source: https://github.com/cloudify-incubator/cloudify-azure-plugin/archive/2.1.1.zip
    package_name: cloudify-azure-plugin
    package_version: '2.1.1'

data_types:
  cloudify.datatypes.azure.Config:
    properties:
      endpoints_active_directory:
        description: >
          A Microsoft Azure Active Directory endpoint.
        type: string
        default: https://login.microsoftonline.com
      endpoints_resource_manager:
        description: >
          A Microsoft Azure Active Directory Resource Manager.
        type: string
        default: https://management.azure.com
      endpoint_resource:
        description: >
          A Microsoft Azure Active Directory Resource Id.
        type: string
        default: https://management.core.windows.net/
      endpoint_verify:
        description: >
          Connection certificate verify.
        type: boolean
        default: true
      subscription_id:
        description: >
          A Microsoft Azure subscription ID. This is a unique
          user account in Azure. This can be found in the
          Subscriptions tab on your dashboard.
        type: string
        required: false
      tenant_id:
        description: >
          A Microsoft Azure tenant ID. This can be found in
          the Azure Active Directory dashboard by accessing
          your directory. Open the Application Endpoints
          dialog and your tenant ID will be in the URL for
          the OAUTH2.0 TOKEN ENDPOINT.
        type: string
        required: false
      client_id:
        description: >
          A Microsoft Azure client ID. This can be found in
          the Azure Active Directory dashboard by accessing
          your directory. View the Applications tab and select
          the application used to access Azure APIs.  Your
          client ID can be found by expanding the ACCESS WEB
          APIS IN OTHER APPLICATIONS tab.
        type: string
        required: false
      client_secret:
        description: >
          A Microsoft Azure client secret key. This can be found
          or generated in the same location as your client ID.
        type: string
        required: false
      scale_name_separator:
        description: >
          When scaling resources, a unique name must be sent to
          the Azure API. Since names are left to the user to
          manage (the service does not generate unique IDs),
          this plugin will attempt to append characters or
          numbers to the end of the resource name when resources
          are scaled out. This value should be a character, or
          characters, that will separate the base name from the
          generated unique characters.  For instance, if the
          base name of a resource is "myvm", the separator is
          set to "_", and a scale workflow attempts to create
          another resource, the resulting name could be
          something like "myvm_1". This field can be left blank.
        type: string
        required: false
        default: "_"
      scale_name_suffix_chars:
        description: >
          A string of characters (ASCII) to be used when
          generating unique suffix data when scaling resources.
          See "scale_name_separator" for more information.
        type: string
        required: true
        default: "1234567890"
      certificate:
        description: >
          Certificate private key.
        type: string
        required: false
        default: ""
      thumbprint:
        description: >
          Certificate thumbprint.
        type: string
        required: false
        default: ""


  cloudify.datatypes.azure.storage.StorageAccountConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163564.aspx
    properties:
      accountType:
        description: >
          An storage account type (case sensitive)
        type: string
        required: false
      networkAcls:
        required: false
      supportsHttpsTrafficOnly:
        required: false
      encryption:
        required: false
      keySource:
        required: false


  cloudify.datatypes.azure.storage.DataDiskConfig:
    properties:
      container_name:
        type: string
        description: >
          Container for the resource.
        default: vhds
      size:
        description: >
          Size of the Page Blob (Azure disk) in GiB. Maximum of 1023 GiB allowed.
        default: 20
        required: true
      force_delete:
        description: >
          If set to true, the resource's "delete" lifecycle will purge the
          Azure Data Disk from the Azure Storage Account. If false, the
          Data Disk is left as-is in the Storage Account.
        default: false

  cloudify.datatypes.azure.storage.FileShareConfig:
    properties:
      metadata:
        description: >
          Metadata (dict) for the File Share
        required: false
      quota:
        description: >
          Quote, in GiB, for the maximum size of the file share
        required: false
      fail_on_exist:
        description: >
          If true, causes the operation to raise a NonRecoverableError if
          the file share already exists. If false, issues a warning and
          continues execution.
        default: false

  cloudify.datatypes.azure.network.VirtualNetworkConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163661.aspx
    properties:
      addressSpace:
        default:
          addressPrefixes:
          - 10.10.0.0/16
          - 172.16.0.0/16
        required: true
      dhcpOptions:
        required: false
      subnets:
        required: false

  cloudify.datatypes.azure.network.NetworkSecurityGroupConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163656.aspx
    properties:
      securityRules:
        required: false

  cloudify.datatypes.azure.network.NetworkSecurityRuleConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163645.aspx
    properties:
      description:
        type: string
        required: false
      protocol:
        type: string
        required: true
      sourcePortRange:
        type: string
        required: false
      destinationPortRange:
        type: string
        required: false
      sourceAddressPrefix:
        type: string
        required: true
      destinationAddressPrefix:
        type: string
        required: true
      access:
        type: string
        required: true
      priority:
        type: integer
        required: true
      direction:
        type: string
        required: true

  cloudify.datatypes.azure.network.SubnetConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163621.aspx
    properties:
      addressPrefix:
        required: false
      networkSecurityGroup:
        required: false
      routeTable:
        required: false

  cloudify.datatypes.azure.network.RouteTableConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt502548.aspx
    properties:
      routes:
        required: false

  cloudify.datatypes.azure.network.RouteConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt459110.aspx
    properties:
      addressPrefix:
        type: string
        required: true
      nextHopType:
        type: string
        required: true
      nextHopIpAddress:
        type: string
        required: false


  cloudify.datatypes.azure.network.NetworkInterfaceCardConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163668.aspx
    properties:
      networkSecurityGroups:
        required: false
      ipConfigurations:
        required: false
      dnsSettings:
        required: false

  cloudify.datatypes.azure.network.IPConfigurationConfig:
    properties:
      privateIPAddress:
        type: string
        description: >
          Static, private IP Address
        required: false
      privateIPAllocationMethod:
        type: string
        description: >
          Defines how a private IP address is assigned. Options
          are Static or Dynamic
        required: true

  cloudify.datatypes.azure.network.PublicIPAddressConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163590.aspx
    properties:
      publicIPAllocationMethod:
        type: string
        description: >
          Defines whether the IP address is stable or dynamic.
          Options are Static or Dynamic
        required: true
      idleTimeoutInMinutes:
        type: integer
        description: >
          Specifies the timeout (in minutes) for the TCP idle connection.
          The value can be set between 4 and 30 minutes
        required: false
      domainNameLabel:
        type: string
        description: >
          The concatenation of the domain name label and the regionalized
          DNS zone make up the fully qualified domain name associated
          with the public IP address.
        required: false
      reverseFqdn:
        type: string
        description: >
          A fully qualified domain name that resolves to this
          public IP address.
        required: false

  cloudify.datatypes.azure.compute.AvailabilitySetConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163607.aspx
    properties:
      platformUpdateDomainCount:
        type: integer
        required: false
      platformFaultDomainCount:
        type: integer
        required: false

  cloudify.datatypes.azure.compute.VirtualMachineConfig:
    description: >
      https://msdn.microsoft.com/en-us/library/azure/mt163591.aspx
    properties:
      hardwareProfile:
        required: true
      storageProfile:
        required: true
      osProfile:
        required: true

  cloudify.datatypes.azure.network.LoadBalancerConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163574.aspx
    properties:
      frontendIPConfigurations:
        required: false
      backendAddressPools:
        required: false
      loadBalancingRules:
        required: false
      probes:
        required: false
      inboundNatRules:
        required: false

  cloudify.datatypes.azure.network.LoadBalancerProbeConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163574.aspx
    properties:
      protocol:
        type: string
        default: Tcp
        required: true
      port:
        type: integer
        required: true
      requestPath:
        type: string
        required: false
      intervalInSeconds:
        type: integer
        default: 5
        required: true
      numberOfProbes:
        type: integer
        default: 16
        required: true

  cloudify.datatypes.azure.network.LoadBalancerIncomingNATRuleConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163574.aspx
    properties:
      protocol:
        type: string
        default: Tcp
        required: true
      frontendPort:
        type: integer
        required: true
      backendPort:
        type: integer
        required: true

  cloudify.datatypes.azure.network.LoadBalancerRuleConfig:
    description: >
      See https://msdn.microsoft.com/en-us/library/mt163574.aspx
    properties:
      protocol:
        type: string
        default: Tcp
        required: true
      frontendPort:
        type: integer
        required: true
      backendPort:
        type: integer
        required: true
      enableFloatingIP:
        type: boolean
        required: false
        default: false
      idleTimeoutInMinutes:
        type: integer
        required: false
        default: 5
      loadDistribution:
        type: string
        required: false
        default: Default


node_types:
  cloudify.azure.nodes.ResourceGroup:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Resources API Version
        default: "2017-05-10"
      name:
        type: string
        description: >
          Name for the resource. Resource group name must be no longer than
          80 characters long. It can contain only alphanumeric characters,
          dash, underscore, opening parenthesis, closing parenthesis,
          and period. The name cannot end with a period.
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.resourcegroup.create
        delete: pkg.cloudify_azure.resources.resourcegroup.delete

  cloudify.azure.nodes.storage.StorageAccount:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Storage API Version
        default: "2015-06-15"
      name:
        type: string
        description: >
          Name for the resource. Storage account name must be between
          3 and 24 characters in length and use numbers and lower-case
          letters only.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      sku:
        description: >
          A Storage account SKU if needed.
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.storage.StorageAccountConfig
        required: true
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.storage.storageaccount.create
        delete: pkg.cloudify_azure.resources.storage.storageaccount.delete

  cloudify.azure.nodes.storage.DataDisk:
    derived_from: cloudify.nodes.Root
    properties:
      name:
        type: string
        description: >
          Name for the resource (include any extension, such as .vhd).
          Can be up to 80 characters in length and
          contain lowercase letters, numbers, ".", and "_". Must start
          with a number or lowercase letter and cannot end with
          either "_" or "."
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.storage.DataDiskConfig
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.storage.disk.create_data_disk
        delete: pkg.cloudify_azure.resources.storage.disk.delete_data_disk

  cloudify.azure.nodes.storage.FileShare:
    derived_from: cloudify.nodes.Root
    properties:
      name:
        type: string
        description: >
          Name for the resource. Can be up to 63 characters in length and
          contain lowercase letters, numbers, and dashes. Must start
          with a number or lowercase letter and cannot contain
          two consecutive dashes.
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.storage.FileShareConfig
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.storage.file.create_file_share

  cloudify.azure.nodes.network.VirtualNetwork:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.VirtualNetworkConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.virtualnetwork.create
        delete: pkg.cloudify_azure.resources.network.virtualnetwork.delete

  cloudify.azure.nodes.network.NetworkSecurityGroup:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.NetworkSecurityGroupConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.networksecuritygroup.create
        delete: pkg.cloudify_azure.resources.network.networksecuritygroup.delete

  cloudify.azure.nodes.network.NetworkSecurityRule:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      network_security_group_name:
        type: string
        description: >
          Name of the Network Security Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Network Security Groupnode)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.NetworkSecurityRuleConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.networksecurityrule.create
        delete: pkg.cloudify_azure.resources.network.networksecurityrule.delete

  cloudify.azure.nodes.network.Subnet:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      virtual_network_name:
        type: string
        description: >
          Name of the Virtual Network that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Virtual Network node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.SubnetConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.subnet.create
        delete: pkg.cloudify_azure.resources.network.subnet.delete

  cloudify.azure.nodes.network.RouteTable:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.RouteTableConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.routetable.create
        delete: pkg.cloudify_azure.resources.network.routetable.delete

  cloudify.azure.nodes.network.Route:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      route_table_name:
        type: string
        description: >
          Name of the Network Security Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Virtual Network node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.RouteConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.route.create
        delete: pkg.cloudify_azure.resources.network.route.delete

  cloudify.azure.nodes.network.NetworkInterfaceCard:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      primary:
        description: >
          When using multiple Network Interfaces, a primary must be set
        required: false
        default: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.NetworkInterfaceCardConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.networkinterfacecard.create
        configure: pkg.cloudify_azure.resources.network.networkinterfacecard.configure
        start: pkg.cloudify_azure.resources.network.networkinterfacecard.start
        delete: pkg.cloudify_azure.resources.network.networkinterfacecard.delete

  cloudify.azure.nodes.network.IPConfiguration:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.IPConfigurationConfig
        required: true
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false

  cloudify.azure.nodes.network.PublicIPAddress:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.PublicIPAddressConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.publicipaddress.create
        start: pkg.cloudify_azure.resources.network.publicipaddress.start
        delete: pkg.cloudify_azure.resources.network.publicipaddress.delete

  cloudify.azure.nodes.compute.AvailabilitySet:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Compute API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.compute.AvailabilitySetConfig
        required: true
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.compute.availabilityset.create
        delete: pkg.cloudify_azure.resources.compute.availabilityset.delete

  cloudify.azure.nodes.compute.VirtualMachine:
    derived_from: cloudify.nodes.Compute
    properties:
      api_version:
        type: string
        description: >
          Compute API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      use_public_ip:
        type: boolean
        description: >
          Tells the deployment to use the public IP (if available) of the resource
          for Cloudify Agent connections
        default: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      plan:
        description: >
          Specifies information about the marketplace image used to create the virtual
          machine. This element is only used for marketplace images.
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.compute.VirtualMachineConfig
        required: true
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
      ip:
        description: |
          Property specifying the IP address of the resource to
          use for the agent installer.
        type: string
        required: false
      os_family:
        description: |
          Property specifying what type of operating system family
          this compute node will run.
        default: windows
      agent_config:
        type: cloudify.datatypes.AgentConfig
        default:
          install_method: remote
          port: 5985
      storage_endpoint:
        type: string
        description: This is the suffix for the storage endpoint. Supported values are core.windows.net or local.azurestack.external.
        default: core.windows.net
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.compute.virtualmachine.create
        configure:
          implementation: pkg.cloudify_azure.resources.compute.virtualmachine.configure
          inputs:
            command_to_execute:
              description: >
                This is the command that the CustomScriptExtension extension will
                execute. The file_uris below will be downloaded and this property
                should specify a command to start the execution of one of them.
              default: powershell -ExecutionPolicy Unrestricted -file ps_enable_winrm_http.ps1
            file_uris:
              default:
              - https://raw.githubusercontent.com/cloudify-incubator/cloudify-azure-plugin/1.4/scripts/ps_enable_winrm_http.ps1
        delete: pkg.cloudify_azure.resources.compute.virtualmachine.delete

  cloudify.azure.nodes.compute.VirtualMachineExtension:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Compute API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      virtual_machine_name:
        type: string
        description: >
          Name of the Virtual Machine that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Virtual Machine node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: pkg.cloudify_azure.resources.compute.virtualmachineextension.create
          inputs:
            resource_config:
              default:
                publisher:
                  type: string
                  required: true
                ext_type:
                  description: >
                    Since "type" is a reserved name, "ext_type" maps to "type"
                  type: string
                  required: true
                typeHandlerVersion:
                  type: string
                  required: true
                  default: 1.4
                settings:
                  required: false
        delete: pkg.cloudify_azure.resources.compute.virtualmachineextension.delete

  cloudify.azure.nodes.network.LoadBalancer:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.LoadBalancerConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.loadbalancer.create
        configure: pkg.cloudify_azure.resources.network.loadbalancer.configure
        delete: pkg.cloudify_azure.resources.network.loadbalancer.delete

  cloudify.azure.nodes.network.LoadBalancer.BackendAddressPool:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      load_balancer_name:
        type: string
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.loadbalancer.create_backend_pool
        delete: pkg.cloudify_azure.resources.network.loadbalancer.delete_backend_pool

  cloudify.azure.nodes.network.LoadBalancer.Probe:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      load_balancer_name:
        type: string
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.LoadBalancerProbeConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.loadbalancer.create_probe
        delete: pkg.cloudify_azure.resources.network.loadbalancer.delete_probe

  cloudify.azure.nodes.network.LoadBalancer.IncomingNATRule:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      load_balancer_name:
        type: string
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.LoadBalancerIncomingNATRuleConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.loadbalancer.create_incoming_nat_rule
        delete: pkg.cloudify_azure.resources.network.loadbalancer.delete_incoming_nat_rule

  cloudify.azure.nodes.network.LoadBalancer.Rule:
    derived_from: cloudify.nodes.Root
    properties:
      api_version:
        type: string
        description: >
          Network API Version
        default: "2016-03-30"
      name:
        type: string
        description: >
          Name for the resource.
        required: false
      resource_group_name:
        type: string
        description: >
          Name of the Resource Group that the existing resource belongs to
          (this is only useful when not using a relationship between a resource
          node and a Resource Group node)
        required: false
      load_balancer_name:
        type: string
        required: false
      location:
        type: string
        description: >
          Specifies the supported Azure location for the resource
        required: false
      tags:
        description: >
          Specifies a dictionary of one or more name and value pairs that describe a tag
        required: false
      resource_config:
        description: >
          A dictionary of values to pass as properties when creating the resource
        type: cloudify.datatypes.azure.network.LoadBalancerRuleConfig
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
      retry_after:
        description: >
          Overrides the Azure-specified "retry_after" response. This property
          will set the number of seconds for each task retry interval (in the
          case of iteratively checking the status of an asynchronous operation)
        type: integer
        required: false
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.network.loadbalancer.create_rule
        delete: pkg.cloudify_azure.resources.network.loadbalancer.delete_rule

  cloudify.azure.Deployment:
    derived_from: cloudify.nodes.Root
    properties:
      name:
        required: true
        type: string
      location:
        required: true
        type: string
      template_file:
        type: string
        required: false
        description: >
          Deployment template file
      template:
        type: string
        required: false
        description: >
          Deployment template
      params:
        description: >
          Deployment params
        required: false
        default: {}
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
    interfaces:
      cloudify.interfaces.lifecycle:
        create: pkg.cloudify_azure.resources.deployment.create
        delete: pkg.cloudify_azure.resources.deployment.delete

  cloudify.azure.nodes.compute.ContainerService:
    derived_from: cloudify.nodes.Root
    properties:
      name:
        required: true
        type: string
      resource_group:
        required: true
        type: string
      container_service_config:
        type: string
        required: false
        description: >
          Container service config details
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: pkg.cloudify_azure.resources.compute.container_service.create
          inputs:
            name:
              default: { get_property: [SELF, name]}
            resource_group:
              default: { get_property: [SELF, resource_group]}
            container_service_config:
              default: { get_property: [SELF, container_service_config]}
            azure_config:
              default: { get_property: [SELF, azure_config]}
        delete:
          implementation: pkg.cloudify_azure.resources.compute.container_service.delete

  cloudify.azure.nodes.Plan:
    derived_from: cloudify.nodes.Root
    properties:
      name:
        required: true
        type: string
      resource_group:
        required: true
        type: string
      sku:
        type: string
        required: false
        description: >
          SKU details, including location, name, capacity and tier
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
      use_external_resource:
        description: >
          Indicate whether the resource exists or if Cloudify should create the resource
        type: boolean
        default: false
        required: true
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: pkg.cloudify_azure.resources.app_service.plan.create
          inputs:
            name:
              default: { get_property: [SELF, name]}
            resource_group:
              default: { get_property: [SELF, resource_group]}
            sku:
              default: { get_property: [SELF, sku]}
            azure_config:
              default: { get_property: [SELF, azure_config]}
        delete:
          implementation: pkg.cloudify_azure.resources.app_service.plan.delete

  cloudify.azure.nodes.WebApp:
    derived_from: cloudify.nodes.Root
    properties:
      name:
        required: true
        type: string
      resource_group:
        required: true
        type: string
      app_config:
        type: string
        required: false
        description: >
          App config details, including location and plan
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: pkg.cloudify_azure.resources.app_service.webapp.create
          inputs:
            name:
              default: { get_property: [SELF, name]}
            resource_group:
              default: { get_property: [SELF, resource_group]}
            app_config:
              default: { get_property: [SELF, app_config]}
            azure_config:
              default: { get_property: [SELF, azure_config]}
        delete:
          implementation: pkg.cloudify_azure.resources.app_service.webapp.delete

  cloudify.azure.nodes.PublishingUser:
    derived_from: cloudify.nodes.Root
    properties:
      user_details:
        required: true
        description: >
          User details including location, name, kind, user_name,...
      azure_config:
        description: >
          A dictionary of values to pass to authenticate with the Azure API
        type: cloudify.datatypes.azure.Config
        required: false
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: pkg.cloudify_azure.resources.app_service.publishing_user.set_user
          inputs:
            user_details:
              default: { get_property: [SELF, user_details]}
            azure_config:
              default: { get_property: [SELF, azure_config]}

relationships:
  cloudify.azure.relationships.contained_in_resource_group:
    derived_from: cloudify.relationships.contained_in

  cloudify.azure.relationships.contained_in_storage_account:
    derived_from: cloudify.relationships.contained_in

  cloudify.azure.relationships.contained_in_virtual_network:
    derived_from: cloudify.relationships.contained_in

  cloudify.azure.relationships.contained_in_network_security_group:
    derived_from: cloudify.relationships.contained_in

  cloudify.azure.relationships.contained_in_route_table:
    derived_from: cloudify.relationships.contained_in

  cloudify.azure.relationships.contained_in_load_balancer:
    derived_from: cloudify.relationships.contained_in

  cloudify.azure.relationships.network_security_group_attached_to_subnet:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish: pkg.cloudify_azure.resources.network.subnet.attach_network_security_group
        unlink: pkg.cloudify_azure.resources.network.subnet.detach_network_security_group

  cloudify.azure.relationships.route_table_attached_to_subnet:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish: pkg.cloudify_azure.resources.network.subnet.attach_route_table
        unlink: pkg.cloudify_azure.resources.network.subnet.detach_route_table

  cloudify.azure.relationships.nic_connected_to_network_security_group:
    derived_from: cloudify.relationships.connected_to

  cloudify.azure.relationships.nic_connected_to_ip_configuration:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        preconfigure: pkg.cloudify_azure.resources.network.networkinterfacecard.attach_ip_configuration

  cloudify.azure.relationships.lb_connected_to_ip_configuration:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        preconfigure: pkg.cloudify_azure.resources.network.loadbalancer.attach_ip_configuration

  cloudify.azure.relationships.ip_configuration_connected_to_subnet:
    derived_from: cloudify.relationships.connected_to

  cloudify.azure.relationships.ip_configuration_connected_to_public_ip:
    derived_from: cloudify.relationships.connected_to

  cloudify.azure.relationships.connected_to_storage_account:
    derived_from: cloudify.relationships.connected_to

  cloudify.azure.relationships.connected_to_data_disk:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish: pkg.cloudify_azure.resources.compute.virtualmachine.attach_disk
        unlink: pkg.cloudify_azure.resources.compute.virtualmachine.detach_disk

  cloudify.azure.relationships.connected_to_nic:
    derived_from: cloudify.relationships.connected_to

  cloudify.azure.relationships.connected_to_availability_set:
    derived_from: cloudify.relationships.connected_to

  cloudify.azure.relationships.connected_to_ip_configuration:
    derived_from: cloudify.relationships.connected_to

  cloudify.azure.relationships.connected_to_lb_be_pool:
    derived_from: cloudify.relationships.connected_to

  cloudify.azure.relationships.connected_to_lb_probe:
    derived_from: cloudify.relationships.connected_to

  cloudify.azure.relationships.vmx_contained_in_vm:
    derived_from: cloudify.relationships.contained_in

  cloudify.azure.relationships.nic_connected_to_lb_be_pool:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish: pkg.cloudify_azure.resources.network.loadbalancer.attach_nic_to_backend_pool
        unlink: pkg.cloudify_azure.resources.network.loadbalancer.detach_nic_from_backend_pool

  cloudify.azure.relationships.vm_connected_to_datadisk:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish:
          implementation: pkg.cloudify_azure.resources.compute.virtualmachine.attach_data_disk
          inputs:
            lun:
              description: >
                Specifies the logical unit number of the data disk in the VM
              default: 0
              required: true
        unlink: pkg.cloudify_azure.resources.compute.virtualmachine.detach_data_disk
