Skip to content

Commit f18ff25

Browse files
author
shenjin
committed
<fix>[ceph]: support thirdparty_ceph to bm root volume
support thirdparty_ceph to bm root volume Resolves: ZSTAC-73396 Change-Id: I6f6f616777677a6f74696c6c736c737a626f7863 (cherry picked from commit 827e880)
1 parent 88b85d2 commit f18ff25

7 files changed

Lines changed: 190 additions & 6 deletions

File tree

conf/db/upgrade/V5.5.6__schema.sql

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,78 @@ ALTER TABLE `GuestVmScriptExecutedRecordDetailVO`
66

77
CALL ADD_COLUMN('PciDeviceVO', 'vmPciDeviceAddress', 'varchar(32)', 1, NULL);
88
CALL ADD_COLUMN('MdevDeviceVO', 'mdevDeviceAddress', 'varchar(32)', 1, NULL);
9+
10+
DELIMITER $$
11+
12+
CREATE PROCEDURE UpdateBareMetal2InstanceProvisionNicVO()
13+
BEGIN
14+
DECLARE instanceUuid_exists INT;
15+
DECLARE isPrimaryProvisionNic_exists_in_ProvisionNicVO INT;
16+
DECLARE isPrimaryProvisionNic_exists_in_ChassisNicVO INT;
17+
18+
DECLARE EXIT HANDLER FOR SQLEXCEPTION
19+
BEGIN
20+
ROLLBACK;
21+
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'An error occurred during the update process.';
22+
END;
23+
24+
START TRANSACTION;
25+
26+
SELECT COUNT(*)
27+
INTO instanceUuid_exists
28+
FROM INFORMATION_SCHEMA.COLUMNS
29+
WHERE TABLE_SCHEMA = 'zstack'
30+
AND TABLE_NAME = 'BareMetal2InstanceProvisionNicVO'
31+
AND COLUMN_NAME = 'instanceUuid';
32+
33+
IF instanceUuid_exists = 0 THEN
34+
CALL ADD_COLUMN('BareMetal2InstanceProvisionNicVO', 'instanceUuid', 'VARCHAR(32)', FALSE, '');
35+
36+
UPDATE `zstack`.`BareMetal2InstanceProvisionNicVO`
37+
SET `instanceUuid` = `uuid`;
38+
39+
ALTER TABLE `zstack`.`BareMetal2InstanceProvisionNicVO`
40+
DROP FOREIGN KEY `fkBareMetal2InstanceProvisionNicVOInstanceVO`;
41+
42+
CALL ADD_CONSTRAINT('BareMetal2InstanceProvisionNicVO', 'fkBareMetal2InstanceProvisionNicVOInstanceVO',
43+
'instanceUuid', 'BareMetal2InstanceVO', 'uuid', 'CASCADE');
44+
45+
UPDATE `zstack`.`BareMetal2InstanceProvisionNicVO`
46+
SET `uuid` = REPLACE(UUID(), '-', '');
47+
END IF;
48+
49+
SELECT COUNT(*)
50+
INTO isPrimaryProvisionNic_exists_in_ProvisionNicVO
51+
FROM INFORMATION_SCHEMA.COLUMNS
52+
WHERE TABLE_SCHEMA = 'zstack'
53+
AND TABLE_NAME = 'BareMetal2InstanceProvisionNicVO'
54+
AND COLUMN_NAME = 'isPrimaryProvisionNic';
55+
56+
IF isPrimaryProvisionNic_exists_in_ProvisionNicVO = 0 THEN
57+
CALL ADD_COLUMN('BareMetal2InstanceProvisionNicVO', 'isPrimaryProvisionNic', 'BOOLEAN', FALSE, FALSE);
58+
59+
UPDATE `zstack`.`BareMetal2InstanceProvisionNicVO`
60+
SET `isPrimaryProvisionNic` = TRUE;
61+
END IF;
62+
63+
SELECT COUNT(*)
64+
INTO isPrimaryProvisionNic_exists_in_ChassisNicVO
65+
FROM INFORMATION_SCHEMA.COLUMNS
66+
WHERE TABLE_SCHEMA = 'zstack'
67+
AND TABLE_NAME = 'BareMetal2ChassisNicVO'
68+
AND COLUMN_NAME = 'isPrimaryProvisionNic';
69+
70+
IF isPrimaryProvisionNic_exists_in_ChassisNicVO = 0 THEN
71+
CALL ADD_COLUMN('BareMetal2ChassisNicVO', 'isPrimaryProvisionNic', 'BOOLEAN', FALSE, FALSE);
72+
73+
UPDATE `zstack`.`BareMetal2ChassisNicVO`
74+
SET `isPrimaryProvisionNic` = TRUE
75+
WHERE `isProvisionNic` = TRUE;
76+
END IF;
77+
78+
COMMIT;
79+
END$$
80+
81+
DELIMITER ;
82+
CALL UpdateBareMetal2InstanceProvisionNicVO();
83+
DROP PROCEDURE IF EXISTS UpdateBareMetal2InstanceProvisionNicVO;

plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephPrimaryStorageBase.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,12 @@
5454
import org.zstack.header.storage.primary.*;
5555
import org.zstack.header.storage.primary.VolumeSnapshotCapability.VolumeSnapshotArrangementType;
5656
import org.zstack.header.storage.snapshot.*;
57+
import org.zstack.header.tag.SystemTagVO;
58+
import org.zstack.header.tag.SystemTagVO_;
5759
import org.zstack.header.vm.VmInstanceSpec;
5860
import org.zstack.header.vm.VmInstanceSpec.ImageSpec;
61+
import org.zstack.header.vm.VmInstanceVO;
62+
import org.zstack.header.vm.VmInstanceVO_;
5963
import org.zstack.header.vo.ResourceVO;
6064
import org.zstack.header.volume.*;
6165
import org.zstack.identity.AccountManager;
@@ -485,6 +489,8 @@ public static class CloneRsp extends AgentResponse {
485489
public Long size;
486490
public Long actualSize;
487491
public String installPath;
492+
public String volumeId;
493+
public String volumeStatus;
488494

489495
public String getInstallPath() {
490496
return installPath;
@@ -493,6 +499,22 @@ public String getInstallPath() {
493499
public void setInstallPath(String installPath) {
494500
this.installPath = installPath;
495501
}
502+
503+
public String getVolumeId() {
504+
return volumeId;
505+
}
506+
507+
public void setVolumeId(String volumeId) {
508+
this.volumeId = volumeId;
509+
}
510+
511+
public String getVolumeStatus() {
512+
return volumeStatus;
513+
}
514+
515+
public void setVolumeStatus(String volumeStatus) {
516+
this.volumeStatus = volumeStatus;
517+
}
496518
}
497519

498520
public static class FlattenCmd extends AgentCommand implements HasThreadContext {
@@ -2636,6 +2658,40 @@ public void run(final FlowTrigger trigger, Map data) {
26362658
CloneCmd cmd = new CloneCmd();
26372659
cmd.srcPath = cloneInstallPath;
26382660
cmd.dstPath = volumePath;
2661+
List<CephPrimaryStorageCheckInstanceTypeExtensionPoint> exts = pluginRgty.getExtensionList(CephPrimaryStorageCheckInstanceTypeExtensionPoint.class);
2662+
for (CephPrimaryStorageCheckInstanceTypeExtensionPoint ext : exts) {
2663+
Boolean result = ext.isSupportCloneByThirdParty(msg.getVolume().getVmInstanceUuid());
2664+
if (!result) {
2665+
break;
2666+
}
2667+
boolean isRootVolume = Q.New(VolumeVO.class)
2668+
.eq(VolumeVO_.uuid, msg.getVolume().getUuid())
2669+
.eq(VolumeVO_.type, VolumeType.Root)
2670+
.isExists();
2671+
boolean isBareMetal2Instance = Q.New(VmInstanceVO.class)
2672+
.eq(VmInstanceVO_.uuid, msg.getVolume().getVmInstanceUuid())
2673+
.eq(VmInstanceVO_.type, "baremetal2")
2674+
.isExists();
2675+
boolean hasToken = CephSystemTags.THIRDPARTY_PLATFORM.hasTag(msg.getPrimaryStorageUuid());
2676+
if (isRootVolume && isBareMetal2Instance && hasToken) {
2677+
CephPrimaryStorageVO cephPrimaryStorageVO = dbf.findByUuid(msg.getPrimaryStorageUuid(), CephPrimaryStorageVO.class);
2678+
String monIp = cephPrimaryStorageVO.getMons()
2679+
.stream()
2680+
.filter(v -> v.getStatus() == MonStatus.Connected)
2681+
.map(CephPrimaryStorageMonVO::getHostname)
2682+
.findAny()
2683+
.orElseThrow(() -> new OperationFailureException(
2684+
operr("all ceph mons of primary storage[uuid:%s] are not in Connected state", cephPrimaryStorageVO.getUuid())
2685+
));
2686+
cmd.token = CephSystemTags.THIRDPARTY_PLATFORM.getTokenByResourceUuid(msg.getPrimaryStorageUuid(),
2687+
CephSystemTags.THIRDPARTY_PLATFORM_TOKEN);
2688+
cmd.monIp = monIp;
2689+
cmd.tpTimeout = CephGlobalConfig.THIRD_PARTY_SDK_TIMEOUT.value(String.class);
2690+
VolumeVO vo = Q.New(VolumeVO.class)
2691+
.eq(VolumeVO_.uuid, msg.getVolume().getUuid()).find();
2692+
ext.convertToBlockVolume(vo);
2693+
}
2694+
}
26392695

26402696
httpCall(CLONE_PATH, cmd, CloneRsp.class, new ReturnValueCompletion<CloneRsp>(trigger) {
26412697
@Override
@@ -2646,6 +2702,14 @@ public void fail(ErrorCode err) {
26462702
@Override
26472703
public void success(CloneRsp ret) {
26482704
actualSize = ret.actualSize;
2705+
List<CephPrimaryStorageCheckInstanceTypeExtensionPoint> exts = pluginRgty.getExtensionList(CephPrimaryStorageCheckInstanceTypeExtensionPoint.class);
2706+
for (CephPrimaryStorageCheckInstanceTypeExtensionPoint ext : exts) {
2707+
if (!ext.isBlockVolume(msg.getVolume().getUuid())) {
2708+
break;
2709+
}
2710+
volumePath = ret.installPath == null ? volumePath : makeVolumeInstallPathByTargetPool(ret.installPath, targetCephPoolName);
2711+
ext.populateBlockVolumeDetails(msg.getVolume().getUuid(), ret.volumeId, ret.volumeStatus);
2712+
}
26492713
trigger.next();
26502714
}
26512715
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.zstack.storage.ceph.primary;
2+
3+
import org.zstack.header.volume.VolumeVO;
4+
5+
public interface CephPrimaryStorageCheckInstanceTypeExtensionPoint {
6+
Boolean isSupportCloneByThirdParty(String uuid);
7+
8+
void convertToBlockVolume(VolumeVO vo);
9+
10+
Boolean isBlockVolume(String uuid);
11+
12+
void populateBlockVolumeDetails(String uuid, String volumeId, String volumeStatus);
13+
}

sdk/src/main/java/org/zstack/sdk/BareMetal2ChassisNicInventory.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ public java.lang.Boolean getIsProvisionNic() {
5252
return this.isProvisionNic;
5353
}
5454

55+
public java.lang.Boolean isPrimaryProvisionNic;
56+
public void setIsPrimaryProvisionNic(java.lang.Boolean isPrimaryProvisionNic) {
57+
this.isPrimaryProvisionNic = isPrimaryProvisionNic;
58+
}
59+
public java.lang.Boolean getIsPrimaryProvisionNic() {
60+
return this.isPrimaryProvisionNic;
61+
}
62+
5563
public java.sql.Timestamp createDate;
5664
public void setCreateDate(java.sql.Timestamp createDate) {
5765
this.createDate = createDate;

sdk/src/main/java/org/zstack/sdk/BareMetal2InstanceInventory.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.zstack.sdk;
22

3-
import org.zstack.sdk.BareMetal2InstanceProvisionNicInventory;
3+
44

55
public class BareMetal2InstanceInventory extends org.zstack.sdk.VmInstanceInventory {
66

@@ -84,12 +84,12 @@ public boolean getIsLatestAgent() {
8484
return this.isLatestAgent;
8585
}
8686

87-
public BareMetal2InstanceProvisionNicInventory provisionNic;
88-
public void setProvisionNic(BareMetal2InstanceProvisionNicInventory provisionNic) {
89-
this.provisionNic = provisionNic;
87+
public java.util.List provisionNics;
88+
public void setProvisionNics(java.util.List provisionNics) {
89+
this.provisionNics = provisionNics;
9090
}
91-
public BareMetal2InstanceProvisionNicInventory getProvisionNic() {
92-
return this.provisionNic;
91+
public java.util.List getProvisionNics() {
92+
return this.provisionNics;
9393
}
9494

9595
}

sdk/src/main/java/org/zstack/sdk/BareMetal2InstanceProvisionNicInventory.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,22 @@ public java.lang.String getGateway() {
5252
return this.gateway;
5353
}
5454

55+
public java.lang.String instanceUuid;
56+
public void setInstanceUuid(java.lang.String instanceUuid) {
57+
this.instanceUuid = instanceUuid;
58+
}
59+
public java.lang.String getInstanceUuid() {
60+
return this.instanceUuid;
61+
}
62+
63+
public java.lang.Boolean isPrimaryProvisionNic;
64+
public void setIsPrimaryProvisionNic(java.lang.Boolean isPrimaryProvisionNic) {
65+
this.isPrimaryProvisionNic = isPrimaryProvisionNic;
66+
}
67+
public java.lang.Boolean getIsPrimaryProvisionNic() {
68+
return this.isPrimaryProvisionNic;
69+
}
70+
5571
public java.lang.String metadata;
5672
public void setMetadata(java.lang.String metadata) {
5773
this.metadata = metadata;

utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7678,6 +7678,10 @@ public class CloudOperationsErrorCode {
76787678

76797679
public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10087 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10087";
76807680

7681+
public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10088 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10088";
7682+
7683+
public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10089 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10089";
7684+
76817685
public static final String ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10000 = "ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10000";
76827686

76837687
public static final String ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10001 = "ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10001";
@@ -13706,6 +13710,10 @@ public class CloudOperationsErrorCode {
1370613710

1370713711
public static final String ORG_ZSTACK_BAREMETAL2_CHASSIS_10023 = "ORG_ZSTACK_BAREMETAL2_CHASSIS_10023";
1370813712

13713+
public static final String ORG_ZSTACK_BAREMETAL2_CHASSIS_10024 = "ORG_ZSTACK_BAREMETAL2_CHASSIS_10024";
13714+
13715+
public static final String ORG_ZSTACK_BAREMETAL2_CHASSIS_10025 = "ORG_ZSTACK_BAREMETAL2_CHASSIS_10025";
13716+
1370913717
public static final String ORG_ZSTACK_BAREMETAL2_CLUSTER_10000 = "ORG_ZSTACK_BAREMETAL2_CLUSTER_10000";
1371013718

1371113719
public static final String ORG_ZSTACK_BAREMETAL2_CLUSTER_10001 = "ORG_ZSTACK_BAREMETAL2_CLUSTER_10001";

0 commit comments

Comments
 (0)