| // |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| // |
| |
| package org.apache.cloudstack.storage.datastore.util; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| import javax.inject.Inject; |
| import javax.naming.ConfigurationException; |
| |
| import org.apache.log4j.Logger; |
| import org.springframework.stereotype.Component; |
| |
| import org.apache.cloudstack.api.response.ListResponse; |
| import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory; |
| import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService; |
| import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; |
| import org.apache.cloudstack.storage.datastore.provider.ElastistorPrimaryDataStoreProvider; |
| import org.apache.cloudstack.storage.datastore.util.ElastistorUtil.FileSystem; |
| import org.apache.cloudstack.storage.datastore.util.ElastistorUtil.ListInterfacesResponse; |
| import org.apache.cloudstack.storage.datastore.util.ElastistorUtil.ListPoolsResponse; |
| |
| import com.cloud.storage.dao.DiskOfferingDao; |
| import com.cloud.storage.dao.VolumeDao; |
| import com.cloud.storage.dao.VolumeDetailsDao; |
| import com.cloud.utils.component.ManagerBase; |
| import com.cloud.utils.exception.CloudRuntimeException; |
| import com.cloud.vm.dao.UserVmDao; |
| |
| @Component |
| public class ElastistorVolumeApiServiceImpl extends ManagerBase implements ElastistorVolumeApiService { |
| private static final Logger s_logger = Logger.getLogger(ElastistorVolumeApiServiceImpl.class); |
| |
| @Inject |
| protected VolumeDao _volsDao; |
| @Inject |
| protected UserVmDao _userVmDao; |
| @Inject |
| protected DiskOfferingDao _diskOfferingDao; |
| @Inject |
| private PrimaryDataStoreDao _storagePoolDao; |
| @Inject |
| VolumeService volService; |
| @Inject |
| VolumeDataFactory volFactory; |
| @Inject |
| ElastistorPrimaryDataStoreProvider esProvider; |
| @Inject |
| VolumeDetailsDao volumeDetailsDao; |
| |
| @Override |
| public List<Class<?>> getCommands() { |
| |
| List<Class<?>> cmdList = new ArrayList<Class<?>>(); |
| cmdList.add(ListElastistorVolumeCmd.class); |
| cmdList.add(ListElastistorPoolCmd.class); |
| cmdList.add(ListElastistorInterfaceCmd.class); |
| |
| s_logger.info("Commands were registered successfully with elastistor volume api service. [cmdcount:" + cmdList.size() + "]"); |
| return cmdList; |
| |
| } |
| |
| @Override |
| public boolean configure(String name, Map<String, Object> params) throws ConfigurationException { |
| _name = name; |
| _configParams = params; |
| return true; |
| } |
| |
| @Override |
| public boolean start() { |
| return true; |
| } |
| |
| @Override |
| public boolean stop() { |
| return true; |
| } |
| |
| @SuppressWarnings("unchecked") |
| @Override |
| public ListResponse<ListElastistorVolumeResponse> listElastistorVolume(ListElastistorVolumeCmd cmd) { |
| |
| try { |
| FileSystem listVolumeResponse = ElastistorUtil.listVolume(cmd.getId()); |
| |
| List<ListElastistorVolumeResponse> volumeResponses = new ArrayList<ListElastistorVolumeResponse>(); |
| |
| ListElastistorVolumeResponse volumeResponse; |
| |
| volumeResponse = new ListElastistorVolumeResponse(); |
| |
| volumeResponse.setId(listVolumeResponse.getUuid()); |
| volumeResponse.setName(listVolumeResponse.getName()); |
| volumeResponse.setGraceAllowed(listVolumeResponse.getGraceallowed()); |
| volumeResponse.setDeduplication(listVolumeResponse.getDeduplication()); |
| volumeResponse.setCompression(listVolumeResponse.getCompression()); |
| volumeResponse.setSync(listVolumeResponse.getSync()); |
| // set object name for a better json structure |
| volumeResponse.setObjectName("elastistorvolume"); |
| volumeResponses.add(volumeResponse); |
| |
| ListResponse<ListElastistorVolumeResponse> response = new ListResponse<ListElastistorVolumeResponse>(); |
| |
| response.setResponses(volumeResponses); |
| |
| return response; |
| } catch (Throwable e) { |
| s_logger.error("Unable to list elastistor volume.", e); |
| throw new CloudRuntimeException("Unable to list elastistor volume. " + e.getMessage()); |
| } |
| } |
| |
| @SuppressWarnings("unchecked") |
| @Override |
| public ListResponse<ListElastistorPoolResponse> listElastistorPools(ListElastistorPoolCmd cmd) { |
| |
| try { |
| ListPoolsResponse listPools = ElastistorUtil.ListElastistorPools(); |
| |
| List<ListElastistorPoolResponse> poolResponses = new ArrayList<ListElastistorPoolResponse>(); |
| |
| ListElastistorPoolResponse elastistorPoolResponse; |
| |
| for (int i = 0; i < listPools.getPools().getCount(); i++) { |
| // Always instantiate inside the loop |
| elastistorPoolResponse = new ListElastistorPoolResponse(); |
| |
| elastistorPoolResponse.setId(listPools.getPools().getPool(i).getUuid()); |
| elastistorPoolResponse.setName(listPools.getPools().getPool(i).getName()); |
| elastistorPoolResponse.setAvailIOPS(Long.parseLong(listPools.getPools().getPool(i).getAvailIOPS())); |
| elastistorPoolResponse.setCurrentAvailableSpace(Long.parseLong(listPools.getPools().getPool(i).getAvailableSpace())); |
| elastistorPoolResponse.setState(listPools.getPools().getPool(i).getState()); |
| elastistorPoolResponse.setControllerid(listPools.getPools().getPool(i).getControllerid()); |
| elastistorPoolResponse.setGateway(listPools.getPools().getPool(i).getGateway()); |
| |
| // set object name for a better json structure |
| elastistorPoolResponse.setObjectName("elastistorpool"); |
| poolResponses.add(elastistorPoolResponse); |
| } |
| |
| ListResponse<ListElastistorPoolResponse> response = new ListResponse<ListElastistorPoolResponse>(); |
| |
| response.setResponses(poolResponses); |
| |
| return response; |
| |
| } catch (Throwable e) { |
| s_logger.error("Unable to list elastistor pools.", e); |
| throw new CloudRuntimeException("Unable to list elastistor pools. " + e.getMessage()); |
| } |
| |
| } |
| |
| @Override |
| public ListResponse<ListElastistorInterfaceResponse> listElastistorInterfaces(ListElastistorInterfaceCmd cmd) { |
| try { |
| ListInterfacesResponse listInterfacesResponse = ElastistorUtil.ListElastistorInterfaces(cmd.getControllerId()); |
| |
| List<ListElastistorInterfaceResponse> interfaceResponses = new ArrayList<ListElastistorInterfaceResponse>(); |
| |
| ListElastistorInterfaceResponse interfaceResponse; |
| |
| for (int i = 0; i < listInterfacesResponse.getInterfaces().getCount(); i++) { |
| // Always instantiate inside the loop |
| interfaceResponse = new ListElastistorInterfaceResponse(); |
| |
| interfaceResponse.setId(listInterfacesResponse.getInterfaces().getInterface(i).getUuid()); |
| interfaceResponse.setName(listInterfacesResponse.getInterfaces().getInterface(i).getName()); |
| interfaceResponse.setStatus(listInterfacesResponse.getInterfaces().getInterface(i).getStatus()); |
| |
| // set object name for a better json structure |
| interfaceResponse.setObjectName("elastistorInterface"); |
| interfaceResponses.add(interfaceResponse); |
| } |
| |
| ListResponse<ListElastistorInterfaceResponse> response = new ListResponse<ListElastistorInterfaceResponse>(); |
| |
| response.setResponses(interfaceResponses); |
| |
| return response; |
| } catch (Throwable e) { |
| s_logger.error("Unable to list elastistor interfaces.", e); |
| throw new CloudRuntimeException("Unable to list elastistor interfaces. " + e.getMessage()); |
| } |
| |
| } |
| |
| } |