fixed network predicates

This commit is contained in:
Adrian Cole 2011-05-10 17:16:53 -07:00
parent 67d5d8f1e7
commit 6ca5a99484
6 changed files with 173 additions and 79 deletions

View File

@ -50,6 +50,7 @@ public class NetworkOffering implements Comparable<NetworkOffering> {
private boolean isDefault;
private boolean supportsVLAN;
private TrafficType trafficType;
private GuestIPType guestIPType;
private Set<String> tags = ImmutableSet.of();
public Builder id(long id) {
@ -102,6 +103,11 @@ public class NetworkOffering implements Comparable<NetworkOffering> {
return this;
}
public Builder guestIPType(GuestIPType guestIPType) {
this.guestIPType = guestIPType;
return this;
}
public Builder tags(Set<String> tags) {
this.tags = ImmutableSet.copyOf(checkNotNull(tags, "tags"));
return this;
@ -109,7 +115,7 @@ public class NetworkOffering implements Comparable<NetworkOffering> {
public NetworkOffering build() {
return new NetworkOffering(id, name, displayText, created, availability, supportsVLAN, maxConnections,
isDefault, trafficType, networkRate, tags);
isDefault, trafficType, guestIPType, networkRate, tags);
}
}
@ -127,13 +133,15 @@ public class NetworkOffering implements Comparable<NetworkOffering> {
private boolean supportsVLAN;
@SerializedName("traffictype")
private TrafficType trafficType;
@SerializedName("guestiptype")
private GuestIPType guestIPType;
@SerializedName("networkrate")
private int networkRate = -1;
private String tags;
public NetworkOffering(long id, String name, String displayText, @Nullable Date created, String availability,
boolean supportsVLAN, @Nullable Integer maxConnections, boolean isDefault, TrafficType trafficType,
int networkRate, Set<String> tags) {
GuestIPType guestIPType, int networkRate, Set<String> tags) {
this.id = id;
this.name = name;
this.displayText = displayText;
@ -143,6 +151,7 @@ public class NetworkOffering implements Comparable<NetworkOffering> {
this.maxConnections = maxConnections;
this.isDefault = isDefault;
this.trafficType = trafficType;
this.guestIPType = guestIPType;
this.networkRate = networkRate;
this.tags = tags.size() == 0 ? null : Joiner.on(',').join(tags);
}
@ -207,7 +216,8 @@ public class NetworkOffering implements Comparable<NetworkOffering> {
/**
*
* @return the max number of concurrent connection the network offering supports
* @return the max number of concurrent connection the network offering
* supports
*/
@Nullable
public Integer getMaxConnections() {
@ -230,6 +240,14 @@ public class NetworkOffering implements Comparable<NetworkOffering> {
return trafficType;
}
/**
*
* @return the guest ip type for this network offering
*/
public GuestIPType getGuestIPType() {
return guestIPType;
}
/**
*
* @return data transfer rate in megabits per second allowed.

View File

@ -0,0 +1,61 @@
/**
*
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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.
* ====================================================================
*/
package org.jclouds.cloudstack.predicates;
import static com.google.common.base.Predicates.alwaysTrue;
import org.jclouds.cloudstack.domain.GuestIPType;
import org.jclouds.cloudstack.domain.NetworkOffering;
import org.jclouds.cloudstack.domain.TrafficType;
import com.google.common.base.Predicate;
/**
*
* @author Adrian Cole
*/
public class NetworkOfferingPredicates {
/**
*
* @return true, if the offering supports creation of GuestVirtual Networks
*/
public static Predicate<NetworkOffering> supportsGuestVirtualNetworks() {
return new Predicate<NetworkOffering>() {
@Override
public boolean apply(NetworkOffering arg0) {
return arg0.getTrafficType() == TrafficType.GUEST && arg0.getGuestIPType() == GuestIPType.VIRTUAL;
}
@Override
public String toString() {
return "supportsGuestVirtualNetworks()";
}
};
}
/**
*
* @return always returns true.
*/
public static Predicate<NetworkOffering> any() {
return alwaysTrue();
}
}

View File

@ -19,46 +19,64 @@
package org.jclouds.cloudstack.predicates;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Predicates.alwaysTrue;
import static com.google.common.base.Predicates.and;
import static com.google.common.base.Predicates.not;
import org.jclouds.cloudstack.domain.NetworkType;
import org.jclouds.cloudstack.domain.Zone;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
/**
*
* @author Adrian Cole
*/
public class ZonePredicates {
public static class SupportsNetworkType implements Predicate<Zone> {
private final org.jclouds.cloudstack.domain.NetworkType type;
public SupportsNetworkType(org.jclouds.cloudstack.domain.NetworkType type) {
this.type = checkNotNull(type, "type");
}
@Override
public boolean apply(Zone input) {
return type.equals(checkNotNull(input, "zone").getNetworkType());
}
@Override
public String toString() {
return "supportsNetworkType(" + type + ")";
}
}
static Predicate<Zone> supportsAdvancedNetworks = new SupportsNetworkType(
org.jclouds.cloudstack.domain.NetworkType.ADVANCED);
/**
*
* @return true, if the zone supports {@link NetworkType.ADVANCED}
*/
public static Predicate<Zone> supportsAdvancedNetworks() {
return supportsAdvancedNetworks;
return new Predicate<Zone>() {
@Override
public boolean apply(Zone input) {
return NetworkType.ADVANCED.equals(checkNotNull(input, "zone").getNetworkType());
}
@Override
public String toString() {
return "supportsAvancedNetworks()";
}
};
}
/**
*
* @return true, if the zone supports security groups
*/
public static Predicate<Zone> supportsSecurityGroups() {
return new Predicate<Zone>() {
@Override
public boolean apply(Zone input) {
return input.isSecurityGroupsEnabled();
}
@Override
public String toString() {
return "supportsSecurityGroups()";
}
};
}
/**
*
* @return true, if the zone supports creation of GuestVirtual Networks
*/
public static Predicate<Zone> supportsGuestVirtualNetworks() {
return and(supportsAdvancedNetworks(), not(supportsSecurityGroups()));
}
/**
@ -66,6 +84,6 @@ public class ZonePredicates {
* @return always returns true.
*/
public static Predicate<Zone> any() {
return Predicates.alwaysTrue();
return alwaysTrue();
}
}

View File

@ -75,7 +75,8 @@ public class AccountClientLiveTest extends BaseCloudStackClientLiveTest {
assert account.getVMLimit() == null || account.getVMLimit() >= 0 : account;
assert account.getVMsRunning() >= 0 : account;
assert account.getVMsStopped() >= 0 : account;
assert account.getVMs() >= 0 : account;
// TODO update to 2.2.4 as this is a bug in 2.2.3
// assert account.getVMs() >= 0 : account;
assert account.getVolumesAvailable() == null || account.getVolumesAvailable() >= 0 : account;
assert account.getVolumeLimit() == null || account.getVolumeLimit() >= 0 : account;
assert account.getVolumes() >= 0 : account;

View File

@ -30,12 +30,12 @@ import org.jclouds.cloudstack.domain.Network;
import org.jclouds.cloudstack.domain.NetworkOffering;
import org.jclouds.cloudstack.domain.Zone;
import org.jclouds.cloudstack.options.ListNetworksOptions;
import org.jclouds.cloudstack.predicates.NetworkOfferingPredicates;
import org.jclouds.cloudstack.predicates.ZonePredicates;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
/**
@ -58,21 +58,17 @@ public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest {
super.setupClient();
try {
zone = find(client.getZoneClient().listZones(), ZonePredicates.supportsAdvancedNetworks());
offering = Iterables.find(client.getOfferingClient().listNetworkOfferings(), new Predicate<NetworkOffering>() {
@Override
public boolean apply(NetworkOffering arg0) {
return "Optional".equals(arg0.getAvailability());
}
});
// you can create guest direct network by Admin user, but since we are
// not admin, let's try to create a guest virtual one
zone = find(client.getZoneClient().listZones(), ZonePredicates.supportsGuestVirtualNetworks());
offering = Iterables.find(client.getOfferingClient().listNetworkOfferings(),
NetworkOfferingPredicates.supportsGuestVirtualNetworks());
networksSupported = true;
} catch (NoSuchElementException e) {
}
}
public void testCreateNetworks() throws Exception {
public void testCreateNetwork() throws Exception {
if (!networksSupported)
return;
network = client.getNetworkClient().createNetworkInZone(zone.getId(), offering.getId(), prefix, prefix);

View File

@ -72,39 +72,39 @@ public class VirtualMachineClientLiveTest extends BaseCloudStackClientLiveTest {
static final Ordering<ServiceOffering> DEFAULT_SIZE_ORDERING = new Ordering<ServiceOffering>() {
public int compare(ServiceOffering left, ServiceOffering right) {
return ComparisonChain.start().compare(left.getCpuNumber(), right.getCpuNumber()).compare(left.getMemory(),
right.getMemory()).result();
return ComparisonChain.start().compare(left.getCpuNumber(), right.getCpuNumber())
.compare(left.getMemory(), right.getMemory()).result();
}
};
public static VirtualMachine createVirtualMachine(CloudStackClient client, RetryablePredicate<Long> jobComplete,
RetryablePredicate<VirtualMachine> virtualMachineRunning) {
RetryablePredicate<VirtualMachine> virtualMachineRunning) {
Set<Network> networks = client.getNetworkClient().listNetworks();
if (networks.size() > 0) {
return createVirtualMachineInNetwork(get(networks, 0), client, jobComplete, virtualMachineRunning);
} else {
return createVirtualMachineWithSecurityGroupInZone(find(client.getZoneClient().listZones(),
new Predicate<Zone>() {
return createVirtualMachineWithSecurityGroupInZone(
find(client.getZoneClient().listZones(), new Predicate<Zone>() {
@Override
public boolean apply(Zone arg0) {
return arg0.isSecurityGroupsEnabled();
}
@Override
public boolean apply(Zone arg0) {
return arg0.isSecurityGroupsEnabled();
}
}).getId(), get(client.getSecurityGroupClient().listSecurityGroups(), 0).getId(), client,
jobComplete, virtualMachineRunning);
}).getId(), get(client.getSecurityGroupClient().listSecurityGroups(), 0).getId(), client, jobComplete,
virtualMachineRunning);
}
}
public static VirtualMachine createVirtualMachineWithSecurityGroupInZone(long zoneId, long groupId,
CloudStackClient client, RetryablePredicate<Long> jobComplete,
RetryablePredicate<VirtualMachine> virtualMachineRunning) {
CloudStackClient client, RetryablePredicate<Long> jobComplete,
RetryablePredicate<VirtualMachine> virtualMachineRunning) {
return createVirtualMachineWithOptionsInZone(new DeployVirtualMachineOptions().securityGroupId(groupId), zoneId,
client, jobComplete, virtualMachineRunning);
client, jobComplete, virtualMachineRunning);
}
public static VirtualMachine createVirtualMachineInNetwork(Network network, CloudStackClient client,
RetryablePredicate<Long> jobComplete, RetryablePredicate<VirtualMachine> virtualMachineRunning) {
RetryablePredicate<Long> jobComplete, RetryablePredicate<VirtualMachine> virtualMachineRunning) {
DeployVirtualMachineOptions options = new DeployVirtualMachineOptions();
long zoneId = network.getZoneId();
options.networkId(network.getId());
@ -112,8 +112,8 @@ public class VirtualMachineClientLiveTest extends BaseCloudStackClientLiveTest {
}
public static VirtualMachine createVirtualMachineWithOptionsInZone(DeployVirtualMachineOptions options,
final long zoneId, CloudStackClient client, RetryablePredicate<Long> jobComplete,
RetryablePredicate<VirtualMachine> virtualMachineRunning) {
final long zoneId, CloudStackClient client, RetryablePredicate<Long> jobComplete,
RetryablePredicate<VirtualMachine> virtualMachineRunning) {
// TODO enum, as this is way too easy to mess up.
Set<String> acceptableCategories = ImmutableSet.of("Ubuntu", "CentOS");
@ -121,9 +121,9 @@ public class VirtualMachineClientLiveTest extends BaseCloudStackClientLiveTest {
final Predicate<Template> osTypePredicate = new OSCategoryIn(client).apply(acceptableCategories);
Predicate<Template> templatePredicate = Predicates.<Template> and(TemplatePredicates.isReady(),
hypervisorPredicate, osTypePredicate);
Iterable<Template> templates = filter(client.getTemplateClient().listTemplates(
ListTemplatesOptions.Builder.zoneId(zoneId)), templatePredicate);
hypervisorPredicate, osTypePredicate);
Iterable<Template> templates = filter(
client.getTemplateClient().listTemplates(ListTemplatesOptions.Builder.zoneId(zoneId)), templatePredicate);
if (Iterables.any(templates, TemplatePredicates.isPasswordEnabled())) {
templates = filter(templates, TemplatePredicates.isPasswordEnabled());
}
@ -134,14 +134,14 @@ public class VirtualMachineClientLiveTest extends BaseCloudStackClientLiveTest {
long serviceOfferingId = DEFAULT_SIZE_ORDERING.min(client.getOfferingClient().listServiceOfferings()).getId();
System.out.printf("serviceOfferingId %d, templateId %d, zoneId %d, options %s%n", serviceOfferingId, templateId,
zoneId, options);
AsyncCreateResponse job = client.getVirtualMachineClient().deployVirtualMachineInZone(serviceOfferingId, templateId,
zoneId, options);
zoneId, options);
AsyncCreateResponse job = client.getVirtualMachineClient().deployVirtualMachineInZone(zoneId, serviceOfferingId,
templateId, options);
assert jobComplete.apply(job.getJobId());
AsyncJob<VirtualMachine> jobWithResult = client.getAsyncJobClient().<VirtualMachine> getAsyncJob(job.getJobId());
if (jobWithResult.getError() != null)
Throwables.propagate(new ExecutionException(String.format("job %s failed with exception %s", job.getId(),
jobWithResult.getError().toString())) {
jobWithResult.getError().toString())) {
private static final long serialVersionUID = 4371112085613620239L;
});
VirtualMachine vm = jobWithResult.getResult();
@ -221,7 +221,7 @@ public class VirtualMachineClientLiveTest extends BaseCloudStackClientLiveTest {
assertTrue(response.size() >= 0);
for (VirtualMachine vm : response) {
VirtualMachine newDetails = getOnlyElement(client.getVirtualMachineClient().listVirtualMachines(
ListVirtualMachinesOptions.Builder.id(vm.getId())));
ListVirtualMachinesOptions.Builder.id(vm.getId())));
assertEquals(vm.getId(), newDetails.getId());
checkVm(vm);
}
@ -258,20 +258,20 @@ public class VirtualMachineClientLiveTest extends BaseCloudStackClientLiveTest {
assert nic.getTrafficType() != null : vm;
assert nic.getGuestIPType() != null : vm;
switch (vm.getState()) {
case RUNNING:
assert nic.getNetmask() != null : vm;
assert nic.getGateway() != null : vm;
assert nic.getIPAddress() != null : vm;
break;
case STARTING:
assert nic.getNetmask() == null : vm;
assert nic.getGateway() == null : vm;
assert nic.getIPAddress() == null : vm;
break;
default:
assert nic.getNetmask() != null : vm;
assert nic.getGateway() != null : vm;
assert nic.getIPAddress() != null : vm;
case RUNNING:
assert nic.getNetmask() != null : vm;
assert nic.getGateway() != null : vm;
assert nic.getIPAddress() != null : vm;
break;
case STARTING:
assert nic.getNetmask() == null : vm;
assert nic.getGateway() == null : vm;
assert nic.getIPAddress() == null : vm;
break;
default:
assert nic.getNetmask() != null : vm;
assert nic.getGateway() != null : vm;
assert nic.getIPAddress() != null : vm;
}
}