blob: 3a0ce83f9513a89dfa351e435fed5eeba45b0f68 [file] [log] [blame]
/*
* 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.lifecycle;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
import org.apache.cloudstack.engine.subsystem.api.storage.HostScope;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
import org.apache.cloudstack.storage.command.AttachPrimaryDataStoreCmd;
import org.apache.cloudstack.storage.command.CreatePrimaryDataStoreCmd;
import org.apache.cloudstack.storage.datastore.PrimaryDataStoreProviderManager;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.cloudstack.storage.volume.datastore.PrimaryDataStoreHelper;
import com.cloud.agent.api.StoragePoolInfo;
import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.StoragePool;
import com.cloud.storage.StoragePoolStatus;
public class SamplePrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLifeCycle {
@Inject
EndPointSelector selector;
@Inject
PrimaryDataStoreDao dataStoreDao;
@Inject
HostDao hostDao;
@Inject
PrimaryDataStoreHelper primaryStoreHelper;
@Inject
PrimaryDataStoreProviderManager providerMgr;
public SamplePrimaryDataStoreLifeCycleImpl() {
}
@Override
public DataStore initialize(Map<String, Object> dsInfos) {
DataStore store = primaryStoreHelper.createPrimaryDataStore(null);
return providerMgr.getPrimaryDataStore(store.getId());
}
protected void attachCluster(DataStore store) {
// send down AttachPrimaryDataStoreCmd command to all the hosts in the
// cluster
List<EndPoint> endPoints = selector.selectAll(store);
CreatePrimaryDataStoreCmd createCmd = new CreatePrimaryDataStoreCmd(store.getUri());
EndPoint ep = endPoints.get(0);
HostVO host = hostDao.findById(ep.getId());
if (host.getHypervisorType() == HypervisorType.XenServer) {
ep.sendMessage(createCmd);
}
endPoints.get(0).sendMessage(createCmd);
AttachPrimaryDataStoreCmd cmd = new AttachPrimaryDataStoreCmd(store.getUri());
for (EndPoint endp : endPoints) {
endp.sendMessage(cmd);
}
}
@Override
public boolean attachCluster(DataStore dataStore, ClusterScope scope) {
StoragePoolVO dataStoreVO = dataStoreDao.findById(dataStore.getId());
dataStoreVO.setDataCenterId(scope.getZoneId());
dataStoreVO.setPodId(scope.getPodId());
dataStoreVO.setClusterId(scope.getScopeId());
dataStoreVO.setStatus(StoragePoolStatus.Attaching);
dataStoreVO.setScope(scope.getScopeType());
dataStoreDao.update(dataStoreVO.getId(), dataStoreVO);
attachCluster(dataStore);
dataStoreVO = dataStoreDao.findById(dataStore.getId());
dataStoreVO.setStatus(StoragePoolStatus.Up);
dataStoreDao.update(dataStoreVO.getId(), dataStoreVO);
return true;
}
@Override
public boolean attachZone(DataStore dataStore, ZoneScope scope, HypervisorType hypervisorType) {
return false;
}
@Override
public boolean attachHost(DataStore store, HostScope scope, StoragePoolInfo existingInfo) {
return false;
}
@Override
public boolean maintain(DataStore store) {
return false;
}
@Override
public boolean cancelMaintain(DataStore store) {
return false;
}
@Override
public boolean deleteDataStore(DataStore store) {
return false;
}
/* (non-Javadoc)
* @see org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle#migrateToObjectStore(org.apache.cloudstack.engine.subsystem.api.storage.DataStore)
*/
@Override
public boolean migrateToObjectStore(DataStore store) {
return false;
}
@Override
public void updateStoragePool(StoragePool storagePool, Map<String, String> details) {
}
@Override
public void enableStoragePool(DataStore store) {
}
@Override
public void disableStoragePool(DataStore store) {
}
}