Search in sources :

Example 16 with VcenterObjectNotFoundException

use of com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException in project coprhd-controller by CoprHD.

the class VcenterApiClient method refreshRescanHostStorage.

public void refreshRescanHostStorage(String datacenterName, String clusterNameOrMoRef, String hostname) throws VcenterSystemException, VcenterObjectNotFoundException, VcenterObjectConnectionException {
    try {
        _log.info("Request to check connected and powered on for host " + hostname + " in datacenter " + datacenterName + " cluster " + clusterNameOrMoRef);
        HostSystem hostSystem = (HostSystem) createManagedEntityMap(datacenterName, clusterNameOrMoRef, hostname, true).get("HostSystem");
        _log.info("Refresh and rescan storage before disk discovery on host " + hostname);
        // expensive but needed to pickup any storage changes
        hostSystem.getHostStorageSystem().rescanAllHba();
        _log.info("Rescan HBAs complete");
        hostSystem.getHostStorageSystem().refreshStorageSystem();
        _log.info("Refresh storage system complete");
    } catch (VcenterSystemException | VcenterObjectNotFoundException | VcenterObjectConnectionException e) {
        throw e;
    } catch (Exception e) {
        _log.error("refreshRescanStorage exception " + e);
        throw new VcenterSystemException(e.getLocalizedMessage());
    }
}
Also used : VcenterObjectNotFoundException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException) VcenterObjectConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectConnectionException) HostSystem(com.vmware.vim25.mo.HostSystem) VcenterSystemException(com.emc.storageos.vcentercontroller.exceptions.VcenterSystemException) VcenterSystemException(com.emc.storageos.vcentercontroller.exceptions.VcenterSystemException) VcenterServerConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterServerConnectionException) VcenterObjectConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectConnectionException) VcenterObjectNotFoundException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException)

Example 17 with VcenterObjectNotFoundException

use of com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException in project coprhd-controller by CoprHD.

the class VcenterApiClient method removeHost.

public void removeHost(String datacenterName, String clusterNameOrMoRef, String hostname) throws VcenterSystemException, VcenterObjectNotFoundException, VcenterObjectConnectionException {
    try {
        _log.info("Request to remove host " + hostname + " to datacenter " + datacenterName + " cluster " + clusterNameOrMoRef);
        ClusterComputeResource clusterComputeResource = (ClusterComputeResource) createManagedEntityMap(datacenterName, clusterNameOrMoRef, null, false).get("ClusterComputeResource");
        HostSystem hostSystem = findByHostname(clusterComputeResource, hostname);
        if (hostSystem == null) {
            _log.info("Host not found thus no delete necessary");
        } else {
            // Check that host can be removed (either in maintenance mode or in a !poweredOn or !connected state
            try {
                checkHostConnectedPoweredOn(hostSystem);
                _log.info("Host " + hostname + " connected and powered on so now check maintenance mode");
                if (!hostSystem.getRuntime().isInMaintenanceMode()) {
                    _log.error("Host " + hostname + " must be in maintenance mode before deletion");
                    throw new VcenterSystemException("Host " + hostname + " must be in maintenance mode before deletion");
                }
            } catch (VcenterObjectConnectionException e) {
                _log.info("Host is not connected and/or powered on so go ahead and remove without maintenance mode check");
            }
            // Remove
            Integer hostOperationTimeout = Integer.parseInt(propertyInfo.getProperty("vcenter_host_operation_timeout"));
            VcenterTaskMonitor taskMonitor = new VcenterTaskMonitor(hostOperationTimeout);
            Task deleteHostTask = hostSystem.destroy_Task();
            // call blocks
            VcenterTaskMonitor.TaskStatus taskStatus = taskMonitor.monitor(deleteHostTask);
            if (taskStatus == VcenterTaskMonitor.TaskStatus.SUCCESS) {
                _log.info("Delete host " + hostname + " task succeeded");
            } else if (taskStatus == VcenterTaskMonitor.TaskStatus.ERROR) {
                String errorMessage = "Delete host " + hostname + " task failed - " + taskMonitor.errorDescription;
                _log.error(errorMessage);
                throw new VcenterSystemException(errorMessage);
            } else if (taskStatus == VcenterTaskMonitor.TaskStatus.TIMED_OUT) {
                _log.error("Delete host " + hostname + " task timed out at " + taskMonitor.progressPercent);
                throw new VcenterSystemException("Delete host " + hostname + " task timed out at " + taskMonitor.progressPercent);
            } else {
                // Should not execute - Just here in case someone ever added a new state so we catch it
                _log.error("Unknown task status encountered tracking delete host " + taskStatus);
                throw new VcenterSystemException("Unknown task status encountered tracking delete host " + taskStatus);
            }
        }
    } catch (VcenterSystemException | VcenterObjectNotFoundException | VcenterObjectConnectionException e) {
        throw e;
    } catch (Exception e) {
        _log.error("Exception removing host: " + e);
        throw new VcenterSystemException(e.getLocalizedMessage());
    }
}
Also used : Task(com.vmware.vim25.mo.Task) VcenterObjectNotFoundException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException) ClusterComputeResource(com.vmware.vim25.mo.ClusterComputeResource) VcenterObjectConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectConnectionException) HostSystem(com.vmware.vim25.mo.HostSystem) VcenterSystemException(com.emc.storageos.vcentercontroller.exceptions.VcenterSystemException) VcenterSystemException(com.emc.storageos.vcentercontroller.exceptions.VcenterSystemException) VcenterServerConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterServerConnectionException) VcenterObjectConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectConnectionException) VcenterObjectNotFoundException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException)

