Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add filteringParams on flavor list method #868

Merged
merged 4 commits into from Oct 27, 2016
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -1,11 +1,13 @@
package org.openstack4j.api.compute;

import static org.testng.AssertJUnit.assertFalse;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import static org.testng.AssertJUnit.assertFalse;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.openstack4j.api.AbstractTest;
import org.openstack4j.api.Builders;
Expand All @@ -23,6 +25,7 @@ public class FlavorTests extends AbstractTest {

private static final String JSON_FLAVOR = "/compute/flavor.json";
private static final String JSON_FLAVORS = "/compute/flavors.json";
private static final String JSON_FLAVORS_DETAILED = "/compute/flavors_detailed.json";
private static final String JSON_FLAVOR_CREATE = "/compute/flavor_create.json";

public void getFlavor() throws Exception {
Expand All @@ -39,12 +42,36 @@ public void getFlavor() throws Exception {
}


public void listFlavors() throws Exception {
respondWith(JSON_FLAVORS);
public void listDetailedAllFlavors() throws Exception {
respondWith(JSON_FLAVORS_DETAILED);
List<? extends Flavor> flavors = osv3().compute().flavors().list();
assertEquals(2, flavors.size());
}

public void listDetailedParamFlavors() throws Exception {
respondWith(JSON_FLAVORS_DETAILED);
Map<String, String> map = new HashMap<String, String>();
map.put("sort_key", "name");
map.put("sort_dir", "asc");
List<? extends Flavor> flavors = osv3().compute().flavors().list(map);
assertEquals(2, flavors.size());
}

public void listSimpleAllFlavors() throws Exception {
respondWith(JSON_FLAVORS);
List<? extends Flavor> flavors = osv3().compute().flavors().list(false);
assertEquals(5, flavors.size());
}

public void listComplexFlavors() throws Exception {
respondWith(JSON_FLAVORS_DETAILED);
Map<String, String> map = new HashMap<String, String>();
map.put("sort_key", "name");
map.put("sort_dir", "asc");
List<? extends Flavor> flavors = osv3().compute().flavors().list(true, map);
assertEquals(2, flavors.size());
}

public void createFlavor() throws IOException {
respondWith(JSON_FLAVOR_CREATE);
Flavor builtF = Builders.flavor().name("safe_to_delete_flavor").vcpus(1).disk(2)
Expand Down
48 changes: 48 additions & 0 deletions core-test/src/main/resources/compute/flavors_detailed.json
@@ -0,0 +1,48 @@
{
"flavors": [
{
"name": "m1.nano",
"links": [
{
"href": "http://openstack.example.com:8774/v2.1/8fd2b4f2b5cf4fa184e5c3c5020408c7/flavors/0",
"rel": "self"
},
{
"href": "http://openstack.example.com:8774/8fd2b4f2b5cf4fa184e5c3c5020408c7/flavors/0",
"rel": "bookmark"
}
],
"ram": 64,
"OS-FLV-DISABLED:disabled": false,
"vcpus": 1,
"swap": "",
"os-flavor-access:is_public": true,
"rxtx_factor": 1,
"OS-FLV-EXT-DATA:ephemeral": 0,
"disk": 1,
"id": "0"
},
{
"name": "m1.tiny",
"links": [
{
"href": "http://openstack.example.com:8774/v2.1/8fd2b4f2b5cf4fa184e5c3c5020408c7/flavors/1",
"rel": "self"
},
{
"href": "http://openstack.example.com:8774/8fd2b4f2b5cf4fa184e5c3c5020408c7/flavors/1",
"rel": "bookmark"
}
],
"ram": 512,
"OS-FLV-DISABLED:disabled": false,
"vcpus": 1,
"swap": "",
"os-flavor-access:is_public": true,
"rxtx_factor": 1,
"OS-FLV-EXT-DATA:ephemeral": 0,
"disk": 1,
"id": "1"
}
]
}
26 changes: 24 additions & 2 deletions core/src/main/java/org/openstack4j/api/compute/FlavorService.java
Expand Up @@ -11,12 +11,12 @@
/**
* Flavor service provides CRUD capabilities for Flavor(s). A flavor is an available hardware configuration/template for a server
*
* @author Jeremy Unruh
* @author Jeremy Unruh, whaon
*/
public interface FlavorService extends RestService {

/**
* List all Flavors
* List all Flavors with details
*
* @return List of Flavor
*/
Expand Down Expand Up @@ -121,5 +121,27 @@ public interface FlavorService extends RestService {
* @return List tenants with access to private flavor
*/
List<? extends FlavorAccess> removeTenantAccess(String flavorId, String tenantId);

/**
* list flavors
* @param detail is detailed
* @param filteringParams parameters affect the response data,availbed are:sort_key,sort_dir,limit,marker,minDisk,minRam,is_public
* @return
*/
List<? extends Flavor> list(boolean detail, Map<String, String> filteringParams);

/**
* list flavors with detailed
* @param filteringParams
* @return
*/
List<? extends Flavor> list(Map<String, String> filteringParams);

/**
* list flavors with non filtering parameters
* @param detail
* @return
*/
List<? extends Flavor> list(boolean detail);

}
Expand Up @@ -20,7 +20,7 @@
/**
* Flavor service provides CRUD capabilities for Flavor(s). A flavor is an available hardware configuration/template for a server
*
* @author Jeremy Unruh
* @author Jeremy Unruh, whaon
*/
public class FlavorServiceImpl extends BaseComputeServices implements FlavorService {

Expand All @@ -29,9 +29,38 @@ public class FlavorServiceImpl extends BaseComputeServices implements FlavorServ
*/
@Override
public List<? extends Flavor> list() {
return get(Flavors.class, uri("/flavors/detail"))
.param("is_public", "None")
.execute().getList();
return this.list(null);
}

/**
* {@inheritDoc}
*/
@Override
public List<? extends Flavor> list(boolean detail) {
return this.list(detail, null);
}

/**
* {@inheritDoc}
*/
@Override
public List<? extends Flavor> list(Map<String, String> filteringParams) {
return this.list(true, filteringParams);
}

/**
* {@inheritDoc}
*/
@Override
public List<? extends Flavor> list(boolean detail, Map<String, String> filteringParams) {
Invocation<Flavors> flavorInvocation = get(Flavors.class, uri("/flavors" + ((detail) ? "/detail" : "")));
if (filteringParams != null) {
for (Map.Entry<String, String> entry : filteringParams.entrySet()) {
flavorInvocation = flavorInvocation.param(entry.getKey(), entry.getValue());
}
}

return flavorInvocation.execute().getList();
}

/**
Expand Down