Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
1640b8a
백업 다중 플러그인 적용 오류 수정
Dajeong-Park Nov 20, 2025
19e497c
백업 다중 플러그인 적용
Dajeong-Park Nov 20, 2025
e0edf50
Update BackupService.java
Dajeong-Park Nov 20, 2025
3bb1c1d
Update BackupManagerTest.java
Dajeong-Park Nov 20, 2025
8c022c2
불필요 코드 삭제 및 API 동작하지 않는 버그 수정
Dajeong-Park Nov 20, 2025
20e452f
Merge pull request #379 from Dajeong-Park/ablestack-europa
Dajeong-Park Nov 24, 2025
b0d1dfa
백업용 스냅샷 생성 API 수정
Dajeong-Park Nov 24, 2025
e4d8cd3
Update VmWorkTakeVolumeSnapshotBackup.java
Dajeong-Park Nov 24, 2025
74bbb58
에러 수정
Dajeong-Park Nov 24, 2025
16843d0
Update VmWorkTakeVolumeSnapshotBackup.java
Dajeong-Park Nov 24, 2025
4f5efcc
Update CommvaultBackupProvider.java
Dajeong-Park Nov 24, 2025
686bae1
Update CommvaultBackupProvider.java
Dajeong-Park Nov 24, 2025
8ccb941
Update CommvaultBackupProvider.java
Dajeong-Park Nov 24, 2025
4de9f41
Update CommvaultBackupProvider.java
Dajeong-Park Nov 24, 2025
2f4a9af
Update CommvaultBackupProvider.java
Dajeong-Park Nov 24, 2025
e72ac05
백업 오퍼링 가져오기 validation 추가
Dajeong-Park Nov 26, 2025
d918f86
로그인 임시 해제
Dajeong-Park Nov 26, 2025
0cb1263
Update Login.vue
Dajeong-Park Nov 26, 2025
e7b0eac
Merge pull request #387 from ablecloud-team/ablestack-europa
Dajeong-Park Dec 8, 2025
5fdcbab
컴볼트 이벤트 추가 및 버전 체크 추가
Dajeong-Park Dec 8, 2025
c4f62d4
Update CommvaultBackupProvider.java
Dajeong-Park Dec 8, 2025
5234ae1
Merge remote-tracking branch 'origin/ablestack-europa' into europa-ba…
Dajeong-Park Dec 10, 2025
54773ba
quiesce 옵션 nas에만 적용
Dajeong-Park Dec 10, 2025
066e05a
Update pom.xml
Dajeong-Park Dec 10, 2025
ab0c707
Update BackupManagerImpl.java
Dajeong-Park Dec 10, 2025
06de795
Update BackupManagerImpl.java
Dajeong-Park Dec 10, 2025
eead9a1
빌드오류수정
Dajeong-Park Dec 10, 2025
054a1d8
빌드오류 수정
Dajeong-Park Dec 10, 2025
2dfe1b5
cloudstack main 브랜치와 동일하게 변경
Dajeong-Park Dec 10, 2025
380e300
Update VolumeApiServiceImplTest.java
Dajeong-Park Dec 10, 2025
52e28d2
최신소스반영
Dajeong-Park Dec 10, 2025
2b33bd6
백업 플러그인 소스 최신화
Dajeong-Park Dec 11, 2025
962b24b
Update NetworkerBackupProvider.java
Dajeong-Park Dec 11, 2025
238fec5
Update CommvaultBackupProvider.java
Dajeong-Park Dec 11, 2025
b37557b
UI빌드 오류 수정
Dajeong-Park Dec 11, 2025
a5cba0e
UI 빌드 오류 수정
Dajeong-Park Dec 11, 2025
1571ae2
UI api import 재적용
Dajeong-Park Dec 11, 2025
7e02de3
Update ko_KR.json
Dajeong-Park Dec 11, 2025
fd5a8fd
Merge pull request #389 from ablecloud-team/ablestack-europa
Dajeong-Park Dec 12, 2025
906aa3a
Merge branch 'europa-backup' into ablestack-europa
Dajeong-Park Dec 12, 2025
42a7de7
Merge pull request #390 from Dajeong-Park/ablestack-europa
Dajeong-Park Dec 12, 2025
516d9ca
Update BackupService.java
Dajeong-Park Dec 12, 2025
962a171
Update TransactionLegacy.java
Dajeong-Park Dec 12, 2025
51fe350
Update DatabaseUpgradeChecker.java
Dajeong-Park Dec 12, 2025
b158f9a
Update HypervisorGuruBase.java
Dajeong-Park Dec 12, 2025
e437538
Revert "Update HypervisorGuruBase.java"
Dajeong-Park Dec 12, 2025
944e134
Update HypervisorGuruBase.java
Dajeong-Park Dec 12, 2025
338fc33
빌드오류 수정
Dajeong-Park Dec 12, 2025
270368e
Update LibvirtVMDef.java
Dajeong-Park Dec 12, 2025
c21247e
Merge branch 'europa-backup' into testtest
Dajeong-Park Dec 15, 2025
9c7ee4b
Merge pull request #393 from Dajeong-Park/testtest
Dajeong-Park Dec 15, 2025
84d91ee
재수정
Dajeong-Park Dec 15, 2025
043c3b1
Update Login.vue
Dajeong-Park Dec 15, 2025
dc52ba8
Update DetailsTab.vue
Dajeong-Park Dec 15, 2025
5dc3007
Update InstanceTab.vue
Dajeong-Park Dec 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions api/src/main/java/com/cloud/event/EventTypes.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import org.apache.cloudstack.network.BgpPeer;
import org.apache.cloudstack.network.Ipv4GuestSubnetNetworkMap;
import org.apache.cloudstack.quota.QuotaTariff;
import org.apache.cloudstack.backup.Backup;
import org.apache.cloudstack.storage.object.Bucket;
import org.apache.cloudstack.storage.object.ObjectStore;
import org.apache.cloudstack.storage.sharedfs.SharedFS;
Expand Down Expand Up @@ -870,6 +871,7 @@ public class EventTypes {
// Backup Repository
public static final String EVENT_BACKUP_REPOSITORY_ADD = "BACKUP.REPOSITORY.ADD";
public static final String EVENT_BACKUP_REPOSITORY_UPDATE = "BACKUP.REPOSITORY.UPDATE";
public static final String EVENT_HOST_AGENT_INSTALL = "HOST.AGENT.INSTALL";

static {

Expand Down Expand Up @@ -1415,6 +1417,7 @@ public class EventTypes {
// Backup Repository
entityEventDetails.put(EVENT_BACKUP_REPOSITORY_ADD, BackupRepositoryService.class);
entityEventDetails.put(EVENT_BACKUP_REPOSITORY_UPDATE, BackupRepositoryService.class);
entityEventDetails.put(EVENT_HOST_AGENT_INSTALL, Backup.class);
}

public static boolean isNetworkEvent(String eventType) {
Expand Down
2 changes: 1 addition & 1 deletion api/src/main/java/com/cloud/storage/VolumeApiService.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ Snapshot takeSnapshot(Long volumeId, Long policyId, Long snapshotId, Account acc

Snapshot allocSnapshot(Long volumeId, Long policyId, String snapshotName, Snapshot.LocationType locationType, List<Long> zoneIds, List<Long> storagePoolIds, Boolean useStorageReplication) throws ResourceAllocationException;

Snapshot takeSnapshot(Long volumeId, Long policyId, Long snapshotId, Account account, boolean quiescevm, Snapshot.LocationType locationType, boolean asyncBackup, Map<String, String> tags, List<Long> zoneIds, boolean backup)
Snapshot takeSnapshot(Long volumeId, Long policyId, Long snapshotId, Account account, boolean quiescevm, Snapshot.LocationType locationType, boolean asyncBackup, Map<String, String> tags, List<Long> zoneIds, List<Long> poolIds, Boolean useStorageReplication, boolean backup)
throws ResourceAllocationException;

Volume updateVolume(long volumeId, String path, String state, Long storageId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@
// under the License.
package org.apache.cloudstack.api.command.user.snapshot;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
Expand All @@ -32,6 +34,7 @@
import org.apache.cloudstack.api.response.DomainResponse;
import org.apache.cloudstack.api.response.SnapshotPolicyResponse;
import org.apache.cloudstack.api.response.SnapshotResponse;
import org.apache.cloudstack.api.response.StoragePoolResponse;
import org.apache.cloudstack.api.response.VolumeResponse;
import org.apache.cloudstack.api.response.ZoneResponse;
import org.apache.commons.collections.MapUtils;
Expand Down Expand Up @@ -102,6 +105,19 @@ public class CreateSnapshotBackupCmd extends BaseAsyncCreateCmd {
since = "4.19.0")
protected List<Long> zoneIds;

@Parameter(name = ApiConstants.STORAGE_ID_LIST,
type=CommandType.LIST,
collectionType = CommandType.UUID,
entityType = StoragePoolResponse.class,
authorized = RoleType.Admin,
description = "A comma-separated list of IDs of the storage pools in other zones in which the snapshot will be made available. " +
"The snapshot will always be made available in the zone in which the volume is present.",
since = "4.21.0")
protected List<Long> storagePoolIds;

@Parameter (name = ApiConstants.USE_STORAGE_REPLICATION, type=CommandType.BOOLEAN, required = false, description = "This parameter enables the option the snapshot to be copied to supported primary storage")
protected Boolean useStorageReplication;

private String syncObjectType = BaseAsyncCmd.snapshotHostSyncObject;

// ///////////////////////////////////////////////////
Expand Down Expand Up @@ -168,6 +184,17 @@ public List<Long> getZoneIds() {
return zoneIds;
}

public List<Long> getStoragePoolIds() {
return storagePoolIds == null ? new ArrayList<>() : storagePoolIds;
}

public Boolean useStorageReplication() {
if (useStorageReplication == null) {
return false;
}
return useStorageReplication;
}

// ///////////////////////////////////////////////////
// ///////////// API Implementation///////////////////
// ///////////////////////////////////////////////////
Expand Down Expand Up @@ -216,7 +243,7 @@ public ApiCommandResourceType getApiResourceType() {

@Override
public void create() throws ResourceAllocationException {
Snapshot snapshot = _volumeService.allocSnapshot(getVolumeId(), getPolicyId(), getSnapshotName(), getLocationType(), getZoneIds(), null, null);
Snapshot snapshot = _volumeService.allocSnapshot(getVolumeId(), getPolicyId(), getSnapshotName(), getLocationType(), getZoneIds(), getStoragePoolIds(), useStorageReplication());
if (snapshot != null) {
setEntityId(snapshot.getId());
setEntityUuid(snapshot.getUuid());
Expand All @@ -230,7 +257,7 @@ public void execute() {
Snapshot snapshot;
try {
snapshot =
_volumeService.takeSnapshot(getVolumeId(), getPolicyId(), getEntityId(), _accountService.getAccount(getEntityOwnerId()), getQuiescevm(), getLocationType(), getAsyncBackup(), getTags(), getZoneIds(), getBackup());
_volumeService.takeSnapshot(getVolumeId(), getPolicyId(), getEntityId(), _accountService.getAccount(getEntityOwnerId()), getQuiescevm(), getLocationType(), getAsyncBackup(), getTags(), getZoneIds(), getStoragePoolIds(), useStorageReplication(), getBackup());

if (snapshot != null) {
SnapshotResponse response = _responseGenerator.createSnapshotResponse(snapshot);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public interface BackupManager extends BackupService, Configurable, PluggableSer
ConfigKey<String> BackupProviderPlugin = new ConfigKey<>("Advanced", String.class,
"backup.framework.provider.plugin",
"dummy",
"The backup and recovery provider plugin (comma-separated). Example: dummy, networker, nas and commvault", true, ConfigKey.Scope.Zone, BackupFrameworkEnabled.key());
"The backup and recovery provider plugin (comma-separated). Example: dummy, veeam, networker, nas and commvault", true, ConfigKey.Scope.Zone, BackupFrameworkEnabled.key());

ConfigKey<Long> BackupSyncPollingInterval = new ConfigKey<>("Advanced", Long.class,
"backup.framework.sync.interval",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,11 +142,9 @@ default boolean supportsMemoryVmSnapshot() {
void syncBackupStorageStats(Long zoneId);

/**
* This method should reconcile and create backup entries for any backups created out-of-band
* @param vm
* @param metric
* sync commvault backup
*/
void syncBackups(VirtualMachine vm, Backup.Metric metric);
void syncBackups(VirtualMachine vm);

/**
* check commvault backup agent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public interface BackupService {
* @param zoneId zone id
* @return backup provider
*/
BackupProvider getBackupProvider(final Long zoneId);
// BackupProvider getBackupProvider(final Long zoneId);

/**
* Find backup provider by name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,11 @@ public class VmWorkTakeVolumeSnapshotBackup extends VmWork {
private boolean backup;

private List<Long> zoneIds;
private List<Long> poolIds;

public VmWorkTakeVolumeSnapshotBackup(long userId, long accountId, long vmId, String handlerName,
Long volumeId, Long policyId, Long snapshotId, boolean quiesceVm, Snapshot.LocationType locationType,
boolean asyncBackup, List<Long> zoneIds, boolean backup) {
boolean asyncBackup, List<Long> zoneIds, List<Long> poolIds, boolean backup) {
super(userId, accountId, vmId, handlerName);
this.volumeId = volumeId;
this.policyId = policyId;
Expand All @@ -45,6 +46,7 @@ public VmWorkTakeVolumeSnapshotBackup(long userId, long accountId, long vmId, St
this.locationType = locationType;
this.asyncBackup = asyncBackup;
this.zoneIds = zoneIds;
this.poolIds = poolIds;
this.backup = backup;
}

Expand Down Expand Up @@ -74,6 +76,10 @@ public List<Long> getZoneIds() {
return zoneIds;
}

public List<Long> getPoolIds() {
return poolIds;
}

public boolean getBackup() {
return backup;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public class BackupVO implements Backup {
@Column(name = "vm_id")
private Long vmId;

@Column(name = "external_id")
@Column(name = "external_id", length = 4096)
private String externalId;

@Column(name = "type")
Expand Down
Loading
Loading