Example 18 with VcenterObjectNotFoundException

use of com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException in project coprhd-controller by CoprHD.

the class VcenterApiClient method addHost.

public String addHost(String datacenterName, String clusterNameOrMoRef, String hostname, String username, String password) throws VcenterSystemException, VcenterObjectNotFoundException, VcenterObjectConnectionException {
    try {
        _log.info("Request to add host " + hostname + " to datacenter " + datacenterName + " cluster " + clusterNameOrMoRef);
        ClusterComputeResource clusterComputeResource = (ClusterComputeResource) createManagedEntityMap(datacenterName, clusterNameOrMoRef, null, false).get("ClusterComputeResource");
        HostSystem hostSystem = findByHostname(clusterComputeResource, hostname);
        if (hostSystem == null) {
            _log.info("Host " + hostname + " does not exist and will be added");
            if (username == null || username.trim().equals("") || password == null || password.trim().equals("")) {
                _log.error("Username and/or password missing - Both required to add host to cluster");
                throw new VcenterSystemException("Username and/or password missing - Both required to add host to cluster");
            }
            HostConnectSpec hostConnectSpec = new HostConnectSpec();
            hostConnectSpec.setHostName(hostname);
            hostConnectSpec.setUserName(username);
            hostConnectSpec.setPassword(password);
            // ie
            hostConnectSpec.setSslThumbprint(getHostCertificate(hostname, username, password));
            // 1D:0C:63:FC:58:58:1C:66:F0:5B:C4:0B:F3:84:0E:27:E9:59:83:F7
            _log.info("Attempt to add host " + hostname + " to " + datacenterName + "/" + clusterComputeResource.getName());
            Integer hostOperationTimeout = Integer.parseInt(propertyInfo.getProperty("vcenter_host_operation_timeout"));
            Integer hostOperationTimeoutMillis = hostOperationTimeout * 1000;
            Integer retryCount = 1;
            Long startTimeMillis = System.currentTimeMillis();
            Long cutoffTimeMillis = startTimeMillis + hostOperationTimeoutMillis;
            VcenterTaskMonitor taskMonitor = new VcenterTaskMonitor(hostOperationTimeout);
            Task addHostTask = clusterComputeResource.addHost_Task(hostConnectSpec, true, null, null);
            // call blocks
            VcenterTaskMonitor.TaskStatus taskStatus = taskMonitor.monitor(addHostTask);
            while ((System.currentTimeMillis() < cutoffTimeMillis) && taskStatus == VcenterTaskMonitor.TaskStatus.ERROR) {
                _log.info("Add host " + hostname + " retry error " + taskMonitor.errorDescription + " count " + retryCount);
                // Retry is time based and if each retry executes very quickly (ie milliseconds) then we should
                Thread.sleep(60000);
                // throttle and only retry every 60 seconds
                addHostTask = clusterComputeResource.addHost_Task(hostConnectSpec, true, null, null);
                // call blocks
                taskStatus = taskMonitor.monitor(addHostTask);
                retryCount++;
            }
            if (taskStatus == VcenterTaskMonitor.TaskStatus.SUCCESS) {
                _log.info("Add host " + hostname + " task succeeded - Attempt to find host in cluster");
                hostSystem = findByHostname(clusterComputeResource, hostname);
            } else if (taskStatus == VcenterTaskMonitor.TaskStatus.ERROR) {
                String errorMessage = "Add host " + hostname + " task failed - " + taskMonitor.errorDescription;
                if (taskMonitor.errorDescription.contains("already exists.")) {
                    errorMessage += " - Ensure adding host to correct cluster or remove host from its existing cluster";
                }
                _log.error(errorMessage);
                throw new VcenterSystemException(errorMessage);
            } else if (taskStatus == VcenterTaskMonitor.TaskStatus.TIMED_OUT) {
                _log.error("Add host " + hostname + " task timed out at " + taskMonitor.progressPercent);
                throw new VcenterSystemException("Add host " + hostname + " task timed out at " + taskMonitor.progressPercent);
            } else {
                // Should not execute - Just here in case someone ever added a new state so we catch it
                _log.error("Unknown task status encountered tracking add host " + taskStatus);
                throw new VcenterSystemException("Unknown task status encountered tracking add host " + taskStatus);
            }
            trackHostTasks(hostSystem, hostOperationTimeout);
            // Only take host out of maintenance mode if it's being added. We don't want to exit maintenance mode on other hosts since
            // customer may have intentionally put it on that.
            exitMaintenanceModeHost(hostSystem);
        }
        // Some nice conveniences to reconnect and exit maintenance mode to ready the host for action
        reconnectHost(hostSystem);
        // Collect some details
        StringBuffer hostDetails = new StringBuffer();
        hostDetails.append("Host ").append(datacenterName).append("/").append(clusterComputeResource.getName()).append("/").append(hostname).append(" ");
        String os = hostSystem.getPropertyByPath("config.product.version").toString();
        hostDetails.append("OS ").append(os).append(" ");
        String key = hostSystem.getMOR().getVal();
        hostDetails.append("key ").append(key).append(" ");
        String connectionState = hostSystem.getRuntime().getConnectionState().toString();
        hostDetails.append("Connection State ").append(connectionState).append(" ");
        String powerState = hostSystem.getRuntime().getPowerState().toString();
        hostDetails.append("Power State ").append(powerState).append(" ");
        boolean maintenanceMode = hostSystem.getRuntime().isInMaintenanceMode();
        hostDetails.append("Maintenance Mode ").append(maintenanceMode).append(" ");
        _log.info(hostDetails.toString());
        return hostSystem.getMOR().getVal();
    } catch (VcenterSystemException | VcenterObjectNotFoundException | VcenterObjectConnectionException e) {
        throw e;
    } catch (Exception e) {
        _log.error("Exception adding host: " + e);
        throw new VcenterSystemException(e.getLocalizedMessage());
    }
}
Also used : Task(com.vmware.vim25.mo.Task) ClusterComputeResource(com.vmware.vim25.mo.ClusterComputeResource) VcenterObjectConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectConnectionException) VcenterSystemException(com.emc.storageos.vcentercontroller.exceptions.VcenterSystemException) VcenterServerConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterServerConnectionException) VcenterObjectConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectConnectionException) VcenterObjectNotFoundException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException) VcenterObjectNotFoundException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException) HostSystem(com.vmware.vim25.mo.HostSystem) HostConnectSpec(com.vmware.vim25.HostConnectSpec) VcenterSystemException(com.emc.storageos.vcentercontroller.exceptions.VcenterSystemException)

