/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.networkcontroller.impl; import java.net.URI; import java.util.List; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.Controller; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.DiscoveredSystemObject; import com.emc.storageos.db.client.model.NetworkSystem; import com.emc.storageos.exceptions.ClientControllerException; import com.emc.storageos.impl.AbstractDiscoveredSystemController; import com.emc.storageos.networkcontroller.NetworkController; import com.emc.storageos.networkcontroller.impl.mds.Zone; import com.emc.storageos.networkcontroller.impl.mds.ZoneUpdate; import com.emc.storageos.networkcontroller.impl.mds.ZoneWwnAlias; import com.emc.storageos.networkcontroller.impl.mds.ZoneWwnAliasUpdate; import com.emc.storageos.networkcontroller.impl.mds.Zoneset; import com.emc.storageos.svcs.errorhandling.resources.InternalException; import com.emc.storageos.volumecontroller.AsyncTask; import com.emc.storageos.volumecontroller.impl.ControllerServiceImpl; import com.emc.storageos.volumecontroller.impl.ControllerServiceImpl.Lock; import com.emc.storageos.volumecontroller.impl.Dispatcher; public class NetworkControllerImpl extends AbstractDiscoveredSystemController implements NetworkController { private static final Logger _log = LoggerFactory.getLogger(NetworkControllerImpl.class); private Set<NetworkController> _deviceImpl; private Dispatcher _dispatcher; private DbClient _dbClient; public void setDeviceImpl(Set<NetworkController> deviceImpl) { _deviceImpl = deviceImpl; } public void setDispatcher(Dispatcher dispatcher) { _dispatcher = dispatcher; } public void setDbClient(DbClient dbClient) { _dbClient = dbClient; } @Override public void connectNetwork(URI network) throws InternalException { execNetwork("connectNetwork", network); } @Override public void disconnectNetwork(URI network) throws InternalException { execNetwork("disconnectNetwork", network); } @Override public void discoverNetworkSystems(AsyncTask[] tasks) throws InternalException { try { ControllerServiceImpl.scheduleDiscoverJobs(tasks, Lock.NS_DATA_COLLECTION_LOCK, ControllerServiceImpl.NS_DISCOVERY); } catch (Exception e) { _log.error("Problem in discoverStorageSystem due to {} ", e.getMessage()); throw ClientControllerException.fatals.unableToScheduleDiscoverJobs(tasks, e); } } private void execNetwork(String methodName, Object... args) throws InternalException { queueTask(_dbClient, NetworkSystem.class, _dispatcher, methodName, args); } public Controller lookupDeviceController(DiscoveredSystemObject device) { // dummy impl that returns the first one return _deviceImpl.iterator().next(); } @Override public void testCommunication(URI network, String taskId) throws InternalException { execNetwork("testCommunication", network, taskId); } @Override public List<String> getFabricIds(URI network) throws InternalException { try { NetworkSystem device = _dbClient.queryObject(NetworkSystem.class, network); NetworkDeviceController devController = (NetworkDeviceController) lookupDeviceController(device); return devController.getFabricIds(network); } catch (InternalException ex) { throw ex; } catch (Exception ex) { throw ClientControllerException.fatals.unableToLocateDeviceController("Network Device Controller"); } } @Override public List<Zoneset> getZonesets(URI network, String fabricId, String fabricWwn, String zoneName, boolean excludeMembers, boolean excludeAliases) throws InternalException { try { NetworkSystem device = _dbClient.queryObject(NetworkSystem.class, network); NetworkDeviceController devController = (NetworkDeviceController) lookupDeviceController(device); return devController.getZonesets(network, fabricId, fabricWwn, zoneName, excludeMembers, excludeAliases); } catch (InternalException ex) { throw ex; } catch (Exception ex) { throw ClientControllerException.fatals.unableToLocateDeviceController("Network Device Controller"); } } @Override public void addSanZones(URI network, String fabricId, String fabricWwn, List<Zone> zones, boolean activateZones, String taskId) throws InternalException { execNetwork("addSanZones", network, fabricId, fabricWwn, zones, activateZones, taskId); } @Override public void removeSanZones(URI network, String fabricId, String fabricWwn, List<Zone> zones, boolean activateZones, String taskId) throws InternalException { execNetwork("removeSanZones", network, fabricId, fabricWwn, zones, activateZones, taskId); } @Override public void updateSanZones(URI network, String fabricId, String fabricWwn, List<ZoneUpdate> zones, boolean activateZones, String taskId) throws InternalException { execNetwork("updateSanZones", network, fabricId, fabricWwn, zones, activateZones, taskId); } @Override public void activateSanZones(URI network, String fabricId, String fabricWwn, String taskId) throws InternalException { execNetwork("activateSanZones", network, fabricId, fabricWwn, taskId); } @Override public void deleteNetworkSystem(URI network, String taskId) throws InternalException { execNetwork("deleteNetworkSystem", network, taskId); } @Override public List<ZoneWwnAlias> getAliases(URI network, String fabricId, String fabricWwn) throws InternalException { try { NetworkSystem device = _dbClient.queryObject(NetworkSystem.class, network); NetworkDeviceController devController = (NetworkDeviceController) lookupDeviceController(device); return devController.getAliases(network, fabricId, fabricWwn); } catch (InternalException ex) { throw ex; } catch (Exception ex) { throw ClientControllerException.fatals.unableToLocateDeviceController("Network Device Controller"); } } @Override public void addAliases(URI network, String fabricId, String fabricWwn, List<ZoneWwnAlias> aliases, String taskId) throws InternalException { execNetwork("addAliases", network, fabricId, fabricWwn, aliases, taskId); } @Override public void removeAliases(URI network, String fabricId, String fabricWwn, List<ZoneWwnAlias> aliases, String taskId) throws InternalException { execNetwork("removeAliases", network, fabricId, fabricWwn, aliases, taskId); } @Override public void updateAliases(URI network, String fabricId, String fabricWwn, List<ZoneWwnAliasUpdate> updateAliases, String taskId) throws InternalException { execNetwork("updateAliases", network, fabricId, fabricWwn, updateAliases, taskId); } }