diff --git a/plugins/storage/volume/adaptive/src/main/java/org/apache/cloudstack/storage/datastore/adapter/ProviderVolume.java b/plugins/storage/volume/adaptive/src/main/java/org/apache/cloudstack/storage/datastore/adapter/ProviderVolume.java index 25577903e3d..a954560508c 100644 --- a/plugins/storage/volume/adaptive/src/main/java/org/apache/cloudstack/storage/datastore/adapter/ProviderVolume.java +++ b/plugins/storage/volume/adaptive/src/main/java/org/apache/cloudstack/storage/datastore/adapter/ProviderVolume.java @@ -35,6 +35,7 @@ public interface ProviderVolume { public String getExternalName(); public String getExternalConnectionId(); public enum AddressType { - FIBERWWN + FIBERWWN, + NVMETCP } } diff --git a/plugins/storage/volume/flasharray/src/main/java/org/apache/cloudstack/storage/datastore/adapter/flasharray/FlashArrayConnection.java b/plugins/storage/volume/flasharray/src/main/java/org/apache/cloudstack/storage/datastore/adapter/flasharray/FlashArrayConnection.java index 76cec9f70c4..b115035fda2 100644 --- a/plugins/storage/volume/flasharray/src/main/java/org/apache/cloudstack/storage/datastore/adapter/flasharray/FlashArrayConnection.java +++ b/plugins/storage/volume/flasharray/src/main/java/org/apache/cloudstack/storage/datastore/adapter/flasharray/FlashArrayConnection.java @@ -31,6 +31,8 @@ public class FlashArrayConnection { private FlashArrayVolume volume; @JsonProperty("lun") private Integer lun; + @JsonProperty("nsid") + private Integer nsid; public FlashArrayConnectionHostgroup getHostGroup() { return hostGroup; @@ -64,5 +66,12 @@ public class FlashArrayConnection { this.lun = lun; } + public Integer getNsid() { + return nsid; + } + + public void setNsid(Integer nsid) { + this.nsid = nsid; + } } diff --git a/plugins/storage/volume/flasharray/src/main/java/org/apache/cloudstack/storage/datastore/adapter/flasharray/FlashArrayVolume.java b/plugins/storage/volume/flasharray/src/main/java/org/apache/cloudstack/storage/datastore/adapter/flasharray/FlashArrayVolume.java index a3201a753a7..45d73586daa 100644 --- a/plugins/storage/volume/flasharray/src/main/java/org/apache/cloudstack/storage/datastore/adapter/flasharray/FlashArrayVolume.java +++ b/plugins/storage/volume/flasharray/src/main/java/org/apache/cloudstack/storage/datastore/adapter/flasharray/FlashArrayVolume.java @@ -27,6 +27,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; @JsonInclude(JsonInclude.Include.NON_NULL) public class FlashArrayVolume implements ProviderSnapshot { public static final String PURE_OUI = "24a9370"; + // The 3-byte OUI as it appears inside an NVMe EUI-128 (no trailing nibble). + // FC WWNs use a 7-hex-digit Pure OUI; NVMe NGUIDs embed the same vendor + // prefix in its raw 6-hex-digit form. + public static final String PURE_OUI_EUI = "24a937"; @JsonProperty("destroyed") private Boolean destroyed; @@ -107,6 +111,13 @@ public class FlashArrayVolume implements ProviderSnapshot { @JsonIgnore public String getAddress() { if (serial == null) return null; + if (AddressType.NVMETCP.equals(addressType)) { + // EUI-128 layout for FlashArray NVMe namespaces: + // 00 + serial[0:14] + + serial[14:24] + // This is the value the Linux kernel exposes as + // /dev/disk/by-id/nvme-eui. + return ("00" + serial.substring(0, 14) + PURE_OUI_EUI + serial.substring(14)).toLowerCase(); + } return ("6" + PURE_OUI + serial).toLowerCase(); } @Override