Skip to content

Commit e7ffbb0

Browse files
MaJin1996mingjian2049
authored andcommitted
[Feature: MINI-1427]
support zbox, a USB mass storage device class manager, behave a lot like Windows
1 parent 9efd831 commit e7ffbb0

16 files changed

Lines changed: 611 additions & 3 deletions

File tree

build/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,11 @@
457457
<artifactId>iam2-script-plugin</artifactId>
458458
<version>${project.version}</version>
459459
</dependency>
460+
<dependency>
461+
<groupId>org.zstack</groupId>
462+
<artifactId>zbox</artifactId>
463+
<version>${project.version}</version>
464+
</dependency>
460465
</dependencies>
461466
</profile>
462467
</profiles>

conf/db/upgrade/V3.9.0__schema.sql

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,36 @@ ALTER TABLE `zstack`.`PolicyRouteTableVO` ADD COLUMN type VARCHAR(64) DEFAULT "U
2424
ALTER TABLE `zstack`.`VmNicVO` ADD COLUMN `driverType` varchar(64) DEFAULT NULL;
2525

2626
ALTER TABLE `zstack`.`AutoScalingGroupInstanceVO` ADD COLUMN protectionStrategy VARCHAR(128) DEFAULT "Unprotected" NOT NULL;
27-
ALTER TABLE `zstack`.`AutoScalingGroupInstanceVO` MODIFY COLUMN `protectionStrategy` VARCHAR(128) NOT NULL;
27+
ALTER TABLE `zstack`.`AutoScalingGroupInstanceVO` MODIFY COLUMN `protectionStrategy` VARCHAR(128) NOT NULL;
28+
CREATE TABLE IF NOT EXISTS `zstack`.`ZBoxVO` (
29+
`uuid` VARCHAR(32) NOT NULL,
30+
`name` VARCHAR(256) NOT NULL,
31+
`description` VARCHAR(2048) DEFAULT NULL,
32+
`state` VARCHAR(32) NOT NULL,
33+
`status` VARCHAR(32) NOT NULL,
34+
`mountPath` VARCHAR(2048) DEFAULT NULL,
35+
`totalCapacity` BIGINT UNSIGNED,
36+
`availableCapacity` BIGINT UNSIGNED,
37+
`busNum` varchar(32) DEFAULT NULL,
38+
`devNum` varchar(32) DEFAULT NULL,
39+
`idVendor` varchar(32) DEFAULT NULL,
40+
`idProduct` varchar(32) DEFAULT NULL,
41+
`iManufacturer` varchar(1024) DEFAULT NULL,
42+
`iProduct` varchar(1024) DEFAULT NULL,
43+
`iSerial` varchar(32) DEFAULT NULL,
44+
`usbVersion` varchar(32) DEFAULT NULL,
45+
`lastOpDate` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
46+
`createDate` TIMESTAMP,
47+
48+
PRIMARY KEY (`uuid`)
49+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
50+
51+
CREATE TABLE IF NOT EXISTS `zstack`.`ZBoxLocationRefVO` (
52+
`id` bigint(20) NOT NULL AUTO_INCREMENT,
53+
`zboxUuid` VARCHAR(32) NOT NULL,
54+
`resourceUuid` VARCHAR(32) NOT NULL,
55+
`resourceType` VARCHAR(256) NOT NULL,
56+
57+
PRIMARY KEY (`id`),
58+
CONSTRAINT `fkZBoxLocationRefVOZBoxVO` FOREIGN KEY (`zboxUuid`) REFERENCES `zstack`.`ZBoxVO` (`uuid`) ON DELETE CASCADE
59+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

conf/errorCodes/zbox.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<error>
2+
<prefix>zbox</prefix>
3+
4+
<code>
5+
<id>1000</id>
6+
<description>wait to attach zbox</description>
7+
</code>
8+
</error>

sdk/src/main/java/SourceClassMap.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,10 @@ public class SourceClassMap {
474474
put("org.zstack.vrouterRoute.VRouterRouteTableInventory", "org.zstack.sdk.VRouterRouteTableInventory");
475475
put("org.zstack.vrouterRoute.VirtualRouterVRouterRouteTableRefInventory", "org.zstack.sdk.VirtualRouterVRouterRouteTableRefInventory");
476476
put("org.zstack.xdragon.XDragonHostInventory", "org.zstack.sdk.XDragonHostInventory");
477+
put("org.zstack.zbox.ZBoxInventory", "org.zstack.sdk.ZBoxInventory");
478+
put("org.zstack.zbox.ZBoxLocationRefInventory", "org.zstack.sdk.ZBoxLocationRefInventory");
479+
put("org.zstack.zbox.ZBoxState", "org.zstack.sdk.ZBoxState");
480+
put("org.zstack.zbox.ZBoxStatus", "org.zstack.sdk.ZBoxStatus");
477481
put("org.zstack.zql.ZQLQueryReturn", "org.zstack.sdk.ZQLQueryReturn");
478482
put("org.zstack.zwatch.alarm.APICreateAlarmMsg$ActionParam", "org.zstack.sdk.zwatch.alarm.ActionParam");
479483
put("org.zstack.zwatch.alarm.AlarmActionInventory", "org.zstack.sdk.zwatch.alarm.AlarmActionInventory");
@@ -920,6 +924,10 @@ public class SourceClassMap {
920924
put("org.zstack.sdk.VtepInventory", "org.zstack.network.l2.vxlan.vtep.VtepInventory");
921925
put("org.zstack.sdk.WebhookInventory", "org.zstack.header.core.webhooks.WebhookInventory");
922926
put("org.zstack.sdk.XDragonHostInventory", "org.zstack.xdragon.XDragonHostInventory");
927+
put("org.zstack.sdk.ZBoxInventory", "org.zstack.zbox.ZBoxInventory");
928+
put("org.zstack.sdk.ZBoxLocationRefInventory", "org.zstack.zbox.ZBoxLocationRefInventory");
929+
put("org.zstack.sdk.ZBoxState", "org.zstack.zbox.ZBoxState");
930+
put("org.zstack.sdk.ZBoxStatus", "org.zstack.zbox.ZBoxStatus");
923931
put("org.zstack.sdk.ZQLQueryReturn", "org.zstack.zql.ZQLQueryReturn");
924932
put("org.zstack.sdk.ZoneInventory", "org.zstack.header.zone.ZoneInventory");
925933
put("org.zstack.sdk.databasebackup.DatabaseBackupInventory", "org.zstack.header.storage.database.backup.DatabaseBackupInventory");
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package org.zstack.sdk;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import org.zstack.sdk.*;
6+
7+
public class AddZBoxAction extends AbstractAction {
8+
9+
private static final HashMap<String, Parameter> parameterMap = new HashMap<>();
10+
11+
private static final HashMap<String, Parameter> nonAPIParameterMap = new HashMap<>();
12+
13+
public static class Result {
14+
public ErrorCode error;
15+
public org.zstack.sdk.AddZBoxResult value;
16+
17+
public Result throwExceptionIfError() {
18+
if (error != null) {
19+
throw new ApiException(
20+
String.format("error[code: %s, description: %s, details: %s]", error.code, error.description, error.details)
21+
);
22+
}
23+
24+
return this;
25+
}
26+
}
27+
28+
@Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false)
29+
public java.lang.String usbDeviceUuid;
30+
31+
@Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false)
32+
public java.lang.String name;
33+
34+
@Param(required = false)
35+
public java.util.List systemTags;
36+
37+
@Param(required = false)
38+
public java.util.List userTags;
39+
40+
@Param(required = false)
41+
public String sessionId;
42+
43+
@Param(required = false)
44+
public String accessKeyId;
45+
46+
@Param(required = false)
47+
public String accessKeySecret;
48+
49+
@Param(required = false)
50+
public String requestIp;
51+
52+
@NonAPIParam
53+
public long timeout = -1;
54+
55+
@NonAPIParam
56+
public long pollingInterval = -1;
57+
58+
59+
private Result makeResult(ApiResult res) {
60+
Result ret = new Result();
61+
if (res.error != null) {
62+
ret.error = res.error;
63+
return ret;
64+
}
65+
66+
org.zstack.sdk.AddZBoxResult value = res.getResult(org.zstack.sdk.AddZBoxResult.class);
67+
ret.value = value == null ? new org.zstack.sdk.AddZBoxResult() : value;
68+
69+
return ret;
70+
}
71+
72+
public Result call() {
73+
ApiResult res = ZSClient.call(this);
74+
return makeResult(res);
75+
}
76+
77+
public void call(final Completion<Result> completion) {
78+
ZSClient.call(this, new InternalCompletion() {
79+
@Override
80+
public void complete(ApiResult res) {
81+
completion.complete(makeResult(res));
82+
}
83+
});
84+
}
85+
86+
protected Map<String, Parameter> getParameterMap() {
87+
return parameterMap;
88+
}
89+
90+
protected Map<String, Parameter> getNonAPIParameterMap() {
91+
return nonAPIParameterMap;
92+
}
93+
94+
protected RestInfo getRestInfo() {
95+
RestInfo info = new RestInfo();
96+
info.httpMethod = "POST";
97+
info.path = "/zbox";
98+
info.needSession = true;
99+
info.needPoll = true;
100+
info.parameterName = "params";
101+
return info;
102+
}
103+
104+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.zstack.sdk;
2+
3+
import org.zstack.sdk.ZBoxInventory;
4+
5+
public class AddZBoxResult {
6+
public ZBoxInventory inventory;
7+
public void setInventory(ZBoxInventory inventory) {
8+
this.inventory = inventory;
9+
}
10+
public ZBoxInventory getInventory() {
11+
return this.inventory;
12+
}
13+
14+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package org.zstack.sdk;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import org.zstack.sdk.*;
6+
7+
public class EjectZBoxAction extends AbstractAction {
8+
9+
private static final HashMap<String, Parameter> parameterMap = new HashMap<>();
10+
11+
private static final HashMap<String, Parameter> nonAPIParameterMap = new HashMap<>();
12+
13+
public static class Result {
14+
public ErrorCode error;
15+
public org.zstack.sdk.EjectZBoxResult value;
16+
17+
public Result throwExceptionIfError() {
18+
if (error != null) {
19+
throw new ApiException(
20+
String.format("error[code: %s, description: %s, details: %s]", error.code, error.description, error.details)
21+
);
22+
}
23+
24+
return this;
25+
}
26+
}
27+
28+
@Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false)
29+
public java.lang.String uuid;
30+
31+
@Param(required = false)
32+
public java.util.List systemTags;
33+
34+
@Param(required = false)
35+
public java.util.List userTags;
36+
37+
@Param(required = false)
38+
public String sessionId;
39+
40+
@Param(required = false)
41+
public String accessKeyId;
42+
43+
@Param(required = false)
44+
public String accessKeySecret;
45+
46+
@Param(required = false)
47+
public String requestIp;
48+
49+
@NonAPIParam
50+
public long timeout = -1;
51+
52+
@NonAPIParam
53+
public long pollingInterval = -1;
54+
55+
56+
private Result makeResult(ApiResult res) {
57+
Result ret = new Result();
58+
if (res.error != null) {
59+
ret.error = res.error;
60+
return ret;
61+
}
62+
63+
org.zstack.sdk.EjectZBoxResult value = res.getResult(org.zstack.sdk.EjectZBoxResult.class);
64+
ret.value = value == null ? new org.zstack.sdk.EjectZBoxResult() : value;
65+
66+
return ret;
67+
}
68+
69+
public Result call() {
70+
ApiResult res = ZSClient.call(this);
71+
return makeResult(res);
72+
}
73+
74+
public void call(final Completion<Result> completion) {
75+
ZSClient.call(this, new InternalCompletion() {
76+
@Override
77+
public void complete(ApiResult res) {
78+
completion.complete(makeResult(res));
79+
}
80+
});
81+
}
82+
83+
protected Map<String, Parameter> getParameterMap() {
84+
return parameterMap;
85+
}
86+
87+
protected Map<String, Parameter> getNonAPIParameterMap() {
88+
return nonAPIParameterMap;
89+
}
90+
91+
protected RestInfo getRestInfo() {
92+
RestInfo info = new RestInfo();
93+
info.httpMethod = "PUT";
94+
info.path = "/zbox/{uuid}/actions";
95+
info.needSession = true;
96+
info.needPoll = true;
97+
info.parameterName = "ejectZBox";
98+
return info;
99+
}
100+
101+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.zstack.sdk;
2+
3+
import org.zstack.sdk.ZBoxInventory;
4+
5+
public class EjectZBoxResult {
6+
public ZBoxInventory inventory;
7+
public void setInventory(ZBoxInventory inventory) {
8+
this.inventory = inventory;
9+
}
10+
public ZBoxInventory getInventory() {
11+
return this.inventory;
12+
}
13+
14+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package org.zstack.sdk;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import org.zstack.sdk.*;
6+
7+
public class QueryZBoxAction extends QueryAction {
8+
9+
private static final HashMap<String, Parameter> parameterMap = new HashMap<>();
10+
11+
private static final HashMap<String, Parameter> nonAPIParameterMap = new HashMap<>();
12+
13+
public static class Result {
14+
public ErrorCode error;
15+
public org.zstack.sdk.QueryZBoxResult value;
16+
17+
public Result throwExceptionIfError() {
18+
if (error != null) {
19+
throw new ApiException(
20+
String.format("error[code: %s, description: %s, details: %s]", error.code, error.description, error.details)
21+
);
22+
}
23+
24+
return this;
25+
}
26+
}
27+
28+
29+
30+
private Result makeResult(ApiResult res) {
31+
Result ret = new Result();
32+
if (res.error != null) {
33+
ret.error = res.error;
34+
return ret;
35+
}
36+
37+
org.zstack.sdk.QueryZBoxResult value = res.getResult(org.zstack.sdk.QueryZBoxResult.class);
38+
ret.value = value == null ? new org.zstack.sdk.QueryZBoxResult() : value;
39+
40+
return ret;
41+
}
42+
43+
public Result call() {
44+
ApiResult res = ZSClient.call(this);
45+
return makeResult(res);
46+
}
47+
48+
public void call(final Completion<Result> completion) {
49+
ZSClient.call(this, new InternalCompletion() {
50+
@Override
51+
public void complete(ApiResult res) {
52+
completion.complete(makeResult(res));
53+
}
54+
});
55+
}
56+
57+
protected Map<String, Parameter> getParameterMap() {
58+
return parameterMap;
59+
}
60+
61+
protected Map<String, Parameter> getNonAPIParameterMap() {
62+
return nonAPIParameterMap;
63+
}
64+
65+
protected RestInfo getRestInfo() {
66+
RestInfo info = new RestInfo();
67+
info.httpMethod = "GET";
68+
info.path = "/zbox";
69+
info.needSession = true;
70+
info.needPoll = false;
71+
info.parameterName = "";
72+
return info;
73+
}
74+
75+
}

0 commit comments

Comments
 (0)