/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.ceph; import java.net.URI; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.ceph.CephClient; import com.emc.storageos.ceph.CephClientFactory; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.URIUtil; import com.emc.storageos.db.client.model.DataObject; import com.emc.storageos.db.client.model.StorageProvider; import com.emc.storageos.db.client.model.StorageProvider.ConnectionStatus; import com.emc.storageos.db.client.model.StorageSystem; /** * Utils for Ceph related operations * */ public final class CephUtils { private static final Logger _log = LoggerFactory.getLogger(CephUtils.class); private CephUtils() { } public static CephClient connectToCeph(CephClientFactory factory, StorageSystem storage) { return factory.getClient(storage.getSmisProviderIP(), storage.getSmisUserName(), storage.getSmisPassword()); } public static CephClient connectToCeph(CephClientFactory factory, StorageProvider provider) { return factory.getClient(provider.getIPAddress(), provider.getUserName(), provider.getPassword()); } private static void ensureConnectToCeph(StorageProvider storageProvider) throws Exception { CephClientFactory factory = new CephClientFactory(); CephClient cephClient = factory.getClient(storageProvider.getIPAddress(), storageProvider.getUserName(), storageProvider.getPassword()); cephClient.close(); } public static String createNativeId(DataObject object) { return String.format("%s:%s", object.getLabel(), URIUtil.parseUUIDFromURI(object.getId())); } public static List<URI> refreshCephConnections(final List<StorageProvider> cephProviderList, DbClient dbClient) { List<URI> activeProviders = new ArrayList<URI>(); for (StorageProvider storageProvider : cephProviderList) { try { ensureConnectToCeph(storageProvider); storageProvider.setConnectionStatus(ConnectionStatus.CONNECTED.name()); activeProviders.add(storageProvider.getId()); } catch (Exception e) { _log.error(String.format("Failed to connect to Ceph %s: %s", storageProvider.getIPAddress(), storageProvider.getId()), e); storageProvider.setConnectionStatus(ConnectionStatus.NOTCONNECTED.name()); } finally { dbClient.updateObject(storageProvider); } } return activeProviders; } }