From f19cbc9d4e95e732f7f6cf3500c8dc33ae082e2c Mon Sep 17 00:00:00 2001 From: Kashyap Jha Date: Wed, 24 Apr 2019 12:59:57 +0530 Subject: [PATCH] Added Trunk API Add listAllVolumes api --- .travis.yml | 1 + .../openstack4j/api/network/TrunkTests.java | 152 ++ .../resources/network/addSubPortResponse.json | 19 + .../network/createTrunkResponse.json | 17 + .../resources/network/getTrunkResponse.json | 17 + .../network/listSubPortsResponse.json | 11 + .../resources/network/listTrunksResponse.json | 31 + .../resources/network/portCreateResponse.json | 29 + .../network/removeSubPortResponse.json | 15 + .../network/updateTrunkResponse.json | 17 + .../java/org/openstack4j/api/Builders.java | 9 + .../api/image/v2/ImageService.java | 1 + .../api/networking/NetworkingService.java | 22 +- .../api/networking/TrunkService.java | 93 ++ .../api/storage/BlockVolumeService.java | 7 + .../openstack4j/model/network/SubPort.java | 28 + .../org/openstack4j/model/network/Trunk.java | 42 + .../network/builder/NetworkBuilders.java | 8 + .../model/network/builder/SubPortBuilder.java | 28 + .../model/network/builder/TrunkBuilder.java | 52 + .../image/v2/domain/GlanceImage.java | 1234 ++++++++--------- .../image/v2/internal/ImageServiceImpl.java | 4 +- .../networking/builder/NeutronBuilders.java | 26 +- .../domain/AbstractNeutronTrunk.java | 224 +++ .../networking/domain/NeutronPort.java | 16 +- .../networking/domain/NeutronSubPort.java | 230 +++ .../domain/NeutronSubPortCreate.java | 107 ++ .../networking/domain/NeutronTrunk.java | 15 + .../networking/domain/NeutronTrunkCreate.java | 39 + .../domain/NeutronTrunkSubport.java | 14 + .../networking/domain/NeutronTrunkUpdate.java | 36 + .../internal/NetworkingServiceImpl.java | 19 +- .../networking/internal/TrunkServiceImpl.java | 109 ++ .../provider/DefaultAPIProvider.java | 5 + .../internal/BlockVolumeServiceImpl.java | 8 + 35 files changed, 2040 insertions(+), 645 deletions(-) create mode 100644 core-test/src/main/java/org/openstack4j/api/network/TrunkTests.java create mode 100644 core-test/src/main/resources/network/addSubPortResponse.json create mode 100644 core-test/src/main/resources/network/createTrunkResponse.json create mode 100644 core-test/src/main/resources/network/getTrunkResponse.json create mode 100644 core-test/src/main/resources/network/listSubPortsResponse.json create mode 100644 core-test/src/main/resources/network/listTrunksResponse.json create mode 100644 core-test/src/main/resources/network/portCreateResponse.json create mode 100644 core-test/src/main/resources/network/removeSubPortResponse.json create mode 100644 core-test/src/main/resources/network/updateTrunkResponse.json create mode 100644 core/src/main/java/org/openstack4j/api/networking/TrunkService.java create mode 100644 core/src/main/java/org/openstack4j/model/network/SubPort.java create mode 100644 core/src/main/java/org/openstack4j/model/network/Trunk.java create mode 100644 core/src/main/java/org/openstack4j/model/network/builder/SubPortBuilder.java create mode 100644 core/src/main/java/org/openstack4j/model/network/builder/TrunkBuilder.java create mode 100644 core/src/main/java/org/openstack4j/openstack/networking/domain/AbstractNeutronTrunk.java create mode 100644 core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronSubPort.java create mode 100644 core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronSubPortCreate.java create mode 100644 core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunk.java create mode 100644 core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkCreate.java create mode 100644 core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkSubport.java create mode 100644 core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkUpdate.java create mode 100644 core/src/main/java/org/openstack4j/openstack/networking/internal/TrunkServiceImpl.java diff --git a/.travis.yml b/.travis.yml index c5c1d1991..b9e50f450 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,3 +36,4 @@ after_success: # infrastructure. This should prevent the buffer overflow from # https://github.com/travis-ci/travis-ci/issues/5227 sudo: false +dist: trusty diff --git a/core-test/src/main/java/org/openstack4j/api/network/TrunkTests.java b/core-test/src/main/java/org/openstack4j/api/network/TrunkTests.java new file mode 100644 index 000000000..ee692e136 --- /dev/null +++ b/core-test/src/main/java/org/openstack4j/api/network/TrunkTests.java @@ -0,0 +1,152 @@ +package org.openstack4j.api.network; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.openstack4j.api.AbstractTest; +import org.openstack4j.api.Builders; +import org.openstack4j.model.common.ActionResponse; +import org.openstack4j.model.network.Port; +import org.openstack4j.model.network.SubPort; +import org.openstack4j.model.network.Trunk; +import org.openstack4j.openstack.networking.domain.NeutronSubPort; +import org.testng.annotations.Test; + +/** + * Rewrote the entire API and so had to re-write tests + * + * @author Kashyap Jha + */ +@Test(suiteName = "Network") +public class TrunkTests extends AbstractTest { + + private static final String JSON_CREATE_TRUNK_RESPONSE = "/network/createTrunkResponse.json"; + private static final String JSON_ADD_SUBPORT_RESPONSE = "/network/addSubPortResponse.json"; + private static final String JSON_REMOVE_SUBPORT_RESPONSE = "/network/removeSubPortResponse.json"; + private static final String JSON_GET_TRUNK_RESPONSE = "/network/getTrunkResponse.json"; + private static final String JSON_UPDATE_TRUNK_RESPONSE = "/network/updateTrunkResponse.json"; + private static final String JSON_LIST_SUBPORTS_RESPONSE = "/network/listSubPortsResponse.json"; + private static final String JSON_LIST_TRUNKS_RESPONSE = "/network/listTrunksResponse.json"; + private static final String JSON_PORT_CREATE_RESPONSE = "/network/portCreateResponse.json"; + + @Override + protected Service service() { + return Service.NETWORK; + } + + @Test(enabled = true) + public void createTrunk() throws Exception { + respondWith(JSON_PORT_CREATE_RESPONSE); + + String network1Id = "466e612-73a3-45df-96b6-4c084dfe1fc7"; + String port1Name = "port1"; + String trunk1Name = "trunk1"; + + Port toBuild = Builders.port().networkId(network1Id).name(port1Name).build(); + Port builtPort = osv3().networking().port().create(toBuild); + + respondWith(JSON_CREATE_TRUNK_RESPONSE); + Trunk builtTrunk = osv3.networking().trunk() + .createTrunk(Builders.trunk().name(trunk1Name).parentPort(builtPort.getId()).build()); + + assertNotNull(builtTrunk); + assertEquals(builtTrunk.getParentPort(), builtPort.getId()); + assertEquals(builtTrunk.getName(), trunk1Name); + } + + @Test(enabled = true) + public void deleteTrunk() throws Exception { + respondWith(204); + String trunkId = "8a2ea42d-06b5-42c2-a54d-97105420f2bb"; + ActionResponse delete = osv3().networking().trunk().deleteTrunk(trunkId); + assertTrue(delete.isSuccess()); + } + + @Test(enabled = true) + public void listTrunks() throws Exception { + respondWith(JSON_LIST_TRUNKS_RESPONSE); + + String trunk1Id = "cf15956d-4391-4ebf-a9cb-0f7e27b24073"; + String trunk2Id = "f98559e9-8e92-4100-96ac-a805e0340abd"; + List trunkIds = new ArrayList<>(); + assertNotNull(trunkIds); + for (Trunk t : osv3().networking().trunk().list()) { + assertNotNull(t); + trunkIds.add(t.getId()); + } + assertTrue(trunkIds.contains(trunk1Id)); + assertTrue(trunkIds.contains(trunk2Id)); + } + + @Test(enabled = true) + public void updateTrunk() throws Exception { + respondWith(JSON_UPDATE_TRUNK_RESPONSE); + + String trunkId = "f98559e9-8e92-4100-96ac-a805e0340abd"; + String updatedName = "changedName"; + Trunk updatedTrunk = osv3().networking().trunk().updateTrunk(Builders.trunk().name(updatedName).build(), + trunkId); + assertNotNull(updatedTrunk); + assertEquals(updatedTrunk.getName(), updatedName); + assertEquals(updatedTrunk.getId(), trunkId); + } + + @Test(enabled = true) + public void addSubPort() throws Exception { + respondWith(JSON_ADD_SUBPORT_RESPONSE); + + String trunkId = "f98559e9-8e92-4100-96ac-a805e0340abd"; + String subPortId = "9d30c4d8-3bb6-4b59-99ab-5eaa22e55037"; + int segmentationId = 101; + String segmentationType = "vlan"; + SubPort subPort = NeutronSubPort.builder().portId(subPortId).segmentationId(segmentationId) + .segmentationType("vlan").build(); + Trunk withSubPort = osv3().networking().trunk().addSubPort(trunkId, subPort); + assertNotNull(withSubPort); + assertEquals(subPortId, withSubPort.getSubPorts().get(0).getPortId()); + assertEquals(segmentationId, withSubPort.getSubPorts().get(0).getSegmentationId()); + assertEquals(segmentationType, withSubPort.getSubPorts().get(0).getSegmentationType()); + } + + @Test(enabled = true) + public void removeSubPort() throws Exception { + respondWith(JSON_REMOVE_SUBPORT_RESPONSE); + + String trunkId = "f98559e9-8e92-4100-96ac-a805e0340abd"; + String subPortId = "9d30c4d8-3bb6-4b59-99ab-5eaa22e55037"; + Trunk withoutSubport = osv3().networking().trunk().removeSubPort(trunkId, subPortId); + assertNotNull(withoutSubport); + assertTrue(withoutSubport.getSubPorts().isEmpty()); + } + + @Test(enabled = true) + public void listSubPorts() throws Exception { + respondWith(JSON_LIST_SUBPORTS_RESPONSE); + + String trunkId = "f98559e9-8e92-4100-96ac-a805e0340abd"; + List ids = new ArrayList<>(); + List subPorts = osv3().networking().trunk().listSubPorts(trunkId); + assertNotNull(subPorts); + for (SubPort subPort : subPorts) { + assertNotNull(subPort); + ids.add(subPort.getId()); + } + assertEquals(ids.size(), 2); + } + + @Test(enabled = true) + public void getTrunk() throws Exception { + respondWith(JSON_GET_TRUNK_RESPONSE); + + String trunkId = "cf15956d-4391-4ebf-a9cb-0f7e27b24073"; + String portId = "e2d70799-b1e3-4737-9298-23cfb5c94416"; + Trunk trunk = osv3().networking().trunk().get(trunkId); + assertNotNull(trunk); + assertEquals(trunkId, trunk.getId()); + assertEquals(portId, trunk.getParentPort()); + } +} diff --git a/core-test/src/main/resources/network/addSubPortResponse.json b/core-test/src/main/resources/network/addSubPortResponse.json new file mode 100644 index 000000000..5838a4f3b --- /dev/null +++ b/core-test/src/main/resources/network/addSubPortResponse.json @@ -0,0 +1,19 @@ +{ + "status": "DOWN", + "sub_ports": [{ + "segmentation_type": "vlan", + "port_id": "9d30c4d8-3bb6-4b59-99ab-5eaa22e55037", + "segmentation_id": 101 + }], + "name": "changedName", + "admin_state_up": true, + "tenant_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "created_at": "2019-03-28T10:16:40Z", + "tags": [], + "updated_at": "2019-03-28T10:34:18Z", + "revision_number": 2, + "project_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "port_id": "e88917ca-039d-4758-ad0c-5e0e03dc75ae", + "id": "f98559e9-8e92-4100-96ac-a805e0340abd", + "description": "" +} diff --git a/core-test/src/main/resources/network/createTrunkResponse.json b/core-test/src/main/resources/network/createTrunkResponse.json new file mode 100644 index 000000000..2e1b0c4ab --- /dev/null +++ b/core-test/src/main/resources/network/createTrunkResponse.json @@ -0,0 +1,17 @@ +{ + "trunk":{ + "status":"DOWN", + "sub_ports":[], + "name":"trunk1", + "admin_state_up":true, + "tenant_id":"1b9ef7f7ec0c41ac83e3ea0df5257f60", + "created_at":"2019-03-28T05:41:32Z", + "tags":[], + "updated_at":"2019-03-28T05:41:32Z", + "revision_number":0, + "project_id":"1b9ef7f7ec0c41ac83e3ea0df5257f60", + "port_id":"0908f280-d0e8-45c6-acec-85714181ddb1", + "id":"8fc625a7-d9a9-415f-83b3-87e9926990fd", + "description":"" + } +} diff --git a/core-test/src/main/resources/network/getTrunkResponse.json b/core-test/src/main/resources/network/getTrunkResponse.json new file mode 100644 index 000000000..ad64fdce8 --- /dev/null +++ b/core-test/src/main/resources/network/getTrunkResponse.json @@ -0,0 +1,17 @@ +{ + "trunk": { + "status": "DOWN", + "sub_ports": [], + "name": "t2", + "admin_state_up": true, + "tenant_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "created_at": "2019-03-28T10:16:50Z", + "tags": [], + "updated_at": "2019-03-28T10:16:50Z", + "revision_number": 0, + "project_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "port_id": "e2d70799-b1e3-4737-9298-23cfb5c94416", + "id": "cf15956d-4391-4ebf-a9cb-0f7e27b24073", + "description": "" + } +} diff --git a/core-test/src/main/resources/network/listSubPortsResponse.json b/core-test/src/main/resources/network/listSubPortsResponse.json new file mode 100644 index 000000000..5c6b683c8 --- /dev/null +++ b/core-test/src/main/resources/network/listSubPortsResponse.json @@ -0,0 +1,11 @@ +{ + "sub_ports": [{ + "segmentation_type": "vlan", + "port_id": "43f18cd3-10ce-44f3-9bc5-6e01d5e6f901", + "segmentation_id": 101 + }, { + "segmentation_type": "vlan", + "port_id": "a5a2be85-d401-4bfc-a646-b4bbd3d1019e", + "segmentation_id": 102 + }] +} diff --git a/core-test/src/main/resources/network/listTrunksResponse.json b/core-test/src/main/resources/network/listTrunksResponse.json new file mode 100644 index 000000000..698437e5b --- /dev/null +++ b/core-test/src/main/resources/network/listTrunksResponse.json @@ -0,0 +1,31 @@ +{ + "trunks": [{ + "status": "DOWN", + "sub_ports": [], + "name": "t2", + "admin_state_up": true, + "tenant_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "created_at": "2019-03-28T10:16:50Z", + "tags": [], + "updated_at": "2019-03-28T10:16:50Z", + "revision_number": 0, + "project_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "port_id": "e2d70799-b1e3-4737-9298-23cfb5c94416", + "id": "cf15956d-4391-4ebf-a9cb-0f7e27b24073", + "description": "" + }, { + "status": "DOWN", + "sub_ports": [], + "name": "t1", + "admin_state_up": true, + "tenant_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "created_at": "2019-03-28T10:16:40Z", + "tags": [], + "updated_at": "2019-03-28T10:16:40Z", + "revision_number": 0, + "project_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "port_id": "e88917ca-039d-4758-ad0c-5e0e03dc75ae", + "id": "f98559e9-8e92-4100-96ac-a805e0340abd", + "description": "" + }] +} diff --git a/core-test/src/main/resources/network/portCreateResponse.json b/core-test/src/main/resources/network/portCreateResponse.json new file mode 100644 index 000000000..b1e0b4a90 --- /dev/null +++ b/core-test/src/main/resources/network/portCreateResponse.json @@ -0,0 +1,29 @@ +{ + "port": { + "allowed_address_pairs": [], + "extra_dhcp_opts": [], + "updated_at": "2019-03-28T11:39:07Z", + "device_owner": "", + "revision_number": 2, + "binding:profile": {}, + "port_security_enabled": true, + "fixed_ips": [], + "id": "0908f280-d0e8-45c6-acec-85714181ddb1", + "security_groups": ["942bf27c-1282-4ab8-8fdc-01518bf54e11"], + "binding:vif_details": {}, + "binding:vif_type": "unbound", + "mac_address": "fa:16:3e:05:ef:74", + "project_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "status": "DOWN", + "binding:host_id": "", + "description": "", + "tags": [], + "device_id": "", + "name": "port1", + "admin_state_up": true, + "network_id": "3466e612-73a3-45df-96b6-4c084dfe1fc7", + "tenant_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "created_at": "2019-03-28T11:39:07Z", + "binding:vnic_type": "normal" + } +} diff --git a/core-test/src/main/resources/network/removeSubPortResponse.json b/core-test/src/main/resources/network/removeSubPortResponse.json new file mode 100644 index 000000000..75d743aa4 --- /dev/null +++ b/core-test/src/main/resources/network/removeSubPortResponse.json @@ -0,0 +1,15 @@ +{ + "status": "DOWN", + "sub_ports": [], + "name": "changedName", + "admin_state_up": true, + "tenant_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "created_at": "2019-03-28T10:16:40Z", + "tags": [], + "updated_at": "2019-03-28T10:42:03Z", + "revision_number": 3, + "project_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "port_id": "e88917ca-039d-4758-ad0c-5e0e03dc75ae", + "id": "f98559e9-8e92-4100-96ac-a805e0340abd", + "description": "" +} diff --git a/core-test/src/main/resources/network/updateTrunkResponse.json b/core-test/src/main/resources/network/updateTrunkResponse.json new file mode 100644 index 000000000..e6bfedcf5 --- /dev/null +++ b/core-test/src/main/resources/network/updateTrunkResponse.json @@ -0,0 +1,17 @@ +{ + "trunk": { + "status": "DOWN", + "sub_ports": [], + "name": "changedName", + "admin_state_up": true, + "tenant_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "created_at": "2019-03-28T10:16:40Z", + "tags": [], + "updated_at": "2019-03-28T10:24:32Z", + "revision_number": 1, + "project_id": "1b9ef7f7ec0c41ac83e3ea0df5257f60", + "port_id": "e88917ca-039d-4758-ad0c-5e0e03dc75ae", + "id": "f98559e9-8e92-4100-96ac-a805e0340abd", + "description": "" + } +} diff --git a/core/src/main/java/org/openstack4j/api/Builders.java b/core/src/main/java/org/openstack4j/api/Builders.java index 21bc63103..25c86ec2f 100644 --- a/core/src/main/java/org/openstack4j/api/Builders.java +++ b/core/src/main/java/org/openstack4j/api/Builders.java @@ -233,6 +233,15 @@ public static PortBuilder port() { return NeutronPort.builder(); } + /** + * The builder to create a Trunk + * + * @return the trunk builder + */ + public static TrunkBuilder trunk() { + return NeutronTrunk.builder(); + } + /** * The builder to create a Router * diff --git a/core/src/main/java/org/openstack4j/api/image/v2/ImageService.java b/core/src/main/java/org/openstack4j/api/image/v2/ImageService.java index 14f2fd6c3..19d5de6e5 100644 --- a/core/src/main/java/org/openstack4j/api/image/v2/ImageService.java +++ b/core/src/main/java/org/openstack4j/api/image/v2/ImageService.java @@ -16,6 +16,7 @@ /** * OpenStack (Glance) Image V2 support * @author emjburns + * @author zdagjyo - 2018-11-26 - Add method listCachedImages */ public interface ImageService extends RestService { diff --git a/core/src/main/java/org/openstack4j/api/networking/NetworkingService.java b/core/src/main/java/org/openstack4j/api/networking/NetworkingService.java index 296d07ec0..e151c4645 100644 --- a/core/src/main/java/org/openstack4j/api/networking/NetworkingService.java +++ b/core/src/main/java/org/openstack4j/api/networking/NetworkingService.java @@ -9,7 +9,7 @@ /** * OpenStack Networking Operations API - * + * * @author Jeremy Unruh */ public interface NetworkingService extends RestService { @@ -55,14 +55,14 @@ public interface NetworkingService extends RestService { * @return the network quota service */ NetQuotaService quotas(); - + /** * @return the LBaaS service */ LoadBalancerService loadbalancers(); - + /** - * + * * @return the Neutron agent API */ AgentService agent(); @@ -73,14 +73,22 @@ public interface NetworkingService extends RestService { LbaasV2Service lbaasV2(); /** - *