Example 19 with VcenterObjectNotFoundException

use of com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException in project coprhd-controller by CoprHD.

the class VcenterControllerImpl method enterMaintenanceMode.

@Override
public void enterMaintenanceMode(URI datacenterUri, URI clusterUri, URI hostUri) throws InternalException {
    VcenterApiClient vcenterApiClient = null;
    try {
        Host host = _dbClient.queryObject(Host.class, hostUri);
        VcenterDataCenter vcenterDataCenter = _dbClient.queryObject(VcenterDataCenter.class, datacenterUri);
        Cluster cluster = _dbClient.queryObject(Cluster.class, clusterUri);
        Vcenter vcenter = _dbClient.queryObject(Vcenter.class, vcenterDataCenter.getVcenter());
        _log.info("Request to enter maintenance mode for " + vcenter.getLabel() + "/" + vcenterDataCenter.getLabel() + "/" + cluster.getLabel() + "/" + host.getHostName());
        vcenterApiClient = new VcenterApiClient(_coordinator.getPropertyInfo());
        vcenterApiClient.setup(vcenter.getIpAddress(), vcenter.getUsername(), vcenter.getPassword(), vcenter.getPortNumber());
        vcenterApiClient.enterMaintenanceMode(vcenterDataCenter.getLabel(), cluster.getExternalId(), host.getHostName());
    } catch (VcenterObjectConnectionException e) {
        throw VcenterControllerException.exceptions.objectConnectionException(e.getLocalizedMessage(), e);
    } catch (VcenterObjectNotFoundException e) {
        throw VcenterControllerException.exceptions.objectNotFoundException(e.getLocalizedMessage(), e);
    } catch (VcenterServerConnectionException e) {
        throw VcenterControllerException.exceptions.serverConnectionException(e.getLocalizedMessage(), e);
    } catch (Exception e) {
        _log.error("enterMaintenanceMode exception " + e);
        throw VcenterControllerException.exceptions.unexpectedException(e.getLocalizedMessage(), e);
    } finally {
        if (vcenterApiClient != null) {
            vcenterApiClient.destroy();
        }
    }
}
Also used : Vcenter(com.emc.storageos.db.client.model.Vcenter) VcenterServerConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterServerConnectionException) VcenterObjectNotFoundException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException) VcenterApiClient(com.emc.storageos.vcentercontroller.VcenterApiClient) VcenterObjectConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectConnectionException) Cluster(com.emc.storageos.db.client.model.Cluster) Host(com.emc.storageos.db.client.model.Host) VcenterDataCenter(com.emc.storageos.db.client.model.VcenterDataCenter) VcenterServerConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterServerConnectionException) InternalException(com.emc.storageos.svcs.errorhandling.resources.InternalException) VcenterObjectConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectConnectionException) DeviceControllerException(com.emc.storageos.exceptions.DeviceControllerException) VcenterObjectNotFoundException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException) VcenterControllerException(com.emc.storageos.vcentercontroller.exceptions.VcenterControllerException)

