From 5f3e0c57839d58ac7acca3f7749e885b2280eebd Mon Sep 17 00:00:00 2001 From: anthony Date: Fri, 15 Jun 2012 11:27:53 -0700 Subject: [PATCH 01/64] CS-15155 : after system VMs boot up, destroy CD virtual device for System VM when reconnect XenServer host, try to destroy CD virtual device for System VM, this is for upgrade --- .../xen/resource/CitrixResourceBase.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 121675ee294..39172423e36 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -1104,6 +1104,27 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return cdromVBD; } + protected void destroyPatchVbd(Connection conn, String vmName) throws XmlRpcException, XenAPIException { + try { + if( !vmName.startsWith("r-") && !vmName.startsWith("s-") && !vmName.startsWith("v-") ) { + return; + } + Set vms = VM.getByNameLabel(conn, vmName); + for ( VM vm : vms ) { + Set vbds = vm.getVBDs(conn); + for( VBD vbd : vbds ) { + if (vbd.getType(conn) == Types.VbdType.CD ) { + vbd.eject(conn); + vbd.destroy(conn); + break; + } + } + } + } catch (Exception e) { + s_logger.debug("Cannot destory CD-ROM device for VM " + vmName + " due to " + e.toString(), e); + } + } + protected CheckSshAnswer execute(CheckSshCommand cmd) { Connection conn = getConnection(); String vmName = cmd.getName(); @@ -1119,6 +1140,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (result != null) { return new CheckSshAnswer(cmd, "Can not ping System vm " + vmName + "due to:" + result); } + destroyPatchVbd(conn, vmName); } catch (Exception e) { return new CheckSshAnswer(cmd, e); } @@ -2683,7 +2705,15 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe callHostPlugin(conn, "vmopsSnapshot", "unmountSnapshotsDir", "dcId", dcId.toString()); setupLinkLocalNetwork(conn); - + // try to destroy CD-ROM device for all system VMs on this host + try { + Host host = Host.getByUuid(conn, _host.uuid); + Set vms = host.getResidentVMs(conn); + for ( VM vm : vms ) { + destroyPatchVbd(conn, vm.getNameLabel(conn)); + } + } catch (Exception e) { + } try { boolean result = cleanupHaltedVms(conn); if (!result) { From 810151586be7cc7f2e0aab482eaf0358b0567e1b Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Thu, 10 May 2012 12:55:57 -0700 Subject: [PATCH 02/64] 1) Allow having multiple shared networks with the same vlan 2) Added new parameter to listNetworks command - canUseForDeploy(boolean). When true, list only networks that can be used for vm deployment (networks have enough ip addresses to allocate from for the vm) Conflicts: api/src/com/cloud/api/ApiConstants.java server/src/com/cloud/api/ApiDBUtils.java server/src/com/cloud/api/ApiResponseHelper.java server/src/com/cloud/network/NetworkManagerImpl.java server/src/com/cloud/network/dao/IPAddressDao.java --- api/src/com/cloud/api/ApiConstants.java | 1 + .../cloud/api/commands/ListNetworksCmd.java | 13 ++- .../cloud/api/response/NetworkResponse.java | 7 ++ api/src/com/cloud/network/NetworkService.java | 6 ++ server/src/com/cloud/api/ApiDBUtils.java | 10 +- .../src/com/cloud/api/ApiResponseHelper.java | 17 ++-- .../com/cloud/network/NetworkManagerImpl.java | 99 +++++++++++++------ .../com/cloud/network/dao/IPAddressDao.java | 6 +- .../cloud/network/dao/IPAddressDaoImpl.java | 11 ++- .../src/com/cloud/network/dao/NetworkDao.java | 4 +- .../com/cloud/network/dao/NetworkDaoImpl.java | 29 +++++- 11 files changed, 152 insertions(+), 51 deletions(-) diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java index f7acd5168be..7872cba309d 100755 --- a/api/src/com/cloud/api/ApiConstants.java +++ b/api/src/com/cloud/api/ApiConstants.java @@ -357,6 +357,7 @@ public class ApiConstants { public static final String VSM_CONFIG_STATE = "vsmconfigstate"; public static final String VSM_DEVICE_STATE = "vsmdevicestate"; public static final String ADD_VSM_FLAG = "addvsmflag"; + public static final String CAN_USE_FOR_DEPLOY = "canusefordeploy"; public enum HostDetails { all, capacity, events, stats, min; diff --git a/api/src/com/cloud/api/commands/ListNetworksCmd.java b/api/src/com/cloud/api/commands/ListNetworksCmd.java index a92feaa2067..8f665b90776 100644 --- a/api/src/com/cloud/api/commands/ListNetworksCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworksCmd.java @@ -63,14 +63,17 @@ public class ListNetworksCmd extends BaseListProjectAndAccountResourcesCmd { @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="list networks by physical network id") private Long physicalNetworkId; - @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, collectionType=CommandType.STRING, description="list network offerings supporting certain services") + @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, collectionType=CommandType.STRING, description="list networks supporting certain services") private List supportedServices; - @Parameter(name=ApiConstants.RESTART_REQUIRED, type=CommandType.BOOLEAN, description="list network offerings by restartRequired option") + @Parameter(name=ApiConstants.RESTART_REQUIRED, type=CommandType.BOOLEAN, description="list networks by restartRequired option") private Boolean restartRequired; @Parameter(name=ApiConstants.SPECIFY_IP_RANGES, type=CommandType.BOOLEAN, description="true if need to list only networks which support specifying ip ranges") private Boolean specifyIpRanges; + + @Parameter(name=ApiConstants.CAN_USE_FOR_DEPLOY, type=CommandType.BOOLEAN, description="list networks available for vm deployment") + private Boolean canUseForDeploy; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -115,8 +118,12 @@ public class ListNetworksCmd extends BaseListProjectAndAccountResourcesCmd { public Boolean getSpecifyIpRanges() { return specifyIpRanges; } + + public Boolean canUseForDeploy() { + return canUseForDeploy; + } - ///////////////////////////////////////////////////// + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @Override diff --git a/api/src/com/cloud/api/response/NetworkResponse.java b/api/src/com/cloud/api/response/NetworkResponse.java index a8b2e5f5099..4c16240ff8d 100644 --- a/api/src/com/cloud/api/response/NetworkResponse.java +++ b/api/src/com/cloud/api/response/NetworkResponse.java @@ -131,6 +131,9 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes @SerializedName(ApiConstants.SPECIFY_IP_RANGES) @Param(description="true if network supports specifying ip ranges, false otherwise") private Boolean specifyIpRanges; + @SerializedName(ApiConstants.CAN_USE_FOR_DEPLOY) @Param(description="list networks available for vm deployment") + private Boolean canUseForDeploy; + public void setId(Long id) { this.id.setValue(id); } @@ -272,4 +275,8 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes public void setSpecifyIpRanges(Boolean specifyIpRanges) { this.specifyIpRanges = specifyIpRanges; } + + public void setCanUseForDeploy(Boolean canUseForDeploy) { + this.canUseForDeploy = canUseForDeploy; + } } diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index 99f8014e6a6..d7e40a977c6 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -134,4 +134,10 @@ public interface NetworkService { List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner); + /** + * @param network + * @return + */ + boolean canUseForDeploy(Network network); + } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index f4948860183..4d2eea42f77 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -49,6 +49,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.IPAddressVO; import com.cloud.network.IpAddress; import com.cloud.network.LoadBalancerVO; +import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; @@ -84,6 +85,7 @@ import com.cloud.storage.GuestOS; import com.cloud.storage.GuestOSCategoryVO; import com.cloud.storage.Snapshot; import com.cloud.storage.SnapshotVO; +import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.StorageStats; @@ -91,9 +93,8 @@ import com.cloud.storage.UploadVO; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateSwiftVO; import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.VolumeHostVO; -import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Volume.Type; +import com.cloud.storage.VolumeHostVO; import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.GuestOSCategoryDao; @@ -733,7 +734,7 @@ public class ApiDBUtils { } public static long countFreePublicIps() { - return _ipAddressDao.countFreeIPs(); + return _ipAddressDao.countFreePublicIPs(); } public static long findDefaultRouterServiceOffering() { @@ -748,4 +749,7 @@ public class ApiDBUtils { public static String getHaTag() { return _haMgr.getHaTag(); } + public static boolean canUseForDeploy(Network network) { + return _networkMgr.canUseForDeploy(network); + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index eb64d98512c..1112dba0e1f 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -1021,7 +1021,7 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setCreated(volume.getCreated()); volResponse.setState(volume.getState().toString()); if(volume.getState() == Volume.State.UploadOp){ - com.cloud.storage.VolumeHostVO volumeHostRef = ApiDBUtils.findVolumeHostRef(volume.getId(), volume.getDataCenterId()); + com.cloud.storage.VolumeHostVO volumeHostRef = ApiDBUtils.findVolumeHostRef(volume.getId(), volume.getDataCenterId()); volResponse.setSize(volumeHostRef.getSize()); volResponse.setCreated(volumeHostRef.getCreated()); Account caller = UserContext.current().getCaller(); @@ -1039,17 +1039,17 @@ public class ApiResponseHelper implements ResponseGenerator { } else { volumeStatus = volumeHostRef.getErrorString(); if(volumeHostRef.getDownloadState() == VMTemplateHostVO.Status.NOT_DOWNLOADED){ - volResponse.setState("UploadNotStarted"); + volResponse.setState("UploadNotStarted"); }else { - volResponse.setState("UploadError"); + volResponse.setState("UploadError"); } } volResponse.setStatus(volumeStatus); } else if (volumeHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { - volResponse.setStatus("Upload Complete"); - volResponse.setState("Uploaded"); + volResponse.setStatus("Upload Complete"); + volResponse.setState("Uploaded"); } else { - volResponse.setStatus("Successfully Installed"); + volResponse.setStatus("Successfully Installed"); } } @@ -1099,7 +1099,7 @@ public class ApiResponseHelper implements ResponseGenerator { // return hypervisor for ROOT and Resource domain only Account caller = UserContext.current().getCaller(); if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && volume.getState() != Volume.State.UploadOp) { - volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); + volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); } volResponse.setAttached(volume.getAttached()); @@ -2804,7 +2804,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setBroadcastUri(broadcastUri); String vlan="N/A"; if (broadcastUri.startsWith("vlan")) { - vlan = broadcastUri.substring("vlan://".length(), broadcastUri.length()); + vlan = broadcastUri.substring("vlan://".length(), broadcastUri.length()); } response.setVlan(vlan); } @@ -2884,6 +2884,7 @@ public class ApiResponseHelper implements ResponseGenerator { } response.setSpecifyIpRanges(network.getSpecifyIpRanges()); + response.setCanUseForDeploy(ApiDBUtils.canUseForDeploy(network)); response.setObjectName("network"); return response; diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 60c98b86d96..783f9e6f089 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2458,8 +2458,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @DB - public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, String cidr, String vlanId, String networkDomain, Account owner, boolean isSecurityGroupEnabled, - Long domainId, PhysicalNetwork pNtwk, long zoneId, ACLType aclType, Boolean subdomainAccess) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { + public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, + String cidr, String vlanId, String networkDomain, Account owner, boolean isSecurityGroupEnabled, + Long domainId, PhysicalNetwork pNtwk, long zoneId, ACLType aclType, Boolean subdomainAccess) + throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(networkOfferingId); // this method supports only guest network creation @@ -2549,16 +2551,22 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - // Don't allow to create network with vlan that already exists in the system if (vlanId != null) { String uri = "vlan://" + vlanId; - List networks = _networksDao.listBy(zoneId, uri); - if ((networks != null && !networks.isEmpty())) { - // TBD: If zoneId and vlanId are being passed in as params, how to get the VO object or class? Hard code - // the tablename in a call to addProxyObject(). - throw new InvalidParameterValueException("Network with vlan " + vlanId + " already exists in zone " + zoneId); + // For Isolated networks, don't allow to create network with vlan that already exists in the zone + if (ntwkOff.getGuestType() == GuestType.Isolated) { + if (_networksDao.countByZoneAndUri(zoneId, uri) > 0) { + throw new InvalidParameterValueException("Network with vlan " + vlanId + " already exists in zone " + zoneId); + } + } else { + //don't allow to create Shared network with Vlan that already exists in the zone for Isolated networks + if (_networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Isolated) > 0) { + throw new InvalidParameterValueException("Isolated network with vlan " + vlanId + " already exists " + + "in zone " + zoneId); + } } } + // If networkDomain is not specified, take it from the global configuration if (areServicesSupportedByNetworkOffering(networkOfferingId, Service.Dns)) { Map dnsCapabilities = getNetworkOfferingServiceCapabilities(_configMgr.getNetworkOffering(networkOfferingId), Service.Dns); @@ -2690,6 +2698,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag boolean listAll = cmd.listAll(); boolean isRecursive = cmd.isRecursive(); Boolean specifyIpRanges = cmd.getSpecifyIpRanges(); + Boolean canUseForDeploy = cmd.canUseForDeploy(); // 1) default is system to false if not specified // 2) reset parameter to false if it's specified by the regular user @@ -2831,10 +2840,32 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - return supportedNetworks; - } else { - return networksToReturn; + networksToReturn=supportedNetworks; } + + if (canUseForDeploy != null) { + List networksForDeploy = new ArrayList(); + for (NetworkVO network : networksToReturn) { + if (canUseForDeploy(network) == canUseForDeploy) { + networksForDeploy.add(network); + } + } + + networksToReturn=networksForDeploy; + } + + return networksToReturn; + } + + @Override + public boolean canUseForDeploy(Network network) { + boolean hasFreeIps = true; + if (network.getGuestType() == GuestType.Shared) { + hasFreeIps = _ipAddressDao.countFreeIPsInNetwork(network.getId()) > 0; + } else { + hasFreeIps = (getAvailableIps(network, null)).size() > 0; + } + return hasFreeIps; } private SearchCriteria buildNetworkSearchCriteria(SearchBuilder sb, String keyword, Long id, Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId, @@ -4322,36 +4353,23 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @DB - public String acquireGuestIpAddress(Network network, String requestedIp) { - List ips = _nicDao.listIpAddressInNetwork(network.getId()); - String[] cidr = network.getCidr().split("/"); - Set allPossibleIps = NetUtils.getAllIpsFromCidr(cidr[0], Integer.parseInt(cidr[1])); - Set usedIps = new TreeSet(); - + public String acquireGuestIpAddress(Network network, String requestedIp) { if (requestedIp != null && requestedIp.equals(network.getGateway())) { s_logger.warn("Requested ip address " + requestedIp + " is used as a gateway address in network " + network); return null; } - for (String ip : ips) { - if (requestedIp != null && requestedIp.equals(ip)) { - s_logger.warn("Requested ip address " + requestedIp + " is already in use in network " + network); - return null; - } - - usedIps.add(NetUtils.ip2Long(ip)); - } - if (usedIps.size() != 0) { - allPossibleIps.removeAll(usedIps); - } - if (allPossibleIps.isEmpty()) { + Set availableIps = getAvailableIps(network, requestedIp); + + if (availableIps.isEmpty()) { return null; } - Long[] array = allPossibleIps.toArray(new Long[allPossibleIps.size()]); + Long[] array = availableIps.toArray(new Long[availableIps.size()]); if (requestedIp != null) { // check that requested ip has the same cidr + String[] cidr = network.getCidr().split("/"); boolean isSameCidr = NetUtils.sameSubnetCIDR(requestedIp, NetUtils.long2Ip(array[0]), Integer.parseInt(cidr[1])); if (!isSameCidr) { s_logger.warn("Requested ip address " + requestedIp + " doesn't belong to the network " + network + " cidr"); @@ -4368,6 +4386,27 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return result; } + protected Set getAvailableIps(Network network, String requestedIp) { + String[] cidr = network.getCidr().split("/"); + List ips = _nicDao.listIpAddressInNetwork(network.getId()); + Set allPossibleIps = NetUtils.getAllIpsFromCidr(cidr[0], Integer.parseInt(cidr[1])); + Set usedIps = new TreeSet(); + + for (String ip : ips) { + if (requestedIp != null && requestedIp.equals(ip)) { + s_logger.warn("Requested ip address " + requestedIp + " is already in use in network" + network); + return null; + } + + usedIps.add(NetUtils.ip2Long(ip)); + } + if (usedIps.size() != 0) { + allPossibleIps.removeAll(usedIps); + } + return allPossibleIps; + } + + private String getZoneNetworkDomain(long zoneId) { return _dcDao.findById(zoneId).getDomain(); } diff --git a/server/src/com/cloud/network/dao/IPAddressDao.java b/server/src/com/cloud/network/dao/IPAddressDao.java index 711a7fe8e1c..4e086435c38 100755 --- a/server/src/com/cloud/network/dao/IPAddressDao.java +++ b/server/src/com/cloud/network/dao/IPAddressDao.java @@ -55,5 +55,7 @@ public interface IPAddressDao extends GenericDao { List listByPhysicalNetworkId(long physicalNetworkId); - long countFreeIPs(); -} + long countFreePublicIPs(); + + long countFreeIPsInNetwork(long networkId); +} diff --git a/server/src/com/cloud/network/dao/IPAddressDaoImpl.java b/server/src/com/cloud/network/dao/IPAddressDaoImpl.java index 425c215c430..02615e3fcc9 100755 --- a/server/src/com/cloud/network/dao/IPAddressDaoImpl.java +++ b/server/src/com/cloud/network/dao/IPAddressDaoImpl.java @@ -110,6 +110,7 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen CountFreePublicIps = createSearchBuilder(Long.class); CountFreePublicIps.select(null, Func.COUNT, null); CountFreePublicIps.and("state", CountFreePublicIps.entity().getState(), SearchCriteria.Op.EQ); + CountFreePublicIps.and("networkId", CountFreePublicIps.entity().getSourceNetworkId(), SearchCriteria.Op.EQ); SearchBuilder join = _vlanDao.createSearchBuilder(); join.and("vlanType", join.entity().getVlanType(), Op.EQ); CountFreePublicIps.join("vlans", join, CountFreePublicIps.entity().getVlanId(), join.entity().getId(), JoinBuilder.JoinType.INNER); @@ -293,10 +294,18 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen } @Override - public long countFreeIPs() { + public long countFreePublicIPs() { SearchCriteria sc = CountFreePublicIps.create(); sc.setParameters("state", State.Free); sc.setJoinParameters("vlans", "vlanType", VlanType.VirtualNetwork); return customSearch(sc, null).get(0); } + + @Override + public long countFreeIPsInNetwork(long networkId) { + SearchCriteria sc = CountFreePublicIps.create(); + sc.setParameters("state", State.Free); + sc.setParameters("networkId", networkId); + return customSearch(sc, null).get(0); + } } diff --git a/server/src/com/cloud/network/dao/NetworkDao.java b/server/src/com/cloud/network/dao/NetworkDao.java index df74f238409..801c721f958 100644 --- a/server/src/com/cloud/network/dao/NetworkDao.java +++ b/server/src/com/cloud/network/dao/NetworkDao.java @@ -54,7 +54,9 @@ public interface NetworkDao extends GenericDao { List listBy(long accountId, long networkId); - List listBy(long zoneId, String broadcastUri); + long countByZoneAndUri(long zoneId, String broadcastUri); + + long countByZoneUriAndGuestType(long zoneId, String broadcastUri, GuestType guestType); List listByZone(long zoneId); diff --git a/server/src/com/cloud/network/dao/NetworkDaoImpl.java b/server/src/com/cloud/network/dao/NetworkDaoImpl.java index f907ce8116b..acaece4b7d1 100644 --- a/server/src/com/cloud/network/dao/NetworkDaoImpl.java +++ b/server/src/com/cloud/network/dao/NetworkDaoImpl.java @@ -21,6 +21,7 @@ import javax.persistence.TableGenerator; import com.cloud.acl.ControlledEntity.ACLType; import com.cloud.network.Network; +import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkAccountDaoImpl; @@ -62,6 +63,7 @@ public class NetworkDaoImpl extends GenericDaoBase implements N final GenericSearchBuilder NetworksRegularUserCanCreateSearch; private final GenericSearchBuilder NetworksCount; final SearchBuilder SourceNATSearch; + final GenericSearchBuilder CountByZoneAndURI; NetworkAccountDaoImpl _accountsDao = ComponentLocator.inject(NetworkAccountDaoImpl.class); @@ -117,7 +119,17 @@ public class NetworkDaoImpl extends GenericDaoBase implements N ZoneBroadcastUriSearch = createSearchBuilder(); ZoneBroadcastUriSearch.and("dataCenterId", ZoneBroadcastUriSearch.entity().getDataCenterId(), Op.EQ); ZoneBroadcastUriSearch.and("broadcastUri", ZoneBroadcastUriSearch.entity().getBroadcastUri(), Op.EQ); + ZoneBroadcastUriSearch.and("guestType", ZoneBroadcastUriSearch.entity().getGuestType(), Op.EQ); ZoneBroadcastUriSearch.done(); + + CountByZoneAndURI = createSearchBuilder(Long.class); + CountByZoneAndURI.select(null, Func.COUNT, null); + CountByZoneAndURI.and("dataCenterId", CountByZoneAndURI.entity().getDataCenterId(), Op.EQ); + CountByZoneAndURI.and("broadcastUri", CountByZoneAndURI.entity().getBroadcastUri(), Op.EQ); + CountByZoneAndURI.and("guestType", CountByZoneAndURI.entity().getGuestType(), Op.EQ); + + CountByZoneAndURI.done(); + ZoneSecurityGroupSearch = createSearchBuilder(); ZoneSecurityGroupSearch.and("dataCenterId", ZoneSecurityGroupSearch.entity().getDataCenterId(), Op.EQ); @@ -298,11 +310,13 @@ public class NetworkDaoImpl extends GenericDaoBase implements N } @Override - public List listBy(long zoneId, String broadcastUri) { - SearchCriteria sc = ZoneBroadcastUriSearch.create(); + public long countByZoneAndUri(long zoneId, String broadcastUri) { + + SearchCriteria sc = CountByZoneAndURI.create(); sc.setParameters("dataCenterId", zoneId); sc.setParameters("broadcastUri", broadcastUri); - return search(sc, null); + + return customSearch(sc, null).get(0); } @Override @@ -311,6 +325,15 @@ public class NetworkDaoImpl extends GenericDaoBase implements N sc.setParameters("dataCenterId", zoneId); return search(sc, null); } + + @Override + public long countByZoneUriAndGuestType(long zoneId, String broadcastUri, GuestType guestType) { + SearchCriteria sc = CountByZoneAndURI.create(); + sc.setParameters("dataCenterId", zoneId); + sc.setParameters("broadcastUri", broadcastUri); + sc.setParameters("guestType", guestType); + return customSearch(sc, null).get(0); + } @Override public List listByZoneSecurityGroup(Long zoneId) { From f6d16d0ab5afea8eba1741454ea4ef371bb19916 Mon Sep 17 00:00:00 2001 From: saksham Date: Mon, 4 Jun 2012 18:45:11 +0530 Subject: [PATCH 03/64] CS-15018: Event USER.LOGIN should contain the client IP address. Changes made in accordance with the coding convention. Reviewed-by: Alena Prokharchyk --- server/src/com/cloud/api/ApiServer.java | 4 ++-- server/src/com/cloud/api/ApiServlet.java | 2 +- server/src/com/cloud/user/AccountManager.java | 2 +- server/src/com/cloud/user/AccountManagerImpl.java | 10 ++++++++-- server/test/com/cloud/user/MockAccountManagerImpl.java | 2 +- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 83133e4952f..fc52e061052 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -773,7 +773,7 @@ public class ApiServer implements HttpRequestHandler { } } - public void loginUser(HttpSession session, String username, String password, Long domainId, String domainPath, Map requestParameters) throws CloudAuthenticationException { + public void loginUser(HttpSession session, String username, String password, Long domainId, String domainPath, String loginIpAddress ,Map requestParameters) throws CloudAuthenticationException { // We will always use domainId first. If that does not exist, we will use domain name. If THAT doesn't exist // we will default to ROOT if (domainId == null) { @@ -789,7 +789,7 @@ public class ApiServer implements HttpRequestHandler { } } - UserAccount userAcct = _accountMgr.authenticateUser(username, password, domainId, requestParameters); + UserAccount userAcct = _accountMgr.authenticateUser(username, password, domainId, loginIpAddress, requestParameters); if (userAcct != null) { String timezone = userAcct.getTimezone(); float offsetInHrs = 0f; diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java index b7b7fff8cb0..a0da6573b43 100755 --- a/server/src/com/cloud/api/ApiServlet.java +++ b/server/src/com/cloud/api/ApiServlet.java @@ -203,7 +203,7 @@ public class ApiServlet extends HttpServlet { if (username != null) { String pwd = ((password == null) ? null : password[0]); try { - _apiServer.loginUser(session, username[0], pwd, domainId, domain, params); + _apiServer.loginUser(session, username[0], pwd, domainId, domain, req.getRemoteAddr(), params); auditTrailSb.insert(0, "(userId=" + session.getAttribute("userid") + " accountId=" + ((Account) session.getAttribute("accountobj")).getId() + " sessionId=" + session.getId() + ")"); String loginResponse = getLoginSuccessResponse(session, responseType); diff --git a/server/src/com/cloud/user/AccountManager.java b/server/src/com/cloud/user/AccountManager.java index a7f5a68c83f..4c18f63e927 100755 --- a/server/src/com/cloud/user/AccountManager.java +++ b/server/src/com/cloud/user/AccountManager.java @@ -71,7 +71,7 @@ public interface AccountManager extends AccountService { * made, and the signature itself in the single sign-on case * @return a user object, null if the user failed to authenticate */ - UserAccount authenticateUser(String username, String password, Long domainId, Map requestParameters); + UserAccount authenticateUser(String username, String password, Long domainId, String loginIpAddress, Map requestParameters); /** * Locate a user by their apiKey diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 35fbfe01077..f26c44aa9a3 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -1618,7 +1618,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag } @Override - public UserAccount authenticateUser(String username, String password, Long domainId, Map requestParameters) { + public UserAccount authenticateUser(String username, String password, Long domainId, String loginIpAddress, Map requestParameters) { UserAccount user = null; if (password != null) { user = getUserAccount(username, password, domainId, requestParameters); @@ -1720,7 +1720,13 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag if (s_logger.isDebugEnabled()) { s_logger.debug("User: " + username + " in domain " + domainId + " has successfully logged in"); } - EventUtils.saveEvent(user.getId(), user.getAccountId(), user.getDomainId(), EventTypes.EVENT_USER_LOGIN, "user has logged in"); + if (NetUtils.isValidIp(loginIpAddress)) { + EventUtils.saveEvent(user.getId(), user.getAccountId(), user.getDomainId(), EventTypes.EVENT_USER_LOGIN, + "user has logged in from IP Address " + loginIpAddress); + } else { + EventUtils.saveEvent(user.getId(), user.getAccountId(), user.getDomainId(), EventTypes.EVENT_USER_LOGIN, + "user has logged in. The IP Address cannot be determined"); + } return user; } else { if (s_logger.isDebugEnabled()) { diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index e6ab4fec2ee..e7ee1edd1ee 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -254,7 +254,7 @@ public class MockAccountManagerImpl implements Manager, AccountManager { } @Override - public UserAccount authenticateUser(String username, String password, Long domainId, Map requestParameters) { + public UserAccount authenticateUser(String username, String password, Long domainId, String loginIpAddress, Map requestParameters) { return null; } From 590b2332de5043d162fd0d2b51f3011a33475617 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Mon, 18 Jun 2012 16:03:03 -0700 Subject: [PATCH 04/64] Don't need to check guest cidr overlap It's not external devices, so guest network with different vlan can be the same. --- server/src/com/cloud/network/NetworkManagerImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 783f9e6f089..00ceab5ab6f 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2403,9 +2403,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); } - if (cidr != null) { - checkVirtualNetworkCidrOverlap(zoneId, cidr); - } // Vlan is created in 2 cases - works in Advance zone only: // 1) GuestType is Shared // 2) GuestType is Isolated, but SourceNat service is disabled From 817595daf864d40ac0fe47756914b2966394e825 Mon Sep 17 00:00:00 2001 From: "U-CITRITE\\\\koushikd" Date: Thu, 14 Jun 2012 14:24:39 +0530 Subject: [PATCH 05/64] Fix bug CS-15261 In case IP address is passed to deployVirtualMachine API, the default property on NIC was not getting set and as a result there was a failure down the line and VM creation was failing. Signed-off-by: U-CITRITE\koushikd Signed-off-by: Abhinandan Prateek --- CS-15261.patch | 0 server/src/com/cloud/vm/UserVmManagerImpl.java | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 CS-15261.patch diff --git a/CS-15261.patch b/CS-15261.patch new file mode 100644 index 00000000000..e69de29bb2d diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index ba76d220799..101e35a491e 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2347,11 +2347,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (defaultNetworkNumber == 0) { defaultNetworkNumber++; - profile.setDefaultNic(true); // if user requested specific ip for default network, add it if (defaultNetworkIp != null) { profile = new NicProfile(defaultNetworkIp); } + + profile.setDefaultNic(true); } networks.add(new Pair(network, profile)); From fc9a656b978366f25416099836a52bd3aa1ea1df Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 19 Jun 2012 14:22:54 +0530 Subject: [PATCH 06/64] CS-14345 Logout API is not returning XML header Signed-off-by: Deepti Dohare --- server/src/com/cloud/api/ApiServlet.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java index a0da6573b43..5f56b53f806 100755 --- a/server/src/com/cloud/api/ApiServlet.java +++ b/server/src/com/cloud/api/ApiServlet.java @@ -430,7 +430,10 @@ public class ApiServlet extends HttpServlet { if (BaseCmd.RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { sb.append("{ \"logoutresponse\" : { \"description\" : \"success\" } }"); } else { - sb.append("success"); + sb.append(""); + sb.append(""); + sb.append("success"); + sb.append(""); } return sb.toString(); } From bdec29b3dcf916ee8260b3011928a70f513ce145 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 19 Jun 2012 12:20:22 +0200 Subject: [PATCH 07/64] Create iptable rules for all bridges assigned to a system VM The default_network_rules_systemvm method in security_group.py only created the appropriate rules for just one bridge. This however leads to traffic not being forwarded to the virtual machine in the case of the system VMs both (console & storage) having different bridges in basic networking. This patch makes sure rules are generated for all target devices based on their source device/bridge It however excludes the LinkLocalBridge since no filtering is needed on that bridge. --- .../computing/LibvirtComputingResource.java | 15 +---- scripts/vm/network/security_group.py | 66 ++++++++++++++----- 2 files changed, 51 insertions(+), 30 deletions(-) diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index 61d8b6a28b9..c32d1a1bb99 100755 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -3950,24 +3950,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements if (!_can_bridge_firewall) { return false; } - List intfs = getInterfaces(conn, vmName); - if (intfs.size() < 1) { - return false; - } - /* FIX ME: */ - String brname = null; - if (vmName.startsWith("r-")) { - InterfaceDef intf = intfs.get(0); - brname = intf.getBrName(); - } else { - InterfaceDef intf = intfs.get(intfs.size() - 1); - brname = intf.getBrName(); - } Script cmd = new Script(_securityGroupPath, _timeout, s_logger); cmd.add("default_network_rules_systemvm"); cmd.add("--vmname", vmName); - cmd.add("--brname", brname); + cmd.add("--localbrname", _linkLocalBridgeName); String result = cmd.execute(); if (result != null) { return false; diff --git a/scripts/vm/network/security_group.py b/scripts/vm/network/security_group.py index 08f61b8b137..0fb0099fd87 100755 --- a/scripts/vm/network/security_group.py +++ b/scripts/vm/network/security_group.py @@ -215,14 +215,10 @@ def default_ebtables_rules(vm_name, vm_ip, vm_mac, vif): return 'false' -def default_network_rules_systemvm(vm_name, brname): - if not addFWFramework(brname): - return False - - vifs = getVifs(vm_name) +def default_network_rules_systemvm(vm_name, localbrname): + bridges = getBridges(vm_name) domid = getvmId(vm_name) vmchain = vm_name - brfw = "BF-" + brname delete_rules_for_vm_in_bridge_firewall_chain(vm_name) @@ -231,14 +227,20 @@ def default_network_rules_systemvm(vm_name, brname): except: execute("iptables -F " + vmchain) - for vif in vifs: - try: - execute("iptables -A " + brfw + "-OUT" + " -m physdev --physdev-is-bridged --physdev-out " + vif + " -j " + vmchain) - execute("iptables -A " + brfw + "-IN" + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -j " + vmchain) - execute("iptables -A " + vmchain + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -j RETURN") - except: - logging.debug("Failed to program default rules") - return 'false' + for bridge in bridges: + if bridge != localbrname: + if not addFWFramework(bridge): + return False + brfw = "BF-" + bridge + vifs = getVifsForBridge(vm_name, bridge) + for vif in vifs: + try: + execute("iptables -A " + brfw + "-OUT" + " -m physdev --physdev-is-bridged --physdev-out " + vif + " -j " + vmchain) + execute("iptables -A " + brfw + "-IN" + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -j " + vmchain) + execute("iptables -A " + vmchain + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -j RETURN") + except: + logging.debug("Failed to program default rules") + return 'false' execute("iptables -A " + vmchain + " -j ACCEPT") @@ -678,12 +680,43 @@ def getVifs(vmName): return vifs dom = xml.dom.minidom.parseString(xmlfile) - vifs = [] for network in dom.getElementsByTagName("interface"): target = network.getElementsByTagName('target')[0] nicdev = target.getAttribute("dev").strip() vifs.append(nicdev) return vifs + +def getVifsForBridge(vmName, brname): + vifs = [] + try: + xmlfile = virsh("dumpxml", vmName).stdout + except: + return vifs + + dom = xml.dom.minidom.parseString(xmlfile) + for network in dom.getElementsByTagName("interface"): + source = network.getElementsByTagName('source')[0] + bridge = source.getAttribute("bridge").strip() + if bridge == brname: + target = network.getElementsByTagName('target')[0] + nicdev = target.getAttribute("dev").strip() + vifs.append(nicdev) + return list(set(vifs)) + +def getBridges(vmName): + bridges = [] + try: + xmlfile = virsh("dumpxml", vmName).stdout + except: + return bridges + + dom = xml.dom.minidom.parseString(xmlfile) + for network in dom.getElementsByTagName("interface"): + for source in network.getElementsByTagName('source'): + bridge = source.getAttribute("bridge").strip() + bridges.append(bridge) + return list(set(bridges)) + def getvmId(vmName): cmd = "virsh list |grep " + vmName + " | awk '{print $1}'" return bash("-c", cmd).stdout.strip() @@ -753,6 +786,7 @@ if __name__ == '__main__': parser.add_option("--seq", dest="seq") parser.add_option("--rules", dest="rules") parser.add_option("--brname", dest="brname") + parser.add_option("--localbrname", dest="localbrname") parser.add_option("--dhcpSvr", dest="dhcpSvr") parser.add_option("--hostIp", dest="hostIp") parser.add_option("--hostMacAddr", dest="hostMacAddr") @@ -765,7 +799,7 @@ if __name__ == '__main__': elif cmd == "destroy_network_rules_for_vm": destroy_network_rules_for_vm(option.vmName, option.vif) elif cmd == "default_network_rules_systemvm": - default_network_rules_systemvm(option.vmName, option.brname) + default_network_rules_systemvm(option.vmName, option.localbrname) elif cmd == "get_rule_logs_for_vms": get_rule_logs_for_vms() elif cmd == "add_network_rules": From bed1be0bd604f9af8f2c588dc26c2b40c25738ec Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 19 Jun 2012 12:31:17 +0200 Subject: [PATCH 08/64] Remove CS-15261.patch This file got in here with commit:817595daf864d40ac0fe47756914b2966394e825 It's an empty file and not needed, so it can be removed. --- CS-15261.patch | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 CS-15261.patch diff --git a/CS-15261.patch b/CS-15261.patch deleted file mode 100644 index e69de29bb2d..00000000000 From b4c63c223f4ed01d6d100e3740243ee9d5f5d958 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 19 Jun 2012 12:32:20 +0200 Subject: [PATCH 09/64] debian: Remove last files of cloud-console-proxy This file was still left there for the "cloud-console-proxy" package, but it's used anymore. --- debian/cloud-console-proxy.config | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 debian/cloud-console-proxy.config diff --git a/debian/cloud-console-proxy.config b/debian/cloud-console-proxy.config deleted file mode 100644 index e69de29bb2d..00000000000 From aa95add3542321ac469b88b107346e43d1f7911d Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 19 Jun 2012 15:22:20 +0200 Subject: [PATCH 10/64] Include the console proxy files into the systemvm.zip This was broken by commit 859e3673809e4afef8c562685568a09b1e70e1f0 and caused the system VM's not to function. --- build/package.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/build/package.xml b/build/package.xml index 7fd7a5d1a5d..0c2ca3a9b4b 100755 --- a/build/package.xml +++ b/build/package.xml @@ -226,6 +226,7 @@ + From e0860d5a4834a607cfb4f8047ddf2aafe55739d2 Mon Sep 17 00:00:00 2001 From: Deepti Dohare Date: Thu, 14 Jun 2012 11:40:48 +0530 Subject: [PATCH 11/64] CS-14345 Fixing for Login API also. Signed-off-by: Deepti Dohare --- server/src/com/cloud/api/ApiServlet.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java index 5f56b53f806..b1107c9c50c 100755 --- a/server/src/com/cloud/api/ApiServlet.java +++ b/server/src/com/cloud/api/ApiServlet.java @@ -401,7 +401,8 @@ public class ApiServlet extends HttpServlet { } sb.append(" } }"); } else { - sb.append(""); + sb.append(""); + sb.append(""); sb.append("" + inactiveInterval + ""); Enumeration attrNames = session.getAttributeNames(); if (attrNames != null) { From 7c1698fb15430013affbb3838e4c9655fd276c7b Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 29 May 2012 11:44:39 -0700 Subject: [PATCH 12/64] CS-15126 -Hide 'type' field, as dvSwitch doesn't return a type -Get zone name from the cluster's data reviewed-by: jessica --- ui/scripts/system.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index c5a236ac7a9..60722cb1b05 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -6493,7 +6493,6 @@ id: 'vSwitches', fields: { vsmdeviceid: { label: 'label.name' }, - type: { label: 'label.type' }, zonename: { label: 'label.zone' }, vsmdevicestate: { label: 'label.state' } }, @@ -6638,7 +6637,9 @@ var item = json.listcisconexusvsmscmdresponse.cisconexusvsm; args.response.success({ actionFilter: nexusActionfilter, - data: item + data: $.extend(item, { + zonename: args.context.clusters[0].zonename + }) }); }, error: function(json) { From 073829638fd3b76bd9cb5a43030a972c5f259216 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Wed, 30 May 2012 08:13:09 -0700 Subject: [PATCH 13/64] CS-14769 -Don't pass subdomainaccess param when scope=project -Fix guest network detail view by passing projectid=-1, due to project details not returning response for project-level guest networks --- ui/scripts/system.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 60722cb1b05..9ab0a3984fe 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -1350,11 +1350,6 @@ else if($form.find('.form-item[rel=projectId]').css("display") != "none") { //project-specific array1.push("&projectid=" + args.data.projectId); array1.push("&acltype=account"); - - if ($form.find('.form-item[rel=subdomainaccess]:visible input:checked').size()) - array1.push("&subdomainaccess=true"); - else - array1.push("&subdomainaccess=false"); } else { //domain-specific array1.push("&acltype=domain"); @@ -1758,7 +1753,7 @@ ], dataProvider: function(args) { $.ajax({ - url: createURL("listNetworks&id=" + args.context.networks[0].id + "&listAll=true"), //pass "&listAll=true" to "listNetworks&id=xxxxxxxx" for now before API gets fixed. + url: createURL("listNetworks&id=" + args.context.networks[0].id + "&listAll=true" + "&projectid=-1"), //pass "&listAll=true" to "listNetworks&id=xxxxxxxx" for now before API gets fixed. dataType: "json", async: false, success: function(json) { From 920eadffd576e52251c73ba53d3a2f78c987fa3f Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Wed, 30 May 2012 09:44:32 -0700 Subject: [PATCH 14/64] CS-15126: Removing the zone field for now Conflicts: ui/scripts/system.js --- ui/scripts/system.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 9ab0a3984fe..e304951d147 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -6488,7 +6488,6 @@ id: 'vSwitches', fields: { vsmdeviceid: { label: 'label.name' }, - zonename: { label: 'label.zone' }, vsmdevicestate: { label: 'label.state' } }, detailView: { @@ -6632,9 +6631,7 @@ var item = json.listcisconexusvsmscmdresponse.cisconexusvsm; args.response.success({ actionFilter: nexusActionfilter, - data: $.extend(item, { - zonename: args.context.clusters[0].zonename - }) + data: item }); }, error: function(json) { From e5db0ebc0f5f34d81994734633d995305b7bcef4 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Wed, 30 May 2012 11:07:10 -0700 Subject: [PATCH 15/64] CS-15148 : Delete Nexus dvSwitch UI option is not Functional so removing this functionality reviewed-by: brian --- ui/scripts/system.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index e304951d147..9888380d5a6 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -6562,9 +6562,9 @@ args.complete(); } } - }, + } - 'remove': { + /* 'remove': { label: 'label.action.delete.nexusVswitch' , messages: { confirm: function(args) { @@ -6587,7 +6587,7 @@ notification: { poll: function(args) { args.complete(); } } - } + }*/ }, tabs: { From fe76cf8a60799ea4579c1036253c16e4ef09c922 Mon Sep 17 00:00:00 2001 From: Vijayendra Bhamidipati Date: Mon, 18 Jun 2012 17:50:07 -0700 Subject: [PATCH 16/64] CS-15241: static NAT is not working when provider is set to Juniper SRX Description: Checking in fix for the exception seen due to the absence of the AsyncCommandQueued exception in the map of CSExceptionErrorCode which is used to look up the error code corresponding to a cloudstack exception. Also printing the stack trace in case an exception is not found in the map. --- utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java index 03565bb27fb..74e42a60213 100755 --- a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java +++ b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java @@ -92,13 +92,15 @@ public class CSExceptionErrorCode { ExceptionErrorCodeMap.put("com.cloud.exception.ResourceUnavailableException", 4520); ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4525); ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4530); - ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4535); + ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4535); + ExceptionErrorCodeMap.put("com.cloud.async.AsyncCommandQueued", 4540); // Have a special error code for ServerApiException when it is // thrown in a standalone manner when failing to detect any of the above // standard exceptions. ExceptionErrorCodeMap.put("com.cloud.api.ServerApiException", 9999); } catch (Exception e) { + e.printStackTrace(); throw new ExceptionInInitializerError(e); } } From 9d28ffeb026a3cf2800f473dda5d62c24866bb72 Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Fri, 15 Jun 2012 18:22:48 +0530 Subject: [PATCH 17/64] CS-14985. Fix for ec2-describe-snapshots filters. Component: awsapi. Signed-off-by: Likitha Shetty --- .../core/ec2/EC2SnapshotFilterSet.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2SnapshotFilterSet.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2SnapshotFilterSet.java index c69191cba94..9e3e4ade943 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2SnapshotFilterSet.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2SnapshotFilterSet.java @@ -18,13 +18,16 @@ package com.cloud.bridge.service.core.ec2; import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TimeZone; import com.cloud.bridge.service.UserContext; import com.cloud.bridge.service.exception.EC2ServiceException; import com.cloud.bridge.util.DateHelper; +import com.cloud.bridge.util.EC2RestAuth; public class EC2SnapshotFilterSet { @@ -121,7 +124,12 @@ public class EC2SnapshotFilterSet { } else if (filterName.equalsIgnoreCase( "status" )) { - return containsString( "completed", valueSet ); + if ( snap.getState().equalsIgnoreCase("backedup")) + return containsString( "completed", valueSet ); + else if (snap.getState().equalsIgnoreCase("creating") || snap.getState().equalsIgnoreCase("backingup")) + return containsString( "pending", valueSet ); + else + return containsString( "error", valueSet ); } else if (filterName.equalsIgnoreCase( "volume-id" )) { @@ -160,11 +168,14 @@ public class EC2SnapshotFilterSet { private boolean containsTime( Calendar lookingFor, String[] set ) throws ParseException { + lookingFor.setTimeZone(TimeZone.getTimeZone("GMT")); + Date lookingForDate = lookingFor.getTime(); for (String s : set) { //System.out.println( "contsinsCalendar: " + lookingFor + " " + set[i] ); - Calendar toMatch = Calendar.getInstance(); - toMatch.setTime( DateHelper.parseISO8601DateString( s )); - if (0 == lookingFor.compareTo( toMatch )) return true; + Calendar toMatch = EC2RestAuth.parseDateString(s); + toMatch.setTimeZone(TimeZone.getTimeZone("GMT")); + Date toMatchDate = toMatch.getTime(); + if ( 0 == lookingForDate.compareTo(toMatchDate)) return true; } return false; } From d8a1fec45249558b6ebfc7c1887913c327fffac9 Mon Sep 17 00:00:00 2001 From: frank Date: Tue, 19 Jun 2012 16:09:07 -0700 Subject: [PATCH 18/64] Add build-console-proxy target back to build-all target fixing ant build broken --- build/build-cloud.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/build-cloud.xml b/build/build-cloud.xml index 76d2bc85e29..b533db9b1b7 100755 --- a/build/build-cloud.xml +++ b/build/build-cloud.xml @@ -480,7 +480,7 @@ - + From e2a32ab4f787f682a8723bbf9a5ebb653aaccee5 Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Tue, 19 Jun 2012 18:27:09 -0700 Subject: [PATCH 19/64] Introduced plugins directory. Moved ovm into plugins. Introduced build.xml for ovm. --- build/build-cloud.xml | 9 +- build/build-common.xml | 2 +- .../user-dispersing/.classpath | 10 + .../user-dispersing/.project | 17 + .../.settings/org.eclipse.jdt.core.prefs | 12 + .../user-dispersing/build.xml | 609 ++++++++++++++++++ .../cloud/deploy/UserDispersingPlanner.java | 0 {ovm => plugins/hypervisors/ovm}/.classpath | 0 {ovm => plugins/hypervisors/ovm}/.project | 46 +- plugins/hypervisors/ovm/build.xml | 128 ++++ .../vm/hypervisor/ovm/ConfigFileOps.py | 0 ...sExceptionDueToWrongReturnValueCheck.patch | 0 .../vm/hypervisor/ovm/OvmCommonModule.py | 0 .../vm/hypervisor/ovm/OvmDiskModule.py | 0 .../vm/hypervisor/ovm/OvmDispatcher.py | 0 ...mDontTouchOCFS2ClusterWhenAgentStart.patch | 0 .../vm/hypervisor/ovm/OvmFaultConstants.py | 0 .../vm/hypervisor/ovm/OvmHaHeartBeatModule.py | 0 .../vm/hypervisor/ovm/OvmHostModule.py | 0 .../vm/hypervisor/ovm/OvmLoggerModule.py | 0 .../vm/hypervisor/ovm/OvmNetworkModule.py | 0 .../vm/hypervisor/ovm/OvmOCFS2Module.py | 0 .../vm/hypervisor/ovm/OvmObjectModule.py | 0 .../scripts/vm/hypervisor/ovm/OvmPatch.patch | 0 .../hypervisor/ovm/OvmSecurityGroupModule.py | 0 .../vm/hypervisor/ovm/OvmStoragePoolModule.py | 0 .../scripts/vm/hypervisor/ovm/OvmVifModule.py | 0 .../scripts/vm/hypervisor/ovm/OvmVmModule.py | 0 .../vm/hypervisor/ovm/OvmVolumeModule.py | 0 .../scripts/vm/hypervisor/ovm/configureOvm.sh | 0 .../cloud/ovm/hypervisor/OvmDiscoverer.java | 0 .../com/cloud/ovm/hypervisor/OvmFencer.java | 0 .../src/com/cloud/ovm/hypervisor/OvmGuru.java | 0 .../com/cloud/ovm/hypervisor/OvmHelper.java | 0 .../cloud/ovm/hypervisor/OvmResourceBase.java | 0 .../ovm}/src/com/cloud/ovm/object/Coder.java | 0 .../src/com/cloud/ovm/object/Connection.java | 0 .../src/com/cloud/ovm/object/OvmBridge.java | 0 .../src/com/cloud/ovm/object/OvmDisk.java | 0 .../src/com/cloud/ovm/object/OvmHost.java | 0 .../src/com/cloud/ovm/object/OvmObject.java | 0 .../cloud/ovm/object/OvmSecurityGroup.java | 0 .../com/cloud/ovm/object/OvmStoragePool.java | 0 .../ovm}/src/com/cloud/ovm/object/OvmVif.java | 0 .../src/com/cloud/ovm/object/OvmVlan.java | 0 .../ovm}/src/com/cloud/ovm/object/OvmVm.java | 0 .../src/com/cloud/ovm/object/OvmVolume.java | 0 .../ovm}/src/com/cloud/ovm/object/Test.java | 0 48 files changed, 801 insertions(+), 32 deletions(-) create mode 100755 plugins/deployment-planner/user-dispersing/.classpath create mode 100755 plugins/deployment-planner/user-dispersing/.project create mode 100755 plugins/deployment-planner/user-dispersing/.settings/org.eclipse.jdt.core.prefs create mode 100644 plugins/deployment-planner/user-dispersing/build.xml rename {server => plugins/deployment-planner/user-dispersing}/src/com/cloud/deploy/UserDispersingPlanner.java (100%) rename {ovm => plugins/hypervisors/ovm}/.classpath (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/.project (95%) create mode 100755 plugins/hypervisors/ovm/build.xml rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/ConfigFileOps.py (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/Fixget_storage_reposExceptionDueToWrongReturnValueCheck.patch (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmCommonModule.py (100%) rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmDiskModule.py (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmDispatcher.py (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmDontTouchOCFS2ClusterWhenAgentStart.patch (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmFaultConstants.py (100%) rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmHaHeartBeatModule.py (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmHostModule.py (100%) rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmLoggerModule.py (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmNetworkModule.py (100%) rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmOCFS2Module.py (100%) rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmObjectModule.py (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmPatch.patch (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmSecurityGroupModule.py (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py (100%) rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmVifModule.py (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmVmModule.py (100%) rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/OvmVolumeModule.py (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/scripts/vm/hypervisor/ovm/configureOvm.sh (100%) rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java (100%) rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/hypervisor/OvmFencer.java (100%) rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/hypervisor/OvmGuru.java (100%) rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/hypervisor/OvmHelper.java (100%) rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/hypervisor/OvmResourceBase.java (100%) rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/Coder.java (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/Connection.java (100%) rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/OvmBridge.java (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/OvmDisk.java (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/OvmHost.java (100%) rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/OvmObject.java (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/OvmSecurityGroup.java (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/OvmStoragePool.java (100%) rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/OvmVif.java (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/OvmVlan.java (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/OvmVm.java (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/OvmVolume.java (100%) mode change 100644 => 100755 rename {ovm => plugins/hypervisors/ovm}/src/com/cloud/ovm/object/Test.java (100%) mode change 100644 => 100755 diff --git a/build/build-cloud.xml b/build/build-cloud.xml index b533db9b1b7..1ec2afb79f5 100755 --- a/build/build-cloud.xml +++ b/build/build-cloud.xml @@ -588,15 +588,8 @@ - - - - - - - - + diff --git a/build/build-common.xml b/build/build-common.xml index 1d1aa87361d..7240f5323c3 100755 --- a/build/build-common.xml +++ b/build/build-common.xml @@ -73,7 +73,7 @@ - + diff --git a/plugins/deployment-planner/user-dispersing/.classpath b/plugins/deployment-planner/user-dispersing/.classpath new file mode 100755 index 00000000000..a246f5e509f --- /dev/null +++ b/plugins/deployment-planner/user-dispersing/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/plugins/deployment-planner/user-dispersing/.project b/plugins/deployment-planner/user-dispersing/.project new file mode 100755 index 00000000000..d9b2d401aa8 --- /dev/null +++ b/plugins/deployment-planner/user-dispersing/.project @@ -0,0 +1,17 @@ + + + user-dispersing + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/plugins/deployment-planner/user-dispersing/.settings/org.eclipse.jdt.core.prefs b/plugins/deployment-planner/user-dispersing/.settings/org.eclipse.jdt.core.prefs new file mode 100755 index 00000000000..d0ee7df1827 --- /dev/null +++ b/plugins/deployment-planner/user-dispersing/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +#Tue Jun 19 15:34:37 PDT 2012 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/plugins/deployment-planner/user-dispersing/build.xml b/plugins/deployment-planner/user-dispersing/build.xml new file mode 100644 index 00000000000..60a1f2d5d40 --- /dev/null +++ b/plugins/deployment-planner/user-dispersing/build.xml @@ -0,0 +1,609 @@ + + + + + + + Cloud Stack ant build file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/src/com/cloud/deploy/UserDispersingPlanner.java b/plugins/deployment-planner/user-dispersing/src/com/cloud/deploy/UserDispersingPlanner.java similarity index 100% rename from server/src/com/cloud/deploy/UserDispersingPlanner.java rename to plugins/deployment-planner/user-dispersing/src/com/cloud/deploy/UserDispersingPlanner.java diff --git a/ovm/.classpath b/plugins/hypervisors/ovm/.classpath old mode 100644 new mode 100755 similarity index 100% rename from ovm/.classpath rename to plugins/hypervisors/ovm/.classpath diff --git a/ovm/.project b/plugins/hypervisors/ovm/.project similarity index 95% rename from ovm/.project rename to plugins/hypervisors/ovm/.project index 4b9d34562c4..6ef55a50063 100755 --- a/ovm/.project +++ b/plugins/hypervisors/ovm/.project @@ -1,23 +1,23 @@ - - - ovm - - - - - - org.python.pydev.PyDevBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - org.python.pydev.pythonNature - - + + + ovm + + + + + + org.python.pydev.PyDevBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + org.python.pydev.pythonNature + + diff --git a/plugins/hypervisors/ovm/build.xml b/plugins/hypervisors/ovm/build.xml new file mode 100755 index 00000000000..e63b049ad7e --- /dev/null +++ b/plugins/hypervisors/ovm/build.xml @@ -0,0 +1,128 @@ + + + + + + + Cloud Stack ant build file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ovm/scripts/vm/hypervisor/ovm/ConfigFileOps.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/ConfigFileOps.py old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/ConfigFileOps.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/ConfigFileOps.py diff --git a/ovm/scripts/vm/hypervisor/ovm/Fixget_storage_reposExceptionDueToWrongReturnValueCheck.patch b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/Fixget_storage_reposExceptionDueToWrongReturnValueCheck.patch old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/Fixget_storage_reposExceptionDueToWrongReturnValueCheck.patch rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/Fixget_storage_reposExceptionDueToWrongReturnValueCheck.patch diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmCommonModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmCommonModule.py similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmCommonModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmCommonModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmDiskModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmDiskModule.py old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmDiskModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmDiskModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmDispatcher.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmDispatcher.py old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmDispatcher.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmDispatcher.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmDontTouchOCFS2ClusterWhenAgentStart.patch b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmDontTouchOCFS2ClusterWhenAgentStart.patch old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmDontTouchOCFS2ClusterWhenAgentStart.patch rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmDontTouchOCFS2ClusterWhenAgentStart.patch diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmFaultConstants.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmFaultConstants.py similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmFaultConstants.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmFaultConstants.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmHaHeartBeatModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmHaHeartBeatModule.py old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmHaHeartBeatModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmHaHeartBeatModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmHostModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmHostModule.py similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmHostModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmHostModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmLoggerModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmLoggerModule.py old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmLoggerModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmLoggerModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmNetworkModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmNetworkModule.py similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmNetworkModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmNetworkModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmOCFS2Module.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmOCFS2Module.py similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmOCFS2Module.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmOCFS2Module.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmObjectModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmObjectModule.py old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmObjectModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmObjectModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmPatch.patch b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmPatch.patch old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmPatch.patch rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmPatch.patch diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmSecurityGroupModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmSecurityGroupModule.py old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmSecurityGroupModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmSecurityGroupModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmVifModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVifModule.py old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmVifModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVifModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmVmModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVmModule.py similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmVmModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVmModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmVolumeModule.py b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVolumeModule.py old mode 100644 new mode 100755 similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/OvmVolumeModule.py rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVolumeModule.py diff --git a/ovm/scripts/vm/hypervisor/ovm/configureOvm.sh b/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/configureOvm.sh similarity index 100% rename from ovm/scripts/vm/hypervisor/ovm/configureOvm.sh rename to plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/configureOvm.sh diff --git a/ovm/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java similarity index 100% rename from ovm/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java diff --git a/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java similarity index 100% rename from ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java diff --git a/ovm/src/com/cloud/ovm/hypervisor/OvmGuru.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmGuru.java similarity index 100% rename from ovm/src/com/cloud/ovm/hypervisor/OvmGuru.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmGuru.java diff --git a/ovm/src/com/cloud/ovm/hypervisor/OvmHelper.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmHelper.java similarity index 100% rename from ovm/src/com/cloud/ovm/hypervisor/OvmHelper.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmHelper.java diff --git a/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java similarity index 100% rename from ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java diff --git a/ovm/src/com/cloud/ovm/object/Coder.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/Coder.java old mode 100644 new mode 100755 similarity index 100% rename from ovm/src/com/cloud/ovm/object/Coder.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/Coder.java diff --git a/ovm/src/com/cloud/ovm/object/Connection.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/Connection.java similarity index 100% rename from ovm/src/com/cloud/ovm/object/Connection.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/Connection.java diff --git a/ovm/src/com/cloud/ovm/object/OvmBridge.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmBridge.java old mode 100644 new mode 100755 similarity index 100% rename from ovm/src/com/cloud/ovm/object/OvmBridge.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmBridge.java diff --git a/ovm/src/com/cloud/ovm/object/OvmDisk.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmDisk.java old mode 100644 new mode 100755 similarity index 100% rename from ovm/src/com/cloud/ovm/object/OvmDisk.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmDisk.java diff --git a/ovm/src/com/cloud/ovm/object/OvmHost.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmHost.java similarity index 100% rename from ovm/src/com/cloud/ovm/object/OvmHost.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmHost.java diff --git a/ovm/src/com/cloud/ovm/object/OvmObject.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmObject.java old mode 100644 new mode 100755 similarity index 100% rename from ovm/src/com/cloud/ovm/object/OvmObject.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmObject.java diff --git a/ovm/src/com/cloud/ovm/object/OvmSecurityGroup.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmSecurityGroup.java old mode 100644 new mode 100755 similarity index 100% rename from ovm/src/com/cloud/ovm/object/OvmSecurityGroup.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmSecurityGroup.java diff --git a/ovm/src/com/cloud/ovm/object/OvmStoragePool.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmStoragePool.java similarity index 100% rename from ovm/src/com/cloud/ovm/object/OvmStoragePool.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmStoragePool.java diff --git a/ovm/src/com/cloud/ovm/object/OvmVif.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVif.java old mode 100644 new mode 100755 similarity index 100% rename from ovm/src/com/cloud/ovm/object/OvmVif.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVif.java diff --git a/ovm/src/com/cloud/ovm/object/OvmVlan.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVlan.java old mode 100644 new mode 100755 similarity index 100% rename from ovm/src/com/cloud/ovm/object/OvmVlan.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVlan.java diff --git a/ovm/src/com/cloud/ovm/object/OvmVm.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVm.java old mode 100644 new mode 100755 similarity index 100% rename from ovm/src/com/cloud/ovm/object/OvmVm.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVm.java diff --git a/ovm/src/com/cloud/ovm/object/OvmVolume.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVolume.java old mode 100644 new mode 100755 similarity index 100% rename from ovm/src/com/cloud/ovm/object/OvmVolume.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVolume.java diff --git a/ovm/src/com/cloud/ovm/object/Test.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/Test.java old mode 100644 new mode 100755 similarity index 100% rename from ovm/src/com/cloud/ovm/object/Test.java rename to plugins/hypervisors/ovm/src/com/cloud/ovm/object/Test.java From a2de5fb7dfb64973f82476d0d12fd1e80a89f42a Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Wed, 20 Jun 2012 10:54:52 +0200 Subject: [PATCH 20/64] Fix small typo for VNC settings --- .../src/com/cloud/agent/resource/computing/LibvirtVMDef.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java b/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java index 0210351c41d..1a0afd02e23 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java @@ -717,11 +717,11 @@ public class LibvirtVMDef { private final String _passwd; private final String _keyMap; - public GraphicDef(String type, short port, boolean auotPort, + public GraphicDef(String type, short port, boolean autoPort, String listenAddr, String passwd, String keyMap) { _type = type; _port = port; - _autoPort = auotPort; + _autoPort = autoPort; _listenAddr = listenAddr; _passwd = passwd; _keyMap = keyMap; From 01ea1fba2f7277d687bf72bf79988d25ecb501c2 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Wed, 20 Jun 2012 11:46:20 +0200 Subject: [PATCH 21/64] console proxy: Adjust logfile to other path We now store the console proxy logs in /var/log/cloud/consoleproxy.log --- console-proxy/conf/log4j-cloud.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/console-proxy/conf/log4j-cloud.xml b/console-proxy/conf/log4j-cloud.xml index 9112df7fb5a..e6042368b72 100644 --- a/console-proxy/conf/log4j-cloud.xml +++ b/console-proxy/conf/log4j-cloud.xml @@ -9,7 +9,7 @@ - + From 27e504cb18ab5856d7590910db312e766fabb9e3 Mon Sep 17 00:00:00 2001 From: Abhinandan Prateek Date: Wed, 20 Jun 2012 11:30:03 +0100 Subject: [PATCH 22/64] bug CS-15285: preserving order of network ids so that first network is taken as the default network --- api/src/com/cloud/api/commands/DeployVMCmd.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/src/com/cloud/api/commands/DeployVMCmd.java b/api/src/com/cloud/api/commands/DeployVMCmd.java index 4949cf0ec38..9e2bc24df8f 100644 --- a/api/src/com/cloud/api/commands/DeployVMCmd.java +++ b/api/src/com/cloud/api/commands/DeployVMCmd.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -252,9 +253,9 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { if ((networkIds != null || ipAddress != null) && ipToNetworkList != null) { throw new InvalidParameterValueException("NetworkIds and ipAddress can't be specified along with ipToNetworkMap parameter"); } - Map ipToNetworkMap = null; + LinkedHashMap ipToNetworkMap = null; if (ipToNetworkList != null && !ipToNetworkList.isEmpty()) { - ipToNetworkMap = new HashMap(); + ipToNetworkMap = new LinkedHashMap(); Collection ipsCollection = ipToNetworkList.values(); Iterator iter = ipsCollection.iterator(); while (iter.hasNext()) { From bc94948e0604e0e5931759be3c3d3155e84686f6 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Wed, 20 Jun 2012 12:28:03 +0200 Subject: [PATCH 23/64] agent: Set the listen addr of a VM specificly to the private IP of a host Now users have to modify their /etc/libvirt/qemu.conf vnc_listen, this is not needed anymore --- .../computing/LibvirtComputingResource.java | 3 ++- api/src/com/cloud/agent/api/StartCommand.java | 15 +++++++++++++-- .../com/cloud/agent/api/to/VirtualMachineTO.java | 9 +++++++++ .../com/cloud/vm/VirtualMachineManagerImpl.java | 2 +- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index c32d1a1bb99..c032e2c1912 100755 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -2481,7 +2481,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements ConsoleDef console = new ConsoleDef("pty", null, null, (short) 0); devices.addDevice(console); - GraphicDef grap = new GraphicDef("vnc", (short) 0, true, null, null, + GraphicDef grap = new GraphicDef("vnc", (short) 0, true, vmTO.getVncAddr(), null, null); devices.addDevice(grap); @@ -2507,6 +2507,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements protected synchronized StartAnswer execute(StartCommand cmd) { VirtualMachineTO vmSpec = cmd.getVirtualMachine(); + vmSpec.setVncAddr(cmd.getHostIp()); String vmName = vmSpec.getName(); LibvirtVMDef vm = null; diff --git a/api/src/com/cloud/agent/api/StartCommand.java b/api/src/com/cloud/agent/api/StartCommand.java index fcd8b360fa0..4d871389836 100644 --- a/api/src/com/cloud/agent/api/StartCommand.java +++ b/api/src/com/cloud/agent/api/StartCommand.java @@ -17,12 +17,14 @@ package com.cloud.agent.api; import com.cloud.agent.api.to.VirtualMachineTO; +import com.cloud.host.Host; /** */ public class StartCommand extends Command { VirtualMachineTO vm; - + String hostIp; + public VirtualMachineTO getVirtualMachine() { return vm; } @@ -34,8 +36,17 @@ public class StartCommand extends Command { protected StartCommand() { } - + public StartCommand(VirtualMachineTO vm) { this.vm = vm; } + + public StartCommand(VirtualMachineTO vm, Host host) { + this.vm = vm; + this.hostIp = host.getPrivateIpAddress(); + } + + public String getHostIp() { + return this.hostIp; + } } diff --git a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java index ec93fc65718..42d91626e35 100644 --- a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java +++ b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java @@ -40,6 +40,7 @@ public class VirtualMachineTO { boolean enableHA; boolean limitCpuUse; String vncPassword; + String vncAddr; Map params; VolumeTO[] disks; @@ -191,6 +192,14 @@ public class VirtualMachineTO { public void setVncPassword(String vncPassword) { this.vncPassword = vncPassword; } + + public String getVncAddr() { + return this.vncAddr; + } + + public void setVncAddr(String vncAddr) { + this.vncAddr = vncAddr; + } public Map getDetails() { return params; diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index b73d0fd8e48..b33f27021d7 100755 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -755,7 +755,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene vmTO = hvGuru.implement(vmProfile); cmds = new Commands(OnError.Stop); - cmds.addCommand(new StartCommand(vmTO)); + cmds.addCommand(new StartCommand(vmTO, dest.getHost())); vmGuru.finalizeDeployment(cmds, vmProfile, dest, ctx); From a2d49bef69dd14496be2eba8585659cf7b0cf446 Mon Sep 17 00:00:00 2001 From: frank Date: Wed, 20 Jun 2012 10:45:56 -0700 Subject: [PATCH 24/64] Change OVM script deploy target in line with Alex re-packaging change fix RPM build, don't install cloud-console-proxy.jar as there is not such package anymore --- build/developer.xml | 8 +------- plugins/hypervisors/ovm/build.xml | 14 +++++++++++--- wscript_build | 4 ++-- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/build/developer.xml b/build/developer.xml index 127581e2d4e..4d466b76478 100755 --- a/build/developer.xml +++ b/build/developer.xml @@ -36,8 +36,6 @@ - - @@ -163,11 +161,7 @@ - - - - - + diff --git a/plugins/hypervisors/ovm/build.xml b/plugins/hypervisors/ovm/build.xml index e63b049ad7e..8113d725daa 100755 --- a/plugins/hypervisors/ovm/build.xml +++ b/plugins/hypervisors/ovm/build.xml @@ -76,7 +76,7 @@ - + @@ -102,8 +102,16 @@ - - + + + + + + + + + + diff --git a/wscript_build b/wscript_build index 610a7d3eb70..4c4f1e4c968 100644 --- a/wscript_build +++ b/wscript_build @@ -77,7 +77,7 @@ def build_jars (): "cloud-servlet-api.jar", "cloud-commons-logging-1.1.1.jar", "cloud-ws-commons-util-1.0.2.jar", "cloud-commons-collections-3.2.1.jar", "vmware*.jar", "cloud-secstorage-extras.jar", - "cloud-agent-simulator.jar", "cloud-awsapi.jar", "cloud-test.jar", "cloud-wsdl4j.jar"] + "cloud-agent-simulator.jar", "cloud-awsapi.jar", "cloud-test.jar", "cloud-wsdl4j.jar", "cloud-console-proxy.jar"] for a in jars_str: if _basename (a).startswith ("cloud-") \ @@ -356,7 +356,7 @@ def build_xml_api_description (): bld.install_as("${PYTHONDIR}/cloudapis.py", 'cloud-cli/cloudapis/cloud.py') def build_ovm(): - start_path = bld.path.find_dir("ovm/scripts") + start_path = bld.path.find_dir("plugins/hypervisors/ovm/scripts") bld.substitute('**',"${AGENTLIBDIR}/scripts",chmod=0755, cwd=start_path) def build_test(): From 27265597bfee2cc055c5591d689ff6980f412c42 Mon Sep 17 00:00:00 2001 From: frank Date: Wed, 20 Jun 2012 11:08:33 -0700 Subject: [PATCH 25/64] make cloud-install-sys-tmplt work without db.properties file this allows developer setup secondary storage from their development environment --- .../storage/secondary/cloud-install-sys-tmplt | 54 +++++++++++++------ 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/scripts/storage/secondary/cloud-install-sys-tmplt b/scripts/storage/secondary/cloud-install-sys-tmplt index 2f282997910..96f0be606f0 100755 --- a/scripts/storage/secondary/cloud-install-sys-tmplt +++ b/scripts/storage/secondary/cloud-install-sys-tmplt @@ -1,7 +1,7 @@ #!/bin/bash # $Id: installrtng.sh 11251 2010-07-23 23:40:44Z abhishek $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/secondary/installrtng.sh $ usage() { - printf "Usage: %s: -m -f [-h ] [ -s ][-u ] [-F ] [-e