/* * Copyright 2016 EMC Corporation * All Rights Reserved */ package com.emc.sa.service.vmware.block.tasks; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import com.emc.sa.service.vmware.tasks.RetryableTask; import com.iwave.ext.vmware.HostStorageAPI; import com.iwave.ext.vmware.VMWareException; import com.vmware.vim25.HostScsiDisk; import com.vmware.vim25.QuiesceDatastoreIOForHAFailed; import com.vmware.vim25.ResourceInUse; import com.vmware.vim25.mo.HostSystem; public class AttachScsiDisk extends RetryableTask<Void> { private final HostSystem host; private final List<HostScsiDisk> disks; public AttachScsiDisk(HostSystem host, List<HostScsiDisk> disks) { this.host = host; this.disks = disks; List<String> deviceNames = new ArrayList<>(); for (HostScsiDisk disk : disks) { deviceNames.add(disk.getDeviceName()); } String lunsString = StringUtils.join(deviceNames, ','); provideDetailArgs(lunsString, host.getName()); } @Override protected Void tryExecute() { for (HostScsiDisk disk : disks) { new HostStorageAPI(host).attachScsiLun(disk); } return null; } @Override protected boolean canRetry(VMWareException e) { return e.getCause() instanceof QuiesceDatastoreIOForHAFailed || e.getCause() instanceof ResourceInUse; } }