diff --git a/server/src/com/cloud/api/commands/DeletePreallocatedLunCmd.java b/server/src/com/cloud/api/commands/DeletePreallocatedLunCmd.java
new file mode 100644
index 00000000000..be9fde1811b
--- /dev/null
+++ b/server/src/com/cloud/api/commands/DeletePreallocatedLunCmd.java
@@ -0,0 +1,92 @@
+/**
+ * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+package com.cloud.server.api.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.BaseCmd;
+import com.cloud.api.Parameter;
+import com.cloud.api.ServerApiException;
+import com.cloud.server.ManagementServer;
+import com.cloud.utils.Pair;
+
+public class DeletePreallocatedLunCmd extends BaseCmd {
+
+ private static final Logger s_logger = Logger.getLogger(DeletePreallocatedLunCmd.class);
+
+ private static final String s_name = "deletePreallocatedLunsResponse";
+ private static final List> s_properties = new ArrayList>();
+
+ static {
+ s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.TRUE));
+ }
+
+ /////////////////////////////////////////////////////
+ //////////////// API parameters /////////////////////
+ /////////////////////////////////////////////////////
+
+ @Parameter(name="id", type=CommandType.LONG, required=true)
+ private Long id;
+
+
+ /////////////////////////////////////////////////////
+ /////////////////// Accessors ///////////////////////
+ /////////////////////////////////////////////////////
+
+ public Long getId() {
+ return id;
+ }
+
+
+ /////////////////////////////////////////////////////
+ /////////////// API Implementation///////////////////
+ /////////////////////////////////////////////////////
+
+ @Override
+ public List> execute(Map params) {
+ Long id = (Long) params.get(BaseCmd.Properties.ID.getName());
+
+ boolean success = false;
+ ManagementServer ms = getManagementServer();
+ try {
+ success = ms.unregisterPreallocatedLun(id);
+ } catch (Exception e) {
+ s_logger.error("Unable to unregister lun ", e);
+ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Unable to unregister lun due to: " + e.getMessage());
+ }
+
+ List> returnValues = new ArrayList>();
+ returnValues.add(new Pair(BaseCmd.Properties.SUCCESS.getName(), Boolean.toString(success)));
+ return returnValues;
+ }
+
+ @Override
+ public String getName() {
+ return s_name;
+ }
+
+ @Override
+ public List> getProperties() {
+ return s_properties;
+ }
+
+}
diff --git a/server/src/com/cloud/api/commands/RegisterPreallocatedLunCmd.java b/server/src/com/cloud/api/commands/RegisterPreallocatedLunCmd.java
new file mode 100644
index 00000000000..a7c3df1f306
--- /dev/null
+++ b/server/src/com/cloud/api/commands/RegisterPreallocatedLunCmd.java
@@ -0,0 +1,150 @@
+/**
+ * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+package com.cloud.server.api.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.BaseCmd;
+import com.cloud.api.Parameter;
+import com.cloud.api.ServerApiException;
+import com.cloud.server.ManagementServer;
+import com.cloud.storage.preallocatedlun.PreallocatedLunVO;
+import com.cloud.utils.Pair;
+
+public class RegisterPreallocatedLunCmd extends BaseCmd {
+ private static final Logger s_logger = Logger.getLogger(RegisterPreallocatedLunCmd.class);
+
+ private static final String s_name = "registerPreallocatedLunsResponse";
+ private static final List> s_properties = new ArrayList>();
+
+ static {
+ s_properties.add(new Pair(BaseCmd.Properties.DISK_SIZE, Boolean.TRUE));
+ s_properties.add(new Pair(BaseCmd.Properties.LUN, Boolean.TRUE));
+ s_properties.add(new Pair(BaseCmd.Properties.PORTAL, Boolean.TRUE));
+ s_properties.add(new Pair(BaseCmd.Properties.TAGS, Boolean.FALSE));
+ s_properties.add(new Pair(BaseCmd.Properties.TARGET_IQN, Boolean.TRUE));
+ s_properties.add(new Pair(BaseCmd.Properties.ZONE_ID, Boolean.TRUE));
+ }
+
+ /////////////////////////////////////////////////////
+ //////////////// API parameters /////////////////////
+ /////////////////////////////////////////////////////
+
+ @Parameter(name="disksize", type=CommandType.LONG, required=true)
+ private Long diskSize;
+
+ @Parameter(name="lun", type=CommandType.INTEGER, required=true)
+ private Integer lun;
+
+ @Parameter(name="portal", type=CommandType.STRING, required=true)
+ private String portal;
+
+ @Parameter(name="tags", type=CommandType.STRING)
+ private String tags;
+
+ @Parameter(name="targetiqn", type=CommandType.STRING, required=true)
+ private String targetIqn;
+
+ @Parameter(name="zoneid", type=CommandType.LONG, required=true)
+ private Long zoneId;
+
+ /////////////////////////////////////////////////////
+ /////////////////// Accessors ///////////////////////
+ /////////////////////////////////////////////////////
+
+ public Long getDiskSize() {
+ return diskSize;
+ }
+
+ public Integer getLun() {
+ return lun;
+ }
+
+ public String getPortal() {
+ return portal;
+ }
+
+ public String getTags() {
+ return tags;
+ }
+
+ public String getTargetIqn() {
+ return targetIqn;
+ }
+
+ public Long getZoneId() {
+ return zoneId;
+ }
+
+ /////////////////////////////////////////////////////
+ /////////////// API Implementation///////////////////
+ /////////////////////////////////////////////////////
+
+ @Override
+ public List> execute(Map params) {
+ String targetIqn = (String)params.get(BaseCmd.Properties.TARGET_IQN.getName());
+ String portal = (String)params.get(BaseCmd.Properties.PORTAL.getName());
+ Long size = (Long)params.get(BaseCmd.Properties.DISK_SIZE.getName());
+ Long dcId = (Long)params.get(BaseCmd.Properties.ZONE_ID.getName());
+ Integer lun = (Integer)params.get(BaseCmd.Properties.LUN.getName());
+ String t = (String)params.get(BaseCmd.Properties.TAGS.getName());
+
+ PreallocatedLunVO registeredLun = null;
+ ManagementServer ms = getManagementServer();
+ try {
+ registeredLun = ms.registerPreallocatedLun(targetIqn, portal, lun, size, dcId, t);
+ } catch (Exception e) {
+ s_logger.error("Unable to register lun", e);
+ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Unable to register lun");
+ }
+
+ List> embeddedObject = new ArrayList>();
+ List> returnValues = new ArrayList>();
+ if (registeredLun == null) {
+ throw new ServerApiException(BaseCmd.PARAM_ERROR, "Failed to register LUN.");
+ } else {
+ returnValues.add(new Pair(BaseCmd.Properties.ID.getName(), registeredLun.getId()));
+ returnValues.add(new Pair(BaseCmd.Properties.VOLUME_ID.getName(), registeredLun.getVolumeId()));
+ returnValues.add(new Pair(BaseCmd.Properties.ZONE_ID.getName(), registeredLun.getDataCenterId()));
+ returnValues.add(new Pair(BaseCmd.Properties.LUN.getName(), registeredLun.getLun()));
+ returnValues.add(new Pair(BaseCmd.Properties.PORTAL.getName(), registeredLun.getPortal()));
+ returnValues.add(new Pair(BaseCmd.Properties.SIZE.getName(), registeredLun.getSize()));
+ returnValues.add(new Pair(BaseCmd.Properties.TAKEN.getName(), registeredLun.getTaken()));
+ returnValues.add(new Pair(BaseCmd.Properties.TARGET_IQN.getName(), registeredLun.getTargetIqn()));
+
+ embeddedObject.add(new Pair("preallocatedlun", new Object[] { returnValues } ));
+ }
+
+ return embeddedObject;
+ }
+
+ @Override
+ public String getName() {
+ return s_name;
+ }
+
+ @Override
+ public List> getProperties() {
+ return s_properties;
+ }
+
+}