Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.openstack4j.api.network;

import static org.testng.Assert.assertEquals;

import java.util.List;

import org.openstack4j.api.AbstractTest;
import org.openstack4j.model.network.AvailabilityZone;
import org.testng.annotations.Test;

/**
* Tests the Neutron -> availability_zones API against the mock webserver and spec based
* json responses
*
* @author Taemin
*/
@Test(suiteName = "availability_zones")
public class AvailabilityZoneTests extends AbstractTest {

private static final String JSON_GET_SUBNET = "/network/availability_zones.json";
private static final String STATE = "available";
private static final String RESOURCE = "network";
private static final String NAME = "nova";

@Test
public void getAvailabilityZones() throws Exception {
respondWith(JSON_GET_SUBNET);
List<? extends AvailabilityZone> az = osv3().networking().availabilityzone().list();
server.takeRequest();
assertEquals(az.get(0).getState(), STATE);
assertEquals(az.get(0).getResource(), RESOURCE);
assertEquals(az.get(0).getName(), NAME);

}

@Override
protected Service service() {
return Service.NETWORK;
}

}
9 changes: 9 additions & 0 deletions core-test/src/main/resources/network/availability_zones.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"availability_zones": [
{
"state": "available",
"resource": "network",
"name": "nova"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.openstack4j.api.networking;

import java.util.List;
import org.openstack4j.common.RestService;
import org.openstack4j.model.network.AvailabilityZone;
import org.openstack4j.openstack.networking.domain.NeutronAvailabilityZone;

/**
* Neutron Availability Zone Service
*
* @author Taemin
*
*/
public interface AvailabilityZoneService extends RestService {


/**
* List all availability zone that the current neutron has.
*
* @return list of all availability zones
* @author Taemin
*/
List<? extends AvailabilityZone> list();

}
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,9 @@ public interface NetworkingService extends RestService {
* @return the FwaaS service
*/
FirewallAsService firewalls();

/**
* @return the Availability Zone Service API
*/
AvailabilityZoneService availabilityzone();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.openstack4j.model.network;

import java.util.List;

import org.openstack4j.model.ModelEntity;

/**
* An availability zone groups network nodes that run services like DHCP, L3, FW, and others.
*
* @author Taemin
*/
public interface AvailabilityZone extends ModelEntity {

/**
* @return State
*/
String getState();

/**
* @return Resource
*/
String getResource();

/**
* @return The Zone Name of Neutron
*/
String getName();



}
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ private <R> Invocation<R> builder(Class<R> returnType, String path, HttpMethod m
Map headers = ses.getHeaders();
if (headers != null && headers.size() > 0){
return new Invocation<R>(req, serviceType, endpointFunc).headers(headers);
}else{
}else{
return new Invocation<R>(req, serviceType, endpointFunc);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package org.openstack4j.openstack.networking.domain;

import java.util.List;

import org.openstack4j.model.network.AvailabilityZone;
import org.openstack4j.model.network.Pool;
import org.openstack4j.openstack.common.ListResult;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
import com.google.common.base.MoreObjects;

/**
* An availability zone groups network nodes that run services like DHCP, L3, FW, and others.
*
* @author Taemin
*/
@JsonRootName("availability_zones")
public class NeutronAvailabilityZone implements AvailabilityZone {

private static final long serialVersionUID = 1L;

private String state;
private String resource;
private String name;

public NeutronAvailabilityZone() { }

/**
* {@inheritDoc}
*/
@Override
public String getState() {
return state;
}

/**
* {@inheritDoc}
*/
@Override
public String getResource() {
return resource;
}

/**
* {@inheritDoc}
*/
@Override
public String getName() {
return name;
}

/**
* {@inheritDoc}
*/
@Override
public String toString() {
return MoreObjects.toStringHelper(this).omitNullValues().add("state", state).add("resource", resource).add("name", name).toString();
}

/**
* {@inheritDoc}
*/
@Override
public int hashCode() {
return java.util.Objects.hash(state, resource, name);
}

/**
* {@inheritDoc}
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}

if (obj instanceof NeutronAvailabilityZone) {
NeutronAvailabilityZone that = (NeutronAvailabilityZone) obj;
if (java.util.Objects.equals(state, that.state) &&
java.util.Objects.equals(resource, that.resource) &&
java.util.Objects.equals(name, that.name)) {
return true;
}
}
return false;
}

public static class AvailabilityZones extends ListResult<NeutronAvailabilityZone> {

private static final long serialVersionUID = 1L;

@JsonProperty("availability_zones")
private List<NeutronAvailabilityZone> availabilityZones;

@Override
protected List<NeutronAvailabilityZone> value() {
return availabilityZones;
}
}
}


Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.openstack4j.openstack.networking.internal;

import java.util.List;

import org.openstack4j.api.networking.AvailabilityZoneService;
import org.openstack4j.model.network.AvailabilityZone;
import org.openstack4j.openstack.networking.domain.NeutronAvailabilityZone.AvailabilityZones;


/**
* Availability Zone Service
*
* @author Taemin
*
*/
public class AvailabilityZoneServiceImpl extends BaseNetworkingServices implements AvailabilityZoneService {

/**
* List all availability zone that the current neutron has
* {@inheritDoc}
* @author Taemin
*/
@Override
public List<? extends AvailabilityZone> list() {
return get(AvailabilityZones.class, uri("/availability_zones")).execute().getList();
}


}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.openstack4j.openstack.networking.internal;

import org.openstack4j.api.Apis;
import org.openstack4j.api.networking.AvailabilityZoneService;
import org.openstack4j.api.networking.NetFloatingIPService;
import org.openstack4j.api.networking.NetworkService;
import org.openstack4j.api.networking.NetworkingService;
Expand Down Expand Up @@ -117,5 +118,13 @@ public FirewallAsService firewalls() {
public AgentService agent() {
return Apis.get(AgentService.class);
}

/**
* {@inheritDoc}
*/
@Override
public AvailabilityZoneService availabilityzone() {
return Apis.get(AvailabilityZoneService.class);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
import org.openstack4j.api.murano.v1.MuranoDeploymentService;
import org.openstack4j.api.murano.v1.MuranoEnvironmentService;
import org.openstack4j.api.murano.v1.MuranoSessionService;
import org.openstack4j.api.networking.AvailabilityZoneService;
import org.openstack4j.api.networking.NetFloatingIPService;
import org.openstack4j.api.networking.NetworkService;
import org.openstack4j.api.networking.NetworkingService;
Expand Down Expand Up @@ -243,6 +244,7 @@
import org.openstack4j.openstack.murano.v1.internal.MuranoEnvironmentServiceImpl;
import org.openstack4j.openstack.murano.v1.internal.MuranoService;
import org.openstack4j.openstack.murano.v1.internal.MuranoSessionServiceImpl;
import org.openstack4j.openstack.networking.internal.AvailabilityZoneServiceImpl;
import org.openstack4j.openstack.networking.internal.FloatingIPServiceImpl;
import org.openstack4j.openstack.networking.internal.NetworkServiceImpl;
import org.openstack4j.openstack.networking.internal.NetworkingServiceImpl;
Expand Down Expand Up @@ -370,6 +372,7 @@ public void initialize() {
bind(ArtifactService.class, ArtifactServiceImpl.class);
bind(ToscaTemplatesArtifactService.class, ToscaTemplatesArtifactServiceImpl.class);
bind(SubnetService.class, SubnetServiceImpl.class);
bind(AvailabilityZoneService.class, AvailabilityZoneServiceImpl.class);
bind(PortService.class, PortServiceImpl.class);
bind(RouterService.class, RouterServiceImpl.class);
bind(OctaviaService.class, OctaviaServiceImpl.class);
Expand Down