Returns a list of vim.HostScsiDisk objects representing disks
    in a ESXi host, filtered by their cannonical names and scsi_addresses

    host_ref
        The vim.HostSystem object representing the host that contains the
        requested disks.

    disk_ids
        The list of canonical names of the disks to be retrieved. Default value
        is None

    scsi_addresses
        The list of scsi addresses of the disks to be retrieved. Default value
        is None

    get_all_disks
        Specifies whether to retrieve all disks in the host.
        Default value is False.

def get_disks(host_ref, disk_ids=None, scsi_addresses=None,
              get_all_disks=False):
    '''
    Returns a list of vim.HostScsiDisk objects representing disks
    in a ESXi host, filtered by their cannonical names and scsi_addresses

    host_ref
        The vim.HostSystem object representing the host that contains the
        requested disks.

    disk_ids
        The list of canonical names of the disks to be retrieved. Default value
        is None

    scsi_addresses
        The list of scsi addresses of the disks to be retrieved. Default value
        is None

    get_all_disks
        Specifies whether to retrieve all disks in the host.
        Default value is False.
    '''
    hostname = get_managed_object_name(host_ref)
    if get_all_disks:
        log.trace('Retrieving all disks in host \'%s\'', hostname)
    else:
        log.trace('Retrieving disks in host \'%s\': ids = (%s); scsi '
                  'addresses = (%s)', hostname, disk_ids, scsi_addresses)
        if not (disk_ids or scsi_addresses):
            return []
    si = get_service_instance_from_managed_object(host_ref, name=hostname)
    storage_system = get_storage_system(si, host_ref, hostname)
    disk_keys = []
    if scsi_addresses:
        # convert the scsi addresses to disk keys
        lun_key_by_scsi_addr = _get_scsi_address_to_lun_key_map(si, host_ref,
                                                                storage_system,
                                                                hostname)
        disk_keys = [key for scsi_addr, key
                     in six.iteritems(lun_key_by_scsi_addr)
                     if scsi_addr in scsi_addresses]
        log.trace('disk_keys based on scsi_addresses = %s', disk_keys)

    scsi_luns = get_all_luns(host_ref, storage_system)
    scsi_disks = [disk for disk in scsi_luns
                  if isinstance(disk, vim.HostScsiDisk) and (
                      get_all_disks or
                      # Filter by canonical name
                      (disk_ids and (disk.canonicalName in disk_ids)) or
                      # Filter by disk keys from scsi addresses
                      (disk.key in disk_keys))]
    log.trace('Retrieved disks in host \'%s\': %s',
              hostname, [d.canonicalName for d in scsi_disks])
    return scsi_disks