diff --git a/server/src/com/cloud/api/commands/UpdatePodCmd.java b/server/src/com/cloud/api/commands/UpdatePodCmd.java index 7ded253c9de..d8040d76c1c 100644 --- a/server/src/com/cloud/api/commands/UpdatePodCmd.java +++ b/server/src/com/cloud/api/commands/UpdatePodCmd.java @@ -18,36 +18,18 @@ 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.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.user.User; -import com.cloud.utils.Pair; +import com.cloud.api.BaseCmd.Manager; +@Implementation(method="editPod", manager=Manager.ConfigManager) public class UpdatePodCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdatePodCmd.class.getName()); private static final String s_name = "updatepodresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.CIDR, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.END_IP, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.GATEWAY, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.TRUE)); - s_properties.add(new Pair(BaseCmd.Properties.NAME, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.START_IP, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.USER_ID, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -106,57 +88,60 @@ public class UpdatePodCmd extends BaseCmd { public String getName() { return s_name; } - public List> getProperties() { - return s_properties; - } - @Override - public List> execute(Map params) { - Long podId = (Long) params.get(BaseCmd.Properties.ID.getName()); - String podName = (String) params.get(BaseCmd.Properties.NAME.getName()); - String gateway = (String) params.get(BaseCmd.Properties.GATEWAY.getName()); - String cidr = (String) params.get(BaseCmd.Properties.CIDR.getName()); - String startIp = (String) params.get(BaseCmd.Properties.START_IP.getName()); - String endIp = (String) params.get(BaseCmd.Properties.END_IP.getName()); - Long userId = (Long)params.get(BaseCmd.Properties.USER_ID.getName()); - - if (userId == null) { - userId = Long.valueOf(User.UID_SYSTEM); - } - - //verify parameters - HostPodVO pod = getManagementServer().findHostPodById(podId); - if (pod == null) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to find pod by id " + podId); - } - - long zoneId = pod.getDataCenterId(); - DataCenterVO zone = getManagementServer().findDataCenterById(zoneId); - if (zone == null) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to find zone by id " + zoneId); - } - - if (endIp != null && startIp == null) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "If an end IP is specified, a start IP must be specified."); - } - - HostPodVO updatedPod = null; - try { - updatedPod = getManagementServer().editPod(userId, podId, podName, gateway, cidr, startIp, endIp); - } catch (Exception ex) { - s_logger.error("Exception updating pod", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); - } + @Override + public String getResponse() { + // TODO Auto-generated method stub + return null; + } - List> returnValues = new ArrayList>(); - - if (updatedPod == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update pod; internal error."); - } else { - returnValues.add(new Pair(BaseCmd.Properties.SUCCESS.getName(), "true")); - returnValues.add(new Pair(BaseCmd.Properties.DISPLAY_TEXT.getName(), "Successfully updated pod.")); - } - - return returnValues; - } +// @Override +// public List> execute(Map params) { +// Long podId = (Long) params.get(BaseCmd.Properties.ID.getName()); +// String podName = (String) params.get(BaseCmd.Properties.NAME.getName()); +// String gateway = (String) params.get(BaseCmd.Properties.GATEWAY.getName()); +// String cidr = (String) params.get(BaseCmd.Properties.CIDR.getName()); +// String startIp = (String) params.get(BaseCmd.Properties.START_IP.getName()); +// String endIp = (String) params.get(BaseCmd.Properties.END_IP.getName()); +// Long userId = (Long)params.get(BaseCmd.Properties.USER_ID.getName()); +// +// if (userId == null) { +// userId = Long.valueOf(User.UID_SYSTEM); +// } +// +// //verify parameters +// HostPodVO pod = getManagementServer().findHostPodById(podId); +// if (pod == null) { +// throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to find pod by id " + podId); +// } +// +// long zoneId = pod.getDataCenterId(); +// DataCenterVO zone = getManagementServer().findDataCenterById(zoneId); +// if (zone == null) { +// throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to find zone by id " + zoneId); +// } +// +// if (endIp != null && startIp == null) { +// throw new ServerApiException(BaseCmd.PARAM_ERROR, "If an end IP is specified, a start IP must be specified."); +// } +// +// HostPodVO updatedPod = null; +// try { +// updatedPod = getManagementServer().editPod(userId, podId, podName, gateway, cidr, startIp, endIp); +// } catch (Exception ex) { +// s_logger.error("Exception updating pod", ex); +// throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); +// } +// +// List> returnValues = new ArrayList>(); +// +// if (updatedPod == null) { +// throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update pod; internal error."); +// } else { +// returnValues.add(new Pair(BaseCmd.Properties.SUCCESS.getName(), "true")); +// returnValues.add(new Pair(BaseCmd.Properties.DISPLAY_TEXT.getName(), "Successfully updated pod.")); +// } +// +// return returnValues; +// } } diff --git a/server/src/com/cloud/configuration/ConfigurationManager.java b/server/src/com/cloud/configuration/ConfigurationManager.java index 9b4b287d20f..925a642248d 100644 --- a/server/src/com/cloud/configuration/ConfigurationManager.java +++ b/server/src/com/cloud/configuration/ConfigurationManager.java @@ -25,6 +25,7 @@ import com.cloud.api.commands.DeleteDiskOfferingCmd; import com.cloud.api.commands.DeletePodCmd; import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; +import com.cloud.api.commands.UpdatePodCmd; import com.cloud.api.commands.UpdateServiceOfferingCmd; import com.cloud.api.commands.UpdateZoneCmd; import com.cloud.dc.DataCenterVO; @@ -149,9 +150,11 @@ public interface ConfigurationManager extends Manager { * @param startIp * @param endIp * @return Pod + * @throws InternalErrorException + * @throws InvalidParameterValueException */ - HostPodVO editPod(long userId, long podId, String newPodName, String gateway, String cidr, String startIp, String endIp) throws InvalidParameterValueException, InternalErrorException; - +// HostPodVO editPod(long userId, long podId, String newPodName, String gateway, String cidr, String startIp, String endIp) throws InvalidParameterValueException, InternalErrorException; + HostPodVO editPod(UpdatePodCmd cmd) throws InvalidParameterValueException, InternalErrorException; /** * Deletes a pod from the database. Will not allow you to delete pods that are being used anywhere in the system. * @param userId diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 9a412d6ec16..d286a89354f 100644 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -39,6 +39,7 @@ import com.cloud.api.commands.DeleteDiskOfferingCmd; import com.cloud.api.commands.DeletePodCmd; import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; +import com.cloud.api.commands.UpdatePodCmd; import com.cloud.api.commands.UpdateServiceOfferingCmd; import com.cloud.api.commands.UpdateZoneCmd; import com.cloud.configuration.dao.ConfigurationDao; @@ -105,6 +106,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager { @Inject AccountDao _accountDao; @Inject EventDao _eventDao; @Inject UserDao _userDao; + @Inject DataCenterDao _dcDao; + @Inject HostPodDao _hostPodDao; public boolean _premium; private int _maxVolumeSizeInGb; @@ -395,25 +398,54 @@ public class ConfigurationManagerImpl implements ConfigurationManager { } @DB - public HostPodVO editPod(long userId, long podId, String newPodName, String gateway, String cidr, String startIp, String endIp) throws InvalidParameterValueException, InternalErrorException { + public HostPodVO editPod(UpdatePodCmd cmd) throws InvalidParameterValueException, InternalErrorException + { + + //Input validation + String cidr = cmd.getCidr(); + String startIp = cmd.getStartIp(); + String endIp = cmd.getEndIp(); + String gateway = cmd.getGateway(); + Long id = cmd.getId(); + String name = cmd.getName(); + Long userId = UserContext.current().getUserId(); + + if (userId == null) { + userId = Long.valueOf(User.UID_SYSTEM); + } + + //verify parameters + HostPodVO pod = _hostPodDao.findById(id);; + if (pod == null) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to find pod by id " + id); + } + + long zoneId = pod.getDataCenterId(); + DataCenterVO zone = _dcDao.findById(zoneId); + if (zone == null) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to find zone by id " + zoneId); + } + + if (endIp != null && startIp == null) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, "If an end IP is specified, a start IP must be specified."); + } + // Make sure the pod exists - if (!validPod(podId)) { - throw new InvalidParameterValueException("A pod with ID: " + podId + " does not exist."); + if (!validPod(id)) { + throw new InvalidParameterValueException("A pod with ID: " + id + " does not exist."); } // If the gateway, CIDR, private IP range is being updated, check if the pod has allocated private IP addresses if (gateway!= null || cidr != null || startIp != null || endIp != null) { - if (podHasAllocatedPrivateIPs(podId)) { + if (podHasAllocatedPrivateIPs(id)) { throw new InternalErrorException("The specified pod has allocated private IP addresses, so its CIDR and IP address range cannot be changed."); } } - HostPodVO pod = _podDao.findById(podId); String oldPodName = pod.getName(); - long zoneId = pod.getDataCenterId(); - if (newPodName == null) { - newPodName = oldPodName; + if (name == null) { + name = oldPodName; } if (gateway == null) { @@ -424,8 +456,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager { cidr = pod.getCidrAddress() + "/" + pod.getCidrSize(); } - boolean checkForDuplicates = !oldPodName.equals(newPodName); - checkPodAttributes(podId, newPodName, pod.getDataCenterId(), gateway, cidr, startIp, endIp, checkForDuplicates); + boolean checkForDuplicates = !oldPodName.equals(name); + checkPodAttributes(id, name, pod.getDataCenterId(), gateway, cidr, startIp, endIp, checkForDuplicates); String cidrAddress = getCidrAddress(cidr); long cidrSize = getCidrSize(cidr); @@ -454,14 +486,14 @@ public class ConfigurationManagerImpl implements ConfigurationManager { ipRange = pod.getDescription(); } - pod.setName(newPodName); + pod.setName(name); pod.setDataCenterId(zoneId); pod.setGateway(gateway); pod.setCidrAddress(cidrAddress); pod.setCidrSize(cidrSize); pod.setDescription(ipRange); - if (!_podDao.update(podId, pod)) { + if (!_podDao.update(id, pod)) { throw new InternalErrorException("Failed to edit pod. Please contact Cloud Support."); } @@ -472,8 +504,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager { throw new InternalErrorException("Failed to edit pod. Please contact Cloud Support."); } - DataCenterVO zone = _zoneDao.findById(zoneId); - saveConfigurationEvent(userId, null, EventTypes.EVENT_POD_EDIT, "Successfully edited pod. New pod name is: " + newPodName + " and new zone name is: " + zone.getName() + ".", "podId=" + pod.getId(), "dcId=" + zone.getId(), "gateway=" + gateway, "cidr=" + cidr, "startIp=" + startIp, "endIp=" + endIp); + saveConfigurationEvent(userId, null, EventTypes.EVENT_POD_EDIT, "Successfully edited pod. New pod name is: " + name + " and new zone name is: " + zone.getName() + ".", "podId=" + pod.getId(), "dcId=" + zone.getId(), "gateway=" + gateway, "cidr=" + cidr, "startIp=" + startIp, "endIp=" + endIp); return pod; } diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index a0a8997c081..5a2c3f85777 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -991,7 +991,7 @@ public interface ManagementServer { * @param tags tags for the service offering. if null, no change will be made. if empty string, all tags will be removed. * @return the updated ServiceOfferingVO */ - ServiceOfferingVO updateServiceOffering(long userId, long serviceOfferingId, String name, String displayText, Boolean offerHA, Boolean useVirtualNetwork, String tags); +// ServiceOfferingVO updateServiceOffering(long userId, long serviceOfferingId, String name, String displayText, Boolean offerHA, Boolean useVirtualNetwork, String tags); /** * Adds a new pod to the database @@ -1017,7 +1017,7 @@ public interface ManagementServer { * @param endIp * @return Pod */ - HostPodVO editPod(long userId, long podId, String newPodName, String gateway, String cidr, String startIp, String endIp) throws InvalidParameterValueException, InternalErrorException; +// HostPodVO editPod(long userId, long podId, String newPodName, String gateway, String cidr, String startIp, String endIp) throws InvalidParameterValueException, InternalErrorException; // /** // * Deletes a pod from the database diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 05da8fec024..c2f236eb553 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -4328,10 +4328,10 @@ public class ManagementServerImpl implements ManagementServer { return _configMgr.createPod(userId, podName, zoneId, gateway, cidr, startIp, endIp); } - @Override - public HostPodVO editPod(long userId, long podId, String newPodName, String gateway, String cidr, String startIp, String endIp) throws InvalidParameterValueException, InternalErrorException { - return _configMgr.editPod(userId, podId, newPodName, gateway, cidr, startIp, endIp); - } +// @Override +// public HostPodVO editPod(long userId, long podId, String newPodName, String gateway, String cidr, String startIp, String endIp) throws InvalidParameterValueException, InternalErrorException { +// return _configMgr.editPod(userId, podId, newPodName, gateway, cidr, startIp, endIp); +// } // @Override // public void deletePod(long userId, long podId) throws InvalidParameterValueException, InternalErrorException {