18
18
*/
19
19
package org .apache .cloudstack .vm .schedule ;
20
20
21
+ import java .time .ZonedDateTime ;
22
+ import java .util .ArrayList ;
23
+ import java .util .Date ;
24
+ import java .util .List ;
25
+ import java .util .Objects ;
26
+ import java .util .TimeZone ;
27
+
28
+ import javax .inject .Inject ;
29
+
30
+ import org .apache .cloudstack .api .ApiCommandResourceType ;
31
+ import org .apache .cloudstack .api .command .user .vm .CreateVMScheduleCmd ;
32
+ import org .apache .cloudstack .api .command .user .vm .DeleteVMScheduleCmd ;
33
+ import org .apache .cloudstack .api .command .user .vm .ListVMScheduleCmd ;
34
+ import org .apache .cloudstack .api .command .user .vm .UpdateVMScheduleCmd ;
35
+ import org .apache .cloudstack .api .response .ListResponse ;
36
+ import org .apache .cloudstack .api .response .VMScheduleResponse ;
37
+ import org .apache .cloudstack .context .CallContext ;
38
+ import org .apache .cloudstack .vm .schedule .dao .VMScheduleDao ;
39
+ import org .apache .commons .lang .time .DateUtils ;
40
+ import org .apache .commons .lang3 .ObjectUtils ;
41
+ import org .apache .commons .lang3 .StringUtils ;
42
+ import org .springframework .scheduling .support .CronExpression ;
43
+
21
44
import com .cloud .api .query .MutualExclusiveIdsManagerBase ;
22
45
import com .cloud .event .ActionEvent ;
23
46
import com .cloud .event .EventTypes ;
32
55
import com .cloud .utils .exception .CloudRuntimeException ;
33
56
import com .cloud .vm .UserVmManager ;
34
57
import com .cloud .vm .VirtualMachine ;
35
- import org .apache .cloudstack .api .ApiCommandResourceType ;
36
- import org .apache .cloudstack .api .command .user .vm .CreateVMScheduleCmd ;
37
- import org .apache .cloudstack .api .command .user .vm .DeleteVMScheduleCmd ;
38
- import org .apache .cloudstack .api .command .user .vm .ListVMScheduleCmd ;
39
- import org .apache .cloudstack .api .command .user .vm .UpdateVMScheduleCmd ;
40
- import org .apache .cloudstack .api .response .ListResponse ;
41
- import org .apache .cloudstack .api .response .VMScheduleResponse ;
42
- import org .apache .cloudstack .context .CallContext ;
43
- import org .apache .cloudstack .vm .schedule .dao .VMScheduleDao ;
44
- import org .apache .commons .lang .time .DateUtils ;
45
- import org .apache .commons .lang3 .StringUtils ;
46
- import org .springframework .scheduling .support .CronExpression ;
47
-
48
- import javax .inject .Inject ;
49
- import java .time .ZonedDateTime ;
50
- import java .util .ArrayList ;
51
- import java .util .Date ;
52
- import java .util .List ;
53
- import java .util .Objects ;
54
- import java .util .TimeZone ;
55
58
56
59
public class VMScheduleManagerImpl extends MutualExclusiveIdsManagerBase implements VMScheduleManager , PluggableService {
57
60
@@ -205,6 +208,9 @@ public VMScheduleResponse updateSchedule(UpdateVMScheduleCmd cmd) {
205
208
Date cmdStartDate = cmd .getStartDate ();
206
209
Date cmdEndDate = cmd .getEndDate ();
207
210
Boolean enabled = cmd .getEnabled ();
211
+ final String originalTimeZone = vmSchedule .getTimeZone ();
212
+ final Date originalStartDate = vmSchedule .getStartDate ();
213
+ final Date originalEndDate = vmSchedule .getEndDate ();
208
214
209
215
TimeZone timeZone ;
210
216
String timeZoneId ;
@@ -231,7 +237,13 @@ public VMScheduleResponse updateSchedule(UpdateVMScheduleCmd cmd) {
231
237
startDate = Date .from (DateUtil .getZoneDateTime (cmdStartDate , timeZone .toZoneId ()).toInstant ());
232
238
}
233
239
234
- validateStartDateEndDate (Objects .requireNonNullElse (startDate , DateUtils .addMinutes (new Date (), 1 )), endDate , timeZone );
240
+ if (ObjectUtils .anyNotNull (cmdStartDate , cmdEndDate , cmdTimeZone ) &&
241
+ (!Objects .equals (originalTimeZone , timeZoneId ) ||
242
+ !Objects .equals (originalStartDate , startDate ) ||
243
+ !Objects .equals (originalEndDate , endDate ))) {
244
+ validateStartDateEndDate (Objects .requireNonNullElse (startDate , DateUtils .addMinutes (new Date (), 1 )),
245
+ endDate , timeZone );
246
+ }
235
247
236
248
if (enabled != null ) {
237
249
vmSchedule .setEnabled (enabled );
0 commit comments