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

Reply via email to