diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index 5a6054da23b..f9e6238a697 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -19,9 +19,7 @@ package com.cloud.network; import java.util.List; import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.command.user.network.*; import org.apache.cloudstack.api.command.user.vm.ListNicsCmd; import com.cloud.exception.ConcurrentOperationException; @@ -165,4 +163,11 @@ public interface NetworkService { /* lists the nic informaton */ List listNics(ListNicsCmd listNicsCmd); + + void removeNicDetail(RemoveNicDetailCmd removeNicDetailCmd); + + void addNicDetail(AddNicDetailCmd cmd); + + void updateNicDetail(UpdateNicDetailCmd cmd); + } diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in index d2ea380ddab..09e80b3bc59 100644 --- a/client/tomcatconf/applicationContext.xml.in +++ b/client/tomcatconf/applicationContext.xml.in @@ -256,6 +256,7 @@ + @@ -355,6 +356,7 @@ + diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index 592757b6461..a1a4113e074 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -21,6 +21,7 @@ import java.util.*; import javax.ejb.Local; import javax.inject.Inject; +import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.affinity.AffinityGroupVMMapVO; import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; @@ -1510,7 +1511,8 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { List volumeDetailResponseList = new ArrayList(); for (VolumeDetailVO volumeDetail : volumeDetailList ){ VolumeDetailResponse volumeDetailResponse = new VolumeDetailResponse(); - volumeDetailResponse.setId(id.toString()); + String uuid = ApiDBUtils.findVolumeById(id).getUuid(); + volumeDetailResponse.setId(uuid); volumeDetailResponse.setName(volumeDetail.getName()); volumeDetailResponse.setValue(volumeDetail.getValue()); volumeDetailResponse.setObjectName("volumedetail"); diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 4af716ca12a..8a33a95314d 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -99,7 +99,7 @@ public interface NetworkManager { throws ConcurrentOperationException; List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, - ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException; + ACLType aclType, Boolean subdomainAccess, Long vpcId, Boolean isDisplayNetworkEnabled) throws ConcurrentOperationException; void allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException, ConcurrentOperationException; @@ -127,8 +127,8 @@ public interface NetworkManager { boolean destroyNetwork(long networkId, ReservationContext context); Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, String cidr, - String vlanId, String networkDomain, Account owner, Long domainId, PhysicalNetwork physicalNetwork, - long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId, String ip6Gateway, String ip6Cidr) + String vlanId, String networkDomain, Account owner, Long domainId, PhysicalNetwork physicalNetwork, + long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId, String ip6Gateway, String ip6Cidr, Boolean displayNetworkEnabled) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException; /** diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 72ccac0ec7d..ea5338949db 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1091,14 +1091,14 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L public List setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException { - return setupNetwork(owner, offering, null, plan, name, displayText, false, null, null, null, null); + return setupNetwork(owner, offering, null, plan, name, displayText, false, null, null, null, null, true); } @Override @DB public List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, - ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { + ACLType aclType, Boolean subdomainAccess, Long vpcId, Boolean isDisplayNetworkEnabled) throws ConcurrentOperationException { Account locked = _accountDao.acquireInLockTable(owner.getId()); if (locked == null) { @@ -1173,6 +1173,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L NetworkVO vo = new NetworkVO(id, network, offering.getId(), guru.getName(), owner.getDomainId(), owner.getId(), related, name, displayText, predefined.getNetworkDomain(), offering.getGuestType(), plan.getDataCenterId(), plan.getPhysicalNetworkId(), aclType, offering.getSpecifyIpRanges(), vpcId); + vo.setDisplayNetwork(isDisplayNetworkEnabled); networks.add(_networksDao.persist(vo, vo.getGuestType() == Network.GuestType.Isolated, finalizeServicesAndProvidersForNetwork(offering, plan.getPhysicalNetworkId()))); @@ -1862,9 +1863,9 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L @Override @DB - public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, - String cidr, String vlanId, String networkDomain, Account owner, Long domainId, - PhysicalNetwork pNtwk, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId, String ip6Gateway, String ip6Cidr) + public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, + String cidr, String vlanId, String networkDomain, Account owner, Long domainId, + PhysicalNetwork pNtwk, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId, String ip6Gateway, String ip6Cidr, Boolean isDisplayNetworkEnabled) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(networkOfferingId); @@ -2094,7 +2095,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L } List networks = setupNetwork(owner, ntwkOff, userNetwork, plan, name, displayText, true, domainId, - aclType, subdomainAccess, vpcId); + aclType, subdomainAccess, vpcId, isDisplayNetworkEnabled); Network network = null; if (networks == null || networks.isEmpty()) { @@ -2687,7 +2688,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L guestNetwork = createGuestNetwork(requiredOfferings.get(0).getId(), owner.getAccountName() + "-network" , owner.getAccountName() + "-network", null, null, null, null, owner, null, physicalNetwork, zoneId, ACLType.Account, - null, null, null, null); + null, null, null, null, true); if (guestNetwork == null) { s_logger.warn("Failed to create default Virtual network for the account " + accountId + "in zone " + zoneId); throw new CloudRuntimeException("Failed to create a Guest Isolated Networks with SourceNAT " + diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index 7653a0816f0..5d62bc3b9cf 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -86,9 +86,7 @@ import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.acl.SecurityChecker; import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; +import org.apache.cloudstack.api.command.user.network.*; import org.apache.cloudstack.api.command.user.vm.ListNicsCmd; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -203,6 +201,8 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { HostPodDao _hostPodDao; @Inject DataCenterVnetDao _datacneter_vnet; + @Inject + NicDetailDao _nicDetailDao = null; int _cidrLimit; boolean _allowSubdomainNetworkAccess; @@ -817,6 +817,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { String endIPv6 = cmd.getEndIpv6(); String ip6Gateway = cmd.getIp6Gateway(); String ip6Cidr = cmd.getIp6Cidr(); + Boolean isDisplayNetworkEnabled = cmd.getDisplayNetwork(); // Validate network offering NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(networkOfferingId); @@ -1098,13 +1099,13 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { throw new InvalidParameterValueException("Network offering can't be used for VPC networks"); } network = _vpcMgr.createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, - networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, caller); + networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, caller, isDisplayNetworkEnabled); } else { if (_configMgr.isOfferingForVpc(ntwkOff)){ throw new InvalidParameterValueException("Network offering can be used for VPC networks only"); } network = _networkMgr.createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, - networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, ip6Gateway, ip6Cidr); + networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, ip6Gateway, ip6Cidr, isDisplayNetworkEnabled); } if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN && createVlan) { @@ -3347,7 +3348,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { if (privateNetwork == null) { //create Guest network privateNetwork = _networkMgr.createGuestNetwork(ntwkOff.getId(), networkName, displayText, gateway, cidr, vlan, - null, owner, null, pNtwk, pNtwk.getDataCenterId(), ACLType.Account, null, null, null, null); + null, owner, null, pNtwk, pNtwk.getDataCenterId(), ACLType.Account, null, null, null, null, true); s_logger.debug("Created private network " + privateNetwork); } else { s_logger.debug("Private network already exists: " + privateNetwork); @@ -3407,4 +3408,57 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { _accountMgr.checkAccess(caller, null, true, userVm); return _networkMgr.listVmNics(vmId, nicId); } + + @Override + public void addNicDetail(AddNicDetailCmd cmd){ + UserContext.current().setEventDetails("Nic Id: " + cmd.getId()); + Account caller = UserContext.current().getCaller(); + Long nicId = cmd.getId(); + String name = cmd.getName(); + String value = cmd.getValue(); + + NicVO nic = _nicDao.findById(nicId); + + //_accountMgr.checkAccess(caller, null, true, nic); + NicDetailVO nicDetail = new NicDetailVO(nicId, name, value); + _nicDetailDao.persist(nicDetail); + } + + @Override + public void updateNicDetail(UpdateNicDetailCmd cmd){ + UserContext.current().setEventDetails("Nic Id: " + cmd.getId()); + Account caller = UserContext.current().getCaller(); + Long nicId = cmd.getId(); + String name = cmd.getName(); + String value = cmd.getValue(); + + NicVO nic = _nicDao.findById(nicId); + // _accountMgr.checkAccess(caller, null, true, nic); + NicDetailVO nicDetail = _nicDetailDao.findDetail(nicId, name); + if(nicDetail != null){ + nicDetail.setValue(value); + _nicDetailDao.update(nicDetail.getId(), nicDetail); + }else{ + throw new InvalidParameterValueException("This detail doesnt exist for the nic"); + } + + } + + @Override + public void removeNicDetail(RemoveNicDetailCmd cmd){ + Account caller = UserContext.current().getCaller(); + Long nicId = cmd.getId(); + String name = cmd.getName(); + + NicVO nic = _nicDao.findById(nicId); + //_accountMgr.checkAccess(caller, null, true, nic); + NicDetailVO nicDetail = _nicDetailDao.findDetail(nicId, name); + if(nicDetail != null){ + _nicDetailDao.remove(nicDetail.getId()); + }else{ + throw new InvalidParameterValueException("This detail doesnt exist for the nic "); + } + + } + } diff --git a/server/src/com/cloud/network/vpc/VpcManager.java b/server/src/com/cloud/network/vpc/VpcManager.java index 84ab8ef5dd7..3fad1aa1b0d 100644 --- a/server/src/com/cloud/network/vpc/VpcManager.java +++ b/server/src/com/cloud/network/vpc/VpcManager.java @@ -82,6 +82,7 @@ public interface VpcManager extends VpcService{ /** * Creates guest network in the VPC * + * * @param ntwkOffId * @param name * @param displayText @@ -97,14 +98,15 @@ public interface VpcManager extends VpcService{ * @param subdomainAccess * @param vpcId * @param caller + * @param displayNetworkEnabled * @return * @throws ConcurrentOperationException * @throws InsufficientCapacityException * @throws ResourceAllocationException */ - Network createVpcGuestNetwork(long ntwkOffId, String name, String displayText, String gateway, String cidr, - String vlanId, String networkDomain, Account owner, Long domainId, PhysicalNetwork pNtwk, long zoneId, - ACLType aclType, Boolean subdomainAccess, long vpcId, Account caller) + Network createVpcGuestNetwork(long ntwkOffId, String name, String displayText, String gateway, String cidr, + String vlanId, String networkDomain, Account owner, Long domainId, PhysicalNetwork pNtwk, long zoneId, + ACLType aclType, Boolean subdomainAccess, long vpcId, Account caller, Boolean displayNetworkEnabled) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException; diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index 224a6800326..4e171aa5509 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -1938,9 +1938,9 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis @DB @Override - public Network createVpcGuestNetwork(long ntwkOffId, String name, String displayText, String gateway, - String cidr, String vlanId, String networkDomain, Account owner, Long domainId, - PhysicalNetwork pNtwk, long zoneId, ACLType aclType, Boolean subdomainAccess, long vpcId, Account caller) + public Network createVpcGuestNetwork(long ntwkOffId, String name, String displayText, String gateway, + String cidr, String vlanId, String networkDomain, Account owner, Long domainId, + PhysicalNetwork pNtwk, long zoneId, ACLType aclType, Boolean subdomainAccess, long vpcId, Account caller, Boolean isDisplayNetworkEnabled) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { Vpc vpc = getActiveVpc(vpcId); @@ -1965,7 +1965,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis //2) Create network Network guestNetwork = _ntwkMgr.createGuestNetwork(ntwkOffId, name, displayText, gateway, cidr, vlanId, - networkDomain, owner, domainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, null, null); + networkDomain, owner, domainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, null, null, isDisplayNetworkEnabled); return guestNetwork; } diff --git a/server/src/com/cloud/vm/NicDetailsVO.java b/server/src/com/cloud/vm/NicDetailsVO.java deleted file mode 100644 index f7cc9df22e0..00000000000 --- a/server/src/com/cloud/vm/NicDetailsVO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.cloud.vm; - -/** - * Created with IntelliJ IDEA. - * User: nitinmehta - * Date: 15/04/13 - * Time: 5:03 PM - * To change this template use File | Settings | File Templates. - */ -public class NicDetailsVO { -} diff --git a/server/src/com/cloud/vm/dao/NicDetailDaoImpl.java b/server/src/com/cloud/vm/dao/NicDetailDaoImpl.java index 519e4e7d3ae..fd110359473 100644 --- a/server/src/com/cloud/vm/dao/NicDetailDaoImpl.java +++ b/server/src/com/cloud/vm/dao/NicDetailDaoImpl.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.vm.dao; +import com.cloud.storage.dao.SnapshotDao; +import com.cloud.storage.dao.VolumeDao; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -29,7 +31,7 @@ import java.util.List; import java.util.Map; @Component -@Local(value = { NicDetailDao.class }) +@Local (value={NicDetailDao.class}) public class NicDetailDaoImpl extends GenericDaoBase implements NicDetailDao { protected final SearchBuilder NicSearch; protected final SearchBuilder DetailSearch; diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 6a0263ee334..521dccfcdbb 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -45,19 +45,16 @@ import com.cloud.utils.Pair; import com.cloud.utils.component.ManagerBase; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; -import com.cloud.vm.NicSecondaryIp; import com.cloud.vm.NicVO; import com.cloud.vm.ReservationContext; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.VirtualMachineProfileImpl; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; +import org.apache.cloudstack.api.command.user.network.*; import org.apache.cloudstack.api.command.user.vm.ListNicsCmd; import org.springframework.stereotype.Component; @@ -178,7 +175,7 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkManage @Override public List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, - ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { + ACLType aclType, Boolean subdomainAccess, Long vpcId, Boolean isDisplayNetworkEnabled) throws ConcurrentOperationException { // TODO Auto-generated method stub return null; } @@ -249,7 +246,7 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkManage @Override public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, String cidr, String vlanId, String networkDomain, Account owner, Long domainId, - PhysicalNetwork physicalNetwork, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId, String gatewayv6, String cidrv6) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { + PhysicalNetwork physicalNetwork, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId, String gatewayv6, String cidrv6, Boolean displayNetworkEnabled) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { // TODO Auto-generated method stub return null; } @@ -862,6 +859,21 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkManage return null; } + @Override + public void removeNicDetail(RemoveNicDetailCmd removeNicDetailCmd) { + //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public void addNicDetail(AddNicDetailCmd addNicDetailCmd) { + //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public void updateNicDetail(UpdateNicDetailCmd updateNicDetailCmd) { + //To change body of implemented methods use File | Settings | File Templates. + } + @Override public String allocatePublicIpForGuestNic(Long networkId, DataCenter dc, Pod pod, Account caller, String requestedIp) diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index bfcccf54bf0..1a811a55110 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -49,19 +49,15 @@ import com.cloud.utils.Pair; import com.cloud.utils.component.ManagerBase; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; -import com.cloud.vm.NicSecondaryIp; import com.cloud.vm.NicVO; import com.cloud.vm.ReservationContext; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.VirtualMachineProfileImpl; import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; +import org.apache.cloudstack.api.command.user.network.*; import org.apache.cloudstack.api.command.user.vm.ListNicsCmd; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -666,7 +662,7 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkManage @Override public List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, - ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { + ACLType aclType, Boolean subdomainAccess, Long vpcId, Boolean isNetworkDisplayEnabled) throws ConcurrentOperationException { // TODO Auto-generated method stub return null; } @@ -830,8 +826,8 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkManage */ @Override public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, - String cidr, String vlanId, String networkDomain, Account owner, Long domainId, - PhysicalNetwork physicalNetwork, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId, String gatewayv6, String cidrv6) + String cidr, String vlanId, String networkDomain, Account owner, Long domainId, + PhysicalNetwork physicalNetwork, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId, String gatewayv6, String cidrv6, Boolean displayNetworkEnabled) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { // TODO Auto-generated method stub return null; @@ -1370,8 +1366,20 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkManage return null; } + @Override + public void removeNicDetail(RemoveNicDetailCmd removeNicDetailCmd) { + //To change body of implemented methods use File | Settings | File Templates. + } + @Override + public void addNicDetail(AddNicDetailCmd addNicDetailCmd) { + //To change body of implemented methods use File | Settings | File Templates. + } + @Override + public void updateNicDetail(UpdateNicDetailCmd updateNicDetailCmd) { + //To change body of implemented methods use File | Settings | File Templates. + } @Override diff --git a/server/test/com/cloud/vpc/MockVpcManagerImpl.java b/server/test/com/cloud/vpc/MockVpcManagerImpl.java index 0f269284127..feda7f398bd 100644 --- a/server/test/com/cloud/vpc/MockVpcManagerImpl.java +++ b/server/test/com/cloud/vpc/MockVpcManagerImpl.java @@ -303,7 +303,7 @@ public class MockVpcManagerImpl extends ManagerBase implements VpcManager { */ @Override public Network createVpcGuestNetwork(long ntwkOffId, String name, String displayText, String gateway, String cidr, String vlanId, String networkDomain, Account owner, Long domainId, PhysicalNetwork pNtwk, - long zoneId, ACLType aclType, Boolean subdomainAccess, long vpcId, Account caller) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { + long zoneId, ACLType aclType, Boolean subdomainAccess, long vpcId, Account caller, Boolean displayNetworkEnabled) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { // TODO Auto-generated method stub return null; } diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql index 2154d1cfeb2..10781b0909c 100644 --- a/setup/db/db/schema-410to420.sql +++ b/setup/db/db/schema-410to420.sql @@ -1387,6 +1387,7 @@ CREATE VIEW `cloud`.`volume_view` AS data_center.id data_center_id, data_center.uuid data_center_uuid, data_center.name data_center_name, + data_center.networktype data_center_type, vm_instance.id vm_id, vm_instance.uuid vm_uuid, vm_instance.name vm_name, diff --git a/test/integration/smoke/test_volumedetail.py b/test/integration/smoke/test_volumedetail.py new file mode 100644 index 00000000000..f734dbb4de6 --- /dev/null +++ b/test/integration/smoke/test_volumedetail.py @@ -0,0 +1,239 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +""" P1 tests for Scaling up Vm +""" +#Import Local Modules +import marvin +from marvin.cloudstackTestCase import * +from marvin.cloudstackAPI import * +from marvin.remoteSSHClient import remoteSSHClient +from marvin.integration.lib.utils import * +from marvin.integration.lib.base import * +from marvin.integration.lib.common import * +from nose.plugins.attrib import attr +#Import System modules +import time + +_multiprocess_shared_ = True +class Services: + """Test VM Life Cycle Services + """ + + def __init__(self): + self.services = { + + "account": { + "email": "test@test.com", + "firstname": "Test", + "lastname": "User", + "username": "test", + # Random characters are appended in create account to + # ensure unique username generated each time + "password": "password", + }, + "small": + # Create a small virtual machine instance with disk offering + { + "displayname": "testserver", + "username": "root", # VM creds for SSH + "password": "password", + "ssh_port": 22, + "hypervisor": 'XenServer', + "privateport": 22, + "publicport": 22, + "protocol": 'TCP', + }, + "disk_offering": { + "displaytext": "Small", + "name": "Small", + "storagetype": "shared", + "disksize": 1 + }, + "service_offerings": + { + "small": + { + # Small service offering ID to for change VM + # service offering from medium to small + "name": "SmallInstance", + "displaytext": "SmallInstance", + "cpunumber": 1, + "cpuspeed": 100, + "memory": 256, + }, + "big": + { + # Big service offering ID to for change VM + "name": "BigInstance", + "displaytext": "BigInstance", + "cpunumber": 1, + "cpuspeed": 100, + "memory": 512, + } + }, + #Change this + "template": { + "displaytext": "xs", + "name": "xs", + "passwordenabled": False, + }, + "diskdevice": '/dev/xvdd', + # Disk device where ISO is attached to instance + "mount_dir": "/mnt/tmp", + "sleep": 60, + "timeout": 10, + #Migrate VM to hostid + "ostype": 'CentOS 5.6 (64-bit)', + # CentOS 5.3 (64-bit) + } + +class TestVolumeDetail(cloudstackTestCase): + + @classmethod + def setUpClass(cls): + cls.api_client = super(TestVolumeDetail, cls).getClsTestClient().getApiClient() + cls.services = Services().services + + # Get Zone, Domain and templates + domain = get_domain(cls.api_client, cls.services) + zone = get_zone(cls.api_client, cls.services) + cls.services['mode'] = zone.networktype + + # Set Zones and disk offerings ?? + + # Create account, service offerings, vm. + cls.account = Account.create( + cls.api_client, + cls.services["account"], + domainid=domain.id + ) + + + cls.disk_offering = DiskOffering.create( + cls.api_client, + cls.services["disk_offering"] + ) + + #create a volume + cls.volume = Volume.create( + cls.api_client, + { "diskname" : "ndm"}, + zoneid=zone.id, + account=cls.account.name, + domainid=cls.account.domainid, + diskofferingid=cls.disk_offering.id + ) + #how does it work ?? + cls._cleanup = [ + cls.volume, + cls.account + ] + + @classmethod + def tearDownClass(cls): + cls.api_client = super(TestVolumeDetail, cls).getClsTestClient().getApiClient() + cleanup_resources(cls.api_client, cls._cleanup) + return + + def setUp(self): + self.apiclient = self.testClient.getApiClient() + self.dbclient = self.testClient.getDbConnection() + self.cleanup = [] + + def tearDown(self): + #Clean up, terminate the created ISOs + cleanup_resources(self.apiclient, self.cleanup) + return + + @attr(tags = ["advanced", "xenserver"]) + def test_01_updatevolumedetail(self): + """Test volume detail + """ + # Validate the following + # Scale up the vm and see if it scales to the new svc offering and is finally in running state + + self.debug("Testing ADD volume detail Volume-ID: %s " % ( + self.volume.id + )) + + cmd = addVolumeDetail.addVolumeDetailCmd() + cmd.name = self.volume.id + cmd.value = self.volume.id + cmd.id = self.volume.id + self.apiclient.addVolumeDetail(cmd) + + listVolumeDetailCmd = listVolumeDetails.listVolumeDetailsCmd() + listVolumeDetailCmd.id = self.volume.id + listVolumeDetailResponse = self.api_client.listVirtualMachines(listVolumeDetailCmd) + + self.assertNotEqual(len(listVolumeDetailResponse), 0, "Check if the list API \ + returns a non-empty response") + + volumedetail = listVolumeDetailResponse[0] + + #self.assertEqual(volumedetail.id, self.volume.id, "Check if the Volume returned is the same as the one we asked for") + + + self.assertEqual(volumedetail.name, self.volume.id, "Check if Volume has right name") + + self.assertEqual(volumedetail.value, self.volume.id, "Check if Volume has right value") + + #updatevolumedetail + self.debug("Testing UPDATE volume detail Volume-ID: %s " % ( + self.volume.id + )) + cmd = updateVolumeDetail.updateVolumeDetailCmd() + cmd.name = self.volume.id + cmd.value = self.disk_offering.id + cmd.id = self.volume.id + self.apiclient.addVolumeDetail(cmd) + + listVolumeDetailCmd = listVolumeDetails.listVolumeDetailsCmd() + listVolumeDetailCmd.id = self.volume.id + listVolumeDetailResponse = self.api_client.listVirtualMachines(listVolumeDetailCmd) + + self.assertNotEqual(len(listVolumeDetailResponse), 0, "Check if the list API \ + returns a non-empty response") + + volumedetail = listVolumeDetailResponse[0] + + #self.assertEqual(volumedetail.id, self.volume.id, "Check if the Volume returned is the same as the one we asked for") + + + self.assertEqual(volumedetail.name, self.volume.id, "Check if Volume has right name") + + self.assertEqual(volumedetail.value, self.disk_offering.id, "Check if Volume has right value") + + + #remove detail + self.debug("Testing REMOVE volume detail Volume-ID: %s " % ( + self.volume.id + )) + cmd = removeVolumeDetail.removeVolumeDetailCmd() + cmd.name = self.volume.id + cmd.id = self.volume.id + self.apiclient.removeVolumeDetail(cmd) + + listVolumeDetailCmd = listVolumeDetails.listVolumeDetailsCmd() + listVolumeDetailCmd.id = self.volume.id + listVolumeDetailResponse = self.api_client.listVirtualMachines(listVolumeDetailCmd) + + self.assertEqual(listVolumeDetailResponse, None, "Check if the list API \ + returns a non-empty response") + + + return