This is an automated email from the ASF dual-hosted git repository. nacx pushed a commit to branch 2.1.x in repository https://gitbox.apache.org/repos/asf/jclouds.git
commit 757d288ae0e3db046ef0b10540d333e002ca0698 Author: Daniel Estévez <[email protected]> AuthorDate: Tue May 21 05:49:11 2019 -0400 Implements listAll method for LoadBalancersAPI (#32) --- .../jclouds/azurecompute/arm/AzureComputeApi.java | 2 +- .../azurecompute/arm/features/LoadBalancerApi.java | 24 +++++--- .../arm/features/LoadBalancerApiLiveTest.java | 19 ++++++- .../arm/features/LoadBalancerApiMockTest.java | 13 +++++ .../src/test/resources/loadbalancerlistall.json | 66 ++++++++++++++++++++++ 5 files changed, 115 insertions(+), 9 deletions(-) diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java index f62daa5..5a5a858 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java @@ -192,7 +192,7 @@ public interface AzureComputeApi extends Closeable { * </a> */ @Delegate - LoadBalancerApi getLoadBalancerApi(@PathParam("resourcegroup") String resourcegroup); + LoadBalancerApi getLoadBalancerApi(@Nullable @PathParam("resourcegroup") String resourcegroup); /** * The AvailabilitySet API includes operations for managing availability sets diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LoadBalancerApi.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LoadBalancerApi.java index f8b65dc..b1673ce 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LoadBalancerApi.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LoadBalancerApi.java @@ -45,34 +45,44 @@ import org.jclouds.rest.annotations.ResponseParser; import org.jclouds.rest.annotations.SelectJson; import org.jclouds.rest.binders.BindToJsonPayload; -@Path("/resourcegroups/{resourcegroup}/providers/Microsoft.Network/loadBalancers") +/** + * The Load Balancer API includes operations for managing the load balancers in your subscription. + * + * @see <a href="https://docs.microsoft.com/en-us/rest/api/load-balancer/loadbalancers">docs</a> + */ @RequestFilters({ OAuthFilter.class, ApiVersionFilter.class }) @Consumes(MediaType.APPLICATION_JSON) public interface LoadBalancerApi { @Named("loadbalancer:list") @GET + @Path("/resourcegroups/{resourcegroup}/providers/Microsoft.Network/loadBalancers") @SelectJson("value") @Fallback(EmptyListOnNotFoundOr404.class) List<LoadBalancer> list(); + @Named("loadbalancer:listall") + @GET + @Path("/providers/Microsoft.Network/loadBalancers") + @SelectJson("value") + @Fallback(EmptyListOnNotFoundOr404.class) + List<LoadBalancer> listAll(); + @Named("loadbalancer:get") - @Path("/{loadbalancername}") + @Path("/resourcegroups/{resourcegroup}/providers/Microsoft.Network/loadBalancers/{loadbalancername}") @GET @Fallback(NullOnNotFoundOr404.class) LoadBalancer get(@PathParam("loadbalancername") String lbName); @Named("loadbalancer:createOrUpdate") - @Path("/{loadbalancername}") + @Path("/resourcegroups/{resourcegroup}/providers/Microsoft.Network/loadBalancers/{loadbalancername}") @PUT @MapBinder(BindToJsonPayload.class) - LoadBalancer createOrUpdate(@PathParam("loadbalancername") String lbName, - @PayloadParam("location") String location, @Nullable @PayloadParam("tags") Map<String, String> tags, - @Nullable @PayloadParam("sku") SKU sku, + LoadBalancer createOrUpdate(@PathParam("loadbalancername") String lbName, @PayloadParam("location") String location, @Nullable @PayloadParam("tags") Map<String, String> tags, @Nullable @PayloadParam("sku") SKU sku, @PayloadParam("properties") LoadBalancerProperties properties); @Named("loadbalancer:delete") - @Path("/{loadbalancername}") + @Path("/resourcegroups/{resourcegroup}/providers/Microsoft.Network/loadBalancers/{loadbalancername}") @DELETE @ResponseParser(URIParser.class) @Fallback(NullOnNotFoundOr404.class) diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiLiveTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiLiveTest.java index 0dde775..1e9b660 100644 --- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiLiveTest.java +++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiLiveTest.java @@ -219,6 +219,23 @@ public class LoadBalancerApiLiveTest extends BaseComputeServiceContextLiveTest { } @Test(dependsOnMethods = "testCreateLoadBalancer") + public void testListAllLoadBalancers() { + List<LoadBalancer> result = lbApi.listAll(); + + // Verify we have something + assertNotNull(result); + assertTrue(result.size() > 0); + + // Check that the load balancer matches the one we originally passed in + assertTrue(any(result, new Predicate<LoadBalancer>() { + @Override + public boolean apply(LoadBalancer input) { + return lb.name().equals(input.name()); + } + })); + } + + @Test(dependsOnMethods = "testCreateLoadBalancer") public void testGetLoadBalancer() { lb = lbApi.get(lbName); assertNotNull(lb); @@ -324,7 +341,7 @@ public class LoadBalancerApiLiveTest extends BaseComputeServiceContextLiveTest { } - @Test(dependsOnMethods = { "testCreateLoadBalancer", "testListLoadBalancers", "testGetLoadBalancer", "testAddProbe", + @Test(dependsOnMethods = { "testCreateLoadBalancer", "testListLoadBalancers", "testListAllLoadBalancers", "testGetLoadBalancer", "testAddProbe", "testAddLoadBalancingRule", "testAddBackendPool", "testAttachNodesToBackendPool", "testAddInboundNatRule" }, alwaysRun = true) public void deleteLoadBalancer() { URI uri = lbApi.delete(lbName); diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiMockTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiMockTest.java index a0a5a42..5813223 100644 --- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiMockTest.java +++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiMockTest.java @@ -109,6 +109,19 @@ public class LoadBalancerApiMockTest extends BaseAzureComputeApiMockTest { assertTrue(result.size() > 0); } + public void listAllLoadBalancers() throws InterruptedException { + server.enqueue(jsonResponse("/loadbalancerlistall.json").setResponseCode(200)); + + final LoadBalancerApi nsgApi = api.getLoadBalancerApi(resourcegroup); + List<LoadBalancer> result = nsgApi.listAll(); + + String path = String.format("/subscriptions/%s/providers/Microsoft.Network/loadBalancers?%s", subscriptionid, apiVersion); + assertSent(server, "GET", path); + + assertNotNull(result); + assertTrue(result.size() > 0); + } + public void listLoadBalancersReturns404() throws InterruptedException { server.enqueue(response404()); diff --git a/providers/azurecompute-arm/src/test/resources/loadbalancerlistall.json b/providers/azurecompute-arm/src/test/resources/loadbalancerlistall.json new file mode 100644 index 0000000..9e51f06 --- /dev/null +++ b/providers/azurecompute-arm/src/test/resources/loadbalancerlistall.json @@ -0,0 +1,66 @@ +{ + "value": [ + { + "name": "testLoadBalancer", + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-loadbalancerapilivetest-nacx/providers/Microsoft.Network/loadBalancers/testLoadBalancer", + "etag": "W/\"1107154b-8717-486b-80c1-af99ec62897b\"", + "type": "Microsoft.Network/loadBalancers", + "location": "westeurope", + "properties": { + "provisioningState": "Succeeded", + "resourceGuid": "383708b3-8d4e-474c-8908-9c4e311ac0bf", + "frontendIPConfigurations": [ + { + "name": "ipConfigs", + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-loadbalancerapilivetest-nacx/providers/Microsoft.Network/loadBalancers/testLoadBalancer/frontendIPConfigurations/ipConfigs", + "etag": "W/\"1107154b-8717-486b-80c1-af99ec62897b\"", + "properties": { + "provisioningState": "Succeeded", + "privateIPAllocationMethod": "Dynamic", + "publicIPAddress": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-loadbalancerapilivetest-nacx/providers/Microsoft.Network/publicIPAddresses/Ip4LoadBalancer" + } + } + } + ], + "backendAddressPools": [], + "loadBalancingRules": [], + "probes": [], + "inboundNatRules": [], + "outboundNatRules": [], + "inboundNatPools": [] + } + }, + { + "name": "testLoadBalancer", + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/other-rg/providers/Microsoft.Network/loadBalancers/testLoadBalancer", + "etag": "W/\"1107154b-8717-486b-80c1-af99ec62897b\"", + "type": "Microsoft.Network/loadBalancers", + "location": "westeurope", + "properties": { + "provisioningState": "Succeeded", + "resourceGuid": "383708b3-8d4e-474c-8908-9c4e311ac0bf", + "frontendIPConfigurations": [ + { + "name": "ipConfigs", + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/other-rg/providers/Microsoft.Network/loadBalancers/testLoadBalancer/frontendIPConfigurations/ipConfigs", + "etag": "W/\"1107154b-8717-486b-80c1-af99ec62897b\"", + "properties": { + "provisioningState": "Succeeded", + "privateIPAllocationMethod": "Dynamic", + "publicIPAddress": { + "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/other-rg/providers/Microsoft.Network/publicIPAddresses/Ip4LoadBalancer" + } + } + } + ], + "backendAddressPools": [], + "loadBalancingRules": [], + "probes": [], + "inboundNatRules": [], + "outboundNatRules": [], + "inboundNatPools": [] + } + } + ] +}