OpenStack Firewall As a Service (FwaaS) : Firewall Operations API

- * + *

+ * OpenStack Firewall As a Service (FwaaS) : Firewall Operations + * API + *

+ * * @return the FwaaS service */ FirewallAsService firewalls(); - + /** * @return the Availability Zone Service API */ AvailabilityZoneService availabilityzone(); + + /** + * @return the Trunk API + */ + TrunkService trunk(); } diff --git a/core/src/main/java/org/openstack4j/api/networking/TrunkService.java b/core/src/main/java/org/openstack4j/api/networking/TrunkService.java new file mode 100644 index 000000000..b414f72a2 --- /dev/null +++ b/core/src/main/java/org/openstack4j/api/networking/TrunkService.java @@ -0,0 +1,93 @@ +package org.openstack4j.api.networking; + +import java.util.List; + +import org.openstack4j.common.RestService; +import org.openstack4j.model.common.ActionResponse; +import org.openstack4j.model.network.SubPort; +import org.openstack4j.model.network.Trunk; +import org.openstack4j.openstack.networking.domain.NeutronSubPort; + +/** + * OpenStack Network Trunk operations + * + * @author Kashyap Jha + */ +public interface TrunkService extends RestService { + + /** + * Adds a subport to the specified Trunk + * + * @param trunkId + * ID of the trunk + * @param subPort + * subport object to add + * @return the updated trunk object + */ + Trunk addSubPort(String trunkId, SubPort subPort); + + /** + * Creates a trunk + * + * @param trunk + * the trunk to create + * @return the created trunk object + */ + Trunk createTrunk(Trunk trunk); + + /** + * Delete a trunk + * + * @param trunkId + * ID of the trunk + * @return action response + */ + ActionResponse deleteTrunk(String trunkId); + + /** + * Get a trunk by ID + * + * @param trunkId + * the trunk ID + * @return the trunk object + */ + Trunk get(String trunkId); + + /** + * Lists all trunks + * + * @return a list of trunks + */ + List list(); + + /** + * List the subports associated with the trunk + * + * @param trunkId + * trunk ID + * @return a list of subports + */ + List listSubPorts(String trunkId); + + /** + * Removes subport from the specified trunk + * + * @param trunkId + * trunk ID + * @param portId + * the ID of the subport to remove + * @return trunk object with the subport removed + */ + Trunk removeSubPort(String trunkId, String portId); + + /** + * Updates a trunk object + * + * @param trunk + * the trunk object to update + * @param trunkId + * the ID of the trunk to update + * @return + */ + Trunk updateTrunk(Trunk trunk, String trunkId); +} \ No newline at end of file diff --git a/core/src/main/java/org/openstack4j/api/storage/BlockVolumeService.java b/core/src/main/java/org/openstack4j/api/storage/BlockVolumeService.java index 3529c1ebb..417228649 100644 --- a/core/src/main/java/org/openstack4j/api/storage/BlockVolumeService.java +++ b/core/src/main/java/org/openstack4j/api/storage/BlockVolumeService.java @@ -56,6 +56,13 @@ public interface BlockVolumeService extends RestService { */ List list(Map filteringParams); + /** + * Lists all Block Storage volumes for all tenants. + * + * @return List of all Volumes + */ + List listAll(); + /** * Gets a Block Storage volume by ID * @param volumeId the volume identifier diff --git a/core/src/main/java/org/openstack4j/model/network/SubPort.java b/core/src/main/java/org/openstack4j/model/network/SubPort.java new file mode 100644 index 000000000..3fcbf44a1 --- /dev/null +++ b/core/src/main/java/org/openstack4j/model/network/SubPort.java @@ -0,0 +1,28 @@ +package org.openstack4j.model.network; + +import org.openstack4j.common.Buildable; +import org.openstack4j.model.common.Resource; +import org.openstack4j.model.network.builder.SubPortBuilder; + +/** + * A network subport used ONLY in trunks + * + * @author Kashyap Jha + */ +public interface SubPort extends Resource, Buildable { + + /** + * @return the segmentation ID + */ + int getSegmentationId(); + + /** + * @return the port ID + */ + String getPortId(); + + /** + * @return the segmentation type + */ + String getSegmentationType(); +} diff --git a/core/src/main/java/org/openstack4j/model/network/Trunk.java b/core/src/main/java/org/openstack4j/model/network/Trunk.java new file mode 100644 index 000000000..5138d62a2 --- /dev/null +++ b/core/src/main/java/org/openstack4j/model/network/Trunk.java @@ -0,0 +1,42 @@ +package org.openstack4j.model.network; + +import java.util.List; + +import org.openstack4j.common.Buildable; +import org.openstack4j.model.common.Resource; +import org.openstack4j.model.network.builder.TrunkBuilder; +import org.openstack4j.openstack.networking.domain.NeutronSubPort; + +/** + * A network Trunk + * + * @author Kashyap Jha + */ +public interface Trunk extends Resource, Buildable { + + /** + * @return the current state of the trunk + */ + State getState(); + + /** + * @return the administrative state of the trunk + */ + boolean isAdminStateUp(); + + /** + * @return the parent port ID of the trunk + */ + String getParentPort(); + + /** + * @return a list of subports associated with the trunk + */ + List getSubPorts(); + + /** + * @return a string containing the description + */ + String getDescription(); + +} diff --git a/core/src/main/java/org/openstack4j/model/network/builder/NetworkBuilders.java b/core/src/main/java/org/openstack4j/model/network/builder/NetworkBuilders.java index 4ef73dc5b..227b7e808 100644 --- a/core/src/main/java/org/openstack4j/model/network/builder/NetworkBuilders.java +++ b/core/src/main/java/org/openstack4j/model/network/builder/NetworkBuilders.java @@ -252,4 +252,12 @@ public interface NetworkBuilders { * @return HealthMonitorV2UpdateBuilder */ public HealthMonitorV2UpdateBuilder healthMonitorV2Update(); + + /** + * The builder to create a Trunk + * + * @return TrunkBuilder + */ + public TrunkBuilder trunk(); + } diff --git a/core/src/main/java/org/openstack4j/model/network/builder/SubPortBuilder.java b/core/src/main/java/org/openstack4j/model/network/builder/SubPortBuilder.java new file mode 100644 index 000000000..8a6fa8a31 --- /dev/null +++ b/core/src/main/java/org/openstack4j/model/network/builder/SubPortBuilder.java @@ -0,0 +1,28 @@ +package org.openstack4j.model.network.builder; + +import org.openstack4j.common.Buildable.Builder; +import org.openstack4j.model.network.SubPort; + +/** + * A builder which creates a subport + * + * @author Kashyap Jha + */ +public interface SubPortBuilder extends Builder { + + /** + * Set the segmentation ID + */ + SubPortBuilder segmentationId(int segmentationId); + + /** + * Set the port ID + */ + SubPortBuilder portId(String portId); + + /** + * Set the segmentation type + */ + SubPortBuilder segmentationType(String segmentationType); + +} diff --git a/core/src/main/java/org/openstack4j/model/network/builder/TrunkBuilder.java b/core/src/main/java/org/openstack4j/model/network/builder/TrunkBuilder.java new file mode 100644 index 000000000..a539711b6 --- /dev/null +++ b/core/src/main/java/org/openstack4j/model/network/builder/TrunkBuilder.java @@ -0,0 +1,52 @@ +package org.openstack4j.model.network.builder; + +import java.util.List; + +import org.openstack4j.common.Buildable.Builder; +import org.openstack4j.model.identity.v3.Tenant; +import org.openstack4j.model.network.Trunk; +import org.openstack4j.openstack.networking.domain.NeutronSubPort; + +/** + * A builder which creates a network trunk + * + * @author Kashyap Jha + */ +public interface TrunkBuilder extends Builder { + + /** + * Sets the name + */ + TrunkBuilder name(String name); + + /** + * Sets the tenant + */ + TrunkBuilder tenant(Tenant tenant); + + /** + * Sets the tenantId + */ + TrunkBuilder tenantId(String tenantId); + + /** + * Sets the parent port + */ + TrunkBuilder parentPort(String parentPortId); + + /** + * Sets the description + */ + TrunkBuilder description(String description); + + /** + * Sets the admin state + */ + TrunkBuilder adminState(boolean adminStateUp); + + /** + * Sets the subports + */ + TrunkBuilder subPorts(List subPorts); + +} diff --git a/core/src/main/java/org/openstack4j/openstack/image/v2/domain/GlanceImage.java b/core/src/main/java/org/openstack4j/openstack/image/v2/domain/GlanceImage.java index 510394024..e3e052dd3 100644 --- a/core/src/main/java/org/openstack4j/openstack/image/v2/domain/GlanceImage.java +++ b/core/src/main/java/org/openstack4j/openstack/image/v2/domain/GlanceImage.java @@ -1,617 +1,617 @@ -package org.openstack4j.openstack.image.v2.domain; - -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.openstack4j.model.common.builder.BasicResourceBuilder; -import org.openstack4j.model.image.v2.ContainerFormat; -import org.openstack4j.model.image.v2.DiskFormat; -import org.openstack4j.model.image.v2.Image; -import org.openstack4j.model.image.v2.builder.ImageBuilder; -import org.openstack4j.openstack.common.ListResult; -import org.openstack4j.openstack.common.Metadata; - -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.base.MoreObjects; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; - -/** - * A glance v2.0-2.3 image model implementation - * - * @author emjburns - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -public class GlanceImage implements Image { - - private static final Set RESERVED_KEYS = Sets.newHashSet(Arrays.asList(new String[] { - "id", - "name", - "tags", - "status", - "container_format", - "disk_format", - "created_at", - "updated_at", - "min_disk", - "min_ram", - "protected", - "checksum", - "owner", - "visibility", - "size", - "locations", - "direct_url", - "self", - "file", - "schema", - "architecture", - "instance_uuid", - "kernel_id", - "os_version", - "os_distro", - "ramdisk_id", - "virtual_size" })); - - private static final long serialVersionUID = 1L; - - private String id; - - private String name; - - private List tags; - - private ImageStatus status; - - @JsonProperty("container_format") - private ContainerFormat containerFormat; - - @JsonProperty("disk_format") - private DiskFormat diskFormat; - - @JsonProperty("created_at") - private Date createdAt; - - @JsonProperty("updated_at") - private Date updatedAt; - - @JsonProperty("min_disk") - private Long minDisk; - - @JsonProperty("min_ram") - private Long minRam; - - @JsonProperty("protected") - private Boolean isProtected; - - private String checksum; - - private String owner; - - private ImageVisibility visibility; - - private Long size; - - private List locations; - - @JsonProperty("direct_url") - private String directUrl; - - private String self; - - private String file; - - private String schema; - - private String architecture; - - @JsonProperty("instance_uuid") - private String instanceUuid; - - @JsonProperty("kernel_id") - private String kernelId; - - @JsonProperty("os_version") - private String osVersion; - - @JsonProperty("os_distro") - private String osDistro; - - @JsonProperty("ramdisk_id") - private String ramdiskId; - - @JsonProperty("virtual_size") - private Long virtualSize; - - private Map additionalProperties = Maps.newHashMap(); - - /** - * {@inheritDoc} - */ - @Override - public void setName(String name) { - this.name = name; - } - - /** - * {@inheritDoc} - */ - @Override - public void setId(String id) { - this.id = id; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageStatus getStatus() { - return status; - } - - /** - * {@inheritDoc} - */ - @Override - public String getName() { - return name; - } - - /** - * {@inheritDoc} - */ - @Override - public List getTags() { - return tags; - } - - /** - * {@inheritDoc} - */ - @Override - public ContainerFormat getContainerFormat() { - return containerFormat; - } - - /** - * {@inheritDoc} - */ - @Override - public Date getCreatedAt() { - return createdAt; - } - - /** - * {@inheritDoc} - */ - @Override - public DiskFormat getDiskFormat() { - return diskFormat; - } - - /** - * {@inheritDoc} - */ - @Override - public Date getUpdatedAt() { - return updatedAt; - } - - /** - * {@inheritDoc} - */ - @Override - public Long getMinDisk() { - return minDisk; - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean getIsProtected() { - return isProtected; - } - - /** - * {@inheritDoc} - */ - @Override - public String getId() { - return id; - } - - /** - * {@inheritDoc} - */ - @Override - public Long getMinRam() { - return minRam; - } - - /** - * {@inheritDoc} - */ - @Override - public String getChecksum() { - return checksum; - } - - /** - * {@inheritDoc} - */ - @Override - public String getOwner() { - return owner; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageVisibility getVisibility() { - return visibility; - } - - /** - * {@inheritDoc} - */ - @Override - public Long getSize() { - return size; - } - - @Override - public List getLocations() { - return locations; - } - - /** - * {@inheritDoc} - */ - @Override - public String getDirectUrl() { - return directUrl; - } - - /** - * {@inheritDoc} - */ - @Override - public String getSelf() { - return self; - } - - /** - * {@inheritDoc} - */ - @Override - public String getFile() { - return file; - } - - /** - * {@inheritDoc} - */ - @Override - public String getSchema() { - return schema; - } - - /** - * {@inheritDoc} - */ - @Override - public String getRamdiskId() { - return ramdiskId; - } - - /** - * {@inheritDoc} - */ - @Override - public String getOsDistro() { - return osDistro; - } - - /** - * {@inheritDoc} - */ - @Override - public String getOsVersion() { - return osVersion; - } - - /** - * {@inheritDoc} - */ - @Override - public String getKernelId() { - return kernelId; - } - - /** - * {@inheritDoc} - */ - @Override - public String getInstanceUuid() { - return instanceUuid; - } - - /** - * {@inheritDoc} - */ - @Override - public String getArchitecture() { - return architecture; - } - - /** - * {@inheritDoc} - */ - @Override - public Long getVirtualSize() { - return virtualSize; - } - - /** - * {@inheritDoc} - */ - @Override - public String getAdditionalPropertyValue(String key) { - return additionalProperties.get(key); - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperty(String key, String value) { - if (key != null && !RESERVED_KEYS.contains(key)) { - additionalProperties.put(key, value); - } - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder toBuilder() { - return new ImageConcreteBuilder(this); - } - - public static ImageBuilder builder() { - return new ImageConcreteBuilder(); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("id", id) - .add("name", name) - .add("tags", tags) - .add("imageStatus", status) - .add("containerFormat", containerFormat) - .add("diskFormat", diskFormat) - .add("createdAt", createdAt) - .add("updatedAt", updatedAt) - .add("minDisk", minDisk) - .add("minRam", minRam) - .add("isProtected", isProtected) - .add("checksum", checksum) - .add("owner", owner) - .add("visibility", visibility) - .add("size", size) - .add("locations", locations) - .add("directUrl", directUrl) - .add("self", self) - .add("file", file) - .add("schema", schema) - .add("architecture", architecture) - .add("instanceUuid", instanceUuid) - .add("kernelId", kernelId) - .add("osVersion", osVersion) - .add("osDistro", osDistro) - .add("ramdiskId", ramdiskId) - .add("virtualSize", virtualSize) - .toString(); - } - - - @JsonInclude(JsonInclude.Include.NON_NULL) - public static class Images extends ListResult { - private static final long serialVersionUID = 1L; - @JsonProperty("images") - private List images; - - @Override - protected List value() { - return images; - } - } - - @JsonInclude(JsonInclude.Include.NON_NULL) - public static class Location { - @JsonProperty("url") - private String url; - - @JsonProperty("metadata") - private Metadata metadat; - } - - public static class ImageConcreteBuilder extends BasicResourceBuilder implements ImageBuilder { - private GlanceImage m; - - ImageConcreteBuilder() { - this(new GlanceImage()); - } - - ImageConcreteBuilder(GlanceImage m) { - this.m = m; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder visibility(ImageVisibility visibility) { - m.visibility = visibility; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder tags(List tags) { - m.tags = tags; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder containerFormat(ContainerFormat containerFormat) { - m.containerFormat = containerFormat; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder diskFormat(DiskFormat diskFormat) { - m.diskFormat = diskFormat; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder minDisk(Long minDisk) { - m.minDisk = minDisk; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder minRam(Long minRam) { - m.minRam = minRam; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder isProtected(Boolean isProtected) { - m.isProtected = isProtected; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder architecture(String architecture) { - m.architecture = architecture; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder instanceUuid(String instanceUuid) { - m.instanceUuid = instanceUuid; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder kernelId(String kernelId) { - m.kernelId = kernelId; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder osVersion(String osVersion) { - m.osVersion = osVersion; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder osDistro(String osDistro) { - m.osDistro = osDistro; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder ramdiskId(String ramdiskId) { - m.ramdiskId = ramdiskId; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder additionalProperty(String key, String value) { - if (key != null && !RESERVED_KEYS.contains(key)) { - m.additionalProperties.put(key, value); - } - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public Image build() { - return m; - } - - /** - * {@inheritDoc} - */ - @Override - public ImageBuilder from(Image in) { - m = (GlanceImage) in; - return this; - } - - /** - * {@inheritDoc} - */ - @Override - protected Image reference() { - return m; - } - } -} +package org.openstack4j.openstack.image.v2.domain; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.openstack4j.model.common.builder.BasicResourceBuilder; +import org.openstack4j.model.image.v2.ContainerFormat; +import org.openstack4j.model.image.v2.DiskFormat; +import org.openstack4j.model.image.v2.Image; +import org.openstack4j.model.image.v2.builder.ImageBuilder; +import org.openstack4j.openstack.common.ListResult; +import org.openstack4j.openstack.common.Metadata; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.common.base.MoreObjects; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +/** + * A glance v2.0-2.3 image model implementation + * + * @author emjburns + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +public class GlanceImage implements Image { + + private static final Set RESERVED_KEYS = Sets.newHashSet(Arrays.asList(new String[] { + "id", + "name", + "tags", + "status", + "container_format", + "disk_format", + "created_at", + "updated_at", + "min_disk", + "min_ram", + "protected", + "checksum", + "owner", + "visibility", + "size", + "locations", + "direct_url", + "self", + "file", + "schema", + "architecture", + "instance_uuid", + "kernel_id", + "os_version", + "os_distro", + "ramdisk_id", + "virtual_size" })); + + private static final long serialVersionUID = 1L; + + private String id; + + private String name; + + private List tags; + + private ImageStatus status; + + @JsonProperty("container_format") + private ContainerFormat containerFormat; + + @JsonProperty("disk_format") + private DiskFormat diskFormat; + + @JsonProperty("created_at") + private Date createdAt; + + @JsonProperty("updated_at") + private Date updatedAt; + + @JsonProperty("min_disk") + private Long minDisk; + + @JsonProperty("min_ram") + private Long minRam; + + @JsonProperty("protected") + private Boolean isProtected; + + private String checksum; + + private String owner; + + private ImageVisibility visibility; + + private Long size; + + private List locations; + + @JsonProperty("direct_url") + private String directUrl; + + private String self; + + private String file; + + private String schema; + + private String architecture; + + @JsonProperty("instance_uuid") + private String instanceUuid; + + @JsonProperty("kernel_id") + private String kernelId; + + @JsonProperty("os_version") + private String osVersion; + + @JsonProperty("os_distro") + private String osDistro; + + @JsonProperty("ramdisk_id") + private String ramdiskId; + + @JsonProperty("virtual_size") + private Long virtualSize; + + private Map additionalProperties = Maps.newHashMap(); + + /** + * {@inheritDoc} + */ + @Override + public void setName(String name) { + this.name = name; + } + + /** + * {@inheritDoc} + */ + @Override + public void setId(String id) { + this.id = id; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageStatus getStatus() { + return status; + } + + /** + * {@inheritDoc} + */ + @Override + public String getName() { + return name; + } + + /** + * {@inheritDoc} + */ + @Override + public List getTags() { + return tags; + } + + /** + * {@inheritDoc} + */ + @Override + public ContainerFormat getContainerFormat() { + return containerFormat; + } + + /** + * {@inheritDoc} + */ + @Override + public Date getCreatedAt() { + return createdAt; + } + + /** + * {@inheritDoc} + */ + @Override + public DiskFormat getDiskFormat() { + return diskFormat; + } + + /** + * {@inheritDoc} + */ + @Override + public Date getUpdatedAt() { + return updatedAt; + } + + /** + * {@inheritDoc} + */ + @Override + public Long getMinDisk() { + return minDisk; + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean getIsProtected() { + return isProtected; + } + + /** + * {@inheritDoc} + */ + @Override + public String getId() { + return id; + } + + /** + * {@inheritDoc} + */ + @Override + public Long getMinRam() { + return minRam; + } + + /** + * {@inheritDoc} + */ + @Override + public String getChecksum() { + return checksum; + } + + /** + * {@inheritDoc} + */ + @Override + public String getOwner() { + return owner; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageVisibility getVisibility() { + return visibility; + } + + /** + * {@inheritDoc} + */ + @Override + public Long getSize() { + return size; + } + + @Override + public List getLocations() { + return locations; + } + + /** + * {@inheritDoc} + */ + @Override + public String getDirectUrl() { + return directUrl; + } + + /** + * {@inheritDoc} + */ + @Override + public String getSelf() { + return self; + } + + /** + * {@inheritDoc} + */ + @Override + public String getFile() { + return file; + } + + /** + * {@inheritDoc} + */ + @Override + public String getSchema() { + return schema; + } + + /** + * {@inheritDoc} + */ + @Override + public String getRamdiskId() { + return ramdiskId; + } + + /** + * {@inheritDoc} + */ + @Override + public String getOsDistro() { + return osDistro; + } + + /** + * {@inheritDoc} + */ + @Override + public String getOsVersion() { + return osVersion; + } + + /** + * {@inheritDoc} + */ + @Override + public String getKernelId() { + return kernelId; + } + + /** + * {@inheritDoc} + */ + @Override + public String getInstanceUuid() { + return instanceUuid; + } + + /** + * {@inheritDoc} + */ + @Override + public String getArchitecture() { + return architecture; + } + + /** + * {@inheritDoc} + */ + @Override + public Long getVirtualSize() { + return virtualSize; + } + + /** + * {@inheritDoc} + */ + @Override + public String getAdditionalPropertyValue(String key) { + return additionalProperties.get(key); + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String key, String value) { + if (key != null && !RESERVED_KEYS.contains(key)) { + additionalProperties.put(key, value); + } + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder toBuilder() { + return new ImageConcreteBuilder(this); + } + + public static ImageBuilder builder() { + return new ImageConcreteBuilder(); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("id", id) + .add("name", name) + .add("tags", tags) + .add("imageStatus", status) + .add("containerFormat", containerFormat) + .add("diskFormat", diskFormat) + .add("createdAt", createdAt) + .add("updatedAt", updatedAt) + .add("minDisk", minDisk) + .add("minRam", minRam) + .add("isProtected", isProtected) + .add("checksum", checksum) + .add("owner", owner) + .add("visibility", visibility) + .add("size", size) + .add("locations", locations) + .add("directUrl", directUrl) + .add("self", self) + .add("file", file) + .add("schema", schema) + .add("architecture", architecture) + .add("instanceUuid", instanceUuid) + .add("kernelId", kernelId) + .add("osVersion", osVersion) + .add("osDistro", osDistro) + .add("ramdiskId", ramdiskId) + .add("virtualSize", virtualSize) + .toString(); + } + + + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class Images extends ListResult { + private static final long serialVersionUID = 1L; + @JsonProperty("images") + private List images; + + @Override + protected List value() { + return images; + } + } + + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class Location { + @JsonProperty("url") + private String url; + + @JsonProperty("metadata") + private Metadata metadat; + } + + public static class ImageConcreteBuilder extends BasicResourceBuilder implements ImageBuilder { + private GlanceImage m; + + ImageConcreteBuilder() { + this(new GlanceImage()); + } + + ImageConcreteBuilder(GlanceImage m) { + this.m = m; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder visibility(ImageVisibility visibility) { + m.visibility = visibility; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder tags(List tags) { + m.tags = tags; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder containerFormat(ContainerFormat containerFormat) { + m.containerFormat = containerFormat; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder diskFormat(DiskFormat diskFormat) { + m.diskFormat = diskFormat; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder minDisk(Long minDisk) { + m.minDisk = minDisk; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder minRam(Long minRam) { + m.minRam = minRam; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder isProtected(Boolean isProtected) { + m.isProtected = isProtected; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder architecture(String architecture) { + m.architecture = architecture; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder instanceUuid(String instanceUuid) { + m.instanceUuid = instanceUuid; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder kernelId(String kernelId) { + m.kernelId = kernelId; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder osVersion(String osVersion) { + m.osVersion = osVersion; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder osDistro(String osDistro) { + m.osDistro = osDistro; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder ramdiskId(String ramdiskId) { + m.ramdiskId = ramdiskId; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder additionalProperty(String key, String value) { + if (key != null && !RESERVED_KEYS.contains(key)) { + m.additionalProperties.put(key, value); + } + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public Image build() { + return m; + } + + /** + * {@inheritDoc} + */ + @Override + public ImageBuilder from(Image in) { + m = (GlanceImage) in; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + protected Image reference() { + return m; + } + } +} diff --git a/core/src/main/java/org/openstack4j/openstack/image/v2/internal/ImageServiceImpl.java b/core/src/main/java/org/openstack4j/openstack/image/v2/internal/ImageServiceImpl.java index 988f372a5..fefece86c 100644 --- a/core/src/main/java/org/openstack4j/openstack/image/v2/internal/ImageServiceImpl.java +++ b/core/src/main/java/org/openstack4j/openstack/image/v2/internal/ImageServiceImpl.java @@ -57,13 +57,13 @@ public List list() { public List list(Map filteringParams) { return get(GlanceImage.Images.class, uri("/images")).params(filteringParams).execute().getList(); } - + /** * {@inheritDoc} */ @Override public List listCachedImages() { - try { + try { return get(CachedImages.class, uri("/cached_images")) .execute(ExecutionOptions.create(PropagateOnStatus.on(404))).getList(); } diff --git a/core/src/main/java/org/openstack4j/openstack/networking/builder/NeutronBuilders.java b/core/src/main/java/org/openstack4j/openstack/networking/builder/NeutronBuilders.java index 734e5f4d9..838eedf7d 100644 --- a/core/src/main/java/org/openstack4j/openstack/networking/builder/NeutronBuilders.java +++ b/core/src/main/java/org/openstack4j/openstack/networking/builder/NeutronBuilders.java @@ -35,6 +35,11 @@ public PortBuilder port() { return NeutronPort.builder(); } + @Override + public TrunkBuilder trunk() { + return NeutronTrunk.builder(); + } + @Override public RouterBuilder router() { return NeutronRouter.builder(); @@ -141,53 +146,52 @@ public HealthMonitorAssociateBuilder lbPoolAssociateHealthMonitor() { } @Override - public MemberV2Builder memberV2(){ + public MemberV2Builder memberV2() { return NeutronMemberV2.builder(); } - @Override - public MemberV2UpdateBuilder memberV2Update(){ + public MemberV2UpdateBuilder memberV2Update() { return NeutronMemberV2Update.builder(); } @Override - public LoadBalancerV2Builder lbV2(){ + public LoadBalancerV2Builder lbV2() { return NeutronLoadBalancerV2.builder(); } @Override - public LoadBalancerV2UpdateBuilder loadBalancerV2Update(){ + public LoadBalancerV2UpdateBuilder loadBalancerV2Update() { return NeutronLoadBalancerV2Update.builder(); } @Override - public HealthMonitorV2Builder healthMonitorV2(){ + public HealthMonitorV2Builder healthMonitorV2() { return NeutronHealthMonitorV2.builder(); } @Override - public HealthMonitorV2UpdateBuilder healthMonitorV2Update(){ + public HealthMonitorV2UpdateBuilder healthMonitorV2Update() { return NeutronHealthMonitorV2Update.builder(); } @Override - public LbPoolV2Builder lbPoolV2(){ + public LbPoolV2Builder lbPoolV2() { return NeutronLbPoolV2.builder(); } @Override - public LbPoolV2UpdateBuilder lbPoolV2Update(){ + public LbPoolV2UpdateBuilder lbPoolV2Update() { return NeutronLbPoolV2Update.builder(); } @Override - public ListenerV2Builder listenerV2(){ + public ListenerV2Builder listenerV2() { return NeutronListenerV2.builder(); } @Override - public ListenerV2UpdateBuilder listenerV2Update(){ + public ListenerV2UpdateBuilder listenerV2Update() { return NeutronListenerV2Update.builder(); } } diff --git a/core/src/main/java/org/openstack4j/openstack/networking/domain/AbstractNeutronTrunk.java b/core/src/main/java/org/openstack4j/openstack/networking/domain/AbstractNeutronTrunk.java new file mode 100644 index 000000000..a70f3eb90 --- /dev/null +++ b/core/src/main/java/org/openstack4j/openstack/networking/domain/AbstractNeutronTrunk.java @@ -0,0 +1,224 @@ +package org.openstack4j.openstack.networking.domain; + +import java.util.List; +import java.util.Objects; + +import org.openstack4j.model.common.builder.ResourceBuilder; +import org.openstack4j.model.network.State; +import org.openstack4j.model.network.Trunk; +import org.openstack4j.model.network.builder.TrunkBuilder; +import org.openstack4j.openstack.common.ListResult; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.common.base.MoreObjects; + +/** + * A Neutron Trunk + * + * This is the parent class for {@link NeutronTrunk} and + * {@link NeutronTrunkSubport} NeutronTrunk has the json root name trunk whereas + * NeutronTrunkSubport doesn't as the API doesn't expect it + * + * @author Kashyap Jha + */ +public abstract class AbstractNeutronTrunk implements Trunk { + + public static class TrunkConcreteBuilder extends ResourceBuilder + implements TrunkBuilder { + + NeutronTrunk reference; + + TrunkConcreteBuilder() { + this(new NeutronTrunk()); + } + + TrunkConcreteBuilder(Trunk trunk) { + this.reference = (NeutronTrunk) trunk; + } + + @Override + public TrunkBuilder adminState(boolean adminStateUp) { + reference.adminStateUp = adminStateUp; + return this; + } + + @Override + public Trunk build() { + return reference; + } + + @Override + public TrunkBuilder description(String description) { + reference.description = description; + return this; + } + + @Override + public TrunkBuilder from(Trunk in) { + reference = (NeutronTrunk) in; + return this; + } + + @Override + public TrunkBuilder parentPort(String parentPortId) { + reference.parentPortId = parentPortId; + return this; + } + + @Override + protected Trunk reference() { + return reference; + } + + @Override + public TrunkBuilder subPorts(List subPorts) { + reference.subPorts = subPorts; + return this; + } + } + + public static class Trunks extends ListResult { + + private static final long serialVersionUID = 1L; + + @JsonProperty("trunks") + private List trunks; + + @Override + protected List value() { + return trunks; + } + } + + private static final long serialVersionUID = 1L; + + public static TrunkBuilder builder() { + return new TrunkConcreteBuilder(); + } + + @JsonProperty("admin_state_up") + protected boolean adminStateUp = true; + + @JsonProperty("description") + protected String description; + + @JsonProperty("id") + protected String id; + + @JsonProperty("name") + protected String name; + + @JsonProperty("port_id") + protected String parentPortId; + + @JsonProperty("revision_number") + protected int revisionNumber; + + @JsonProperty("status") + protected State state; + + @JsonProperty("sub_ports") + protected List subPorts; + + @JsonProperty("tenant_id") + protected String tenantId; + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj instanceof NeutronTrunk) { + NeutronTrunk that = (NeutronTrunk) obj; + if (java.util.Objects.equals(id, that.id) && java.util.Objects.equals(name, that.name) + && java.util.Objects.equals(adminStateUp, that.adminStateUp) + && java.util.Objects.equals(tenantId, that.tenantId) + && java.util.Objects.equals(parentPortId, that.parentPortId) + && java.util.Objects.equals(revisionNumber, that.revisionNumber) + && java.util.Objects.equals(state, that.state) && java.util.Objects.equals(subPorts, that.subPorts) + && java.util.Objects.equals(description, that.description)) { + return true; + } + } + return false; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public String getId() { + return id; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getParentPort() { + return parentPortId; + } + + public int getRevisionNumber() { + return revisionNumber; + } + + @Override + public State getState() { + return state; + } + + @Override + public List getSubPorts() { + return subPorts; + } + + @Override + public String getTenantId() { + return tenantId; + } + + public int hashCode() { + return Objects.hash(id, name, parentPortId, revisionNumber, state, tenantId, subPorts, description); + } + + @Override + public boolean isAdminStateUp() { + return adminStateUp; + } + + @Override + public void setId(String id) { + this.id = id; + } + + @Override + public void setName(String name) { + this.name = name; + } + + public void setPortId(String parentPortId) { + this.parentPortId = parentPortId; + } + + @Override + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + @Override + public TrunkBuilder toBuilder() { + return new TrunkConcreteBuilder(this); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this).omitNullValues().add("id", id).add("name", name) + .add("adminStateUp", adminStateUp).add("parentPortId", parentPortId) + .add("revisionNumber", revisionNumber).add("state", state).add("tenantId", tenantId) + .add("subPorts", subPorts).add("description", description).toString(); + } +} \ No newline at end of file diff --git a/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronPort.java b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronPort.java index b3ace7d62..dbaa54eb0 100644 --- a/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronPort.java +++ b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronPort.java @@ -63,6 +63,15 @@ public class NeutronPort implements Port { @JsonProperty("tenant_id") private String tenantId; + @JsonProperty("trunkport:type") + private String trunkPortType; + + @JsonProperty("trunkport:parent_id") + private String trunkPortParentId; + + @JsonProperty("trunkport:vid") + private String trunkPortVlanId; + @JsonProperty("security_groups") private List securityGroups; @@ -191,7 +200,7 @@ public String getMacAddress() { public List getSecurityGroups() { return securityGroups; } - + /** * {@inheritDoc} */ @@ -231,7 +240,7 @@ public String getvNicType() { public Map getProfile() { return profile; } - + /** * {@inheritDoc} */ @@ -292,6 +301,7 @@ public Boolean isPortSecurityEnabled() { public String toString() { return MoreObjects.toStringHelper(this).omitNullValues() .add("id", id).add("name", name).add("adminStateUp", adminStateUp).add("deviceId", deviceId) + .add("trunkPortType", trunkPortType).add("trunkPortParentId", trunkPortParentId).add("trunkPortVlanId", trunkPortVlanId) .add("deviceOwner", deviceOwner).add("fixedIps", fixedIps).add("macAddress", macAddress) .add("networkId", networkId).add("tenantId", tenantId).add("securityGroups", securityGroups) .add("allowed_address_pairs", allowedAddressPairs).add("port_security_enabled ", portSecurityEnabled) @@ -459,7 +469,7 @@ public PortBuilder state(State state) { m.state = state; return this; } - + @Override public Port build() { return m; diff --git a/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronSubPort.java b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronSubPort.java new file mode 100644 index 000000000..fc30a0b3f --- /dev/null +++ b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronSubPort.java @@ -0,0 +1,230 @@ +package org.openstack4j.openstack.networking.domain; + +import java.util.List; +import java.util.Objects; + +import org.openstack4j.model.ModelEntity; +import org.openstack4j.model.common.builder.ResourceBuilder; +import org.openstack4j.model.network.SubPort; +import org.openstack4j.model.network.builder.SubPortBuilder; +import org.openstack4j.openstack.common.ListEntity; +import org.openstack4j.openstack.common.ListResult; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonRootName; +import com.google.common.base.MoreObjects; + +/** + * A Subport ONLY used for adding to trunks + * + * @author Kashyap Jha + */ +@JsonRootName("sub_port") +@JsonIgnoreProperties(ignoreUnknown = true) +public class NeutronSubPort implements SubPort, ModelEntity { + + public static class NeutronSubPorts implements ModelEntity { + + private static final long serialVersionUID = 1L; + + public static NeutronSubPorts fromSubPorts(List subPorts) { + NeutronSubPorts toCreate = new NeutronSubPorts(); + for (SubPort subPort : subPorts) { + toCreate.subPorts.add(NeutronSubPort.fromSubPort(subPort)); + } + return toCreate; + } + + @JsonProperty("sub_ports") + private ListEntity subPorts; + + public NeutronSubPorts() { + subPorts = new ListEntity<>(); + } + } + + public static class SubPortConcreteBuilder extends ResourceBuilder + implements SubPortBuilder { + + private NeutronSubPort reference; + + SubPortConcreteBuilder() { + this(new NeutronSubPort()); + } + + SubPortConcreteBuilder(NeutronSubPort subPort) { + this.reference = subPort; + } + + @Override + public SubPort build() { + return reference; + } + + @Override + public SubPortBuilder from(SubPort in) { + reference = (NeutronSubPort) in; + return this; + } + + @Override + public SubPortBuilder portId(String portId) { + reference.portId = portId; + return this; + } + + @Override + protected SubPort reference() { + return reference; + } + + @Override + public SubPortBuilder segmentationId(int segmentationId) { + reference.segmentationId = segmentationId; + return this; + } + + @Override + public SubPortBuilder segmentationType(String segmentationType) { + reference.segmentationType = segmentationType; + return this; + } + } + + public static class SubPorts extends ListResult { + private static final long serialVersionUID = 1L; + + @JsonIgnoreProperties(ignoreUnknown = true) + @JsonProperty("sub_ports") + private List subPorts; + + @Override + protected List value() { + return subPorts; + } + } + + private static final long serialVersionUID = 1L; + + public static SubPortBuilder builder() { + return new SubPortConcreteBuilder(); + } + + public static NeutronSubPort fromSubPort(SubPort subPort) { + NeutronSubPort toCreate = new NeutronSubPort(); + toCreate.portId = subPort.getPortId(); + toCreate.segmentationId = subPort.getSegmentationId(); + toCreate.segmentationType = subPort.getSegmentationType(); + return toCreate; + } + + @JsonProperty("port_id") + private String portId; + + @JsonProperty("segmentation_id") + private int segmentationId; + + @JsonProperty("segmentation_type") + private String segmentationType; + + public NeutronSubPort() { + } + + public NeutronSubPort(String portId) { + this.portId = portId; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj instanceof NeutronSubPort) { + NeutronSubPort that = (NeutronSubPort) obj; + if (Objects.equals(portId, that.portId) && Objects.equals(segmentationId, that.segmentationId) + && Objects.equals(segmentationType, that.segmentationType)) { + return true; + } + } + return false; + } + + /** + * Subports don't have the ID attribute. Use {@link getPortId} instead + */ + @Override + @Deprecated + public String getId() { + return portId; + } + + /** + * Subports don't have the name attribute + */ + @Override + @Deprecated + public String getName() { + throw new UnsupportedOperationException(); + } + + @Override + public String getPortId() { + return portId; + } + + @Override + public int getSegmentationId() { + return segmentationId; + } + + @Override + public String getSegmentationType() { + return segmentationType; + } + + /** + * Subports don't have the tenantId attrbute + */ + @Override + @Deprecated + public String getTenantId() { + throw new UnsupportedOperationException(); + } + + @Override + public int hashCode() { + return Objects.hash(segmentationId, portId, segmentationType); + } + + @Override + @Deprecated + public void setId(String id) { + throw new UnsupportedOperationException(); + } + + @Override + @Deprecated + public void setName(String name) { + throw new UnsupportedOperationException(); + + } + + @Override + @Deprecated + public void setTenantId(String tenantId) { + throw new UnsupportedOperationException(); + + } + + @Override + public SubPortBuilder toBuilder() { + return new SubPortConcreteBuilder(this); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this).omitNullValues().add("segmentationId", segmentationId) + .add("portId", portId).add("segmentationType", segmentationType).toString(); + + } +} \ No newline at end of file diff --git a/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronSubPortCreate.java b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronSubPortCreate.java new file mode 100644 index 000000000..248b956b0 --- /dev/null +++ b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronSubPortCreate.java @@ -0,0 +1,107 @@ +package org.openstack4j.openstack.networking.domain; + +import java.util.List; + +import org.openstack4j.model.ModelEntity; +import org.openstack4j.model.network.SubPort; +import org.openstack4j.openstack.common.ListEntity; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonRootName; + +/** + * Models for adding and removing subports + * + * @author Kashyap Jha + */ + +/* + * Used to create a SubPortCreate object which only encapsulates allowable fields + */ +@JsonRootName("sub_ports") +public class NeutronSubPortCreate implements ModelEntity { + + /* + * Used to create a SubPortDelete object which only encapsulates allowable fields + */ + public static class NeutronSubPortDelete implements ModelEntity { + + /* + * Used to create a list of SubPortDelete objects to delete multiple resources at once + */ + public static class NeutronSubPortsDelete implements ModelEntity { + + private static final long serialVersionUID = 1L; + + public static NeutronSubPortsDelete delete(List portIds) { + NeutronSubPortsDelete toDelete = new NeutronSubPortsDelete(); + + for (String portId : portIds) { + toDelete.subPorts.add(NeutronSubPortDelete.delete(portId)); + } + return toDelete; + } + + @JsonProperty("sub_ports") + private ListEntity subPorts; + + public NeutronSubPortsDelete() { + subPorts = new ListEntity<>(); + } + + } + + private static final long serialVersionUID = 1L; + + public static NeutronSubPortDelete delete(String portId) { + NeutronSubPortDelete toDelete = new NeutronSubPortDelete(); + toDelete.portId = portId; + return toDelete; + } + + @JsonProperty("port_id") + private String portId; + } + + /* + * Used to create a list of SubPortCreate objects to add multiple resources at once + */ + public static class NeutronSubPortsCreate implements ModelEntity { + + private static final long serialVersionUID = 1L; + + public static NeutronSubPortsCreate fromSubPorts(List subPorts) { + NeutronSubPortsCreate toCreate = new NeutronSubPortsCreate(); + for (SubPort subPort : subPorts) { + toCreate.subPorts.add(NeutronSubPortCreate.fromSubPort(subPort)); + } + return toCreate; + } + + @JsonProperty("sub_ports") + private ListEntity subPorts; + + public NeutronSubPortsCreate() { + subPorts = new ListEntity<>(); + } + } + + private static final long serialVersionUID = 1L; + + public static NeutronSubPortCreate fromSubPort(SubPort subPort) { + NeutronSubPortCreate toCreate = new NeutronSubPortCreate(); + toCreate.segmentationId = subPort.getSegmentationId(); + toCreate.segmentationType = subPort.getSegmentationType(); + toCreate.portId = subPort.getPortId(); + return toCreate; + } + + @JsonProperty("port_id") + private String portId; + + @JsonProperty("segmentation_id") + private int segmentationId; + + @JsonProperty("segmentation_type") + private String segmentationType; +} diff --git a/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunk.java b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunk.java new file mode 100644 index 000000000..f58023cad --- /dev/null +++ b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunk.java @@ -0,0 +1,15 @@ +package org.openstack4j.openstack.networking.domain; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonRootName; + +/** + * This class is used to add the json root name "trunk" + * + * @author Kashyap Jha + */ +@JsonRootName("trunk") +@JsonIgnoreProperties(ignoreUnknown = true) +public class NeutronTrunk extends AbstractNeutronTrunk { + private static final long serialVersionUID = 1L; +} diff --git a/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkCreate.java b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkCreate.java new file mode 100644 index 000000000..e261bd764 --- /dev/null +++ b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkCreate.java @@ -0,0 +1,39 @@ +package org.openstack4j.openstack.networking.domain; + +import org.openstack4j.model.ModelEntity; +import org.openstack4j.model.network.Trunk; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonRootName; + +/** + * Model for trunk create call + * + * @author Kashyap Jha + */ +@JsonRootName("trunk") +@JsonIgnoreProperties(ignoreUnknown = true) +public class NeutronTrunkCreate implements ModelEntity { + + private static final long serialVersionUID = 1L; + + public static NeutronTrunkCreate fromTrunk(Trunk trunk) { + + NeutronTrunkCreate toCreate = new NeutronTrunkCreate(); + toCreate.name = trunk.getName(); + toCreate.adminStateUp = trunk.isAdminStateUp(); + toCreate.parentPortId = trunk.getParentPort(); + return toCreate; + } + + @JsonProperty("admin_state_up") + private boolean adminStateUp = true; + + @JsonProperty("name") + private String name; + + @JsonProperty("port_id") + private String parentPortId; + +} diff --git a/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkSubport.java b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkSubport.java new file mode 100644 index 000000000..6bde7dfeb --- /dev/null +++ b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkSubport.java @@ -0,0 +1,14 @@ +package org.openstack4j.openstack.networking.domain; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +/** + * This class is used by the subport operations which don't use the json root + * name "trunks" + * + * @author Kashyap Jha + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class NeutronTrunkSubport extends AbstractNeutronTrunk { + private static final long serialVersionUID = 1L; +} diff --git a/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkUpdate.java b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkUpdate.java new file mode 100644 index 000000000..4be302efa --- /dev/null +++ b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronTrunkUpdate.java @@ -0,0 +1,36 @@ +package org.openstack4j.openstack.networking.domain; + +import org.openstack4j.model.ModelEntity; +import org.openstack4j.model.network.Trunk; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonRootName; + +/** + * Model for trunk update call + * + * @author Kashyap Jha + */ +@JsonRootName("trunk") +public class NeutronTrunkUpdate implements ModelEntity { + + private static final long serialVersionUID = 1L; + + @JsonProperty("name") + private String name; + + @JsonProperty("admin_state_up") + private boolean adminStateUp; + + @JsonProperty("description") + private String description; + + public static NeutronTrunkUpdate update(Trunk t) { + NeutronTrunkUpdate u = new NeutronTrunkUpdate(); + u.adminStateUp = t.isAdminStateUp(); + u.description = t.getDescription(); + u.name = t.getName(); + return u; + } + +} diff --git a/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkingServiceImpl.java b/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkingServiceImpl.java index 2ddf8768e..838f3c44d 100644 --- a/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkingServiceImpl.java +++ b/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkingServiceImpl.java @@ -10,6 +10,7 @@ import org.openstack4j.api.networking.SecurityGroupRuleService; import org.openstack4j.api.networking.SecurityGroupService; import org.openstack4j.api.networking.SubnetService; +import org.openstack4j.api.networking.TrunkService; import org.openstack4j.api.networking.ext.AgentService; import org.openstack4j.api.networking.ext.FirewallAsService; import org.openstack4j.api.networking.ext.LbaasV2Service; @@ -18,7 +19,7 @@ /** * OpenStack Networking Operations API - * + * * @author Jeremy Unruh */ public class NetworkingServiceImpl implements NetworkingService { @@ -99,7 +100,7 @@ public LoadBalancerService loadbalancers() { * {@inheritDoc} */ @Override - public LbaasV2Service lbaasV2(){ + public LbaasV2Service lbaasV2() { return Apis.get(LbaasV2Service.class); } @@ -109,7 +110,7 @@ public LbaasV2Service lbaasV2(){ @Override public FirewallAsService firewalls() { return Apis.get(FirewallAsService.class); - } + } /** * {@inheritDoc} @@ -118,13 +119,21 @@ public FirewallAsService firewalls() { public AgentService agent() { return Apis.get(AgentService.class); } - + /** * {@inheritDoc} */ @Override public AvailabilityZoneService availabilityzone() { return Apis.get(AvailabilityZoneService.class); - } + } + + /** + * {@inheritDoc} + */ + @Override + public TrunkService trunk() { + return Apis.get(TrunkService.class); + } } diff --git a/core/src/main/java/org/openstack4j/openstack/networking/internal/TrunkServiceImpl.java b/core/src/main/java/org/openstack4j/openstack/networking/internal/TrunkServiceImpl.java new file mode 100644 index 000000000..6e1594f2f --- /dev/null +++ b/core/src/main/java/org/openstack4j/openstack/networking/internal/TrunkServiceImpl.java @@ -0,0 +1,109 @@ +package org.openstack4j.openstack.networking.internal; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.ArrayList; +import java.util.List; + +import org.openstack4j.api.networking.TrunkService; +import org.openstack4j.model.common.ActionResponse; +import org.openstack4j.model.network.SubPort; +import org.openstack4j.model.network.Trunk; +import org.openstack4j.openstack.networking.domain.AbstractNeutronTrunk.Trunks; +import org.openstack4j.openstack.networking.domain.NeutronSubPort; +import org.openstack4j.openstack.networking.domain.NeutronSubPort.SubPorts; +import org.openstack4j.openstack.networking.domain.NeutronSubPortCreate; +import org.openstack4j.openstack.networking.domain.NeutronSubPortCreate.NeutronSubPortDelete.NeutronSubPortsDelete; +import org.openstack4j.openstack.networking.domain.NeutronTrunk; +import org.openstack4j.openstack.networking.domain.NeutronTrunkCreate; +import org.openstack4j.openstack.networking.domain.NeutronTrunkSubport; +import org.openstack4j.openstack.networking.domain.NeutronTrunkUpdate; + +/** + * OpenStack Network Trunk operations implementation + * + * @author Kashyap Jha + */ +public class TrunkServiceImpl extends BaseNetworkingServices implements TrunkService { + + /** + * {@inheritDoc} + */ + @Override + public List list() { + return get(Trunks.class, uri("/trunks")).execute().getList(); + } + + /** + * {@inheritDoc} + */ + @Override + public Trunk createTrunk(Trunk trunk) { + checkNotNull(trunk); + return post(NeutronTrunk.class, uri("/trunks")).entity(NeutronTrunkCreate.fromTrunk(trunk)).execute(); + } + + /** + * {@inheritDoc} + */ + @Override + public ActionResponse deleteTrunk(String trunkId) { + checkNotNull(trunkId); + return deleteWithResponse(uri("/trunks/%s", trunkId)).execute(); + } + + /** + * {@inheritDoc} + */ + @Override + public Trunk updateTrunk(Trunk trunk, String trunkId) { + checkNotNull(trunk); + checkNotNull(trunkId); + return put(NeutronTrunk.class, uri("/trunks/%s", trunkId)).entity(NeutronTrunkUpdate.update(trunk)).execute(); + } + + /** + * {@inheritDoc} + */ + @Override + public Trunk addSubPort(String trunkId, SubPort subPort) { + checkNotNull(subPort); + checkNotNull(trunkId); + List al = new ArrayList<>(); + al.add(subPort); + return put(NeutronTrunkSubport.class, uri("/trunks/%s/add_subports", trunkId)) + .entity(NeutronSubPortCreate.NeutronSubPortsCreate.fromSubPorts(al)).execute(); + } + + /** + * {@inheritDoc} + */ + @Override + public Trunk removeSubPort(String trunkId, String portId) { + checkNotNull(trunkId); + checkNotNull(portId); + List al = new ArrayList<>(); + al.add(portId); + return put(NeutronTrunkSubport.class, uri("/trunks/%s/remove_subports", trunkId)) + .entity(NeutronSubPortsDelete.delete(al)).execute(); + } + + /** + * {@inheritDoc} + */ + @Override + public List listSubPorts(String trunkId) { + checkNotNull(trunkId); + return get(SubPorts.class, uri("/trunks/%s/get_subports", trunkId)).execute().getList(); + } + + /** + * {@inheritDoc} + */ + @Override + public Trunk get(String trunkId) { + checkNotNull(trunkId); + return get(NeutronTrunk.class, uri("/trunks/%s", trunkId)).execute(); + } + +} diff --git a/core/src/main/java/org/openstack4j/openstack/provider/DefaultAPIProvider.java b/core/src/main/java/org/openstack4j/openstack/provider/DefaultAPIProvider.java index 18102e6d6..42ff7a1fc 100644 --- a/core/src/main/java/org/openstack4j/openstack/provider/DefaultAPIProvider.java +++ b/core/src/main/java/org/openstack4j/openstack/provider/DefaultAPIProvider.java @@ -170,6 +170,8 @@ import org.openstack4j.api.trove.InstanceFlavorService; import org.openstack4j.api.trove.InstanceService; import org.openstack4j.api.trove.TroveService; +import org.openstack4j.api.networking.TrunkService; + import org.openstack4j.api.workflow.*; import org.openstack4j.openstack.artifact.internal.ArtifactServiceImpl; import org.openstack4j.openstack.artifact.internal.ToscaTemplatesArtifactServiceImpl; @@ -336,6 +338,8 @@ import org.openstack4j.openstack.trove.internal.DBInstanceServiceImpl; import org.openstack4j.openstack.trove.internal.DBUserServiceImpl; import org.openstack4j.openstack.trove.internal.TroveServiceImpl; +import org.openstack4j.openstack.networking.internal.TrunkServiceImpl; + import com.google.common.collect.Maps; import org.openstack4j.openstack.workflow.internal.*; @@ -546,6 +550,7 @@ public void initialize() { bind(ActionExecutionService.class, ActionExecutionServiceImpl.class); bind(WorkflowEnvironmentService.class, WorkflowEnvironmentServiceImpl.class); bind(CronTriggerService.class, CronTriggerServiceImpl.class); + bind(TrunkService.class, TrunkServiceImpl.class); } /** diff --git a/core/src/main/java/org/openstack4j/openstack/storage/block/internal/BlockVolumeServiceImpl.java b/core/src/main/java/org/openstack4j/openstack/storage/block/internal/BlockVolumeServiceImpl.java index 685967e21..e40d12796 100644 --- a/core/src/main/java/org/openstack4j/openstack/storage/block/internal/BlockVolumeServiceImpl.java +++ b/core/src/main/java/org/openstack4j/openstack/storage/block/internal/BlockVolumeServiceImpl.java @@ -50,6 +50,14 @@ public List list(Map filteringParams) { return volumeInvocation.execute().getList(); } + /** + * {@inheritDoc} + */ + @Override + public List listAll() { + return get(Volumes.class, uri("/volumes/detail")).param("all_tenants", 1).execute().getList(); + } + /** * {@inheritDoc} */