summaryrefslogtreecommitdiffstats
path: root/adapters/mso-openstack-adapters/src/main/java
diff options
context:
space:
mode:
authorMunir Ahmad <munir.ahmad@bell.ca>2019-10-29 09:45:21 -0400
committerMunir Ahmad <munir.ahmad@bell.ca>2019-11-07 14:40:15 -0500
commitd98077b7cda0ef1562b81d6433f6d93fc4e722ab (patch)
tree6b52db16d5681f1c7d05764004b204b7a85ea1b2 /adapters/mso-openstack-adapters/src/main/java
parentb05c4757befd918465e6d3662db6374f8e40f23c (diff)
Create PServer/PInterface Objects in AAI based on openstack's stack resources
Issue-ID: SO-2271 Signed-off-by: Munir Ahmad <munir.ahmad@bell.ca> Change-Id: I9ff6a9d820a8f759358cbaa4abf6475c6af4c130
Diffstat (limited to 'adapters/mso-openstack-adapters/src/main/java')
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java2
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeApi.java7
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java41
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/constants/HeatBridgeConstants.java1
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/helpers/AaiHelper.java34
5 files changed, 85 insertions, 0 deletions
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java
index 2769f1c9b8..73eefcf1c9 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java
@@ -431,6 +431,8 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
List<Server> osServers = heatBridgeClient.getAllOpenstackServers(stackResources);
+ heatBridgeClient.createPserversAndPinterfacesIfNotPresentInAai(stackResources);
+
List<Image> osImages = heatBridgeClient.extractOpenstackImagesFromServers(osServers);
List<Flavor> osFlavors = heatBridgeClient.extractOpenstackFlavorsFromServers(osServers);
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeApi.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeApi.java
index aebd04f32c..d568bc2807 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeApi.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeApi.java
@@ -138,6 +138,13 @@ public interface HeatBridgeApi {
void buildAddVserverLInterfacesToAaiAction(List<Resource> stackResources, List<String> oobMgtNetIds);
/**
+ * Query and build AAI actions for Openstack Compute resources to AAI's pserver and pinterface objects
+ *
+ * @param stackResources Openstack StackResources list
+ */
+ void createPserversAndPinterfacesIfNotPresentInAai(final List<Resource> stackResources) throws HeatBridgeException;
+
+ /**
* Execute AAI restful API to update the Openstack resources
*
* @throws HeatBridgeException when failing to add openstack resource PoJos to AAI
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java
index ae15b70b00..a1b33056da 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java
@@ -32,6 +32,7 @@
*/
package org.onap.so.heatbridge;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -49,6 +50,7 @@ import org.onap.aai.domain.yang.Image;
import org.onap.aai.domain.yang.L3InterfaceIpv4AddressList;
import org.onap.aai.domain.yang.LInterface;
import org.onap.aai.domain.yang.PInterface;
+import org.onap.aai.domain.yang.Pserver;
import org.onap.aai.domain.yang.SriovPf;
import org.onap.aai.domain.yang.SriovPfs;
import org.onap.aai.domain.yang.SriovVf;
@@ -63,6 +65,7 @@ import org.onap.so.client.aai.entities.uri.AAIResourceUri;
import org.onap.so.client.aai.entities.uri.AAIUriFactory;
import org.onap.so.client.graphinventory.entities.uri.Depth;
import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed;
+import org.onap.so.client.PreconditionFailedException;
import org.onap.so.db.catalog.beans.CloudIdentity;
import org.onap.so.heatbridge.constants.HeatBridgeConstants;
import org.onap.so.heatbridge.factory.MsoCloudClientFactoryImpl;
@@ -263,6 +266,44 @@ public class HeatBridgeImpl implements HeatBridgeApi {
}
}
+ @Override
+ public void createPserversAndPinterfacesIfNotPresentInAai(final List<Resource> stackResources)
+ throws HeatBridgeException {
+ Map<String, Pserver> serverHostnames = getPserverMapping(stackResources);
+ createPServerIfNotExists(serverHostnames);
+ List<String> portIds =
+ extractStackResourceIdsByResourceType(stackResources, HeatBridgeConstants.OS_PORT_RESOURCE_TYPE);
+ for (String portId : portIds) {
+ Port port = osClient.getPortById(portId);
+ if (port.getvNicType().equalsIgnoreCase(HeatBridgeConstants.OS_SRIOV_PORT_TYPE)) {
+ createPServerPInterfaceIfNotExists(serverHostnames.get(port.getHostId()).getHostname(),
+ aaiHelper.buildPInterface(port));
+ }
+ }
+ }
+
+ private Map<String, Pserver> getPserverMapping(final List<Resource> stackResources) {
+ List<Server> osServers = getAllOpenstackServers(stackResources);
+ Map<String, Pserver> pserverMap = new HashMap<>();
+ for (Server server : osServers) {
+ pserverMap.put(server.getHost(), aaiHelper.buildPserver(server));
+ }
+ return pserverMap;
+ }
+
+ private void createPServerIfNotExists(Map<String, Pserver> serverHostnames) {
+ for (Pserver pserver : serverHostnames.values()) {
+ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.PSERVER, pserver.getHostname());
+ resourcesClient.createIfNotExists(uri, Optional.of(pserver));
+ }
+ }
+
+ private void createPServerPInterfaceIfNotExists(String pserverHostname, PInterface pInterface) {
+ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.P_INTERFACE, pserverHostname,
+ pInterface.getInterfaceName());
+ resourcesClient.createIfNotExists(uri, Optional.of(pInterface));
+ }
+
private void updateLInterfaceVlan(final Port port, final LInterface lIf) {
Vlan vlan = new Vlan();
Network network = osClient.getNetworkById(port.getNetworkId());
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/constants/HeatBridgeConstants.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/constants/HeatBridgeConstants.java
index f2d61d2587..0e87e1fb31 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/constants/HeatBridgeConstants.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/constants/HeatBridgeConstants.java
@@ -43,6 +43,7 @@ public class HeatBridgeConstants {
public static final String OS_SRIOV_PORT_TYPE = "direct";
public static final String OS_PCI_SLOT_KEY = "pci_slot";
public static final String OS_PHYSICAL_NETWORK_KEY = "physical_network";
+ public static final String OS_PHYSICAL_INTERFACE_KEY = "physical-interface";
public static final String OS_VLAN_NETWORK_KEY = "vlan";
public static final String OS_UNKNOWN_KEY = "unknown";
public static final String OS_RESOURCES_SELF_LINK_KEY = "self";
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/helpers/AaiHelper.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/helpers/AaiHelper.java
index d8a876016f..c578b29664 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/helpers/AaiHelper.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/helpers/AaiHelper.java
@@ -43,6 +43,8 @@ import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.onap.aai.domain.yang.Flavor;
import org.onap.aai.domain.yang.Image;
+import org.onap.aai.domain.yang.PInterface;
+import org.onap.aai.domain.yang.Pserver;
import org.onap.aai.domain.yang.Relationship;
import org.onap.aai.domain.yang.RelationshipData;
import org.onap.aai.domain.yang.RelationshipList;
@@ -50,6 +52,7 @@ import org.onap.aai.domain.yang.SriovVf;
import org.onap.aai.domain.yang.Vserver;
import org.onap.so.heatbridge.constants.HeatBridgeConstants;
import org.openstack4j.model.compute.Server;
+import org.openstack4j.model.network.Port;
/**
* This class provides wrapper methods to manage creation of AAI objects and extracting objects from AAI and
@@ -137,6 +140,37 @@ public class AaiHelper {
}
/**
+ * Transform Openstack Server object to AAI Pserver object
+ *
+ * @param server Openstack server object
+ * @return AAI Pserver object
+ */
+ public Pserver buildPserver(final Server server) {
+ Pserver pserver = new Pserver();
+ pserver.setInMaint(false);
+ pserver.setPserverId(server.getId());
+ pserver.setHostname(server.getHypervisorHostname());
+ pserver.setPserverName2(server.getHost());
+ pserver.setProvStatus(server.getStatus().value());
+ return pserver;
+ }
+
+ /**
+ * Transform Openstack Server object to AAI PInterface object
+ *
+ * @param port Openstack port object
+ * @return AAI PInterface object
+ */
+ public PInterface buildPInterface(Port port) {
+ Map<String, Object> portProfile = port.getProfile();
+ PInterface pInterface = new PInterface();
+ pInterface.setInterfaceName(portProfile.get(HeatBridgeConstants.OS_PHYSICAL_NETWORK_KEY).toString());
+ pInterface.setInMaint(false);
+ pInterface.setInterfaceRole(HeatBridgeConstants.OS_PHYSICAL_INTERFACE_KEY);
+ return pInterface;
+ }
+
+ /**
* Transform Openstack Image object to AAI Image object
*
* @param image Openstack Image object