Mike Kolesnik has uploaded a new change for review. Change subject: engine: Add Quantum provider support for vNICs ......................................................................
engine: Add Quantum provider support for vNICs Added support for QuantumProviderClient for allocating and deallocating vNICs. Change-Id: I465dee81c3348a3f49ff41a8983a8ba2c8d43fad Signed-off-by: Mike Kolesnik <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumPort.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumPortsList.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumProviderClient.java 3 files changed, 156 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/10/11110/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumPort.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumPort.java new file mode 100644 index 0000000..b4f1a54 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumPort.java @@ -0,0 +1,85 @@ +package org.ovirt.engine.core.bll.provider.quantum; + +import java.util.UUID; + +import org.codehaus.jackson.annotate.JsonProperty; +import org.codehaus.jackson.map.annotate.JsonRootName; + +@JsonRootName("port") +public class QuantumPort { + + private UUID id; + + private String name; + + @JsonProperty("network_id") + private UUID networkId; + + @JsonProperty("tenant_id") + private UUID tenantId; + + @JsonProperty("mac_address") + private String macAddress; + + @JsonProperty("device_owner") + private String deviceOwner; + + @JsonProperty("device_id") + private UUID deviceId; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public UUID getNetworkId() { + return networkId; + } + + public void setNetworkId(UUID networkId) { + this.networkId = networkId; + } + + public UUID getTenantId() { + return tenantId; + } + + public void setTenantId(UUID tenantId) { + this.tenantId = tenantId; + } + + public String getMacAddress() { + return macAddress; + } + + public void setMacAddress(String macAddress) { + this.macAddress = macAddress; + } + + public String getDeviceOwner() { + return deviceOwner; + } + + public void setDeviceOwner(String deviceOwner) { + this.deviceOwner = deviceOwner; + } + + public UUID getDeviceId() { + return deviceId; + } + + public void setDeviceId(UUID deviceId) { + this.deviceId = deviceId; + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumPortsList.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumPortsList.java new file mode 100644 index 0000000..34bc7f5 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumPortsList.java @@ -0,0 +1,14 @@ +package org.ovirt.engine.core.bll.provider.quantum; + +public class QuantumPortsList { + + private QuantumPort[] ports; + + public QuantumPort[] getPorts() { + return ports; + } + + public void setPorts(QuantumPort[] ports) { + this.ports = ports; + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumProviderClient.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumProviderClient.java index 1049bcf..1363b50 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumProviderClient.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumProviderClient.java @@ -7,9 +7,14 @@ import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; +import org.apache.commons.httpclient.methods.DeleteMethod; import org.apache.commons.httpclient.methods.GetMethod; -import org.codehaus.jackson.map.DeserializationConfig.Feature; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.StringRequestEntity; +import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.SerializationConfig; +import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; import org.ovirt.engine.core.bll.provider.ProviderClient; import org.ovirt.engine.core.common.businessentities.Provider; import org.ovirt.engine.core.common.businessentities.network.Network; @@ -20,6 +25,8 @@ public class QuantumProviderClient implements ProviderClient { + private static final String DEVICE_OWNER = "oVirt"; + private Provider providerDetails; private HttpClient httpClient = new HttpClient(); @@ -28,7 +35,9 @@ public QuantumProviderClient(Provider providerDetails) { this.providerDetails = providerDetails; - objectMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true); + objectMapper.setSerializationInclusion(Inclusion.NON_NULL); } @Override @@ -36,6 +45,7 @@ HttpMethod method = new GetMethod(providerDetails.getApiAddress() + "/networks"); try { httpClient.executeMethod(method); + objectMapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, false); QuantumNetwork[] networks = objectMapper.readValue(method.getResponseBody(), QuantumNetworksList.class).getNetworks(); return map(Arrays.asList(networks)); @@ -61,13 +71,55 @@ @Override public String allocate(Network network, VmNetworkInterface nic) { - // TODO Auto-generated method stub - return null; + deallocate(nic); + try { + QuantumNetwork quantumNetwork = getQuantumNetwork(network); + QuantumPort port = new QuantumPort(); + port.setName(nic.getName()); + port.setMacAddress(nic.getMacAddress()); + port.setNetworkId(quantumNetwork.getId()); + port.setTenantId(quantumNetwork.getTenantId()); + port.setDeviceOwner(DEVICE_OWNER); + port.setDeviceId(nic.getId().getUuid()); + + PostMethod method = new PostMethod(providerDetails.getApiAddress() + "/ports"); + method.setRequestEntity( + new StringRequestEntity(objectMapper.writeValueAsString(port), "application/json", null)); + httpClient.executeMethod(method); + objectMapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true); + return objectMapper.readValue(method.getResponseBody(), QuantumPort.class).getId().toString(); + } catch (IOException e) { + throw new VdcBLLException(VdcBllErrors.ENGINE, new RuntimeException(e)); + } + } + + private QuantumNetwork getQuantumNetwork(Network network) throws IOException { + HttpMethod method = new GetMethod(providerDetails.getApiAddress() + "/networks/" + network.getId()); + httpClient.executeMethod(method); + objectMapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true); + return objectMapper.readValue(method.getResponseBody(), QuantumNetwork.class); } @Override public void deallocate(VmNetworkInterface nic) { - // TODO Auto-generated method stub + try { + QuantumPort[] ports = getQuantumPorts(); + for (QuantumPort port : ports) { + if (DEVICE_OWNER.equals(port.getDeviceOwner()) && nic.getId().getUuid().equals(port.getDeviceId())) { + HttpMethod method = new DeleteMethod(providerDetails.getApiAddress() + "/ports/" + port.getId()); + httpClient.executeMethod(method); + } + } + } catch (IOException e) { + throw new VdcBLLException(VdcBllErrors.ENGINE, new RuntimeException(e)); + } + } + private QuantumPort[] getQuantumPorts() throws IOException { + HttpMethod method = new GetMethod(providerDetails.getApiAddress() + "/ports"); + httpClient.executeMethod(method); + objectMapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, false); + QuantumPort[] ports = objectMapper.readValue(method.getResponseBody(), QuantumPortsList.class).getPorts(); + return ports; } } -- To view, visit http://gerrit.ovirt.org/11110 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I465dee81c3348a3f49ff41a8983a8ba2c8d43fad Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Mike Kolesnik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
