diff --git a/api/pom.xml b/api/pom.xml
index e8cea9ceb16..2c7c8d0e017 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -56,6 +56,11 @@
cloud-framework-ca
${project.version}
+
+ org.apache.cloudstack
+ cloud-framework-backup-and-recovery
+ ${project.version}
+
org.apache.commons
commons-lang3
diff --git a/api/src/main/java/com/cloud/host/Host.java b/api/src/main/java/com/cloud/host/Host.java
index a8c0b4b8ed6..1ecd48d74ce 100644
--- a/api/src/main/java/com/cloud/host/Host.java
+++ b/api/src/main/java/com/cloud/host/Host.java
@@ -33,7 +33,7 @@ public interface Host extends StateObject, Identity, Partition, HAResour
Storage(false), Routing(false), SecondaryStorage(false), SecondaryStorageCmdExecutor(false), ConsoleProxy(true), ExternalFirewall(false), ExternalLoadBalancer(
false), ExternalVirtualSwitchSupervisor(false), PxeServer(false), BaremetalPxe(false), BaremetalDhcp(false), TrafficMonitor(false), NetScalerControlCenter(false),
- ExternalDhcp(false), SecondaryStorageVM(true), LocalSecondaryStorage(false), L2Networking(false), BackupRecovery(true);
+ ExternalDhcp(false), SecondaryStorageVM(true), LocalSecondaryStorage(false), L2Networking(false);
boolean _virtual;
private Type(boolean virtual) {
diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
index 9d783cd7081..478067cb8a8 100644
--- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
@@ -720,9 +720,8 @@ public class ApiConstants {
public static final String LDAP_DOMAIN = "ldapdomain";
// Backup and Recovery
- public static final String BACKUP_PROVIDER_ID = "backupproviderid";
- public static final String BACKUP_POLICY_ID = "backuppolicyid";
- public static final String BACKUP_POLICY_NAME = "backuppolicyname";
+ public static final String BR_PROVIDER_ID = "providerid";
+ public static final String BR_POLICY_ID = "policyid";
public enum HostDetails {
all, capacity, events, stats, min;
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/AddBackupRecoveryPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/policy/AddBRPolicyCmd.java
similarity index 57%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/AddBackupRecoveryPolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/br/policy/AddBRPolicyCmd.java
index 0cc10874eae..4dc16fa47b3 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/AddBackupRecoveryPolicyCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/policy/AddBRPolicyCmd.java
@@ -1,10 +1,26 @@
-package org.apache.cloudstack.framework.backuprecovery.api;
+// 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.api.command.admin.br.policy;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.NetworkRuleConflictException;
-import com.cloud.exception.OperationTimedoutException;
import com.cloud.exception.ResourceAllocationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.utils.exception.CloudRuntimeException;
@@ -16,40 +32,37 @@ import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.framework.backuprecovery.BackupRecoveryManager;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupPolicyResponse;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderResponse;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupPolicyVO;
+import org.apache.cloudstack.br.BRManager;
+import org.apache.cloudstack.api.response.BRPolicyResponse;
+import org.apache.cloudstack.framework.br.BRPolicy;
import javax.inject.Inject;
-@APICommand(name = AddBackupRecoveryPolicyCmd.APINAME,
+@APICommand(name = AddBRPolicyCmd.APINAME,
description = "Adds a Backup policy",
- responseObject = BackupPolicyResponse.class, since = "4.12.0",
+ responseObject = BRPolicyResponse.class, since = "4.12.0",
authorized = {RoleType.Admin})
-public class AddBackupRecoveryPolicyCmd extends BaseCmd {
+public class AddBRPolicyCmd extends BaseCmd {
- public static final String APINAME = "addBackupRecoveryPolicy";
+ public static final String APINAME = "addBRPolicy";
@Inject
- BackupRecoveryManager backupRecoveryManager;
+ BRManager brManager;
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "the name of the policy")
private String policyName;
- @Parameter(name = ApiConstants.BACKUP_POLICY_ID,
+ @Parameter(name = ApiConstants.BR_POLICY_ID,
type = CommandType.STRING,
- entityType = BackupRecoveryProviderResponse.class,
required = true,
description = "Backup Recovery Provider ID")
private String policyId;
- @Parameter(name = ApiConstants.BACKUP_PROVIDER_ID,
- type = BaseCmd.CommandType.UUID,
- entityType = BackupRecoveryProviderResponse.class,
+ @Parameter(name = ApiConstants.BR_PROVIDER_ID,
+ type = CommandType.STRING,
required = true,
description = "Backup Recovery Provider ID")
- private Long providerId;
+ private String providerId;
public String getPolicyName() {
return policyName;
@@ -59,17 +72,17 @@ public class AddBackupRecoveryPolicyCmd extends BaseCmd {
return policyId;
}
- public Long getProviderId() {
+ public String getProviderId() {
return providerId;
}
@Override
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
try {
- BackupPolicyVO policyVO = backupRecoveryManager.addBackupPolicy(this);
- if (policyVO != null) {
- BackupPolicyResponse response = backupRecoveryManager.createBackupPolicyResponse(policyVO);
- response.setObjectName("backuppolicy");
+ BRPolicy policy = brManager.addBRPolicy(policyId, policyName, providerId);
+ if (policy != null) {
+ BRPolicyResponse response = brManager.createBackupPolicyResponse(policy);
+ response.setObjectName("brpolicy");
response.setResponseName(getCommandName());
setResponseObject(response);
} else {
@@ -79,14 +92,12 @@ public class AddBackupRecoveryPolicyCmd extends BaseCmd {
throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.getMessage());
} catch (CloudRuntimeException e) {
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
- } catch (OperationTimedoutException e) {
- e.printStackTrace();
}
}
@Override
public String getCommandName() {
- return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX;
+ return APINAME.toLowerCase() + RESPONSE_SUFFIX;
}
@Override
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/AssignBackupPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/policy/AssignBRPolicyCmd.java
similarity index 79%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/AssignBackupPolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/br/policy/AssignBRPolicyCmd.java
index 7cd79041382..b6be9bc63df 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/AssignBackupPolicyCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/policy/AssignBRPolicyCmd.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.cloudstack.framework.backuprecovery.api;
+package org.apache.cloudstack.api.command.admin.br.policy;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
@@ -33,33 +33,32 @@ import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.response.SuccessResponse;
import org.apache.cloudstack.api.response.UserVmResponse;
import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.framework.backuprecovery.BackupRecoveryManager;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderResponse;
+import org.apache.cloudstack.br.BRManager;
+import org.apache.cloudstack.br.BRProviderDriver;
import javax.inject.Inject;
-@APICommand(name = AssignBackupPolicyCmd.APINAME,
+@APICommand(name = AssignBRPolicyCmd.APINAME,
description = "Assigns a VM to an existing backup policy",
responseObject = SuccessResponse.class, since = "4.12.0")
-public class AssignBackupPolicyCmd extends BaseCmd {
+public class AssignBRPolicyCmd extends BaseCmd {
- public static final String APINAME = "assignBackupPolicy";
+ public static final String APINAME = "assignBRPolicy";
@Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID,
type = CommandType.UUID,
entityType = UserVmResponse.class,
required = true,
description = "id of the VM to be moved")
- private Long virtualMachineId;
+ private String virtualMachineId;
- @Parameter(name = ApiConstants.BACKUP_POLICY_ID,
+ @Parameter(name = ApiConstants.BR_POLICY_ID,
type = CommandType.STRING,
- entityType = BackupRecoveryProviderResponse.class,
required = true,
description = "Backup Recovery Provider ID")
private String policyId;
- public Long getVirtualMachineId() {
+ public String getVirtualMachineId() {
return virtualMachineId;
}
@@ -68,12 +67,13 @@ public class AssignBackupPolicyCmd extends BaseCmd {
}
@Inject
- BackupRecoveryManager backupRecoveryManager;
+ BRManager brManager;
@Override
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
try {
- boolean result = backupRecoveryManager.assignVMToBackupPolicy(this);
+ BRProviderDriver provider = brManager.getBRProviderFromPolicy(getPolicyId());
+ boolean result = provider.assignVMToBackupPolicy(getPolicyId(), getVirtualMachineId());
if (result) {
SuccessResponse response = new SuccessResponse(getCommandName());
response.setResponseName(getCommandName());
@@ -82,13 +82,13 @@ public class AssignBackupPolicyCmd extends BaseCmd {
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to assign VM to backup policy");
}
} catch (Exception e) {
-
+ throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.getMessage());
}
}
@Override
public String getCommandName() {
- return AssignBackupPolicyCmd.APINAME + BaseCmd.RESPONSE_SUFFIX;
+ return AssignBRPolicyCmd.APINAME + RESPONSE_SUFFIX;
}
@Override
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/ListBackupRecoveryPoliciesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/policy/ListBRPoliciesCmd.java
similarity index 61%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/ListBackupRecoveryPoliciesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/br/policy/ListBRPoliciesCmd.java
index f0b43e4dddf..df3b6b39b74 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/ListBackupRecoveryPoliciesCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/policy/ListBRPoliciesCmd.java
@@ -14,7 +14,7 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.api;
+package org.apache.cloudstack.api.command.admin.br.policy;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InvalidParameterValueException;
@@ -23,56 +23,53 @@ import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.BaseListCmd;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.framework.backuprecovery.BackupRecoveryManager;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupPolicyResponse;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderResponse;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupPolicyVO;
+import org.apache.cloudstack.br.BRManager;
+import org.apache.cloudstack.api.response.BRPolicyResponse;
+import org.apache.cloudstack.framework.br.BRPolicy;
import org.apache.commons.collections.CollectionUtils;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;
-@APICommand(name = ListBackupRecoveryPoliciesCmd.APINAME,
+@APICommand(name = ListBRPoliciesCmd.APINAME,
description = "Lists mapped Backup policies",
- responseObject = BackupPolicyResponse.class, since = "4.12.0",
+ responseObject = BRPolicyResponse.class, since = "4.12.0",
authorized = {RoleType.Admin})
-public class ListBackupRecoveryPoliciesCmd extends BaseListCmd {
+public class ListBRPoliciesCmd extends BaseListCmd {
- public static final String APINAME = "listBackupRecoveryPolicies";
+ public static final String APINAME = "listBRPolicies";
- @Parameter(name = ApiConstants.BACKUP_PROVIDER_ID,
- type = BaseCmd.CommandType.UUID,
- entityType = BackupRecoveryProviderResponse.class,
+ @Parameter(name = ApiConstants.BR_PROVIDER_ID,
+ type = CommandType.STRING,
required = true,
description = "Backup Recovery Provider ID")
- private Long providerId;
+ private String providerId;
- public long getProviderId() {
+ public String getProviderId() {
return providerId;
}
@Inject
- BackupRecoveryManager backupRecoveryManager;
+ BRManager brManager;
@Override
public void execute() throws ServerApiException, ConcurrentOperationException {
try {
- ListResponse response = new ListResponse();
- List responses = new ArrayList<>();
- List policies = backupRecoveryManager.listBackupPolicies(this);
+ ListResponse response = new ListResponse();
+ List responses = new ArrayList<>();
+ List policies = brManager.listBRPolicies(providerId);
if (CollectionUtils.isNotEmpty(policies)) {
- for (BackupPolicyVO policy : policies) {
- BackupPolicyResponse p = backupRecoveryManager.createBackupPolicyResponse(policy);
- responses.add(p);
+ for (BRPolicy policy : policies) {
+ responses.add(brManager.createBackupPolicyResponse(policy));
}
}
response.setResponses(responses, responses.size());
+ response.setObjectName("brpolicies");
response.setResponseName(getCommandName());
setResponseObject(response);
} catch (InvalidParameterValueException e) {
@@ -83,7 +80,7 @@ public class ListBackupRecoveryPoliciesCmd extends BaseListCmd {
}
@Override
public String getCommandName() {
- return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX;
+ return APINAME.toLowerCase() + RESPONSE_SUFFIX;
}
}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/AddBackupRecoveryProviderCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/AddBRProviderCmd.java
similarity index 65%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/AddBackupRecoveryProviderCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/AddBRProviderCmd.java
index fd54ac7a2b8..3823b49bc28 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/AddBackupRecoveryProviderCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/AddBRProviderCmd.java
@@ -14,15 +14,13 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.api;
+package org.apache.cloudstack.api.command.admin.br.provider;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceAllocationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.exception.NetworkRuleConflictException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.ServerApiException;
@@ -31,27 +29,26 @@ import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.response.ZoneResponse;
-import org.apache.cloudstack.framework.backuprecovery.BackupRecoveryManager;
+import org.apache.cloudstack.br.BRManager;
import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderResponse;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupRecoveryProviderVO;
+import org.apache.cloudstack.api.response.BRProviderResponse;
+import org.apache.cloudstack.framework.br.BRProvider;
import org.apache.log4j.Logger;
import javax.inject.Inject;
-import java.lang.reflect.InvocationTargetException;
-@APICommand(name = AddBackupRecoveryProviderCmd.APINAME,
+@APICommand(name = AddBRProviderCmd.APINAME,
description = "Adds a Backup and Recovery provider on a zone",
- responseObject = BackupRecoveryProviderResponse.class, since = "4.12.0",
+ responseObject = BRProviderResponse.class, since = "4.12.0",
authorized = {RoleType.Admin})
-public class AddBackupRecoveryProviderCmd extends BaseCmd {
+public class AddBRProviderCmd extends BaseCmd {
- public static final String APINAME = "addBackupRecoveryProvider";
+ public static final String APINAME = "addBRProvider";
- private static final Logger s_logger = Logger.getLogger(AddBackupRecoveryProviderCmd.class);
+ private static final Logger s_logger = Logger.getLogger(AddBRProviderCmd.class);
@Inject
- BackupRecoveryManager backupRecoveryManager;
+ BRManager brManager;
@Parameter(name=ApiConstants.ZONE_ID, type=BaseCmd.CommandType.UUID, entityType = ZoneResponse.class,
required=true, description="the ID of the zone you wish to register the Backup and Recovery provider to.")
@@ -74,34 +71,20 @@ public class AddBackupRecoveryProviderCmd extends BaseCmd {
@Override
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
- try {
- BackupRecoveryProviderVO providerVO = backupRecoveryManager.addBackupRecoveryProvider(this);
- if (providerVO != null) {
- BackupRecoveryProviderResponse response = backupRecoveryManager.createBackupRecoveryProviderResponse(providerVO);
- response.setObjectName("backuprecoveryprovider");
- response.setResponseName(getCommandName());
- setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add a Backup and Recovery Provider");
- }
- } catch (InvalidParameterValueException e) {
- throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.getMessage());
- } catch (CloudRuntimeException e) {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
+ BRProvider providerVO = brManager.addBRProvider(name, url, username, password, zoneId, provider);
+ if (providerVO != null) {
+ BRProviderResponse response = brManager.createBRProviderResponse(providerVO);
+ response.setObjectName("brprovider");
+ response.setResponseName(getCommandName());
+ setResponseObject(response);
+ } else {
+ throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add a Backup and Recovery Provider");
}
}
@Override
public String getCommandName() {
- return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX;
+ return APINAME.toLowerCase() + RESPONSE_SUFFIX;
}
@Override
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/DeleteBackupRecoveryProviderCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/DeleteBRProviderCmd.java
similarity index 76%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/DeleteBackupRecoveryProviderCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/DeleteBRProviderCmd.java
index 183ceed3b7b..57c6e3bbd3e 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/DeleteBackupRecoveryProviderCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/DeleteBRProviderCmd.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.api;
+package org.apache.cloudstack.api.command.admin.br.provider;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
@@ -33,37 +33,35 @@ import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.framework.backuprecovery.BackupRecoveryManager;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderResponse;
+import org.apache.cloudstack.br.BRManager;
import javax.inject.Inject;
-@APICommand(name = DeleteBackupRecoveryProviderCmd.APINAME,
+@APICommand(name = DeleteBRProviderCmd.APINAME,
description = "Deletes a Backup and Recovery provider",
- responseObject = SuccessResponse.class, since = "4.12.0", requestHasSensitiveInfo = false, responseHasSensitiveInfo = false,
+ responseObject = SuccessResponse.class, since = "4.12.0",
authorized = {RoleType.Admin})
-public class DeleteBackupRecoveryProviderCmd extends BaseCmd {
+public class DeleteBRProviderCmd extends BaseCmd {
- public static final String APINAME = "deleteBackupRecoveryProvider";
+ public static final String APINAME = "deleteBRProvider";
@Inject
- BackupRecoveryManager backupRecoveryManager;
+ BRManager brManager;
- @Parameter(name = ApiConstants.BACKUP_PROVIDER_ID,
- type = CommandType.UUID,
- entityType = BackupRecoveryProviderResponse.class,
+ @Parameter(name = ApiConstants.BR_PROVIDER_ID,
+ type = CommandType.STRING,
required = true,
description = "Backup Recovery Provider ID")
- private Long providerId;
+ private String providerId;
- public Long getProviderId() {
+ public String getProviderId() {
return providerId;
}
@Override
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
try {
- boolean result = backupRecoveryManager.deleteBackupRecoveryProvider(this);
+ boolean result = brManager.deleteBRProvider(providerId);
if (result) {
SuccessResponse response = new SuccessResponse(getCommandName());
response.setResponseName(getCommandName());
@@ -80,7 +78,7 @@ public class DeleteBackupRecoveryProviderCmd extends BaseCmd {
@Override
public String getCommandName() {
- return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX;
+ return APINAME.toLowerCase() + RESPONSE_SUFFIX;
}
@Override
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/ListBackupRecoveryProviderPoliciesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/ListBRProviderPoliciesCmd.java
similarity index 62%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/ListBackupRecoveryProviderPoliciesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/ListBRProviderPoliciesCmd.java
index 5a41aa46a4f..2abf678d9ba 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/ListBackupRecoveryProviderPoliciesCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/ListBRProviderPoliciesCmd.java
@@ -15,71 +15,76 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.api;
+package org.apache.cloudstack.api.command.admin.br.provider;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.OperationTimedoutException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.BaseListCmd;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.framework.backuprecovery.BackupRecoveryManager;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderPolicyResponse;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderResponse;
+import org.apache.cloudstack.br.BRManager;
+import org.apache.cloudstack.br.BRProviderDriver;
+import org.apache.cloudstack.api.response.BRPolicyResponse;
+import org.apache.cloudstack.framework.br.BRPolicy;
import javax.inject.Inject;
+import java.util.ArrayList;
import java.util.List;
-@APICommand(name = ListBackupRecoveryProviderPoliciesCmd.APINAME,
+@APICommand(name = ListBRProviderPoliciesCmd.APINAME,
description = "Lists Backup policies existing on the Backup and Recovery provider side",
- responseObject = BackupRecoveryProviderPolicyResponse.class, since = "4.12.0",
+ responseObject = BRPolicyResponse.class, since = "4.12.0",
authorized = {RoleType.Admin})
-public class ListBackupRecoveryProviderPoliciesCmd extends BaseListCmd {
+public class ListBRProviderPoliciesCmd extends BaseListCmd {
- public static final String APINAME = "listBackupRecoveryProviderPolicies";
+ public static final String APINAME = "listBRProviderPolicies";
@Inject
- BackupRecoveryManager backupRecoveryManager;
+ BRManager brManager;
- @Parameter(name = ApiConstants.BACKUP_PROVIDER_ID,
- type = BaseCmd.CommandType.UUID,
- entityType = BackupRecoveryProviderResponse.class,
+ @Parameter(name = ApiConstants.BR_PROVIDER_ID,
+ type = CommandType.STRING,
required = true,
description = "Backup Recovery Provider ID")
- private Long providerId;
+ private String providerId;
- public Long getProviderId() {
+ public String getProviderId() {
return providerId;
}
@Override
public void execute() throws ResourceUnavailableException, ServerApiException, ConcurrentOperationException {
+ List responses = new ArrayList<>();
+ ListResponse response = new ListResponse();
try {
- ListResponse response = new ListResponse();
- List policies = backupRecoveryManager.listBackupPolicies(this);
+ BRProviderDriver provider = brManager.getBRProviderFromProvider(providerId);
+ List policies = provider.listBackupPolicies(brManager.getProviderId(providerId));
if (policies == null) {
throw new CloudRuntimeException("Error while retrieving backup provider policies");
}
- response.setResponses(policies, policies.size());
+ for (BRPolicy policy : policies) {
+ responses.add(brManager.createBackupPolicyResponse(policy));
+ }
+ response.setResponses(responses, responses.size());
+ response.setObjectName("brproviderpolicies");
response.setResponseName(getCommandName());
setResponseObject(response);
} catch (InvalidParameterValueException e) {
throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.getMessage());
- } catch (CloudRuntimeException | OperationTimedoutException e) {
+ } catch (CloudRuntimeException e) {
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
}
}
@Override
public String getCommandName() {
- return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX;
+ return APINAME.toLowerCase() + RESPONSE_SUFFIX;
}
}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/ListBackupRecoveryProvidersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/ListBRProvidersCmd.java
similarity index 53%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/ListBackupRecoveryProvidersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/ListBRProvidersCmd.java
index cff2a893cb8..53b5837702b 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/ListBackupRecoveryProvidersCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/br/provider/ListBRProvidersCmd.java
@@ -15,72 +15,53 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.api;
+package org.apache.cloudstack.api.command.admin.br.provider;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.BaseListCmd;
-import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.api.response.ZoneResponse;
-import org.apache.cloudstack.framework.backuprecovery.BackupRecoveryManager;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderResponse;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupRecoveryProviderVO;
+import org.apache.cloudstack.br.BRManager;
+import org.apache.cloudstack.api.response.BRProviderResponse;
+import org.apache.cloudstack.framework.br.BRProvider;
import org.apache.commons.collections.CollectionUtils;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;
-@APICommand(name = ListBackupRecoveryProvidersCmd.APINAME,
+@APICommand(name = ListBRProvidersCmd.APINAME,
description = "Lists Backup and Recovery providers",
- responseObject = BackupRecoveryProviderResponse.class, since = "4.12.0",
+ responseObject = BRProviderResponse.class, since = "4.12.0",
authorized = {RoleType.Admin})
-public class ListBackupRecoveryProvidersCmd extends BaseListCmd {
+public class ListBRProvidersCmd extends BaseListCmd {
- public static final String APINAME = "listBackupRecoveryProviders";
+ public static final String APINAME = "listBRProviders";
@Inject
- BackupRecoveryManager backupRecoveryManager;
-
- @Parameter(name=ApiConstants.ZONE_ID, type=BaseCmd.CommandType.UUID, entityType = ZoneResponse.class,
- description="the ID of the zone")
- private Long zoneId;
-
- @Parameter(name = ApiConstants.PROVIDER, type = CommandType.STRING, entityType = BackupRecoveryProviderResponse.class,
- description = "the Backup and Recovery provider type")
- private String provider;
-
- public Long getZoneId() {
- return zoneId;
- }
-
- public String getProvider() {
- return provider;
- }
+ BRManager brManager;
@Override
public void execute() throws ServerApiException, ConcurrentOperationException {
try {
- List providers = backupRecoveryManager.listBackupRecoveryProviders(this);
- ListResponse response = new ListResponse();
- List providersResponse = new ArrayList();
+ List providers = brManager.listBRProviders();
+ ListResponse response = new ListResponse();
+ List providersResponse = new ArrayList();
if (CollectionUtils.isNotEmpty(providers)) {
- for (BackupRecoveryProviderVO providerVO : providers) {
- BackupRecoveryProviderResponse providerResponse = backupRecoveryManager.createBackupRecoveryProviderResponse(providerVO);
+ for (BRProvider providerVO : providers) {
+ BRProviderResponse providerResponse = brManager.createBRProviderResponse(providerVO);
providersResponse.add(providerResponse);
}
}
response.setResponses(providersResponse, providersResponse.size());
+ response.setObjectName("brproviders");
response.setResponseName(getCommandName());
setResponseObject(response);
} catch (InvalidParameterValueException e) {
@@ -92,6 +73,6 @@ public class ListBackupRecoveryProvidersCmd extends BaseListCmd {
@Override
public String getCommandName() {
- return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX;
+ return APINAME.toLowerCase() + RESPONSE_SUFFIX;
}
}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/response/BackupPolicyResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/BRPolicyResponse.java
similarity index 71%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/response/BackupPolicyResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/BRPolicyResponse.java
index e980a1b76a7..8ae8e9042e9 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/response/BackupPolicyResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/BRPolicyResponse.java
@@ -15,34 +15,38 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.api.response;
+package org.apache.cloudstack.api.response;
import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseResponse;
import org.apache.cloudstack.api.EntityReference;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupPolicyVO;
+import org.apache.cloudstack.framework.br.BRPolicy;
-@EntityReference(value = BackupPolicyVO.class)
-public class BackupPolicyResponse extends BaseResponse {
+@EntityReference(value = BRPolicy.class)
+public class BRPolicyResponse extends BaseResponse {
@SerializedName(ApiConstants.ID)
- @Param(description = "internal id of the Backup policy")
+ @Param(description = "internal id of the backup policy")
private String id;
- @SerializedName(ApiConstants.BACKUP_POLICY_ID)
+ @SerializedName(ApiConstants.UUID)
+ @Param(description = "internal uuid of the backup policy")
+ private String uuid;
+
+ @SerializedName(ApiConstants.NAME)
+ @Param(description = "internal name for the backup policy")
+ private String name;
+
+ @SerializedName(ApiConstants.BR_POLICY_ID)
@Param(description = "policy id on the provider side")
private String policyId;
- @SerializedName(ApiConstants.BACKUP_PROVIDER_ID)
- @Param(description = "id of the Backup and Recovery provider")
+ @SerializedName(ApiConstants.BR_PROVIDER_ID)
+ @Param(description = "id of the backup and Recovery provider")
private String providerId;
- @SerializedName(ApiConstants.BACKUP_POLICY_NAME)
- @Param(description = "internal name for the backup policy")
- private String name;
-
public void setId(String id) {
this.id = id;
}
@@ -58,4 +62,8 @@ public class BackupPolicyResponse extends BaseResponse {
public void setName(String name) {
this.name = name;
}
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/response/BackupRecoveryProviderResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/BRProviderResponse.java
similarity index 85%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/response/BackupRecoveryProviderResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/BRProviderResponse.java
index b454e5b67d5..33d263ee20f 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/response/BackupRecoveryProviderResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/BRProviderResponse.java
@@ -15,19 +15,19 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.api.response;
+package org.apache.cloudstack.api.response;
import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseResponse;
import org.apache.cloudstack.api.EntityReference;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupRecoveryProviderVO;
+import org.apache.cloudstack.framework.br.BRProvider;
-@EntityReference(value = BackupRecoveryProviderVO.class)
-public class BackupRecoveryProviderResponse extends BaseResponse {
+@EntityReference(BRProvider.class)
+public class BRProviderResponse extends BaseResponse {
- @SerializedName(ApiConstants.BACKUP_PROVIDER_ID)
+ @SerializedName(ApiConstants.BR_PROVIDER_ID)
@Param(description = "id of the Backup and Recovery provider")
private String id;
diff --git a/api/src/main/java/org/apache/cloudstack/br/BRManager.java b/api/src/main/java/org/apache/cloudstack/br/BRManager.java
new file mode 100644
index 00000000000..d114ce153a3
--- /dev/null
+++ b/api/src/main/java/org/apache/cloudstack/br/BRManager.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.br;
+
+import com.cloud.utils.component.Manager;
+import com.cloud.utils.component.PluggableService;
+import org.apache.cloudstack.api.response.BRPolicyResponse;
+import org.apache.cloudstack.api.response.BRProviderResponse;
+import org.apache.cloudstack.framework.br.BRPolicy;
+import org.apache.cloudstack.framework.br.BRProvider;
+import org.apache.cloudstack.framework.br.BRService;
+import org.apache.cloudstack.framework.config.Configurable;
+
+/**
+ * Backup and Recover Manager Interface
+ */
+public interface BRManager extends BRService, Configurable, PluggableService, Manager {
+
+ /**
+ * Get the Backup and Recovery Provider for the policy id, null if not registered
+ */
+ BRProviderDriver getBRProviderFromPolicy(String policyId);
+
+ /**
+ * Get the Backup and Recovery Provider for the provider id, null if not registered
+ */
+ BRProviderDriver getBRProviderFromProvider(String providerId);
+
+ /**
+ * Generate a response from the Backup and Recovery Provider VO
+ */
+ BRProviderResponse createBRProviderResponse(BRProvider backupRecoveryProviderVO);
+
+ /**
+ * Generate a response from the Backup Policy VO
+ */
+ BRPolicyResponse createBackupPolicyResponse(BRPolicy policyVO);
+
+ /**
+ * Return Backup and Recovery id from provider uuid
+ */
+ long getProviderId(String providerId);
+}
diff --git a/api/src/main/java/org/apache/cloudstack/br/BRProviderDriver.java b/api/src/main/java/org/apache/cloudstack/br/BRProviderDriver.java
new file mode 100644
index 00000000000..65807f5779d
--- /dev/null
+++ b/api/src/main/java/org/apache/cloudstack/br/BRProviderDriver.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.br;
+
+import com.cloud.utils.component.Adapter;
+import org.apache.cloudstack.framework.br.BRPolicy;
+
+import java.util.List;
+
+/**
+ * Backup and Recovery Provider
+ */
+public interface BRProviderDriver extends Adapter {
+
+ /**
+ * Register Backup and Recovery Provider
+ */
+ boolean registerProvider(long zoneId, String name, String url, String username, String password);
+
+ /**
+ * True if policy exists on the provider, false if not
+ */
+ boolean policyExists(String policyId, String policyName);
+
+ /**
+ * List existing Backup Policies on the provider
+ */
+ List listBackupPolicies(long providerId);
+
+ /**
+ * Assign a VM to an existing backup policy
+ */
+ boolean assignVMToBackupPolicy(String policyId, String vmId);
+
+ /**
+ * Unregister Backup and Recovery Provider
+ */
+ boolean unregisterProvider();
+
+ void restoreVMFromBackup();
+ void restoreAndAttachVolumeToVM();
+}
diff --git a/framework/backup-and-recovery/src/main/resources/META-INF/cloudstack/backup-and-recovery/module.properties b/core/src/main/resources/META-INF/cloudstack/backup-and-recovery/module.properties
similarity index 100%
rename from framework/backup-and-recovery/src/main/resources/META-INF/cloudstack/backup-and-recovery/module.properties
rename to core/src/main/resources/META-INF/cloudstack/backup-and-recovery/module.properties
diff --git a/framework/backup-and-recovery/src/main/resources/META-INF/cloudstack/backup-and-recovery/spring-backup-and-recovery-context.xml b/core/src/main/resources/META-INF/cloudstack/backup-and-recovery/spring-core-lifecycle-backup-and-recovery-context-inheritable.xml
similarity index 74%
rename from framework/backup-and-recovery/src/main/resources/META-INF/cloudstack/backup-and-recovery/spring-backup-and-recovery-context.xml
rename to core/src/main/resources/META-INF/cloudstack/backup-and-recovery/spring-core-lifecycle-backup-and-recovery-context-inheritable.xml
index 17e1d16082c..4af97cb0ea3 100644
--- a/framework/backup-and-recovery/src/main/resources/META-INF/cloudstack/backup-and-recovery/spring-backup-and-recovery-context.xml
+++ b/core/src/main/resources/META-INF/cloudstack/backup-and-recovery/spring-core-lifecycle-backup-and-recovery-context-inheritable.xml
@@ -26,12 +26,7 @@
-
+
-
-
-
-
-
\ No newline at end of file
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/to/BackupPolicyTO.java b/engine/schema/src/main/java/org/apache/cloudstack/br/BRPolicyTO.java
similarity index 57%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/to/BackupPolicyTO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/br/BRPolicyTO.java
index 7b73ea5a1c1..cefaceb5ae0 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/to/BackupPolicyTO.java
+++ b/engine/schema/src/main/java/org/apache/cloudstack/br/BRPolicyTO.java
@@ -17,31 +17,47 @@
* under the License.
*/
-package org.apache.cloudstack.framework.backuprecovery.agent.api.to;
+package org.apache.cloudstack.br;
-import java.io.Serializable;
+import org.apache.cloudstack.framework.br.BRPolicy;
-public class BackupPolicyTO implements Serializable {
+public class BRPolicyTO implements BRPolicy {
+ private long id;
+ private String uuid;
private String name;
- private String id;
- private String description;
+ private String policyUuid;
+ private long providerId;
- public BackupPolicyTO(final String id, final String name, final String desc) {
- this.id = id;
+ public BRPolicyTO(final long id, final String uuid, final String name, final String policyUuid, final long providerId) {
this.name = name;
- this.description = desc;
+ this.uuid = uuid;
+ this.id = id;
+ this.policyUuid = policyUuid;
+ this.providerId = providerId;
+ }
+
+ @Override
+ public String getPolicyUuid() {
+ return policyUuid;
}
public String getName() {
return name;
}
- public String getId() {
- return id;
+ @Override
+ public long getProviderId() {
+ return providerId;
}
- public String getDescription() {
- return description;
+ @Override
+ public String getUuid() {
+ return uuid;
+ }
+
+ @Override
+ public long getId() {
+ return id;
}
}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupPolicyVO.java b/engine/schema/src/main/java/org/apache/cloudstack/br/BRPolicyVO.java
similarity index 83%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupPolicyVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/br/BRPolicyVO.java
index a691e934b30..ab2fa2f551d 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupPolicyVO.java
+++ b/engine/schema/src/main/java/org/apache/cloudstack/br/BRPolicyVO.java
@@ -15,10 +15,9 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.impl;
+package org.apache.cloudstack.br;
-import org.apache.cloudstack.api.Identity;
-import org.apache.cloudstack.api.InternalIdentity;
+import org.apache.cloudstack.framework.br.BRPolicy;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -29,14 +28,14 @@ import javax.persistence.Table;
import java.util.UUID;
@Entity
-@Table(name = "backup_policies")
-public class BackupPolicyVO implements InternalIdentity, Identity {
+@Table(name = "br_policies")
+public class BRPolicyVO implements BRPolicy {
- public BackupPolicyVO() {
+ public BRPolicyVO() {
this.uuid = UUID.randomUUID().toString();
}
- public BackupPolicyVO(final long providerId, final String name, final String policyUuid) {
+ public BRPolicyVO(final long providerId, final String name, final String policyUuid) {
this();
this.providerId = providerId;
this.name = name;
@@ -59,14 +58,12 @@ public class BackupPolicyVO implements InternalIdentity, Identity {
@Column(name = "policy_uuid")
private String policyUuid;
- @Override
public String getUuid() {
- return null;
+ return uuid;
}
- @Override
public long getId() {
- return 0;
+ return id;
}
public void setId(long id) {
diff --git a/engine/schema/src/main/java/org/apache/cloudstack/br/BRProviderDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/br/BRProviderDetailVO.java
new file mode 100644
index 00000000000..662673cab52
--- /dev/null
+++ b/engine/schema/src/main/java/org/apache/cloudstack/br/BRProviderDetailVO.java
@@ -0,0 +1,81 @@
+// 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.br;
+
+import com.cloud.utils.db.Encrypt;
+import org.apache.cloudstack.api.InternalIdentity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "br_provider_details")
+public class BRProviderDetailVO implements InternalIdentity {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private long id;
+
+ @Column(name = "provider_id")
+ private long providerId;
+
+ @Column(name = "name")
+ private String name;
+
+ @Encrypt
+ @Column(name = "value")
+ private String value;
+
+ public BRProviderDetailVO() {
+ }
+
+ public BRProviderDetailVO(long providerId, String name, String value) {
+ this.providerId = providerId;
+ this.name = name;
+ this.value = value;
+ }
+
+ public long getProviderId() {
+ return providerId;
+ }
+
+ public long getResourceId() {
+ return providerId;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ @Override
+ public long getId() {
+ return id;
+ }
+}
\ No newline at end of file
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupRecoveryProviderVO.java b/engine/schema/src/main/java/org/apache/cloudstack/br/BRProviderVO.java
similarity index 78%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupRecoveryProviderVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/br/BRProviderVO.java
index e93d95a10dd..9ac1fc905dc 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupRecoveryProviderVO.java
+++ b/engine/schema/src/main/java/org/apache/cloudstack/br/BRProviderVO.java
@@ -14,10 +14,9 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.impl;
+package org.apache.cloudstack.br;
-import org.apache.cloudstack.api.Identity;
-import org.apache.cloudstack.api.InternalIdentity;
+import org.apache.cloudstack.framework.br.BRProvider;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
@@ -28,18 +27,17 @@ import javax.persistence.GenerationType;
import java.util.UUID;
@Entity
-@Table(name = "backup_and_recovery_providers")
-public class BackupRecoveryProviderVO implements InternalIdentity, Identity {
+@Table(name = "br_provider")
+public class BRProviderVO implements BRProvider {
- public BackupRecoveryProviderVO() {
+ public BRProviderVO() {
this.uuid = UUID.randomUUID().toString();
}
- public BackupRecoveryProviderVO(final long hostId, final String name, final long zoneId, final String url, final String provider) {
+ public BRProviderVO(final String name, final long zoneId, final String url, final String provider) {
this();
this.name = name;
this.zoneId = zoneId;
- this.hostId = hostId;
this.provider = provider;
this.url = url;
}
@@ -51,9 +49,6 @@ public class BackupRecoveryProviderVO implements InternalIdentity, Identity {
@Column(name = "uuid")
private String uuid;
- @Column(name = "host_id")
- private long hostId;
-
@Column(name = "name")
private String name;
@@ -83,14 +78,6 @@ public class BackupRecoveryProviderVO implements InternalIdentity, Identity {
this.uuid = uuid;
}
- public long getHostId() {
- return hostId;
- }
-
- public void setHostId(long hostId) {
- this.hostId = hostId;
- }
-
public String getName() {
return name;
}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/dao/BackupPoliciesDao.java b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRPoliciesDao.java
similarity index 76%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/dao/BackupPoliciesDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRPoliciesDao.java
index 7f6421e4f79..cf3b06d3cb1 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/dao/BackupPoliciesDao.java
+++ b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRPoliciesDao.java
@@ -15,14 +15,15 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.dao;
+package org.apache.cloudstack.br.dao;
import com.cloud.utils.db.GenericDao;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupPolicyVO;
+import org.apache.cloudstack.br.BRPolicyVO;
import java.util.List;
-public interface BackupPoliciesDao extends GenericDao {
+public interface BRPoliciesDao extends GenericDao {
- List listByProvider(long providerId);
+ List listByProvider(long providerId);
+ void removeByProvider(long providerId);
}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupPoliciesDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRPoliciesDaoImpl.java
similarity index 69%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupPoliciesDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRPoliciesDaoImpl.java
index 624f6888299..03b310f002d 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupPoliciesDaoImpl.java
+++ b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRPoliciesDaoImpl.java
@@ -15,23 +15,23 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.impl;
+package org.apache.cloudstack.br.dao;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
-import org.apache.cloudstack.framework.backuprecovery.dao.BackupPoliciesDao;
+import org.apache.cloudstack.br.BRPolicyVO;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.List;
@Component
-public class BackupPoliciesDaoImpl extends GenericDaoBase implements BackupPoliciesDao {
+public class BRPoliciesDaoImpl extends GenericDaoBase implements BRPoliciesDao {
- protected SearchBuilder backupPoliciesSearch;
+ protected SearchBuilder backupPoliciesSearch;
- public BackupPoliciesDaoImpl() {
+ public BRPoliciesDaoImpl() {
}
@PostConstruct
@@ -42,9 +42,18 @@ public class BackupPoliciesDaoImpl extends GenericDaoBase
}
@Override
- public List listByProvider(long providerId) {
- SearchCriteria sc = backupPoliciesSearch.create();
+ public List listByProvider(long providerId) {
+ SearchCriteria sc = backupPoliciesSearch.create();
sc.setParameters("provider", providerId);
return listBy(sc);
}
+
+ @Override
+ public void removeByProvider(long providerId) {
+ SearchCriteria sc = backupPoliciesSearch.create();
+ sc.setParameters("provider", providerId);
+ expunge(sc);
+ }
+
+
}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/StartupBackupRecoveryProviderCommand.java b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDao.java
similarity index 70%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/StartupBackupRecoveryProviderCommand.java
rename to engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDao.java
index a7376f63e06..6e339585e07 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/StartupBackupRecoveryProviderCommand.java
+++ b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDao.java
@@ -14,15 +14,15 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
+package org.apache.cloudstack.br.dao;
-package org.apache.cloudstack.framework.backuprecovery.agent.api;
+import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.br.BRProviderVO;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.host.Host;
+import java.util.List;
-public class StartupBackupRecoveryProviderCommand extends StartupCommand {
+public interface BRProviderDao extends GenericDao {
- public StartupBackupRecoveryProviderCommand() {
- super(Host.Type.BackupRecovery);
- }
+ List listByZone(long zoneId);
+ List listByZoneAndProvider(long zoneId, String provider);
}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupRecoveryProviderDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDaoImpl.java
similarity index 56%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupRecoveryProviderDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDaoImpl.java
index c1e3c207aec..abfe34dbc58 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupRecoveryProviderDaoImpl.java
+++ b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDaoImpl.java
@@ -14,43 +14,43 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.impl;
+package org.apache.cloudstack.br.dao;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
-import org.apache.cloudstack.framework.backuprecovery.dao.BackupRecoveryProviderDao;
+import org.apache.cloudstack.br.BRProviderVO;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.List;
@Component
-public class BackupRecoveryProviderDaoImpl extends GenericDaoBase implements BackupRecoveryProviderDao {
+public class BRProviderDaoImpl extends GenericDaoBase implements BRProviderDao {
- protected SearchBuilder backupProviderSearch;
+ protected SearchBuilder brProviderSearch;
- public BackupRecoveryProviderDaoImpl() {
+ public BRProviderDaoImpl() {
}
@PostConstruct
protected void init() {
- backupProviderSearch = createSearchBuilder();
- backupProviderSearch.and("zoneid", backupProviderSearch.entity().getZoneId(), SearchCriteria.Op.EQ);
- backupProviderSearch.and("provider", backupProviderSearch.entity().getProviderName(), SearchCriteria.Op.EQ);
- backupProviderSearch.done();
+ brProviderSearch = createSearchBuilder();
+ brProviderSearch.and("zoneid", brProviderSearch.entity().getZoneId(), SearchCriteria.Op.EQ);
+ brProviderSearch.and("provider", brProviderSearch.entity().getProviderName(), SearchCriteria.Op.EQ);
+ brProviderSearch.done();
}
@Override
- public List listByZone(long zoneId) {
- SearchCriteria sc = backupProviderSearch.create();
+ public List listByZone(long zoneId) {
+ SearchCriteria sc = brProviderSearch.create();
sc.setParameters("zoneid", zoneId);
return listBy(sc);
}
@Override
- public List listByZoneAndProvider(long zoneId, String provider) {
- SearchCriteria sc = backupProviderSearch.create();
+ public List listByZoneAndProvider(long zoneId, String provider) {
+ SearchCriteria sc = brProviderSearch.create();
sc.setParameters("zoneid", zoneId);
sc.setParameters("provider", provider);
return listBy(sc);
diff --git a/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDetailsDao.java
new file mode 100644
index 00000000000..7129f52c04c
--- /dev/null
+++ b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDetailsDao.java
@@ -0,0 +1,12 @@
+package org.apache.cloudstack.br.dao;
+
+import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.br.BRProviderDetailVO;
+
+import java.util.List;
+
+public interface BRProviderDetailsDao extends GenericDao {
+
+ void addDetails(List details);
+ void removeDetails(long providerId);
+}
diff --git a/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDetailsDaoImpl.java
new file mode 100644
index 00000000000..01b9545db90
--- /dev/null
+++ b/engine/schema/src/main/java/org/apache/cloudstack/br/dao/BRProviderDetailsDaoImpl.java
@@ -0,0 +1,53 @@
+// 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.br.dao;
+
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import org.apache.cloudstack.br.BRProviderDetailVO;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+
+public class BRProviderDetailsDaoImpl extends GenericDaoBase implements BRProviderDetailsDao {
+
+ protected SearchBuilder detailsSearch;
+
+ @PostConstruct
+ protected void init() {
+ detailsSearch = createSearchBuilder();
+ detailsSearch.and("provider", detailsSearch.entity().getProviderId(), SearchCriteria.Op.EQ);
+ detailsSearch.done();
+ }
+
+
+ @Override
+ public void addDetails(List details) {
+ for (BRProviderDetailVO detail : details) {
+ persist(detail);
+ }
+ }
+
+ @Override
+ public void removeDetails(long providerId) {
+ SearchCriteria sc = detailsSearch.create();
+ sc.setParameters("provider", providerId);
+ remove(sc);
+ }
+}
diff --git a/engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml b/engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
index 84c27583925..899cd07ae2e 100644
--- a/engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
+++ b/engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
@@ -356,4 +356,7 @@
+
+
+
diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql b/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql
index aaefbd03b32..7d4af6e5615 100644
--- a/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql
@@ -36,22 +36,30 @@ INSERT INTO `cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`,
-- Backup and Recovery
-CREATE TABLE IF NOT EXISTS `cloud`.`backup_and_recovery_providers` (
- `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+CREATE TABLE IF NOT EXISTS `cloud`.`br_provider` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT,
`uuid` varchar(40),
`name` varchar(255) COMMENT 'name for the backup and recovery provider',
`url` varchar(255) DEFAULT NULL COMMENT 'the url of the backup and recovery provider',
`zone_id` bigint unsigned NOT NULL COMMENT 'foreign key to zone id',
- `host_id` bigint(20) unsigned NOT NULL COMMENT 'host id coresponding to the backup and recovery provider',
`provider` varchar(255) DEFAULT NULL COMMENT 'the backup and recovery provider',
PRIMARY KEY (`id`),
UNIQUE KEY `uuid` (`uuid`),
- KEY `fk_backup_and_recovery_providers__host_id` (`host_id`),
- CONSTRAINT `fk_backup_and_recovery_providers__host_id` FOREIGN KEY (`host_id`) REFERENCES `host` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_backup_and_recovery_providers__zone_id` FOREIGN KEY (`zone_id`) REFERENCES `data_center`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-CREATE TABLE IF NOT EXISTS `cloud`.`backup_policies` (
+CREATE TABLE IF NOT EXISTS `cloud`.`br_provider_details` (
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+ `provider_id` bigint(20) unsigned NOT NULL COMMENT 'backup and recovery provider id',
+ `name` varchar(255) NOT NULL,
+ `value` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_provider_id_name` (`provider_id`,`name`),
+ KEY `fk_br_provider_details__provider_id` (`provider_id`),
+ CONSTRAINT `fk_br_provider_details__provider_id` FOREIGN KEY (`provider_id`) REFERENCES `br_provider` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=496 DEFAULT CHARSET=utf8;
+
+CREATE TABLE IF NOT EXISTS `cloud`.`br_policies` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`uuid` varchar(40) NOT NULL,
`provider_id` bigint(20) unsigned NOT NULL COMMENT 'backup and recovery provider id',
@@ -59,5 +67,5 @@ CREATE TABLE IF NOT EXISTS `cloud`.`backup_policies` (
`policy_uuid` varchar(40) NOT NULL COMMENT 'backup policy ID on provider side',
PRIMARY KEY (`id`),
UNIQUE KEY `uuid` (`uuid`),
- CONSTRAINT `fk_backup_polocies__provider_id` FOREIGN KEY (`provider_id`) REFERENCES `backup_and_recovery_providers` (`id`) ON DELETE CASCADE
+ CONSTRAINT `fk_br_policies__provider_id` FOREIGN KEY (`provider_id`) REFERENCES `br_provider` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/framework/backup-and-recovery/pom.xml b/framework/backup-and-recovery/pom.xml
index 4edeb358361..3bef73590fe 100644
--- a/framework/backup-and-recovery/pom.xml
+++ b/framework/backup-and-recovery/pom.xml
@@ -28,33 +28,5 @@
../pom.xml
-
- org.apache.cloudstack
- cloud-api
- ${project.version}
-
-
- org.apache.cloudstack
- cloud-core
- ${project.version}
-
-
- org.apache.cloudstack
- cloud-engine-components-api
- 4.12.0.0-SNAPSHOT
- compile
-
-
- org.apache.cloudstack
- cloud-server
- 4.12.0.0-SNAPSHOT
- compile
-
-
- org.apache.cloudstack
- cloud-server
- 4.12.0.0-SNAPSHOT
- compile
-
\ No newline at end of file
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/BackupRecoveryManager.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/BackupRecoveryManager.java
deleted file mode 100644
index 790bcc5c636..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/BackupRecoveryManager.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// 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.framework.backuprecovery;
-
-import com.cloud.utils.component.PluggableService;
-import org.apache.cloudstack.framework.config.Configurable;
-
-/**
- * Backup and Recover Manager Interface
- */
-public interface BackupRecoveryManager extends BackupRecoveryService, BackupRecoveryProvider, Configurable, PluggableService {
-
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/BackupRecoveryProvider.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/BackupRecoveryProvider.java
deleted file mode 100644
index c7a4fbb24f8..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/BackupRecoveryProvider.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// 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.framework.backuprecovery;
-
-import com.cloud.exception.AgentUnavailableException;
-import com.cloud.exception.OperationTimedoutException;
-import com.cloud.utils.component.Adapter;
-import org.apache.cloudstack.framework.backuprecovery.api.AddBackupRecoveryPolicyCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.AssignBackupPolicyCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.ListBackupRecoveryPoliciesCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.ListBackupRecoveryProviderPoliciesCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderPolicyResponse;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupPolicyVO;
-
-import java.util.List;
-
-/**
- * Backup and Recovery Provider
- */
-public interface BackupRecoveryProvider extends Adapter {
-
- /**
- * List existing Backup Policies on the provider
- */
- List listBackupPolicies(ListBackupRecoveryProviderPoliciesCmd cmd) throws AgentUnavailableException, OperationTimedoutException;
-
- /**
- * List backup policies mapped to provider policies
- */
- List listBackupPolicies(ListBackupRecoveryPoliciesCmd cmd);
-
- /**
- * Add a Backup Policy by mapping it to a policy on the provider
- */
- BackupPolicyVO addBackupPolicy(AddBackupRecoveryPolicyCmd cmd) throws AgentUnavailableException, OperationTimedoutException;
-
- /**
- * Assign a VM to an existing backup policy
- */
- boolean assignVMToBackupPolicy(AssignBackupPolicyCmd cmd) throws AgentUnavailableException, OperationTimedoutException;
-
- void restoreVMFromBackup();
- void restoreAndAttachVolumeToVM();
-
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/BackupRecoveryService.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/BackupRecoveryService.java
deleted file mode 100644
index 5e91684cab7..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/BackupRecoveryService.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// 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.framework.backuprecovery;
-
-import org.apache.cloudstack.framework.backuprecovery.api.AddBackupRecoveryProviderCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.DeleteBackupRecoveryProviderCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.ListBackupRecoveryProvidersCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupPolicyResponse;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderResponse;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupPolicyVO;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupRecoveryProviderVO;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.List;
-
-public interface BackupRecoveryService {
-
- /**
- * Add a new Backup and Recovery provider
- */
- BackupRecoveryProviderVO addBackupRecoveryProvider(AddBackupRecoveryProviderCmd cmd) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException;
-
- /**
- * Delete existing Backup and Recovery provider
- */
- boolean deleteBackupRecoveryProvider(DeleteBackupRecoveryProviderCmd cmd);
-
- /**
- * List existing Backup and Recovery providers
- * @param cmd
- * @return
- */
- List listBackupRecoveryProviders(ListBackupRecoveryProvidersCmd cmd);
-
- /**
- * Generate a response from the Backup and Recovery Provider VO
- */
- BackupRecoveryProviderResponse createBackupRecoveryProviderResponse(BackupRecoveryProviderVO backupRecoveryProviderVO);
-
- /**
- * Generate a response from the Backup Policy VO
- */
- BackupPolicyResponse createBackupPolicyResponse(BackupPolicyVO policyVO);
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/AssignVMToBackupPolicyAnswer.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/AssignVMToBackupPolicyAnswer.java
deleted file mode 100644
index 95eec6f142a..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/AssignVMToBackupPolicyAnswer.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Answer;
-
-public class AssignVMToBackupPolicyAnswer extends Answer {
-
- public AssignVMToBackupPolicyAnswer(final boolean result) {
- super(null);
- this.result = result;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/AssignVMToBackupPolicyCommand.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/AssignVMToBackupPolicyCommand.java
deleted file mode 100644
index f25fbac4316..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/AssignVMToBackupPolicyCommand.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Command;
-
-public class AssignVMToBackupPolicyCommand extends Command {
-
- private long vmId;
- private String vmUuid;
- private String backupPolicyUuid;
-
- public AssignVMToBackupPolicyCommand(final long vmId, final String vmUuid, final String backupPolicyUuid) {
- this.vmId = vmId;
- this.vmUuid = vmUuid;
- this.backupPolicyUuid = backupPolicyUuid;
- }
-
- public long getVmId() {
- return vmId;
- }
-
- public String getVmUuid() {
- return vmUuid;
- }
-
- public String getBackupPolicyUuid() {
- return backupPolicyUuid;
- }
-
- @Override
- public boolean executeInSequence() {
- return false;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/CheckBackupPolicyAnswer.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/CheckBackupPolicyAnswer.java
deleted file mode 100644
index bda887c710f..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/CheckBackupPolicyAnswer.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Answer;
-
-public class CheckBackupPolicyAnswer extends Answer {
-
- public CheckBackupPolicyAnswer(final boolean result) {
- super(null);
- this.result = result;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/CheckBackupPolicyCommand.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/CheckBackupPolicyCommand.java
deleted file mode 100644
index 44138358fdf..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/CheckBackupPolicyCommand.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Command;
-
-public class CheckBackupPolicyCommand extends Command {
-
- private String policyUuid;
-
- public CheckBackupPolicyCommand(final String policyUuid) {
- this.policyUuid = policyUuid;
- }
-
- public String getPolicyUuid() {
- return policyUuid;
- }
-
- @Override
- public boolean executeInSequence() {
- return false;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ImportBackupPoliciesAnswer.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ImportBackupPoliciesAnswer.java
deleted file mode 100644
index aee63466708..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ImportBackupPoliciesAnswer.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Answer;
-
-import java.util.List;
-
-public class ImportBackupPoliciesAnswer extends Answer {
-
- private List backupPolicies;
-
- public ImportBackupPoliciesAnswer(final boolean result, final List backupPolicies) {
- super(null);
- this.result = result;
- this.backupPolicies = backupPolicies;
- }
-
- public List getBackupPolicies() {
- return backupPolicies;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupPoliciesAnswer.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupPoliciesAnswer.java
deleted file mode 100644
index 7e958b56a4e..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupPoliciesAnswer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Answer;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.to.BackupPolicyTO;
-
-import java.util.List;
-
-public class ListBackupPoliciesAnswer extends Answer {
-
- private List policies;
-
- public ListBackupPoliciesAnswer(final boolean result, final List policies) {
- super(null);
- this.result = result;
- this.policies = policies;
- }
-
- public List getPolicies() {
- return policies;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupPoliciesCommand.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupPoliciesCommand.java
deleted file mode 100644
index 5efc7b1d021..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupPoliciesCommand.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Command;
-
-public class ListBackupPoliciesCommand extends Command {
-
- private String zoneUuid;
-
- @Override
- public boolean executeInSequence() {
- return false;
- }
-
- public ListBackupPoliciesCommand(String zoneUuid) {
- this.zoneUuid = zoneUuid;
- }
-
- public String getZoneUuid() {
- return zoneUuid;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupsAnswer.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupsAnswer.java
deleted file mode 100644
index a03f8bb11de..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupsAnswer.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Answer;
-
-import java.util.List;
-
-public class ListBackupsAnswer extends Answer {
-
- private List backups;
-
- public ListBackupsAnswer(final boolean result, final List backups) {
- super(null);
- this.result = result;
- this.backups = backups;
- }
-
- public List getBackups() {
- return backups;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupsCommand.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupsCommand.java
deleted file mode 100644
index cc37c00dfbc..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ListBackupsCommand.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Command;
-
-public class ListBackupsCommand extends Command {
-
- private Long vmId;
-
- public ListBackupsCommand(final Long vmId) {
- this.vmId = vmId;
- }
-
- public Long getVmId() {
- return vmId;
- }
-
- @Override
- public boolean executeInSequence() {
- return false;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/RestoreVMFromBackupAnswer.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/RestoreVMFromBackupAnswer.java
deleted file mode 100644
index 6a933706300..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/RestoreVMFromBackupAnswer.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Answer;
-
-public class RestoreVMFromBackupAnswer extends Answer {
-
- public RestoreVMFromBackupAnswer(final boolean result) {
- super(null);
- this.result = result;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/RestoreVMFromBackupCommand.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/RestoreVMFromBackupCommand.java
deleted file mode 100644
index 67eaac12b6d..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/RestoreVMFromBackupCommand.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.framework.backuprecovery.agent.api;
-
-import com.cloud.agent.api.Command;
-
-public class RestoreVMFromBackupCommand extends Command {
-
- private long vmId;
- private String vmUuid;
- private long backupId;
- private String backupUuid;
-
- public RestoreVMFromBackupCommand(final long vmId, final String vmUuid, final long backupId, final String backupUuid) {
- this.vmId = vmId;
- this.vmUuid = vmUuid;
- this.backupId = backupId;
- this.backupUuid = backupUuid;
- }
-
- public long getVmId() {
- return vmId;
- }
-
- public String getVmUuid() {
- return vmUuid;
- }
-
- public long getBackupId() {
- return backupId;
- }
-
- public String getBackupUuid() {
- return backupUuid;
- }
-
- @Override
- public boolean executeInSequence() {
- return false;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/response/BackupRecoveryProviderPolicyResponse.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/response/BackupRecoveryProviderPolicyResponse.java
deleted file mode 100644
index 1c3813cb245..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/api/response/BackupRecoveryProviderPolicyResponse.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// 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.framework.backuprecovery.api.response;
-
-import com.cloud.serializer.Param;
-import com.google.gson.annotations.SerializedName;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseResponse;
-
-/**
- * Response for a Backup Policy on the provider
- */
-public class BackupRecoveryProviderPolicyResponse extends BaseResponse {
-
- @SerializedName(ApiConstants.BACKUP_POLICY_ID)
- @Param(description = "policy id on the provider side")
- private String policyId;
-
- @SerializedName(ApiConstants.BACKUP_POLICY_NAME)
- @Param(description = "name for the backup policy on the provider side")
- private String name;
-
- @SerializedName(ApiConstants.DESCRIPTION)
- @Param(description = "description for the backup policy on the provider side")
- private String description;
-
- public void setPolicyId(String policyId) {
- this.policyId = policyId;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setDescription(String desc) {
- this.description = desc;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/dao/BackupRecoveryProviderDao.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/dao/BackupRecoveryProviderDao.java
deleted file mode 100644
index 2eb70ee1b38..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/dao/BackupRecoveryProviderDao.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// 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.framework.backuprecovery.dao;
-
-import com.cloud.utils.db.GenericDao;
-import org.apache.cloudstack.framework.backuprecovery.impl.BackupRecoveryProviderVO;
-
-import java.util.List;
-
-public interface BackupRecoveryProviderDao extends GenericDao {
-
- List listByZone(long zoneId);
- List listByZoneAndProvider(long zoneId, String provider);
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/element/BackupRecoveryElement.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/element/BackupRecoveryElement.java
deleted file mode 100644
index 8d089a95547..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/element/BackupRecoveryElement.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.framework.backuprecovery.element;
-
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.host.Host;
-import com.cloud.host.HostVO;
-import com.cloud.resource.ResourceManager;
-import com.cloud.resource.ResourceStateAdapter;
-import com.cloud.resource.ServerResource;
-import com.cloud.resource.UnableDeleteHostException;
-import com.cloud.utils.component.AdapterBase;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.StartupBackupRecoveryProviderCommand;
-import org.apache.cloudstack.framework.backuprecovery.resource.BackupRecoveryResource;
-
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Backup and Recovery Element class.
- * To register a Backup and Recovery element, just extend this class
- */
-public class BackupRecoveryElement extends AdapterBase implements ResourceStateAdapter, BackupRecoveryElementService {
-
- @Inject
- ResourceManager resourceManager;
-
- @Override
- public boolean configure(String name, Map params) throws ConfigurationException {
- super.configure(name, params);
- resourceManager.registerResourceStateAdapter(name, this);
- return true;
- }
-
- @Override
- public HostVO createHostVOForConnectedAgent(HostVO host, StartupCommand[] cmd) {
- return null;
- }
-
- @Override
- public HostVO createHostVOForDirectConnectAgent(HostVO host, StartupCommand[] startup, ServerResource resource, Map details, List hostTags) {
- if (!(startup[0] instanceof StartupBackupRecoveryProviderCommand)) {
- return null;
- }
- host.setType(Host.Type.BackupRecovery);
- return host;
- }
-
- @Override
- public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException {
- if (!(host.getType() == Host.Type.BackupRecovery)) {
- return null;
- }
- return new DeleteHostAnswer(true);
- }
-
- @Override
- public BackupRecoveryResource createNewResource() {
- return new BackupRecoveryResource();
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/helper/BackupRecoveryHelper.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/helper/BackupRecoveryHelper.java
deleted file mode 100644
index 458908ac7cf..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/helper/BackupRecoveryHelper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// 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.framework.backuprecovery.helper;
-
-import org.apache.cloudstack.framework.backuprecovery.element.BackupRecoveryElement;
-import org.apache.cloudstack.framework.backuprecovery.resource.BackupRecoveryResource;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class BackupRecoveryHelper {
-
- /**
- * Backup and Recovery Providers Helper
- */
-
- private static Map supportedProviders = new HashMap();
-
- public static boolean isProviderSupported(String providerName) {
- return supportedProviders.containsKey(providerName);
- }
-
- public static void addProvider(String providerName, BackupRecoveryElement element) {
- supportedProviders.put(providerName, element);
- }
-
- public static BackupRecoveryResource getResource(String name) {
- if (supportedProviders.containsKey(name)) {
- BackupRecoveryElement element = supportedProviders.get(name);
- return element.createNewResource();
- }
- return null;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupRecoveryManagerImpl.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupRecoveryManagerImpl.java
deleted file mode 100644
index 41a74cd592f..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/impl/BackupRecoveryManagerImpl.java
+++ /dev/null
@@ -1,323 +0,0 @@
-// 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.framework.backuprecovery.impl;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.exception.AgentUnavailableException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.OperationTimedoutException;
-import com.cloud.host.DetailVO;
-import com.cloud.host.Host;
-import com.cloud.host.HostVO;
-import com.cloud.host.dao.HostDao;
-import com.cloud.host.dao.HostDetailsDao;
-import com.cloud.resource.ResourceManager;
-import com.cloud.resource.ResourceState;
-import com.cloud.utils.component.ManagerBase;
-import com.cloud.utils.db.Transaction;
-import com.cloud.utils.db.TransactionCallback;
-import com.cloud.utils.db.TransactionStatus;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.VMInstanceVO;
-import com.cloud.vm.dao.VMInstanceDao;
-import org.apache.cloudstack.framework.backuprecovery.BackupRecoveryManager;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.AssignVMToBackupPolicyAnswer;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.AssignVMToBackupPolicyCommand;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.CheckBackupPolicyAnswer;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.CheckBackupPolicyCommand;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.ListBackupPoliciesAnswer;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.ListBackupPoliciesCommand;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.to.BackupPolicyTO;
-import org.apache.cloudstack.framework.backuprecovery.api.AddBackupRecoveryPolicyCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.AddBackupRecoveryProviderCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.AssignBackupPolicyCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.DeleteBackupRecoveryProviderCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.ListBackupRecoveryPoliciesCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.ListBackupRecoveryProviderPoliciesCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.ListBackupRecoveryProvidersCmd;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupPolicyResponse;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderPolicyResponse;
-import org.apache.cloudstack.framework.backuprecovery.api.response.BackupRecoveryProviderResponse;
-import org.apache.cloudstack.framework.backuprecovery.dao.BackupPoliciesDao;
-import org.apache.cloudstack.framework.backuprecovery.dao.BackupRecoveryProviderDao;
-import org.apache.cloudstack.framework.backuprecovery.helper.BackupRecoveryHelper;
-import org.apache.cloudstack.framework.backuprecovery.resource.BackupRecoveryResource;
-import org.apache.cloudstack.framework.config.ConfigKey;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-import java.lang.reflect.InvocationTargetException;
-import java.security.InvalidParameterException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.ArrayList;
-
-public class BackupRecoveryManagerImpl extends ManagerBase implements BackupRecoveryManager {
-
- @Inject
- BackupRecoveryProviderDao backupRecoveryProviderDao;
- @Inject
- HostDetailsDao hostDetailsDao;
- @Inject
- ResourceManager resourceManager;
- @Inject
- HostDao hostDao;
- @Inject
- DataCenterDao dataCenterDao;
- @Inject
- BackupPoliciesDao backupPoliciesDao;
- @Inject
- AgentManager agentManager;
- @Inject
- VMInstanceDao vmInstanceDao;
-
- private static final Logger s_logger = Logger.getLogger(BackupRecoveryManagerImpl.class);
-
- @Override
- public boolean configure(String name, Map params) throws ConfigurationException {
- super.configure(name, params);
- return true;
- }
-
- @Override
- public BackupRecoveryProviderVO addBackupRecoveryProvider(AddBackupRecoveryProviderCmd cmd) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
- String name = cmd.getName();
- String url = cmd.getUrl();
- String username = cmd.getUsername();
- String password = cmd.getPassword();
- Long zoneId = cmd.getZoneId();
- String providerName = cmd.getProvider();
-
- if (!BackupRecoveryHelper.isProviderSupported(providerName)) {
- throw new InvalidParameterException("Unsopported provider: " + providerName);
- }
-
- s_logger.debug("Registering a new Backup and Recovery provider on zone: " + zoneId + " - url: " + url + " - name: " + name
- + " - provider: " + providerName);
- BackupRecoveryResource resource = BackupRecoveryHelper.getResource(providerName);
-
- Map params = new HashMap();
- params.put("guid", UUID.randomUUID().toString());
- params.put("zoneId", String.valueOf(zoneId));
- params.put("name", name + " - " + url);
- //params.put("ip", cmd.getHost());
- params.put("adminuser", username);
- params.put("adminpass", password);
- params.put("url", url);
-
- Map hostdetails = new HashMap();
- hostdetails.putAll(params);
- try {
- resource.configure(name, hostdetails);
- } catch (ConfigurationException e) {
- throw new CloudRuntimeException(e.getMessage());
- }
-
- final Host host = resourceManager.addHost(zoneId, resource, Host.Type.BackupRecovery, params);
- if (host != null) {
- return Transaction.execute(new TransactionCallback() {
- @Override
- public BackupRecoveryProviderVO doInTransaction(TransactionStatus status) {
- BackupRecoveryProviderVO providerVO = new BackupRecoveryProviderVO(host.getId(), name, zoneId, url, providerName);
- providerVO = backupRecoveryProviderDao.persist(providerVO);
-
- DetailVO detail = new DetailVO(host.getId(), "providerid", String.valueOf(providerVO.getId()));
- hostDetailsDao.persist(detail);
-
- return providerVO;
- }
- });
- } else {
- throw new CloudRuntimeException("Failed to add the Backup and Recovery provider " + providerName + " - " + name);
- }
- }
-
- @Override
- public boolean deleteBackupRecoveryProvider(DeleteBackupRecoveryProviderCmd cmd) {
- Long providerId = cmd.getProviderId();
- BackupRecoveryProviderVO providerVO = backupRecoveryProviderDao.findById(providerId);
- if (providerVO == null) {
- throw new InvalidParameterValueException("Could not find a Backup and Recovery provider with id: " + providerId);
- }
-
- HostVO host = hostDao.findById(providerVO.getHostId());
-
- host.setResourceState(ResourceState.Maintenance);
- hostDao.update(host.getId(), host);
- resourceManager.deleteHost(host.getId(), false, false);
-
- backupRecoveryProviderDao.remove(providerId);
- return true;
- }
-
- @Override
- public List listBackupRecoveryProviders(ListBackupRecoveryProvidersCmd cmd) {
- Long zoneId = cmd.getZoneId();
- String providerName = cmd.getProvider();
-
- if (zoneId == null) {
- throw new InvalidParameterException("Must specify a zone id");
- }
-
- if (StringUtils.isNotBlank(providerName)) {
- if (!BackupRecoveryHelper.isProviderSupported(providerName)) {
- throw new InvalidParameterException("Unsopported provider: " + providerName);
- }
- backupRecoveryProviderDao.listByZoneAndProvider(zoneId, providerName);
- }
- return backupRecoveryProviderDao.listByZone(zoneId);
- }
-
- @Override
- public BackupRecoveryProviderResponse createBackupRecoveryProviderResponse(BackupRecoveryProviderVO vo) {
- HostVO host = hostDao.findById(vo.getHostId());
- DataCenterVO dc = dataCenterDao.findById(vo.getZoneId());
-
- BackupRecoveryProviderResponse response = new BackupRecoveryProviderResponse();
- response.setHostId(host.getUuid());
- response.setId(vo.getUuid());
- response.setName(vo.getName());
- response.setProviderName(vo.getProviderName());
- response.setZoneId(dc.getUuid());
- return response;
- }
-
- @Override
- public BackupPolicyResponse createBackupPolicyResponse(BackupPolicyVO policyVO) {
- BackupRecoveryProviderVO provider = backupRecoveryProviderDao.findById(policyVO.getProviderId());
-
- BackupPolicyResponse response = new BackupPolicyResponse();
- response.setId(policyVO.getUuid());
- response.setPolicyId(policyVO.getPolicyUuid());
- response.setName(policyVO.getName());
- response.setProviderId(provider.getUuid());
- return response;
- }
-
- @Override
- public List> getCommands() {
- final List> cmdList = new ArrayList>();
- cmdList.add(AddBackupRecoveryProviderCmd.class);
- cmdList.add(DeleteBackupRecoveryProviderCmd.class);
- cmdList.add(ListBackupRecoveryProvidersCmd.class);
- cmdList.add(ListBackupRecoveryPoliciesCmd.class);
- cmdList.add(ListBackupRecoveryProviderPoliciesCmd.class);
- cmdList.add(AddBackupRecoveryPolicyCmd.class);
- return cmdList;
- }
-
- @Override
- public String getConfigComponentName() {
- return null;
- }
-
- @Override
- public ConfigKey>[] getConfigKeys() {
- return new ConfigKey[0];
- }
-
- @Override
- public List listBackupPolicies(ListBackupRecoveryProviderPoliciesCmd cmd) throws AgentUnavailableException, OperationTimedoutException {
- Long providerId = cmd.getProviderId();
- BackupRecoveryProviderVO providerVO = backupRecoveryProviderDao.findById(providerId);
- if (providerVO == null) {
- throw new InvalidParameterValueException("Could not find a Backup and Recovery provider with id: " + cmd.getProviderId());
- }
-
- if (!BackupRecoveryHelper.isProviderSupported(providerVO.getProviderName())) {
- throw new InvalidParameterValueException("Provider: " + providerVO.getProviderName() + " is not supported");
- }
-
- DataCenterVO zone = dataCenterDao.findById(providerVO.getZoneId());
- ListBackupPoliciesCommand command = new ListBackupPoliciesCommand(zone.getUuid());
- ListBackupPoliciesAnswer answer = (ListBackupPoliciesAnswer) agentManager.send(providerVO.getHostId(), command);
-
- if (answer != null && answer.getResult()) {
- return createBackupRecoveryProviderPoliciesResponse(answer.getPolicies());
- }
- return null;
- }
-
- private List createBackupRecoveryProviderPoliciesResponse(List policies) {
- List list = new ArrayList<>();
- if (CollectionUtils.isNotEmpty(policies)) {
- for (BackupPolicyTO policy : policies) {
- BackupRecoveryProviderPolicyResponse p = new BackupRecoveryProviderPolicyResponse();
- p.setName(policy.getName());
- p.setPolicyId(policy.getId());
- p.setDescription(policy.getDescription());
- list.add(p);
- }
- }
- return list;
- }
-
- @Override
- public List listBackupPolicies(ListBackupRecoveryPoliciesCmd cmd) {
- return backupPoliciesDao.listByProvider(cmd.getProviderId());
- }
-
- @Override
- public BackupPolicyVO addBackupPolicy(AddBackupRecoveryPolicyCmd cmd) throws AgentUnavailableException, OperationTimedoutException {
- String policyId = cmd.getPolicyId();
- Long providerId = cmd.getProviderId();
- String name = cmd.getPolicyName();
-
- BackupRecoveryProviderVO provider = backupRecoveryProviderDao.findById(providerId);
- if (provider == null) {
- throw new InvalidParameterValueException("Could not find a Backup and Recovery provider with id: " + providerId);
- }
-
- CheckBackupPolicyCommand command = new CheckBackupPolicyCommand(policyId);
- CheckBackupPolicyAnswer answer = (CheckBackupPolicyAnswer) agentManager.send(provider.getHostId(), command);
- if (answer == null || !answer.getResult()) {
- throw new InvalidParameterValueException("Could not find a backup policy with id: " + policyId + " on the provider");
- }
- BackupPolicyVO policy = new BackupPolicyVO(providerId, name, policyId);
- return backupPoliciesDao.persist(policy);
- }
-
- @Override
- public boolean assignVMToBackupPolicy(AssignBackupPolicyCmd cmd) throws AgentUnavailableException, OperationTimedoutException {
- String policyId = cmd.getPolicyId();
- Long virtualMachineId = cmd.getVirtualMachineId();
- VMInstanceVO vm = vmInstanceDao.findById(virtualMachineId);
- BackupPolicyVO policy = backupPoliciesDao.findByUuid(policyId);
- BackupRecoveryProviderVO provider = backupRecoveryProviderDao.findById(policy.getProviderId());
-
- AssignVMToBackupPolicyCommand command = new AssignVMToBackupPolicyCommand(virtualMachineId, vm.getUuid(), policyId);
- AssignVMToBackupPolicyAnswer answer = (AssignVMToBackupPolicyAnswer) agentManager.send(provider.getHostId(), command);
- return answer != null && answer.getResult();
- }
-
- @Override
- public void restoreVMFromBackup() {
-
- }
-
- @Override
- public void restoreAndAttachVolumeToVM() {
-
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/resource/BackupRecoveryResource.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/resource/BackupRecoveryResource.java
deleted file mode 100644
index 2c38f0512e7..00000000000
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/resource/BackupRecoveryResource.java
+++ /dev/null
@@ -1,155 +0,0 @@
-// 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.framework.backuprecovery.resource;
-
-import com.cloud.agent.IAgentControl;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.PingCommand;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.host.Host;
-import com.cloud.resource.ServerResource;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.StartupBackupRecoveryProviderCommand;
-import org.apache.commons.collections.MapUtils;
-import org.apache.log4j.Logger;
-
-import javax.naming.ConfigurationException;
-import java.util.Map;
-
-public class BackupRecoveryResource implements ServerResource {
-
- private static final Logger s_logger = Logger.getLogger(BackupRecoveryResource.class);
- private String name;
- private String zoneId;
- private String guid;
-
- @Override
- public boolean configure(String name, Map params) throws ConfigurationException {
- if (MapUtils.isNotEmpty(params)) {
- this.name = (String) params.get("name");
- if (this.name == null) {
- throw new ConfigurationException("Unable to find name");
- }
-
- zoneId = (String) params.get("zoneId");
- if (zoneId == null) {
- throw new ConfigurationException("Unable to find zone");
- }
-
- guid = (String) params.get("guid");
- if (guid == null) {
- throw new ConfigurationException("Unable to find guid");
- }
-
- /*final String ip = (String) params.get("ip");
- if (ip == null) {
- throw new ConfigurationException("Unable to find IP");
- }*/
-
- final String adminuser = (String) params.get("adminuser");
- if (adminuser == null) {
- throw new ConfigurationException("Unable to find admin username");
- }
-
- final String adminpass = (String) params.get("adminpass");
- if (adminpass == null) {
- throw new ConfigurationException("Unable to find admin password");
- }
- }
- return true;
- }
-
- @Override
- public Host.Type getType() {
- return Host.Type.BackupRecovery;
- }
-
- @Override
- public StartupCommand[] initialize() {
- final StartupBackupRecoveryProviderCommand sc = new StartupBackupRecoveryProviderCommand();
- sc.setGuid(guid);
- sc.setName(name);
- sc.setDataCenter(zoneId);
- sc.setPod(null);
- sc.setPrivateIpAddress("");
- sc.setStorageIpAddress("");
- sc.setVersion(BackupRecoveryResource.class.getPackage().getImplementationVersion());
- return new StartupCommand[] { sc };
- }
-
- public PingCommand getCurrentStatus(long id) {
- return new PingCommand(getType(), id);
- }
-
- public Answer executeRequest(Command cmd) {
- s_logger.debug("Received Command: " + cmd.toString());
- Answer answer = new Answer(cmd, true, "response");
- s_logger.debug("Replying with: " + answer.toString());
- return answer;
- }
-
- @Override
- public void disconnected() {
- }
-
- @Override
- public IAgentControl getAgentControl() {
- return null;
- }
-
- @Override
- public void setAgentControl(IAgentControl agentControl) {
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- @Override
- public void setName(String name) {
- }
-
- @Override
- public void setConfigParams(Map params) {
- }
-
- @Override
- public Map getConfigParams() {
- return null;
- }
-
- @Override
- public int getRunLevel() {
- return 0;
- }
-
- @Override
- public void setRunLevel(int level) {
- }
-
- @Override
- public boolean start() {
- return true;
- }
-
- @Override
- public boolean stop() {
- return true;
- }
-}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ImportBackupPoliciesCommand.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRPolicy.java
similarity index 76%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ImportBackupPoliciesCommand.java
rename to framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRPolicy.java
index a907993c29f..f79993069e4 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/agent/api/ImportBackupPoliciesCommand.java
+++ b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRPolicy.java
@@ -17,14 +17,13 @@
* under the License.
*/
-package org.apache.cloudstack.framework.backuprecovery.agent.api;
+package org.apache.cloudstack.framework.br;
-import com.cloud.agent.api.Command;
+public interface BRPolicy {
-public class ImportBackupPoliciesCommand extends Command {
-
- @Override
- public boolean executeInSequence() {
- return false;
- }
+ long getId();
+ String getUuid();
+ String getPolicyUuid();
+ String getName();
+ long getProviderId();
}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRPolicyService.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRPolicyService.java
new file mode 100644
index 00000000000..5812eb52527
--- /dev/null
+++ b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRPolicyService.java
@@ -0,0 +1,19 @@
+package org.apache.cloudstack.framework.br;
+
+import java.util.List;
+
+/**
+ * Backup and Recovery Policies Services
+ */
+public interface BRPolicyService {
+
+ /**
+ * Add a new Backup and Recovery policy
+ */
+ BRPolicy addBRPolicy(String policyId, String policyName, String providerId);
+
+ /**
+ * List Backup policies
+ */
+ List listBRPolicies(String providerId);
+}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRProvider.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRProvider.java
new file mode 100644
index 00000000000..be1f8c344c1
--- /dev/null
+++ b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRProvider.java
@@ -0,0 +1,10 @@
+package org.apache.cloudstack.framework.br;
+
+public interface BRProvider {
+ long getId();
+ String getUuid();
+ String getName();
+ String getUrl();
+ long getZoneId();
+ String getProviderName();
+}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRProviderService.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRProviderService.java
new file mode 100644
index 00000000000..ef5c1c167ac
--- /dev/null
+++ b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRProviderService.java
@@ -0,0 +1,24 @@
+package org.apache.cloudstack.framework.br;
+
+import java.util.List;
+
+/**
+ * Backup and Recovery Provider Services
+ */
+public interface BRProviderService {
+
+ /**
+ * Add a new Backup and Recovery provider
+ */
+ BRProvider addBRProvider(String name, String url, String username, String password, Long zoneId, String providerName);
+
+ /**
+ * List existing Backup and Recovery providers
+ */
+ List listBRProviders();
+
+ /**
+ * Delete existing Backup and Recovery provider
+ */
+ boolean deleteBRProvider(String providerId);
+}
diff --git a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/element/BackupRecoveryElementService.java b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRService.java
similarity index 76%
rename from framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/element/BackupRecoveryElementService.java
rename to framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRService.java
index fcfaaa86094..79cb3f9ec0a 100644
--- a/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/backuprecovery/element/BackupRecoveryElementService.java
+++ b/framework/backup-and-recovery/src/main/java/org/apache/cloudstack/framework/br/BRService.java
@@ -15,11 +15,11 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.cloudstack.framework.backuprecovery.element;
+package org.apache.cloudstack.framework.br;
-import org.apache.cloudstack.framework.backuprecovery.resource.BackupRecoveryResource;
+/**
+ * Backup and Recovery Services
+ */
+public interface BRService extends BRProviderService, BRPolicyService {
-public interface BackupRecoveryElementService {
-
- BackupRecoveryResource createNewResource();
}
diff --git a/plugins/backup-and-recovery/dummy/src/main/java/org/apache/cloudstack/backuprecovery/element/DummyBackupRecoveryElement.java b/plugins/backup-and-recovery/dummy/src/main/java/org/apache/cloudstack/backuprecovery/element/DummyBackupRecoveryElement.java
deleted file mode 100644
index 93f521006bc..00000000000
--- a/plugins/backup-and-recovery/dummy/src/main/java/org/apache/cloudstack/backuprecovery/element/DummyBackupRecoveryElement.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// 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.backuprecovery.element;
-
-import org.apache.cloudstack.backuprecovery.resource.DummyBackupRecoveryResource;
-import org.apache.cloudstack.framework.backuprecovery.element.BackupRecoveryElement;
-import org.apache.cloudstack.framework.backuprecovery.helper.BackupRecoveryHelper;
-import org.apache.cloudstack.framework.backuprecovery.resource.BackupRecoveryResource;
-
-import javax.naming.ConfigurationException;
-import java.util.Map;
-
-public class DummyBackupRecoveryElement extends BackupRecoveryElement {
- @Override
- public boolean configure(String name, Map params) throws ConfigurationException {
- super.configure(name, params);
- BackupRecoveryHelper.addProvider("Dummy", this);
- return true;
- }
-
- @Override
- public BackupRecoveryResource createNewResource() {
- return new DummyBackupRecoveryResource();
- }
-}
diff --git a/plugins/backup-and-recovery/dummy/src/main/java/org/apache/cloudstack/backuprecovery/resource/DummyBackupRecoveryResource.java b/plugins/backup-and-recovery/dummy/src/main/java/org/apache/cloudstack/backuprecovery/resource/DummyBackupRecoveryResource.java
deleted file mode 100644
index d87c5b6c4bf..00000000000
--- a/plugins/backup-and-recovery/dummy/src/main/java/org/apache/cloudstack/backuprecovery/resource/DummyBackupRecoveryResource.java
+++ /dev/null
@@ -1,100 +0,0 @@
-// 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.backuprecovery.resource;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.StartupCommand;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.AssignVMToBackupPolicyAnswer;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.AssignVMToBackupPolicyCommand;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.CheckBackupPolicyAnswer;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.CheckBackupPolicyCommand;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.ListBackupPoliciesAnswer;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.ListBackupPoliciesCommand;
-import org.apache.cloudstack.framework.backuprecovery.agent.api.to.BackupPolicyTO;
-import org.apache.cloudstack.framework.backuprecovery.resource.BackupRecoveryResource;
-import org.apache.log4j.Logger;
-
-import javax.naming.ConfigurationException;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-public class DummyBackupRecoveryResource extends BackupRecoveryResource {
-
- private static final Logger s_logger = Logger.getLogger(DummyBackupRecoveryResource.class);
-
- private BackupPolicyTO policy1 = new BackupPolicyTO("aaaa-aaaa", "Policy A", "Gold policy");
- private BackupPolicyTO policy2 = new BackupPolicyTO("bbbb-bbbb", "Policy B", "Silver policy");
-
- private List policies = Arrays.asList(policy1, policy2);
-
- @Override
- public Answer executeRequest(Command cmd) {
-
- s_logger.debug("Received Command: " + cmd.toString());
- Answer answer = new Answer(cmd, true, "response");
- if (cmd instanceof ListBackupPoliciesCommand) {
- answer = execute((ListBackupPoliciesCommand) cmd);
- } else if (cmd instanceof CheckBackupPolicyCommand) {
- answer = execute((CheckBackupPolicyCommand) cmd);
- } else if (cmd instanceof AssignVMToBackupPolicyCommand) {
- answer = execute((AssignVMToBackupPolicyCommand) cmd);
- }
- s_logger.debug("Replying with: " + answer.toString());
- return answer;
- }
-
- private Answer execute(AssignVMToBackupPolicyCommand cmd) {
- s_logger.debug("Assigning VM " + cmd.getVmUuid() + " to Backup policy: " + cmd.getBackupPolicyUuid());
- return new AssignVMToBackupPolicyAnswer(true);
- }
-
- private Answer execute(CheckBackupPolicyCommand cmd) {
- s_logger.debug("Checking if backup policy " + cmd.getPolicyUuid() + " exists");
- boolean result = false;
- String policyUuid = cmd.getPolicyUuid();
- for (BackupPolicyTO policy: policies) {
- if (policy.getId().equals(policyUuid)) {
- result = true;
- break;
- }
- }
- return new CheckBackupPolicyAnswer(result);
- }
-
- private Answer execute(ListBackupPoliciesCommand cmd) {
- s_logger.debug("Listing existing backup policies");
- return new ListBackupPoliciesAnswer(true, policies);
- }
-
- @Override
- public boolean configure(String name, Map params) throws ConfigurationException {
- super.configure(name, params);
- return true;
- }
-
- @Override
- public StartupCommand[] initialize() {
- return super.initialize();
- }
-
- @Override
- public String getName() {
- return "DummyBackupRecoveryProvider";
- }
-}
diff --git a/plugins/backup-and-recovery/dummy/src/main/java/org/apache/cloudstack/br/DummyBRProvider.java b/plugins/backup-and-recovery/dummy/src/main/java/org/apache/cloudstack/br/DummyBRProvider.java
new file mode 100644
index 00000000000..696bf8b4068
--- /dev/null
+++ b/plugins/backup-and-recovery/dummy/src/main/java/org/apache/cloudstack/br/DummyBRProvider.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.br;
+
+import com.cloud.utils.component.AdapterBase;
+import org.apache.cloudstack.framework.br.BRPolicy;
+import org.apache.log4j.Logger;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+
+public class DummyBRProvider extends AdapterBase implements BRProviderDriver {
+
+ private static final Logger s_logger = Logger.getLogger(DummyBRProvider.class);
+
+ @Override
+ public boolean registerProvider(long zoneId, String name, String url, String username, String password) {
+ s_logger.debug("Registering Dummy Backup and Recovery provider");
+ return true;
+ }
+
+ @Override
+ public List listBackupPolicies(long providerId) {
+ s_logger.debug("Listing Dummy Backup policies");
+ BRPolicy policy1 = new BRPolicyTO(1l, UUID.randomUUID().toString(), "Golden Policy", "aaaa-aaaa", providerId);
+ BRPolicy policy2 = new BRPolicyTO(1l, UUID.randomUUID().toString(), "Silver Policy", "bbbb-bbbb", providerId);
+ return Arrays.asList(policy1, policy2);
+ }
+
+ @Override
+ public boolean policyExists(String policyId, String policyName) {
+ s_logger.debug("Checking if policy " + policyId + " " + policyName + " exists");
+ return true;
+ }
+
+ @Override
+ public boolean assignVMToBackupPolicy(String policyId, String vmId) {
+ s_logger.debug("Assigning VM " + vmId+ " to the policy " + policyId);
+ return true;
+ }
+
+ @Override
+ public boolean unregisterProvider() {
+ s_logger.debug("Unregistering Dummy Backup and Recovery provider");
+ return true;
+ }
+
+ @Override
+ public void restoreVMFromBackup() {
+
+ }
+
+ @Override
+ public void restoreAndAttachVolumeToVM() {
+
+ }
+
+}
diff --git a/plugins/backup-and-recovery/dummy/src/main/resources/META-INF/cloudstack/dummy-backup-recovery/spring-dummy-backup-recovery-context.xml b/plugins/backup-and-recovery/dummy/src/main/resources/META-INF/cloudstack/dummy-backup-recovery/spring-dummy-backup-recovery-context.xml
index c697112d997..b591ef725ed 100644
--- a/plugins/backup-and-recovery/dummy/src/main/resources/META-INF/cloudstack/dummy-backup-recovery/spring-dummy-backup-recovery-context.xml
+++ b/plugins/backup-and-recovery/dummy/src/main/resources/META-INF/cloudstack/dummy-backup-recovery/spring-dummy-backup-recovery-context.xml
@@ -21,8 +21,7 @@
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
>
-
-
-
+
+
\ No newline at end of file
diff --git a/server/pom.xml b/server/pom.xml
index ba8899d6552..bf3de1f3ebf 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -151,6 +151,11 @@
opensaml
${cs.opensaml.version}
+
+ org.apache.cloudstack
+ cloud-framework-backup-and-recovery
+ ${project.version}
+
diff --git a/server/src/main/java/org/apache/cloudstack/br/BRManagerImpl.java b/server/src/main/java/org/apache/cloudstack/br/BRManagerImpl.java
new file mode 100644
index 00000000000..3f20011e9d7
--- /dev/null
+++ b/server/src/main/java/org/apache/cloudstack/br/BRManagerImpl.java
@@ -0,0 +1,260 @@
+// 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.br;
+
+import com.cloud.dc.DataCenterVO;
+import com.cloud.dc.dao.DataCenterDao;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.utils.component.ManagerBase;
+import com.cloud.utils.exception.CloudRuntimeException;
+import org.apache.cloudstack.br.dao.BRProviderDetailsDao;
+import org.apache.cloudstack.framework.br.BRPolicy;
+import org.apache.cloudstack.framework.br.BRProvider;
+import org.apache.cloudstack.api.command.admin.br.policy.AddBRPolicyCmd;
+import org.apache.cloudstack.api.command.admin.br.provider.AddBRProviderCmd;
+import org.apache.cloudstack.api.command.admin.br.provider.DeleteBRProviderCmd;
+import org.apache.cloudstack.api.command.admin.br.policy.ListBRPoliciesCmd;
+import org.apache.cloudstack.api.command.admin.br.provider.ListBRProviderPoliciesCmd;
+import org.apache.cloudstack.api.command.admin.br.provider.ListBRProvidersCmd;
+import org.apache.cloudstack.api.response.BRPolicyResponse;
+import org.apache.cloudstack.api.response.BRProviderResponse;
+import org.apache.cloudstack.br.dao.BRPoliciesDao;
+import org.apache.cloudstack.br.dao.BRProviderDao;
+import org.apache.cloudstack.framework.config.ConfigKey;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+import java.security.InvalidParameterException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.ArrayList;
+
+@Component
+public class BRManagerImpl extends ManagerBase implements BRManager {
+
+ @Inject
+ BRProviderDao brProviderDao;
+ @Inject
+ BRProviderDetailsDao brProviderDetailsDao;
+ @Inject
+ BRPoliciesDao brPoliciesDao;
+ @Inject
+ DataCenterDao dataCenterDao;
+
+ private List brProviders = new ArrayList<>();
+ private Map brProvidersMap = new HashMap<>();
+
+ private static final Logger s_logger = Logger.getLogger(BRManagerImpl.class);
+
+ @Override
+ public boolean configure(String name, Map params) throws ConfigurationException {
+ super.configure(name, params);
+ return true;
+ }
+
+ public BRProviderDriver getBRProvider(String provider) {
+ return brProvidersMap.getOrDefault(provider, null);
+ }
+
+ public BRProviderDriver getBRProviderFromPolicy(String policyId) {
+ BRPolicyVO policy = brPoliciesDao.findByUuid(policyId);
+ BRProviderVO provider = brProviderDao.findById(policy.getProviderId());
+ return getBRProvider(provider.getProviderName());
+ }
+
+ public BRProviderDriver getBRProviderFromProvider(String providerId) {
+ BRProviderVO provider = brProviderDao.findByUuid(providerId);
+ return brProvidersMap.getOrDefault(provider.getProviderName(), null);
+ }
+
+ public List getBackupRecoveryProviders() {
+ return brProviders;
+ }
+
+ public void setBackupRecoveryProviders(List backupRecoveryProviders) {
+ this.brProviders = backupRecoveryProviders;
+ }
+
+ private void initializeDriversMap() {
+ if (brProvidersMap.isEmpty() && brProviders != null && brProviders.size() > 0) {
+ for (final BRProviderDriver driver : brProviders) {
+ brProvidersMap.put(driver.getName().toLowerCase(), driver);
+ }
+ s_logger.debug("Discovered Backup and Recovery providers configured in the BRManager");
+ }
+ }
+ @Override
+ public boolean start() {
+ initializeDriversMap();
+ return true;
+ }
+
+ /*
+ Backup Provider provider services
+ */
+
+ List createProviderDetails(long providerId, String url, String username, String password) {
+ BRProviderDetailVO detail1 = new BRProviderDetailVO(providerId, "url", url);
+ BRProviderDetailVO detail2 = new BRProviderDetailVO(providerId, "username", username);
+ BRProviderDetailVO detail3 = new BRProviderDetailVO(providerId, "password", password);
+ return Arrays.asList(detail1, detail2, detail3);
+ }
+
+ @Override
+ public BRProviderVO addBRProvider(String name, String url, String username, String password, Long zoneId, String providerName) {
+ if (!brProvidersMap.containsKey(providerName)) {
+ throw new InvalidParameterException("Unsopported provider: " + providerName);
+ }
+
+ s_logger.debug("Registering a new Backup and Recovery provider on zone: " + zoneId + " - url: " + url + " - name: " + name
+ + " - provider: " + providerName);
+ BRProviderDriver provider = brProvidersMap.get(providerName);
+ boolean result = provider.registerProvider(zoneId, name, url, username, password);
+
+ if (!result) {
+ throw new CloudRuntimeException("Could not register backup and recovery provider " + name);
+ }
+
+ try {
+ BRProviderVO providerVO = new BRProviderVO(name, zoneId, url, providerName);
+ providerVO = brProviderDao.persist(providerVO);
+
+ brProviderDetailsDao.addDetails(createProviderDetails(providerVO.getId(), url, username, password));
+ return providerVO;
+ } catch (Exception e) {
+ throw new CloudRuntimeException("Error persisting Backup and recovery provider after succesfull registration: " + e.getMessage());
+ }
+ }
+
+ @Override
+ public List listBRProviders() {
+ return new ArrayList(brProviderDao.listAll());
+ }
+
+ @Override
+ public boolean deleteBRProvider(String providerUuid) {
+ BRProviderVO providerVO = brProviderDao.findByUuid(providerUuid);
+ long providerId = providerVO.getId();
+ if (providerVO == null) {
+ throw new InvalidParameterValueException("Could not find a Backup and Recovery provider with id: " + providerId);
+ }
+ BRProviderDriver provider = brProvidersMap.get(providerVO.getProviderName());
+ boolean result = provider.unregisterProvider();
+
+ if (!result) {
+ throw new CloudRuntimeException("Unable to unregister provider: " + providerVO.getProviderName() + " id: " +providerId);
+ }
+
+ clearBRPolicies(providerId);
+ clearBRProviderDetails(providerId);
+
+ brProviderDao.remove(providerId);
+ return true;
+ }
+
+ /*
+ Backup Provider policies services
+ */
+ @Override
+ public BRPolicy addBRPolicy(String policyId, String policyName, String providerId) {
+ BRProviderVO providerVO = brProviderDao.findByUuid(providerId);
+ BRProviderDriver provider = getBRProvider(providerVO.getProviderName());
+ boolean exists = provider.policyExists(policyId, policyName);
+ if (!exists) {
+ throw new CloudRuntimeException("Policy " + policyId + " does not exist on provider " + providerVO.getName());
+ }
+
+ BRPolicyVO policy = new BRPolicyVO(providerVO.getId(), policyName, policyId);
+ return brPoliciesDao.persist(policy);
+ }
+
+ @Override
+ public List listBRPolicies(String providerId) {
+ BRProviderVO provider = brProviderDao.findByUuid(providerId);
+ return new ArrayList(brPoliciesDao.listByProvider(provider.getId()));
+ }
+
+ /**
+ * Remove a Backup and Recovery Provider mapped policies
+ */
+ private void clearBRPolicies(long providerId) {
+ brPoliciesDao.removeByProvider(providerId);
+ }
+
+ /**
+ * Remove a Backup and Recovery Provider details
+ */
+ private void clearBRProviderDetails(Long providerId) {
+ brProviderDetailsDao.removeDetails(providerId);
+ }
+
+ @Override
+ public BRProviderResponse createBRProviderResponse(BRProvider vo) {
+ DataCenterVO dc = dataCenterDao.findById(vo.getZoneId());
+
+ BRProviderResponse response = new BRProviderResponse();
+ response.setId(vo.getUuid());
+ response.setName(vo.getName());
+ response.setProviderName(vo.getProviderName());
+ response.setZoneId(dc.getUuid());
+ return response;
+ }
+
+ @Override
+ public BRPolicyResponse createBackupPolicyResponse(BRPolicy policyVO) {
+ BRProviderVO provider = brProviderDao.findById(policyVO.getProviderId());
+
+ BRPolicyResponse response = new BRPolicyResponse();
+ response.setId(policyVO.getUuid());
+ response.setPolicyId(policyVO.getPolicyUuid());
+ response.setName(policyVO.getName());
+ response.setProviderId(provider.getUuid());
+ return response;
+ }
+
+ @Override
+ public long getProviderId(String providerId) {
+ BRProviderVO provider = brProviderDao.findByUuid(providerId);
+ return provider.getId();
+ }
+
+ @Override
+ public List> getCommands() {
+ final List> cmdList = new ArrayList>();
+ cmdList.add(AddBRProviderCmd.class);
+ cmdList.add(DeleteBRProviderCmd.class);
+ cmdList.add(ListBRProvidersCmd.class);
+ cmdList.add(ListBRPoliciesCmd.class);
+ cmdList.add(ListBRProviderPoliciesCmd.class);
+ cmdList.add(AddBRPolicyCmd.class);
+ return cmdList;
+ }
+
+ @Override
+ public String getConfigComponentName() {
+ return null;
+ }
+
+ @Override
+ public ConfigKey>[] getConfigKeys() {
+ return new ConfigKey[0];
+ }
+}
diff --git a/server/src/main/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml b/server/src/main/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
index c7715a866c4..3175a1baa53 100644
--- a/server/src/main/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
+++ b/server/src/main/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
@@ -298,4 +298,8 @@
+
+
+
+
diff --git a/tools/apidoc/gen_toc.py b/tools/apidoc/gen_toc.py
index 4c7b2fe4b5c..c52a67de58a 100644
--- a/tools/apidoc/gen_toc.py
+++ b/tools/apidoc/gen_toc.py
@@ -191,7 +191,7 @@ known_categories = {
'listElastistorInterface': 'Misc',
'cloudian': 'Cloudian',
'Sioc' : 'Sioc',
- 'BackupRecovery' : 'BackupRecovery'
+ 'BR' : 'BackupRecovery'
}