/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.geo.vdccontroller.impl; import java.security.KeyStore; import java.util.List; import java.util.Properties; import com.emc.storageos.security.ipsec.IPsecConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import com.emc.storageos.coordinator.common.Service; import com.emc.storageos.db.client.model.VirtualDataCenter; import com.emc.storageos.geo.service.impl.util.VdcConfigHelper; import com.emc.storageos.geo.vdccontroller.VdcController; import com.emc.storageos.security.geo.GeoClientCacheManager; import com.emc.storageos.security.authorization.BasePermissionsHelper; import com.emc.storageos.security.authentication.InternalApiSignatureKeyGenerator; import com.emc.storageos.svcs.errorhandling.resources.InternalException; /* * Detail implementation of vdc controller */ public class VdcControllerImpl implements VdcController { private final static Logger log = LoggerFactory.getLogger(VdcControllerImpl.class); @Autowired private InternalDbClient dbClient; @Autowired private GeoClientCacheManager geoClientCache; @Autowired private VdcConfigHelper helper; private Service serviceInfo; @Autowired private VdcOperationLockHelper vdcLockHelper; @Autowired private BasePermissionsHelper permissionsHelper; @Autowired @Qualifier("keyGenerator") InternalApiSignatureKeyGenerator apiSignatureGenerator; public void setDbClient(InternalDbClient dbClient) { this.dbClient = dbClient; } public void setVdcHelper(VdcConfigHelper helper) { this.helper = helper; } public void setVdcOperationLockHelper(VdcOperationLockHelper helper) { this.vdcLockHelper = helper; } public void setPermissionsHelper(BasePermissionsHelper permissionsHelper) { this.permissionsHelper = permissionsHelper; } public void setSignatureGenerator(InternalApiSignatureKeyGenerator generator) { this.apiSignatureGenerator = generator; } public void setGeoClientManager(GeoClientCacheManager clientManager) { this.geoClientCache = clientManager; } private KeyStore _keyStore; @Autowired private IPsecConfig ipsecConfig; @Override public void setKeystore(KeyStore keystore) { _keyStore = keystore; } public void setServiceInfo(Service serviceInfo) { this.serviceInfo = serviceInfo; } @Override public void connectVdc(VirtualDataCenter localVdc, String task, List<Object> taskParams) throws InternalException { log.info("Starting to connect a new vdc to the system, task id {}", localVdc.getShortId(), task); // during connect vdc process, the whole system will rolling reboot to apply // the new system properity, we shall not redo the finished steps ConnectVdcTaskOp vdcOp = new ConnectVdcTaskOp(dbClient, geoClientCache, helper, serviceInfo, localVdc, task, (Properties) taskParams.get(0), apiSignatureGenerator, _keyStore, ipsecConfig); log.info("Initialize ConnectVdcTaskOp done. "); vdcOp.setLockHelper(vdcLockHelper); vdcOp.setBasePermissionHelper(permissionsHelper); vdcOp.handle(); } @Override public void removeVdc(VirtualDataCenter vdc, String task, List<Object> taskParams) throws InternalException { log.info("Starting to remove a vdc {} into the system, task id {}", vdc.getShortId(), task); RemoveVdcTaskOp vdcOp = new RemoveVdcTaskOp(dbClient, geoClientCache, helper, serviceInfo, vdc, task, _keyStore, ipsecConfig); log.info("Initialize RemoveVdcTaskOp done. "); vdcOp.setLockHelper(vdcLockHelper); vdcOp.handle(); } public void updateVdc(VirtualDataCenter vdcToBeUpdated, String task, List<Object> params) throws InternalException { log.info("Starting to update vdc {} info in the system, task id {}", vdcToBeUpdated.getShortId(), task); // TODO: during update, vip change needs reboot? UpdateVdcTaskOp vdcOp = new UpdateVdcTaskOp(dbClient, geoClientCache, helper, serviceInfo, vdcToBeUpdated, task, params, apiSignatureGenerator, _keyStore, ipsecConfig); log.info("Initialize UpdateVdcTaskOp done. "); vdcOp.setLockHelper(vdcLockHelper); vdcOp.handle(); } @Override public void disconnectVdc(VirtualDataCenter vdcToBeDisconnected, String task, List<Object> taskParams) throws InternalException { log.info("Starting to disconnect vdc {} info in the system, task id {}", vdcToBeDisconnected.getShortId(), task); DisconnectVdcTaskOp vdcOp = new DisconnectVdcTaskOp(dbClient, geoClientCache, helper, serviceInfo, vdcToBeDisconnected, task, _keyStore, ipsecConfig); log.info("Initialize DisconnectVdcTaskOp done. "); vdcOp.setLockHelper(vdcLockHelper); vdcOp.handle(); } @Override public void reconnectVdc(VirtualDataCenter vdcToBeReconnected, String task, List<Object> taskParams) throws InternalException { log.info("Starting to reconnect vdc {} info in the system, task id {}", vdcToBeReconnected.getShortId(), task); ReconnectVdcTaskOp vdcOp = new ReconnectVdcTaskOp(dbClient, geoClientCache, helper, serviceInfo, vdcToBeReconnected, task, _keyStore, ipsecConfig); log.info("Initialize ReconnectVdcTaskOp done. "); vdcOp.setLockHelper(vdcLockHelper); vdcOp.handle(); } }