docs: def attach_volume(name=None, kwargs=None, instance_id=None, call=None):
      '''
      Attach a volume to an instance
      '''
      if call != 'action':
          raise SaltCloudSystemExit(
              'The attach_volume action must be called with -a or --action.'
          )
  
      if not kwargs:
          kwargs = {}
  
      if 'instance_id' in kwargs:
          instance_id = kwargs['instance_id']
  
      if name and not instance_id:
          instance_id = _get_node(name)['instanceId']
  
      if not name and not instance_id:
          log.error('Either a name or an instance_id is required.')
          return False
  
      if 'volume_id' not in kwargs:
          log.error('A volume_id is required.')
          return False
  
      if 'device' not in kwargs:
          log.error('A device is required (ex. /dev/sdb1).')
          return False
  
      params = {'Action': 'AttachVolume',
                'VolumeId': kwargs['volume_id'],
                'InstanceId': instance_id,
                'Device': kwargs['device']}
  
      log.debug(params)
  
      vm_ = get_configured_provider()
  
      data = salt.utils.cloud.wait_for_ip(
          __attach_vol_to_instance,
          update_args=(params, kwargs, instance_id),
          timeout=config.get_cloud_config_value(
              'wait_for_ip_timeout', vm_, __opts__, default=10 * 60),
          interval=config.get_cloud_config_value(
              'wait_for_ip_interval', vm_, __opts__, default=10),
          interval_multiplier=config.get_cloud_config_value(
              'wait_for_ip_interval_multiplier', vm_, __opts__, default=1),
      )
  
      return data