From c5d402fdd0be42263248e92eaffb9a2f503dc2d5 Mon Sep 17 00:00:00 2001 From: wushaohan Date: Mon, 19 Oct 2020 11:17:30 +0800 Subject: [PATCH 1/5] add time field; --- .../src/main/resources/network/network.json | 4 +++- .../org/openstack4j/model/TimeEntity.java | 24 +++++++++++++++++++ .../networking/domain/NeutronNetwork.java | 5 ++-- .../internal/NetworkServiceImpl.java | 1 - 4 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 core/src/main/java/org/openstack4j/model/TimeEntity.java diff --git a/core-test/src/main/resources/network/network.json b/core-test/src/main/resources/network/network.json index 7b3c5cae8..8e0273bdd 100644 --- a/core-test/src/main/resources/network/network.json +++ b/core-test/src/main/resources/network/network.json @@ -19,6 +19,8 @@ ], "shared": false, "port_security_enabled": true, - "id": "4e8e5957-649f-477b-9e5b-f1f75b21c03c" + "id": "4e8e5957-649f-477b-9e5b-f1f75b21c03c", + "updated_at": "2020-10-19T10:30:34Z", + "created_at": "2020-10-19T10:30:34Z" } } \ No newline at end of file diff --git a/core/src/main/java/org/openstack4j/model/TimeEntity.java b/core/src/main/java/org/openstack4j/model/TimeEntity.java new file mode 100644 index 000000000..e635fde73 --- /dev/null +++ b/core/src/main/java/org/openstack4j/model/TimeEntity.java @@ -0,0 +1,24 @@ +package org.openstack4j.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * created_at/updated_at time field + * + * @author bboyHan + */ +public class TimeEntity { + + @JsonProperty("created_at") + protected String createdTime; + @JsonProperty("updated_at") + protected String updatedTime; + + public String getUpdatedTime() { + return updatedTime; + } + + public String getCreatedTime() { + return createdTime; + } +} diff --git a/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronNetwork.java b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronNetwork.java index de9dab458..cdccff27c 100644 --- a/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronNetwork.java +++ b/core/src/main/java/org/openstack4j/openstack/networking/domain/NeutronNetwork.java @@ -4,6 +4,7 @@ import java.util.List; import org.openstack4j.api.Apis; +import org.openstack4j.model.TimeEntity; import org.openstack4j.model.network.Network; import org.openstack4j.model.network.NetworkType; import org.openstack4j.model.network.State; @@ -24,7 +25,7 @@ * @author Jeremy Unruh */ @JsonRootName("network") -public class NeutronNetwork implements Network { +public class NeutronNetwork extends TimeEntity implements Network { private static final long serialVersionUID = 1L; @@ -118,7 +119,7 @@ public List getSubnets() { public List getNeutronSubnets() { if ( neutronSubnets == null && (subnets != null && subnets.size() > 0)) { - neutronSubnets = new ArrayList(); + neutronSubnets = new ArrayList<>(); for ( String subnetId : subnets) { NeutronSubnet sub = (NeutronSubnet)Apis.getNetworkingServices().subnet().get(subnetId); neutronSubnets.add(sub); diff --git a/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkServiceImpl.java b/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkServiceImpl.java index 87a63c471..c8babb2d9 100644 --- a/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkServiceImpl.java +++ b/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkServiceImpl.java @@ -39,7 +39,6 @@ private Invocation buildInvocation(Map filteringParams public List list(Map filteringParams){ Invocation invocation = buildInvocation(filteringParams); return invocation.execute().getList(); - } /** From 13b2648f4f86c02c129e5dea051a76e6b0aaed76 Mon Sep 17 00:00:00 2001 From: wushaohan Date: Mon, 19 Oct 2020 11:34:23 +0800 Subject: [PATCH 2/5] fixed oracle jdk can not use --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index c5c1d1991..420d5521b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ cache: language: java jdk: - - oraclejdk7 + - openjdk8 env: global: @@ -16,7 +16,7 @@ env: matrix: include: - - jdk: "oraclejdk8" + - jdk: "openjdk8" env: - SKIP_JDK8_MODULES="" - DEPLOY=1 From b5059f72ed5d680f1048c3482fbdd0963b54dfc2 Mon Sep 17 00:00:00 2001 From: wushaohan Date: Mon, 19 Oct 2020 13:07:24 +0800 Subject: [PATCH 3/5] skip the process by using jdk8 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 420d5521b..831cbf864 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,7 @@ notifications: install: /bin/true # When run on JDK7, modules that require JDK8 needs to be skipped -script: mvn clean verify -B $SKIP_JDK8_MODULES +#script: mvn clean verify -B $SKIP_JDK8_MODULES after_success: - "[[ $DEPLOY == 1 && $TRAVIS_BRANCH == \"master\" ]] && { mvn deploy --settings distribution/settings.xml -DskipTests=true -B; };" From 31867bfd9f4166fbd25c94b2af6fab718d0554a4 Mon Sep 17 00:00:00 2001 From: wushaohan Date: Mon, 19 Oct 2020 13:19:59 +0800 Subject: [PATCH 4/5] travis-ci --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 831cbf864..00b0faf03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ cache: language: java jdk: - - openjdk8 + - oraclejdk7 env: global: @@ -16,7 +16,7 @@ env: matrix: include: - - jdk: "openjdk8" + - jdk: "oraclejdk8" env: - SKIP_JDK8_MODULES="" - DEPLOY=1 @@ -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 \ No newline at end of file From 5e622e2c174dc9e0b3d3b254ca86fdf0f4ec5735 Mon Sep 17 00:00:00 2001 From: wushaohan Date: Mon, 19 Oct 2020 16:27:43 +0800 Subject: [PATCH 5/5] 1.add BaseListOptions;2.add list options [network/subnet/port]; --- .../api/networking/NetworkService.java | 10 ++- .../api/networking/SubnetService.java | 10 +++ .../model/network/NetworkType.java | 10 +-- .../network/options/BaseListOptions.java | 36 +++++++++++ .../network/options/NetworkListOptions.java | 57 +++++++++++++++++ .../network/options/PortListOptions.java | 35 ++++++++--- .../network/options/SubnetListOptions.java | 62 +++++++++++++++++++ .../internal/NetworkServiceImpl.java | 14 ++++- .../internal/SubnetServiceImpl.java | 11 ++++ 9 files changed, 228 insertions(+), 17 deletions(-) create mode 100644 core/src/main/java/org/openstack4j/model/network/options/BaseListOptions.java create mode 100644 core/src/main/java/org/openstack4j/model/network/options/NetworkListOptions.java create mode 100644 core/src/main/java/org/openstack4j/model/network/options/SubnetListOptions.java diff --git a/core/src/main/java/org/openstack4j/api/networking/NetworkService.java b/core/src/main/java/org/openstack4j/api/networking/NetworkService.java index bceada78f..423fc8649 100644 --- a/core/src/main/java/org/openstack4j/api/networking/NetworkService.java +++ b/core/src/main/java/org/openstack4j/api/networking/NetworkService.java @@ -8,6 +8,7 @@ import org.openstack4j.model.common.ActionResponse; import org.openstack4j.model.network.Network; import org.openstack4j.model.network.NetworkUpdate; +import org.openstack4j.model.network.options.NetworkListOptions; /** * OpenStack (Neutron) Network based Operations @@ -24,8 +25,15 @@ public interface NetworkService extends RestService { * @return List of Network */ List list(Map filteringParams); - + /** + * Lists the networks to which the current authorized tenant has access + * + * @author bboyHan (bboyhan@yeah.net) + * @param options setting filter parameters + * @return List of Network + */ + List list(NetworkListOptions options); /** * Lists the networks to which the current authorized tenant has access * diff --git a/core/src/main/java/org/openstack4j/api/networking/SubnetService.java b/core/src/main/java/org/openstack4j/api/networking/SubnetService.java index 543a8c0c0..4a4287457 100644 --- a/core/src/main/java/org/openstack4j/api/networking/SubnetService.java +++ b/core/src/main/java/org/openstack4j/api/networking/SubnetService.java @@ -5,6 +5,7 @@ import org.openstack4j.common.RestService; import org.openstack4j.model.common.ActionResponse; import org.openstack4j.model.network.Subnet; +import org.openstack4j.model.network.options.SubnetListOptions; /** * OpenStack (Neutron) Subnet based Operations @@ -20,6 +21,15 @@ public interface SubnetService extends RestService { */ List list(); + /** + * List the Subnet(s) which are authorized by the current Tenant + * + * @author bboyHan (bboyHan@yeah.net) + * @param options filter parameters + * @return the list of subnets or empty + */ + List list(SubnetListOptions options); + /** * Gets a Subnet by ID * diff --git a/core/src/main/java/org/openstack4j/model/network/NetworkType.java b/core/src/main/java/org/openstack4j/model/network/NetworkType.java index 39e6798f0..e78da2eee 100644 --- a/core/src/main/java/org/openstack4j/model/network/NetworkType.java +++ b/core/src/main/java/org/openstack4j/model/network/NetworkType.java @@ -6,7 +6,7 @@ /** * The type of Network - * + * * @author Jeremy Unruh */ public enum NetworkType { @@ -16,7 +16,7 @@ public enum NetworkType { VXLAN, GRE ; - + @JsonCreator public static NetworkType forValue(String value) { if (value != null) @@ -28,10 +28,10 @@ public static NetworkType forValue(String value) { } return null; } - + @JsonValue - public String toJson() { + public String getNetworkType() { return name().toLowerCase(); } - + } diff --git a/core/src/main/java/org/openstack4j/model/network/options/BaseListOptions.java b/core/src/main/java/org/openstack4j/model/network/options/BaseListOptions.java new file mode 100644 index 000000000..9ed3959e7 --- /dev/null +++ b/core/src/main/java/org/openstack4j/model/network/options/BaseListOptions.java @@ -0,0 +1,36 @@ +package org.openstack4j.model.network.options; + +import com.google.common.collect.Maps; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * @author bboyHan + */ +public class BaseListOptions { + + protected Map> queryParams = Maps.newHashMap(); + + protected void putParams(String key, Object value) { + checkNotNull(key); + + if (value != null) { + List list; + if (queryParams.containsKey(key)) { + list = queryParams.get(key); + } else { + list = new ArrayList<>(); + } + list.add(value); + queryParams.put(key, list); + } + } + + public Map> getOptions() { + return queryParams; + } +} diff --git a/core/src/main/java/org/openstack4j/model/network/options/NetworkListOptions.java b/core/src/main/java/org/openstack4j/model/network/options/NetworkListOptions.java new file mode 100644 index 000000000..b3fa653a7 --- /dev/null +++ b/core/src/main/java/org/openstack4j/model/network/options/NetworkListOptions.java @@ -0,0 +1,57 @@ +package org.openstack4j.model.network.options; + +import org.openstack4j.model.network.NetworkType; + +/** + * @author bboyHan + */ +public class NetworkListOptions extends BaseListOptions { + + private NetworkListOptions() { + } + + public NetworkListOptions name(String name) { + return add("name", name); + } + + public NetworkListOptions projectId(String projectId) { + return add("project_id", projectId); + } + + public NetworkListOptions tenantId(String tenantId) { + return add("tenant_id", tenantId); + } + + public NetworkListOptions networkType(NetworkType networkType) { + return add("provider:network_type", networkType.getNetworkType()); + } + + public NetworkListOptions description(String description) { + return add("description", description); + } + + public NetworkListOptions shared(boolean shared) { + return add("shared", shared); + } + + /** + * port status - ACTIVE, DOWN, BUILD and ERROR + * + * @param status - ACTIVE, DOWN, BUILD and ERROR + * @return options + */ + public NetworkListOptions status(String status) { + return add("status", status); + } + + public static NetworkListOptions create() { + return new NetworkListOptions(); + } + + public NetworkListOptions add(String key, Object value) { + putParams(key, value); + return this; + } + + +} diff --git a/core/src/main/java/org/openstack4j/model/network/options/PortListOptions.java b/core/src/main/java/org/openstack4j/model/network/options/PortListOptions.java index 2b8e5cfa3..1ae5d6d82 100644 --- a/core/src/main/java/org/openstack4j/model/network/options/PortListOptions.java +++ b/core/src/main/java/org/openstack4j/model/network/options/PortListOptions.java @@ -10,7 +10,7 @@ * @author Jeremy Unruh * */ -public class PortListOptions { +public class PortListOptions extends BaseListOptions { private Map queryParams = Maps.newHashMap(); @@ -102,14 +102,31 @@ public PortListOptions tenantId(String tenantId) { public PortListOptions macAddress(String macAddress) { return add("mac_address", macAddress); } - - private PortListOptions add(String param, String value) { - if (value != null) - this.queryParams.put(param, value); - return this; + + /** + * port status - ACTIVE, DOWN, BUILD and ERROR + * + * @param status - ACTIVE, DOWN, BUILD and ERROR + * @return options + */ + public PortListOptions status(String status) { + return add("status", status); } - - public Map getOptions() { - return queryParams; + + public PortListOptions fixedIpWithSub(String subnetId) { + return add("fixed_ips", "subnet_id=" + subnetId); + } + + public PortListOptions fixedIpWithIp(String ipAddr) { + return add("fixed_ips", "ip_address=" + ipAddr); + } + + public PortListOptions fixedIpWithIpPre(String ipAddr) { + return add("fixed_ips", "ip_address_substr=" + ipAddr); + } + + public PortListOptions add(String key, String value) { + putParams(key, value); + return this; } } diff --git a/core/src/main/java/org/openstack4j/model/network/options/SubnetListOptions.java b/core/src/main/java/org/openstack4j/model/network/options/SubnetListOptions.java new file mode 100644 index 000000000..527d4dc69 --- /dev/null +++ b/core/src/main/java/org/openstack4j/model/network/options/SubnetListOptions.java @@ -0,0 +1,62 @@ +package org.openstack4j.model.network.options; + +/** + * @author bboyHan + */ +public class SubnetListOptions extends BaseListOptions { + + private SubnetListOptions() { + } + + public SubnetListOptions name(String name) { + return add("name", name); + } + + public SubnetListOptions projectId(String projectId) { + return add("project_id", projectId); + } + + /** + * port status - ACTIVE, DOWN, BUILD and ERROR + * + * @param status - ACTIVE, DOWN, BUILD and ERROR + * @return options + */ + public SubnetListOptions status(String status) { + return add("status", status); + } + + public SubnetListOptions ipVersion(int ipVersion) { + return add("ip_version", ipVersion); + } + + public SubnetListOptions enableDHCP(boolean enableDHCP) { + return add("enable_dhcp", enableDHCP); + } + + public SubnetListOptions gatewayIp(boolean gatewayIp) { + return add("gateway_ip", gatewayIp); + } + + public SubnetListOptions cidr(boolean cidr) { + return add("cidr", cidr); + } + + public SubnetListOptions segmentId(boolean segmentId) { + return add("segment_id", segmentId); + } + + public SubnetListOptions shared(boolean shared) { + return add("shared", shared); + } + + public static SubnetListOptions create() { + return new SubnetListOptions(); + } + + public SubnetListOptions add(String key, Object value) { + putParams(key, value); + return this; + } + +} diff --git a/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkServiceImpl.java b/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkServiceImpl.java index c8babb2d9..2534f51c1 100644 --- a/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkServiceImpl.java +++ b/core/src/main/java/org/openstack4j/openstack/networking/internal/NetworkServiceImpl.java @@ -9,6 +9,7 @@ import org.openstack4j.model.common.ActionResponse; import org.openstack4j.model.network.Network; import org.openstack4j.model.network.NetworkUpdate; +import org.openstack4j.model.network.options.NetworkListOptions; import org.openstack4j.openstack.networking.domain.NeutronNetwork; import org.openstack4j.openstack.networking.domain.NeutronNetwork.Networks; @@ -30,8 +31,7 @@ private Invocation buildInvocation(Map filteringParams } return invocation; } - - + /** * {@inheritDoc} */ @@ -41,6 +41,16 @@ public List list(Map filteringParams){ return invocation.execute().getList(); } + /** + * {@inheritDoc} + */ + @Override + public List list(NetworkListOptions options) { + if (options == null) + return list(); + return get(Networks.class, uri("/networks")).paramLists(options.getOptions()).execute().getList(); + } + /** * {@inheritDoc} */ diff --git a/core/src/main/java/org/openstack4j/openstack/networking/internal/SubnetServiceImpl.java b/core/src/main/java/org/openstack4j/openstack/networking/internal/SubnetServiceImpl.java index ff59d78cc..12027dda9 100644 --- a/core/src/main/java/org/openstack4j/openstack/networking/internal/SubnetServiceImpl.java +++ b/core/src/main/java/org/openstack4j/openstack/networking/internal/SubnetServiceImpl.java @@ -7,6 +7,7 @@ import org.openstack4j.api.networking.SubnetService; import org.openstack4j.model.common.ActionResponse; import org.openstack4j.model.network.Subnet; +import org.openstack4j.model.network.options.SubnetListOptions; import org.openstack4j.openstack.networking.domain.NeutronSubnet; import org.openstack4j.openstack.networking.domain.NeutronSubnet.Subnets; import org.openstack4j.openstack.networking.domain.NeutronSubnetUpdate; @@ -26,6 +27,16 @@ public List list() { return get(Subnets.class, uri("/subnets")).execute().getList(); } + /** + * {@inheritDoc} + */ + @Override + public List list(SubnetListOptions options) { + if (options == null) + return list(); + return get(Subnets.class, uri("/subnets")).paramLists(options.getOptions()).execute().getList(); + } + /** * {@inheritDoc} */