Skip to content

Commit 9fa3f09

Browse files
author
gean.silva
committed
adding backup filter by status
1 parent 850b443 commit 9fa3f09

8 files changed

Lines changed: 25825 additions & 18603 deletions

File tree

api/src/main/java/org/apache/cloudstack/api/command/user/backup/ListBackupsCmd.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,12 @@ public class ListBackupsCmd extends BaseListProjectAndAccountResourcesCmd {
8989
description = "list backups by backup offering")
9090
private Long backupOfferingId;
9191

92+
@Parameter(name = ApiConstants.STATUS,
93+
type = CommandType.STRING,
94+
since = "4.23.0",
95+
description = "list backups by status")
96+
private String backupStatus;
97+
9298
@Parameter(name = ApiConstants.LIST_VM_DETAILS,
9399
type = CommandType.BOOLEAN,
94100
since = "4.21.0",
@@ -119,6 +125,10 @@ public Long getZoneId() {
119125
return zoneId;
120126
}
121127

128+
public String getBackupStatus() {
129+
return backupStatus;
130+
}
131+
122132
public Boolean getListVmDetails() {
123133
return listVmDetails;
124134
}

server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import javax.naming.ConfigurationException;
4040

4141
import com.cloud.utils.DomainHelper;
42+
import com.cloud.utils.EnumUtils;
4243
import org.apache.cloudstack.api.ApiCommandResourceType;
4344
import org.apache.cloudstack.api.ApiConstants;
4445
import org.apache.cloudstack.api.InternalIdentity;
@@ -256,6 +257,8 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager {
256257
private static Map<String, BackupProvider> backupProvidersMap = new HashMap<>();
257258
private List<BackupProvider> backupProviders;
258259

260+
private static final List<Backup.Status> INVALID_BACKUP_STATUS = List.of(Backup.Status.Expunged, Backup.Status.Removed);
261+
259262
public AsyncJobDispatcher getAsyncJobDispatcher() {
260263
return asyncJobDispatcher;
261264
}
@@ -1089,13 +1092,28 @@ protected void deleteExcessBackups(List<BackupVO> backups, int amountOfBackupsTo
10891092
}
10901093
}
10911094

1095+
private Backup.Status validateBackupStatus(final String backupStatus) {
1096+
if (backupStatus == null) {
1097+
return null;
1098+
}
1099+
1100+
Backup.Status status = EnumUtils.getEnumIgnoreCase(Backup.Status.class, backupStatus);
1101+
if (status == null || INVALID_BACKUP_STATUS.contains(status)) {
1102+
throw new InvalidParameterValueException(String.format("Invalid backup status: %s. Valid values are: " +
1103+
"Allocated, Queued, BackingUp, BackedUp, Error, Failed, Restoring.", backupStatus));
1104+
}
1105+
1106+
return status;
1107+
}
1108+
10921109
@Override
10931110
public Pair<List<Backup>, Integer> listBackups(final ListBackupsCmd cmd) {
10941111
final Long id = cmd.getId();
10951112
final Long vmId = cmd.getVmId();
10961113
final String name = cmd.getName();
10971114
final Long zoneId = cmd.getZoneId();
10981115
final Long backupOfferingId = cmd.getBackupOfferingId();
1116+
final Backup.Status backupStatus = validateBackupStatus(cmd.getBackupStatus());
10991117
final Account caller = CallContext.current().getCallingAccount();
11001118
final String keyword = cmd.getKeyword();
11011119
List<Long> permittedAccounts = new ArrayList<Long>();
@@ -1124,6 +1142,7 @@ public Pair<List<Backup>, Integer> listBackups(final ListBackupsCmd cmd) {
11241142
sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
11251143
sb.and("zoneId", sb.entity().getZoneId(), SearchCriteria.Op.EQ);
11261144
sb.and("backupOfferingId", sb.entity().getBackupOfferingId(), SearchCriteria.Op.EQ);
1145+
sb.and("backupStatus", sb.entity().getStatus(), SearchCriteria.Op.EQ);
11271146

11281147
if (keyword != null) {
11291148
sb.and().op("keywordName", sb.entity().getName(), SearchCriteria.Op.LIKE);
@@ -1156,6 +1175,8 @@ public Pair<List<Backup>, Integer> listBackups(final ListBackupsCmd cmd) {
11561175
sc.setParameters("backupOfferingId", backupOfferingId);
11571176
}
11581177

1178+
sc.setParametersIfNotNull("backupStatus", backupStatus);
1179+
11591180
if (keyword != null) {
11601181
String keywordMatch = "%" + keyword + "%";
11611182
sc.setParameters("keywordName", keywordMatch);

0 commit comments

Comments
 (0)