Merge branch '3.0.x' of ssh://git.cloud.com/var/lib/git/cloudstack-oss into 3.0.x

This commit is contained in:
Vijayendra Bhamidipati 2012-08-03 15:07:22 -04:00
commit 17001a6cad
25 changed files with 183 additions and 56 deletions

View File

@ -36,7 +36,7 @@ import com.cloud.exception.ResourceAllocationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.NetworkService;
import com.cloud.network.StorageNetworkService;
import com.cloud.network.VirtualNetworkApplianceService;
import com.cloud.network.VpcVirtualNetworkApplianceService;
import com.cloud.network.as.AutoScaleService;
import com.cloud.network.firewall.FirewallService;
import com.cloud.network.firewall.NetworkACLService;
@ -117,7 +117,7 @@ public abstract class BaseCmd {
public static SecurityGroupService _securityGroupService;
public static SnapshotService _snapshotService;
public static ConsoleProxyService _consoleProxyService;
public static VirtualNetworkApplianceService _routerService;
public static VpcVirtualNetworkApplianceService _routerService;
public static ResponseGenerator _responseGenerator;
public static EntityManager _entityMgr;
public static RulesService _rulesService;
@ -149,7 +149,7 @@ public abstract class BaseCmd {
_securityGroupService = locator.getManager(SecurityGroupService.class);
_snapshotService = locator.getManager(SnapshotService.class);
_consoleProxyService = locator.getManager(ConsoleProxyService.class);
_routerService = locator.getManager(VirtualNetworkApplianceService.class);
_routerService = locator.getManager(VpcVirtualNetworkApplianceService.class);
_entityMgr = locator.getManager(EntityManager.class);
_rulesService = locator.getManager(RulesService.class);
_lbService = locator.getManager(LoadBalancingRulesService.class);

View File

@ -217,7 +217,7 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd {
@Override
public void create() throws ResourceAllocationException{
try {
IpAddress ip = _networkService.allocateIP(_accountService.getAccount(getEntityOwnerId()), false, getZoneId());
IpAddress ip = _networkService.allocateIP(_accountService.getAccount(getEntityOwnerId()), getZoneId());
if (ip != null) {
this.setEntityId(ip.getId());
} else {

View File

@ -104,7 +104,7 @@ public class EnableStaticNatCmd extends BaseCmd{
@Override
public void execute() throws ResourceUnavailableException{
try {
boolean result = _rulesService.enableStaticNat(ipAddressId, virtualMachineId, getNetworkId(), false);
boolean result = _rulesService.enableStaticNat(ipAddressId, virtualMachineId, getNetworkId());
if (result) {
SuccessResponse response = new SuccessResponse(getCommandName());
this.setResponseObject(response);

View File

@ -38,7 +38,7 @@ public interface NetworkService {
List<? extends Network> getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner);
IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException,
IpAddress allocateIP(Account ipOwner, long zoneId) throws ResourceAllocationException,
InsufficientAddressCapacityException, ConcurrentOperationException;
boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException;

View File

@ -20,7 +20,7 @@ import com.cloud.network.router.VirtualRouter;
/**
* @author Alena Prokharchyk
*/
public interface VpcVirtualNetworkApplianceService {
public interface VpcVirtualNetworkApplianceService extends VirtualNetworkApplianceService{
/**
* @param router

View File

@ -60,7 +60,7 @@ public interface RulesService {
boolean applyPortForwardingRules(long ipAdddressId, Account caller) throws ResourceUnavailableException;
boolean enableStaticNat(long ipAddressId, long vmId, long networkId, boolean isSystemVm) throws NetworkRuleConflictException, ResourceUnavailableException;
boolean enableStaticNat(long ipAddressId, long vmId, long networkId) throws NetworkRuleConflictException, ResourceUnavailableException;
PortForwardingRule getPortForwardigRule(long ruleId);

View File

@ -32,7 +32,7 @@ public interface Volume extends ControlledEntity, BasedOn, StateObject<Volume.St
Snapshotting("There is a snapshot created on this volume, not backed up to secondary storage yet"),
Expunging("The volume is being expunging"),
Destroy("The volume is destroyed, and can't be recovered."),
UploadOp ("The volume upload operation is in progress");
UploadOp ("The volume upload operation is in progress or in short the volume is on secondary storage");
String _description;
@ -57,9 +57,10 @@ public interface Volume extends ControlledEntity, BasedOn, StateObject<Volume.St
s_fsm.addTransition(Creating, Event.OperationSucceeded, Ready);
s_fsm.addTransition(Creating, Event.DestroyRequested, Destroy);
s_fsm.addTransition(Creating, Event.CreateRequested, Creating);
s_fsm.addTransition(Allocated, Event.UploadRequested, UploadOp);
s_fsm.addTransition(Allocated, Event.UploadRequested, UploadOp);
s_fsm.addTransition(UploadOp, Event.CopyRequested, Creating);// CopyRequested for volume from sec to primary storage
s_fsm.addTransition(Creating, Event.CopySucceeded, Ready);
s_fsm.addTransition(UploadOp, Event.CopySucceeded, Ready);
s_fsm.addTransition(Creating, Event.CopyFailed, UploadOp);// Copying volume from sec to primary failed.
s_fsm.addTransition(UploadOp, Event.DestroyRequested, Destroy);
s_fsm.addTransition(Ready, Event.DestroyRequested, Destroy);
s_fsm.addTransition(Destroy, Event.ExpungingRequested, Expunging);

View File

@ -21,7 +21,7 @@ import com.cloud.consoleproxy.ConsoleProxyManager;
import com.cloud.ha.HighAvailabilityManager;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.NetworkManager;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
import com.cloud.server.ManagementServer;
import com.cloud.storage.StorageManager;
import com.cloud.storage.allocator.StoragePoolAllocator;
@ -154,7 +154,7 @@ public enum Config {
PingTimeout("Advanced", AgentManager.class, Float.class, "ping.timeout", "2.5", "Multiplier to ping.interval before announcing an agent has timed out", null),
ClusterDeltaSyncInterval("Advanced", AgentManager.class, Integer.class, "sync.interval", "60", "Cluster Delta sync interval in seconds", null),
Port("Advanced", AgentManager.class, Integer.class, "port", "8250", "Port to listen on for agent connection.", null),
RouterCpuMHz("Advanced", NetworkManager.class, Integer.class, "router.cpu.mhz", String.valueOf(VirtualNetworkApplianceManager.DEFAULT_ROUTER_CPU_MHZ), "Default CPU speed (MHz) for router VM.", null),
RouterCpuMHz("Advanced", NetworkManager.class, Integer.class, "router.cpu.mhz", String.valueOf(VpcVirtualNetworkApplianceManager.DEFAULT_ROUTER_CPU_MHZ), "Default CPU speed (MHz) for router VM.", null),
RestartRetryInterval("Advanced", HighAvailabilityManager.class, Integer.class, "restart.retry.interval", "600", "Time (in seconds) between retries to restart a vm", null),
RouterStatsInterval("Advanced", NetworkManager.class, Integer.class, "router.stats.interval", "300", "Interval (in seconds) to report router statistics.", null),
ExternalNetworkStatsInterval("Advanced", NetworkManager.class, Integer.class, "external.network.stats.interval", "300", "Interval (in seconds) to report external network statistics.", null),

View File

@ -122,7 +122,6 @@ import com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl;
import com.cloud.network.ovs.OvsTunnelManagerImpl;
import com.cloud.network.ovs.dao.OvsTunnelInterfaceDaoImpl;
import com.cloud.network.ovs.dao.OvsTunnelNetworkDaoImpl;
import com.cloud.network.router.VirtualNetworkApplianceManagerImpl;
import com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl;
import com.cloud.network.rules.RulesManagerImpl;
import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl;
@ -401,7 +400,6 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
addManager("Snapshot Manager", SnapshotManagerImpl.class);
addManager("SnapshotScheduler", SnapshotSchedulerImpl.class);
addManager("SecurityGroupManager", SecurityGroupManagerImpl2.class);
addManager("DomainRouterManager", VirtualNetworkApplianceManagerImpl.class);
addManager("EntityManager", EntityManagerImpl.class);
addManager("LoadBalancingRulesManager", LoadBalancingRulesManagerImpl.class);
addManager("AutoScaleManager", AutoScaleManagerImpl.class);

View File

@ -29,8 +29,8 @@ import com.cloud.host.Status;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.NetworkManager;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.router.VirtualRouter;
import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
import com.cloud.utils.component.Inject;
import com.cloud.vm.Nic;
import com.cloud.vm.UserVmVO;
@ -46,7 +46,7 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl {
@Inject private final UserVmDao _userVmDao = null;
@Inject private final AgentManager _agentMgr = null;
@Inject private final NetworkManager _networkMgr = null;
@Inject private final VirtualNetworkApplianceManager _vnaMgr = null;
@Inject private final VpcVirtualNetworkApplianceManager _vnaMgr = null;
@Override
public Boolean isVmAlive(VMInstanceVO vm, HostVO host) {

View File

@ -70,7 +70,6 @@ import com.cloud.hypervisor.vmware.util.VmwareContext;
import com.cloud.network.CiscoNexusVSMDeviceVO;
import com.cloud.network.NetworkManager;
import com.cloud.network.dao.CiscoNexusVSMDeviceDao;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.org.Cluster.ClusterType;
import com.cloud.secstorage.CommandExecLogDao;
import com.cloud.serializer.GsonHelper;
@ -92,7 +91,6 @@ import com.cloud.vm.DomainRouterVO;
import com.google.gson.Gson;
import com.vmware.apputils.vim25.ServiceUtil;
import com.vmware.vim25.HostConnectSpec;
import com.vmware.vim25.HostPortGroupSpec;
import com.vmware.vim25.ManagedObjectReference;
@Local(value = {VmwareManager.class})
@ -117,7 +115,6 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
@Inject CommandExecLogDao _cmdExecLogDao;
@Inject ClusterManager _clusterMgr;
@Inject CheckPointManager _checkPointMgr;
@Inject VirtualNetworkApplianceManager _routerMgr;
@Inject SecondaryStorageVmManager _ssvmMgr;
@Inject CiscoNexusVSMDeviceDao _nexusDao;
@Inject ClusterVSMMapDao _vsmMapDao;

View File

@ -1013,21 +1013,29 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@Override
@ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true)
public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId)
public IpAddress allocateIP(Account ipOwner, long zoneId)
throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException {
return allocateIP(ipOwner, false, zoneId);
}
private IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId)
throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException {
Account caller = UserContext.current().getCaller();
long callerUserId = UserContext.current().getCallerUserId();
// check permissions
_accountMgr.checkAccess(caller, null, false, ipOwner);
if (s_logger.isDebugEnabled()) {
s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId());
}
DataCenter zone = _configMgr.getZone(zoneId);
return allocateIp(ipOwner, isSystem, caller, callerUserId, zone);
return allocateIp(ipOwner, isSystem, caller, zone);
}
@DB
public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerUserId, DataCenter zone)
public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, DataCenter zone)
throws ConcurrentOperationException, ResourceAllocationException,
InsufficientAddressCapacityException {
@ -1046,9 +1054,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
Transaction txn = Transaction.currentTxn();
Account accountToLock = null;
try {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId());
}
accountToLock = _accountDao.acquireInLockTable(ipOwner.getId());
if (accountToLock == null) {
s_logger.warn("Unable to lock account: " + ipOwner.getId());
@ -6981,7 +6986,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
// allocate ip
ip = allocateIP(owner, true, guestNetwork.getDataCenterId());
// apply ip associations
ip = associateIPToNetwork(ip.getId(), networkId);
ip = associateIpToNetwork(ip.getId(), networkId);
} catch (ResourceAllocationException ex) {
throw new CloudRuntimeException("Failed to allocate system ip due to ", ex);
} catch (ConcurrentOperationException ex) {
@ -7143,7 +7148,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "associating Ip", async = true)
public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException,
ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException {
return associateIpToNetwork(ipId, networkId);
}
private IpAddress associateIpToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException,
ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException {
Network network = _networksDao.findById(networkId);
if (network == null) {
throw new InvalidParameterValueException("Invalid network id is given", null);

View File

@ -12,9 +12,6 @@
// Automatically generated by addcopyright.py at 04/03/2012
package com.cloud.network;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import com.cloud.agent.AgentManager;
@ -34,8 +31,6 @@ import com.cloud.host.HostVO;
import com.cloud.host.Status;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.router.VirtualNetworkApplianceManager;
public class SshKeysDistriMonitor implements Listener {

View File

@ -43,7 +43,6 @@ import com.cloud.network.NetworkManager;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.offering.NetworkOffering;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.uservm.UserVm;
@ -70,8 +69,6 @@ public class CloudZonesNetworkElement extends AdapterBase implements NetworkElem
@Inject
NetworkManager _networkMgr;
@Inject
VirtualNetworkApplianceManager _routerMgr;
@Inject
UserVmManager _userVmMgr;
@Inject
UserVmDao _userVmDao;

View File

@ -53,8 +53,8 @@ import com.cloud.network.dao.VirtualRouterProviderDao;
import com.cloud.network.lb.LoadBalancingRule;
import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;
import com.cloud.network.lb.LoadBalancingRulesManager;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.router.VirtualRouter.Role;
import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.LbStickinessMethod;
import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType;
@ -102,7 +102,7 @@ LoadBalancingServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServ
@Inject
NetworkOfferingDao _networkOfferingDao;
@Inject
VirtualNetworkApplianceManager _routerMgr;
VpcVirtualNetworkApplianceManager _routerMgr;
@Inject
ConfigurationManager _configMgr;
@Inject

View File

@ -89,7 +89,6 @@ import com.cloud.network.dao.VirtualRouterProviderDao;
import com.cloud.network.lb.LoadBalancingRule.LbDestination;
import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;
import com.cloud.network.lb.dao.ElasticLbVmMapDao;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.router.VirtualRouter;
import com.cloud.network.router.VirtualRouter.RedundantState;
import com.cloud.network.router.VirtualRouter.Role;
@ -149,8 +148,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
@Inject
LoadBalancingRulesManager _lbMgr;
@Inject
VirtualNetworkApplianceManager _routerMgr;
@Inject
DomainRouterDao _routerDao = null;
@Inject
protected HostPodDao _podDao = null;

View File

@ -128,6 +128,7 @@ import com.cloud.vm.dao.VMInstanceDao;
public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplianceManagerImpl implements VpcVirtualNetworkApplianceManager{
private static final Logger s_logger = Logger.getLogger(VpcVirtualNetworkApplianceManagerImpl.class);
String _name;
@Inject
VpcDao _vpcDao;
@Inject
@ -1348,4 +1349,5 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
_s2sVpnMgr.markDisconnectVpnConnByVpc(vpcId);
}
}
}

View File

@ -382,7 +382,11 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
@Override
@ActionEvent(eventType = EventTypes.EVENT_ENABLE_STATIC_NAT, eventDescription = "enabling static nat")
public boolean enableStaticNat(long ipId, long vmId, long networkId, boolean isSystemVm)
public boolean enableStaticNat(long ipId, long vmId, long networkId) throws NetworkRuleConflictException, ResourceUnavailableException {
return enableStaticNat(ipId, vmId, networkId, false);
}
private boolean enableStaticNat(long ipId, long vmId, long networkId, boolean isSystemVm)
throws NetworkRuleConflictException, ResourceUnavailableException {
UserContext ctx = UserContext.current();
Account caller = ctx.getCaller();

View File

@ -49,7 +49,6 @@ import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.RemoteAccessVpnDao;
import com.cloud.network.dao.VpnUserDao;
import com.cloud.network.element.RemoteAccessVPNServiceProvider;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.rules.FirewallManager;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.FirewallRule.Purpose;
@ -87,7 +86,6 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
@Inject VpnUserDao _vpnUsersDao;
@Inject RemoteAccessVpnDao _remoteAccessVpnDao;
@Inject IPAddressDao _ipAddressDao;
@Inject VirtualNetworkApplianceManager _routerMgr;
@Inject AccountManager _accountMgr;
@Inject DomainManager _domainMgr;
@Inject NetworkManager _networkMgr;

View File

@ -121,7 +121,6 @@ import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.hypervisor.HypervisorGuruManager;
import com.cloud.network.NetworkManager;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.org.Grouping;
import com.cloud.org.Grouping.AllocationState;
import com.cloud.projects.Project.ListProjectResourcesCriteria;
@ -293,8 +292,6 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
@Inject
protected ClusterDao _clusterDao;
@Inject
protected VirtualNetworkApplianceManager _routerMgr;
@Inject
protected UsageEventDao _usageEventDao;
@Inject
protected VirtualMachineManager _vmMgr;
@ -732,6 +729,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
StoragePoolVO destPool = findStoragePool(dskCh, dc, pod, clusterId, vm, avoidPools);
// Copy the volume from secondary storage to the destination storage pool
stateTransitTo(volume, Event.CopyRequested);
VolumeHostVO volumeHostVO = _volumeHostDao.findByVolumeId(volume.getId());
HostVO secStorage = _hostDao.findById(volumeHostVO.getHostId());
String secondaryStorageURL = secStorage.getStorageUrl();

View File

@ -37,7 +37,7 @@ import com.cloud.consoleproxy.ConsoleProxyManager;
import com.cloud.event.EventTypes;
import com.cloud.event.EventVO;
import com.cloud.event.UsageEventVO;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
import com.cloud.storage.secondary.SecondaryStorageVmManager;
import com.cloud.utils.DateUtil;
import com.cloud.utils.NumbersUtil;
@ -1404,7 +1404,7 @@ public class Upgrade218to22 implements DbUpgrade {
pstmt.close();
int proxyRamSize = NumbersUtil.parseInt(getConfigValue(conn, "consoleproxy.ram.size"), ConsoleProxyManager.DEFAULT_PROXY_VM_RAMSIZE);
int domrRamSize = NumbersUtil.parseInt(getConfigValue(conn, "router.ram.size"), VirtualNetworkApplianceManager.DEFAULT_ROUTER_VM_RAMSIZE);
int domrRamSize = NumbersUtil.parseInt(getConfigValue(conn, "router.ram.size"), VpcVirtualNetworkApplianceManager.DEFAULT_ROUTER_VM_RAMSIZE);
int ssvmRamSize = NumbersUtil.parseInt(getConfigValue(conn, "secstorage.vm.ram.size"), SecondaryStorageVmManager.DEFAULT_SS_VM_RAMSIZE);
pstmt = conn
@ -1563,7 +1563,7 @@ public class Upgrade218to22 implements DbUpgrade {
pstmt.close();
int proxyCpuMhz = NumbersUtil.parseInt(getConfigValue(conn, "consoleproxy.cpu.mhz"), ConsoleProxyManager.DEFAULT_PROXY_VM_CPUMHZ);
int domrCpuMhz = NumbersUtil.parseInt(getConfigValue(conn, "router.cpu.mhz"), VirtualNetworkApplianceManager.DEFAULT_ROUTER_CPU_MHZ);
int domrCpuMhz = NumbersUtil.parseInt(getConfigValue(conn, "router.cpu.mhz"), VpcVirtualNetworkApplianceManager.DEFAULT_ROUTER_CPU_MHZ);
int ssvmCpuMhz = NumbersUtil.parseInt(getConfigValue(conn, "secstorage.vm.cpu.mhz"), SecondaryStorageVmManager.DEFAULT_SS_VM_CPUMHZ);
pstmt = conn

View File

@ -120,6 +120,9 @@ known_categories = {
'VPC': 'VPC',
'PrivateGateway': 'VPC',
'StaticRoute': 'VPC',
'AutoScale': 'AutoScale',
'Counter': 'AutoScale',
'Condition': 'AutoScale'
}

View File

@ -9,7 +9,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
(function($, cloudStack) {
var zoneObjs, hypervisorObjs, featuredTemplateObjs, communityTemplateObjs, myTemplateObjs, featuredIsoObjs, community
var zoneObjs, hypervisorObjs, featuredTemplateObjs, communityTemplateObjs, myTemplateObjs, featuredIsoObjs, community;
var selectedZoneObj, selectedTemplateObj, selectedHypervisor, selectedDiskOfferingObj;
var step5ContainerType = 'nothing-to-select'; //'nothing-to-select', 'select-network', 'select-security-group'
@ -17,6 +17,17 @@
maxDiskOfferingSize: function() {
return g_capabilities.customdiskofferingmaxsize;
},
// Called in networks list, when VPC drop-down is changed
// -- if vpcID given, return true if in network specified by vpcID
// -- if vpcID == -1, return true if network is not associated with a VPC
vpcFilter: function(data, vpcID) {
return vpcID != -1?
data.vpcid == vpcID :
!data.vpcid;
},
// Data providers for each wizard step
steps: [
// Step 1: Setup
function(args) {
@ -301,11 +312,23 @@
networkData.account = g_account;
}
var networkObjs;
var networkObjs, vpcObjs;
// Get VPCs
$.ajax({
url: createURL('listVPCs'),
data: isDomainAdmin() ?
{ account: args.context.users[0].account, domainid: args.context.users[0].domainid } :
{ listAll: true },
async: false,
success: function(json) {
vpcObjs = json.listvpcsresponse.vpc ? json.listvpcsresponse.vpc : [];
}
});
$.ajax({
url: createURL('listNetworks'),
data: networkData,
dataType: "json",
async: false,
success: function(json) {
networkObjs = json.listnetworksresponse.network ? json.listnetworksresponse.network : [];
@ -337,7 +360,8 @@
myNetworks: [], //not used any more
sharedNetworks: networkObjs,
securityGroups: [],
networkOfferings: networkOfferingObjs
networkOfferings: networkOfferingObjs,
vpcs: vpcObjs
}
});
}
@ -370,7 +394,8 @@
myNetworks: [], //not used any more
sharedNetworks: [],
securityGroups: securityGroupArray,
networkOfferings: []
networkOfferings: [],
vpcs: []
}
});
}
@ -382,7 +407,8 @@
myNetworks: [], //not used any more
sharedNetworks: [],
securityGroups: [],
networkOfferings: []
networkOfferings: [],
vpcs: []
}
});
}

View File

@ -1408,6 +1408,7 @@
args.$tierSelect.change(function() {
args.$tierSelect.closest('.list-view').listView('refresh');
});
args.$tierSelect.closest('.list-view').listView('refresh');
},
listView: $.extend(true, {}, cloudStack.sections.instances, {
@ -3858,10 +3859,22 @@
},
{
displaytext: { label: 'label.description', isEditable: true },
account: { label: 'label.account' },
domain: { label: 'label.domain' },
zonename: { label: 'label.zone' },
cidr: { label: 'label.cidr' },
networkdomain: { label: 'label.network.domain' },
state: { label: 'label.state' },
restartrequired: {
label: 'label.restart.required',
converter: function(booleanValue) {
if (booleanValue == true) {
return "<font color='red'>Yes</font>";
}
return "No";
}
},
id: { label: 'label.id' }
}
],

View File

@ -103,6 +103,14 @@
.click(function() {
var $radio = $(this).closest('.select').find('input[type=radio]');
if ($(this).attr('type') == 'checkbox') {
if ($(this).closest('.select-container').hasClass('single-select')) {
$(this).closest('.select').siblings().find('input[type=checkbox]')
.attr('checked', false);
$(this).closest('.select').find('input[type=radio]').click();
}
}
if ($radio.is(':checked') && !$(this).is(':checked')) {
if (!$radio.closest('.select').index()) {
return false;
@ -121,7 +129,8 @@
$('<div>').addClass('select-desc')
.append($('<div>').addClass('name').html(this[fields.name]))
.append($('<div>').addClass('desc').html(this[fields.desc]))
);
)
.data('json-obj', this);
$selects.append($select);
@ -139,6 +148,11 @@
if (!$checkbox.is(':checked')) {
$checkbox.attr('checked', true);
}
if ($(this).closest('.select-container').hasClass('single-select')) {
$(this).closest('.select').siblings().find('input[type=checkbox]')
.attr('checked', false);
}
})
.after(
$('<div>').addClass('name').html(options.secondary.desc)
@ -480,9 +494,81 @@
// Show relevant conditional sub-step if present
$step.find('.wizard-step-conditional').hide();
// Filter network list by VPC ID
var filterNetworkList = function(vpcID) {
var $selects = $step.find('.my-networks .select-container .select');
var $visibleSelects = $($.grep($selects, function(select) {
var $select = $(select);
return args.vpcFilter($select.data('json-obj'), vpcID);
}));
var $addNetworkForm = $step.find('.select.new-network');
var $addNewNetworkCheck = $addNetworkForm.find('input[name=new-network]');
// VPC networks cannot be created via instance wizard
if (vpcID != -1) {
$step.find('.my-networks .select-container').addClass('single-select');
$addNetworkForm.hide();
if ($addNewNetworkCheck.is(':checked')) {
$addNewNetworkCheck.click();
$addNewNetworkCheck.attr('checked', false);
}
} else {
$step.find('.my-networks .select-container').removeClass('single-select');
$addNetworkForm.show();
}
$selects.find('input[type=checkbox]').attr('checked', false);
$selects.hide();
$visibleSelects.show();
// Select first visible item by default
$visibleSelects.filter(':first')
.find('input[type=radio]')
.click();
cloudStack.evenOdd($visibleSelects, 'div.select', {
even: function($elem) {
$elem.removeClass('odd');
$elem.addClass('even');
},
odd: function($elem) {
$elem.removeClass('even');
$elem.addClass('odd');
}
});
};
var $vpcSelect = $step.find('select[name=vpc-filter]');
$vpcSelect.unbind('change');
$vpcSelect.change(function() {
filterNetworkList($vpcSelect.val());
});
return {
response: {
success: function(args) {
var vpcs = args.data.vpcs;
// Populate VPC drop-down
$vpcSelect.html('');
$(vpcs).map(function(index, vpc) {
var $option = $('<option>');
var id = vpc.id;
var description = vpc.name;
$option.attr('value', id);
$option.html(description);
$option.appendTo($vpcSelect);
});
// 'No VPC' option
$('<option>').attr('value', '-1').html('None').prependTo($vpcSelect);
$vpcSelect.val(-1);
// Populate network offering drop-down
$(args.data.networkOfferings).each(function() {
$('<option>')
@ -516,6 +602,9 @@
})
);
// Show non-VPC networks by default
filterNetworkList(-1);
// Security groups (alt. page)
$step.find('.security-groups .select-container').append(
makeSelects('security-groups', args.data.securityGroups, {