From 37197d6360e83a768c011436080093f6448a45d0 Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Mon, 5 Nov 2012 09:23:15 -0800 Subject: [PATCH] Moved from platform to engine --- .../org/apache/cloudstack/engine/Rules.java | 85 ++++++ .../engine/cloud/entity/api/BackupEntity.java | 29 ++ .../engine/cloud/entity/api/EdgeService.java | 23 ++ .../cloud/entity/api/NetworkEntity.java | 39 +++ .../engine/cloud/entity/api/NicEntity.java | 29 ++ .../cloud/entity/api/SnapshotEntity.java | 49 +++ .../cloud/entity/api/TemplateEntity.java | 27 ++ .../entity/api/VirtualMachineEntity.java | 148 +++++++++ .../engine/cloud/entity/api/VolumeEntity.java | 74 +++++ .../datacenter/entity/api/ClusterEntity.java | 25 ++ .../entity/api/DataCenterResourceEntity.java | 83 +++++ .../entity/api/OrganizationScope.java | 23 ++ .../datacenter/entity/api/PodEntity.java | 30 ++ .../datacenter/entity/api/StorageEntity.java | 24 ++ .../datacenter/entity/api/ZoneEntity.java | 30 ++ .../engine/entity/api/CloudStackEntity.java | 96 ++++++ .../InsufficientCapacityException.java | 24 ++ .../engine/service/api/DirectoryService.java | 34 +++ .../engine/service/api/EntityService.java | 45 +++ .../service/api/OperationsServices.java | 57 ++++ .../service/api/OrchestrationService.java | 84 +++++ .../service/api/ProvisioningService.java | 65 ++++ .../api/hypervisor/ComputeSubsystem.java | 31 ++ .../api/network/NetworkServiceProvider.java | 47 +++ .../api/network/NetworkSubsystem.java | 35 +++ .../subsystem/api/storage/BackupStrategy.java | 5 + .../api/storage/DataMigrationSubSystem.java | 29 ++ .../subsystem/api/storage/DataObject.java | 42 +++ ...DataObjectBackupStorageOperationState.java | 58 ++++ .../subsystem/api/storage/DataStore.java | 76 +++++ .../api/storage/DataStoreConfigurator.java | 16 + .../api/storage/DataStoreDriver.java | 35 +++ .../api/storage/DataStoreEndPoint.java | 26 ++ .../storage/DataStoreEndPointSelector.java | 7 + .../storage/DataStoreExtendedAttribute.java | 5 + .../api/storage/DataStoreLifeCycle.java | 13 + .../subsystem/api/storage/FileSystem.java | 32 ++ .../subsystem/api/storage/Snapshot.java | 23 ++ .../api/storage/SnapshotProfile.java | 26 ++ .../api/storage/SnapshotStrategy.java | 5 + .../subsystem/api/storage/StorageEvent.java | 25 ++ .../api/storage/StorageProvider.java | 20 ++ .../api/storage/StorageSubSystem.java | 13 + .../api/storage/TemplateProfile.java | 287 ++++++++++++++++++ .../api/storage/TemplateStrategy.java | 13 + .../subsystem/api/storage/VolumeProfile.java | 34 +++ .../subsystem/api/storage/VolumeStrategy.java | 16 + 47 files changed, 2042 insertions(+) create mode 100755 engine/api/src/org/apache/cloudstack/engine/Rules.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/BackupEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/EdgeService.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NetworkEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NicEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/SnapshotEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/OrganizationScope.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/StorageEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/exception/InsufficientCapacityException.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/service/api/DirectoryService.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/service/api/EntityService.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/service/api/OperationsServices.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/service/api/OrchestrationService.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/hypervisor/ComputeSubsystem.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkServiceProvider.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkSubsystem.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/BackupStrategy.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataMigrationSubSystem.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectBackupStorageOperationState.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreConfigurator.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreDriver.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreEndPoint.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreEndPointSelector.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreExtendedAttribute.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/FileSystem.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Snapshot.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotProfile.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotStrategy.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageEvent.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageProvider.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageSubSystem.java create mode 100755 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateProfile.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateStrategy.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeProfile.java create mode 100644 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeStrategy.java diff --git a/engine/api/src/org/apache/cloudstack/engine/Rules.java b/engine/api/src/org/apache/cloudstack/engine/Rules.java new file mode 100755 index 00000000000..b700fa5fcb7 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/Rules.java @@ -0,0 +1,85 @@ +/* + * 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.engine; + +import java.util.ArrayList; +import java.util.List; + +import com.cloud.utils.StringUtils; + +/** + * Rules specifies all rules about developing and using CloudStack Orchestration + * Platforms APIs. This class is not actually used in CloudStack Orchestration + * Platform but must be read by all who wants to use and develop against + * CloudStack Orchestration Platform. + * + * Make sure to make changes here when there are changes to how the APIs should + * be used and developed. + * + * Changes to this class must be approved by the maintainer of this project. + * + */ +public class Rules { + public static List whenUsing() { + List rules = new ArrayList(); + rules.add("Always be prepared to handle RuntimeExceptions."); + return rules; + } + + public static List whenWritingNewApis() { + List rules = new ArrayList(); + rules.add("You may think you're the greatest developer in the " + + "world but every change to the API must be reviewed and approved. "); + rules.add("Every API must have unit tests written against it. And not it's unit tests"); + rules.add(""); + + + return rules; + } + + private static void printRule(String rule) { + System.out.print("API Rule: "); + String skip = ""; + int brk = 0; + while (true) { + int stop = StringUtils.formatForOutput(rule, brk, 75 - skip.length(), ' '); + if (stop < 0) { + break; + } + System.out.print(skip); + skip = " "; + System.out.println(rule.substring(brk, stop).trim()); + brk = stop; + } + } + + public static void main(String[] args) { + System.out.println("When developing against the CloudStack Orchestration Platform, you must following the following rules:"); + for (String rule : whenUsing()) { + printRule(rule); + } + System.out.println(""); + System.out.println("When writing APIs, you must follow these rules:"); + for (String rule : whenWritingNewApis()) { + printRule(rule); + } + } + +} + diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/BackupEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/BackupEntity.java new file mode 100755 index 00000000000..cc69705c571 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/BackupEntity.java @@ -0,0 +1,29 @@ +/* + * 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.engine.cloud.entity.api; + +import org.apache.cloudstack.engine.entity.api.CloudStackEntity; + +/** + * @author ahuang + * + */ +public interface BackupEntity extends CloudStackEntity { + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/EdgeService.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/EdgeService.java new file mode 100755 index 00000000000..3283ff0e72c --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/EdgeService.java @@ -0,0 +1,23 @@ +/* + * 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.engine.cloud.entity.api; + +public interface EdgeService { + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NetworkEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NetworkEntity.java new file mode 100755 index 00000000000..c161d043581 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NetworkEntity.java @@ -0,0 +1,39 @@ +/* + * 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.engine.cloud.entity.api; + +import java.util.List; + +import org.apache.cloudstack.engine.entity.api.CloudStackEntity; + +import com.cloud.network.Network; + +public interface NetworkEntity extends CloudStackEntity, Network { + void routeTo(NetworkEntity network); + + List listEdgeServicesTo(); + + List listVirtualMachineUuids(); + + List listVirtualMachines(); + + List listNics(); + + void addIpRange(); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NicEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NicEntity.java new file mode 100755 index 00000000000..f78267add35 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NicEntity.java @@ -0,0 +1,29 @@ +/* + * 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.engine.cloud.entity.api; + +import org.apache.cloudstack.engine.entity.api.CloudStackEntity; + +/** + * @author ahuang + * + */ +public interface NicEntity extends CloudStackEntity { + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/SnapshotEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/SnapshotEntity.java new file mode 100755 index 00000000000..0dcccb3c892 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/SnapshotEntity.java @@ -0,0 +1,49 @@ +/* + * 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.engine.cloud.entity.api; + +import org.apache.cloudstack.engine.entity.api.CloudStackEntity; + +import com.cloud.storage.Snapshot; + +public interface SnapshotEntity extends CloudStackEntity, Snapshot { + /** + * Make a reservation for backing up this snapshot + * @param expiration time in seconds to expire the reservation + * @return reservation token + */ + String reserveForBackup(int expiration); + + /** + * Perform the backup according to the reservation token + * @param reservationToken token returned by reserveForBackup + */ + void backup(String reservationToken); + + /** + * restore this snapshot to this vm. + * @param vm + */ + void restore(String vm); + + /** + * Destroy this snapshot. + */ + void destroy(); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java new file mode 100755 index 00000000000..5978cc7ef91 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java @@ -0,0 +1,27 @@ +/* + * 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.engine.cloud.entity.api; + +import org.apache.cloudstack.engine.entity.api.CloudStackEntity; + +import com.cloud.template.VirtualMachineTemplate; + +public interface TemplateEntity extends CloudStackEntity, VirtualMachineTemplate { + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java new file mode 100755 index 00000000000..ad44f19312c --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java @@ -0,0 +1,148 @@ +/* + * 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.engine.cloud.entity.api; + +import java.util.List; + +import org.apache.cloudstack.engine.entity.api.CloudStackEntity; + +import com.cloud.deploy.DeployDestination; +import com.cloud.deploy.DeploymentPlanner.ExcludeList; +import com.cloud.vm.VirtualMachine; + +/** + * VirtualMachineEntity represents a Virtual Machine in Cloud Orchestration + * Platform. + * + */ +public interface VirtualMachineEntity extends VirtualMachine, CloudStackEntity { + + /** + * @return List of uuids for volumes attached to this virtual machine. + */ + List listVolumeUuids(); + + /** + * @return List of volumes attached to this virtual machine. + */ + List listVolumes(); + + /** + * @return List of uuids for nics attached to this virtual machine. + */ + List listNicUuids(); + + /** + * @return List of nics attached to this virtual machine. + */ + List listNics(); + + /** + * @return the template this virtual machine is based off. + */ + TemplateEntity getTemplate(); + + /** + * @return the list of tags associated with the virtual machine + */ + List listTags(); + + void addTag(); + + void delTag(); + + /** + * Start the virtual machine with a given deploy destination + * @param plannerToUse the Deployment Planner that should be used + * @param dest destination to which to deploy the machine + * @param exclude list of areas to exclude + * @return a reservation id + */ + String reserve(String plannerToUse, DeployDestination dest, ExcludeList exclude); + + /** + * Migrate this VM to a certain destination. + * + * @param reservationId reservation id from reserve call. + */ + void migrateTo(String reservationId); + + /** + * Deploy this virtual machine according to the reservation from before. + * @param reservationId reservation id from reserve call. + * + */ + void deploy(String reservationId); + + /** + * Stop the virtual machine + * + */ + void stop(); + + /** + * Cleans up after any botched starts. CloudStack Orchestration Platform + * will attempt a best effort to actually shutdown any resource but + * even if it cannot, it releases the resource from its database. + */ + void cleanup(); + + /** + * Destroys the VM. + */ + void destroy(); + + /** + * Duplicate this VM in the database so that it will start new + * @param externalId + * @return a new VirtualMachineEntity + */ + VirtualMachineEntity duplicate(String externalId); + + /** + * Take a VM snapshot + */ + SnapshotEntity takeSnapshotOf(); + + /** + * Attach volume to this VM + * @param volume volume to attach + * @param deviceId deviceId to use + */ + void attach(VolumeEntity volume, short deviceId); + + /** + * Detach the volume from this VM + * @param volume volume to detach + */ + void detach(VolumeEntity volume); + + /** + * Connect the VM to a network + * @param network network to attach + * @param deviceId device id to use when a nic is created + */ + void connectTo(NetworkEntity network, short nicId); + + /** + * Disconnect the VM from this network + * @param netowrk network to disconnect from + */ + void disconnectFrom(NetworkEntity netowrk, short nicId); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java new file mode 100755 index 00000000000..001de2df085 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java @@ -0,0 +1,74 @@ +/* + * 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.engine.cloud.entity.api; + +import org.apache.cloudstack.engine.entity.api.CloudStackEntity; + +import com.cloud.storage.Volume; + +public interface VolumeEntity extends CloudStackEntity, Volume { + + /** + * Take a snapshot of the volume + */ + SnapshotEntity takeSnapshotOf(boolean full); + + /** + * Make a reservation to do storage migration + * + * @param expirationTime time in seconds the reservation is cancelled + * @return reservation token + */ + String reserveForMigration(long expirationTime); + + /** + * Migrate using a reservation. + * @param reservationToken reservation token + */ + void migrate(String reservationToken); + + /** + * Setup for a copy of this volume. + * @return destination to copy to + */ + VolumeEntity setupForCopy(); + + /** + * Perform the copy + * @param dest copy to this volume + */ + void copy(VolumeEntity dest); + + /** + * Attach to the vm + * @param vm vm to attach to + * @param deviceId device id to use + */ + void attachTo(String vm, long deviceId); + + /** + * Detach from the vm + */ + void detachFrom(); + + /** + * Destroy the volume + */ + void destroy(); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java new file mode 100755 index 00000000000..bec5a4c6d1a --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java @@ -0,0 +1,25 @@ +/* + * 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.engine.datacenter.entity.api; + +import com.cloud.org.Cluster; + +public interface ClusterEntity extends DataCenterResourceEntity, Cluster, OrganizationScope { + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceEntity.java b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceEntity.java new file mode 100755 index 00000000000..75faed76abb --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceEntity.java @@ -0,0 +1,83 @@ +/* + * 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.engine.datacenter.entity.api; + +import org.apache.cloudstack.engine.entity.api.CloudStackEntity; + +import com.cloud.utils.fsm.StateMachine2; +import com.cloud.utils.fsm.StateObject; + +/** + * This interface specifies the states and operations all physical + * and virtual resources in the data center must implement. + */ +public interface DataCenterResourceEntity extends CloudStackEntity, StateObject { + + /** + * This is the state machine for how CloudStack should interact with + * + */ + public enum State { + Disabled("The resource is disabled so CloudStack should not use it. This is the initial state of all resources added to CloudStack."), + Enabled("The resource is now enabled for CloudStack to use."), + Deactivated("The resource is disactivated so CloudStack should not use it for new resource needs."); + + String _description; + + private State(String description) { + _description = description; + } + + public enum Event { + EnableRequest, + DisableRequest, + DeactivateRequest, + ActivatedRequest + } + + protected static final StateMachine2 s_fsm = new StateMachine2(); + static { + s_fsm.addTransition(Disabled, Event.EnableRequest, Enabled); + s_fsm.addTransition(Enabled, Event.DisableRequest, Disabled); + s_fsm.addTransition(Enabled, Event.DeactivateRequest, Deactivated); + s_fsm.addTransition(Deactivated, Event.ActivatedRequest, Enabled); + } + + } + /** + * Prepare the resource to take new on new demands. + */ + boolean enable(); + + /** + * Disables the resource. Cleanup. Prepare for the resource to be removed. + */ + boolean disable(); + + /** + * Do not use the resource for new demands. + */ + boolean deactivate(); + + /** + * Reactivates a deactivated resource. + */ + boolean reactivate(); + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/OrganizationScope.java b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/OrganizationScope.java new file mode 100755 index 00000000000..c39f5811199 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/OrganizationScope.java @@ -0,0 +1,23 @@ +/* + * 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.engine.datacenter.entity.api; + +public interface OrganizationScope { + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java new file mode 100755 index 00000000000..2cc66258282 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java @@ -0,0 +1,30 @@ +/* + * 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.engine.datacenter.entity.api; + +import java.util.List; + +import com.cloud.dc.Pod; +import com.cloud.org.Cluster; + +public interface PodEntity extends DataCenterResourceEntity, Pod { + + List listClusters(); + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/StorageEntity.java b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/StorageEntity.java new file mode 100755 index 00000000000..2c7f443e567 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/StorageEntity.java @@ -0,0 +1,24 @@ +/* + * 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.engine.datacenter.entity.api; + +import com.cloud.storage.StoragePool; + +public interface StorageEntity extends DataCenterResourceEntity, StoragePool { +} diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java new file mode 100755 index 00000000000..587e40b31cb --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java @@ -0,0 +1,30 @@ +/* + * 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.engine.datacenter.entity.api; + +import java.util.List; + +import com.cloud.dc.DataCenter; + +/** + * Describes a zone and operations that can be done in a zone. + */ +public interface ZoneEntity extends DataCenterResourceEntity, DataCenter { + List listPods(); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java b/engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java new file mode 100755 index 00000000000..ebda6a26d97 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java @@ -0,0 +1,96 @@ +/* + * 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.engine.entity.api; + +import java.lang.reflect.Method; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * All entities returned by the Cloud Orchestration Platform must implement + * this interface. CloudValueEntity is an immutable representation of + * an entity exposed by Cloud Orchestration Platform. For each object, it + * defines two ids: uuid, generated by CloudStack Orchestration Platform, and + * an external id that is set by the caller when the entity is created. All + * ids must be unique for that entity. CloudValueEntity also can be converted + * to a CloudActionableEntity which contains actions the object can perform. + */ +public interface CloudStackEntity { + /** + * @return the uuid of the object. + */ + String getUuid(); + + /** + * @return the id which is often the database id. + */ + long getId(); + + /** + * @return external id set by the caller + */ + String getExternalId(); + + /** + * @return current state for the entity + */ + String getCurrentState(); + + /** + * @return desired state for the entity + */ + String getDesiredState(); + + /** + * Get the time the entity was created + */ + Date getCreatedTime(); + + /** + * Get the time the entity was last updated + */ + Date getLastUpdatedTime(); + + /** + * @return reference to the owner of this entity + */ + String getOwner(); + + /** + * @return details stored for this entity when created. + */ + Map getDetails(String source); + + /** + * @return a list of sources that have added to the details. + */ + List getDetailSources(); + + void addDetail(String source, String name, String value); + + void delDetail(String source, String name, String value); + + void updateDetail(String source, String name, String value); + + /** + * @return list of actions that can be performed on the object in its current state + */ + List getApplicableActions(); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/exception/InsufficientCapacityException.java b/engine/api/src/org/apache/cloudstack/engine/exception/InsufficientCapacityException.java new file mode 100755 index 00000000000..c60ad3003b0 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/exception/InsufficientCapacityException.java @@ -0,0 +1,24 @@ +/* + * 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.engine.exception; + +public class InsufficientCapacityException { + + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/DirectoryService.java b/engine/api/src/org/apache/cloudstack/engine/service/api/DirectoryService.java new file mode 100755 index 00000000000..360e08f1748 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/service/api/DirectoryService.java @@ -0,0 +1,34 @@ +/* + * 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.engine.service.api; + +import java.net.URI; +import java.util.List; + +import com.cloud.utils.component.PluggableService; + +public interface DirectoryService { + void registerService(String serviceName, URI endpoint); + void unregisterService(String serviceName, URI endpoint); + List getEndPoints(String serviceName); + URI getLoadBalancedEndPoint(String serviceName); + + List listServices(); + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/EntityService.java b/engine/api/src/org/apache/cloudstack/engine/service/api/EntityService.java new file mode 100755 index 00000000000..44c9b5cd2f1 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/service/api/EntityService.java @@ -0,0 +1,45 @@ +/* + * 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.engine.service.api; + +import java.util.List; + +import com.cloud.network.Network; +import com.cloud.storage.Volume; +import com.cloud.vm.VirtualMachine; + +/** + * Service to retrieve CloudStack entities + * very likely to change + */ +public interface EntityService { + List listVirtualMachines(); + List listVolumes(); + List listNetworks(); + List listNics(); + List listSnapshots(); + List listTemplates(); + List listStoragePools(); + List listHosts(); + + VirtualMachine getVirtualMachine(String vm); + Volume getVolume(String volume); + Network getNetwork(String network); + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/OperationsServices.java b/engine/api/src/org/apache/cloudstack/engine/service/api/OperationsServices.java new file mode 100755 index 00000000000..25a0b19d161 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/service/api/OperationsServices.java @@ -0,0 +1,57 @@ +/* + * 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.engine.service.api; + +import java.net.URL; +import java.util.List; + +import com.cloud.alert.Alert; +import com.cloud.async.AsyncJob; + +public interface OperationsServices { + List listJobs(); + + List listJobsInProgress(); + + List listJobsCompleted(); + + List listJobsCompleted(Long from); + + List listJobsInWaiting(); + + void cancelJob(String job); + + List listAlerts(); + + Alert getAlert(String uuid); + + void cancelAlert(String alert); + + void registerForAlerts(); + + String registerForEventNotifications(String type, String topic, URL url); + + boolean deregisterForEventNotifications(String notificationId); + + /** + * @return the list of event topics someone can register for + */ + List listEventTopics(); + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/OrchestrationService.java b/engine/api/src/org/apache/cloudstack/engine/service/api/OrchestrationService.java new file mode 100755 index 00000000000..2dc0e4c67d5 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/service/api/OrchestrationService.java @@ -0,0 +1,84 @@ +/* + * 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.engine.service.api; + +import java.net.URL; +import java.util.List; +import java.util.Map; + +import org.apache.cloudstack.engine.cloud.entity.api.NetworkEntity; +import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity; +import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity; +import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; + +import com.cloud.hypervisor.Hypervisor; + +public interface OrchestrationService { + /** + * creates a new virtual machine + * + * @param uuid externally unique name to reference the virtual machine + * @param template reference to the template + * @param hostName name of the host + * @param cpu # of cpu cores + * @param speed speed of the cpu core + * @param memory memory to allocate in bytes + * @param networks networks that this VM belongs in + * @param rootDiskTags tags for the root disk + * @param computeTags tags for the compute + * @param details extra details to store for the VM + * @return VirtualMachine + */ + VirtualMachineEntity createVirtualMachine(String name, + String template, + String hostName, + int cpu, + int speed, + long memory, + List networks, + List rootDiskTags, + List computeTags, + Map details, + String owner); + + VirtualMachineEntity createVirtualMachineFromScratch(String uuid, + String iso, + String os, + String hypervisor, + String hostName, + int cpu, + int speed, + long memory, + List networks, + List computeTags, + Map details, + String owner); + + NetworkEntity createNetwork(String externaId, String name, String cidr, String gateway); + + void destroyNetwork(String networkUuid); + + VolumeEntity createVolume(); + + void destroyVolume(String volumeEntity); + + TemplateEntity registerTemplate(String name, URL path, String os, Hypervisor hypervisor); + + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java b/engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java new file mode 100755 index 00000000000..8f11273534f --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java @@ -0,0 +1,65 @@ +/* + * 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.engine.service.api; + +import java.util.List; +import java.util.Map; + +import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity; + +import com.cloud.dc.DataCenter; +import com.cloud.dc.Pod; +import com.cloud.host.Host; +import com.cloud.host.Status; +import com.cloud.storage.StoragePool; + + +/** + * ProvisioningService registers and deregisters physical and virtual + * resources that the management server can use. + */ +public interface ProvisioningService { + + String registerStorage(String name, List tags, Map details); + ZoneEntity registerZone(String name, List tags, Map details); + String registerPod(String name, List tags, Map details); + String registerCluster(String name, List tags, Map details); + String registerHost(String name, List tags, Map details); + + + + void deregisterStorage(String uuid); + void deregisterZone(); + void deregisterPod(); + void deregisterCluster(); + void deregisterHost(); + + void changeState(String type, String entity, Status state); + + List listHosts(); + + List listPods(); + + List listZones(); + + + + List listStorage(); + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/hypervisor/ComputeSubsystem.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/hypervisor/ComputeSubsystem.java new file mode 100644 index 00000000000..f972e816dca --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/hypervisor/ComputeSubsystem.java @@ -0,0 +1,31 @@ +/* + * 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.engine.subsystem.api.hypervisor; + + +public interface ComputeSubsystem { + + void start(String vm, String reservationId); + + void cancel(String reservationId); + + void stop(String vm, String reservationId); + + void migrate(String vm, String reservationId); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkServiceProvider.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkServiceProvider.java new file mode 100755 index 00000000000..20c5a88ac93 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkServiceProvider.java @@ -0,0 +1,47 @@ +/* + * 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.engine.subsystem.api.network; + +public interface NetworkServiceProvider { + /** + * Plug your network elements into this network + * @param network + * @param reservationId + */ + void plugInto(String network, String reservationId); + + /** + * Unplug your network elements from this network + * @param network + * @param reservationId + */ + void unplugFrom(String network, String reservationId); + + /** + * Cancel a previous work + * @param reservationId + */ + void cancel(String reservationId); + + void provideServiceTo(String vm, String network, String reservationId); + + void removeServiceFrom(String vm, String network, String reservationId); + + void cleanUp(String network, String reservationId); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkSubsystem.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkSubsystem.java new file mode 100755 index 00000000000..53254cce55f --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkSubsystem.java @@ -0,0 +1,35 @@ +/* + * 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.engine.subsystem.api.network; + +public interface NetworkSubsystem { + String create(); + + String start(String network, String reservationId); + + void shutdown(String nework, String reservationId); + + void prepare(String vm, String network, String reservationId); + + void release(String vm, String network, String reservationId); + + void cancel(String reservationId); + + void destroy(String network, String reservationId); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/BackupStrategy.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/BackupStrategy.java new file mode 100644 index 00000000000..d93a509a296 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/BackupStrategy.java @@ -0,0 +1,5 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + +public interface BackupStrategy { + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataMigrationSubSystem.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataMigrationSubSystem.java new file mode 100755 index 00000000000..65928bd5537 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataMigrationSubSystem.java @@ -0,0 +1,29 @@ +/* + * 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.engine.subsystem.api.storage; + +import java.net.URI; + +import com.cloud.org.Grouping; + +public interface DataMigrationSubSystem { + + Class getScopeCoverage(); + void migrate(URI source, URI dest, String reservationId); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java new file mode 100644 index 00000000000..70aca358e1d --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java @@ -0,0 +1,42 @@ +/* + * 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.engine.subsystem.api.storage; + +import java.util.List; + +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore.DataStoreRef; + +/* + * Logic entity + */ +public interface DataObject { + String getURI(); + String getUUID(); + DataStoreRef getStoreRef(); + long getSize(); + //volume/snapshot/template + String getType(); + //db id + Long getId(); + DataObject getParent(); + void setParent(DataObject obj); + List getChidren(); + boolean lock(); + boolean unlock(); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectBackupStorageOperationState.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectBackupStorageOperationState.java new file mode 100644 index 00000000000..974a4002ac2 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectBackupStorageOperationState.java @@ -0,0 +1,58 @@ +/* + * 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.engine.subsystem.api.storage; + +import com.cloud.utils.fsm.StateMachine; + +public enum DataObjectBackupStorageOperationState { + Copying, + Deleting, + Ready, + NonOperational; + + public enum Event { + Initial("Init state machine"), + CopyingRequested("Copy operation is requested"), + DeleteRequested("Delete operation is requested"), + OperationSuccess("Operation successed"), + OperationFailed("Operation failed"); + + private final String _msg; + + private Event(String msg) { + _msg = msg; + } + } + + public DataObjectBackupStorageOperationState getNextState(Event a) { + return s_fsm.getNextState(this, a); + } + + protected static final StateMachine s_fsm = new StateMachine(); + static { + s_fsm.addTransition(null, Event.Initial, DataObjectBackupStorageOperationState.Ready); + s_fsm.addTransition(DataObjectBackupStorageOperationState.Ready, Event.CopyingRequested, DataObjectBackupStorageOperationState.Copying); + s_fsm.addTransition(DataObjectBackupStorageOperationState.Copying, Event.CopyingRequested, DataObjectBackupStorageOperationState.Copying); + s_fsm.addTransition(DataObjectBackupStorageOperationState.Copying, Event.OperationFailed, DataObjectBackupStorageOperationState.Ready); + s_fsm.addTransition(DataObjectBackupStorageOperationState.Copying, Event.OperationSuccess, DataObjectBackupStorageOperationState.Ready); + s_fsm.addTransition(DataObjectBackupStorageOperationState.Ready, Event.DeleteRequested, DataObjectBackupStorageOperationState.Deleting); + s_fsm.addTransition(DataObjectBackupStorageOperationState.Deleting, Event.OperationFailed, DataObjectBackupStorageOperationState.Ready); + s_fsm.addTransition(DataObjectBackupStorageOperationState.Deleting, Event.OperationSuccess, DataObjectBackupStorageOperationState.NonOperational); + } +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java new file mode 100644 index 00000000000..06580499ee8 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java @@ -0,0 +1,76 @@ +/* + * 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.engine.subsystem.api.storage; + +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.storage.Snapshot; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.Volume; +import com.cloud.template.VirtualMachineTemplate; + +public interface DataStore { + public class DataStoreRef { + + } + + public class DataStoreDriverRef { + + } + + public enum StoreType { + Primary, + Image, + Backup; + } + public class StoreScope { + public long zoneId; + private long clusterId; + private long hostId; + } + + String getURI(); + String getUUID(); + long getCluterId(); + long getPodId(); + long getZoneId(); + String getPath(); + StoreType getType(); + StoragePoolType getPoolType(); + StoreScope getScope(); + boolean isSharedStorage(); + Long getId(); + DataStoreDriver getDataStoreDriver(); + StorageProvider getProvider(); + DataStoreEndPointSelector getEndPointSelector(); + FileSystem getFileSystem(); + VolumeStrategy getVolumeStrategy(); + SnapshotStrategy getSnapshotStrategy(); + BackupStrategy getBackupStrategy(); + TemplateStrategy getTemplateStrategy(); + DataStoreLifeCycle getLifeCycle(); + + VolumeProfile prepareVolume(Volume volume, DataStore destStore); + SnapshotProfile prepareSnapshot(Snapshot snapshot, DataStore destStore); + TemplateProfile prepareTemplate(long templateId, DataStore destStore); + boolean contains(Volume volume); + boolean contains(Snapshot snapshot); + boolean contains(TemplateProfile template); + TemplateProfile get(TemplateProfile template); + StorageFilerTO getTO(); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreConfigurator.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreConfigurator.java new file mode 100644 index 00000000000..d9fb86b05ac --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreConfigurator.java @@ -0,0 +1,16 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + +import java.net.URI; +import java.util.List; +import java.util.Map; + +import com.cloud.storage.StoragePool; + +public interface DataStoreConfigurator { + String getProtocol(); + StoragePool getStoragePool(Map configs); + List getConfigNames(); + Map getConfigs(URI uri, Map extras); + boolean validate(Map configs); + DataStore getDataStore(StoragePool pool); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreDriver.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreDriver.java new file mode 100644 index 00000000000..0167f482527 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreDriver.java @@ -0,0 +1,35 @@ +/* + * 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.engine.subsystem.api.storage; + +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.Command; + +public interface DataStoreDriver { + String getDriverType(); + TemplateProfile install(TemplateProfile tp, DataStoreEndPoint ep); + TemplateProfile register(TemplateProfile tp, DataStoreEndPoint ep); + DataObject create(DataObject obj); + DataObject copy(DataObject src, DataStore dest); + DataObject copy(DataObject src, DataObject dest); + DataObject move(DataObject src, DataObject dest); + VolumeProfile createVolumeFromTemplate(VolumeProfile vol, TemplateProfile tp, DataStoreEndPoint dp); + Answer sendMessage(DataStoreEndPoint dsep, Command cmd); + boolean delete(DataObject obj); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreEndPoint.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreEndPoint.java new file mode 100644 index 00000000000..3bdbbb5723f --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreEndPoint.java @@ -0,0 +1,26 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.Command; + +public class DataStoreEndPoint { + protected long hostId; + protected String privIp; + + public DataStoreEndPoint(long host, String ip) { + hostId = host; + privIp = ip; + } + + public long getHostId() { + return hostId; + } + + public String getPrivateIp() { + return privIp; + } + + public Answer sendCommand(Command cmd) { + return new Answer(cmd); + } +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreEndPointSelector.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreEndPointSelector.java new file mode 100644 index 00000000000..3328a3a3b10 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreEndPointSelector.java @@ -0,0 +1,7 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + +import java.util.List; + +public interface DataStoreEndPointSelector { + List getEndPoints(StorageEvent event); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreExtendedAttribute.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreExtendedAttribute.java new file mode 100644 index 00000000000..9f6df82334d --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreExtendedAttribute.java @@ -0,0 +1,5 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + +public interface DataStoreExtendedAttribute { + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java new file mode 100644 index 00000000000..8a73e63f230 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java @@ -0,0 +1,13 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + +public interface DataStoreLifeCycle { + public enum DataStoreEvent { + HOSTUP, + HOSTDOWN, + } + void add(); + void delete(); + void enable(); + void disable(); + void processEvent(DataStoreEvent event, Object... objs); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/FileSystem.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/FileSystem.java new file mode 100644 index 00000000000..734fc598bca --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/FileSystem.java @@ -0,0 +1,32 @@ +/* + * 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.engine.subsystem.api.storage; + +public interface FileSystem { + DataObject create(DataObject obj); + DataObject copy(DataObject Obj, DataStore destStore); + DataObject copy(DataObject obj, DataObject destObj); + DataObject move(DataObject srcObj, DataObject destObj); + boolean delete(DataObject obj); + long getStats(DataObject obj); + String getFileType(); + boolean isWritable(DataObject obj); + boolean contains(DataObject obj); + DataObject ioctl(DataObject obj, Object... objects); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Snapshot.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Snapshot.java new file mode 100644 index 00000000000..f8d4b59ff01 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Snapshot.java @@ -0,0 +1,23 @@ +/* + * 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.engine.subsystem.api.storage; + +public interface Snapshot extends DataObject { + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotProfile.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotProfile.java new file mode 100644 index 00000000000..50a12002cf2 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotProfile.java @@ -0,0 +1,26 @@ +/* + * 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.engine.subsystem.api.storage; + +public class SnapshotProfile { + private String _uri; + public String getURI() { + return _uri; + } +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotStrategy.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotStrategy.java new file mode 100644 index 00000000000..91bebee0fb4 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotStrategy.java @@ -0,0 +1,5 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + +public interface SnapshotStrategy { + +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageEvent.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageEvent.java new file mode 100644 index 00000000000..3f64002ed9e --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageEvent.java @@ -0,0 +1,25 @@ +/* + * 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.engine.subsystem.api.storage; + +public enum StorageEvent { + DownloadTemplateToPrimary, + RegisterTemplate, + CreateVolumeFromTemplate; +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageProvider.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageProvider.java new file mode 100644 index 00000000000..9d410934e54 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageProvider.java @@ -0,0 +1,20 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + +import java.util.List; +import java.util.Map; + +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore.StoreType; + +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.storage.StoragePool; +import com.cloud.utils.component.Adapter; + +public interface StorageProvider extends Adapter { + List supportedHypervisors(); + String getProviderName(); + List supportedStoreTypes(); + void configure(Map storeProviderInfo); + DataStore addDataStore(StoragePool sp, String uri, Map params); + DataStore getDataStore(StoragePool pool); + Map> getDataStoreConfigs(); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageSubSystem.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageSubSystem.java new file mode 100755 index 00000000000..eb78376305e --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageSubSystem.java @@ -0,0 +1,13 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + +import java.net.URI; + +import com.cloud.org.Grouping; + +public interface StorageSubSystem { + String getType(); + Class getScope(); + + URI grantAccess(String vol, String reservationId); + URI RemoveAccess(String vol, String reservationId); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateProfile.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateProfile.java new file mode 100755 index 00000000000..e05e7db67fa --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateProfile.java @@ -0,0 +1,287 @@ +// 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.engine.subsystem.api.storage; + +import java.util.Map; + +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.storage.Storage.ImageFormat; +import com.cloud.template.VirtualMachineTemplate; + +public class TemplateProfile { + Long userId; + String name; + String displayText; + Integer bits; + Boolean passwordEnabled; + Boolean sshKeyEnbaled; + Boolean requiresHvm; + String url; + Boolean isPublic; + Boolean featured; + Boolean isExtractable; + ImageFormat format; + Long guestOsId; + Long zoneId; + HypervisorType hypervisorType; + String accountName; + Long domainId; + Long accountId; + String chksum; + Boolean bootable; + Long templateId; + VirtualMachineTemplate template; + String templateTag; + Map details; + + public TemplateProfile(Long templateId, Long userId, String name, String displayText, Integer bits, Boolean passwordEnabled, Boolean requiresHvm, + String url, Boolean isPublic, Boolean featured, Boolean isExtractable, ImageFormat format, Long guestOsId, Long zoneId, + HypervisorType hypervisorType, String accountName, Long domainId, Long accountId, String chksum, Boolean bootable, Map details, Boolean sshKeyEnabled) { + this.templateId = templateId; + this.userId = userId; + this.name = name; + this.displayText = displayText; + this.bits = bits; + this.passwordEnabled = passwordEnabled; + this.requiresHvm = requiresHvm; + this.url = url; + this.isPublic = isPublic; + this.featured = featured; + this.isExtractable = isExtractable; + this.format = format; + this.guestOsId = guestOsId; + this.zoneId = zoneId; + this.hypervisorType = hypervisorType; + this.accountName = accountName; + this.domainId = domainId; + this.accountId = accountId; + this.chksum = chksum; + this.bootable = bootable; + this.details = details; + this.sshKeyEnbaled = sshKeyEnabled; + } + + public TemplateProfile(Long userId, VirtualMachineTemplate template, Long zoneId) { + this.userId = userId; + this.template = template; + this.zoneId = zoneId; + } + + public TemplateProfile(Long templateId, Long userId, String name, String displayText, Integer bits, Boolean passwordEnabled, Boolean requiresHvm, + String url, Boolean isPublic, Boolean featured, Boolean isExtractable, ImageFormat format, Long guestOsId, Long zoneId, + HypervisorType hypervisorType, String accountName, Long domainId, Long accountId, String chksum, Boolean bootable, String templateTag, Map details, Boolean sshKeyEnabled) { + this(templateId, userId, name, displayText, bits, passwordEnabled, requiresHvm, url, isPublic, featured, isExtractable, format, guestOsId, zoneId, + hypervisorType, accountName, domainId, accountId, chksum, bootable, details, sshKeyEnabled); + this.templateTag = templateTag; + } + + public Long getTemplateId() { + return templateId; + } + public void setTemplateId(Long id) { + this.templateId = id; + } + + public Long getUserId() { + return userId; + } + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public String getDisplayText() { + return displayText; + } + public void setDisplayText(String text) { + this.displayText = text; + } + + public Integer getBits() { + return bits; + } + public void setBits(Integer bits) { + this.bits = bits; + } + + public Boolean getPasswordEnabled() { + return passwordEnabled; + } + public void setPasswordEnabled(Boolean enabled) { + this.passwordEnabled = enabled; + } + + public Boolean getRequiresHVM() { + return requiresHvm; + } + public void setRequiresHVM(Boolean hvm) { + this.requiresHvm = hvm; + } + + public String getUrl() { + return url; + } + public void setUrl(String url) { + this.url = url; + } + + public Boolean getIsPublic() { + return isPublic; + } + public void setIsPublic(Boolean is) { + this.isPublic = is; + } + + public Boolean getFeatured() { + return featured; + } + public void setFeatured(Boolean featured) { + this.featured = featured; + } + + public Boolean getIsExtractable() { + return isExtractable; + } + public void setIsExtractable(Boolean is) { + this.isExtractable = is; + } + + public ImageFormat getFormat() { + return format; + } + public void setFormat(ImageFormat format) { + this.format = format; + } + + public Long getGuestOsId() { + return guestOsId; + } + public void setGuestOsId(Long id) { + this.guestOsId = id; + } + + public Long getZoneId() { + return zoneId; + } + public void setZoneId(Long id) { + this.zoneId = id; + } + + public HypervisorType getHypervisorType() { + return hypervisorType; + } + public void setHypervisorType(HypervisorType type) { + this.hypervisorType = type; + } + + public Long getDomainId() { + return domainId; + } + public void setDomainId(Long id) { + this.domainId = id; + } + + public Long getAccountId() { + return accountId; + } + public void setAccountId(Long id) { + this.accountId = id; + } + + public String getCheckSum() { + return chksum; + } + public void setCheckSum(String chksum) { + this.chksum = chksum; + } + + public Boolean getBootable() { + return this.bootable; + } + public void setBootable(Boolean bootable) { + this.bootable = bootable; + } + + public VirtualMachineTemplate getTemplate() { + return template; + } + public void setTemplate(VirtualMachineTemplate template) { + this.template = template; + } + + public String getTemplateTag() { + return templateTag; + } + + public void setTemplateTag(String templateTag) { + this.templateTag = templateTag; + } + + public Map getDetails() { + return this.details; + } + + public void setDetails(Map details) { + this.details = details; + } + + public void setSshKeyEnabled(Boolean enabled) { + this.sshKeyEnbaled = enabled; + } + + public Boolean getSshKeyEnabled() { + return this.sshKeyEnbaled; + } + + public String getImageStorageUri() { + return null; + } + + public void setLocalPath(String path) { + + } + + public String getLocalPath() { + return null; + } + + public String getJobId() { + return null; + } + + public void setTemplatePoolRefId(long id) { + + } + + public long getId() { + return 0; + } + + public long getTemplatePoolRefId() { + return 0; + } + + public long getSize() { + return 0; + } +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateStrategy.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateStrategy.java new file mode 100644 index 00000000000..b0458aab688 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateStrategy.java @@ -0,0 +1,13 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + +import com.cloud.agent.api.storage.DownloadCommand.Proxy; + +public interface TemplateStrategy { + TemplateProfile install(TemplateProfile tp); + TemplateProfile get(long templateId); + TemplateProfile register(TemplateProfile tp); + boolean canRegister(long templateId); + int getDownloadWait(); + long getMaxTemplateSizeInBytes(); + Proxy getHttpProxy(); +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeProfile.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeProfile.java new file mode 100644 index 00000000000..ed4d42187be --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeProfile.java @@ -0,0 +1,34 @@ +/* + * 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.engine.subsystem.api.storage; + +public class VolumeProfile { + private String _uri; + public String getURI() { + return _uri; + } + + public String getPath() { + return null; + } + + public long getSize() { + return 0; + } +} diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeStrategy.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeStrategy.java new file mode 100644 index 00000000000..dba0077b934 --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeStrategy.java @@ -0,0 +1,16 @@ +package org.apache.cloudstack.engine.subsystem.api.storage; + + +import com.cloud.storage.Volume; + +public interface VolumeStrategy { + Volume createVolume(Volume vol); + Volume createDataVolume(Volume vol); + Volume copyVolumeFromBackup(VolumeProfile srcVol, Volume destVol); + Volume createVolumeFromSnapshot(SnapshotProfile snapshot, Volume vol); + Volume createVolumeFromTemplate(TemplateProfile template, Volume vol); + Volume migrateVolume(Volume srcVol, Volume destVol, DataStore destStore); + Volume createVolumeFromBaseTemplate(Volume destVol, TemplateProfile tp); + boolean deleteVolume(Volume vol); + VolumeProfile get(long volumeId); +}