diff options
Diffstat (limited to 'adapters/mso-openstack-adapters')
7 files changed, 90 insertions, 7 deletions
diff --git a/adapters/mso-openstack-adapters/pom.xml b/adapters/mso-openstack-adapters/pom.xml index 7ffcd8308c..f0c066aa05 100644 --- a/adapters/mso-openstack-adapters/pom.xml +++ b/adapters/mso-openstack-adapters/pom.xml @@ -153,6 +153,9 @@ <executions> <execution> <id>original</id> + <configuration> + <skip>false</skip> + </configuration> </execution> </executions> </plugin> @@ -243,12 +246,12 @@ <dependency> <groupId>org.pacesys</groupId> <artifactId>openstack4j-core</artifactId> - <version>3.1.0</version> + <version>3.2.0</version> </dependency> <dependency> <groupId>org.pacesys.openstack4j.connectors</groupId> <artifactId>openstack4j-httpclient</artifactId> - <version>3.1.0</version> + <version>3.2.0</version> </dependency> <dependency> 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 9adcdcb47a..0d1d690024 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 diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VnfAdapterRestTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VnfAdapterRestTest.java index 89adafd280..5a8524fd73 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VnfAdapterRestTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VnfAdapterRestTest.java @@ -98,7 +98,6 @@ public class VnfAdapterRestTest extends BaseRestTestUtils { private static final String EXN_HSL_NET_FQDN = "hsl"; private static final String AVAILABILITY_ZONE_0 = "nova"; private static final String VF_MODULE_INDEX = "0"; - private static final String REQUEST_TYPE = ""; @Test public void testCreateVfModule() throws JSONException, JsonParseException, JsonMappingException, IOException { @@ -188,7 +187,6 @@ public class VnfAdapterRestTest extends BaseRestTestUtils { msoReq.setRequestId(MSO_REQUEST_ID); msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); request.setMsoRequest(msoReq); - request.setRequestType(REQUEST_TYPE); request.setCloudSiteId(CLOUDSITE_ID); request.setTenantId(TENANT_ID); request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID); @@ -254,7 +252,6 @@ public class VnfAdapterRestTest extends BaseRestTestUtils { msoReq.setRequestId(MSO_REQUEST_ID); msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); request.setMsoRequest(msoReq); - request.setRequestType(REQUEST_TYPE); request.setCloudSiteId(CLOUDSITE_ID); request.setTenantId(TENANT_ID); request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID); @@ -394,7 +391,6 @@ public class VnfAdapterRestTest extends BaseRestTestUtils { request.setFailIfExists(failIfExists); request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID); request.setMsoRequest(msoRequest); - request.setRequestType(REQUEST_TYPE); request.setTenantId(TENANT_ID); request.setVfModuleId(VF_MODULE_ID); request.setVfModuleName(VF_MODULE_NAME); @@ -526,7 +522,6 @@ public class VnfAdapterRestTest extends BaseRestTestUtils { msoReq.setRequestId(MSO_REQUEST_ID); msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); request.setMsoRequest(msoReq); - request.setRequestType(REQUEST_TYPE); request.setCloudSiteId(CLOUDSITE_ID); request.setTenantId(TENANT_ID); request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID); |