/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.emc.sa.service.vmware.block.tasks; import java.util.Collection; import java.util.Map; import javax.inject.Inject; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import com.emc.sa.engine.ExecutionTask; import com.google.common.collect.Maps; import com.iwave.ext.vmware.VCenterAPI; import com.iwave.ext.vmware.VMwareUtils; import com.vmware.vim25.mo.ClusterComputeResource; import com.vmware.vim25.mo.Datastore; import com.vmware.vim25.mo.HostSystem; public class VerifyDatastoreHostMounts extends ExecutionTask<Void> { @Inject private VCenterAPI vcenter; private HostSystem host; private ClusterComputeResource cluster; private Datastore datastore; public VerifyDatastoreHostMounts(HostSystem host, ClusterComputeResource cluster, Datastore datastore) { this.host = host; this.cluster = cluster; this.datastore = datastore; } @Override public void execute() throws Exception { Map<String, HostSystem> expectedHosts = Maps.newHashMap(); if (cluster != null) { for (HostSystem clusterHost : cluster.getHosts()) { expectedHosts.put(VMwareUtils.getPath(clusterHost), clusterHost); } } else { expectedHosts.put(VMwareUtils.getPath(host), host); } Map<String, HostSystem> actualHosts = Maps.newHashMap(); for (HostSystem datastoreHost : VMwareUtils.getHostsForDatastore(vcenter, datastore)) { actualHosts.put(VMwareUtils.getPath(datastoreHost), datastoreHost); } Collection<?> added = CollectionUtils.subtract(actualHosts.keySet(), expectedHosts.keySet()); Collection<?> removed = CollectionUtils.subtract(expectedHosts.keySet(), actualHosts.keySet()); if (!(added.isEmpty() && removed.isEmpty())) { String expected = StringUtils.join(expectedHosts.keySet(), ", "); String actual = StringUtils.join(actualHosts.keySet(), ", "); throw stateException("illegalState.VerifyDatastoreHostMounts", expected, actual); } } }