diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in
index d5ace796fe4..07f047eb3ea 100644
--- a/client/tomcatconf/commands.properties.in
+++ b/client/tomcatconf/commands.properties.in
@@ -200,6 +200,6 @@ authorizeNetworkGroupIngress=com.cloud.api.commands.AuthorizeNetworkGroupIngress
revokeNetworkGroupIngress=com.cloud.api.commands.RevokeNetworkGroupIngressCmd;11
listNetworkGroups=com.cloud.api.commands.ListNetworkGroupsCmd;11
-registerPreallocatedLun=com.cloud.server.api.commands.RegisterPreallocatedLunCmd;1
-deletePreallocatedLun=com.cloud.server.api.commands.DeletePreallocatedLunCmd;1
+registerPreallocatedLun=com.cloud.api.commands.RegisterPreallocatedLunCmd;1
+deletePreallocatedLun=com.cloud.api.commands.DeletePreallocatedLunCmd;1
listPreallocatedLuns=com.cloud.api.commands.ListPreallocatedLunsCmd;1
\ No newline at end of file
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..7d9e2e11f95
--- /dev/null
+++ b/server/src/com/cloud/api/commands/DeletePreallocatedLunCmd.java
@@ -0,0 +1,71 @@
+/**
+ * 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.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.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));
+ }
+
+ @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..cce5a884588
--- /dev/null
+++ b/server/src/com/cloud/api/commands/RegisterPreallocatedLunCmd.java
@@ -0,0 +1,95 @@
+/**
+ * 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.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.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.TARGET_IQN, Boolean.TRUE));
+ s_properties.add(new Pair(BaseCmd.Properties.PORTAL, Boolean.TRUE));
+ s_properties.add(new Pair(BaseCmd.Properties.ZONE_ID, Boolean.TRUE));
+ 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.TAGS, Boolean.FALSE));
+ }
+
+ @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 due to " + e.getMessage());
+ }
+
+ 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;
+ }
+
+}