diff --git a/api/src/main/java/com/cloud/event/EventTypes.java b/api/src/main/java/com/cloud/event/EventTypes.java index 389fcc1da5c..6d9ab1fe587 100644 --- a/api/src/main/java/com/cloud/event/EventTypes.java +++ b/api/src/main/java/com/cloud/event/EventTypes.java @@ -380,6 +380,7 @@ public class EventTypes { // Disk Offerings public static final String EVENT_DISK_OFFERING_CREATE = "DISK.OFFERING.CREATE"; + public static final String EVENT_DISK_OFFERING_CLONE = "DISK.OFFERING.CLONE"; public static final String EVENT_DISK_OFFERING_EDIT = "DISK.OFFERING.EDIT"; public static final String EVENT_DISK_OFFERING_DELETE = "DISK.OFFERING.DELETE"; @@ -400,6 +401,7 @@ public class EventTypes { // Network offerings public static final String EVENT_NETWORK_OFFERING_CREATE = "NETWORK.OFFERING.CREATE"; + public static final String EVENT_NETWORK_OFFERING_CLONE = "NETWORK.OFFERING.CLONE"; public static final String EVENT_NETWORK_OFFERING_ASSIGN = "NETWORK.OFFERING.ASSIGN"; public static final String EVENT_NETWORK_OFFERING_EDIT = "NETWORK.OFFERING.EDIT"; public static final String EVENT_NETWORK_OFFERING_REMOVE = "NETWORK.OFFERING.REMOVE"; @@ -599,6 +601,7 @@ public class EventTypes { // VPC offerings public static final String EVENT_VPC_OFFERING_CREATE = "VPC.OFFERING.CREATE"; + public static final String EVENT_VPC_OFFERING_CLONE = "VPC.OFFERING.CLONE"; public static final String EVENT_VPC_OFFERING_UPDATE = "VPC.OFFERING.UPDATE"; public static final String EVENT_VPC_OFFERING_DELETE = "VPC.OFFERING.DELETE"; @@ -631,7 +634,7 @@ public class EventTypes { // Backup and Recovery events public static final String EVENT_VM_BACKUP_IMPORT_OFFERING = "BACKUP.IMPORT.OFFERING"; - public static final String EVENT_VM_BACKUP_CLONE_OFFERING = "BACKUP.CLONE.OFFERING"; + public static final String EVENT_VM_BACKUP_OFFERING_CLONE = "BACKUP.OFFERING.CLONE"; public static final String EVENT_VM_BACKUP_OFFERING_ASSIGN = "BACKUP.OFFERING.ASSIGN"; public static final String EVENT_VM_BACKUP_OFFERING_REMOVE = "BACKUP.OFFERING.REMOVE"; public static final String EVENT_VM_BACKUP_CREATE = "BACKUP.CREATE"; @@ -1047,11 +1050,13 @@ public class EventTypes { // Service Offerings entityEventDetails.put(EVENT_SERVICE_OFFERING_CREATE, ServiceOffering.class); + entityEventDetails.put(EVENT_SERVICE_OFFERING_CLONE, ServiceOffering.class); entityEventDetails.put(EVENT_SERVICE_OFFERING_EDIT, ServiceOffering.class); entityEventDetails.put(EVENT_SERVICE_OFFERING_DELETE, ServiceOffering.class); // Disk Offerings entityEventDetails.put(EVENT_DISK_OFFERING_CREATE, DiskOffering.class); + entityEventDetails.put(EVENT_DISK_OFFERING_CLONE, DiskOffering.class); entityEventDetails.put(EVENT_DISK_OFFERING_EDIT, DiskOffering.class); entityEventDetails.put(EVENT_DISK_OFFERING_DELETE, DiskOffering.class); @@ -1072,6 +1077,7 @@ public class EventTypes { // Network offerings entityEventDetails.put(EVENT_NETWORK_OFFERING_CREATE, NetworkOffering.class); + entityEventDetails.put(EVENT_NETWORK_OFFERING_CLONE, NetworkOffering.class); entityEventDetails.put(EVENT_NETWORK_OFFERING_ASSIGN, NetworkOffering.class); entityEventDetails.put(EVENT_NETWORK_OFFERING_EDIT, NetworkOffering.class); entityEventDetails.put(EVENT_NETWORK_OFFERING_REMOVE, NetworkOffering.class); diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/backup/CloneBackupOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/backup/CloneBackupOfferingCmd.java index 1dc104df3b7..ef4250bca4c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/backup/CloneBackupOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/backup/CloneBackupOfferingCmd.java @@ -82,7 +82,6 @@ public class CloneBackupOfferingCmd extends BaseAsyncCmd implements DomainAndZon @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.STRING, description = "the ID of the containing domain(s) as comma separated string, public for public offerings", - since = "4.23.0", length = 4096) private String domainIds; diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CloneNetworkOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CloneNetworkOfferingCmd.java index 22052b80507..19760ffaaa1 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CloneNetworkOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CloneNetworkOfferingCmd.java @@ -45,7 +45,7 @@ public class CloneNetworkOfferingCmd extends NetworkOfferingBaseCmd { type = BaseCmd.CommandType.UUID, entityType = NetworkOfferingResponse.class, required = true, - description = "The ID of the network offering to clone") + description = "The ID of the source network offering to clone from") private Long sourceOfferingId; @Parameter(name = "addservices", diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CloneDiskOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CloneDiskOfferingCmd.java index a451f2c7eee..51fa8424a6a 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CloneDiskOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CloneDiskOfferingCmd.java @@ -42,7 +42,7 @@ public class CloneDiskOfferingCmd extends CreateDiskOfferingCmd { type = BaseCmd.CommandType.UUID, entityType = DiskOfferingResponse.class, required = true, - description = "The ID of the disk offering to clone") + description = "The ID of the source disk offering to clone from") private Long sourceOfferingId; ///////////////////////////////////////////////////// diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CloneServiceOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CloneServiceOfferingCmd.java index 51663dd2bb7..05d3aa16730 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CloneServiceOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CloneServiceOfferingCmd.java @@ -41,7 +41,7 @@ public class CloneServiceOfferingCmd extends CreateServiceOfferingCmd { type = CommandType.UUID, entityType = ServiceOfferingResponse.class, required = true, - description = "The ID of the service offering to clone") + description = "The ID of the source service offering to clone from") private Long sourceOfferingId; ///////////////////////////////////////////////////// diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CloneVPCOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CloneVPCOfferingCmd.java index b4f9f4ef52f..2148ff5c2d4 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CloneVPCOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CloneVPCOfferingCmd.java @@ -45,7 +45,7 @@ public class CloneVPCOfferingCmd extends CreateVPCOfferingCmd { type = BaseCmd.CommandType.UUID, entityType = VpcOfferingResponse.class, required = true, - description = "The ID of the VPC offering to clone") + description = "The ID of the source VPC offering to clone from") private Long sourceOfferingId; @Parameter(name = "addservices", diff --git a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java index d9244378b71..07ca77f9c4d 100644 --- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java @@ -4134,6 +4134,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati } @Override + @ActionEvent(eventType = EventTypes.EVENT_DISK_OFFERING_CLONE, eventDescription = "cloning disk offering") public DiskOffering cloneDiskOffering(final CloneDiskOfferingCmd cmd) { final long userId = CallContext.current().getCallingUserId(); final DiskOfferingVO sourceOffering = getAndValidateSourceDiskOffering(cmd.getSourceOfferingId()); @@ -8276,7 +8277,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati } @Override - @ActionEvent(eventType = EventTypes.EVENT_NETWORK_OFFERING_CREATE, eventDescription = "cloning network offering") + @ActionEvent(eventType = EventTypes.EVENT_NETWORK_OFFERING_CLONE, eventDescription = "cloning network offering") public NetworkOffering cloneNetworkOffering(final CloneNetworkOfferingCmd cmd) { final Long sourceOfferingId = cmd.getSourceOfferingId(); diff --git a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java index 2f5aa12fee1..8510035cac2 100644 --- a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java @@ -819,6 +819,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis } @Override + @ActionEvent(eventType = EventTypes.EVENT_VPC_OFFERING_CLONE, eventDescription = "cloning VPC offering") public VpcOffering cloneVPCOffering(CloneVPCOfferingCmd cmd) { Long sourceVpcOfferingId = cmd.getSourceOfferingId(); diff --git a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java index b4433fb7540..e210c6b3067 100644 --- a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java @@ -327,7 +327,7 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager { } @Override - @ActionEvent(eventType = EventTypes.EVENT_VM_BACKUP_CLONE_OFFERING, eventDescription = "cloning backup offering", create = true) + @ActionEvent(eventType = EventTypes.EVENT_VM_BACKUP_OFFERING_CLONE, eventDescription = "cloning backup offering") public BackupOffering cloneBackupOffering(final CloneBackupOfferingCmd cmd) { final BackupOfferingVO sourceOffering = backupOfferingDao.findById(cmd.getSourceOfferingId()); if (sourceOffering == null) { @@ -343,15 +343,16 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager { final String description = cmd.getDescription() != null ? cmd.getDescription() : sourceOffering.getDescription(); final String externalId = cmd.getExternalId() != null ? cmd.getExternalId() : sourceOffering.getExternalId(); final boolean userDrivenBackups = cmd.getUserDrivenBackups() != null ? cmd.getUserDrivenBackups() : sourceOffering.isUserDrivenBackupAllowed(); + final Long zoneId = cmd.getZoneId() != null ? cmd.getZoneId() : sourceOffering.getZoneId(); - if (!externalId.equals(sourceOffering.getExternalId())) { + if (!Objects.equals(sourceOffering.getExternalId(), externalId)) { final BackupProvider provider = getBackupProvider(sourceOffering.getZoneId()); if (!provider.isValidProviderOffering(sourceOffering.getZoneId(), externalId)) { throw new CloudRuntimeException("Backup offering '" + externalId + "' does not exist on provider " + provider.getName() + " on zone " + sourceOffering.getZoneId()); } } - if (!externalId.equals(sourceOffering.getExternalId())) { + if (!Objects.equals(sourceOffering.getExternalId(), externalId)) { final BackupOffering existingOffering = backupOfferingDao.findByExternalId(externalId, sourceOffering.getZoneId()); if (existingOffering != null) { throw new CloudRuntimeException("A backup offering with external ID '" + externalId + "' already exists in this zone"); @@ -359,7 +360,7 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager { } final BackupOfferingVO clonedOffering = new BackupOfferingVO( - sourceOffering.getZoneId(), + zoneId, externalId, sourceOffering.getProvider(), cmd.getName(),