Example 20 with VcenterObjectNotFoundException

use of com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException in project coprhd-controller by CoprHD.

the class ComputeDeviceControllerImpl method removeVcenterCluster.

/**
 * Remove cluster from vCenter.
 *
 * @param clusterId
 * @param datacenterId
 * @param stepId
 */
public void removeVcenterCluster(URI clusterId, URI datacenterId, String stepId) {
    log.info("removeVcenterCluster {} {}", clusterId, datacenterId);
    Cluster cluster = null;
    try {
        WorkflowStepCompleter.stepExecuting(stepId);
        cluster = _dbClient.queryObject(Cluster.class, clusterId);
        vcenterController.removeVcenterCluster(datacenterId, clusterId);
        log.info("Remove vCenter cluster success");
        WorkflowStepCompleter.stepSucceded(stepId);
    } catch (VcenterControllerException e) {
        log.warn("VcenterControllerException when trying to removeVcenterCluster: " + e.getMessage(), e);
        if (e.getCause() instanceof VcenterObjectNotFoundException) {
            log.info("did not find the datacenter or cluster, considering success");
            WorkflowStepCompleter.stepSucceded(stepId);
        } else {
            log.error("failure " + e);
            WorkflowStepCompleter.stepFailed(stepId, e);
        }
    } catch (InternalException e) {
        log.error("InternalException when trying to removeVcenterCluster: " + e.getMessage(), e);
        WorkflowStepCompleter.stepFailed(stepId, e);
    } catch (Exception e) {
        log.error("unexpected exception " + e);
        ServiceCoded serviceCoded = ComputeSystemControllerException.exceptions.unableToRemoveVcenterCluster(cluster != null ? cluster.getLabel() : clusterId.toString(), e);
        WorkflowStepCompleter.stepFailed(stepId, serviceCoded);
    }
}
Also used : VcenterObjectNotFoundException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException) ServiceCoded(com.emc.storageos.svcs.errorhandling.model.ServiceCoded) Cluster(com.emc.storageos.db.client.model.Cluster) InternalException(com.emc.storageos.svcs.errorhandling.resources.InternalException) VcenterControllerException(com.emc.storageos.vcentercontroller.exceptions.VcenterControllerException) VcenterObjectConnectionException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectConnectionException) VcenterObjectNotFoundException(com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException) ImageServerControllerException(com.emc.storageos.imageservercontroller.exceptions.ImageServerControllerException) ComputeSystemControllerException(com.emc.storageos.computesystemcontroller.exceptions.ComputeSystemControllerException) VcenterControllerException(com.emc.storageos.vcentercontroller.exceptions.VcenterControllerException) InternalException(com.emc.storageos.svcs.errorhandling.resources.InternalException)

