Skip to content

Commit 22636d5

Browse files
committed
Merge branch 'master' into ui-plugins
2 parents 313b604 + 5d09b9f commit 22636d5

494 files changed

Lines changed: 6942 additions & 1600 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

api/src/com/cloud/network/NetworkModel.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import com.cloud.dc.Vlan;
2626
import com.cloud.exception.InsufficientAddressCapacityException;
27+
import com.cloud.exception.InvalidParameterValueException;
2728
import com.cloud.hypervisor.Hypervisor.HypervisorType;
2829
import com.cloud.network.Network.Capability;
2930
import com.cloud.network.Network.Provider;
@@ -252,4 +253,6 @@ Map<PublicIpAddress, Set<Service>> getIpToServices(List<? extends PublicIpAddres
252253
boolean isIP6AddressAvailableInNetwork(long networkId);
253254

254255
boolean isIP6AddressAvailableInVlan(long vlanId);
256+
257+
void checkIp6Parameters(String startIPv6, String endIPv6, String ip6Gateway, String ip6Cidr) throws InvalidParameterValueException;
255258
}

api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public class CreateVlanIpRangeCmd extends BaseCmd {
7575
description="optional parameter. Have to be specified for Direct Untagged vlan only.")
7676
private Long podId;
7777

78-
@Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, required=true, description="the beginning IP address in the VLAN IP range")
78+
@Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, description="the beginning IP address in the VLAN IP range")
7979
private String startIp;
8080

8181
@Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="the ID or VID of the VLAN. If not specified," +
@@ -94,6 +94,19 @@ public class CreateVlanIpRangeCmd extends BaseCmd {
9494
description="the physical network id")
9595
private Long physicalNetworkId;
9696

97+
@Parameter(name=ApiConstants.START_IPV6, type=CommandType.STRING, description="the beginning IPv6 address in the IPv6 network range")
98+
private String startIpv6;
99+
100+
@Parameter(name=ApiConstants.END_IPV6, type=CommandType.STRING, description="the ending IPv6 address in the IPv6 network range")
101+
private String endIpv6;
102+
103+
@Parameter(name=ApiConstants.IP6_GATEWAY, type=CommandType.STRING, description="the gateway of the IPv6 network. Required " +
104+
"for Shared networks and Isolated networks when it belongs to VPC")
105+
private String ip6Gateway;
106+
107+
@Parameter(name=ApiConstants.IP6_CIDR, type=CommandType.STRING, description="the CIDR of IPv6 network, must be at least /64")
108+
private String ip6Cidr;
109+
97110
/////////////////////////////////////////////////////
98111
/////////////////// Accessors ///////////////////////
99112
/////////////////////////////////////////////////////
@@ -141,6 +154,35 @@ public Long getZoneId() {
141154
public Long getProjectId() {
142155
return projectId;
143156
}
157+
158+
public String getStartIpv6() {
159+
if (startIpv6 == null) {
160+
return null;
161+
}
162+
return startIpv6.toLowerCase();
163+
}
164+
165+
public String getEndIpv6() {
166+
if (endIpv6 == null) {
167+
return null;
168+
}
169+
return endIpv6.toLowerCase();
170+
}
171+
172+
public String getIp6Gateway() {
173+
if (ip6Gateway == null) {
174+
return null;
175+
}
176+
return ip6Gateway.toLowerCase();
177+
}
178+
179+
public String getIp6Cidr() {
180+
if (ip6Cidr == null) {
181+
return null;
182+
}
183+
return ip6Cidr.toLowerCase();
184+
}
185+
144186
/////////////////////////////////////////////////////
145187
/////////////// API Implementation///////////////////
146188
/////////////////////////////////////////////////////
@@ -153,7 +195,6 @@ public Long getPhysicalNetworkId() {
153195
return physicalNetworkId;
154196
}
155197

156-
157198
@Override
158199
public String getCommandName() {
159200
return s_name;

awsapi/src/com/cloud/bridge/service/EC2RestServlet.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
import com.amazon.ec2.DetachVolumeResponse;
8787
import com.amazon.ec2.DisassociateAddressResponse;
8888
import com.amazon.ec2.GetPasswordDataResponse;
89+
import com.amazon.ec2.GroupItemType;
8990
import com.amazon.ec2.ImportKeyPairResponse;
9091
import com.amazon.ec2.LaunchPermissionItemType;
9192
import com.amazon.ec2.ModifyImageAttributeResponse;
@@ -1168,6 +1169,16 @@ private void runInstances( HttpServletRequest request, HttpServletResponse respo
11681169
EC2request.setKeyName(keyName[0]);
11691170
}
11701171

1172+
Enumeration<?> names = request.getParameterNames();
1173+
while( names.hasMoreElements()) {
1174+
String key = (String)names.nextElement();
1175+
if ( key.startsWith("SecurityGroup")) {
1176+
String[] value = request.getParameterValues(key);
1177+
if (null != value && 0 < value.length)
1178+
EC2request.addGroupName( value[0]);
1179+
}
1180+
}
1181+
11711182
// -> execute the request
11721183
EC2Engine engine = ServiceProvider.getInstance().getEC2Engine();
11731184
RunInstancesResponse EC2response = EC2SoapServiceImpl.toRunInstancesResponse( engine.runInstances( EC2request ), engine);
@@ -1678,13 +1689,16 @@ private void describeKeyPairs(HttpServletRequest request, HttpServletResponse re
16781689
throws ADBException, XMLStreamException, IOException {
16791690
EC2DescribeKeyPairs ec2Request = new EC2DescribeKeyPairs();
16801691

1681-
1682-
String[] keyNames = request.getParameterValues( "KeyName" );
1683-
if (keyNames != null) {
1684-
for (String keyName : keyNames) {
1685-
ec2Request.addKeyName(keyName);
1692+
Enumeration<?> names = request.getParameterNames();
1693+
while( names.hasMoreElements()) {
1694+
String key = (String)names.nextElement();
1695+
if ( key.startsWith("KeyName")) {
1696+
String[] value = request.getParameterValues( key);
1697+
if (null != value && 0 < value.length)
1698+
ec2Request.addKeyName( value[0]);
16861699
}
16871700
}
1701+
16881702
EC2Filter[] filterSet = extractFilters( request );
16891703
if (null != filterSet){
16901704
EC2KeyPairFilterSet vfs = new EC2KeyPairFilterSet();

awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,15 +1354,15 @@ public static DescribeInstancesResponse toDescribeInstancesResponse(EC2DescribeI
13541354
GroupSetType param4 = new GroupSetType();
13551355

13561356

1357-
String[] groups = inst.getGroupSet();
1357+
EC2SecurityGroup[] groups = inst.getGroupSet();
13581358
if (null == groups || 0 == groups.length) {
13591359
GroupItemType param5 = new GroupItemType();
13601360
param5.setGroupId("");
13611361
param4.addItem( param5 );
13621362
} else {
1363-
for (String group : groups) {
1363+
for (EC2SecurityGroup group : groups) {
13641364
GroupItemType param5 = new GroupItemType();
1365-
param5.setGroupId(group);
1365+
param5.setGroupId(group.getId());
13661366
param4.addItem( param5 );
13671367
}
13681368
}
@@ -1681,16 +1681,16 @@ public static RunInstancesResponse toRunInstancesResponse(EC2RunInstancesRespons
16811681

16821682
param1.setOwnerId(ownerId);
16831683

1684-
String[] groups = inst.getGroupSet();
1684+
EC2SecurityGroup[] groups = inst.getGroupSet();
16851685
GroupSetType param2 = new GroupSetType();
16861686
if (null == groups || 0 == groups.length) {
16871687
GroupItemType param3 = new GroupItemType();
16881688
param3.setGroupId("");
16891689
param2.addItem( param3 );
16901690
} else {
1691-
for (String group : groups) {
1691+
for (EC2SecurityGroup group : groups) {
16921692
GroupItemType param3 = new GroupItemType();
1693-
param3.setGroupId(group);
1693+
param3.setGroupId(group.getId());
16941694
param2.addItem( param3 );
16951695
}
16961696
}

awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java

Lines changed: 55 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -625,59 +625,6 @@ public EC2ImageAttributes describeImageAttribute(EC2DescribeImageAttribute reque
625625
return imageAtts;
626626
}
627627

628-
629-
630-
/**
631-
* If given a specific list of snapshots of interest, then only values from those snapshots are returned.
632-
*
633-
* @param interestedShots - can be null, should be a subset of all snapshots
634-
*/
635-
private EC2DescribeSnapshotsResponse listSnapshots( String[] interestedShots, List<CloudStackKeyValue> resourceTagSet ) throws Exception {
636-
EC2DescribeSnapshotsResponse snapshots = new EC2DescribeSnapshotsResponse();
637-
638-
List<CloudStackSnapshot> cloudSnaps;
639-
if (interestedShots == null || interestedShots.length == 0) {
640-
cloudSnaps = getApi().listSnapshots(null, null, null, null, null, null, null, null, null, resourceTagSet);
641-
} else {
642-
cloudSnaps = new ArrayList<CloudStackSnapshot>();
643-
644-
for(String id : interestedShots) {
645-
List<CloudStackSnapshot> tmpList = getApi().listSnapshots(null, null, id, null, null, null, null,
646-
null, null, resourceTagSet);
647-
cloudSnaps.addAll(tmpList);
648-
}
649-
}
650-
651-
if (cloudSnaps == null) {
652-
return null;
653-
}
654-
655-
for(CloudStackSnapshot cloudSnapshot : cloudSnaps) {
656-
EC2Snapshot shot = new EC2Snapshot();
657-
shot.setId(cloudSnapshot.getId());
658-
shot.setName(cloudSnapshot.getName());
659-
shot.setVolumeId(cloudSnapshot.getVolumeId());
660-
shot.setType(cloudSnapshot.getSnapshotType());
661-
shot.setState(cloudSnapshot.getState());
662-
shot.setCreated(cloudSnapshot.getCreated());
663-
shot.setAccountName(cloudSnapshot.getAccountName());
664-
shot.setDomainId(cloudSnapshot.getDomainId());
665-
666-
List<CloudStackKeyValue> resourceTags = cloudSnapshot.getTags();
667-
for(CloudStackKeyValue resourceTag : resourceTags) {
668-
EC2TagKeyValue param = new EC2TagKeyValue();
669-
param.setKey(resourceTag.getKey());
670-
if (resourceTag.getValue() != null)
671-
param.setValue(resourceTag.getValue());
672-
shot.addResourceTag(param);
673-
}
674-
675-
snapshots.addSnapshot(shot);
676-
}
677-
return snapshots;
678-
}
679-
680-
681628
// handlers
682629
/**
683630
* return password data from the instance
@@ -1459,10 +1406,12 @@ public EC2RunInstancesResponse runInstances(EC2RunInstances request) {
14591406
vm.setZoneName(resp.getZoneName());
14601407
vm.setTemplateId(resp.getTemplateId().toString());
14611408
if (resp.getSecurityGroupList() != null && resp.getSecurityGroupList().size() > 0) {
1462-
// TODO, we have a list of security groups, just return the first one?
14631409
List<CloudStackSecurityGroup> securityGroupList = resp.getSecurityGroupList();
14641410
for (CloudStackSecurityGroup securityGroup : securityGroupList) {
1465-
vm.addGroupName(securityGroup.getName());
1411+
EC2SecurityGroup param = new EC2SecurityGroup();
1412+
param.setId(securityGroup.getId());
1413+
param.setName(securityGroup.getName());
1414+
vm.addGroupName(param);
14661415
}
14671416
}
14681417
vm.setState(resp.getState());
@@ -1883,10 +1832,12 @@ private EC2DescribeInstancesResponse lookupInstances( String instanceId, EC2Desc
18831832
}
18841833

18851834
if (cloudVm.getSecurityGroupList() != null && cloudVm.getSecurityGroupList().size() > 0) {
1886-
// TODO, we have a list of security groups, just return the first one?
18871835
List<CloudStackSecurityGroup> securityGroupList = cloudVm.getSecurityGroupList();
18881836
for (CloudStackSecurityGroup securityGroup : securityGroupList) {
1889-
ec2Vm.addGroupName(securityGroup.getName());
1837+
EC2SecurityGroup param = new EC2SecurityGroup();
1838+
param.setId(securityGroup.getId());
1839+
param.setName(securityGroup.getName());
1840+
ec2Vm.addGroupName(param);
18901841
}
18911842
}
18921843

@@ -2088,6 +2039,53 @@ private EC2DescribeAddressesResponse listAddresses(String[] addressNames) throws
20882039
}
20892040
}
20902041

2042+
private EC2DescribeSnapshotsResponse listSnapshots( String[] snapshotIds, List<CloudStackKeyValue> resourceTagSet) throws Exception {
2043+
try {
2044+
EC2DescribeSnapshotsResponse snapshotSet = new EC2DescribeSnapshotsResponse();
2045+
2046+
List<CloudStackSnapshot> snapshots = getApi().listSnapshots(null, null, null, null, null, null, null, null, null, resourceTagSet);
2047+
if ( snapshots != null && snapshots.size() > 0) {
2048+
for ( CloudStackSnapshot snapshot : snapshots) {
2049+
boolean matched = false;
2050+
if ( snapshotIds.length > 0) {
2051+
for ( String snapshotId : snapshotIds) {
2052+
if (snapshot.getId().equalsIgnoreCase(snapshotId)) {
2053+
matched = true;
2054+
break;
2055+
}
2056+
}
2057+
} else matched = true;
2058+
2059+
if (!matched) continue ;
2060+
2061+
EC2Snapshot ec2Snapshot = new EC2Snapshot();
2062+
ec2Snapshot.setId(snapshot.getId());
2063+
ec2Snapshot.setName(snapshot.getName());
2064+
ec2Snapshot.setVolumeId(snapshot.getVolumeId());
2065+
ec2Snapshot.setType(snapshot.getSnapshotType());
2066+
ec2Snapshot.setState(snapshot.getState());
2067+
ec2Snapshot.setCreated(snapshot.getCreated());
2068+
ec2Snapshot.setAccountName(snapshot.getAccountName());
2069+
ec2Snapshot.setDomainId(snapshot.getDomainId());
2070+
2071+
List<CloudStackKeyValue> resourceTags = snapshot.getTags();
2072+
for( CloudStackKeyValue resourceTag : resourceTags) {
2073+
EC2TagKeyValue param = new EC2TagKeyValue();
2074+
param.setKey(resourceTag.getKey());
2075+
if ( resourceTag.getValue() != null)
2076+
param.setValue(resourceTag.getValue());
2077+
ec2Snapshot.addResourceTag(param);
2078+
}
2079+
snapshotSet.addSnapshot(ec2Snapshot);
2080+
}
2081+
}
2082+
return snapshotSet;
2083+
} catch(Exception e) {
2084+
logger.error( "List Snapshots - ", e);
2085+
throw new EC2ServiceException(ServerError.InternalError, e.getMessage());
2086+
}
2087+
}
2088+
20912089
/**
20922090
* Convert ingress rule to EC2IpPermission records
20932091
*

awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class EC2Instance {
4141
private String rootDeviceType;
4242
private String rootDeviceId;
4343
private String keyPairName;
44-
private List<String> groupSet;
44+
private List<EC2SecurityGroup> groupSet;
4545
private List<EC2TagKeyValue> tagsSet;
4646

4747
public EC2Instance() {
@@ -62,7 +62,7 @@ public EC2Instance() {
6262
rootDeviceType = null;
6363
rootDeviceId = null;
6464
keyPairName = null;
65-
groupSet = new ArrayList<String>();
65+
groupSet = new ArrayList<EC2SecurityGroup>();
6666
tagsSet = new ArrayList<EC2TagKeyValue>();
6767
}
6868

@@ -202,12 +202,12 @@ public void setKeyPairName(String param) {
202202
keyPairName = param;
203203
}
204204

205-
public void addGroupName( String param ) {
205+
public void addGroupName( EC2SecurityGroup param ) {
206206
groupSet.add( param );
207207
}
208-
209-
public String[] getGroupSet() {
210-
return groupSet.toArray(new String[0]);
208+
209+
public EC2SecurityGroup[] getGroupSet() {
210+
return groupSet.toArray(new EC2SecurityGroup[0]);
211211
}
212212

213213
public void addResourceTag( EC2TagKeyValue param ) {

awsapi/src/com/cloud/bridge/service/core/ec2/EC2InstanceFilterSet.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,10 @@ else if (filterName.equalsIgnoreCase( "root-device-name" ))
159159
}
160160
else if (filterName.equalsIgnoreCase( "group-id"))
161161
{
162-
String[] groupSet = vm.getGroupSet();
163-
for (String group : groupSet)
164-
if (containsString(group, valueSet)) return true;
162+
EC2SecurityGroup[] groupSet = vm.getGroupSet();
163+
for (EC2SecurityGroup group: groupSet) {
164+
if( containsString(group.getId(), valueSet)) return true;
165+
}
165166
return false;
166167
}
167168
else if (filterName.equalsIgnoreCase("tag-key"))

client/tomcatconf/tomcat6-nonssl.conf.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ CATALINA_TMPDIR="@MSENVIRON@/temp"
4141

4242
# Use JAVA_OPTS to set java.library.path for libtcnative.so
4343
#JAVA_OPTS="-Djava.library.path=/usr/lib64"
44-
JAVA_OPTS="-Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=45219 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@MSLOGDIR@ -XX:PermSize=128M"
44+
JAVA_OPTS="-Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=45219 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@MSLOGDIR@ -XX:PermSize=256M"
4545

4646
# What user should run tomcat
4747
TOMCAT_USER="@MSUSER@"

client/tomcatconf/tomcat6-ssl.conf.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ CATALINA_TMPDIR="@MSENVIRON@/temp"
4040

4141
# Use JAVA_OPTS to set java.library.path for libtcnative.so
4242
#JAVA_OPTS="-Djava.library.path=/usr/lib64"
43-
JAVA_OPTS="-Djava.awt.headless=true -Djavax.net.ssl.trustStore=/etc/cloud/management/cloudmanagementserver.keystore -Djavax.net.ssl.trustStorePassword=vmops.com -Dcom.sun.management.jmxremote.port=45219 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@MSLOGDIR@ -XX:PermSize=128M"
43+
JAVA_OPTS="-Djava.awt.headless=true -Djavax.net.ssl.trustStore=/etc/cloud/management/cloudmanagementserver.keystore -Djavax.net.ssl.trustStorePassword=vmops.com -Dcom.sun.management.jmxremote.port=45219 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@MSLOGDIR@ -XX:PermSize=256M"
4444

4545
# What user should run tomcat
4646
TOMCAT_USER="@MSUSER@"

0 commit comments

Comments
 (0)