Skip to content

Commit 68f077a

Browse files
author
gitlab
committed
Merge branch 'shixin-6933@@3' into 'master'
get image format after download image Closes ZSTAC-6933 See merge request zstackio/zstack!2383
2 parents 617682d + 1e8907e commit 68f077a

6 files changed

Lines changed: 281 additions & 0 deletions

File tree

image/src/main/java/org/zstack/image/ImageManagerImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,6 +1017,9 @@ public void run(MessageReply reply) {
10171017
vo.setSize(re.getSize());
10181018
vo.setActualSize(re.getActualSize());
10191019
vo.setStatus(ref.getStatus());
1020+
if (re.getFormat() != null) {
1021+
vo.setFormat(re.getFormat());
1022+
}
10201023
dbf.update(vo);
10211024
}
10221025

plugin/ceph/src/main/java/org/zstack/storage/ceph/backup/CephBackupStorageBase.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ public static class DownloadRsp extends AgentResponse {
283283
long size;
284284
Long actualSize;
285285
String uploadPath;
286+
String format;
286287

287288
public Long getActualSize() {
288289
return actualSize;
@@ -307,6 +308,14 @@ public String getUploadPath() {
307308
public void setUploadPath(String uploadPath) {
308309
this.uploadPath = uploadPath;
309310
}
311+
312+
public String getFormat() {
313+
return format;
314+
}
315+
316+
public void setFormat(String format) {
317+
this.format = format;
318+
}
310319
}
311320

312321
public static class DeleteCmd extends AgentCommand {
@@ -929,6 +938,7 @@ public void success(DownloadRsp ret) {
929938
long asize = ret.actualSize == null ? ret.size : ret.actualSize;
930939
reply.setActualSize(asize);
931940
reply.setMd5sum("not calculated");
941+
reply.setFormat(ret.format);
932942
bus.reply(msg, reply);
933943
}
934944
});

plugin/sftpBackupStorage/src/main/java/org/zstack/storage/backup/sftp/SftpBackupStorage.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ private class DownloadResult {
9393
String md5sum;
9494
long size;
9595
long actualSize;
96+
String format;
9697
}
9798

9899
private void download(String url, String installPath, String uuid, final ReturnValueCompletion<DownloadResult> completion) {
@@ -124,6 +125,7 @@ public void success(DownloadResponse ret) {
124125
res.md5sum = ret.getMd5Sum();
125126
res.size = ret.getSize();
126127
res.actualSize = ret.getActualSize();
128+
res.format = ret.format;
127129

128130
updateCapacity(ret.getTotalCapacity(), ret.getAvailableCapacity());
129131

@@ -200,6 +202,7 @@ public void success(DownloadResult res) {
200202
reply.setSize(res.size);
201203
reply.setActualSize(res.actualSize);
202204
reply.setMd5sum(res.md5sum);
205+
reply.setFormat(res.format);
203206
bus.reply(msg, reply);
204207
}
205208

plugin/sftpBackupStorage/src/main/java/org/zstack/storage/backup/sftp/SftpBackupStorageCommands.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ public static class DownloadResponse extends AgentResponse {
138138
public String md5Sum;
139139
public long size;
140140
public long actualSize;
141+
public String format;
141142

142143
public long getActualSize() {
143144
return actualSize;
@@ -159,6 +160,14 @@ public long getSize() {
159160
public void setSize(long size) {
160161
this.size = size;
161162
}
163+
164+
public String getFormat() {
165+
return format;
166+
}
167+
168+
public void setFormat(String format) {
169+
this.format = format;
170+
}
162171
}
163172

164173
@ApiTimeout(apiClasses = {APIDeleteVolumeSnapshotMsg.class})
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package org.zstack.test.integration.image.platform
2+
3+
import org.springframework.http.HttpEntity
4+
import org.zstack.core.db.DatabaseFacade
5+
import org.zstack.header.image.ImageConstant
6+
import org.zstack.header.storage.backup.DownloadImageReply
7+
import org.zstack.sdk.BackupStorageInventory
8+
import org.zstack.sdk.ImageInventory
9+
import org.zstack.sdk.VmInstanceInventory
10+
import org.zstack.storage.ceph.backup.CephBackupStorageBase
11+
import org.zstack.test.integration.ZStackTest
12+
import org.zstack.testlib.EnvSpec
13+
import org.zstack.testlib.SubCase
14+
import org.zstack.utils.data.SizeUnit
15+
16+
/**
17+
* Created by shixin on 2018/03/21.
18+
*/
19+
class AddImageToCephBackStorageCase extends SubCase {
20+
EnvSpec env
21+
DatabaseFacade dbf
22+
VmInstanceInventory vm
23+
24+
@Override
25+
void setup() {
26+
useSpring(ZStackTest.springSpec)
27+
}
28+
29+
@Override
30+
void environment() {
31+
env = env {
32+
instanceOffering {
33+
name = "instanceOffering"
34+
memory = SizeUnit.GIGABYTE.toByte(8)
35+
cpu = 4
36+
}
37+
diskOffering {
38+
name = "diskOffering"
39+
diskSize = SizeUnit.GIGABYTE.toByte(20)
40+
}
41+
42+
zone {
43+
name = "zone"
44+
description = "test"
45+
46+
cluster {
47+
name = "cluster"
48+
hypervisorType = "KVM"
49+
50+
kvm {
51+
name = "kvm"
52+
managementIp = "localhost"
53+
username = "root"
54+
password = "password"
55+
}
56+
57+
attachPrimaryStorage("local")
58+
attachL2Network("l2")
59+
}
60+
61+
localPrimaryStorage {
62+
name = "local"
63+
url = "/local_ps"
64+
}
65+
66+
l2NoVlanNetwork {
67+
name = "l2"
68+
physicalInterface = "eth0"
69+
70+
l3Network {
71+
name = "l3"
72+
73+
ip {
74+
startIp = "192.168.100.10"
75+
endIp = "192.168.100.100"
76+
netmask = "255.255.255.0"
77+
gateway = "192.168.100.1"
78+
}
79+
}
80+
}
81+
attachBackupStorage("ceph-bk")
82+
cephBackupStorage {
83+
name = "ceph-bk"
84+
description = "Test"
85+
totalCapacity = SizeUnit.GIGABYTE.toByte(100)
86+
availableCapacity = SizeUnit.GIGABYTE.toByte(100)
87+
url = "/bk"
88+
fsid = "7ff218d9-f525-435f-8a40-3618d1772a64"
89+
monUrls = ["root:password@localhost/?monPort=7777"]
90+
}
91+
}
92+
}
93+
}
94+
95+
@Override
96+
void test() {
97+
env.create {
98+
testAddQcowImage()
99+
}
100+
}
101+
102+
void testAddQcowImage() {
103+
BackupStorageInventory bs = env.inventoryByName("ceph-bk")
104+
105+
env.simulator(CephBackupStorageBase.DOWNLOAD_IMAGE_PATH) { HttpEntity<String> e, EnvSpec spec ->
106+
def reply = new DownloadImageReply()
107+
reply.format = ImageConstant.RAW_FORMAT_STRING
108+
return reply
109+
}
110+
111+
ImageInventory img = addImage {
112+
name = "vm-snapshot"
113+
url = "http://192.168.1.1/vm-snapshot.qcow2"
114+
format = "iso"
115+
mediaType = "RootVolumeTemplate"
116+
system = false
117+
backupStorageUuids = [bs.uuid]
118+
}
119+
120+
assert img.format == ImageConstant.RAW_FORMAT_STRING
121+
}
122+
123+
@Override
124+
void clean() {
125+
env.delete()
126+
}
127+
128+
}
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package org.zstack.test.integration.image.platform
2+
3+
import org.springframework.http.HttpEntity
4+
import org.zstack.core.db.DatabaseFacade
5+
import org.zstack.header.image.ImageConstant
6+
import org.zstack.sdk.BackupStorageInventory
7+
import org.zstack.sdk.ImageInventory
8+
import org.zstack.sdk.VmInstanceInventory
9+
import org.zstack.storage.backup.sftp.SftpBackupStorageCommands
10+
import org.zstack.storage.backup.sftp.SftpBackupStorageConstant
11+
import org.zstack.test.integration.ZStackTest
12+
import org.zstack.testlib.BackupStorageSpec
13+
import org.zstack.testlib.EnvSpec
14+
import org.zstack.testlib.SubCase
15+
import org.zstack.utils.data.SizeUnit
16+
import org.zstack.utils.gson.JSONObjectUtil
17+
18+
/**
19+
* Created by shixin on 2018/03/21.
20+
*/
21+
class AddImageToSftpBackStorageCase extends SubCase {
22+
EnvSpec env
23+
DatabaseFacade dbf
24+
VmInstanceInventory vm
25+
26+
@Override
27+
void setup() {
28+
useSpring(ZStackTest.springSpec)
29+
}
30+
31+
@Override
32+
void environment() {
33+
env = env {
34+
instanceOffering {
35+
name = "instanceOffering"
36+
memory = SizeUnit.GIGABYTE.toByte(8)
37+
cpu = 4
38+
}
39+
diskOffering {
40+
name = "diskOffering"
41+
diskSize = SizeUnit.GIGABYTE.toByte(20)
42+
}
43+
44+
zone {
45+
name = "zone"
46+
description = "test"
47+
48+
cluster {
49+
name = "cluster"
50+
hypervisorType = "KVM"
51+
52+
kvm {
53+
name = "kvm"
54+
managementIp = "localhost"
55+
username = "root"
56+
password = "password"
57+
}
58+
59+
attachPrimaryStorage("local")
60+
attachL2Network("l2")
61+
}
62+
63+
localPrimaryStorage {
64+
name = "local"
65+
url = "/local_ps"
66+
}
67+
68+
l2NoVlanNetwork {
69+
name = "l2"
70+
physicalInterface = "eth0"
71+
72+
l3Network {
73+
name = "l3"
74+
75+
ip {
76+
startIp = "192.168.100.10"
77+
endIp = "192.168.100.100"
78+
netmask = "255.255.255.0"
79+
gateway = "192.168.100.1"
80+
}
81+
}
82+
}
83+
attachBackupStorage("sftp")
84+
sftpBackupStorage {
85+
name = "sftp"
86+
url = "/sftp"
87+
username = "username"
88+
password = "password"
89+
hostname = "hostname"
90+
}
91+
}
92+
}
93+
}
94+
95+
@Override
96+
void test() {
97+
env.create {
98+
testAddQcowImage()
99+
}
100+
}
101+
102+
void testAddQcowImage() {
103+
BackupStorageInventory bs = env.inventoryByName("sftp")
104+
105+
env.simulator(SftpBackupStorageConstant.DOWNLOAD_IMAGE_PATH) { HttpEntity<String> e, EnvSpec spec ->
106+
def rsp = new SftpBackupStorageCommands.DownloadResponse()
107+
rsp.format = ImageConstant.QCOW2_FORMAT_STRING
108+
return rsp
109+
}
110+
111+
ImageInventory img = addImage {
112+
name = "vm-snapshot"
113+
url = "http://192.168.1.1/vm-snapshot.qcow2"
114+
format = "iso"
115+
mediaType = "RootVolumeTemplate"
116+
system = false
117+
backupStorageUuids = [bs.uuid]
118+
}
119+
120+
assert img.format == ImageConstant.QCOW2_FORMAT_STRING
121+
}
122+
123+
@Override
124+
void clean() {
125+
env.delete()
126+
}
127+
128+
}

0 commit comments

Comments
 (0)