Aggregations

VcenterObjectConnectionException (com.emc.storageos.vcentercontroller.exceptions.VcenterObjectConnectionException)23 VcenterObjectNotFoundException (com.emc.storageos.vcentercontroller.exceptions.VcenterObjectNotFoundException)23 VcenterServerConnectionException (com.emc.storageos.vcentercontroller.exceptions.VcenterServerConnectionException)19 VcenterSystemException (com.emc.storageos.vcentercontroller.exceptions.VcenterSystemException)13 InternalException (com.emc.storageos.svcs.errorhandling.resources.InternalException)10 VcenterControllerException (com.emc.storageos.vcentercontroller.exceptions.VcenterControllerException)10 Cluster (com.emc.storageos.db.client.model.Cluster)8 ClusterComputeResource (com.vmware.vim25.mo.ClusterComputeResource)7 HostSystem (com.vmware.vim25.mo.HostSystem)7 Vcenter (com.emc.storageos.db.client.model.Vcenter)6 VcenterDataCenter (com.emc.storageos.db.client.model.VcenterDataCenter)6 DeviceControllerException (com.emc.storageos.exceptions.DeviceControllerException)6 VcenterApiClient (com.emc.storageos.vcentercontroller.VcenterApiClient)6 Host (com.emc.storageos.db.client.model.Host)5 ComputeSystemControllerException (com.emc.storageos.computesystemcontroller.exceptions.ComputeSystemControllerException)4 ImageServerControllerException (com.emc.storageos.imageservercontroller.exceptions.ImageServerControllerException)4 ServiceCoded (com.emc.storageos.svcs.errorhandling.model.ServiceCoded)4 Datacenter (com.vmware.vim25.mo.Datacenter)3 ManagedEntity (com.vmware.vim25.mo.ManagedEntity)3 Task (com.vmware.vim25.mo.Task)3