diff --git a/conf/db/upgrade/V4.7.0.4__schema.sql b/conf/db/upgrade/V4.7.0.4__schema.sql index 0347ed2f688..6559ab7d53d 100644 --- a/conf/db/upgrade/V4.7.0.4__schema.sql +++ b/conf/db/upgrade/V4.7.0.4__schema.sql @@ -28,4 +28,14 @@ CREATE TABLE IF NOT EXISTS `zstack`.`L2NetworkHostRefVO` ( UNIQUE KEY `ukL2NetworkHost` (`l2NetworkUuid`,`hostUuid`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -ALTER TABLE `zstack`.`L2NetworkClusterRefVO` ADD COLUMN `l2ProviderType` varchar(32) default NULL; \ No newline at end of file +ALTER TABLE `zstack`.`L2NetworkClusterRefVO` ADD COLUMN `l2ProviderType` varchar(32) default NULL; + +CREATE TABLE IF NOT EXISTS `zstack`.`SchedulerJobGroupZoneRefVO` ( + `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT, + `schedulerJobGroupUuid` varchar(32) NOT NULL COMMENT 'uuid of schedulerJobGroupUuid', + `zoneUuid` varchar(32) NOT NULL COMMENT 'uuid of zone', + `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + CONSTRAINT `fkSchedulerJobGroupZoneRefVOSchedulerJobGroupVO` FOREIGN KEY (`schedulerJobGroupUuid`) REFERENCES SchedulerJobGroupVO (`uuid`) ON DELETE CASCADE, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index a0434aa9864..872e969dd9e 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -273,6 +273,7 @@ public class SourceClassMap { put("org.zstack.header.scheduler.SchedulerJobGroupInventory", "org.zstack.sdk.SchedulerJobGroupInventory"); put("org.zstack.header.scheduler.SchedulerJobGroupJobRefInventory", "org.zstack.sdk.SchedulerJobGroupJobRefInventory"); put("org.zstack.header.scheduler.SchedulerJobGroupSchedulerTriggerRefInventory", "org.zstack.sdk.SchedulerJobGroupSchedulerTriggerRefInventory"); + put("org.zstack.header.scheduler.SchedulerJobGroupZoneRefInventory", "org.zstack.sdk.SchedulerJobGroupZoneRefInventory"); put("org.zstack.header.scheduler.SchedulerJobHistoryInventory", "org.zstack.sdk.SchedulerJobHistoryInventory"); put("org.zstack.header.scheduler.SchedulerJobInventory", "org.zstack.sdk.SchedulerJobInventory"); put("org.zstack.header.scheduler.SchedulerJobSchedulerTriggerInventory", "org.zstack.sdk.SchedulerJobSchedulerTriggerInventory"); @@ -1094,6 +1095,7 @@ public class SourceClassMap { put("org.zstack.sdk.SchedulerJobGroupInventory", "org.zstack.header.scheduler.SchedulerJobGroupInventory"); put("org.zstack.sdk.SchedulerJobGroupJobRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupJobRefInventory"); put("org.zstack.sdk.SchedulerJobGroupSchedulerTriggerRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupSchedulerTriggerRefInventory"); + put("org.zstack.sdk.SchedulerJobGroupZoneRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupZoneRefInventory"); put("org.zstack.sdk.SchedulerJobHistoryInventory", "org.zstack.header.scheduler.SchedulerJobHistoryInventory"); put("org.zstack.sdk.SchedulerJobInventory", "org.zstack.header.scheduler.SchedulerJobInventory"); put("org.zstack.sdk.SchedulerJobSchedulerTriggerInventory", "org.zstack.header.scheduler.SchedulerJobSchedulerTriggerInventory"); diff --git a/sdk/src/main/java/org/zstack/sdk/AttachSchedulerJobGroupToZoneAction.java b/sdk/src/main/java/org/zstack/sdk/AttachSchedulerJobGroupToZoneAction.java new file mode 100644 index 00000000000..f59f82018e9 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/AttachSchedulerJobGroupToZoneAction.java @@ -0,0 +1,104 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class AttachSchedulerJobGroupToZoneAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.AttachSchedulerJobGroupToZoneResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s]", error.code, error.description, error.details) + ); + } + + return this; + } + } + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String schedulerJobGroupUuid; + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String zoneUuid; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.AttachSchedulerJobGroupToZoneResult value = res.getResult(org.zstack.sdk.AttachSchedulerJobGroupToZoneResult.class); + ret.value = value == null ? new org.zstack.sdk.AttachSchedulerJobGroupToZoneResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "POST"; + info.path = "/scheduler/zone/{zoneUuid}/scheduler-job-group/{schedulerJobGroupUuid}"; + info.needSession = true; + info.needPoll = true; + info.parameterName = "params"; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/AttachSchedulerJobGroupToZoneResult.java b/sdk/src/main/java/org/zstack/sdk/AttachSchedulerJobGroupToZoneResult.java new file mode 100644 index 00000000000..5f5bfc4b5a8 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/AttachSchedulerJobGroupToZoneResult.java @@ -0,0 +1,14 @@ +package org.zstack.sdk; + +import org.zstack.sdk.SchedulerJobGroupZoneRefInventory; + +public class AttachSchedulerJobGroupToZoneResult { + public SchedulerJobGroupZoneRefInventory inventory; + public void setInventory(SchedulerJobGroupZoneRefInventory inventory) { + this.inventory = inventory; + } + public SchedulerJobGroupZoneRefInventory getInventory() { + return this.inventory; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/DetachSchedulerJobGroupFromZoneAction.java b/sdk/src/main/java/org/zstack/sdk/DetachSchedulerJobGroupFromZoneAction.java new file mode 100644 index 00000000000..e8a02c5dcbb --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/DetachSchedulerJobGroupFromZoneAction.java @@ -0,0 +1,104 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class DetachSchedulerJobGroupFromZoneAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.DetachSchedulerJobGroupFromZoneResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s]", error.code, error.description, error.details) + ); + } + + return this; + } + } + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String schedulerJobGroupUuid; + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String zoneUuid; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.DetachSchedulerJobGroupFromZoneResult value = res.getResult(org.zstack.sdk.DetachSchedulerJobGroupFromZoneResult.class); + ret.value = value == null ? new org.zstack.sdk.DetachSchedulerJobGroupFromZoneResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "DELETE"; + info.path = "/scheduler/zone/{zoneUuid}/scheduler-job-group/{schedulerJobGroupUuid}"; + info.needSession = true; + info.needPoll = true; + info.parameterName = ""; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/DetachSchedulerJobGroupFromZoneResult.java b/sdk/src/main/java/org/zstack/sdk/DetachSchedulerJobGroupFromZoneResult.java new file mode 100644 index 00000000000..15d8ab1aae6 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/DetachSchedulerJobGroupFromZoneResult.java @@ -0,0 +1,14 @@ +package org.zstack.sdk; + +import org.zstack.sdk.SchedulerJobGroupInventory; + +public class DetachSchedulerJobGroupFromZoneResult { + public SchedulerJobGroupInventory inventory; + public void setInventory(SchedulerJobGroupInventory inventory) { + this.inventory = inventory; + } + public SchedulerJobGroupInventory getInventory() { + return this.inventory; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/SchedulerJobGroupZoneRefInventory.java b/sdk/src/main/java/org/zstack/sdk/SchedulerJobGroupZoneRefInventory.java new file mode 100644 index 00000000000..56046159c50 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/SchedulerJobGroupZoneRefInventory.java @@ -0,0 +1,47 @@ +package org.zstack.sdk; + + + +public class SchedulerJobGroupZoneRefInventory { + + public java.lang.Long id; + public void setId(java.lang.Long id) { + this.id = id; + } + public java.lang.Long getId() { + return this.id; + } + + public java.lang.String schedulerJobGroupUuid; + public void setSchedulerJobGroupUuid(java.lang.String schedulerJobGroupUuid) { + this.schedulerJobGroupUuid = schedulerJobGroupUuid; + } + public java.lang.String getSchedulerJobGroupUuid() { + return this.schedulerJobGroupUuid; + } + + public java.lang.String zoneUuid; + public void setZoneUuid(java.lang.String zoneUuid) { + this.zoneUuid = zoneUuid; + } + public java.lang.String getZoneUuid() { + return this.zoneUuid; + } + + public java.sql.Timestamp createDate; + public void setCreateDate(java.sql.Timestamp createDate) { + this.createDate = createDate; + } + public java.sql.Timestamp getCreateDate() { + return this.createDate; + } + + public java.sql.Timestamp lastOpDate; + public void setLastOpDate(java.sql.Timestamp lastOpDate) { + this.lastOpDate = lastOpDate; + } + public java.sql.Timestamp getLastOpDate() { + return this.lastOpDate; + } + +} diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index 876d5eb811e..c20a45c95a5 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -47843,5 +47843,56 @@ abstract class ApiHelper { } } + def attachSchedulerJobGroupToZone(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.AttachSchedulerJobGroupToZoneAction.class) Closure c) { + def a = new org.zstack.sdk.AttachSchedulerJobGroupToZoneAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + def detachSchedulerJobGroupFromZone(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.DetachSchedulerJobGroupFromZoneAction.class) Closure c) { + def a = new org.zstack.sdk.DetachSchedulerJobGroupFromZoneAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } }