mirror of https://github.com/apache/jclouds.git
flattened virtualguest.billingItem.id into virtualguest.billingItemId and added test cases for VirtualGuestToNodeMetadata
This commit is contained in:
parent
032c1b9246
commit
5d179a6bd8
|
@ -59,6 +59,7 @@ public class SoftLayerComputeServiceContextModule extends
|
||||||
@Override
|
@Override
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
super.configure();
|
super.configure();
|
||||||
|
install(new SoftLayerParserModule());
|
||||||
bind(new TypeLiteral<ComputeServiceAdapter<VirtualGuest, Set<ProductItem>, ProductItem, Datacenter>>() {})
|
bind(new TypeLiteral<ComputeServiceAdapter<VirtualGuest, Set<ProductItem>, ProductItem, Datacenter>>() {})
|
||||||
.to(SoftLayerComputeServiceAdapter.class);
|
.to(SoftLayerComputeServiceAdapter.class);
|
||||||
bind(new TypeLiteral<Function<VirtualGuest, NodeMetadata>>() {})
|
bind(new TypeLiteral<Function<VirtualGuest, NodeMetadata>>() {})
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds 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.
|
||||||
|
*/
|
||||||
|
package org.jclouds.softlayer.compute.config;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
|
import org.jclouds.softlayer.domain.Datacenter;
|
||||||
|
import org.jclouds.softlayer.domain.OperatingSystem;
|
||||||
|
import org.jclouds.softlayer.domain.PowerState;
|
||||||
|
import org.jclouds.softlayer.domain.VirtualGuest;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.gson.JsonDeserializationContext;
|
||||||
|
import com.google.gson.JsonDeserializer;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonParseException;
|
||||||
|
import com.google.gson.JsonSerializationContext;
|
||||||
|
import com.google.gson.JsonSerializer;
|
||||||
|
import com.google.inject.AbstractModule;
|
||||||
|
import com.google.inject.TypeLiteral;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public class SoftLayerParserModule extends AbstractModule {
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public static class VirtualGuestAdapter implements JsonSerializer<VirtualGuest>, JsonDeserializer<VirtualGuest> {
|
||||||
|
|
||||||
|
public JsonElement serialize(VirtualGuest src, Type typeOfSrc, JsonSerializationContext context) {
|
||||||
|
return context.serialize(src);
|
||||||
|
}
|
||||||
|
|
||||||
|
public VirtualGuest deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
|
||||||
|
throws JsonParseException {
|
||||||
|
return apply(context.<VirtualGuestInternal> deserialize(json, VirtualGuestInternal.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
public VirtualGuest apply(VirtualGuestInternal in) {
|
||||||
|
return in;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal class that flattens billingItem into billingItemId
|
||||||
|
*/
|
||||||
|
public static class VirtualGuestInternal extends VirtualGuest {
|
||||||
|
private BillingItem billingItem;
|
||||||
|
|
||||||
|
public VirtualGuestInternal(int accountId, Date createDate, boolean dedicatedAccountHostOnly, String domain,
|
||||||
|
String fullyQualifiedDomainName, String hostname, int id, Date lastVerifiedDate, int maxCpu,
|
||||||
|
String maxCpuUnits, int maxMemory, Date metricPollDate, Date modifyDate, String notes,
|
||||||
|
boolean privateNetworkOnly, int startCpus, int statusId, String uuid, String primaryBackendIpAddress,
|
||||||
|
String primaryIpAddress, int billingItemId, OperatingSystem operatingSystem, Datacenter datacenter,
|
||||||
|
PowerState powerState) {
|
||||||
|
super(accountId, createDate, dedicatedAccountHostOnly, domain, fullyQualifiedDomainName, hostname, id,
|
||||||
|
lastVerifiedDate, maxCpu, maxCpuUnits, maxMemory, metricPollDate, modifyDate, notes,
|
||||||
|
privateNetworkOnly, startCpus, statusId, uuid, primaryBackendIpAddress, primaryIpAddress,
|
||||||
|
billingItemId, operatingSystem, datacenter, powerState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getBillingItemId() {
|
||||||
|
return billingItem != null ? billingItem.id : -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class BillingItem {
|
||||||
|
|
||||||
|
private int id = -1;
|
||||||
|
|
||||||
|
// for deserializer
|
||||||
|
BillingItem() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public BillingItem(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "[id=" + id + "]";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
bind(new TypeLiteral<Map<Type, Object>>() {
|
||||||
|
}).toInstance(ImmutableMap.<Type, Object> of(VirtualGuest.class, new VirtualGuestAdapter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -29,8 +29,6 @@ import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.jclouds.collect.FindResourceInSet;
|
import org.jclouds.collect.FindResourceInSet;
|
||||||
import org.jclouds.collect.Memoized;
|
import org.jclouds.collect.Memoized;
|
||||||
import org.jclouds.compute.domain.Hardware;
|
|
||||||
import org.jclouds.compute.domain.Image;
|
|
||||||
import org.jclouds.compute.domain.NodeMetadata;
|
import org.jclouds.compute.domain.NodeMetadata;
|
||||||
import org.jclouds.compute.domain.NodeMetadataBuilder;
|
import org.jclouds.compute.domain.NodeMetadataBuilder;
|
||||||
import org.jclouds.compute.domain.NodeState;
|
import org.jclouds.compute.domain.NodeState;
|
||||||
|
@ -51,25 +49,18 @@ import com.google.common.collect.ImmutableSet;
|
||||||
public class VirtualGuestToNodeMetadata implements Function<VirtualGuest, NodeMetadata> {
|
public class VirtualGuestToNodeMetadata implements Function<VirtualGuest, NodeMetadata> {
|
||||||
|
|
||||||
public static final Map<VirtualGuest.State, NodeState> serverStateToNodeState = ImmutableMap
|
public static final Map<VirtualGuest.State, NodeState> serverStateToNodeState = ImmutableMap
|
||||||
.<VirtualGuest.State, NodeState> builder()
|
.<VirtualGuest.State, NodeState> builder().put(VirtualGuest.State.HALTED, NodeState.PENDING).put(
|
||||||
.put(VirtualGuest.State.HALTED, NodeState.PENDING)
|
VirtualGuest.State.PAUSED, NodeState.SUSPENDED).put(VirtualGuest.State.RUNNING, NodeState.RUNNING)
|
||||||
.put(VirtualGuest.State.PAUSED, NodeState.SUSPENDED)
|
.put(VirtualGuest.State.UNRECOGNIZED, NodeState.UNRECOGNIZED).build();
|
||||||
.put(VirtualGuest.State.RUNNING, NodeState.RUNNING)
|
|
||||||
.put(VirtualGuest.State.UNRECOGNIZED, NodeState.UNRECOGNIZED)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
private final FindHardwareForVirtualGuest findHardwareForVirtualGuest;
|
|
||||||
private final FindLocationForVirtualGuest findLocationForVirtualGuest;
|
|
||||||
private final FindImageForVirtualGuest findImageForVirtualGuest;
|
|
||||||
private final Map<String, Credentials> credentialStore;
|
private final Map<String, Credentials> credentialStore;
|
||||||
|
private final FindLocationForVirtualGuest findLocationForVirtualGuest;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
VirtualGuestToNodeMetadata(Map<String, Credentials> credentialStore, FindHardwareForVirtualGuest findHardwareForVirtualGuest,
|
VirtualGuestToNodeMetadata(Map<String, Credentials> credentialStore,
|
||||||
FindLocationForVirtualGuest findLocationForVirtualGuest, FindImageForVirtualGuest findImageForVirtualGuest) {
|
FindLocationForVirtualGuest findLocationForVirtualGuest) {
|
||||||
this.credentialStore = checkNotNull(credentialStore, "credentialStore");
|
this.credentialStore = checkNotNull(credentialStore, "credentialStore");
|
||||||
this.findHardwareForVirtualGuest = checkNotNull(findHardwareForVirtualGuest, "findHardwareForVirtualGuest");
|
|
||||||
this.findLocationForVirtualGuest = checkNotNull(findLocationForVirtualGuest, "findLocationForVirtualGuest");
|
this.findLocationForVirtualGuest = checkNotNull(findLocationForVirtualGuest, "findLocationForVirtualGuest");
|
||||||
this.findImageForVirtualGuest = checkNotNull(findImageForVirtualGuest, "findImageForVirtualGuest");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -77,67 +68,40 @@ public class VirtualGuestToNodeMetadata implements Function<VirtualGuest, NodeMe
|
||||||
// convert the result object to a jclouds NodeMetadata
|
// convert the result object to a jclouds NodeMetadata
|
||||||
NodeMetadataBuilder builder = new NodeMetadataBuilder();
|
NodeMetadataBuilder builder = new NodeMetadataBuilder();
|
||||||
builder.ids(from.getId() + "");
|
builder.ids(from.getId() + "");
|
||||||
builder.name(from.getNotes());
|
builder.name(from.getHostname());
|
||||||
builder.location(findLocationForVirtualGuest.apply(from));
|
builder.location(findLocationForVirtualGuest.apply(from));
|
||||||
builder.group(parseGroupFromName(from.getNotes()));
|
builder.group(parseGroupFromName(from.getHostname()));
|
||||||
//TODO determine image id (product price)from virtual guest
|
// TODO determine image id (product price)from virtual guest
|
||||||
// builder.imageId(from.imageId + "");
|
// builder.imageId(from.imageId + "");
|
||||||
Image image = findImageForVirtualGuest.apply(from);
|
// TODO make operating system from virtual guest
|
||||||
if (image != null)
|
// builder.operatingSystem(OperatingSystem.builder()...);
|
||||||
builder.operatingSystem(image.getOperatingSystem());
|
// TODO make hardware from virtual guest
|
||||||
builder.hardware(findHardwareForVirtualGuest.apply(from));
|
// builder.hardware(Hardware.builder()...);
|
||||||
builder.state(serverStateToNodeState.get(from.getPowerState().getKeyName()));
|
builder.state(serverStateToNodeState.get(from.getPowerState().getKeyName()));
|
||||||
|
|
||||||
// These are null for 'bad' guest orders in the HALTED state.
|
// These are null for 'bad' guest orders in the HALTED state.
|
||||||
if (from.getPrimaryIpAddress()!=null)builder.publicAddresses(ImmutableSet.<String> of(from.getPrimaryIpAddress()));
|
if (from.getPrimaryIpAddress() != null)
|
||||||
if (from.getPrimaryBackendIpAddress()!=null)builder.privateAddresses(ImmutableSet.<String> of(from.getPrimaryBackendIpAddress()));
|
builder.publicAddresses(ImmutableSet.<String> of(from.getPrimaryIpAddress()));
|
||||||
|
if (from.getPrimaryBackendIpAddress() != null)
|
||||||
|
builder.privateAddresses(ImmutableSet.<String> of(from.getPrimaryBackendIpAddress()));
|
||||||
|
|
||||||
builder.credentials(credentialStore.get("node#"+ from.getId()));
|
builder.credentials(credentialStore.get("node#" + from.getId()));
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Singleton
|
|
||||||
public static class FindHardwareForVirtualGuest extends FindResourceInSet<VirtualGuest, Hardware> {
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public FindHardwareForVirtualGuest(@Memoized Supplier<Set<? extends Hardware>> hardware) {
|
|
||||||
super(hardware);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean matches(VirtualGuest from, Hardware input) {
|
|
||||||
//return input.getProviderId().equals(from.getId() + "");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Singleton
|
|
||||||
public static class FindImageForVirtualGuest extends FindResourceInSet<VirtualGuest, Image> {
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public FindImageForVirtualGuest(@Memoized Supplier<Set<? extends Image>> hardware) {
|
|
||||||
super(hardware);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean matches(VirtualGuest from, Image input) {
|
|
||||||
// TODO determine the price list from the virtual guest which would have the image in it.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public static class FindLocationForVirtualGuest extends FindResourceInSet<VirtualGuest, Location> {
|
public static class FindLocationForVirtualGuest extends FindResourceInSet<VirtualGuest, Location> {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public FindLocationForVirtualGuest(@Memoized Supplier<Set<? extends Location>> hardware) {
|
public FindLocationForVirtualGuest(@Memoized Supplier<Set<? extends Location>> location) {
|
||||||
super(hardware);
|
super(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matches(VirtualGuest from, Location input) {
|
public boolean matches(VirtualGuest from, Location input) {
|
||||||
Datacenter dc = from.getDatacenter();
|
Datacenter dc = from.getDatacenter();
|
||||||
if (dc == null) return false;
|
if (dc == null)
|
||||||
|
return false;
|
||||||
return input.getId().equals(Integer.toString(dc.getId()));
|
return input.getId().equals(Integer.toString(dc.getId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -196,11 +196,10 @@ public class SoftLayerComputeServiceAdapter implements
|
||||||
if (guest == null)
|
if (guest == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BillingItemVirtualGuest billingItem = guest.getBillingItem();
|
if (guest.getBillingItemId() == -1)
|
||||||
if (billingItem == null)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
client.getVirtualGuestClient().cancelService(billingItem.getId());
|
client.getVirtualGuestClient().cancelService(guest.getBillingItemId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,101 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds 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.
|
|
||||||
*/
|
|
||||||
package org.jclouds.softlayer.domain;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
import static com.google.common.base.Strings.emptyToNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Jason King
|
|
||||||
* @see <a href= "http://sldn.softlayer.com/reference/datatypes/SoftLayer_Billing_Item_Virtual_Guest"
|
|
||||||
* />
|
|
||||||
*/
|
|
||||||
public class BillingItemVirtualGuest implements Comparable<BillingItemVirtualGuest> {
|
|
||||||
public static Builder builder() {
|
|
||||||
return new Builder();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Builder {
|
|
||||||
private int id = -1;
|
|
||||||
|
|
||||||
public Builder id(int id) {
|
|
||||||
this.id = id;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Builder fromBillingItemVirtualGuest(BillingItemVirtualGuest in) {
|
|
||||||
return BillingItemVirtualGuest.builder().id(in.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int id = -1;
|
|
||||||
|
|
||||||
// for deserializer
|
|
||||||
BillingItemVirtualGuest() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public BillingItemVirtualGuest(int id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo(BillingItemVirtualGuest arg0) {
|
|
||||||
return new Integer(id).compareTo(arg0.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return The unique identifier for this billing item.
|
|
||||||
*/
|
|
||||||
public int getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder toBuilder() {
|
|
||||||
return Builder.fromBillingItemVirtualGuest(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
final int prime = 31;
|
|
||||||
int result = 1;
|
|
||||||
result = prime * result + (id ^ (id >>> 32));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj) {
|
|
||||||
if (this == obj)
|
|
||||||
return true;
|
|
||||||
if (obj == null)
|
|
||||||
return false;
|
|
||||||
if (getClass() != obj.getClass())
|
|
||||||
return false;
|
|
||||||
BillingItemVirtualGuest other = (BillingItemVirtualGuest) obj;
|
|
||||||
if (id != other.id)
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "[id=" + id + "]";
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -132,6 +132,6 @@ public class OperatingSystem implements Comparable<OperatingSystem> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "OperatingSystem [id=" + id + ", passwords=" + passwords + "]";
|
return "[id=" + id + ", passwords=" + passwords + "]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
private String uuid;
|
private String uuid;
|
||||||
private String primaryBackendIpAddress;
|
private String primaryBackendIpAddress;
|
||||||
private String primaryIpAddress;
|
private String primaryIpAddress;
|
||||||
private BillingItemVirtualGuest billingItem;
|
private int billingItemId;
|
||||||
private OperatingSystem operatingSystem;
|
private OperatingSystem operatingSystem;
|
||||||
private Datacenter datacenter;
|
private Datacenter datacenter;
|
||||||
private PowerState powerState;
|
private PowerState powerState;
|
||||||
|
@ -179,8 +179,8 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder billingItem(BillingItemVirtualGuest billingItem) {
|
public Builder billingItemId(int billingItemId) {
|
||||||
this.billingItem = billingItem;
|
this.billingItemId = billingItemId;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
fullyQualifiedDomainName, hostname, id, lastVerifiedDate, maxCpu,
|
fullyQualifiedDomainName, hostname, id, lastVerifiedDate, maxCpu,
|
||||||
maxCpuUnits, maxMemory, metricPollDate, modifyDate, notes,
|
maxCpuUnits, maxMemory, metricPollDate, modifyDate, notes,
|
||||||
privateNetworkOnly, startCpus, statusId, uuid, primaryBackendIpAddress,
|
privateNetworkOnly, startCpus, statusId, uuid, primaryBackendIpAddress,
|
||||||
primaryIpAddress,billingItem,operatingSystem,datacenter,powerState);
|
primaryIpAddress, billingItemId,operatingSystem,datacenter,powerState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Builder fromVirtualGuest(VirtualGuest in) {
|
public static Builder fromVirtualGuest(VirtualGuest in) {
|
||||||
|
@ -229,7 +229,7 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
.uuid(in.getUuid())
|
.uuid(in.getUuid())
|
||||||
.primaryBackendIpAddress(in.getPrimaryBackendIpAddress())
|
.primaryBackendIpAddress(in.getPrimaryBackendIpAddress())
|
||||||
.primaryIpAddress(in.getPrimaryIpAddress())
|
.primaryIpAddress(in.getPrimaryIpAddress())
|
||||||
.billingItem(in.getBillingItem())
|
.billingItemId(in.getBillingItemId())
|
||||||
.operatingSystem(in.getOperatingSystem())
|
.operatingSystem(in.getOperatingSystem())
|
||||||
.datacenter(in.getDatacenter())
|
.datacenter(in.getDatacenter())
|
||||||
.powerState(in.getPowerState());
|
.powerState(in.getPowerState());
|
||||||
|
@ -283,7 +283,7 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
private String primaryBackendIpAddress;
|
private String primaryBackendIpAddress;
|
||||||
private String primaryIpAddress;
|
private String primaryIpAddress;
|
||||||
|
|
||||||
private BillingItemVirtualGuest billingItem;
|
private int billingItemId = -1;
|
||||||
private OperatingSystem operatingSystem;
|
private OperatingSystem operatingSystem;
|
||||||
private Datacenter datacenter;
|
private Datacenter datacenter;
|
||||||
private PowerState powerState;
|
private PowerState powerState;
|
||||||
|
@ -297,7 +297,7 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
String fullyQualifiedDomainName, String hostname, int id, Date lastVerifiedDate, int maxCpu,
|
String fullyQualifiedDomainName, String hostname, int id, Date lastVerifiedDate, int maxCpu,
|
||||||
String maxCpuUnits, int maxMemory, Date metricPollDate, Date modifyDate, String notes,
|
String maxCpuUnits, int maxMemory, Date metricPollDate, Date modifyDate, String notes,
|
||||||
boolean privateNetworkOnly, int startCpus, int statusId, String uuid, String primaryBackendIpAddress,
|
boolean privateNetworkOnly, int startCpus, int statusId, String uuid, String primaryBackendIpAddress,
|
||||||
String primaryIpAddress,BillingItemVirtualGuest billingItem, OperatingSystem operatingSystem, Datacenter datacenter, PowerState powerState) {
|
String primaryIpAddress,int billingItemId, OperatingSystem operatingSystem, Datacenter datacenter, PowerState powerState) {
|
||||||
this.accountId = accountId;
|
this.accountId = accountId;
|
||||||
this.createDate = createDate;
|
this.createDate = createDate;
|
||||||
this.dedicatedAccountHostOnly = dedicatedAccountHostOnly;
|
this.dedicatedAccountHostOnly = dedicatedAccountHostOnly;
|
||||||
|
@ -318,7 +318,7 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.primaryBackendIpAddress = primaryBackendIpAddress;
|
this.primaryBackendIpAddress = primaryBackendIpAddress;
|
||||||
this.primaryIpAddress = primaryIpAddress;
|
this.primaryIpAddress = primaryIpAddress;
|
||||||
this.billingItem = billingItem;
|
this.billingItemId = billingItemId;
|
||||||
this.operatingSystem = operatingSystem;
|
this.operatingSystem = operatingSystem;
|
||||||
this.datacenter = datacenter;
|
this.datacenter = datacenter;
|
||||||
this.powerState = powerState;
|
this.powerState = powerState;
|
||||||
|
@ -475,8 +475,8 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
/**
|
/**
|
||||||
* @return The billing item for a CloudLayer Compute Instance.
|
* @return The billing item for a CloudLayer Compute Instance.
|
||||||
*/
|
*/
|
||||||
public BillingItemVirtualGuest getBillingItem() {
|
public int getBillingItemId() {
|
||||||
return billingItem;
|
return billingItemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -525,7 +525,7 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
result = prime * result + startCpus;
|
result = prime * result + startCpus;
|
||||||
result = prime * result + statusId;
|
result = prime * result + statusId;
|
||||||
result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
|
result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
|
||||||
result = prime * result + ((billingItem == null) ? 0 : billingItem.hashCode());
|
result = prime * result + (billingItemId ^ (billingItemId >>> 32));
|
||||||
result = prime * result + ((operatingSystem == null) ? 0 : operatingSystem.hashCode());
|
result = prime * result + ((operatingSystem == null) ? 0 : operatingSystem.hashCode());
|
||||||
result = prime * result + ((datacenter == null) ? 0 : datacenter.hashCode());
|
result = prime * result + ((datacenter == null) ? 0 : datacenter.hashCode());
|
||||||
result = prime * result + ((powerState == null) ? 0 : powerState.hashCode());
|
result = prime * result + ((powerState == null) ? 0 : powerState.hashCode());
|
||||||
|
@ -617,10 +617,7 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
return false;
|
return false;
|
||||||
} else if (!uuid.equals(other.uuid))
|
} else if (!uuid.equals(other.uuid))
|
||||||
return false;
|
return false;
|
||||||
if (billingItem == null) {
|
if (billingItemId != other.billingItemId)
|
||||||
if (other.billingItem != null)
|
|
||||||
return false;
|
|
||||||
} else if (!billingItem.equals(other.billingItem))
|
|
||||||
return false;
|
return false;
|
||||||
if (operatingSystem == null) {
|
if (operatingSystem == null) {
|
||||||
if (other.operatingSystem != null)
|
if (other.operatingSystem != null)
|
||||||
|
@ -649,7 +646,7 @@ public class VirtualGuest implements Comparable<VirtualGuest> {
|
||||||
+ ", metricPollDate=" + metricPollDate + ", modifyDate=" + modifyDate + ", notes=" + notes
|
+ ", metricPollDate=" + metricPollDate + ", modifyDate=" + modifyDate + ", notes=" + notes
|
||||||
+ ", primaryBackendIpAddress=" + primaryBackendIpAddress + ", primaryIpAddress=" + primaryIpAddress
|
+ ", primaryBackendIpAddress=" + primaryBackendIpAddress + ", primaryIpAddress=" + primaryIpAddress
|
||||||
+ ", privateNetworkOnly=" + privateNetworkOnly + ", startCpus=" + startCpus + ", statusId=" + statusId
|
+ ", privateNetworkOnly=" + privateNetworkOnly + ", startCpus=" + startCpus + ", statusId=" + statusId
|
||||||
+ ", uuid=" + uuid + ", billingItem="+billingItem+", operatingSystem="+operatingSystem+", datacenter="+datacenter
|
+ ", uuid=" + uuid + ", billingItemId="+billingItemId+", operatingSystem="+operatingSystem+", datacenter="+datacenter
|
||||||
+ ", powerState="+powerState+"]";
|
+ ", powerState="+powerState+"]";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.jclouds.domain.Location;
|
||||||
import org.jclouds.location.suppliers.JustProvider;
|
import org.jclouds.location.suppliers.JustProvider;
|
||||||
import org.jclouds.softlayer.domain.Address;
|
import org.jclouds.softlayer.domain.Address;
|
||||||
import org.jclouds.softlayer.domain.Datacenter;
|
import org.jclouds.softlayer.domain.Datacenter;
|
||||||
import org.testng.annotations.BeforeMethod;
|
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
@ -41,24 +40,14 @@ import com.google.common.collect.ImmutableSet;
|
||||||
@Test(singleThreaded = true, groups = "unit")
|
@Test(singleThreaded = true, groups = "unit")
|
||||||
public class DatacenterToLocationTest {
|
public class DatacenterToLocationTest {
|
||||||
|
|
||||||
private DatacenterToLocation function;
|
static DatacenterToLocation function = new DatacenterToLocation(new JustProvider(ImmutableSet.<String> of(), "softlayer",
|
||||||
|
URI.create("foo")));;
|
||||||
@BeforeMethod
|
|
||||||
public void setup() {
|
|
||||||
function = new DatacenterToLocation(new JustProvider(ImmutableSet.<String>of(), "softlayer", URI.create("foo")));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDatacenterToLocation() {
|
public void testDatacenterToLocation() {
|
||||||
Address address = Address.builder().country("US")
|
Address address = Address.builder().country("US").state("TX").description("This is Texas!").build();
|
||||||
.state("TX")
|
|
||||||
.description("This is Texas!")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
Datacenter datacenter = Datacenter.builder().id(1)
|
Datacenter datacenter = Datacenter.builder().id(1).longName("Texas Datacenter").locationAddress(address).build();
|
||||||
.longName("Texas Datacenter")
|
|
||||||
.locationAddress(address)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
Location location = function.apply(datacenter);
|
Location location = function.apply(datacenter);
|
||||||
|
|
||||||
|
@ -70,9 +59,7 @@ public class DatacenterToLocationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetIso3166CodeNoCountryAndState() {
|
public void testGetIso3166CodeNoCountryAndState() {
|
||||||
Datacenter datacenter = Datacenter.builder().id(1)
|
Datacenter datacenter = Datacenter.builder().id(1).longName("Nowhere").build();
|
||||||
.longName("Nowhere")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
Location location = function.apply(datacenter);
|
Location location = function.apply(datacenter);
|
||||||
|
|
||||||
|
@ -83,14 +70,9 @@ public class DatacenterToLocationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetIso3166CodeCountryOnly() {
|
public void testGetIso3166CodeCountryOnly() {
|
||||||
Address address = Address.builder().country("US")
|
Address address = Address.builder().country("US").description("This is North America!").build();
|
||||||
.description("This is North America!")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
Datacenter datacenter = Datacenter.builder().id(1)
|
Datacenter datacenter = Datacenter.builder().id(1).longName("Nowhere").locationAddress(address).build();
|
||||||
.longName("Nowhere")
|
|
||||||
.locationAddress(address)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
Location location = function.apply(datacenter);
|
Location location = function.apply(datacenter);
|
||||||
|
|
||||||
|
@ -102,15 +84,10 @@ public class DatacenterToLocationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetIso3166CodeWhitespaceTrimmer() {
|
public void testGetIso3166CodeWhitespaceTrimmer() {
|
||||||
Address address = Address.builder().country(" US ")
|
Address address = Address.builder().country(" US ").state(" TX ").description("This is spaced out Texas")
|
||||||
.state(" TX ")
|
.build();
|
||||||
.description("This is spaced out Texas")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
Datacenter datacenter = Datacenter.builder().id(1)
|
Datacenter datacenter = Datacenter.builder().id(1).longName("Nowhere").locationAddress(address).build();
|
||||||
.longName("Nowhere")
|
|
||||||
.locationAddress(address)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
Location location = function.apply(datacenter);
|
Location location = function.apply(datacenter);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds 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.
|
||||||
|
*/
|
||||||
|
package org.jclouds.softlayer.compute.functions;
|
||||||
|
|
||||||
|
import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.jclouds.compute.domain.NodeMetadata;
|
||||||
|
import org.jclouds.compute.domain.NodeMetadataBuilder;
|
||||||
|
import org.jclouds.compute.domain.NodeState;
|
||||||
|
import org.jclouds.domain.Credentials;
|
||||||
|
import org.jclouds.domain.Location;
|
||||||
|
import org.jclouds.softlayer.compute.functions.VirtualGuestToNodeMetadata.FindLocationForVirtualGuest;
|
||||||
|
import org.jclouds.softlayer.domain.VirtualGuest;
|
||||||
|
import org.jclouds.softlayer.parse.ParseVirtualGuestWithNoPasswordTest;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.base.Supplier;
|
||||||
|
import com.google.common.base.Suppliers;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "unit", testName = "VirtualGuestToNodeMetadataTest")
|
||||||
|
public class VirtualGuestToNodeMetadataTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testApplyWhereVirtualGuestWithNoPassword() throws UnknownHostException {
|
||||||
|
|
||||||
|
// notice if we've already parsed this properly here, we can rely on it.
|
||||||
|
VirtualGuest guest = new ParseVirtualGuestWithNoPasswordTest().expected();
|
||||||
|
|
||||||
|
// note we are testing when no credentials are here. otherwise would be ("node#416696", new
|
||||||
|
// Credentials("root", "password"))
|
||||||
|
Map<String, Credentials> credentialStore = ImmutableMap.<String, Credentials> of();
|
||||||
|
|
||||||
|
// setup so that we have an expected Location to be parsed from the guest.
|
||||||
|
Location expectedLocation = DatacenterToLocationTest.function.apply(guest.getDatacenter());
|
||||||
|
Supplier<Set<? extends Location>> locationSupplier = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
|
||||||
|
.<Location> of(expectedLocation));
|
||||||
|
|
||||||
|
VirtualGuestToNodeMetadata parser = new VirtualGuestToNodeMetadata(credentialStore,
|
||||||
|
new FindLocationForVirtualGuest(locationSupplier));
|
||||||
|
|
||||||
|
NodeMetadata node = parser.apply(guest);
|
||||||
|
|
||||||
|
assertEquals(node, new NodeMetadataBuilder().ids("416696").name("node-246105155").group("node").location(
|
||||||
|
expectedLocation).state(NodeState.PENDING).publicAddresses(ImmutableSet.of("173.192.29.186"))
|
||||||
|
.privateAddresses(ImmutableSet.of("10.37.102.194")).build());
|
||||||
|
|
||||||
|
// because it wasn't present in the credential store.
|
||||||
|
assertEquals(node.getCredentials(), null);
|
||||||
|
}
|
||||||
|
}
|
|
@ -73,9 +73,8 @@ public class VirtualGuestClientLiveTest extends BaseSoftLayerClientLiveTest {
|
||||||
// objectMask: virtualGuests.activeTransaction
|
// objectMask: virtualGuests.activeTransaction
|
||||||
for( VirtualGuest guest: client.listVirtualGuests()) {
|
for( VirtualGuest guest: client.listVirtualGuests()) {
|
||||||
if (guest.getHostname().startsWith(TEST_HOSTNAME_PREFIX)) {
|
if (guest.getHostname().startsWith(TEST_HOSTNAME_PREFIX)) {
|
||||||
BillingItemVirtualGuest billingItem = guest.getBillingItem();
|
if(guest.getBillingItemId()!=-1) {
|
||||||
if(billingItem!=null) {
|
client.cancelService(guest.getBillingItemId());
|
||||||
client.cancelService(billingItem.getId());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -125,8 +124,7 @@ public class VirtualGuestClientLiveTest extends BaseSoftLayerClientLiveTest {
|
||||||
|
|
||||||
|
|
||||||
private void checkVirtualGuest(VirtualGuest vg) {
|
private void checkVirtualGuest(VirtualGuest vg) {
|
||||||
if (vg.getBillingItem()==null) return;//Quotes and shutting down guests
|
if (vg.getBillingItemId()==-1) return;//Quotes and shutting down guests
|
||||||
checkBillingItem(vg.getBillingItem());
|
|
||||||
|
|
||||||
assert vg.getAccountId() > 0 : vg;
|
assert vg.getAccountId() > 0 : vg;
|
||||||
assert vg.getCreateDate() != null : vg;
|
assert vg.getCreateDate() != null : vg;
|
||||||
|
@ -146,9 +144,4 @@ public class VirtualGuestClientLiveTest extends BaseSoftLayerClientLiveTest {
|
||||||
assert vg.getPrimaryIpAddress() != null : vg;
|
assert vg.getPrimaryIpAddress() != null : vg;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkBillingItem(BillingItemVirtualGuest billingItem) {
|
|
||||||
assert null != billingItem;
|
|
||||||
assert billingItem.getId() > 0 : billingItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds 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.
|
||||||
|
*/
|
||||||
|
package org.jclouds.softlayer.parse;
|
||||||
|
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
||||||
|
import org.jclouds.date.internal.SimpleDateFormatDateService;
|
||||||
|
import org.jclouds.json.BaseItemParserTest;
|
||||||
|
import org.jclouds.json.config.GsonModule;
|
||||||
|
import org.jclouds.softlayer.compute.config.SoftLayerParserModule;
|
||||||
|
import org.jclouds.softlayer.domain.Datacenter;
|
||||||
|
import org.jclouds.softlayer.domain.OperatingSystem;
|
||||||
|
import org.jclouds.softlayer.domain.PowerState;
|
||||||
|
import org.jclouds.softlayer.domain.VirtualGuest;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.inject.Guice;
|
||||||
|
import com.google.inject.Injector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "unit", testName = "ParseVirtualGuestWithNoPasswordTest")
|
||||||
|
public class ParseVirtualGuestWithNoPasswordTest extends BaseItemParserTest<VirtualGuest> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String resource() {
|
||||||
|
return "/virtual_guest_no_password.json";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
public VirtualGuest expected() {
|
||||||
|
return VirtualGuest
|
||||||
|
.builder()
|
||||||
|
//TODO: why is there no billingItem in the json?
|
||||||
|
.id(416696).accountId(93750).billingItemId(0)
|
||||||
|
.createDate(new SimpleDateFormatDateService().iso8601SecondsDateParse("2011-10-01T11:10:16-08:00"))
|
||||||
|
.dedicatedAccountHostOnly(true).domain("me.org").fullyQualifiedDomainName("node-246105155.me.org")
|
||||||
|
.hostname("node-246105155").maxCpu(1).maxCpuUnits("CORE").maxMemory(1024)
|
||||||
|
.modifyDate(new SimpleDateFormatDateService().iso8601SecondsDateParse("2011-10-01T11:11:31-08:00"))
|
||||||
|
.primaryBackendIpAddress("10.37.102.194").primaryIpAddress("173.192.29.186").startCpus(1).statusId(1001)
|
||||||
|
.uuid("694d34c3-9c36-b590-4ba7-4ec58954b9dc")
|
||||||
|
.operatingSystem(OperatingSystem.builder().id(913812).build())
|
||||||
|
.datacenter(Datacenter.builder().id(3).name("dal01").longName("Dallas").build())
|
||||||
|
//TODO: maybe powerState can be flattened like billingItemId
|
||||||
|
.powerState(new PowerState(VirtualGuest.State.HALTED)).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Injector injector() {
|
||||||
|
return Guice.createInjector(new SoftLayerParserModule(), new GsonModule() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
bind(DateAdapter.class).to(Iso8601DateAdapter.class);
|
||||||
|
super.configure();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue