diff --git a/keystone-client/src/main/java/com/woorea/openstack/keystone/utils/KeystoneTokenProvider.java b/keystone-client/src/main/java/com/woorea/openstack/keystone/utils/KeystoneTokenProvider.java index fb5127abe..f2a61ff26 100644 --- a/keystone-client/src/main/java/com/woorea/openstack/keystone/utils/KeystoneTokenProvider.java +++ b/keystone-client/src/main/java/com/woorea/openstack/keystone/utils/KeystoneTokenProvider.java @@ -17,7 +17,8 @@ public class KeystoneTokenProvider { ConcurrentHashMap hashTenantAccess; - public KeystoneTokenProvider(String endpoint, String username, String password) { + public KeystoneTokenProvider(String endpoint, String username, + String password) { this.keystone = new Keystone(endpoint); this.username = username; this.password = password; @@ -27,14 +28,25 @@ public KeystoneTokenProvider(String endpoint, String username, String password) public Access getAccessByTenant(String tenantName) { Access access = hashTenantAccess.get(tenantName); if (access == null) { - access = keystone.tokens().authenticate(new UsernamePassword(username, password)) - .withTenantName(tenantName) - .execute(); + access = keystone.tokens() + .authenticate(new UsernamePassword(username, password)) + .withTenantName(tenantName).execute(); hashTenantAccess.put(tenantName, access); } return access; } + public Access getAccessByTenantId(String tenantId) { + Access access = hashTenantAccess.get(tenantId); + if (access == null) { + access = keystone.tokens() + .authenticate(new UsernamePassword(username, password)) + .withTenantId(tenantId).execute(); + hashTenantAccess.put(tenantId, access); + } + return access; + } + public void expireAccessByTenant(String tenantName) { hashTenantAccess.remove(tenantName); } @@ -47,10 +59,27 @@ public String getToken() { return keystoneTokenProvider.getAccessByTenant(tenantName) .getToken().getId(); } + @Override public void expireToken() { keystoneTokenProvider.expireAccessByTenant(tenantName); } }; } + + public OpenStackTokenProvider getProviderByTenantId(final String tenantId) { + final KeystoneTokenProvider keystoneTokenProvider = this; + return new OpenStackTokenProvider() { + @Override + public String getToken() { + return keystoneTokenProvider.getAccessByTenantId(tenantId) + .getToken().getId(); + } + + @Override + public void expireToken() { + keystoneTokenProvider.expireAccessByTenant(tenantId); + } + }; + } } diff --git a/nova-client/src/main/java/com/woorea/openstack/nova/api/ServersResource.java b/nova-client/src/main/java/com/woorea/openstack/nova/api/ServersResource.java index ca48b6fc4..e77ac52f1 100644 --- a/nova-client/src/main/java/com/woorea/openstack/nova/api/ServersResource.java +++ b/nova-client/src/main/java/com/woorea/openstack/nova/api/ServersResource.java @@ -7,6 +7,9 @@ import com.woorea.openstack.base.client.HttpMethod; import com.woorea.openstack.base.client.OpenStackClient; import com.woorea.openstack.base.client.OpenStackRequest; +import com.woorea.openstack.nova.model.InterfaceAttachment; +import com.woorea.openstack.nova.model.InterfaceAttachmentForCreate; +import com.woorea.openstack.nova.model.InterfaceAttachments; import com.woorea.openstack.nova.model.Metadata; import com.woorea.openstack.nova.model.Server; import com.woorea.openstack.nova.model.Server.Addresses; @@ -537,5 +540,41 @@ public ShowVolumeAttachment showVolumeAttachment(String serverId, String volumeA return new ShowVolumeAttachment(serverId, volumeAttachmentId); } + public class ListInterfaceAttachments extends OpenStackRequest { + + public ListInterfaceAttachments(String serverId) { + super(CLIENT, HttpMethod.GET, new StringBuilder("/servers/").append(serverId).append("/os-interface"), null, InterfaceAttachments.class); + } + + } + + public class ShowInterfaceAttachment extends OpenStackRequest { + + public ShowInterfaceAttachment(String serverId, String interfaceAttachmentId) { + super(CLIENT, HttpMethod.GET, new StringBuilder("/servers/").append(serverId).append("/os-interface/").append(interfaceAttachmentId), null, InterfaceAttachment.class); + } + + } + + public class CreateInterfaceAttachment extends OpenStackRequest { + + public CreateInterfaceAttachment(String serverId, InterfaceAttachmentForCreate action) { + super(CLIENT, HttpMethod.POST, new StringBuilder("/servers/").append(serverId).append("/os-interface"), Entity.json(action), InterfaceAttachment.class); + } + + } + + public ListInterfaceAttachments listInterfaceAttachments(String serverId) { + return new ListInterfaceAttachments(serverId); + } + + public ShowInterfaceAttachment showInterfaceAttachment(String serverId, String interfaceAttachmentId) { + return new ShowInterfaceAttachment(serverId, interfaceAttachmentId); + } + + public CreateInterfaceAttachment createInterfaceAttachment(String serverId, InterfaceAttachmentForCreate interfaceAttachmentForCreate) { + return new CreateInterfaceAttachment(serverId, interfaceAttachmentForCreate); + } + } diff --git a/nova-model/src/main/java/com/woorea/openstack/nova/model/FixedIp.java b/nova-model/src/main/java/com/woorea/openstack/nova/model/FixedIp.java new file mode 100644 index 000000000..de97cfbe7 --- /dev/null +++ b/nova-model/src/main/java/com/woorea/openstack/nova/model/FixedIp.java @@ -0,0 +1,42 @@ +package com.woorea.openstack.nova.model; + +import java.io.Serializable; + +import org.codehaus.jackson.annotate.JsonProperty; +import org.codehaus.jackson.map.annotate.JsonRootName; + +@JsonRootName("fixed_ip") +public class FixedIp implements Serializable { + + @JsonProperty("subnet_id") + private String subnetId; + + @JsonProperty("ip_address") + private String ipAddress; + + /** + * @return the subnetId + */ + public String getSubnetId() { + return subnetId; + } + + /** + * @return the ipAddress + */ + public String getIpAddress() { + return ipAddress; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "FixedIp [subnetId=" + subnetId + ", ipAddress=" + ipAddress + + "]"; + } + +} diff --git a/nova-model/src/main/java/com/woorea/openstack/nova/model/FixedIps.java b/nova-model/src/main/java/com/woorea/openstack/nova/model/FixedIps.java new file mode 100644 index 000000000..46f3a9d0d --- /dev/null +++ b/nova-model/src/main/java/com/woorea/openstack/nova/model/FixedIps.java @@ -0,0 +1,36 @@ +package com.woorea.openstack.nova.model; + +import java.io.Serializable; +import java.util.Iterator; +import java.util.List; + +import org.codehaus.jackson.annotate.JsonProperty; + +public class FixedIps implements Iterable, Serializable { + + @JsonProperty("fixed_ips") + private List list; + + /** + * @return the list + */ + public List getList() { + return list; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "FixedIps [list=" + list + "]"; + } + + @Override + public Iterator iterator() { + return list.iterator(); + } + +} diff --git a/nova-model/src/main/java/com/woorea/openstack/nova/model/InterfaceAttachment.java b/nova-model/src/main/java/com/woorea/openstack/nova/model/InterfaceAttachment.java new file mode 100644 index 000000000..89f89d32c --- /dev/null +++ b/nova-model/src/main/java/com/woorea/openstack/nova/model/InterfaceAttachment.java @@ -0,0 +1,74 @@ +package com.woorea.openstack.nova.model; + +import java.io.Serializable; +import java.util.List; + +import org.codehaus.jackson.annotate.JsonProperty; +import org.codehaus.jackson.map.annotate.JsonRootName; + +@JsonRootName("interfaceAttachment") +public class InterfaceAttachment implements Serializable { + + @JsonProperty("mac_addr") + private String macAddress; + + @JsonProperty("net_id") + private String networkId; + + @JsonProperty("port_id") + private String portId; + + @JsonProperty("port_state") + private String portState; + + @JsonProperty("fixed_ips") + private List fixedIps; + + /** + * @return the macAddress + */ + public String getMacAddress() { + return macAddress; + } + + /** + * @return the networkId + */ + public String getNetworkId() { + return networkId; + } + + /** + * @return the portId + */ + public String getPortId() { + return portId; + } + + /** + * @return the portState + */ + public String getPortState() { + return portState; + } + + /** + * @return the fixedIps + */ + public List getFixedIps() { + return fixedIps; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "InterfaceAttachment [macAddress=" + macAddress + ", networkId=" + + networkId + ", portId=" + portId + ", portState=" + portState + + ", fixedIps=" + fixedIps + "]"; + } + +} diff --git a/nova-model/src/main/java/com/woorea/openstack/nova/model/InterfaceAttachmentForCreate.java b/nova-model/src/main/java/com/woorea/openstack/nova/model/InterfaceAttachmentForCreate.java new file mode 100644 index 000000000..9fff51d90 --- /dev/null +++ b/nova-model/src/main/java/com/woorea/openstack/nova/model/InterfaceAttachmentForCreate.java @@ -0,0 +1,29 @@ +package com.woorea.openstack.nova.model; + +import java.io.Serializable; + +import org.codehaus.jackson.annotate.JsonProperty; +import org.codehaus.jackson.map.annotate.JsonRootName; + +@JsonRootName("interfaceAttachment") +public class InterfaceAttachmentForCreate implements Serializable { + + @JsonProperty("port_id") + private String portId; + + /** + * @return the portId + */ + public String getPortId() { + return portId; + } + + /** + * @param portId + * the portId to set + */ + public void setPortId(String portId) { + this.portId = portId; + } + +} diff --git a/nova-model/src/main/java/com/woorea/openstack/nova/model/InterfaceAttachments.java b/nova-model/src/main/java/com/woorea/openstack/nova/model/InterfaceAttachments.java new file mode 100644 index 000000000..55d810e62 --- /dev/null +++ b/nova-model/src/main/java/com/woorea/openstack/nova/model/InterfaceAttachments.java @@ -0,0 +1,36 @@ +package com.woorea.openstack.nova.model; + +import java.io.Serializable; +import java.util.Iterator; +import java.util.List; + +import org.codehaus.jackson.annotate.JsonProperty; + +public class InterfaceAttachments implements Iterable, + Serializable { + + @JsonProperty("interfaceAttachments") + private List list; + + /** + * @return the list + */ + public List getList() { + return list; + } + + @Override + public Iterator iterator() { + return list.iterator(); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "InterfaceAttachments [list=" + list + "]"; + } +} \ No newline at end of file diff --git a/nova-model/src/main/java/com/woorea/openstack/nova/model/NetworkForCreate.java b/nova-model/src/main/java/com/woorea/openstack/nova/model/NetworkForCreate.java index f5785393b..0f2860305 100644 --- a/nova-model/src/main/java/com/woorea/openstack/nova/model/NetworkForCreate.java +++ b/nova-model/src/main/java/com/woorea/openstack/nova/model/NetworkForCreate.java @@ -9,7 +9,9 @@ public class NetworkForCreate { private String id; @JsonProperty("fixed_ip") private String fixedIp; - + @JsonProperty("port") + private String port; + public String getId() { return id; } @@ -18,6 +20,10 @@ public String getFixedIp() { return fixedIp; } + public String getPort() { + return port; + } + public void setId(String id) { this.id = id; } @@ -26,4 +32,7 @@ public void setFixedIp(String fixedIp) { this.fixedIp = fixedIp; } + public void setPort(String port) { + this.port = port; + } } diff --git a/nova-model/src/main/java/com/woorea/openstack/nova/model/ServerForCreate.java b/nova-model/src/main/java/com/woorea/openstack/nova/model/ServerForCreate.java index 9f28a8113..376387eb5 100644 --- a/nova-model/src/main/java/com/woorea/openstack/nova/model/ServerForCreate.java +++ b/nova-model/src/main/java/com/woorea/openstack/nova/model/ServerForCreate.java @@ -316,10 +316,11 @@ public void setNetworks(List networks) { this.networks = networks; } - public void addNetworks(String id, String fixedIp) { + public void addNetworks(String id, String fixedIp, String port) { NetworkForCreate net = new NetworkForCreate(); net.setId(id); net.setFixedIp(fixedIp); + net.setPort(port); this.networks.add(net); } diff --git a/openstack-examples/pom.xml b/openstack-examples/pom.xml index 30d401437..a5bd4fb6f 100644 --- a/openstack-examples/pom.xml +++ b/openstack-examples/pom.xml @@ -65,7 +65,7 @@ com.woorea jersey2-connector - 3.1.0-SNAPSHOT + 3.2.2-SNAPSHOT @@ -80,4 +80,4 @@ - \ No newline at end of file + diff --git a/quantum-model/src/main/java/com/woorea/openstack/quantum/model/Subnet.java b/quantum-model/src/main/java/com/woorea/openstack/quantum/model/Subnet.java index 73015146b..2894e7bef 100644 --- a/quantum-model/src/main/java/com/woorea/openstack/quantum/model/Subnet.java +++ b/quantum-model/src/main/java/com/woorea/openstack/quantum/model/Subnet.java @@ -9,6 +9,8 @@ import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.annotate.JsonValue; import org.codehaus.jackson.map.annotate.JsonRootName; +import org.codehaus.jackson.map.annotate.JsonSerialize; +import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; @SuppressWarnings("serial") @JsonRootName("subnet") @@ -39,7 +41,8 @@ public class Subnet implements Serializable { private IpVersion ipversion; @JsonProperty("gateway_ip") - private String gw; + @JsonSerialize(include=Inclusion.NON_DEFAULT) + private String gw = ""; private String cidr;