Committed by
Gerrit Code Review
[ONOS-3793] Implements the Openstack Security Group REST call parser
Change-Id: Ie6665d4ebae26e363853db28fb2a535c55f1e2ec
Showing
8 changed files
with
612 additions
and
31 deletions
| ... | @@ -15,13 +15,12 @@ | ... | @@ -15,13 +15,12 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.openstackswitching; | 16 | package org.onosproject.openstackswitching; |
| 17 | 17 | ||
| 18 | -import com.google.common.collect.Lists; | ||
| 19 | import org.onlab.packet.Ip4Address; | 18 | import org.onlab.packet.Ip4Address; |
| 20 | import org.onlab.packet.MacAddress; | 19 | import org.onlab.packet.MacAddress; |
| 21 | 20 | ||
| 21 | +import java.util.Collection; | ||
| 22 | import java.util.Collections; | 22 | import java.util.Collections; |
| 23 | import java.util.HashMap; | 23 | import java.util.HashMap; |
| 24 | -import java.util.List; | ||
| 25 | 24 | ||
| 26 | import static com.google.common.base.Preconditions.checkNotNull; | 25 | import static com.google.common.base.Preconditions.checkNotNull; |
| 27 | 26 | ||
| ... | @@ -49,13 +48,13 @@ public final class OpenstackPort { | ... | @@ -49,13 +48,13 @@ public final class OpenstackPort { |
| 49 | // <subnet id, ip address> | 48 | // <subnet id, ip address> |
| 50 | private HashMap<String, Ip4Address> fixedIps; | 49 | private HashMap<String, Ip4Address> fixedIps; |
| 51 | private String id; | 50 | private String id; |
| 52 | - private List<String> securityGroups; | 51 | + private Collection<String> securityGroups; |
| 53 | private String deviceId; | 52 | private String deviceId; |
| 54 | 53 | ||
| 55 | private OpenstackPort(PortStatus status, String name, boolean adminStateUp, | 54 | private OpenstackPort(PortStatus status, String name, boolean adminStateUp, |
| 56 | String networkId, String tenantId, String deviceOwner, | 55 | String networkId, String tenantId, String deviceOwner, |
| 57 | MacAddress macAddress, HashMap fixedIps, String id, | 56 | MacAddress macAddress, HashMap fixedIps, String id, |
| 58 | - List<String> securityGroups, String deviceId) { | 57 | + Collection<String> securityGroups, String deviceId) { |
| 59 | 58 | ||
| 60 | this.status = status; | 59 | this.status = status; |
| 61 | this.name = name; | 60 | this.name = name; |
| ... | @@ -158,7 +157,7 @@ public final class OpenstackPort { | ... | @@ -158,7 +157,7 @@ public final class OpenstackPort { |
| 158 | * | 157 | * |
| 159 | * @return security group info | 158 | * @return security group info |
| 160 | */ | 159 | */ |
| 161 | - public List<String> securityGroups() { | 160 | + public Collection<String> securityGroups() { |
| 162 | return securityGroups; | 161 | return securityGroups; |
| 163 | } | 162 | } |
| 164 | 163 | ||
| ... | @@ -187,7 +186,7 @@ public final class OpenstackPort { | ... | @@ -187,7 +186,7 @@ public final class OpenstackPort { |
| 187 | OpenstackPort op = new OpenstackPort(this.status, this.name, this.adminStateUp, | 186 | OpenstackPort op = new OpenstackPort(this.status, this.name, this.adminStateUp, |
| 188 | this.networkId, this.tenantId, this.deviceOwner, this.macAddress, | 187 | this.networkId, this.tenantId, this.deviceOwner, this.macAddress, |
| 189 | (HashMap) this.fixedIps.clone(), this.id, | 188 | (HashMap) this.fixedIps.clone(), this.id, |
| 190 | - Collections.unmodifiableList(this.securityGroups), this.deviceId); | 189 | + Collections.unmodifiableCollection(this.securityGroups), this.deviceId); |
| 191 | 190 | ||
| 192 | return op; | 191 | return op; |
| 193 | } | 192 | } |
| ... | @@ -209,12 +208,11 @@ public final class OpenstackPort { | ... | @@ -209,12 +208,11 @@ public final class OpenstackPort { |
| 209 | // list of hash map <subnet id, ip address> | 208 | // list of hash map <subnet id, ip address> |
| 210 | private HashMap<String, Ip4Address> fixedIps; | 209 | private HashMap<String, Ip4Address> fixedIps; |
| 211 | private String id; | 210 | private String id; |
| 212 | - private List<String> securityGroups; | 211 | + private Collection<String> securityGroups; |
| 213 | private String deviceId; | 212 | private String deviceId; |
| 214 | 213 | ||
| 215 | Builder() { | 214 | Builder() { |
| 216 | fixedIps = new HashMap<>(); | 215 | fixedIps = new HashMap<>(); |
| 217 | - securityGroups = Lists.newArrayList(); | ||
| 218 | } | 216 | } |
| 219 | 217 | ||
| 220 | /** | 218 | /** |
| ... | @@ -328,12 +326,11 @@ public final class OpenstackPort { | ... | @@ -328,12 +326,11 @@ public final class OpenstackPort { |
| 328 | /** | 326 | /** |
| 329 | * Sets security group of the port. | 327 | * Sets security group of the port. |
| 330 | * | 328 | * |
| 331 | - * @param securityGroup security group of the port | 329 | + * @param securityGroupList security group list of the port |
| 332 | * @return Builder object | 330 | * @return Builder object |
| 333 | */ | 331 | */ |
| 334 | - public Builder securityGroup(String securityGroup) { | 332 | + public Builder securityGroup(Collection<String> securityGroupList) { |
| 335 | - securityGroups.add(securityGroup); | 333 | + this.securityGroups = securityGroupList; |
| 336 | - | ||
| 337 | return this; | 334 | return this; |
| 338 | } | 335 | } |
| 339 | 336 | ... | ... |
| ... | @@ -17,6 +17,8 @@ package org.onosproject.openstackswitching; | ... | @@ -17,6 +17,8 @@ package org.onosproject.openstackswitching; |
| 17 | 17 | ||
| 18 | import org.onlab.packet.Ip4Address; | 18 | import org.onlab.packet.Ip4Address; |
| 19 | 19 | ||
| 20 | +import java.util.Collection; | ||
| 21 | +import java.util.Collections; | ||
| 20 | import java.util.List; | 22 | import java.util.List; |
| 21 | 23 | ||
| 22 | import static com.google.common.base.Preconditions.checkNotNull; | 24 | import static com.google.common.base.Preconditions.checkNotNull; |
| ... | @@ -34,10 +36,11 @@ public final class OpenstackSubnet { | ... | @@ -34,10 +36,11 @@ public final class OpenstackSubnet { |
| 34 | private String gatewayIp; | 36 | private String gatewayIp; |
| 35 | private String cidr; | 37 | private String cidr; |
| 36 | private String id; | 38 | private String id; |
| 39 | + private Collection<String> securityGroups; | ||
| 37 | 40 | ||
| 38 | private OpenstackSubnet(String name, boolean enableHhcp, String networkId, | 41 | private OpenstackSubnet(String name, boolean enableHhcp, String networkId, |
| 39 | String tenantId, List<Ip4Address> dnsNameservers, String gatewayIp, | 42 | String tenantId, List<Ip4Address> dnsNameservers, String gatewayIp, |
| 40 | - String cidr, String id) { | 43 | + String cidr, String id, Collection<String> securityGroups) { |
| 41 | this.name = name; | 44 | this.name = name; |
| 42 | this.enableHhcp = enableHhcp; | 45 | this.enableHhcp = enableHhcp; |
| 43 | this.networkId = checkNotNull(networkId); | 46 | this.networkId = checkNotNull(networkId); |
| ... | @@ -46,6 +49,7 @@ public final class OpenstackSubnet { | ... | @@ -46,6 +49,7 @@ public final class OpenstackSubnet { |
| 46 | this.gatewayIp = gatewayIp; | 49 | this.gatewayIp = gatewayIp; |
| 47 | this.cidr = checkNotNull(cidr); | 50 | this.cidr = checkNotNull(cidr); |
| 48 | this.id = checkNotNull(id); | 51 | this.id = checkNotNull(id); |
| 52 | + this.securityGroups = securityGroups; | ||
| 49 | } | 53 | } |
| 50 | 54 | ||
| 51 | /** | 55 | /** |
| ... | @@ -89,6 +93,10 @@ public final class OpenstackSubnet { | ... | @@ -89,6 +93,10 @@ public final class OpenstackSubnet { |
| 89 | return id; | 93 | return id; |
| 90 | } | 94 | } |
| 91 | 95 | ||
| 96 | + public Collection<String> securityGroups() { | ||
| 97 | + return Collections.unmodifiableCollection(this.securityGroups); | ||
| 98 | + } | ||
| 99 | + | ||
| 92 | /** | 100 | /** |
| 93 | * OpenstackSubnet Builder class. | 101 | * OpenstackSubnet Builder class. |
| 94 | * | 102 | * |
| ... | @@ -102,6 +110,7 @@ public final class OpenstackSubnet { | ... | @@ -102,6 +110,7 @@ public final class OpenstackSubnet { |
| 102 | private String gatewayIp; | 110 | private String gatewayIp; |
| 103 | private String cidr; | 111 | private String cidr; |
| 104 | private String id; | 112 | private String id; |
| 113 | + private Collection<String> securityGroups; | ||
| 105 | 114 | ||
| 106 | Builder() {} | 115 | Builder() {} |
| 107 | 116 | ||
| ... | @@ -153,9 +162,15 @@ public final class OpenstackSubnet { | ... | @@ -153,9 +162,15 @@ public final class OpenstackSubnet { |
| 153 | return this; | 162 | return this; |
| 154 | } | 163 | } |
| 155 | 164 | ||
| 165 | + public Builder securityGroups(Collection<String> securityGroups) { | ||
| 166 | + this.securityGroups = securityGroups; | ||
| 167 | + | ||
| 168 | + return this; | ||
| 169 | + } | ||
| 170 | + | ||
| 156 | public OpenstackSubnet build() { | 171 | public OpenstackSubnet build() { |
| 157 | return new OpenstackSubnet(name, enableDhcp, networkId, tenantId, | 172 | return new OpenstackSubnet(name, enableDhcp, networkId, tenantId, |
| 158 | - dnsNameservers, gatewayIp, cidr, id); | 173 | + dnsNameservers, gatewayIp, cidr, id, securityGroups); |
| 159 | } | 174 | } |
| 160 | } | 175 | } |
| 161 | } | 176 | } | ... | ... |
| ... | @@ -26,6 +26,7 @@ import org.onosproject.openstackswitching.OpenstackPort; | ... | @@ -26,6 +26,7 @@ import org.onosproject.openstackswitching.OpenstackPort; |
| 26 | import org.onosproject.openstackswitching.OpenstackSubnet; | 26 | import org.onosproject.openstackswitching.OpenstackSubnet; |
| 27 | import org.onosproject.openstackswitching.web.OpenstackNetworkCodec; | 27 | import org.onosproject.openstackswitching.web.OpenstackNetworkCodec; |
| 28 | import org.onosproject.openstackswitching.web.OpenstackPortCodec; | 28 | import org.onosproject.openstackswitching.web.OpenstackPortCodec; |
| 29 | +import org.onosproject.openstackswitching.web.OpenstackSecurityGroupCodec; | ||
| 29 | import org.onosproject.openstackswitching.web.OpenstackSubnetCodec; | 30 | import org.onosproject.openstackswitching.web.OpenstackSubnetCodec; |
| 30 | import org.slf4j.Logger; | 31 | import org.slf4j.Logger; |
| 31 | import javax.ws.rs.core.MediaType; | 32 | import javax.ws.rs.core.MediaType; |
| ... | @@ -44,6 +45,21 @@ import static org.slf4j.LoggerFactory.getLogger; | ... | @@ -44,6 +45,21 @@ import static org.slf4j.LoggerFactory.getLogger; |
| 44 | */ | 45 | */ |
| 45 | public class OpenstackRestHandler { | 46 | public class OpenstackRestHandler { |
| 46 | 47 | ||
| 48 | + private static final String URI_NETWORKS = "networks"; | ||
| 49 | + private static final String URI_PORTS = "ports"; | ||
| 50 | + private static final String URI_SUBNETS = "subnets"; | ||
| 51 | + private static final String URI_SECURITY_GROUPS = "security-groups"; | ||
| 52 | + private static final String URI_TOKENS = "tokens"; | ||
| 53 | + | ||
| 54 | + private static final String PATH_NETWORKS = "networks"; | ||
| 55 | + private static final String PATH_PORTS = "ports"; | ||
| 56 | + private static final String PATH_SUBNETS = "subnets"; | ||
| 57 | + private static final String PATH_ACCESS = "access"; | ||
| 58 | + private static final String PATH_TOKEN = "token"; | ||
| 59 | + private static final String PATH_ID = "id"; | ||
| 60 | + | ||
| 61 | + private static final String HEADER_AUTH_TOKEN = "X-Auth-Token"; | ||
| 62 | + | ||
| 47 | private final Logger log = getLogger(getClass()); | 63 | private final Logger log = getLogger(getClass()); |
| 48 | private String neutronUrl; | 64 | private String neutronUrl; |
| 49 | private String keystoneUrl; | 65 | private String keystoneUrl; |
| ... | @@ -70,9 +86,9 @@ public class OpenstackRestHandler { | ... | @@ -70,9 +86,9 @@ public class OpenstackRestHandler { |
| 70 | */ | 86 | */ |
| 71 | public Collection<OpenstackNetwork> getNetworks() { | 87 | public Collection<OpenstackNetwork> getNetworks() { |
| 72 | 88 | ||
| 73 | - WebResource.Builder builder = getClientBuilder(neutronUrl + "networks"); | 89 | + WebResource.Builder builder = getClientBuilder(neutronUrl + URI_NETWORKS); |
| 74 | String response = builder.accept(MediaType.APPLICATION_JSON_TYPE). | 90 | String response = builder.accept(MediaType.APPLICATION_JSON_TYPE). |
| 75 | - header("X-Auth-Token", getToken()).get(String.class); | 91 | + header(HEADER_AUTH_TOKEN, getToken()).get(String.class); |
| 76 | 92 | ||
| 77 | log.debug("networks response:" + response); | 93 | log.debug("networks response:" + response); |
| 78 | 94 | ||
| ... | @@ -80,7 +96,7 @@ public class OpenstackRestHandler { | ... | @@ -80,7 +96,7 @@ public class OpenstackRestHandler { |
| 80 | List<OpenstackNetwork> openstackNetworks = Lists.newArrayList(); | 96 | List<OpenstackNetwork> openstackNetworks = Lists.newArrayList(); |
| 81 | try { | 97 | try { |
| 82 | ObjectNode node = (ObjectNode) mapper.readTree(response); | 98 | ObjectNode node = (ObjectNode) mapper.readTree(response); |
| 83 | - ArrayNode networkList = (ArrayNode) node.path("networks"); | 99 | + ArrayNode networkList = (ArrayNode) node.path(PATH_NETWORKS); |
| 84 | OpenstackNetworkCodec networkCodec = new OpenstackNetworkCodec(); | 100 | OpenstackNetworkCodec networkCodec = new OpenstackNetworkCodec(); |
| 85 | networkList.forEach(n -> openstackNetworks.add(networkCodec.decode((ObjectNode) n, null))); | 101 | networkList.forEach(n -> openstackNetworks.add(networkCodec.decode((ObjectNode) n, null))); |
| 86 | } catch (IOException e) { | 102 | } catch (IOException e) { |
| ... | @@ -100,15 +116,15 @@ public class OpenstackRestHandler { | ... | @@ -100,15 +116,15 @@ public class OpenstackRestHandler { |
| 100 | */ | 116 | */ |
| 101 | public Collection<OpenstackPort> getPorts() { | 117 | public Collection<OpenstackPort> getPorts() { |
| 102 | 118 | ||
| 103 | - WebResource.Builder builder = getClientBuilder(neutronUrl + "ports"); | 119 | + WebResource.Builder builder = getClientBuilder(neutronUrl + URI_PORTS); |
| 104 | String response = builder.accept(MediaType.APPLICATION_JSON_TYPE). | 120 | String response = builder.accept(MediaType.APPLICATION_JSON_TYPE). |
| 105 | - header("X-Auth-Token", getToken()).get(String.class); | 121 | + header(HEADER_AUTH_TOKEN, getToken()).get(String.class); |
| 106 | 122 | ||
| 107 | ObjectMapper mapper = new ObjectMapper(); | 123 | ObjectMapper mapper = new ObjectMapper(); |
| 108 | List<OpenstackPort> openstackPorts = Lists.newArrayList(); | 124 | List<OpenstackPort> openstackPorts = Lists.newArrayList(); |
| 109 | try { | 125 | try { |
| 110 | ObjectNode node = (ObjectNode) mapper.readTree(response); | 126 | ObjectNode node = (ObjectNode) mapper.readTree(response); |
| 111 | - ArrayNode portList = (ArrayNode) node.path("ports"); | 127 | + ArrayNode portList = (ArrayNode) node.path(PATH_PORTS); |
| 112 | OpenstackPortCodec portCodec = new OpenstackPortCodec(); | 128 | OpenstackPortCodec portCodec = new OpenstackPortCodec(); |
| 113 | portList.forEach(p -> openstackPorts.add(portCodec.decode((ObjectNode) p, null))); | 129 | portList.forEach(p -> openstackPorts.add(portCodec.decode((ObjectNode) p, null))); |
| 114 | } catch (IOException e) { | 130 | } catch (IOException e) { |
| ... | @@ -128,15 +144,15 @@ public class OpenstackRestHandler { | ... | @@ -128,15 +144,15 @@ public class OpenstackRestHandler { |
| 128 | */ | 144 | */ |
| 129 | public Collection<OpenstackSubnet> getSubnets() { | 145 | public Collection<OpenstackSubnet> getSubnets() { |
| 130 | 146 | ||
| 131 | - WebResource.Builder builder = getClientBuilder(neutronUrl + "subnets"); | 147 | + WebResource.Builder builder = getClientBuilder(neutronUrl + URI_SUBNETS); |
| 132 | String response = builder.accept(MediaType.APPLICATION_JSON_TYPE). | 148 | String response = builder.accept(MediaType.APPLICATION_JSON_TYPE). |
| 133 | - header("X-Auth-Token", getToken()).get(String.class); | 149 | + header(HEADER_AUTH_TOKEN, getToken()).get(String.class); |
| 134 | 150 | ||
| 135 | ObjectMapper mapper = new ObjectMapper(); | 151 | ObjectMapper mapper = new ObjectMapper(); |
| 136 | List<OpenstackSubnet> subnets = Lists.newArrayList(); | 152 | List<OpenstackSubnet> subnets = Lists.newArrayList(); |
| 137 | try { | 153 | try { |
| 138 | ObjectNode node = (ObjectNode) mapper.readTree(response); | 154 | ObjectNode node = (ObjectNode) mapper.readTree(response); |
| 139 | - ArrayNode subnetList = (ArrayNode) node.path("subnets"); | 155 | + ArrayNode subnetList = (ArrayNode) node.path(PATH_SUBNETS); |
| 140 | OpenstackSubnetCodec subnetCodec = new OpenstackSubnetCodec(); | 156 | OpenstackSubnetCodec subnetCodec = new OpenstackSubnetCodec(); |
| 141 | subnetList.forEach(s -> subnets.add(subnetCodec.decode((ObjectNode) s, null))); | 157 | subnetList.forEach(s -> subnets.add(subnetCodec.decode((ObjectNode) s, null))); |
| 142 | } catch (IOException e) { | 158 | } catch (IOException e) { |
| ... | @@ -149,6 +165,30 @@ public class OpenstackRestHandler { | ... | @@ -149,6 +165,30 @@ public class OpenstackRestHandler { |
| 149 | return subnets; | 165 | return subnets; |
| 150 | } | 166 | } |
| 151 | 167 | ||
| 168 | + /** | ||
| 169 | + * Extracts OpenstackSecurityGroup information for the ID. | ||
| 170 | + * | ||
| 171 | + * @param id Security Group ID | ||
| 172 | + * @return OpenstackSecurityGroup object or null if fails | ||
| 173 | + */ | ||
| 174 | + public OpenstackSecurityGroup getSecurityGroup(String id) { | ||
| 175 | + WebResource.Builder builder = getClientBuilder(neutronUrl + URI_SECURITY_GROUPS + "/" + id); | ||
| 176 | + String response = builder.accept(MediaType.APPLICATION_JSON_TYPE). | ||
| 177 | + header(HEADER_AUTH_TOKEN, getToken()).get(String.class); | ||
| 178 | + | ||
| 179 | + ObjectMapper mapper = new ObjectMapper(); | ||
| 180 | + OpenstackSecurityGroup securityGroup = null; | ||
| 181 | + try { | ||
| 182 | + ObjectNode node = (ObjectNode) mapper.readTree(response); | ||
| 183 | + OpenstackSecurityGroupCodec sgCodec = new OpenstackSecurityGroupCodec(); | ||
| 184 | + securityGroup = sgCodec.decode(node, null); | ||
| 185 | + } catch (IOException e) { | ||
| 186 | + log.warn("getSecurityGroup()", e); | ||
| 187 | + } | ||
| 188 | + | ||
| 189 | + return securityGroup; | ||
| 190 | + } | ||
| 191 | + | ||
| 152 | private WebResource.Builder getClientBuilder(String uri) { | 192 | private WebResource.Builder getClientBuilder(String uri) { |
| 153 | Client client = Client.create(); | 193 | Client client = Client.create(); |
| 154 | WebResource resource = client.resource(uri); | 194 | WebResource resource = client.resource(uri); |
| ... | @@ -161,13 +201,13 @@ public class OpenstackRestHandler { | ... | @@ -161,13 +201,13 @@ public class OpenstackRestHandler { |
| 161 | String request = "{\"auth\": {\"tenantName\": \"admin\", " + | 201 | String request = "{\"auth\": {\"tenantName\": \"admin\", " + |
| 162 | "\"passwordCredentials\": {\"username\": \"" + | 202 | "\"passwordCredentials\": {\"username\": \"" + |
| 163 | userName + "\",\"password\": \"" + pass + "\"}}}"; | 203 | userName + "\",\"password\": \"" + pass + "\"}}}"; |
| 164 | - WebResource.Builder builder = getClientBuilder(keystoneUrl + "tokens"); | 204 | + WebResource.Builder builder = getClientBuilder(keystoneUrl + URI_TOKENS); |
| 165 | String response = builder.accept(MediaType.APPLICATION_JSON).post(String.class, request); | 205 | String response = builder.accept(MediaType.APPLICATION_JSON).post(String.class, request); |
| 166 | 206 | ||
| 167 | ObjectMapper mapper = new ObjectMapper(); | 207 | ObjectMapper mapper = new ObjectMapper(); |
| 168 | try { | 208 | try { |
| 169 | ObjectNode node = (ObjectNode) mapper.readTree(response); | 209 | ObjectNode node = (ObjectNode) mapper.readTree(response); |
| 170 | - tokenId = node.path("access").path("token").path("id").asText(); | 210 | + tokenId = node.path(PATH_ACCESS).path(PATH_TOKEN).path(PATH_ID).asText(); |
| 171 | } catch (IOException e) { | 211 | } catch (IOException e) { |
| 172 | log.warn("getToken()", e); | 212 | log.warn("getToken()", e); |
| 173 | } | 213 | } | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2016 Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | +package org.onosproject.openstackswitching.impl; | ||
| 17 | + | ||
| 18 | +import java.util.Collection; | ||
| 19 | +import java.util.Collections; | ||
| 20 | +import java.util.Objects; | ||
| 21 | + | ||
| 22 | +/** | ||
| 23 | + * Represents Openstack Security Group information. | ||
| 24 | + */ | ||
| 25 | +public final class OpenstackSecurityGroup { | ||
| 26 | + | ||
| 27 | + private String description; | ||
| 28 | + private String id; | ||
| 29 | + private String name; | ||
| 30 | + private Collection<OpenstackSecurityGroupRule> rules; | ||
| 31 | + private String tenantId; | ||
| 32 | + | ||
| 33 | + private OpenstackSecurityGroup(String description, String id, String name, | ||
| 34 | + Collection<OpenstackSecurityGroupRule> rules, | ||
| 35 | + String tenantId) { | ||
| 36 | + this.description = description; | ||
| 37 | + this.id = id; | ||
| 38 | + this.name = name; | ||
| 39 | + this.tenantId = tenantId; | ||
| 40 | + this.rules = rules; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + /** | ||
| 44 | + * Returns the description of the security group. | ||
| 45 | + * | ||
| 46 | + * @return description | ||
| 47 | + */ | ||
| 48 | + public String description() { | ||
| 49 | + return this.description; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + /** | ||
| 53 | + * Returns ID of the security group. | ||
| 54 | + * | ||
| 55 | + * @return ID | ||
| 56 | + */ | ||
| 57 | + public String id() { | ||
| 58 | + return this.id; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + /** | ||
| 62 | + * Returns the name of the security group. | ||
| 63 | + * | ||
| 64 | + * @return name | ||
| 65 | + */ | ||
| 66 | + public String name() { | ||
| 67 | + return this.name; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + /** | ||
| 71 | + * Returns the list of the security group rules. | ||
| 72 | + * | ||
| 73 | + * @return Collection of OpenstackSecurityGroupRule objects | ||
| 74 | + */ | ||
| 75 | + public Collection<OpenstackSecurityGroupRule> rules() { | ||
| 76 | + return Collections.unmodifiableCollection(rules); | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + /** | ||
| 80 | + * Returns the Tenant ID. | ||
| 81 | + * | ||
| 82 | + * @return tenant ID | ||
| 83 | + */ | ||
| 84 | + public String tenantId() { | ||
| 85 | + return this.tenantId; | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + @Override | ||
| 89 | + public String toString() { | ||
| 90 | + StringBuilder sbuilder = new StringBuilder("Security Group :") | ||
| 91 | + .append(description + ",") | ||
| 92 | + .append(id + ",") | ||
| 93 | + .append(name + ","); | ||
| 94 | + rules.forEach(rule -> sbuilder.append(rule.toString())); | ||
| 95 | + sbuilder.append(tenantId); | ||
| 96 | + | ||
| 97 | + return sbuilder.toString(); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + @Override | ||
| 101 | + public boolean equals(Object o) { | ||
| 102 | + if (this == o) { | ||
| 103 | + return true; | ||
| 104 | + } | ||
| 105 | + if (o instanceof OpenstackSecurityGroup) { | ||
| 106 | + OpenstackSecurityGroup that = (OpenstackSecurityGroup) o; | ||
| 107 | + | ||
| 108 | + return this.description.equals(that.description) && | ||
| 109 | + this.tenantId.equals(that.tenantId) && | ||
| 110 | + this.id.equals(that.id) && | ||
| 111 | + this.name.equals(that.name) && | ||
| 112 | + this.rules.containsAll(that.rules); | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + return true; | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + @Override | ||
| 119 | + public int hashCode() { | ||
| 120 | + return Objects.hash(description, tenantId, id, name, rules); | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + /** | ||
| 124 | + * Returns the SecurityGroupRule builder object. | ||
| 125 | + * | ||
| 126 | + * @return builder object | ||
| 127 | + */ | ||
| 128 | + public static Builder builder() { | ||
| 129 | + return new Builder(); | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + /** | ||
| 133 | + * Represents the builder of the SecurityGroupRule. | ||
| 134 | + * | ||
| 135 | + */ | ||
| 136 | + public static final class Builder { | ||
| 137 | + private String description; | ||
| 138 | + private String id; | ||
| 139 | + private String name; | ||
| 140 | + private Collection<OpenstackSecurityGroupRule> rules; | ||
| 141 | + private String tenantId; | ||
| 142 | + | ||
| 143 | + /** | ||
| 144 | + * Sets the description of the security group. | ||
| 145 | + * | ||
| 146 | + * @param description description | ||
| 147 | + * @return builder object | ||
| 148 | + */ | ||
| 149 | + public Builder description(String description) { | ||
| 150 | + this.description = description; | ||
| 151 | + return this; | ||
| 152 | + } | ||
| 153 | + | ||
| 154 | + /** | ||
| 155 | + * Sets the ID of the security group. | ||
| 156 | + * | ||
| 157 | + * @param id ID | ||
| 158 | + * @return builder object | ||
| 159 | + */ | ||
| 160 | + public Builder id(String id) { | ||
| 161 | + this.id = id; | ||
| 162 | + return this; | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + /** | ||
| 166 | + * Sets the name of the security group. | ||
| 167 | + * | ||
| 168 | + * @param name name | ||
| 169 | + * @return builder object | ||
| 170 | + */ | ||
| 171 | + public Builder name(String name) { | ||
| 172 | + this.name = name; | ||
| 173 | + return this; | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + /** | ||
| 177 | + * Sets Security Group rules. | ||
| 178 | + * | ||
| 179 | + * @param rules security group rules | ||
| 180 | + * @return builder object | ||
| 181 | + */ | ||
| 182 | + public Builder rules(Collection<OpenstackSecurityGroupRule> rules) { | ||
| 183 | + this.rules = rules; | ||
| 184 | + return this; | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + /** | ||
| 188 | + * Sets the tenant ID of the security group. | ||
| 189 | + * | ||
| 190 | + * @param tenantId tenant ID | ||
| 191 | + * @return builder object | ||
| 192 | + */ | ||
| 193 | + public Builder tenantId(String tenantId) { | ||
| 194 | + this.tenantId = tenantId; | ||
| 195 | + return this; | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + /** | ||
| 199 | + * Creates the OpenstackSecurityGroup object. | ||
| 200 | + * | ||
| 201 | + * @return OpenstackSecurityGroup object | ||
| 202 | + */ | ||
| 203 | + public OpenstackSecurityGroup build() { | ||
| 204 | + return new OpenstackSecurityGroup(description, id, name, rules, tenantId); | ||
| 205 | + } | ||
| 206 | + } | ||
| 207 | +} |
| 1 | +/* | ||
| 2 | + * Copyright 2015 Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | +package org.onosproject.openstackswitching.impl; | ||
| 17 | + | ||
| 18 | +/** | ||
| 19 | + * Represents Openstack Security Group Rules. | ||
| 20 | + */ | ||
| 21 | +public final class OpenstackSecurityGroupRule { | ||
| 22 | + | ||
| 23 | + private String direction; | ||
| 24 | + private String ethertype; | ||
| 25 | + private String id; | ||
| 26 | + private String portRangeMax; | ||
| 27 | + private String portRangeMin; | ||
| 28 | + private String protocol; | ||
| 29 | + private String remoteGroupId; | ||
| 30 | + private String remoteIpPrefix; | ||
| 31 | + private String secuityGroupId; | ||
| 32 | + private String tenantId; | ||
| 33 | + | ||
| 34 | + private OpenstackSecurityGroupRule(String direction, | ||
| 35 | + String ethertype, | ||
| 36 | + String id, | ||
| 37 | + String portRangeMax, | ||
| 38 | + String portRangeMin, | ||
| 39 | + String protocol, | ||
| 40 | + String remoteGroupId, | ||
| 41 | + String remoteIpPrefix, | ||
| 42 | + String securityGroupId, | ||
| 43 | + String tenantId) { | ||
| 44 | + this.direction = direction; | ||
| 45 | + this.ethertype = ethertype; | ||
| 46 | + this.id = id; | ||
| 47 | + this.portRangeMax = portRangeMax; | ||
| 48 | + this.portRangeMin = portRangeMin; | ||
| 49 | + this.protocol = protocol; | ||
| 50 | + this.remoteGroupId = remoteGroupId; | ||
| 51 | + this.remoteIpPrefix = remoteIpPrefix; | ||
| 52 | + this.secuityGroupId = securityGroupId; | ||
| 53 | + this.tenantId = tenantId; | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + /** | ||
| 57 | + * Returns the builder object for the OpenstackSecurityGroupRule. | ||
| 58 | + * | ||
| 59 | + * @return OpenstackSecurityGroupRule builder object | ||
| 60 | + */ | ||
| 61 | + public static OpenstackSecurityGroupRule.Builder builder() { | ||
| 62 | + return new Builder(); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @Override | ||
| 66 | + public String toString() { | ||
| 67 | + return new StringBuilder(" [") | ||
| 68 | + .append(direction + ",") | ||
| 69 | + .append(ethertype + ",") | ||
| 70 | + .append(id + ",") | ||
| 71 | + .append(portRangeMax + ",") | ||
| 72 | + .append(portRangeMin + ",") | ||
| 73 | + .append(protocol + ",'") | ||
| 74 | + .append(remoteGroupId + ",") | ||
| 75 | + .append(remoteIpPrefix + ",") | ||
| 76 | + .append(secuityGroupId + ",") | ||
| 77 | + .append(tenantId + "] ") | ||
| 78 | + .toString(); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + /** | ||
| 82 | + * Represents a security group rule builder object. | ||
| 83 | + */ | ||
| 84 | + public static final class Builder { | ||
| 85 | + | ||
| 86 | + private String direction; | ||
| 87 | + private String etherType; | ||
| 88 | + private String id; | ||
| 89 | + private String portRangeMax; | ||
| 90 | + private String portRangeMin; | ||
| 91 | + private String protocol; | ||
| 92 | + private String remoteGroupId; | ||
| 93 | + private String remoteIpPrefix; | ||
| 94 | + private String secuityGroupId; | ||
| 95 | + private String tenantId; | ||
| 96 | + | ||
| 97 | + | ||
| 98 | + /** | ||
| 99 | + * Sets the direction of the security group rule. | ||
| 100 | + * | ||
| 101 | + * @param direction direction (ingress or egress) | ||
| 102 | + * @return builder object | ||
| 103 | + */ | ||
| 104 | + public Builder direction(String direction) { | ||
| 105 | + this.direction = direction; | ||
| 106 | + return this; | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + /** | ||
| 110 | + * Sets the Ethernet Type. | ||
| 111 | + * | ||
| 112 | + * @param etherType Ethernet Type | ||
| 113 | + * @return builder object | ||
| 114 | + */ | ||
| 115 | + public Builder etherType(String etherType) { | ||
| 116 | + this.etherType = etherType; | ||
| 117 | + return this; | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + /** | ||
| 121 | + * Sets the Security Group Rule ID. | ||
| 122 | + * | ||
| 123 | + * @param id security group rule ID | ||
| 124 | + * @return builder object | ||
| 125 | + */ | ||
| 126 | + public Builder id(String id) { | ||
| 127 | + this.id = id; | ||
| 128 | + return this; | ||
| 129 | + } | ||
| 130 | + | ||
| 131 | + /** | ||
| 132 | + * Sets the port range max value. | ||
| 133 | + * | ||
| 134 | + * @param portRangeMax port range max value | ||
| 135 | + * @return builder object | ||
| 136 | + */ | ||
| 137 | + public Builder portRangeMax(String portRangeMax) { | ||
| 138 | + this.portRangeMax = portRangeMax; | ||
| 139 | + return this; | ||
| 140 | + } | ||
| 141 | + | ||
| 142 | + /** | ||
| 143 | + * Sets the port range min value. | ||
| 144 | + * | ||
| 145 | + * @param portRangeMin port range min value | ||
| 146 | + * @return builder object | ||
| 147 | + */ | ||
| 148 | + public Builder portRangeMin(String portRangeMin) { | ||
| 149 | + this.portRangeMin = portRangeMin; | ||
| 150 | + return this; | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + /** | ||
| 154 | + * Sets the protocol. | ||
| 155 | + * | ||
| 156 | + * @param protocol protocol | ||
| 157 | + * @return builder object | ||
| 158 | + */ | ||
| 159 | + public Builder protocol(String protocol) { | ||
| 160 | + this.protocol = protocol; | ||
| 161 | + return this; | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + /** | ||
| 165 | + * Sets the remote security group ID. | ||
| 166 | + * | ||
| 167 | + * @param remoteGroupId remote security group ID | ||
| 168 | + * @return builder | ||
| 169 | + */ | ||
| 170 | + public Builder remoteGroupId(String remoteGroupId) { | ||
| 171 | + this.remoteGroupId = remoteGroupId; | ||
| 172 | + return this; | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + /** | ||
| 176 | + * Sets the remote IP address as prefix. | ||
| 177 | + * | ||
| 178 | + * @param remoteIpPrefix remote IP address | ||
| 179 | + * @return builder object | ||
| 180 | + */ | ||
| 181 | + public Builder remoteIpPrefix(String remoteIpPrefix) { | ||
| 182 | + this.remoteIpPrefix = remoteIpPrefix; | ||
| 183 | + return this; | ||
| 184 | + } | ||
| 185 | + | ||
| 186 | + /** | ||
| 187 | + * Sets the Security Group ID. | ||
| 188 | + * | ||
| 189 | + * @param securityGroupId security group ID | ||
| 190 | + * @return builder object | ||
| 191 | + */ | ||
| 192 | + public Builder securityGroupId(String securityGroupId) { | ||
| 193 | + this.secuityGroupId = securityGroupId; | ||
| 194 | + return this; | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + /** | ||
| 198 | + * Sets the tenant ID. | ||
| 199 | + * | ||
| 200 | + * @param tenantId tenant ID | ||
| 201 | + * @return builder object | ||
| 202 | + */ | ||
| 203 | + public Builder tenantId(String tenantId) { | ||
| 204 | + this.tenantId = tenantId; | ||
| 205 | + return this; | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + /** | ||
| 209 | + * Creates a OpenstackSecurityGroupRule instance. | ||
| 210 | + * | ||
| 211 | + * @return OpenstackSecurityGroupRule object | ||
| 212 | + */ | ||
| 213 | + public OpenstackSecurityGroupRule build() { | ||
| 214 | + return new OpenstackSecurityGroupRule(direction, etherType, id, portRangeMax, | ||
| 215 | + portRangeMin, protocol, remoteGroupId, remoteIpPrefix, secuityGroupId, tenantId); | ||
| 216 | + } | ||
| 217 | + } | ||
| 218 | +} |
| ... | @@ -176,6 +176,13 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { | ... | @@ -176,6 +176,13 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { |
| 176 | && !openstackPort.deviceOwner().equals(DEVICE_OWNER_GATEWAY)) { | 176 | && !openstackPort.deviceOwner().equals(DEVICE_OWNER_GATEWAY)) { |
| 177 | registerDhcpInfo(openstackPort); | 177 | registerDhcpInfo(openstackPort); |
| 178 | } | 178 | } |
| 179 | + | ||
| 180 | + if (!openstackPort.securityGroups().isEmpty()) { | ||
| 181 | + openstackPort.securityGroups().forEach(sgId -> { | ||
| 182 | + OpenstackSecurityGroup sg = restHandler.getSecurityGroup(sgId); | ||
| 183 | + log.debug("SecurityGroup : {}", sg.toString()); | ||
| 184 | + }); | ||
| 185 | + } | ||
| 179 | } | 186 | } |
| 180 | 187 | ||
| 181 | @Override | 188 | @Override | ... | ... |
| ... | @@ -18,6 +18,7 @@ package org.onosproject.openstackswitching.web; | ... | @@ -18,6 +18,7 @@ package org.onosproject.openstackswitching.web; |
| 18 | import com.fasterxml.jackson.databind.JsonNode; | 18 | import com.fasterxml.jackson.databind.JsonNode; |
| 19 | import com.fasterxml.jackson.databind.node.ArrayNode; | 19 | import com.fasterxml.jackson.databind.node.ArrayNode; |
| 20 | import com.fasterxml.jackson.databind.node.ObjectNode; | 20 | import com.fasterxml.jackson.databind.node.ObjectNode; |
| 21 | +import com.google.common.collect.Lists; | ||
| 21 | import org.onlab.packet.Ip4Address; | 22 | import org.onlab.packet.Ip4Address; |
| 22 | import org.onlab.packet.MacAddress; | 23 | import org.onlab.packet.MacAddress; |
| 23 | import org.onosproject.codec.CodecContext; | 24 | import org.onosproject.codec.CodecContext; |
| ... | @@ -26,6 +27,7 @@ import org.onosproject.openstackswitching.OpenstackPort; | ... | @@ -26,6 +27,7 @@ import org.onosproject.openstackswitching.OpenstackPort; |
| 26 | import org.slf4j.Logger; | 27 | import org.slf4j.Logger; |
| 27 | import org.slf4j.LoggerFactory; | 28 | import org.slf4j.LoggerFactory; |
| 28 | 29 | ||
| 30 | +import java.util.Collection; | ||
| 29 | import java.util.HashMap; | 31 | import java.util.HashMap; |
| 30 | 32 | ||
| 31 | /** | 33 | /** |
| ... | @@ -79,7 +81,9 @@ public class OpenstackPortCodec extends JsonCodec<OpenstackPort> { | ... | @@ -79,7 +81,9 @@ public class OpenstackPortCodec extends JsonCodec<OpenstackPort> { |
| 79 | } | 81 | } |
| 80 | } | 82 | } |
| 81 | String id = portInfo.path(ID).asText(); | 83 | String id = portInfo.path(ID).asText(); |
| 82 | - String securityGroups = portInfo.path(SECURITY_GROUPS).asText(); | 84 | + ArrayNode securityGroupList = (ArrayNode) portInfo.path(SECURITY_GROUPS); |
| 85 | + Collection<String> securityGroupIdList = Lists.newArrayList(); | ||
| 86 | + securityGroupList.forEach(securityGroup -> securityGroupIdList.add(securityGroup.asText())); | ||
| 83 | String deviceId = portInfo.path(DEVICE_ID).asText(); | 87 | String deviceId = portInfo.path(DEVICE_ID).asText(); |
| 84 | 88 | ||
| 85 | OpenstackPort.Builder openstackPortBuilder = OpenstackPort.builder(); | 89 | OpenstackPort.Builder openstackPortBuilder = OpenstackPort.builder(); |
| ... | @@ -96,12 +100,9 @@ public class OpenstackPortCodec extends JsonCodec<OpenstackPort> { | ... | @@ -96,12 +100,9 @@ public class OpenstackPortCodec extends JsonCodec<OpenstackPort> { |
| 96 | .macAddress(MacAddress.valueOf(macStr)) | 100 | .macAddress(MacAddress.valueOf(macStr)) |
| 97 | .fixedIps(fixedIpMap) | 101 | .fixedIps(fixedIpMap) |
| 98 | .id(id) | 102 | .id(id) |
| 99 | - .deviceId(deviceId); | 103 | + .deviceId(deviceId) |
| 104 | + .securityGroup(securityGroupIdList); | ||
| 100 | 105 | ||
| 101 | - // FIX ME | ||
| 102 | - if (!securityGroups.isEmpty()) { | ||
| 103 | - openstackPortBuilder.securityGroup(securityGroups); | ||
| 104 | - } | ||
| 105 | 106 | ||
| 106 | OpenstackPort openstackPort = openstackPortBuilder.build(); | 107 | OpenstackPort openstackPort = openstackPortBuilder.build(); |
| 107 | 108 | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2016 Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | +package org.onosproject.openstackswitching.web; | ||
| 17 | + | ||
| 18 | +import com.fasterxml.jackson.databind.JsonNode; | ||
| 19 | +import com.fasterxml.jackson.databind.node.ArrayNode; | ||
| 20 | +import com.fasterxml.jackson.databind.node.ObjectNode; | ||
| 21 | +import com.google.common.collect.Lists; | ||
| 22 | +import org.onosproject.codec.CodecContext; | ||
| 23 | +import org.onosproject.codec.JsonCodec; | ||
| 24 | +import org.onosproject.openstackswitching.impl.OpenstackSecurityGroup; | ||
| 25 | +import org.onosproject.openstackswitching.impl.OpenstackSecurityGroupRule; | ||
| 26 | +import org.slf4j.Logger; | ||
| 27 | +import org.slf4j.LoggerFactory; | ||
| 28 | + | ||
| 29 | +import java.util.Collection; | ||
| 30 | + | ||
| 31 | +/** | ||
| 32 | + * Encodes and decodes the Openstack Security Group. | ||
| 33 | + */ | ||
| 34 | +public class OpenstackSecurityGroupCodec extends JsonCodec<OpenstackSecurityGroup> { | ||
| 35 | + | ||
| 36 | + private static Logger log = LoggerFactory | ||
| 37 | + .getLogger(OpenstackSecurityGroupCodec.class); | ||
| 38 | + | ||
| 39 | + private static final String SECURITY_GROUP = "security_group"; | ||
| 40 | + private static final String DESCRIPTION = "description"; | ||
| 41 | + private static final String ID = "id"; | ||
| 42 | + private static final String NAME = "name"; | ||
| 43 | + private static final String SECURITY_GROUP_RULES = "security_group_rules"; | ||
| 44 | + private static final String DIRECTION = "direction"; | ||
| 45 | + private static final String EHTERTYPE = "ethertype"; | ||
| 46 | + private static final String PORT_RANGE_MAX = "port_range_max"; | ||
| 47 | + private static final String PORT_RANGE_MIN = "port_range_min"; | ||
| 48 | + private static final String PROTOCOL = "protocol"; | ||
| 49 | + private static final String REMOTE_GROUP_ID = "remote_group_id"; | ||
| 50 | + private static final String REMOTE_IP_PREFIX = "remote_ip_prefix"; | ||
| 51 | + private static final String SECURITY_GROUP_ID = "security_group_id"; | ||
| 52 | + private static final String TENAN_ID = "tenant_id"; | ||
| 53 | + | ||
| 54 | + @Override | ||
| 55 | + public OpenstackSecurityGroup decode(ObjectNode json, CodecContext context) { | ||
| 56 | + JsonNode securityGroupNode = json.get(SECURITY_GROUP); | ||
| 57 | + if (securityGroupNode == null) { | ||
| 58 | + log.warn("SecurityGroup Json data is null"); | ||
| 59 | + return null; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + String description = securityGroupNode.path(DESCRIPTION).asText(); | ||
| 63 | + String id = securityGroupNode.path(ID).asText(); | ||
| 64 | + String name = securityGroupNode.path(NAME).asText(); | ||
| 65 | + ArrayNode ruleInfoList = (ArrayNode) securityGroupNode.path(SECURITY_GROUP_RULES); | ||
| 66 | + Collection<OpenstackSecurityGroupRule> rules = Lists.newArrayList(); | ||
| 67 | + for (JsonNode ruleInfo: ruleInfoList) { | ||
| 68 | + OpenstackSecurityGroupRule openstackSecurityGroupRule = | ||
| 69 | + OpenstackSecurityGroupRule.builder() | ||
| 70 | + .direction(ruleInfo.path(DIRECTION).asText()) | ||
| 71 | + .etherType(ruleInfo.path(EHTERTYPE).asText()) | ||
| 72 | + .id(ruleInfo.path(ID).asText()) | ||
| 73 | + .portRangeMax(ruleInfo.path(PORT_RANGE_MAX).asText()) | ||
| 74 | + .portRangeMin(ruleInfo.path(PORT_RANGE_MIN).asText()) | ||
| 75 | + .protocol(ruleInfo.path(PROTOCOL).asText()) | ||
| 76 | + .remoteGroupId(ruleInfo.path(REMOTE_GROUP_ID).asText()) | ||
| 77 | + .remoteIpPrefix(ruleInfo.path(REMOTE_IP_PREFIX).asText()) | ||
| 78 | + .securityGroupId(ruleInfo.path(SECURITY_GROUP_ID).asText()) | ||
| 79 | + .tenantId(ruleInfo.path(TENAN_ID).asText()) | ||
| 80 | + .build(); | ||
| 81 | + | ||
| 82 | + rules.add(openstackSecurityGroupRule); | ||
| 83 | + } | ||
| 84 | + String tenantId = securityGroupNode.path(TENAN_ID).asText(); | ||
| 85 | + | ||
| 86 | + OpenstackSecurityGroup openstackSecurityGroup = OpenstackSecurityGroup.builder() | ||
| 87 | + .description(description) | ||
| 88 | + .id(id) | ||
| 89 | + .name(name) | ||
| 90 | + .rules(rules) | ||
| 91 | + .tenantId(tenantId) | ||
| 92 | + .build(); | ||
| 93 | + | ||
| 94 | + return openstackSecurityGroup; | ||
| 95 | + } | ||
| 96 | +} |
-
Please register or login to post a comment