docs: def create_attach_volumes(name, kwargs, call=None, wait_to_finish=True):
      '''
      Create and attach volumes to created node
      '''
      if call != 'action':
          raise SaltCloudSystemExit(
              'The create_attach_volumes action must be called with '
              '-a or --action.'
          )
  
      if kwargs is None:
          kwargs = {}
  
      if isinstance(kwargs['volumes'], six.string_types):
          volumes = salt.utils.yaml.safe_load(kwargs['volumes'])
      else:
          volumes = kwargs['volumes']
  
      # From the Azure .NET SDK doc
      #
      # The Create Data Disk operation adds a data disk to a virtual
      # machine. There are three ways to create the data disk using the
      # Add Data Disk operation.
      #    Option 1 - Attach an empty data disk to
      # the role by specifying the disk label and location of the disk
      # image. Do not include the DiskName and SourceMediaLink elements in
      # the request body. Include the MediaLink element and reference a
      # blob that is in the same geographical region as the role. You can
      # also omit the MediaLink element. In this usage, Azure will create
      # the data disk in the storage account configured as default for the
      # role.
      #    Option 2 - Attach an existing data disk that is in the image
      # repository. Do not include the DiskName and SourceMediaLink
      # elements in the request body. Specify the data disk to use by
      # including the DiskName element. Note: If included the in the
      # response body, the MediaLink and LogicalDiskSizeInGB elements are
      # ignored.
      #    Option 3 - Specify the location of a blob in your storage
      # account that contain a disk image to use. Include the
      # SourceMediaLink element. Note: If the MediaLink element
      # isincluded, it is ignored.  (see
      # http://msdn.microsoft.com/en-us/library/windowsazure/jj157199.aspx
      # for more information)
      #
      # Here only option 1 is implemented
      conn = get_conn()
      ret = []
      for volume in volumes:
          if "disk_name" in volume:
              log.error("You cannot specify a disk_name. Only new volumes are allowed")
              return False
          # Use the size keyword to set a size, but you can use the
          # azure name too. If neither is set, the disk has size 100GB
          volume.setdefault("logical_disk_size_in_gb", volume.get("size", 100))
          volume.setdefault("host_caching", "ReadOnly")
          volume.setdefault("lun", 0)
          # The media link is vm_name-disk-[0-15].vhd
          volume.setdefault("media_link",
                            kwargs["media_link"][:-4] + "-disk-{0}.vhd".format(volume["lun"]))
          volume.setdefault("disk_label",
                            kwargs["role_name"] + "-disk-{0}".format(volume["lun"]))
          volume_dict = {
              'volume_name': volume["lun"],
              'disk_label': volume["disk_label"]
          }
  
          # Preparing the volume dict to be passed with **
          kwargs_add_data_disk = ["lun", "host_caching", "media_link",
                                  "disk_label", "disk_name",
                                  "logical_disk_size_in_gb",
                                  "source_media_link"]
          for key in set(volume.keys()) - set(kwargs_add_data_disk):
              del volume[key]
  
          attach = conn.add_data_disk(kwargs["service_name"], kwargs["deployment_name"], kwargs["role_name"],
                                      **volume)
          log.debug(attach)
  
          # If attach is None then everything is fine
          if attach:
              msg = (
                  '{0} attached to {1} (aka {2})'.format(
                      volume_dict['volume_name'],
                      kwargs['role_name'],
                      name,
                  )
              )
              log.info(msg)
              ret.append(msg)
          else:
              log.error('Error attaching %s on Azure', volume_dict)
      return ret