diff options
Diffstat (limited to 'adapters/mso-openstack-adapters')
190 files changed, 22918 insertions, 18434 deletions
diff --git a/adapters/mso-openstack-adapters/pom.xml b/adapters/mso-openstack-adapters/pom.xml index cb35e90860..9c3ef2578f 100644 --- a/adapters/mso-openstack-adapters/pom.xml +++ b/adapters/mso-openstack-adapters/pom.xml @@ -10,11 +10,13 @@ <packaging>jar</packaging> <name>mso-openstack-adapters</name> <description>Consolidate openstack adapters into one Spring Boot project</description> - + <properties> + <openfeign.version>10.1.0</openfeign.version> + </properties> <build> <finalName>${project.artifactId}-${project.version}</finalName> - - <plugins> + + <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> @@ -35,6 +37,24 @@ </execution> </executions> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <executions> + <execution> + <id>default-test</id> + <goals> + <goal>test</goal> + </goals> + <configuration> + <includes> + <include>**/AllTestsTestSuite.java</include> + </includes> + <parallel>suites</parallel> + </configuration> + </execution> + </executions> + </plugin> <!-- run the following plugin only when there's a wsdl change and you need to recompile the java classes <plugin> @@ -211,12 +231,44 @@ <artifactId>janino</artifactId> <version>2.5.15</version> </dependency> - - <!-- end added for spring boot support --> - - - - <!-- added for unit testing --> + + <!-- end added for spring boot support --> + + <dependency> + <groupId>org.pacesys</groupId> + <artifactId>openstack4j-core</artifactId> + <version>3.1.0</version> + </dependency> + <dependency> + <groupId>org.pacesys.openstack4j.connectors</groupId> + <artifactId>openstack4j-httpclient</artifactId> + <version>3.1.0</version> + </dependency> + + <dependency> + <groupId>commons-collections</groupId> + <artifactId>commons-collections</artifactId> + <version>3.2.1</version> + </dependency> + + <dependency> + <groupId>com.typesafe</groupId> + <artifactId>config</artifactId> + <version>1.3.2</version> + </dependency> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>jsr305</artifactId> + <version>1.3.9</version> + </dependency> + + <dependency> + <groupId>commons-validator</groupId> + <artifactId>commons-validator</artifactId> + <version>1.4.0</version> + </dependency> + + <!-- added for unit testing --> <dependency> <groupId>org.onap.so.adapters</groupId> <artifactId>mso-adapter-utils</artifactId> diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AAIObjectAudit.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AAIObjectAudit.java new file mode 100644 index 0000000000..149de0b698 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AAIObjectAudit.java @@ -0,0 +1,56 @@ +package org.onap.so.adapters.audit; + +import java.io.Serializable; +import java.net.URI; +import org.onap.so.client.aai.AAIObjectType; +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class AAIObjectAudit implements Serializable { + + /** + * + */ + private static final long serialVersionUID = -4560928512855386021L; + private boolean doesObjectExist = false; + private Object aaiObject; + private URI resourceURI; + private String aaiObjectType; + + @Override + public String toString() { + return new ToStringBuilder(this).append("doesObjectExist", doesObjectExist).append("aaiObject", aaiObject) + .append("resourceURI", resourceURI).append("aaiObjectType", aaiObjectType).toString(); + } + + public String getAaiObjectType() { + return aaiObjectType; + } + + public void setAaiObjectType(String aaiObjectType) { + this.aaiObjectType = aaiObjectType; + } + + public boolean isDoesObjectExist() { + return doesObjectExist; + } + + public void setDoesObjectExist(boolean doesObjectExist) { + this.doesObjectExist = doesObjectExist; + } + + public Object getAaiObject() { + return aaiObject; + } + + public void setAaiObject(Object aaiObject) { + this.aaiObject = aaiObject; + } + + public URI getResourceURI() { + return resourceURI; + } + + public void setResourceURI(URI resourceURI) { + this.resourceURI = resourceURI; + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AAIObjectAuditList.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AAIObjectAuditList.java new file mode 100644 index 0000000000..f3a2cfea9b --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AAIObjectAuditList.java @@ -0,0 +1,25 @@ +package org.onap.so.adapters.audit; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class AAIObjectAuditList implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 6712662349909726930L; + private List<AAIObjectAudit> auditList = new ArrayList<>(); + + @Override + public String toString() { + return new ToStringBuilder(this).append("auditList", auditList).toString(); + } + + public List<AAIObjectAudit> getAuditList() { + return auditList; + } + +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAudit.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAudit.java index 292cebf292..ad28f0daeb 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAudit.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAudit.java @@ -23,17 +23,17 @@ package org.onap.so.adapters.audit; import org.onap.so.client.aai.AAIResourcesClient; public class AbstractAudit { - - private AAIResourcesClient aaiClient; - protected AAIResourcesClient getAaiClient(){ - if(aaiClient == null) - return new AAIResourcesClient(); - else - return aaiClient; - } - - protected void setAaiClient(AAIResourcesClient aaiResource){ - aaiClient = aaiResource; - } + private AAIResourcesClient aaiClient; + + protected AAIResourcesClient getAaiClient() { + if (aaiClient == null) + return new AAIResourcesClient(); + else + return aaiClient; + } + + protected void setAaiClient(AAIResourcesClient aaiResource) { + aaiClient = aaiResource; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAuditService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAuditService.java new file mode 100644 index 0000000000..52f5478f2f --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAuditService.java @@ -0,0 +1,75 @@ +package org.onap.so.adapters.audit; + +import java.util.Optional; +import org.camunda.bpm.client.task.ExternalTask; +import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +public abstract class AbstractAuditService { + + private static final Logger logger = LoggerFactory.getLogger(AbstractAuditService.class); + + + + protected static final String UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI = + "Unable to find all VServers and L-Interaces in A&AI"; + + @Autowired + public Environment env; + + /** + * @param auditHeatStackFailed + * @param auditList + * @return + */ + protected boolean didCreateAuditFail(Optional<AAIObjectAuditList> auditList) { + if (auditList.get().getAuditList() != null && !auditList.get().getAuditList().isEmpty()) { + if (logger.isInfoEnabled()) { + logger.info("Audit Results: {}", auditList.get().toString()); + } + return auditList.get().getAuditList().stream().filter(auditObject -> !auditObject.isDoesObjectExist()) + .findFirst().map(v -> true).orElse(false); + } else { + return false; + } + } + + /** + * @param auditHeatStackFailed + * @param auditList + * @return + */ + protected boolean didDeleteAuditFail(Optional<AAIObjectAuditList> auditList) { + if (auditList.get().getAuditList() != null && !auditList.get().getAuditList().isEmpty()) { + if (logger.isInfoEnabled()) { + logger.info("Audit Results: {}", auditList.get().toString()); + } + return auditList.get().getAuditList().stream().filter(AAIObjectAudit::isDoesObjectExist).findFirst() + .map(v -> true).orElse(false); + } else { + return false; + } + } + + protected String[] getRetrySequence() { + return env.getProperty("mso.workflow.topics.retrySequence", String[].class); + } + + protected void setupMDC(ExternalTask externalTask) { + String msoRequestId = externalTask.getVariable("mso-request-id"); + if (msoRequestId != null && !msoRequestId.isEmpty()) + MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, msoRequestId); + } + + protected long calculateRetryDelay(int currentRetries) { + int retrySequence = getRetrySequence().length - currentRetries; + long retryMultiplier = Long.parseLong(env.getProperty("mso.workflow.topics.retryMultiplier", "6000")); + return Integer.parseInt(getRetrySequence()[retrySequence]) * retryMultiplier; + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditCreateStackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditCreateStackService.java index 24980ae4e0..d46229ae8e 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditCreateStackService.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditCreateStackService.java @@ -22,73 +22,76 @@ package org.onap.so.adapters.audit; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; import org.camunda.bpm.client.task.ExternalTask; import org.camunda.bpm.client.task.ExternalTaskService; import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.onap.so.audit.beans.AuditInventory; +import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @Component -public class AuditCreateStackService { - - private static final String UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI = "Unable to find all VServers and L-Interaces in A&AI"; - - private static final int[] RETRY_SEQUENCE = new int[] { 1, 1, 2, 3, 5, 8, 13, 20}; +public class AuditCreateStackService extends AbstractAuditService { + + private static final Logger logger = LoggerFactory.getLogger(AuditCreateStackService.class); + + @Autowired + public HeatStackAudit heatStackAudit; + + @Autowired + public Environment env; + + protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) { + AuditInventory auditInventory = externalTask.getVariable("auditInventory"); + Map<String, Object> variables = new HashMap<>(); + setupMDC(externalTask); + boolean success = false; + try { + logger.info("Executing External Task Audit Inventory, Retry Number: {} \n {}", auditInventory, + externalTask.getRetries()); + Optional<AAIObjectAuditList> auditListOpt = heatStackAudit.auditHeatStack(auditInventory.getCloudRegion(), + auditInventory.getCloudOwner(), auditInventory.getTenantId(), auditInventory.getHeatStackName()); + if (auditListOpt.isPresent()) { + GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider(); + variables.put("auditInventoryResult", objectMapper.getMapper().writeValueAsString(auditListOpt.get())); + success = !didCreateAuditFail(auditListOpt); + } + } catch (Exception e) { + logger.error("Error during audit of stack", e); + } + variables.put("auditIsSuccessful", success); + if (success) { + externalTaskService.complete(externalTask, variables); + logger.debug("The External Task Id: {} Successful", externalTask.getId()); + } else { + if (externalTask.getRetries() == null) { + logger.debug("The External Task Id: {} Failed, Setting Retries to Default Start Value: {}", + externalTask.getId(), getRetrySequence().length); + externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, + UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, getRetrySequence().length, 10000); + } else if (externalTask.getRetries() != null && externalTask.getRetries() - 1 == 0) { + logger.debug("The External Task Id: {} Failed, All Retries Exhausted", externalTask.getId()); + externalTaskService.complete(externalTask, variables); + } else { + logger.debug("The External Task Id: {} Failed, Decrementing Retries: {} , Retry Delay: ", + externalTask.getId(), externalTask.getRetries() - 1, + calculateRetryDelay(externalTask.getRetries())); + externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, + UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, externalTask.getRetries() - 1, + calculateRetryDelay(externalTask.getRetries())); + } + logger.debug("The External Task Id: {} Failed", externalTask.getId()); + } + } + - - private static final Logger logger = LoggerFactory.getLogger(AuditCreateStackService.class); - - @Autowired - public HeatStackAudit heatStackAudit; - - @Autowired - public Environment env; - protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService){ - AuditInventory auditInventory = externalTask.getVariable("auditInventory"); - setupMDC(externalTask); - boolean success = false; - try { - logger.info("Executing External Task Audit Inventory, Retry Number: {} \n {}", auditInventory,externalTask.getRetries()); - success=heatStackAudit.auditHeatStackCreate(auditInventory.getCloudRegion(), auditInventory.getCloudOwner(), - auditInventory.getTenantId(), auditInventory.getHeatStackName()); - } catch (Exception e) { - logger.error("Error during audit of stack", e); - } - - if (success) { - externalTaskService.complete(externalTask); - logger.debug("The External Task Id: {} Successful", externalTask.getId()); - } else { - if(externalTask.getRetries() == null){ - logger.debug("The External Task Id: {} Failed, Setting Retries to Default Start Value: {}", externalTask.getId(),RETRY_SEQUENCE.length); - externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, RETRY_SEQUENCE.length, 10000); - }else if(externalTask.getRetries() != null && - externalTask.getRetries()-1 == 0){ - logger.debug("The External Task Id: {} Failed, All Retries Exhausted", externalTask.getId()); - externalTaskService.handleBpmnError(externalTask, "AuditAAIInventoryFailure", "Number of Retries Exceeded auditing inventory"); - }else{ - logger.debug("The External Task Id: {} Failed, Decrementing Retries: {} , Retry Delay: ", externalTask.getId(),externalTask.getRetries()-1, calculateRetryDelay(externalTask.getRetries())); - externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, externalTask.getRetries()-1, calculateRetryDelay(externalTask.getRetries())); - } - logger.debug("The External Task Id: {} Failed", externalTask.getId()); - } - - - } - private void setupMDC(ExternalTask externalTask) { - String msoRequestId = externalTask.getVariable("mso-request-id"); - if(msoRequestId != null && !msoRequestId.isEmpty()) - MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, msoRequestId); - } - protected long calculateRetryDelay(int currentRetries){ - int retrySequence = RETRY_SEQUENCE.length - currentRetries; - long retryMultiplier = Long.parseLong(env.getProperty("mso.workflow.topics.retryMultiplier","6000")); - return RETRY_SEQUENCE[retrySequence] * retryMultiplier; - } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java index 66d8fbd47c..aca6e9e268 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java @@ -20,10 +20,14 @@ package org.onap.so.adapters.audit; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; import org.camunda.bpm.client.task.ExternalTask; import org.camunda.bpm.client.task.ExternalTaskService; import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.onap.so.audit.beans.AuditInventory; +import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -32,59 +36,57 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @Component -public class AuditDeleteStackService { - - private static final String UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI = "All VServers have not been deleted in A&AI"; - - private static final int[] RETRY_SEQUENCE = new int[] { 1, 1, 2, 3, 5, 8, 13, 20}; +public class AuditDeleteStackService extends AbstractAuditService { - - private static final Logger logger = LoggerFactory.getLogger(AuditDeleteStackService.class); - - @Autowired - public HeatStackAudit heatStackAudit; - - @Autowired - public Environment env; + private static final Logger logger = LoggerFactory.getLogger(AuditDeleteStackService.class); + + @Autowired + public HeatStackAudit heatStackAudit; + + @Autowired + public Environment env; + + protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) { + AuditInventory auditInventory = externalTask.getVariable("auditInventory"); + Map<String, Object> variables = new HashMap<>(); + setupMDC(externalTask); + boolean success = false; + try { + logger.info("Executing External Task Audit Inventory, Retry Number: {} \n {}", auditInventory, + externalTask.getRetries()); + Optional<AAIObjectAuditList> auditListOpt = heatStackAudit.auditHeatStack(auditInventory.getCloudRegion(), + auditInventory.getCloudOwner(), auditInventory.getTenantId(), auditInventory.getHeatStackName()); + if (auditListOpt.isPresent()) { + GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider(); + variables.put("auditInventoryResult", objectMapper.getMapper().writeValueAsString(auditListOpt.get())); + success = didDeleteAuditFail(auditListOpt); + } + } catch (Exception e) { + logger.error("Error during audit of stack", e); + } + variables.put("auditIsSuccessful", success); + if (success) { + externalTaskService.complete(externalTask, variables); + logger.debug("The External Task Id: {} Successful", externalTask.getId()); + } else { + if (externalTask.getRetries() == null) { + logger.debug("The External Task Id: {} Failed, Setting Retries to Default Start Value: {}", + externalTask.getId(), getRetrySequence().length); + externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, + UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, getRetrySequence().length, 10000); + } else if (externalTask.getRetries() != null && externalTask.getRetries() - 1 == 0) { + logger.debug("The External Task Id: {} Failed, All Retries Exhausted", externalTask.getId()); + externalTaskService.complete(externalTask); + } else { + logger.debug("The External Task Id: {} Failed, Decrementing Retries: {} , Retry Delay: ", + externalTask.getId(), externalTask.getRetries() - 1, + calculateRetryDelay(externalTask.getRetries())); + externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, + UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, externalTask.getRetries() - 1, + calculateRetryDelay(externalTask.getRetries())); + } + logger.debug("The External Task Id: {} Failed", externalTask.getId()); + } + } - protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService){ - AuditInventory auditInventory = externalTask.getVariable("auditInventory"); - setupMDC(externalTask); - boolean success = false; - try { - logger.info("Executing External Task Audit Inventory, Retry Number: {} \n {}", auditInventory,externalTask.getRetries()); - success=heatStackAudit.auditHeatStackDeleted(auditInventory.getCloudRegion(), auditInventory.getCloudOwner(), - auditInventory.getTenantId(), auditInventory.getHeatStackName()); - } catch (Exception e) { - logger.error("Error during audit of stack", e); - } - - if (success) { - externalTaskService.complete(externalTask); - logger.debug("The External Task Id: {} Successful", externalTask.getId()); - } else { - if(externalTask.getRetries() == null){ - logger.debug("The External Task Id: {} Failed, Setting Retries to Default Start Value: {}", externalTask.getId(),RETRY_SEQUENCE.length); - externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, RETRY_SEQUENCE.length, 10000); - }else if(externalTask.getRetries() != null && - externalTask.getRetries()-1 == 0){ - logger.debug("The External Task Id: {} Failed, All Retries Exhausted", externalTask.getId()); - externalTaskService.complete(externalTask); - }else{ - logger.debug("The External Task Id: {} Failed, Decrementing Retries: {} , Retry Delay: ", externalTask.getId(),externalTask.getRetries()-1, calculateRetryDelay(externalTask.getRetries())); - externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, externalTask.getRetries()-1, calculateRetryDelay(externalTask.getRetries())); - } - logger.debug("The External Task Id: {} Failed", externalTask.getId()); - } - } - private void setupMDC(ExternalTask externalTask) { - String msoRequestId = (String)externalTask.getVariable("mso-request-id"); - if(msoRequestId != null && !msoRequestId.isEmpty()) - MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, msoRequestId); - } - protected long calculateRetryDelay(int currentRetries){ - int retrySequence = RETRY_SEQUENCE.length - currentRetries; - long retryMultiplier = Long.parseLong(env.getProperty("mso.workflow.topics.retryMultiplier","6000")); - return RETRY_SEQUENCE[retrySequence] * retryMultiplier; - } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java index 6ea14dcac7..3508810e04 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java @@ -21,9 +21,7 @@ package org.onap.so.adapters.audit; import java.security.GeneralSecurityException; - import javax.annotation.PostConstruct; - import org.camunda.bpm.client.ExternalTaskClient; import org.camunda.bpm.client.backoff.ExponentialBackoffStrategy; import org.camunda.bpm.client.interceptor.ClientRequestInterceptor; @@ -40,49 +38,48 @@ import org.springframework.stereotype.Component; @Profile("!test") public class AuditStackService { - private static final Logger logger = LoggerFactory.getLogger(AuditStackService.class); + private static final Logger logger = LoggerFactory.getLogger(AuditStackService.class); + + @Autowired + public Environment env; + + @Autowired + private AuditCreateStackService auditCreateStack; - @Autowired - public Environment env; + @Autowired + private AuditDeleteStackService auditDeleteStack; - @Autowired - private AuditCreateStackService auditCreateStack; - - @Autowired - private AuditDeleteStackService auditDeleteStack; + @PostConstruct + public void auditAddAAIInventory() { + String auth = ""; + try { + auth = CryptoUtils.decrypt(env.getRequiredProperty("mso.auth"), env.getRequiredProperty("mso.msoKey")); + } catch (IllegalStateException | GeneralSecurityException e) { + logger.error("Error Decrypting Password", e); + } + ClientRequestInterceptor interceptor = + new BasicAuthProvider(env.getRequiredProperty("mso.config.cadi.aafId"), auth); + ExternalTaskClient client = ExternalTaskClient.create() + .baseUrl(env.getRequiredProperty("mso.workflow.endpoint")).maxTasks(1).addInterceptor(interceptor) + .asyncResponseTimeout(120000).backoffStrategy(new ExponentialBackoffStrategy(0, 0, 0)).build(); + client.subscribe("InventoryAddAudit").lockDuration(60000).handler(auditCreateStack::executeExternalTask).open(); + } - @PostConstruct - public void auditAddAAIInventory() { - String auth = ""; - try { - auth = CryptoUtils.decrypt(env.getRequiredProperty("mso.auth"), env.getRequiredProperty("mso.msoKey")); - } catch (IllegalStateException | GeneralSecurityException e) { - logger.error("Error Decrypting Password", e); - } - ClientRequestInterceptor interceptor = new BasicAuthProvider(env.getRequiredProperty("mso.config.cadi.aafId"), - auth); - ExternalTaskClient client = ExternalTaskClient.create() - .baseUrl(env.getRequiredProperty("mso.workflow.endpoint")).maxTasks(1).addInterceptor(interceptor) - .asyncResponseTimeout(120000).build(); - client.subscribe("InventoryAddAudit").lockDuration(60000) - .handler(auditCreateStack::executeExternalTask).open(); - } - - @PostConstruct - public void auditDeleteAAIInventory() { - String auth = ""; - try { - auth = CryptoUtils.decrypt(env.getRequiredProperty("mso.auth"), env.getRequiredProperty("mso.msoKey")); - } catch (IllegalStateException | GeneralSecurityException e) { - logger.error("Error Decrypting Password", e); - } - ClientRequestInterceptor interceptor = new BasicAuthProvider(env.getRequiredProperty("mso.config.cadi.aafId"), - auth); - ExternalTaskClient client = ExternalTaskClient.create() - .baseUrl(env.getRequiredProperty("mso.workflow.endpoint")).maxTasks(1).addInterceptor(interceptor) - .asyncResponseTimeout(120000).build(); - client.subscribe("InventoryDeleteAudit").lockDuration(60000) - .handler(auditDeleteStack::executeExternalTask).open(); - } + @PostConstruct + public void auditDeleteAAIInventory() { + String auth = ""; + try { + auth = CryptoUtils.decrypt(env.getRequiredProperty("mso.auth"), env.getRequiredProperty("mso.msoKey")); + } catch (IllegalStateException | GeneralSecurityException e) { + logger.error("Error Decrypting Password", e); + } + ClientRequestInterceptor interceptor = + new BasicAuthProvider(env.getRequiredProperty("mso.config.cadi.aafId"), auth); + ExternalTaskClient client = ExternalTaskClient.create() + .baseUrl(env.getRequiredProperty("mso.workflow.endpoint")).maxTasks(1).addInterceptor(interceptor) + .asyncResponseTimeout(120000).backoffStrategy(new ExponentialBackoffStrategy(0, 0, 0)).build(); + client.subscribe("InventoryDeleteAudit").lockDuration(60000).handler(auditDeleteStack::executeExternalTask) + .open(); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java index c81dac7c6f..8559fe5c36 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java @@ -22,99 +22,110 @@ package org.onap.so.adapters.audit; import java.util.Optional; import java.util.Set; - import org.onap.aai.domain.yang.LInterface; -import org.onap.aai.domain.yang.LInterfaces; import org.onap.aai.domain.yang.Vserver; -import org.onap.so.client.aai.AAIObjectPlurals; import org.onap.so.client.aai.AAIObjectType; -import org.onap.so.client.aai.entities.AAIResultWrapper; import org.onap.so.client.aai.entities.uri.AAIResourceUri; import org.onap.so.client.aai.entities.uri.AAIUriFactory; +import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; +import com.fasterxml.jackson.core.JsonProcessingException; @Component public class AuditVServer extends AbstractAudit { - private static final Logger logger = LoggerFactory.getLogger(AuditVServer.class); + private static final Logger logger = LoggerFactory.getLogger(AuditVServer.class); + + public Optional<AAIObjectAuditList> auditVservers(Set<Vserver> vServersToAudit, String tenantId, String cloudOwner, + String cloudRegion) { + if (vServersToAudit == null || vServersToAudit.isEmpty()) { + return Optional.empty(); + } + GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider(); + vServersToAudit.stream().forEach(vserver -> { + try { + logger.debug("Vserver to Audit: {}", objectMapper.getMapper().writeValueAsString(vserver)); + } catch (JsonProcessingException e) { - public boolean auditAllVserversDoExist(Set<Vserver> vServersToAudit, String tenantId, String cloudOwner, String cloudRegion) { - if (vServersToAudit == null || vServersToAudit.isEmpty()){ - return false; - } - return vServersToAudit.stream() - .filter(vServer -> !doesVServerExistInAAI(vServer, tenantId, cloudOwner, cloudRegion,true)).findFirst() - .map(v -> false).orElse(true); - } - - public boolean auditAllVserversDoNotExist(Set<Vserver> vServersToAudit, String tenantId, String cloudOwner, String cloudRegion) { - if (vServersToAudit == null || vServersToAudit.isEmpty()){ - return true; - } - return vServersToAudit.stream() - .filter(vServer -> doesVServerExistInAAI(vServer, tenantId, cloudOwner, cloudRegion,false)).findFirst() - .map(v -> false).orElse(true); - } + } + }); + AAIObjectAuditList auditList = new AAIObjectAuditList(); + vServersToAudit.stream().forEach(vServer -> auditList.getAuditList() + .addAll(doesVServerExistInAAI(vServer, tenantId, cloudOwner, cloudRegion).getAuditList())); + return Optional.of(auditList); + } - private boolean doesVServerExistInAAI(Vserver vServer, String tenantId, String cloudOwner, String cloudRegion, boolean checkLinterfaces) { - AAIResourceUri vserverURI = AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegion, - tenantId, vServer.getVserverId()); - boolean vServerExists = getAaiClient().exists(vserverURI); - boolean doesExist = getAaiClient().exists(vserverURI); - logger.info("v-server {} exists: {}", vServer.getVserverId(), doesExist); - boolean allNeutronNetworksExist = true; - if (vServerExists && vServer.getLInterfaces() != null && checkLinterfaces) { - allNeutronNetworksExist = vServer.getLInterfaces() - .getLInterface().stream().filter(lInterface -> !doesLinterfaceExistinAAI(lInterface, - vServer.getVserverId(), tenantId, cloudOwner, cloudRegion)) - .findFirst().map(v -> false).orElse(true); - } - return vServerExists && allNeutronNetworksExist; - } + private AAIObjectAuditList doesVServerExistInAAI(Vserver vServer, String tenantId, String cloudOwner, + String cloudRegion) { + AAIObjectAuditList auditList = new AAIObjectAuditList(); + AAIObjectAudit vServerAudit = new AAIObjectAudit(); + AAIResourceUri vserverURI = AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegion, + tenantId, vServer.getVserverId()); + Vserver vServerShallow = new Vserver(); + BeanUtils.copyProperties(vServer, vServerShallow, "LInterfaces"); + boolean vServerExists = getAaiClient().exists(vserverURI); + logger.info("v-server {} exists: {}", vServer.getVserverId(), vServerExists); + vServerAudit.setAaiObject(vServerShallow); + vServerAudit.setDoesObjectExist(vServerExists); + vServerAudit.setResourceURI(vserverURI.build()); + vServerAudit.setAaiObjectType(AAIObjectType.VSERVER.typeName()); + auditList.getAuditList().add(vServerAudit); + if (vServer.getLInterfaces() != null) { + vServer.getLInterfaces().getLInterface().stream().forEach(lInterface -> auditList.getAuditList().addAll( + doesLinterfaceExistinAAI(lInterface, vServer.getVserverId(), tenantId, cloudOwner, cloudRegion) + .getAuditList())); + } + return auditList; + } - private boolean doesLinterfaceExistinAAI(LInterface lInterface, String vServerId, String tenantId, - String cloudOwner, String cloudRegion) { - boolean doesLInterfaceExist = false; - boolean doSubInterfacesExist = true; - AAIResourceUri linterfaceURI = AAIUriFactory - .createResourceUri(AAIObjectPlurals.L_INTERFACE, cloudOwner, cloudRegion, tenantId, vServerId) - .queryParam("interface-id", lInterface.getInterfaceId()); - Optional<LInterfaces> queriedLInterface = getAaiClient().get(LInterfaces.class, linterfaceURI); - if (queriedLInterface.isPresent()) { - if (queriedLInterface.get().getLInterface().size() > 1) { - logger.error("Non-Unique LInterface Found stopping audit, L-Interface Id: " +lInterface.getInterfaceId()); - doesLInterfaceExist = false; - } else { - doesLInterfaceExist = true; - lInterface.setInterfaceName(queriedLInterface.get().getLInterface().get(0).getInterfaceName()); - } - } - logger.info("l-interface id:{} name: {} exists: {}", lInterface.getInterfaceId(), lInterface.getInterfaceName(), - doesLInterfaceExist); + private AAIObjectAuditList doesLinterfaceExistinAAI(LInterface lInterface, String vServerId, String tenantId, + String cloudOwner, String cloudRegion) { + AAIObjectAuditList auditList = new AAIObjectAuditList(); + AAIObjectAudit lInterfaceAudit = new AAIObjectAudit(); + AAIResourceUri linterfaceURI = AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, cloudOwner, + cloudRegion, tenantId, vServerId, lInterface.getInterfaceName()); + Optional<LInterface> queriedLInterface = getAaiClient().get(LInterface.class, linterfaceURI); + if (queriedLInterface.isPresent()) { + lInterfaceAudit.setDoesObjectExist(true); + lInterface.setInterfaceName(lInterface.getInterfaceName()); + } + LInterface lInterfaceShallow = new LInterface(); + BeanUtils.copyProperties(lInterface, lInterfaceShallow, "LInterfaces"); + lInterfaceAudit.setAaiObject(lInterface); + lInterfaceAudit.setResourceURI(linterfaceURI.build()); + lInterfaceAudit.setAaiObjectType(AAIObjectType.L_INTERFACE.typeName()); + auditList.getAuditList().add(lInterfaceAudit); + logger.info("l-interface id:{} name: {} exists: {} ", lInterface.getInterfaceId(), + lInterface.getInterfaceName(), lInterfaceAudit.isDoesObjectExist()); - if (doesLInterfaceExist && lInterface.getLInterfaces() != null) { - doSubInterfacesExist = lInterface.getLInterfaces().getLInterface() - .stream().filter(subInterface -> !doesSubInterfaceExistinAAI(subInterface, - lInterface.getInterfaceName(), vServerId, tenantId, cloudOwner, cloudRegion)) - .findFirst().map(v -> false).orElse(true); - } else - logger.debug("l-interface {} does not contain any sub-iterfaces", lInterface.getInterfaceId()); + if (lInterface.getLInterfaces() != null) { + lInterface.getLInterfaces().getLInterface().stream() + .forEach(subInterface -> auditList.getAuditList().add(doesSubInterfaceExistinAAI(subInterface, + lInterface.getInterfaceName(), vServerId, tenantId, cloudOwner, cloudRegion))); + } + logger.debug("l-interface {} does not contain any sub-iterfaces, skipping audit of sub-interfaces", + lInterface.getInterfaceId()); - return doesLInterfaceExist && doSubInterfacesExist; - } + return auditList; + } - private boolean doesSubInterfaceExistinAAI(LInterface subInterface, String linterfaceName, String vServerId, - String tenantId, String cloudOwner, String cloudRegion) { - logger.info("checking if sub-l-interface {} , linterfaceName: {} vserverId: {} exists", - subInterface.getInterfaceId(), linterfaceName, vServerId); + private AAIObjectAudit doesSubInterfaceExistinAAI(LInterface subInterface, String linterfaceName, String vServerId, + String tenantId, String cloudOwner, String cloudRegion) { + logger.info("checking if sub-l-interface {} , linterfaceName: {} vserverId: {} exists", + subInterface.getInterfaceName(), linterfaceName, vServerId); + AAIObjectAudit subInterfaceAudit = new AAIObjectAudit(); - AAIResourceUri linterfaceURI = AAIUriFactory.createResourceUri(AAIObjectPlurals.SUB_L_INTERFACE, cloudOwner, - cloudRegion, tenantId, vServerId, linterfaceName) - .queryParam("interface-id", subInterface.getInterfaceId()); - boolean doesExist = getAaiClient().exists(linterfaceURI); - logger.info("sub-l-interface {} exists: {}", subInterface.getInterfaceId(), doesExist); - return doesExist; - } + AAIResourceUri subInterfaceURI = AAIUriFactory.createResourceUri(AAIObjectType.SUB_L_INTERFACE, cloudOwner, + cloudRegion, tenantId, vServerId, linterfaceName, subInterface.getInterfaceName()); + subInterfaceAudit.setResourceURI(subInterfaceURI.build()); + boolean doesExist = getAaiClient().exists(subInterfaceURI); + logger.info("sub-l-interface-id:{} exists: {}", subInterface.getInterfaceId(), doesExist); + subInterfaceAudit.setAaiObject(subInterface); + subInterfaceAudit.setDoesObjectExist(doesExist); + subInterfaceAudit.setAaiObjectType(AAIObjectType.SUB_L_INTERFACE.typeName()); + return subInterfaceAudit; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java index 19e3ab71f5..5c0d2d3019 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java @@ -21,6 +21,7 @@ package org.onap.so.adapters.audit; import java.net.URI; +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Optional; @@ -29,208 +30,242 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; - import org.onap.aai.domain.yang.LInterface; import org.onap.aai.domain.yang.LInterfaces; +import org.onap.aai.domain.yang.Vlan; +import org.onap.aai.domain.yang.Vlans; import org.onap.aai.domain.yang.Vserver; import org.onap.so.openstack.utils.MsoHeatUtils; +import org.onap.so.openstack.utils.MsoNeutronUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - import com.woorea.openstack.heat.model.Link; import com.woorea.openstack.heat.model.Resource; import com.woorea.openstack.heat.model.Resources; import com.woorea.openstack.heat.model.Stack; +import com.woorea.openstack.quantum.model.Port; @Component public class HeatStackAudit { - private static final String RESOURCES = "/resources"; - - protected static final Logger logger = LoggerFactory.getLogger(HeatStackAudit.class); - - @Autowired - protected MsoHeatUtils heat; - - @Autowired - protected AuditVServer auditVservers; - - public boolean auditHeatStackCreate(String cloudRegion, String cloudOwner, String tenantId, String heatStackName) { - try { - return auditStack(cloudRegion,cloudOwner,tenantId,heatStackName,true); - } catch (Exception e) { - logger.error("Error during auditing stack resources", e); - return false; - } - } - - public boolean auditHeatStackDeleted(String cloudRegion, String cloudOwner, String tenantId, String heatStackName) { - try { - return auditStack(cloudRegion,cloudOwner,tenantId,heatStackName,false); - } catch (Exception e) { - logger.error("Error during auditing stack resources", e); - return false; - } - } - - private boolean auditStack(String cloudRegion, String cloudOwner, String tenantId, String heatStackName,boolean isCreateAudit) throws Exception{ - logger.debug("Fetching Top Level Stack Information"); - Resources resources = heat.queryStackResources(cloudRegion, tenantId, heatStackName); - List<Resource> novaResources = extractNovaResources(resources); - if(novaResources.isEmpty()) - return true; - else{ - List<Resource> resourceGroups = extractResourceGroups(resources); - Set<Vserver> vserversToAudit = createVserverSet(resources, novaResources); - Set<Vserver> vserversWithSubInterfaces = processSubInterfaces(cloudRegion, tenantId, resourceGroups, - vserversToAudit); - if(isCreateAudit){ - return auditVservers.auditAllVserversDoExist(vserversWithSubInterfaces, tenantId, cloudOwner, cloudRegion); - }else{ - return auditVservers.auditAllVserversDoNotExist(vserversWithSubInterfaces, tenantId, cloudOwner, cloudRegion); - } - } - } - - private List<Resource> extractResourceGroups(Resources resources) { - return resources.getList().stream() - .filter(p -> "OS::Heat::ResourceGroup".equals(p.getType()) && p.getName().contains("subinterfaces")).collect(Collectors.toList()); - } - - private List<Resource> extractNovaResources(Resources resources) { - return resources.getList().stream() - .filter(p -> "OS::Nova::Server".equals(p.getType())).collect(Collectors.toList()); - } - - protected Set<Vserver> processSubInterfaces(String cloudRegion, String tenantId, List<Resource> resourceGroups, - Set<Vserver> vServersToAudit) throws Exception { - for (Resource resourceGroup : resourceGroups) { - processResourceGroups(cloudRegion, tenantId, vServersToAudit, resourceGroup); - } - return vServersToAudit; - } - - protected void processResourceGroups(String cloudRegion, String tenantId, Set<Vserver> vServersWithLInterface, - Resource resourceGroup) throws Exception { - Optional<Link> stackLink = resourceGroup.getLinks().stream().filter(link -> "nested".equals(link.getRel())) - .findAny(); - if (stackLink.isPresent()) { - try { - Optional<String> path = extractResourcePathFromHref(stackLink.get().getHref()); - if (path.isPresent()) { - logger.debug("Fetching nested Resource Stack Information"); - Resources nestedResourceGroupResources = heat.executeHeatClientRequest(path.get(), cloudRegion, - tenantId, Resources.class); - processNestedResourceGroup(cloudRegion, tenantId, vServersWithLInterface, - nestedResourceGroupResources); - } else - throw new Exception("Error finding Path from Self Link"); - } catch (Exception e) { - logger.error("Error Parsing Link to obtain Path", e); - throw new Exception("Error finding Path from Self Link"); - } - - } - } - - protected void processNestedResourceGroup(String cloudRegion, String tenantId, Set<Vserver> vServersWithLInterface, - Resources nestedResourceGroupResources) throws Exception { - for (Resource resourceGroupNested : nestedResourceGroupResources) { - Optional<Link> subInterfaceStackLink = resourceGroupNested.getLinks().stream() - .filter(link -> "nested".equals(link.getRel())).findAny(); - if (subInterfaceStackLink.isPresent()) { - addSubInterface(cloudRegion, tenantId, vServersWithLInterface,subInterfaceStackLink.get()); - } - } - } - - protected void addSubInterface(String cloudRegion, String tenantId, Set<Vserver> vServersWithLInterface, Link subInterfaceStackLink) throws Exception { - Optional<String> resourcePath = extractResourcePathFromHref(subInterfaceStackLink.getHref()); - Optional<String> stackPath = extractStackPathFromHref(subInterfaceStackLink.getHref()); - if (resourcePath.isPresent() && stackPath.isPresent()) { - logger.debug("Fetching nested Sub-Interface Stack Information"); - Stack subinterfaceStack = heat.executeHeatClientRequest(stackPath.get(), cloudRegion, tenantId, Stack.class); - Resources subinterfaceResources = heat.executeHeatClientRequest(resourcePath.get(), cloudRegion, tenantId, Resources.class); - if (subinterfaceStack != null) { - addSubInterfaceToVserver(vServersWithLInterface, subinterfaceStack, subinterfaceResources); - } - } else - throw new Exception("Error finding Path from Self Link"); - - } - - protected void addSubInterfaceToVserver(Set<Vserver> vServersWithLInterface, Stack subinterfaceStack, Resources subinterfaceResources) throws Exception { - String parentNeutronPortId = (String) subinterfaceStack.getParameters().get("port_interface"); - logger.debug("Parent neutron Port: {} on SubInterface: {}", parentNeutronPortId, subinterfaceStack.getId()); - for (Vserver auditVserver : vServersWithLInterface) - for (LInterface lInterface : auditVserver.getLInterfaces().getLInterface()) - - if (parentNeutronPortId.equals(lInterface.getInterfaceId())) { - logger.debug("Found Parent Port on VServer: {} on Port: {}", auditVserver.getVserverId(), lInterface.getInterfaceId()); - Resource contrailVm = subinterfaceResources.getList().stream().filter(resource -> "OS::ContrailV2::VirtualMachineInterface".equals(resource.getType())).findAny() - .orElse(null); - if(contrailVm == null){ - throw new Exception("Cannnot find Contrail Virtual Machine Interface on Stack: "+ subinterfaceStack.getId()); - } - LInterface subInterface = new LInterface(); - subInterface.setInterfaceId(contrailVm.getPhysicalResourceId()); - - if(lInterface.getLInterfaces() == null) - lInterface.setLInterfaces(new LInterfaces()); - - lInterface.getLInterfaces().getLInterface().add(subInterface); - }else - logger.debug("Did Not Find Parent Port on VServer: {} Parent Port: SubInterface: {}",auditVserver.getVserverId(), - lInterface.getInterfaceId(),subinterfaceStack.getId()); - } - - protected Set<Vserver> createVserverSet(Resources resources, List<Resource> novaResources) { - Set<Vserver> vserversToAudit = new HashSet<>(); - for (Resource novaResource : novaResources) { - Vserver auditVserver = new Vserver(); - auditVserver.setLInterfaces(new LInterfaces()); - auditVserver.setVserverId(novaResource.getPhysicalResourceId()); - Stream<Resource> filteredNeutronNetworks = resources.getList().stream() - .filter(resource -> resource.getRequiredBy().contains(novaResource.getLogicalResourceId())) - .filter(resource -> "OS::Neutron::Port".equals(resource.getType())); - filteredNeutronNetworks.forEach(network -> { - LInterface lInterface = new LInterface(); - lInterface.setInterfaceId(network.getPhysicalResourceId()); - auditVserver.getLInterfaces().getLInterface().add(lInterface); - }); - vserversToAudit.add(auditVserver); - } - return vserversToAudit; - } - - protected Optional<String> extractResourcePathFromHref(String href) { - try { - Optional<String> stackPath = extractStackPathFromHref(href); - if (stackPath.isPresent()){ - return Optional.of(stackPath.get()+RESOURCES); - }else - return Optional.empty(); - } catch (Exception e) { - logger.error("Error parsing URI", e); - } - return Optional.empty(); - } - - protected Optional<String> extractStackPathFromHref(String href) { - try { - URI uri = new URI(href); - Pattern p = Pattern.compile("/stacks.*"); - Matcher m = p.matcher(uri.getPath()); - if (m.find()){ - return Optional.of(m.group()); - }else - return Optional.empty(); - } catch (Exception e) { - logger.error("Error parsing URI", e); - } - return Optional.empty(); - } - + private static final String RESOURCES = "/resources"; + + protected static final Logger logger = LoggerFactory.getLogger(HeatStackAudit.class); + + @Autowired + protected MsoHeatUtils heat; + + @Autowired + protected MsoNeutronUtils neutron; + + @Autowired + protected AuditVServer auditVservers; + + public Optional<AAIObjectAuditList> auditHeatStack(String cloudRegion, String cloudOwner, String tenantId, + String heatStackName) { + try { + logger.debug("Fetching Top Level Stack Information"); + Resources resources = heat.queryStackResources(cloudRegion, tenantId, heatStackName, 3); + List<Resource> novaResources = resources.getList().stream() + .filter(p -> "OS::Nova::Server".equals(p.getType())).collect(Collectors.toList()); + List<Resource> resourceGroups = resources.getList().stream() + .filter(p -> "OS::Heat::ResourceGroup".equals(p.getType()) && p.getName().contains("subinterfaces")) + .collect(Collectors.toList()); + List<Optional<Port>> neutronPortDetails = retrieveNeutronPortDetails(resources, cloudRegion, tenantId); + if (novaResources.isEmpty()) + return Optional.of(new AAIObjectAuditList()); + else { + Set<Vserver> vserversToAudit = createVserverSet(resources, novaResources, neutronPortDetails); + Set<Vserver> vserversWithSubInterfaces = + processSubInterfaces(cloudRegion, tenantId, resourceGroups, vserversToAudit); + return auditVservers.auditVservers(vserversWithSubInterfaces, tenantId, cloudOwner, cloudRegion); + } + } catch (Exception e) { + logger.error("Error during auditing stack resources", e); + return Optional.empty(); + } + } + + protected Set<Vserver> processSubInterfaces(String cloudRegion, String tenantId, List<Resource> resourceGroups, + Set<Vserver> vServersToAudit) throws Exception { + for (Resource resourceGroup : resourceGroups) { + processResourceGroups(cloudRegion, tenantId, vServersToAudit, resourceGroup); + } + return vServersToAudit; + } + + protected void processResourceGroups(String cloudRegion, String tenantId, Set<Vserver> vServersWithLInterface, + Resource resourceGroup) throws Exception { + Optional<Link> stackLink = + resourceGroup.getLinks().stream().filter(link -> "nested".equals(link.getRel())).findAny(); + if (stackLink.isPresent()) { + try { + Optional<String> path = extractResourcePathFromHref(stackLink.get().getHref()); + if (path.isPresent()) { + logger.debug("Fetching nested Resource Stack Information"); + Resources nestedResourceGroupResources = + heat.executeHeatClientRequest(path.get(), cloudRegion, tenantId, Resources.class); + processNestedResourceGroup(cloudRegion, tenantId, vServersWithLInterface, + nestedResourceGroupResources); + } else + throw new Exception("Error finding Path from Self Link"); + } catch (Exception e) { + logger.error("Error Parsing Link to obtain Path", e); + throw new Exception("Error finding Path from Self Link"); + } + } + } + + protected void processNestedResourceGroup(String cloudRegion, String tenantId, Set<Vserver> vServersWithLInterface, + Resources nestedResourceGroupResources) throws Exception { + for (Resource resourceGroupNested : nestedResourceGroupResources) { + Optional<Link> subInterfaceStackLink = + resourceGroupNested.getLinks().stream().filter(link -> "nested".equals(link.getRel())).findAny(); + if (subInterfaceStackLink.isPresent()) { + addSubInterface(cloudRegion, tenantId, vServersWithLInterface, subInterfaceStackLink.get()); + } + } + } + + protected void addSubInterface(String cloudRegion, String tenantId, Set<Vserver> vServersWithLInterface, + Link subInterfaceStackLink) throws Exception { + Optional<String> resourcePath = extractResourcePathFromHref(subInterfaceStackLink.getHref()); + Optional<String> stackPath = extractStackPathFromHref(subInterfaceStackLink.getHref()); + if (resourcePath.isPresent() && stackPath.isPresent()) { + logger.debug("Fetching nested Sub-Interface Stack Information"); + Stack subinterfaceStack = + heat.executeHeatClientRequest(stackPath.get(), cloudRegion, tenantId, Stack.class); + Resources subinterfaceResources = + heat.executeHeatClientRequest(resourcePath.get(), cloudRegion, tenantId, Resources.class); + if (subinterfaceStack != null) { + addSubInterfaceToVserver(vServersWithLInterface, subinterfaceStack, subinterfaceResources); + } + } else + throw new Exception("Error finding Path from Self Link"); + + } + + protected void addSubInterfaceToVserver(Set<Vserver> vServersWithLInterface, Stack subinterfaceStack, + Resources subinterfaceResources) throws Exception { + String parentNeutronPortId = (String) subinterfaceStack.getParameters().get("port_interface"); + logger.debug("Parent neutron Port: {} on SubInterface: {}", parentNeutronPortId, subinterfaceStack.getId()); + for (Vserver auditVserver : vServersWithLInterface) + for (LInterface lInterface : auditVserver.getLInterfaces().getLInterface()) + + if (parentNeutronPortId.equals(lInterface.getInterfaceId())) { + logger.debug("Found Parent Port on VServer: {} on Port: {}", auditVserver.getVserverId(), + lInterface.getInterfaceId()); + Resource contrailVm = subinterfaceResources.getList().stream() + .filter(resource -> "OS::ContrailV2::VirtualMachineInterface".equals(resource.getType())) + .findAny().orElse(null); + if (contrailVm == null) { + throw new Exception("Cannnot find Contrail Virtual Machine Interface on Stack: " + + subinterfaceStack.getId()); + } + LInterface subInterface = new LInterface(); + subInterface.setInterfaceId(contrailVm.getPhysicalResourceId()); + subInterface.setIsPortMirrored(false); + subInterface.setInMaint(false); + subInterface.setIsIpUnnumbered(false); + String macAddr = (String) subinterfaceStack.getParameters().get("mac_address"); + subInterface.setMacaddr(macAddr); + + String namePrefix = (String) subinterfaceStack.getParameters().get("subinterface_name_prefix"); + Integer vlanIndex = Integer.parseInt((String) subinterfaceStack.getParameters().get("counter")); + String vlanTagList = (String) subinterfaceStack.getParameters().get("vlan_tag"); + List<String> subInterfaceVlanTagList = Arrays.asList(vlanTagList.split(",")); + subInterface.setInterfaceName(namePrefix + "_" + subInterfaceVlanTagList.get(vlanIndex)); + subInterface.setVlans(new Vlans()); + Vlan vlan = new Vlan(); + vlan.setInMaint(false); + vlan.setIsIpUnnumbered(false); + vlan.setVlanIdInner(Long.parseLong(subInterfaceVlanTagList.get(vlanIndex))); + vlan.setVlanInterface(namePrefix + "_" + subInterfaceVlanTagList.get(vlanIndex)); + subInterface.getVlans().getVlan().add(vlan); + if (lInterface.getLInterfaces() == null) + lInterface.setLInterfaces(new LInterfaces()); + + lInterface.getLInterfaces().getLInterface().add(subInterface); + } else + logger.debug("Did Not Find Parent Port on VServer: {} Parent Port: SubInterface: {}", + auditVserver.getVserverId(), lInterface.getInterfaceId(), subinterfaceStack.getId()); + } + + protected Set<Vserver> createVserverSet(Resources resources, List<Resource> novaResources, + List<Optional<Port>> neutronPortDetails) { + Set<Vserver> vserversToAudit = new HashSet<>(); + for (Resource novaResource : novaResources) { + Vserver auditVserver = new Vserver(); + auditVserver.setLInterfaces(new LInterfaces()); + auditVserver.setVserverId(novaResource.getPhysicalResourceId()); + Stream<Port> filteredNeutronPorts = filterNeutronPorts(novaResource, neutronPortDetails); + filteredNeutronPorts.forEach(port -> { + LInterface lInterface = new LInterface(); + lInterface.setInterfaceId(port.getId()); + lInterface.setInterfaceName(port.getName()); + auditVserver.getLInterfaces().getLInterface().add(lInterface); + }); + vserversToAudit.add(auditVserver); + } + return vserversToAudit; + } + + /** + * @param novaResource Single openstack resource that is of type Nova + * @param neutronPorts List of Neutron ports created within the stack + * @return Filtered list of neutron ports taht relate to the nova server in openstack + */ + protected Stream<Port> filterNeutronPorts(Resource novaResource, List<Optional<Port>> neutronPorts) { + List<Port> filteredNeutronPorts = + neutronPorts.stream().filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList()); + return filteredNeutronPorts.stream() + .filter(port -> port.getDeviceId().equalsIgnoreCase(novaResource.getPhysicalResourceId())); + } + + /** + * @param resources Resource stream created by the stack in openstack + * @param cloudSiteId Unique site id to identify which openstack we talk to + * @param tenantId The tenant within the cloud we are talking to where resouces exist + * @return List of optional neutron ports found within the cloud site and tenant + */ + protected List<Optional<Port>> retrieveNeutronPortDetails(Resources resources, String cloudSiteId, + String tenantId) { + return resources.getList().parallelStream().filter(resource -> "OS::Neutron::Port".equals(resource.getType())) + .map(resource -> neutron.getNeutronPort(resource.getPhysicalResourceId(), tenantId, cloudSiteId)) + .collect(Collectors.toList()); + + } + + protected Optional<String> extractResourcePathFromHref(String href) { + try { + Optional<String> stackPath = extractStackPathFromHref(href); + if (stackPath.isPresent()) { + return Optional.of(stackPath.get() + RESOURCES); + } else + return Optional.empty(); + } catch (Exception e) { + logger.error("Error parsing URI", e); + } + return Optional.empty(); + } + + protected Optional<String> extractStackPathFromHref(String href) { + try { + URI uri = new URI(href); + Pattern p = Pattern.compile("/stacks.*"); + Matcher m = p.matcher(uri.getPath()); + if (m.find()) { + return Optional.of(m.group()); + } else + return Optional.empty(); + } catch (Exception e) { + logger.error("Error parsing URI", e); + } + return Optional.empty(); + } + + } + diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateAAIInventory.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateAAIInventory.java new file mode 100644 index 0000000000..4453071e06 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateAAIInventory.java @@ -0,0 +1,74 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.inventory.create; + +import java.util.Optional; +import java.util.stream.Stream; +import org.onap.aai.domain.yang.LInterface; +import org.onap.so.adapters.audit.AAIObjectAudit; +import org.onap.so.adapters.audit.AAIObjectAuditList; +import org.onap.so.client.aai.AAIObjectType; +import org.onap.so.client.aai.AAIResourcesClient; +import org.onap.so.client.aai.entities.uri.AAIUriFactory; +import org.springframework.stereotype.Component; + +@Component +public class CreateAAIInventory { + + private AAIResourcesClient aaiClient; + + public void createInventory(AAIObjectAuditList auditList) throws InventoryException { + if (didAuditFailVserverLInterfaces(auditList)) { + throw new InventoryException("Audit failed for VServer or LInterface cannot write Sub-Interfaces"); + } + auditList.getAuditList().parallelStream() + .filter(auditObject -> !auditObject.isDoesObjectExist() + && AAIObjectType.SUB_L_INTERFACE.typeName().equals(auditObject.getAaiObjectType())) + .forEach(auditObject -> getAaiClient().createIfNotExists(AAIUriFactory.createResourceFromExistingURI( + AAIObjectType.fromTypeName(auditObject.getAaiObjectType()), auditObject.getResourceURI()), + Optional.of(auditObject.getAaiObject()))); + } + + + /** + * @param auditHeatStackFailed + * @param auditList + * @return + */ + protected boolean didAuditFailVserverLInterfaces(AAIObjectAuditList auditList) { + Stream<AAIObjectAudit> issue = auditList.getAuditList().stream() + .filter(auditObject -> auditObject.getAaiObjectType().equals(AAIObjectType.VSERVER.typeName()) + || auditObject.getAaiObjectType().equals(AAIObjectType.L_INTERFACE.typeName())); + + return issue.filter(auditObject -> !auditObject.isDoesObjectExist()).findFirst().map(v -> true).orElse(false); + } + + protected AAIResourcesClient getAaiClient() { + if (aaiClient == null) + return new AAIResourcesClient(); + else + return aaiClient; + } + + protected void setAaiClient(AAIResourcesClient aaiResource) { + aaiClient = aaiResource; + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryService.java new file mode 100644 index 0000000000..8bd813026f --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryService.java @@ -0,0 +1,65 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.inventory.create; + +import java.security.GeneralSecurityException; +import javax.annotation.PostConstruct; +import org.camunda.bpm.client.ExternalTaskClient; +import org.camunda.bpm.client.backoff.ExponentialBackoffStrategy; +import org.camunda.bpm.client.interceptor.ClientRequestInterceptor; +import org.camunda.bpm.client.interceptor.auth.BasicAuthProvider; +import org.onap.so.utils.CryptoUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Profile("!test") +public class CreateInventoryService { + + private static final Logger logger = LoggerFactory.getLogger(CreateInventoryService.class); + + @Autowired + public Environment env; + + @Autowired + private CreateInventoryTask createInventory; + + @PostConstruct + public void auditAAIInventory() { + String auth = ""; + try { + auth = CryptoUtils.decrypt(env.getRequiredProperty("mso.auth"), env.getRequiredProperty("mso.msoKey")); + } catch (IllegalStateException | GeneralSecurityException e) { + logger.error("Error Decrypting Password", e); + } + ClientRequestInterceptor interceptor = + new BasicAuthProvider(env.getRequiredProperty("mso.config.cadi.aafId"), auth); + ExternalTaskClient client = ExternalTaskClient.create() + .baseUrl(env.getRequiredProperty("mso.workflow.endpoint")).maxTasks(1).addInterceptor(interceptor) + .asyncResponseTimeout(120000).backoffStrategy(new ExponentialBackoffStrategy(0, 0, 0)).build(); + client.subscribe("InventoryCreate").lockDuration(60000).handler(createInventory::executeExternalTask).open(); + } + +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryTask.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryTask.java new file mode 100644 index 0000000000..add3aac74d --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryTask.java @@ -0,0 +1,114 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.inventory.create; + +import java.io.IOException; +import org.camunda.bpm.client.task.ExternalTask; +import org.camunda.bpm.client.task.ExternalTaskService; +import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.onap.so.adapters.audit.AAIObjectAuditList; +import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +public class CreateInventoryTask { + + private static final String UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI = "Unable to write all inventory to A&AI"; + + private static final Logger logger = LoggerFactory.getLogger(CreateInventoryTask.class); + + @Autowired + CreateAAIInventory createInventory; + + @Autowired + public Environment env; + + protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) { + boolean success = true; + String auditInventoryString = externalTask.getVariable("auditInventoryResult"); + GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider(); + AAIObjectAuditList auditInventory = null; + try { + auditInventory = objectMapper.getMapper().readValue(auditInventoryString, AAIObjectAuditList.class); + } catch (IOException e1) { + success = false; + } + setupMDC(externalTask); + + if (auditInventory != null) { + try { + logger.info("Executing External Task Create Inventory, Retry Number: {} \n {}", auditInventory, + externalTask.getRetries()); + createInventory.createInventory(auditInventory); + } catch (Exception e) { + logger.error("Error during inventory of stack", e); + success = false; + } + if (success) { + externalTaskService.complete(externalTask); + logger.debug("The External Task Id: {} Successful", externalTask.getId()); + } else { + if (externalTask.getRetries() == null) { + logger.debug("The External Task Id: {} Failed, Setting Retries to Default Start Value: {}", + externalTask.getId(), getRetrySequence().length); + externalTaskService.handleFailure(externalTask, UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, + UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, getRetrySequence().length, 10000); + } else if (externalTask.getRetries() != null && externalTask.getRetries() - 1 == 0) { + logger.debug("The External Task Id: {} Failed, All Retries Exhausted", externalTask.getId()); + externalTaskService.handleBpmnError(externalTask, "AAIInventoryFailure"); + } else { + logger.debug("The External Task Id: {} Failed, Decrementing Retries: {} , Retry Delay: ", + externalTask.getId(), externalTask.getRetries() - 1, + calculateRetryDelay(externalTask.getRetries())); + externalTaskService.handleFailure(externalTask, UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, + UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, externalTask.getRetries() - 1, + calculateRetryDelay(externalTask.getRetries())); + } + logger.debug("The External Task Id: {} Failed", externalTask.getId()); + } + } else { + logger.debug("The External Task Id: {} Failed, No Audit Results Written", externalTask.getId()); + externalTaskService.handleBpmnError(externalTask, "AAIInventoryFailure"); + } + } + + private void setupMDC(ExternalTask externalTask) { + String msoRequestId = (String) externalTask.getVariable("mso-request-id"); + if (msoRequestId != null && !msoRequestId.isEmpty()) + MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, msoRequestId); + } + + protected long calculateRetryDelay(int currentRetries) { + int retrySequence = getRetrySequence().length - currentRetries; + long retryMultiplier = Long.parseLong(env.getProperty("mso.workflow.topics.retryMultiplier", "6000")); + return Integer.parseInt(getRetrySequence()[retrySequence]) * retryMultiplier; + } + + public String[] getRetrySequence() { + return env.getProperty("mso.workflow.topics.retrySequence", String[].class); + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/InventoryException.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/InventoryException.java new file mode 100644 index 0000000000..24fa9af7f9 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/InventoryException.java @@ -0,0 +1,14 @@ +package org.onap.so.adapters.inventory.create; + +public class InventoryException extends Exception { + + /** + * + */ + private static final long serialVersionUID = 912652713891488731L; + + public InventoryException(String errorMessage) { + super(errorMessage); + } + +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailPolicyRef.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailPolicyRef.java index 7febf7e9a0..9d7eafbf82 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailPolicyRef.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailPolicyRef.java @@ -34,48 +34,39 @@ import org.slf4j.LoggerFactory; public class ContrailPolicyRef { private static final Logger logger = LoggerFactory.getLogger(ContrailPolicyRef.class); - - @JsonProperty("network_policy_refs_data_sequence") - private ContrailPolicyRefSeq seq; - - public JsonNode toJsonNode() - { - JsonNode node = null; - try - { - ObjectMapper mapper = new ObjectMapper(); - node = mapper.convertValue(this, JsonNode.class); - } - catch (Exception e) - { - logger.error("{} {} Error creating JsonString for Contrail Policy Ref: ", MessageEnum.RA_MARSHING_ERROR, - ErrorCode.SchemaError.getValue(), e); - } - - return node; - } - - public String toJsonString() - { - String jsonString = null; - try - { - ObjectMapper mapper = new ObjectMapper(); - jsonString = mapper.writeValueAsString(this); - } - catch (Exception e) - { - logger.error("{} {} Error creating JsonString for Contrail Policy Ref: ", MessageEnum.RA_MARSHING_ERROR, - ErrorCode.SchemaError.getValue(), e); - } - - return jsonString; - } - - public void populate(String major, String minor) - { - seq = new ContrailPolicyRefSeq(major, minor); - return; - } - + + @JsonProperty("network_policy_refs_data_sequence") + private ContrailPolicyRefSeq seq; + + public JsonNode toJsonNode() { + JsonNode node = null; + try { + ObjectMapper mapper = new ObjectMapper(); + node = mapper.convertValue(this, JsonNode.class); + } catch (Exception e) { + logger.error("{} {} Error creating JsonString for Contrail Policy Ref: ", MessageEnum.RA_MARSHING_ERROR, + ErrorCode.SchemaError.getValue(), e); + } + + return node; + } + + public String toJsonString() { + String jsonString = null; + try { + ObjectMapper mapper = new ObjectMapper(); + jsonString = mapper.writeValueAsString(this); + } catch (Exception e) { + logger.error("{} {} Error creating JsonString for Contrail Policy Ref: ", MessageEnum.RA_MARSHING_ERROR, + ErrorCode.SchemaError.getValue(), e); + } + + return jsonString; + } + + public void populate(String major, String minor) { + seq = new ContrailPolicyRefSeq(major, minor); + return; + } + } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailPolicyRefSeq.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailPolicyRefSeq.java index 17d4a743dc..d5ea301dd3 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailPolicyRefSeq.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailPolicyRefSeq.java @@ -24,43 +24,42 @@ package org.onap.so.adapters.network; import com.fasterxml.jackson.annotation.JsonProperty; public class ContrailPolicyRefSeq { - - @JsonProperty("network_policy_refs_data_sequence_major") - private String major; - - @JsonProperty("network_policy_refs_data_sequence_minor") - private String minor; - public ContrailPolicyRefSeq() { - /* To be done */ - } - - public ContrailPolicyRefSeq(String major, String minor) { - super(); - this.major = major; - this.minor = minor; - } + @JsonProperty("network_policy_refs_data_sequence_major") + private String major; - public String getMajor() { - return major; - } + @JsonProperty("network_policy_refs_data_sequence_minor") + private String minor; - public void setMajor(String major) { - this.major = major; - } + public ContrailPolicyRefSeq() { + /* To be done */ + } - public String getMinor() { - return minor; - } + public ContrailPolicyRefSeq(String major, String minor) { + super(); + this.major = major; + this.minor = minor; + } - public void setMinor(String minor) { - this.minor = minor; - } + public String getMajor() { + return major; + } - @Override - public String toString() { - return "ContrailPolicyRefSeq [major=" + major + ", minor=" + minor - + "]"; - } + public void setMajor(String major) { + this.major = major; + } + + public String getMinor() { + return minor; + } + + public void setMinor(String minor) { + this.minor = minor; + } + + @Override + public String toString() { + return "ContrailPolicyRefSeq [major=" + major + ", minor=" + minor + "]"; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnet.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnet.java index 2662cef16e..0c55bd6945 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnet.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnet.java @@ -27,7 +27,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.List; - import org.onap.so.logger.ErrorCode; import org.onap.so.logger.MessageEnum; import org.onap.so.openstack.beans.HostRoute; @@ -41,178 +40,161 @@ import org.springframework.beans.factory.annotation.Autowired; public class ContrailSubnet { private static final Logger logger = LoggerFactory.getLogger(ContrailSubnet.class); - @Autowired - private MsoCommonUtils msoCommonUtils; - - @JsonProperty("network_ipam_refs_data_ipam_subnets_subnet") - private ContrailSubnetIp subnet = new ContrailSubnetIp(); - - @JsonProperty("network_ipam_refs_data_ipam_subnets_default_gateway") - private String defaultGateway; - - @JsonProperty("network_ipam_refs_data_ipam_subnets_subnet_name") - private String subnetName; - - @JsonProperty("network_ipam_refs_data_ipam_subnets_enable_dhcp") - private Boolean enableDhcp; - - @JsonProperty("network_ipam_refs_data_ipam_subnets_addr_from_start") - private Boolean addrFromStart = true; - /** future - leave this commented - private String subnet_uuid; - private String dns_server_address; - private List<String> dns_nameservers; - private String dhcp_option_list; - **/ - - @JsonProperty("network_ipam_refs_data_ipam_subnets_allocation_pools") - private List<ContrailSubnetPool> allocationPools = new ArrayList <> (); - - @JsonProperty("network_ipam_refs_data_ipam_subnets_host_routes") - private final ContrailSubnetHostRoutes host_routes = new ContrailSubnetHostRoutes(); - - public ContrailSubnet() { - super(); - } - - public String getDefaultGateway() { - return defaultGateway; - } - - public void setDefaultGateway(String defaultGateway) { - this.defaultGateway = defaultGateway; - } - - public ContrailSubnetIp getSubnet() { - return subnet; - } - - public void setSubnet(ContrailSubnetIp subnet) { - this.subnet = subnet; - } - - public Boolean isEnableDhcp() { - return enableDhcp; - } - - public void setEnableDhcp(Boolean enableDhcp) { - this.enableDhcp = enableDhcp; - } - - public String getSubnetName() { - return subnetName; - } - - public void setSubnetName(String subnetName) { - this.subnetName = subnetName; - } - - public List<ContrailSubnetPool> getAllocationPools() { - return allocationPools; - } - - public void setPools(List<ContrailSubnetPool> allocationPools) { - this.allocationPools = allocationPools; - } - - public Boolean isAddrFromStart() { - return addrFromStart; - } - - public void setAddrFromStart(Boolean addrFromStart) { - this.addrFromStart = addrFromStart; - } - - public JsonNode toJsonNode() - { - JsonNode node = null; - try - { - ObjectMapper mapper = new ObjectMapper(); - node = mapper.convertValue(this, JsonNode.class); - } - catch (Exception e) - { - logger.error("{} {} Error creating JsonNode for Contrail Subnet: {} ", MessageEnum.RA_MARSHING_ERROR, - ErrorCode.SchemaError.getValue(), subnetName, e); - } - - return node; - } - - public String toJsonString() - { - String jsonString = null; - try - { - ObjectMapper mapper = new ObjectMapper(); - jsonString = mapper.writeValueAsString(this); - } - catch (Exception e) - { - logger.error("{} {} Error creating JsonString for Contrail Subnet: {} ", MessageEnum.RA_MARSHING_ERROR, - ErrorCode.SchemaError.getValue(), subnetName, e); - } - - return jsonString; - } - //poulate contrail subnet with input(from bopel) subnet - public void populateWith(Subnet inputSubnet) - { - if (inputSubnet != null) - { - if (!msoCommonUtils.isNullOrEmpty(inputSubnet.getSubnetName())) - subnetName = inputSubnet.getSubnetName(); - else - subnetName = inputSubnet.getSubnetId(); - enableDhcp = inputSubnet.getEnableDHCP(); - defaultGateway = inputSubnet.getGatewayIp(); - if (!msoCommonUtils.isNullOrEmpty(inputSubnet.getCidr()) ) - { - int idx = inputSubnet.getCidr().indexOf("/"); - if (idx != -1) - { - subnet.setIpPrefix(inputSubnet.getCidr().substring(0, idx)); - subnet.setIpPrefixLen(inputSubnet.getCidr().substring(idx+1)); - } - } - if (inputSubnet.getAllocationPools() != null) - { - for (Pool pool : inputSubnet.getAllocationPools()) - { - if ( !msoCommonUtils.isNullOrEmpty(pool.getStart()) && !msoCommonUtils.isNullOrEmpty(pool.getEnd()) ) - { - ContrailSubnetPool csp = new ContrailSubnetPool(); - csp.populateWith(pool); - allocationPools.add (csp); - } - } - } - if (inputSubnet.getHostRoutes() != null) - { - List<ContrailSubnetHostRoute> hrList = host_routes.getHost_routes(); - for (HostRoute hr : inputSubnet.getHostRoutes()) - { - if ( !msoCommonUtils.isNullOrEmpty(hr.getPrefix()) || !msoCommonUtils.isNullOrEmpty(hr.getNextHop()) ) - { - ContrailSubnetHostRoute cshr = new ContrailSubnetHostRoute(); - cshr.populateWith(hr); - hrList.add (cshr); - } - } - } - } - } - - @Override - public String toString() { - StringBuilder buf = new StringBuilder (); - for (ContrailSubnetPool pool : allocationPools) - { - buf.append(pool.toString()); - } - return "ContrailSubnet [subnet=" + subnet.toString() + " default_gateway=" + defaultGateway - + " enable_dhcp=" + enableDhcp + " addr_from_start=" + addrFromStart + " subnet_name=" + subnetName + " allocation_pools=" + buf + " ]"; - } + @Autowired + private MsoCommonUtils msoCommonUtils; + + @JsonProperty("network_ipam_refs_data_ipam_subnets_subnet") + private ContrailSubnetIp subnet = new ContrailSubnetIp(); + + @JsonProperty("network_ipam_refs_data_ipam_subnets_default_gateway") + private String defaultGateway; + + @JsonProperty("network_ipam_refs_data_ipam_subnets_subnet_name") + private String subnetName; + + @JsonProperty("network_ipam_refs_data_ipam_subnets_enable_dhcp") + private Boolean enableDhcp; + + @JsonProperty("network_ipam_refs_data_ipam_subnets_addr_from_start") + private Boolean addrFromStart = true; + /** + * future - leave this commented private String subnet_uuid; private String dns_server_address; private List<String> + * dns_nameservers; private String dhcp_option_list; + **/ + + @JsonProperty("network_ipam_refs_data_ipam_subnets_allocation_pools") + private List<ContrailSubnetPool> allocationPools = new ArrayList<>(); + + @JsonProperty("network_ipam_refs_data_ipam_subnets_host_routes") + private final ContrailSubnetHostRoutes host_routes = new ContrailSubnetHostRoutes(); + + public ContrailSubnet() { + super(); + } + + public String getDefaultGateway() { + return defaultGateway; + } + + public void setDefaultGateway(String defaultGateway) { + this.defaultGateway = defaultGateway; + } + + public ContrailSubnetIp getSubnet() { + return subnet; + } + + public void setSubnet(ContrailSubnetIp subnet) { + this.subnet = subnet; + } + + public Boolean isEnableDhcp() { + return enableDhcp; + } + + public void setEnableDhcp(Boolean enableDhcp) { + this.enableDhcp = enableDhcp; + } + + public String getSubnetName() { + return subnetName; + } + + public void setSubnetName(String subnetName) { + this.subnetName = subnetName; + } + + public List<ContrailSubnetPool> getAllocationPools() { + return allocationPools; + } + + public void setPools(List<ContrailSubnetPool> allocationPools) { + this.allocationPools = allocationPools; + } + + public Boolean isAddrFromStart() { + return addrFromStart; + } + + public void setAddrFromStart(Boolean addrFromStart) { + this.addrFromStart = addrFromStart; + } + + public JsonNode toJsonNode() { + JsonNode node = null; + try { + ObjectMapper mapper = new ObjectMapper(); + node = mapper.convertValue(this, JsonNode.class); + } catch (Exception e) { + logger.error("{} {} Error creating JsonNode for Contrail Subnet: {} ", MessageEnum.RA_MARSHING_ERROR, + ErrorCode.SchemaError.getValue(), subnetName, e); + } + + return node; + } + + public String toJsonString() { + String jsonString = null; + try { + ObjectMapper mapper = new ObjectMapper(); + jsonString = mapper.writeValueAsString(this); + } catch (Exception e) { + logger.error("{} {} Error creating JsonString for Contrail Subnet: {} ", MessageEnum.RA_MARSHING_ERROR, + ErrorCode.SchemaError.getValue(), subnetName, e); + } + + return jsonString; + } + + // poulate contrail subnet with input(from bopel) subnet + public void populateWith(Subnet inputSubnet) { + if (inputSubnet != null) { + if (!msoCommonUtils.isNullOrEmpty(inputSubnet.getSubnetName())) + subnetName = inputSubnet.getSubnetName(); + else + subnetName = inputSubnet.getSubnetId(); + enableDhcp = inputSubnet.getEnableDHCP(); + defaultGateway = inputSubnet.getGatewayIp(); + if (!msoCommonUtils.isNullOrEmpty(inputSubnet.getCidr())) { + int idx = inputSubnet.getCidr().indexOf("/"); + if (idx != -1) { + subnet.setIpPrefix(inputSubnet.getCidr().substring(0, idx)); + subnet.setIpPrefixLen(inputSubnet.getCidr().substring(idx + 1)); + } + } + if (inputSubnet.getAllocationPools() != null) { + for (Pool pool : inputSubnet.getAllocationPools()) { + if (!msoCommonUtils.isNullOrEmpty(pool.getStart()) + && !msoCommonUtils.isNullOrEmpty(pool.getEnd())) { + ContrailSubnetPool csp = new ContrailSubnetPool(); + csp.populateWith(pool); + allocationPools.add(csp); + } + } + } + if (inputSubnet.getHostRoutes() != null) { + List<ContrailSubnetHostRoute> hrList = host_routes.getHost_routes(); + for (HostRoute hr : inputSubnet.getHostRoutes()) { + if (!msoCommonUtils.isNullOrEmpty(hr.getPrefix()) + || !msoCommonUtils.isNullOrEmpty(hr.getNextHop())) { + ContrailSubnetHostRoute cshr = new ContrailSubnetHostRoute(); + cshr.populateWith(hr); + hrList.add(cshr); + } + } + } + } + } + + @Override + public String toString() { + StringBuilder buf = new StringBuilder(); + for (ContrailSubnetPool pool : allocationPools) { + buf.append(pool.toString()); + } + return "ContrailSubnet [subnet=" + subnet.toString() + " default_gateway=" + defaultGateway + " enable_dhcp=" + + enableDhcp + " addr_from_start=" + addrFromStart + " subnet_name=" + subnetName + " allocation_pools=" + + buf + " ]"; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetHostRoute.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetHostRoute.java index d938306c48..32f85ddf60 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetHostRoute.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetHostRoute.java @@ -23,45 +23,43 @@ package org.onap.so.adapters.network; import org.onap.so.openstack.beans.HostRoute; import com.fasterxml.jackson.annotation.JsonProperty; + public class ContrailSubnetHostRoute { - - @JsonProperty("network_ipam_refs_data_ipam_subnets_host_routes_route_prefix") - private String prefix; - - @JsonProperty("network_ipam_refs_data_ipam_subnets_host_routes_route_next_hop") - private String nextHop; - public ContrailSubnetHostRoute() { - } + @JsonProperty("network_ipam_refs_data_ipam_subnets_host_routes_route_prefix") + private String prefix; + + @JsonProperty("network_ipam_refs_data_ipam_subnets_host_routes_route_next_hop") + private String nextHop; + + public ContrailSubnetHostRoute() {} + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } - public String getPrefix() { - return prefix; - } + public String getNextHop() { + return nextHop; + } - public void setPrefix(String prefix) { - this.prefix = prefix; - } + public void setNextHop(String nextHop) { + this.nextHop = nextHop; + } - public String getNextHop() { - return nextHop; - } + public void populateWith(HostRoute hostRoute) { + if (hostRoute != null) { + prefix = hostRoute.getPrefix(); + nextHop = hostRoute.getNextHop(); + } + } - public void setNextHop(String nextHop) { - this.nextHop = nextHop; - } - - public void populateWith(HostRoute hostRoute) - { - if (hostRoute != null) - { - prefix = hostRoute.getPrefix(); - nextHop = hostRoute.getNextHop(); - } - } + @Override + public String toString() { + return "ContrailSubnetHostRoute [prefix=" + prefix + ", nextHop=" + nextHop + "]"; + } - @Override - public String toString() { - return "ContrailSubnetHostRoute [prefix=" + prefix + ", nextHop=" + nextHop + "]"; - } - } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetHostRoutes.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetHostRoutes.java index 12744a4273..76881bd58b 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetHostRoutes.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetHostRoutes.java @@ -24,34 +24,31 @@ package org.onap.so.adapters.network; import java.util.ArrayList; import java.util.List; - import com.fasterxml.jackson.annotation.JsonProperty; + public class ContrailSubnetHostRoutes { - - @JsonProperty("network_ipam_refs_data_ipam_subnets_host_routes_route") - private List<ContrailSubnetHostRoute> host_routes = new ArrayList <ContrailSubnetHostRoute> (); - - public ContrailSubnetHostRoutes() { - } - - public List<ContrailSubnetHostRoute> getHost_routes() { - return host_routes; - } - - public void setHost_routes(List<ContrailSubnetHostRoute> host_routes) { - this.host_routes = host_routes; - } - - @Override - public String toString() { - StringBuilder buf = new StringBuilder (); - if (host_routes != null) - { - for (ContrailSubnetHostRoute hr : host_routes) - { - buf.append(hr.toString()); - } - } - return "ContrailSubnetHostRoutes [" + buf.toString() + "]"; - } + + @JsonProperty("network_ipam_refs_data_ipam_subnets_host_routes_route") + private List<ContrailSubnetHostRoute> host_routes = new ArrayList<ContrailSubnetHostRoute>(); + + public ContrailSubnetHostRoutes() {} + + public List<ContrailSubnetHostRoute> getHost_routes() { + return host_routes; + } + + public void setHost_routes(List<ContrailSubnetHostRoute> host_routes) { + this.host_routes = host_routes; + } + + @Override + public String toString() { + StringBuilder buf = new StringBuilder(); + if (host_routes != null) { + for (ContrailSubnetHostRoute hr : host_routes) { + buf.append(hr.toString()); + } + } + return "ContrailSubnetHostRoutes [" + buf.toString() + "]"; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetIp.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetIp.java index 91d089eb33..a00a1eb5ea 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetIp.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetIp.java @@ -24,36 +24,36 @@ package org.onap.so.adapters.network; import com.fasterxml.jackson.annotation.JsonProperty; public class ContrailSubnetIp { - - @JsonProperty("network_ipam_refs_data_ipam_subnets_subnet_ip_prefix") - private String ipPrefix; - - @JsonProperty("network_ipam_refs_data_ipam_subnets_subnet_ip_prefix_len") - private String ipPrefixLen; - - public ContrailSubnetIp() { - /* Empty constructor */ - } - - public String getIpPrefix() { - return ipPrefix; - } - - public void setIpPrefix(String ipPrefix) { - this.ipPrefix = ipPrefix; - } - - public String getIpPrefixLen() { - return ipPrefixLen; - } - - public void setIpPrefixLen(String ipPrefixLen) { - this.ipPrefixLen = ipPrefixLen; - } - - @Override - public String toString() { - return "ContrailSubnetIp [ip_prefix=" + ipPrefix + ", ip_prefix_len=" + ipPrefixLen + "]"; - } + + @JsonProperty("network_ipam_refs_data_ipam_subnets_subnet_ip_prefix") + private String ipPrefix; + + @JsonProperty("network_ipam_refs_data_ipam_subnets_subnet_ip_prefix_len") + private String ipPrefixLen; + + public ContrailSubnetIp() { + /* Empty constructor */ + } + + public String getIpPrefix() { + return ipPrefix; + } + + public void setIpPrefix(String ipPrefix) { + this.ipPrefix = ipPrefix; + } + + public String getIpPrefixLen() { + return ipPrefixLen; + } + + public void setIpPrefixLen(String ipPrefixLen) { + this.ipPrefixLen = ipPrefixLen; + } + + @Override + public String toString() { + return "ContrailSubnetIp [ip_prefix=" + ipPrefix + ", ip_prefix_len=" + ipPrefixLen + "]"; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetPool.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetPool.java index 710d0cc8fd..edba780318 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetPool.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/ContrailSubnetPool.java @@ -23,46 +23,45 @@ package org.onap.so.adapters.network; import org.onap.so.openstack.beans.Pool; import com.fasterxml.jackson.annotation.JsonProperty; + public class ContrailSubnetPool { - - @JsonProperty("network_ipam_refs_data_ipam_subnets_allocation_pools_start") - private String start; - - @JsonProperty("network_ipam_refs_data_ipam_subnets_allocation_pools_end") - private String end; - public ContrailSubnetPool() { - /* Empty constructor */ - } + @JsonProperty("network_ipam_refs_data_ipam_subnets_allocation_pools_start") + private String start; + + @JsonProperty("network_ipam_refs_data_ipam_subnets_allocation_pools_end") + private String end; + + public ContrailSubnetPool() { + /* Empty constructor */ + } + + public String getStart() { + return start; + } + + public void setStart(String start) { + this.start = start; + } - public String getStart() { - return start; - } + public String getEnd() { + return end; + } - public void setStart(String start) { - this.start = start; - } + public void setEnd(String end) { + this.end = end; + } - public String getEnd() { - return end; - } + public void populateWith(Pool pool) { + if (pool != null) { + start = pool.getStart(); + end = pool.getEnd(); + } + } - public void setEnd(String end) { - this.end = end; - } - - public void populateWith(Pool pool) - { - if (pool != null) - { - start = pool.getStart(); - end = pool.getEnd(); - } - } + @Override + public String toString() { + return "ContrailSubnetPool [start=" + start + ", end=" + end + "]"; + } - @Override - public String toString() { - return "ContrailSubnetPool [start=" + start + ", end=" + end + "]"; - } - } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapter.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapter.java index 6e2fcb02c9..302a6d302b 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapter.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapter.java @@ -23,14 +23,12 @@ package org.onap.so.adapters.network; import java.util.List; import java.util.Map; - import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebParam.Mode; import javax.jws.WebService; import javax.xml.bind.annotation.XmlElement; import javax.xml.ws.Holder; - import org.onap.so.adapters.network.exceptions.NetworkException; import org.onap.so.entity.MsoRequest; import org.onap.so.openstack.beans.NetworkRollback; @@ -38,193 +36,170 @@ import org.onap.so.openstack.beans.NetworkStatus; import org.onap.so.openstack.beans.RouteTarget; import org.onap.so.openstack.beans.Subnet; -@WebService (name="NetworkAdapter", targetNamespace="http://org.onap.so/network") -public interface MsoNetworkAdapter -{ - // TODO: Rename all of these to include Vlan in the service name? At least for the - // create and update calls, since they are specific to VLAN-based provider networks. - - /** - * This is the "Create Network" Web Service Endpoint definition. - */ - @WebMethod - public void createNetwork (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkType") @XmlElement(required=true) String networkType, - @WebParam(name="modelCustomizationUuid") String modelCustomizationUuid, - @WebParam(name="networkName") @XmlElement(required=true) String networkName, - @WebParam(name="physicalNetworkName") String physicalNetworkName, - @WebParam(name="vlans") List<Integer> vlans, - @WebParam(name="shared") String shared, - @WebParam(name="external") String external, - @WebParam(name="failIfExists") Boolean failIfExists, - @WebParam(name="backout") Boolean backout, - @WebParam(name="subnets") List<Subnet> subnets, - @WebParam(name="networkParams") Map<String, String> networkParams, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="networkId", mode=Mode.OUT) Holder<String> networkId, - @WebParam(name="neutronNetworkId", mode=Mode.OUT) Holder<String> neutronNetworkId, - @WebParam(name="subnetIdMap", mode=Mode.OUT) Holder<Map<String, String>> subnetIdMap, - @WebParam(name="rollback", mode=Mode.OUT) Holder<NetworkRollback> rollback ) - throws NetworkException; - - @WebMethod - public void createNetworkContrail (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkType") @XmlElement(required=true) String networkType, - @WebParam(name="modelCustomizationUuid") String modelCustomizationUuid, - @WebParam(name="networkName") @XmlElement(required=true) String networkName, - @WebParam(name="routeTargets") List<RouteTarget> routeTargets, - @WebParam(name="shared") String shared, - @WebParam(name="external") String external, - @WebParam(name="failIfExists") Boolean failIfExists, - @WebParam(name="backout") Boolean backout, - @WebParam(name="subnets") List<Subnet> subnets, - @WebParam(name="networkParams") Map<String, String> networkParams, - @WebParam(name="policyFqdns") List<String> policyFqdns, - @WebParam(name="routeTableFqdns") List<String> routeTableFqdns, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="networkId", mode=Mode.OUT) Holder<String> networkId, - @WebParam(name="neutronNetworkId", mode=Mode.OUT) Holder<String> neutronNetworkId, - @WebParam(name="networkFqdn", mode=Mode.OUT) Holder<String> networkFqdn, - @WebParam(name="subnetIdMap", mode=Mode.OUT) Holder<Map<String, String>> subnetIdMap, - @WebParam(name="rollback", mode=Mode.OUT) Holder<NetworkRollback> rollback ) - throws NetworkException; - - /** - * This is the "Update VLANs" Web Service Endpoint definition. - * This webservice replaces the set of VLANs on a network. - */ - @WebMethod - public void updateNetwork (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkType") @XmlElement(required=true) String networkType, - @WebParam(name="modelCustomizationUuid") String modelCustomizationUuid, - @WebParam(name="networkId") @XmlElement(required=true) String networkId, - @WebParam(name="networkName") @XmlElement(required=true) String networkName, - @WebParam(name="physicalNetworkName") @XmlElement(required=true) String physicalNetworkName, - @WebParam(name="vlans") @XmlElement(required=true) List<Integer> vlans, - @WebParam(name="shared") String shared, - @WebParam(name="external") String external, - @WebParam(name="subnets") List<Subnet> subnets, - @WebParam(name="networkParams") Map<String,String> networkParams, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="subnetIdMap", mode=Mode.OUT) Holder<Map<String, String>> subnetIdMap, - @WebParam(name="rollback", mode=Mode.OUT) Holder<NetworkRollback> rollback ) - throws NetworkException; - - @WebMethod - public void updateNetworkContrail (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkType") @XmlElement(required=true) String networkType, - @WebParam(name="modelCustomizationUuid") String modelCustomizationUuid, - @WebParam(name="networkId") @XmlElement(required=true) String networkId, - @WebParam(name="networkName") @XmlElement(required=true) String networkName, - @WebParam(name="routeTargets") List<RouteTarget> routeTargets, - @WebParam(name="shared") String shared, - @WebParam(name="external") String external, - @WebParam(name="subnets") List<Subnet> subnets, - @WebParam(name="networkParams") Map<String,String> networkParams, - @WebParam(name="policyFqdns") List<String> policyFqdns, - @WebParam(name="routeTableFqdns") List<String> routeTableFqdns, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="subnetIdMap", mode=Mode.OUT) Holder<Map<String, String>> subnetIdMap, - @WebParam(name="rollback", mode=Mode.OUT) Holder<NetworkRollback> rollback ) - throws NetworkException; - - /** - * TODO: - * This is the "Add VLAN" Web Service Endpoint definition. - * This webservice adds a VLAN to a network. - * This service assumes that PO supports querying the current vlans in real time. - * Otherwise, the caller must have the complete list and should use updateVlans instead. - @WebMethod - public void addVlan (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkType") @XmlElement(required=true) String networkType, - @WebParam(name="networkId") @XmlElement(required=true) String networkId, - @WebParam(name="physicalNetworkName") @XmlElement(required=true) String physicalNetworkName, - @WebParam(name="vlan") @XmlElement(required=true) Integer vlan, - @WebParam(name="rollback", mode=Mode.OUT) Holder<NetworkRollback> rollback ) - throws NetworkException; - */ - - /** - * TODO: - * This is the "Remove VLAN" Web Service Endpoint definition. - * This webservice removes a VLAN from a network. - * This service assumes that PO supports querying the current vlans in real time. - * Otherwise, the caller must have the complete list and should use updateVlans instead. - * - * This service returns an indicator (noMoreVLans) if the VLAN that was removed was - * the last one on the network. - * - * It is not clear that Rollback will work for delete. The network can be - * recreated from the NetworkRollback object, but the network ID (and stack ID - * for Heat-based orchestration) will be different. The caller will need to know - * to update these identifiers in the inventory DB (A&AI). - @WebMethod - public void removeVlan (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkType") @XmlElement(required=true) String networkType, - @WebParam(name="networkId") @XmlElement(required=true) String networkId, - @WebParam(name="physicalNetworkName") @XmlElement(required=true) String physicalNetworkName, - @WebParam(name="vlan") @XmlElement(required=true) Integer vlan, - @WebParam(name="noMoreVlans", mode=Mode.OUT) Holder<Boolean> noMoreVlans, - @WebParam(name="rollback", mode=Mode.OUT) Holder<NetworkRollback> rollback ) - throws NetworkException; - */ - - /** - * This is the "Query Network" Web Service Endpoint definition. - * TODO: Should this just return the NetworkInfo complete structure? - */ - @WebMethod - public void queryNetwork (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkNameOrId") @XmlElement(required=true) String networkNameOrId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="networkExists", mode=Mode.OUT) Holder<Boolean> networkExists, - @WebParam(name="networkId", mode=Mode.OUT) Holder<String> networkId, - @WebParam(name="neutronNetworkId", mode=Mode.OUT) Holder<String> neutronNetworkId, - @WebParam(name="status", mode=Mode.OUT) Holder<NetworkStatus> status, - @WebParam(name="vlans", mode=Mode.OUT) Holder<List<Integer>> vlans, - @WebParam(name="subnetIdMap", mode=Mode.OUT) Holder<Map<String, String>> subnetIdMap) - throws NetworkException; - - @WebMethod - public void queryNetworkContrail (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkNameOrId") @XmlElement(required=true) String networkNameOrId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="networkExists", mode=Mode.OUT) Holder<Boolean> networkExists, - @WebParam(name="networkId", mode=Mode.OUT) Holder<String> networkId, - @WebParam(name="neutronNetworkId", mode=Mode.OUT) Holder<String> neutronNetworkId, - @WebParam(name="status", mode=Mode.OUT) Holder<NetworkStatus> status, - @WebParam(name="routeTargets", mode=Mode.OUT) Holder<List<RouteTarget>> routeTargets, - @WebParam(name="subnetIdMap", mode=Mode.OUT) Holder<Map<String, String>> subnetIdMap) - throws NetworkException; - - /** - * This is the "Delete Network" Web Service endpoint definition. - */ - @WebMethod - public void deleteNetwork (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkType") @XmlElement(required=true) String networkType, - @WebParam(name="modelCustomizationUuid") String modelCustomizationUuid, - @WebParam(name="networkId") @XmlElement(required=true) String networkId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="networkDeleted", mode=Mode.OUT) Holder<Boolean> networkDeleted) - throws NetworkException; - - /** - * This is the "Rollback Network" Web Service endpoint definition. - */ - @WebMethod - public void rollbackNetwork (@WebParam(name="rollback") @XmlElement(required=true) NetworkRollback rollback) - throws NetworkException; - - @WebMethod - public void healthCheck (); +@WebService(name = "NetworkAdapter", targetNamespace = "http://org.onap.so/network") +public interface MsoNetworkAdapter { + // TODO: Rename all of these to include Vlan in the service name? At least for the + // create and update calls, since they are specific to VLAN-based provider networks. + + /** + * This is the "Create Network" Web Service Endpoint definition. + */ + @WebMethod + public void createNetwork(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkType") @XmlElement(required = true) String networkType, + @WebParam(name = "modelCustomizationUuid") String modelCustomizationUuid, + @WebParam(name = "networkName") @XmlElement(required = true) String networkName, + @WebParam(name = "physicalNetworkName") String physicalNetworkName, + @WebParam(name = "vlans") List<Integer> vlans, @WebParam(name = "shared") String shared, + @WebParam(name = "external") String external, @WebParam(name = "failIfExists") Boolean failIfExists, + @WebParam(name = "backout") Boolean backout, @WebParam(name = "subnets") List<Subnet> subnets, + @WebParam(name = "networkParams") Map<String, String> networkParams, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "networkId", mode = Mode.OUT) Holder<String> networkId, + @WebParam(name = "neutronNetworkId", mode = Mode.OUT) Holder<String> neutronNetworkId, + @WebParam(name = "subnetIdMap", mode = Mode.OUT) Holder<Map<String, String>> subnetIdMap, + @WebParam(name = "rollback", mode = Mode.OUT) Holder<NetworkRollback> rollback) throws NetworkException; + + @WebMethod + public void createNetworkContrail(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkType") @XmlElement(required = true) String networkType, + @WebParam(name = "modelCustomizationUuid") String modelCustomizationUuid, + @WebParam(name = "networkName") @XmlElement(required = true) String networkName, + @WebParam(name = "routeTargets") List<RouteTarget> routeTargets, @WebParam(name = "shared") String shared, + @WebParam(name = "external") String external, @WebParam(name = "failIfExists") Boolean failIfExists, + @WebParam(name = "backout") Boolean backout, @WebParam(name = "subnets") List<Subnet> subnets, + @WebParam(name = "networkParams") Map<String, String> networkParams, + @WebParam(name = "policyFqdns") List<String> policyFqdns, + @WebParam(name = "routeTableFqdns") List<String> routeTableFqdns, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "networkId", mode = Mode.OUT) Holder<String> networkId, + @WebParam(name = "neutronNetworkId", mode = Mode.OUT) Holder<String> neutronNetworkId, + @WebParam(name = "networkFqdn", mode = Mode.OUT) Holder<String> networkFqdn, + @WebParam(name = "subnetIdMap", mode = Mode.OUT) Holder<Map<String, String>> subnetIdMap, + @WebParam(name = "rollback", mode = Mode.OUT) Holder<NetworkRollback> rollback) throws NetworkException; + + /** + * This is the "Update VLANs" Web Service Endpoint definition. This webservice replaces the set of VLANs on a + * network. + */ + @WebMethod + public void updateNetwork(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkType") @XmlElement(required = true) String networkType, + @WebParam(name = "modelCustomizationUuid") String modelCustomizationUuid, + @WebParam(name = "networkId") @XmlElement(required = true) String networkId, + @WebParam(name = "networkName") @XmlElement(required = true) String networkName, + @WebParam(name = "physicalNetworkName") @XmlElement(required = true) String physicalNetworkName, + @WebParam(name = "vlans") @XmlElement(required = true) List<Integer> vlans, + @WebParam(name = "shared") String shared, @WebParam(name = "external") String external, + @WebParam(name = "subnets") List<Subnet> subnets, + @WebParam(name = "networkParams") Map<String, String> networkParams, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "subnetIdMap", mode = Mode.OUT) Holder<Map<String, String>> subnetIdMap, + @WebParam(name = "rollback", mode = Mode.OUT) Holder<NetworkRollback> rollback) throws NetworkException; + + @WebMethod + public void updateNetworkContrail(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkType") @XmlElement(required = true) String networkType, + @WebParam(name = "modelCustomizationUuid") String modelCustomizationUuid, + @WebParam(name = "networkId") @XmlElement(required = true) String networkId, + @WebParam(name = "networkName") @XmlElement(required = true) String networkName, + @WebParam(name = "routeTargets") List<RouteTarget> routeTargets, @WebParam(name = "shared") String shared, + @WebParam(name = "external") String external, @WebParam(name = "subnets") List<Subnet> subnets, + @WebParam(name = "networkParams") Map<String, String> networkParams, + @WebParam(name = "policyFqdns") List<String> policyFqdns, + @WebParam(name = "routeTableFqdns") List<String> routeTableFqdns, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "subnetIdMap", mode = Mode.OUT) Holder<Map<String, String>> subnetIdMap, + @WebParam(name = "rollback", mode = Mode.OUT) Holder<NetworkRollback> rollback) throws NetworkException; + + /** + * TODO: This is the "Add VLAN" Web Service Endpoint definition. This webservice adds a VLAN to a network. This + * service assumes that PO supports querying the current vlans in real time. Otherwise, the caller must have the + * complete list and should use updateVlans instead. + * + * @WebMethod public void addVlan (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, + * @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, + * @WebParam(name="networkType") @XmlElement(required=true) String networkType, + * @WebParam(name="networkId") @XmlElement(required=true) String networkId, + * @WebParam(name="physicalNetworkName") @XmlElement(required=true) String physicalNetworkName, + * @WebParam(name="vlan") @XmlElement(required=true) Integer vlan, + * @WebParam(name="rollback", mode=Mode.OUT) Holder<NetworkRollback> rollback ) throws NetworkException; + */ + + /** + * TODO: This is the "Remove VLAN" Web Service Endpoint definition. This webservice removes a VLAN from a network. + * This service assumes that PO supports querying the current vlans in real time. Otherwise, the caller must have + * the complete list and should use updateVlans instead. + * + * This service returns an indicator (noMoreVLans) if the VLAN that was removed was the last one on the network. + * + * It is not clear that Rollback will work for delete. The network can be recreated from the NetworkRollback object, + * but the network ID (and stack ID for Heat-based orchestration) will be different. The caller will need to know to + * update these identifiers in the inventory DB (A&AI). + * + * @WebMethod public void removeVlan (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, + * @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, + * @WebParam(name="networkType") @XmlElement(required=true) String networkType, + * @WebParam(name="networkId") @XmlElement(required=true) String networkId, + * @WebParam(name="physicalNetworkName") @XmlElement(required=true) String physicalNetworkName, + * @WebParam(name="vlan") @XmlElement(required=true) Integer vlan, + * @WebParam(name="noMoreVlans", mode=Mode.OUT) Holder<Boolean> noMoreVlans, + * @WebParam(name="rollback", mode=Mode.OUT) Holder<NetworkRollback> rollback ) throws NetworkException; + */ + + /** + * This is the "Query Network" Web Service Endpoint definition. TODO: Should this just return the NetworkInfo + * complete structure? + */ + @WebMethod + public void queryNetwork(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkNameOrId") @XmlElement(required = true) String networkNameOrId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "networkExists", mode = Mode.OUT) Holder<Boolean> networkExists, + @WebParam(name = "networkId", mode = Mode.OUT) Holder<String> networkId, + @WebParam(name = "neutronNetworkId", mode = Mode.OUT) Holder<String> neutronNetworkId, + @WebParam(name = "status", mode = Mode.OUT) Holder<NetworkStatus> status, + @WebParam(name = "vlans", mode = Mode.OUT) Holder<List<Integer>> vlans, + @WebParam(name = "subnetIdMap", mode = Mode.OUT) Holder<Map<String, String>> subnetIdMap) + throws NetworkException; + + @WebMethod + public void queryNetworkContrail(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkNameOrId") @XmlElement(required = true) String networkNameOrId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "networkExists", mode = Mode.OUT) Holder<Boolean> networkExists, + @WebParam(name = "networkId", mode = Mode.OUT) Holder<String> networkId, + @WebParam(name = "neutronNetworkId", mode = Mode.OUT) Holder<String> neutronNetworkId, + @WebParam(name = "status", mode = Mode.OUT) Holder<NetworkStatus> status, + @WebParam(name = "routeTargets", mode = Mode.OUT) Holder<List<RouteTarget>> routeTargets, + @WebParam(name = "subnetIdMap", mode = Mode.OUT) Holder<Map<String, String>> subnetIdMap) + throws NetworkException; + + /** + * This is the "Delete Network" Web Service endpoint definition. + */ + @WebMethod + public void deleteNetwork(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkType") @XmlElement(required = true) String networkType, + @WebParam(name = "modelCustomizationUuid") String modelCustomizationUuid, + @WebParam(name = "networkId") @XmlElement(required = true) String networkId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "networkDeleted", mode = Mode.OUT) Holder<Boolean> networkDeleted) throws NetworkException; + + /** + * This is the "Rollback Network" Web Service endpoint definition. + */ + @WebMethod + public void rollbackNetwork(@WebParam(name = "rollback") @XmlElement(required = true) NetworkRollback rollback) + throws NetworkException; + + @WebMethod + public void healthCheck(); } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsync.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsync.java index a85da58536..5b7340e24f 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsync.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsync.java @@ -23,87 +23,82 @@ package org.onap.so.adapters.network; import java.util.List; import java.util.Map; - import javax.jws.Oneway; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.xml.bind.annotation.XmlElement; - import org.onap.so.entity.MsoRequest; import org.onap.so.openstack.beans.NetworkRollback; import org.onap.so.openstack.beans.Subnet; + /** - * This webservice defines the Asynchronous versions of NETWORK adapter calls. - * The notification messages for final responses are documented elsewhere - * (by the client service WSDL). + * This webservice defines the Asynchronous versions of NETWORK adapter calls. The notification messages for final + * responses are documented elsewhere (by the client service WSDL). * */ -@WebService (name="NetworkAdapterAsync", targetNamespace="http://org.onap.so/networkA") -public interface MsoNetworkAdapterAsync -{ - /** - * This is the "Create NETWORK" Web Service Endpoint definition. - */ - @WebMethod - @Oneway - public void createNetworkA (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkType") @XmlElement(required=true) String networkType, - @WebParam(name="modelCustomizationUuid") String modelCustomizationUuid, - @WebParam(name="networkName") @XmlElement(required=true) String networkName, - @WebParam(name="physicalNetworkName") String physicalNetworkName, - @WebParam(name="vlans") List<Integer> vlans, - @WebParam(name="failIfExists") Boolean failIfExists, - @WebParam(name="backout") Boolean backout, - @WebParam(name="subnets") List<Subnet> subnets, - @WebParam(name="networkParams") Map<String, String> networkParams, - @WebParam(name="messageId") @XmlElement(required=true) String messageId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); +@WebService(name = "NetworkAdapterAsync", targetNamespace = "http://org.onap.so/networkA") +public interface MsoNetworkAdapterAsync { + /** + * This is the "Create NETWORK" Web Service Endpoint definition. + */ + @WebMethod + @Oneway + public void createNetworkA(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkType") @XmlElement(required = true) String networkType, + @WebParam(name = "modelCustomizationUuid") String modelCustomizationUuid, + @WebParam(name = "networkName") @XmlElement(required = true) String networkName, + @WebParam(name = "physicalNetworkName") String physicalNetworkName, + @WebParam(name = "vlans") List<Integer> vlans, @WebParam(name = "failIfExists") Boolean failIfExists, + @WebParam(name = "backout") Boolean backout, @WebParam(name = "subnets") List<Subnet> subnets, + @WebParam(name = "networkParams") Map<String, String> networkParams, + @WebParam(name = "messageId") @XmlElement(required = true) String messageId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "notificationUrl") @XmlElement(required = true) String notificationUrl); - @WebMethod - @Oneway - public void updateNetworkA (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkType") @XmlElement(required=true) String networkType, - @WebParam(name="modelCustomizationUuid") String modelCustomizationUuid, - @WebParam(name="networkId") @XmlElement(required=true) String networkId, - @WebParam(name="networkName") @XmlElement(required=true) String networkName, - @WebParam(name="physicalNetworkName") @XmlElement(required=true) String physicalNetworkName, - @WebParam(name="vlans") @XmlElement(required=true) List<Integer> vlans, - @WebParam(name="subnets") List<Subnet> subnets, - @WebParam(name="networkParams") Map<String, String> networkParams, - @WebParam(name="messageId") @XmlElement(required=true) String messageId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); + @WebMethod + @Oneway + public void updateNetworkA(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkType") @XmlElement(required = true) String networkType, + @WebParam(name = "modelCustomizationUuid") String modelCustomizationUuid, + @WebParam(name = "networkId") @XmlElement(required = true) String networkId, + @WebParam(name = "networkName") @XmlElement(required = true) String networkName, + @WebParam(name = "physicalNetworkName") @XmlElement(required = true) String physicalNetworkName, + @WebParam(name = "vlans") @XmlElement(required = true) List<Integer> vlans, + @WebParam(name = "subnets") List<Subnet> subnets, + @WebParam(name = "networkParams") Map<String, String> networkParams, + @WebParam(name = "messageId") @XmlElement(required = true) String messageId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "notificationUrl") @XmlElement(required = true) String notificationUrl); - @WebMethod - @Oneway - public void queryNetworkA (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkNameOrId") @XmlElement(required=true) String networkNameOrId, - @WebParam(name="messageId") @XmlElement(required=true) String messageId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); + @WebMethod + @Oneway + public void queryNetworkA(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkNameOrId") @XmlElement(required = true) String networkNameOrId, + @WebParam(name = "messageId") @XmlElement(required = true) String messageId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "notificationUrl") @XmlElement(required = true) String notificationUrl); - @WebMethod - @Oneway - public void deleteNetworkA (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="networkType") @XmlElement(required=true) String networkType, - @WebParam(name="modelCustomizationUuid") String modelCustomizationUuid, - @WebParam(name="networkId") @XmlElement(required=true) String networkId, - @WebParam(name="messageId") @XmlElement(required=true) String messageId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); + @WebMethod + @Oneway + public void deleteNetworkA(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "networkType") @XmlElement(required = true) String networkType, + @WebParam(name = "modelCustomizationUuid") String modelCustomizationUuid, + @WebParam(name = "networkId") @XmlElement(required = true) String networkId, + @WebParam(name = "messageId") @XmlElement(required = true) String messageId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "notificationUrl") @XmlElement(required = true) String notificationUrl); - @WebMethod - @Oneway - public void rollbackNetworkA (@WebParam(name="rollback") @XmlElement(required=true) NetworkRollback rollback, - @WebParam(name="messageId") @XmlElement(required=true) String messageId, - @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); + @WebMethod + @Oneway + public void rollbackNetworkA(@WebParam(name = "rollback") @XmlElement(required = true) NetworkRollback rollback, + @WebParam(name = "messageId") @XmlElement(required = true) String messageId, + @WebParam(name = "notificationUrl") @XmlElement(required = true) String notificationUrl); - @WebMethod - public void healthCheckA (); + @WebMethod + public void healthCheckA(); } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImpl.java index 53fa2f6dc2..4753b1c18d 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImpl.java @@ -59,15 +59,17 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @Component -@WebService(serviceName = "NetworkAdapterAsync", endpointInterface = "org.onap.so.adapters.network.MsoNetworkAdapterAsync", targetNamespace = "http://org.onap.so/networkA") +@WebService(serviceName = "NetworkAdapterAsync", + endpointInterface = "org.onap.so.adapters.network.MsoNetworkAdapterAsync", + targetNamespace = "http://org.onap.so/networkA") public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { private static final Logger logger = LoggerFactory.getLogger(MsoNetworkAdapterAsyncImpl.class); private static final String BPEL_AUTH_PROP = "org.onap.so.adapters.network.bpelauth"; - private static final String ENCRYPTION_KEY_PROP = "org.onap.so.adapters.network.encryptionKey"; - private static final String NETWORK_EXCEPTION_MSG="Got a NetworkException on createNetwork: "; - private static final String CREATE_NETWORK_ERROR_LOGMSG ="{} {} Error sending createNetwork notification {} "; + private static final String ENCRYPTION_KEY_PROP = "mso.msoKey"; + private static final String NETWORK_EXCEPTION_MSG = "Got a NetworkException on createNetwork: "; + private static final String CREATE_NETWORK_ERROR_LOGMSG = "{} {} Error sending createNetwork notification {} "; private static final String FAULT_INFO_ERROR_LOGMSG = "{} {} Exception - fault info "; @Autowired @@ -75,116 +77,86 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { @Autowired private MsoNetworkAdapter networkAdapter; + /** * Health Check web method. Does nothing but return to show the adapter is deployed. */ @Override - public void healthCheckA () { - logger.debug ("Health check call in Network Adapter"); + public void healthCheckA() { + logger.debug("Health check call in Network Adapter"); } /** - * This is the "Create Network" web service implementation. - * It will create a new Network of the requested type in the specified cloud - * and tenant. The tenant must exist at the time this service is called. + * This is the "Create Network" web service implementation. It will create a new Network of the requested type in + * the specified cloud and tenant. The tenant must exist at the time this service is called. * - * If a network with the same name already exists, this can be considered a - * success or failure, depending on the value of the 'failIfExists' parameter. + * If a network with the same name already exists, this can be considered a success or failure, depending on the + * value of the 'failIfExists' parameter. * - * There will be a pre-defined set of network types defined in the MSO Catalog. - * All such networks will have a similar configuration, based on the allowable - * Openstack networking definitions. This includes basic networks, provider - * networks (with a single VLAN), and multi-provider networks (one or more VLANs) + * There will be a pre-defined set of network types defined in the MSO Catalog. All such networks will have a + * similar configuration, based on the allowable Openstack networking definitions. This includes basic networks, + * provider networks (with a single VLAN), and multi-provider networks (one or more VLANs) * - * Initially, all provider networks must be "vlan" type, and multiple segments in - * a multi-provider network must be multiple VLANs on the same physical network. + * Initially, all provider networks must be "vlan" type, and multiple segments in a multi-provider network must be + * multiple VLANs on the same physical network. * - * This service supports two modes of Network creation/update: - * - via Heat Templates - * - via Neutron API - * The network orchestration mode for each network type is declared in its - * catalog definition. All Heat-based templates must support some subset of - * the same input parameters: network_name, physical_network, vlan(s). + * This service supports two modes of Network creation/update: - via Heat Templates - via Neutron API The network + * orchestration mode for each network type is declared in its catalog definition. All Heat-based templates must + * support some subset of the same input parameters: network_name, physical_network, vlan(s). * - * The method returns the network ID and a NetworkRollback object. This latter - * object can be passed as-is to the rollbackNetwork operation to undo everything - * that was created. This is useful if a network is successfully created but - * the orchestration fails on a subsequent operation. + * The method returns the network ID and a NetworkRollback object. This latter object can be passed as-is to the + * rollbackNetwork operation to undo everything that was created. This is useful if a network is successfully + * created but the orchestration fails on a subsequent operation. */ @Override - public void createNetworkA (String cloudSiteId, - String tenantId, - String networkType, - String modelCustomizationUuid, - String networkName, - String physicalNetworkName, - List <Integer> vlans, - Boolean failIfExists, - Boolean backout, - List <Subnet> subnets, - Map<String,String> networkParams, - String messageId, - MsoRequest msoRequest, - String notificationUrl) { + public void createNetworkA(String cloudSiteId, String tenantId, String networkType, String modelCustomizationUuid, + String networkName, String physicalNetworkName, List<Integer> vlans, Boolean failIfExists, Boolean backout, + List<Subnet> subnets, Map<String, String> networkParams, String messageId, MsoRequest msoRequest, + String notificationUrl) { logger.debug("Async Create Network: {} of type {} in {}/{}", networkName, networkType, cloudSiteId, tenantId); // Use the synchronous method to perform the actual Create - + // Synchronous Web Service Outputs - Holder <String> networkId = new Holder <> (); - Holder <String> neutronNetworkId = new Holder <> (); - Holder <NetworkRollback> networkRollback = new Holder <> (); - Holder <Map <String, String>> subnetIdMap = new Holder <> (); - - HashMap<String, String> params = (HashMap<String,String>) networkParams; + Holder<String> networkId = new Holder<>(); + Holder<String> neutronNetworkId = new Holder<>(); + Holder<NetworkRollback> networkRollback = new Holder<>(); + Holder<Map<String, String>> subnetIdMap = new Holder<>(); + + HashMap<String, String> params = (HashMap<String, String>) networkParams; if (params == null) - params = new HashMap<String,String>(); + params = new HashMap<String, String>(); String shared = null; String external = null; if (params.containsKey("shared")) - shared = params.get("shared"); + shared = params.get("shared"); if (params.containsKey("external")) - external = params.get("external"); + external = params.get("external"); try { - networkAdapter.createNetwork (cloudSiteId, - tenantId, - networkType, - modelCustomizationUuid, - networkName, - physicalNetworkName, - vlans, - shared, - external, - failIfExists, - backout, - subnets, - params, - msoRequest, - networkId, - neutronNetworkId, - subnetIdMap, - networkRollback); + networkAdapter.createNetwork(cloudSiteId, tenantId, networkType, modelCustomizationUuid, networkName, + physicalNetworkName, vlans, shared, external, failIfExists, backout, subnets, params, msoRequest, + networkId, neutronNetworkId, subnetIdMap, networkRollback); } catch (NetworkException e) { - logger.debug (NETWORK_EXCEPTION_MSG, e); + logger.debug(NETWORK_EXCEPTION_MSG, e); MsoExceptionCategory exCat = null; String eMsg = null; try { - eMsg = e.getFaultInfo ().getMessage (); - exCat = MsoExceptionCategory.fromValue (e.getFaultInfo ().getCategory ().name ()); + eMsg = e.getFaultInfo().getMessage(); + exCat = MsoExceptionCategory.fromValue(e.getFaultInfo().getCategory().name()); } catch (Exception e1) { - logger.error(FAULT_INFO_ERROR_LOGMSG, MessageEnum.RA_FAULT_INFO_EXC, - ErrorCode.DataError.getValue(), e1); + logger.error(FAULT_INFO_ERROR_LOGMSG, MessageEnum.RA_FAULT_INFO_EXC, ErrorCode.DataError.getValue(), + e1); } // Build and send Asynchronous error response try { - NetworkAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.createNetworkNotification (messageId, false, exCat, eMsg, null, null, null, null); + NetworkAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.createNetworkNotification(messageId, false, exCat, eMsg, null, null, null, null); } catch (Exception e1) { logger.error(CREATE_NETWORK_ERROR_LOGMSG, MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, - ErrorCode.DataError.getValue(), e1.getMessage(), e1); + ErrorCode.DataError.getValue(), e1.getMessage(), e1); } return; @@ -192,118 +164,83 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { logger.debug("Async Create Network:Name {} physicalNetworkName:{}", networkName, physicalNetworkName); // Build and send Asynchronous response try { - NetworkAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.createNetworkNotification (messageId, - true, - null, - null, - networkId.value, - neutronNetworkId.value, - copyCreateSubnetIdMap (subnetIdMap), - copyNrb (networkRollback)); + NetworkAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.createNetworkNotification(messageId, true, null, null, networkId.value, neutronNetworkId.value, + copyCreateSubnetIdMap(subnetIdMap), copyNrb(networkRollback)); } catch (Exception e) { logger.error(CREATE_NETWORK_ERROR_LOGMSG, MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, - ErrorCode.DataError.getValue(), e.getMessage(), e); + ErrorCode.DataError.getValue(), e.getMessage(), e); } return; } /** - * This is the "Update Network" web service implementation. - * It will update an existing Network of the requested type in the specified cloud - * and tenant. The typical use will be to replace the VLANs with the supplied - * list (to add or remove a VLAN), but other properties may be updated as well. + * This is the "Update Network" web service implementation. It will update an existing Network of the requested type + * in the specified cloud and tenant. The typical use will be to replace the VLANs with the supplied list (to add or + * remove a VLAN), but other properties may be updated as well. * - * There will be a pre-defined set of network types defined in the MSO Catalog. - * All such networks will have a similar configuration, based on the allowable - * Openstack networking definitions. This includes basic networks, provider - * networks (with a single VLAN), and multi-provider networks (one or more VLANs). + * There will be a pre-defined set of network types defined in the MSO Catalog. All such networks will have a + * similar configuration, based on the allowable Openstack networking definitions. This includes basic networks, + * provider networks (with a single VLAN), and multi-provider networks (one or more VLANs). * - * Initially, all provider networks must currently be "vlan" type, and multi-provider - * networks must be multiple VLANs on the same physical network. + * Initially, all provider networks must currently be "vlan" type, and multi-provider networks must be multiple + * VLANs on the same physical network. * - * This service supports two modes of Network update: - * - via Heat Templates - * - via Neutron API - * The network orchestration mode for each network type is declared in its - * catalog definition. All Heat-based templates must support some subset of - * the same input parameters: network_name, physical_network, vlan, segments. + * This service supports two modes of Network update: - via Heat Templates - via Neutron API The network + * orchestration mode for each network type is declared in its catalog definition. All Heat-based templates must + * support some subset of the same input parameters: network_name, physical_network, vlan, segments. * - * The method returns a NetworkRollback object. This object can be passed - * as-is to the rollbackNetwork operation to undo everything that was updated. - * This is useful if a network is successfully updated but orchestration - * fails on a subsequent operation. + * The method returns a NetworkRollback object. This object can be passed as-is to the rollbackNetwork operation to + * undo everything that was updated. This is useful if a network is successfully updated but orchestration fails on + * a subsequent operation. */ @Override - public void updateNetworkA (String cloudSiteId, - String tenantId, - String networkType, - String modelCustomizationUuid, - String networkId, - String networkName, - String physicalNetworkName, - List <Integer> vlans, - List <Subnet> subnets, - Map <String,String> networkParams, - String messageId, - MsoRequest msoRequest, - String notificationUrl) { + public void updateNetworkA(String cloudSiteId, String tenantId, String networkType, String modelCustomizationUuid, + String networkId, String networkName, String physicalNetworkName, List<Integer> vlans, List<Subnet> subnets, + Map<String, String> networkParams, String messageId, MsoRequest msoRequest, String notificationUrl) { logger.debug("Async Update Network: {} of type {} in {}/{}", networkId, networkType, cloudSiteId, tenantId); // Use the synchronous method to perform the actual Create - + // Synchronous Web Service Outputs - Holder <NetworkRollback> networkRollback = new Holder <> (); - Holder <Map <String, String>> subnetIdMap = new Holder <> (); - - HashMap<String, String> params = (HashMap<String,String>) networkParams; + Holder<NetworkRollback> networkRollback = new Holder<>(); + Holder<Map<String, String>> subnetIdMap = new Holder<>(); + + HashMap<String, String> params = (HashMap<String, String>) networkParams; if (params == null) - params = new HashMap<String,String>(); + params = new HashMap<String, String>(); String shared = null; String external = null; if (params.containsKey("shared")) - shared = params.get("shared"); + shared = params.get("shared"); if (params.containsKey("external")) - external = params.get("external"); + external = params.get("external"); try { - networkAdapter.updateNetwork (cloudSiteId, - tenantId, - networkType, - modelCustomizationUuid, - networkId, - networkName, - physicalNetworkName, - vlans, - shared, - external, - subnets, - params, - msoRequest, - subnetIdMap, - networkRollback); + networkAdapter.updateNetwork(cloudSiteId, tenantId, networkType, modelCustomizationUuid, networkId, + networkName, physicalNetworkName, vlans, shared, external, subnets, params, msoRequest, subnetIdMap, + networkRollback); } catch (NetworkException e) { - logger.debug ("Got a NetworkException on updateNetwork: ", e); + logger.debug("Got a NetworkException on updateNetwork: ", e); MsoExceptionCategory exCat = null; String eMsg = null; try { - eMsg = e.getFaultInfo ().getMessage (); - exCat = MsoExceptionCategory.fromValue (e.getFaultInfo ().getCategory ().name ()); + eMsg = e.getFaultInfo().getMessage(); + exCat = MsoExceptionCategory.fromValue(e.getFaultInfo().getCategory().name()); } catch (Exception e1) { - logger.error(FAULT_INFO_ERROR_LOGMSG, MessageEnum.RA_FAULT_INFO_EXC, - ErrorCode.DataError.getValue(), e1); + logger.error(FAULT_INFO_ERROR_LOGMSG, MessageEnum.RA_FAULT_INFO_EXC, ErrorCode.DataError.getValue(), + e1); } // Build and send Asynchronous error response try { - NetworkAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.updateNetworkNotification (messageId, false, exCat, eMsg, null, copyNrb (networkRollback)); + NetworkAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.updateNetworkNotification(messageId, false, exCat, eMsg, null, copyNrb(networkRollback)); } catch (Exception e1) { logger.error("{} {} Error sending updateNetwork notification {} ", - MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, ErrorCode.DataError.getValue(), e1.getMessage(), - e1); + MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, ErrorCode.DataError.getValue(), e1.getMessage(), e1); } return; @@ -311,161 +248,127 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { logger.debug("Async Update Network:Name {} NetworkId:{}", networkName, networkId); // Build and send Asynchronous response try { - NetworkAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.updateNetworkNotification (messageId, - true, - null, - null, - copyUpdateSubnetIdMap (subnetIdMap), - copyNrb (networkRollback)); + NetworkAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.updateNetworkNotification(messageId, true, null, null, copyUpdateSubnetIdMap(subnetIdMap), + copyNrb(networkRollback)); } catch (Exception e) { logger.error("{} {} Error sending updateNotification request {} ", MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, - ErrorCode.DataError.getValue(), e.getMessage(), e); + ErrorCode.DataError.getValue(), e.getMessage(), e); } return; } /** - * This is the queryNetwork method. It returns the existence and status of - * the specified network, along with its Neutron UUID and list of VLANs. - * This method attempts to find the network using both Heat and Neutron. - * Heat stacks are first searched based on the provided network name/id. - * If none is found, the Neutron is directly queried. + * This is the queryNetwork method. It returns the existence and status of the specified network, along with its + * Neutron UUID and list of VLANs. This method attempts to find the network using both Heat and Neutron. Heat stacks + * are first searched based on the provided network name/id. If none is found, the Neutron is directly queried. */ @Override - public void queryNetworkA (String cloudSiteId, - String tenantId, - String networkNameOrId, - String messageId, - MsoRequest msoRequest, - String notificationUrl) { + public void queryNetworkA(String cloudSiteId, String tenantId, String networkNameOrId, String messageId, + MsoRequest msoRequest, String notificationUrl) { logger.debug("Async Query Network {} in {}/{}", networkNameOrId, cloudSiteId, tenantId); String errorCreateNetworkMessage = "{} {} Error sending createNetwork notification {} "; // Use the synchronous method to perform the actual Create - + // Synchronous Web Service Outputs - Holder <Boolean> networkExists = new Holder <> (); - Holder <String> networkId = new Holder <> (); - Holder <String> neutronNetworkId = new Holder <> (); - Holder <NetworkStatus> status = new Holder <> (); - Holder <List <Integer>> vlans = new Holder <> (); - Holder <Map <String, String>> subnetIdMap = new Holder <> (); + Holder<Boolean> networkExists = new Holder<>(); + Holder<String> networkId = new Holder<>(); + Holder<String> neutronNetworkId = new Holder<>(); + Holder<NetworkStatus> status = new Holder<>(); + Holder<List<Integer>> vlans = new Holder<>(); + Holder<Map<String, String>> subnetIdMap = new Holder<>(); try { - networkAdapter.queryNetwork (cloudSiteId, - tenantId, - networkNameOrId, - msoRequest, - networkExists, - networkId, - neutronNetworkId, - status, - vlans, - subnetIdMap); + networkAdapter.queryNetwork(cloudSiteId, tenantId, networkNameOrId, msoRequest, networkExists, networkId, + neutronNetworkId, status, vlans, subnetIdMap); } catch (NetworkException e) { - logger.debug (NETWORK_EXCEPTION_MSG, e); + logger.debug(NETWORK_EXCEPTION_MSG, e); MsoExceptionCategory exCat = null; String eMsg = null; try { - eMsg = e.getFaultInfo ().getMessage (); - exCat = MsoExceptionCategory.fromValue (e.getFaultInfo ().getCategory ().name ()); + eMsg = e.getFaultInfo().getMessage(); + exCat = MsoExceptionCategory.fromValue(e.getFaultInfo().getCategory().name()); } catch (Exception e1) { - logger.error(FAULT_INFO_ERROR_LOGMSG, MessageEnum.RA_FAULT_INFO_EXC, - ErrorCode.DataError.getValue(), e1); + logger.error(FAULT_INFO_ERROR_LOGMSG, MessageEnum.RA_FAULT_INFO_EXC, ErrorCode.DataError.getValue(), + e1); } // Build and send Asynchronous error response try { - NetworkAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.queryNetworkNotification (messageId, false, exCat, eMsg, null, null, null, null, null, null); + NetworkAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.queryNetworkNotification(messageId, false, exCat, eMsg, null, null, null, null, null, null); } catch (Exception e1) { logger.error(errorCreateNetworkMessage, MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, - ErrorCode.DataError.getValue(), e1.getMessage(), e1); + ErrorCode.DataError.getValue(), e1.getMessage(), e1); } return; } logger.debug("Async Query Network:NameOrId {} tenantId:{}", networkNameOrId, tenantId); // Build and send Asynchronous response try { - NetworkAdapterNotify notifyPort = getNotifyEP (notificationUrl); - org.onap.so.adapters.network.async.client.NetworkStatus networkS = org.onap.so.adapters.network.async.client.NetworkStatus.fromValue (status.value.name ()); - notifyPort.queryNetworkNotification (messageId, - true, - null, - null, - networkExists.value, - networkId.value, - neutronNetworkId.value, - networkS, - vlans.value, - copyQuerySubnetIdMap (subnetIdMap)); + NetworkAdapterNotify notifyPort = getNotifyEP(notificationUrl); + org.onap.so.adapters.network.async.client.NetworkStatus networkS = + org.onap.so.adapters.network.async.client.NetworkStatus.fromValue(status.value.name()); + notifyPort.queryNetworkNotification(messageId, true, null, null, networkExists.value, networkId.value, + neutronNetworkId.value, networkS, vlans.value, copyQuerySubnetIdMap(subnetIdMap)); } catch (Exception e) { logger.error(errorCreateNetworkMessage, MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, - ErrorCode.DataError.getValue(), e.getMessage(), e); + ErrorCode.DataError.getValue(), e.getMessage(), e); } return; } /** - * This is the "Delete Network" web service implementation. - * It will delete a Network in the specified cloud and tenant. + * This is the "Delete Network" web service implementation. It will delete a Network in the specified cloud and + * tenant. * * If the network is not found, it is treated as a success. * - * This service supports two modes of Network creation/update/delete: - * - via Heat Templates - * - via Neutron API - * The network orchestration mode for each network type is declared in its - * catalog definition. + * This service supports two modes of Network creation/update/delete: - via Heat Templates - via Neutron API The + * network orchestration mode for each network type is declared in its catalog definition. * - * For Heat-based orchestration, the networkId should be the stack ID. - * For Neutron-based orchestration, the networkId should be the Neutron network UUID. + * For Heat-based orchestration, the networkId should be the stack ID. For Neutron-based orchestration, the + * networkId should be the Neutron network UUID. * - * The method returns nothing on success. Rollback is not possible for delete - * commands, so any failure on delete will require manual fallout in the client. + * The method returns nothing on success. Rollback is not possible for delete commands, so any failure on delete + * will require manual fallout in the client. */ @Override - public void deleteNetworkA (String cloudSiteId, - String tenantId, - String networkType, - String modelCustomizationUuid, - String networkId, - String messageId, - MsoRequest msoRequest, - String notificationUrl) { + public void deleteNetworkA(String cloudSiteId, String tenantId, String networkType, String modelCustomizationUuid, + String networkId, String messageId, MsoRequest msoRequest, String notificationUrl) { String serviceName = "DeleteNetworkA"; logger.debug("Async Delete Network {} in {}/{}", networkId, cloudSiteId, tenantId); // Use the synchronous method to perform the actual Create - + // Synchronous Web Service Outputs - Holder <Boolean> networkDeleted = new Holder <> (); + Holder<Boolean> networkDeleted = new Holder<>(); try { - networkAdapter.deleteNetwork (cloudSiteId, tenantId, networkType, modelCustomizationUuid, networkId, msoRequest, networkDeleted); + networkAdapter.deleteNetwork(cloudSiteId, tenantId, networkType, modelCustomizationUuid, networkId, + msoRequest, networkDeleted); } catch (NetworkException e) { - logger.debug (NETWORK_EXCEPTION_MSG, e); + logger.debug(NETWORK_EXCEPTION_MSG, e); MsoExceptionCategory exCat = null; String eMsg = null; try { - eMsg = e.getFaultInfo ().getMessage (); - exCat = MsoExceptionCategory.fromValue (e.getFaultInfo ().getCategory ().name ()); + eMsg = e.getFaultInfo().getMessage(); + exCat = MsoExceptionCategory.fromValue(e.getFaultInfo().getCategory().name()); } catch (Exception e1) { - logger.error(FAULT_INFO_ERROR_LOGMSG, MessageEnum.RA_FAULT_INFO_EXC, - ErrorCode.DataError.getValue(), e1); + logger.error(FAULT_INFO_ERROR_LOGMSG, MessageEnum.RA_FAULT_INFO_EXC, ErrorCode.DataError.getValue(), + e1); } // Build and send Asynchronous error response try { - NetworkAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.deleteNetworkNotification (messageId, false, exCat, eMsg, null); + NetworkAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.deleteNetworkNotification(messageId, false, exCat, eMsg, null); } catch (Exception e1) { logger.error("{} {} Error sending createNetwork notification {} ", - MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, ErrorCode.DataError.getValue(), e1.getMessage(), - e1); + MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, ErrorCode.DataError.getValue(), e1.getMessage(), e1); } return; @@ -473,59 +376,57 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { logger.debug("Async Delete NetworkId: {} tenantId:{}", networkId, tenantId); // Build and send Asynchronous response try { - NetworkAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.deleteNetworkNotification (messageId, true, null, null, networkDeleted.value); + NetworkAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.deleteNetworkNotification(messageId, true, null, null, networkDeleted.value); } catch (Exception e) { logger.error("{} {} Error sending deleteNetwork notification {} ", MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, - ErrorCode.DataError.getValue(), e.getMessage(), e); + ErrorCode.DataError.getValue(), e.getMessage(), e); } return; } /** - * This web service endpoint will rollback a previous Create VNF operation. - * A rollback object is returned to the client in a successful creation - * response. The client can pass that object as-is back to the rollbackNetwork + * This web service endpoint will rollback a previous Create VNF operation. A rollback object is returned to the + * client in a successful creation response. The client can pass that object as-is back to the rollbackNetwork * operation to undo the creation. * - * The rollback includes removing the VNF and deleting the tenant if the - * tenant did not exist prior to the VNF creation. + * The rollback includes removing the VNF and deleting the tenant if the tenant did not exist prior to the VNF + * creation. */ @Override - public void rollbackNetworkA (NetworkRollback rollback, String messageId, String notificationUrl) { + public void rollbackNetworkA(NetworkRollback rollback, String messageId, String notificationUrl) { // rollback may be null (e.g. if network already existed when Create was called) if (rollback == null) { - logger.warn("{} {} Rollback is null", MessageEnum.RA_ROLLBACK_NULL, - ErrorCode.SchemaError.getValue()); + logger.warn("{} {} Rollback is null", MessageEnum.RA_ROLLBACK_NULL, ErrorCode.SchemaError.getValue()); return; } logger.info("{} {}", MessageEnum.RA_ASYNC_ROLLBACK, rollback.getNetworkStackId()); // Use the synchronous method to perform the actual Create - + try { - networkAdapter.rollbackNetwork (rollback); + networkAdapter.rollbackNetwork(rollback); } catch (NetworkException e) { - logger.debug ("Got a NetworkException on rollbackNetwork: ", e); + logger.debug("Got a NetworkException on rollbackNetwork: ", e); // Build and send Asynchronous error response MsoExceptionCategory exCat = null; String eMsg = null; try { - eMsg = e.getFaultInfo ().getMessage (); - exCat = MsoExceptionCategory.fromValue (e.getFaultInfo ().getCategory ().name ()); + eMsg = e.getFaultInfo().getMessage(); + exCat = MsoExceptionCategory.fromValue(e.getFaultInfo().getCategory().name()); } catch (Exception e1) { logger.error("{} {} Exception in get fault info ", MessageEnum.RA_FAULT_INFO_EXC, - ErrorCode.DataError.getValue(), e1); + ErrorCode.DataError.getValue(), e1); } // Build and send Asynchronous error response try { - NetworkAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.rollbackNetworkNotification (rollback.getMsoRequest ().getRequestId (), false, exCat, eMsg); + NetworkAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.rollbackNetworkNotification(rollback.getMsoRequest().getRequestId(), false, exCat, eMsg); } catch (Exception e1) { logger.error(CREATE_NETWORK_ERROR_LOGMSG, MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, - ErrorCode.DataError.getValue(), e1.getMessage(), e1); + ErrorCode.DataError.getValue(), e1.getMessage(), e1); } return; @@ -533,169 +434,167 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { logger.debug("Async Rollback NetworkId: {} tenantId:{}", rollback.getNetworkStackId(), rollback.getTenantId()); // Build and send Asynchronous response try { - NetworkAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.rollbackNetworkNotification (rollback.getMsoRequest ().getRequestId (), true, null, null); + NetworkAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.rollbackNetworkNotification(rollback.getMsoRequest().getRequestId(), true, null, null); } catch (Exception e) { - logger - .error("{} {} Error sending rollbackNetwork notification {} ", MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, - ErrorCode.DataError.getValue(), e.getMessage(), e); + logger.error("{} {} Error sending rollbackNetwork notification {} ", + MessageEnum.RA_CREATE_NETWORK_NOTIF_EXC, ErrorCode.DataError.getValue(), e.getMessage(), e); } return; } - private org.onap.so.adapters.network.async.client.NetworkRollback copyNrb (Holder <NetworkRollback> hNrb) { - org.onap.so.adapters.network.async.client.NetworkRollback cnrb = new org.onap.so.adapters.network.async.client.NetworkRollback (); + private org.onap.so.adapters.network.async.client.NetworkRollback copyNrb(Holder<NetworkRollback> hNrb) { + org.onap.so.adapters.network.async.client.NetworkRollback cnrb = + new org.onap.so.adapters.network.async.client.NetworkRollback(); if (hNrb != null && hNrb.value != null) { - org.onap.so.adapters.network.async.client.MsoRequest cmr = new org.onap.so.adapters.network.async.client.MsoRequest (); - - cnrb.setCloudId (hNrb.value.getCloudId ()); - cmr.setRequestId (hNrb.value.getMsoRequest ().getRequestId ()); - cmr.setServiceInstanceId (hNrb.value.getMsoRequest ().getServiceInstanceId ()); - cnrb.setMsoRequest (cmr); - cnrb.setNetworkId (hNrb.value.getNetworkId ()); - cnrb.setNetworkStackId (hNrb.value.getNetworkStackId ()); - cnrb.setNeutronNetworkId (hNrb.value.getNeutronNetworkId ()); - cnrb.setTenantId (hNrb.value.getTenantId ()); - cnrb.setNetworkType (hNrb.value.getNetworkType ()); - cnrb.setNetworkCreated (hNrb.value.getNetworkCreated ()); - cnrb.setNetworkName (hNrb.value.getNetworkName ()); - cnrb.setPhysicalNetwork (hNrb.value.getPhysicalNetwork ()); - List <Integer> vlansc = cnrb.getVlans (); - List <Integer> vlansh = hNrb.value.getVlans (); + org.onap.so.adapters.network.async.client.MsoRequest cmr = + new org.onap.so.adapters.network.async.client.MsoRequest(); + + cnrb.setCloudId(hNrb.value.getCloudId()); + cmr.setRequestId(hNrb.value.getMsoRequest().getRequestId()); + cmr.setServiceInstanceId(hNrb.value.getMsoRequest().getServiceInstanceId()); + cnrb.setMsoRequest(cmr); + cnrb.setNetworkId(hNrb.value.getNetworkId()); + cnrb.setNetworkStackId(hNrb.value.getNetworkStackId()); + cnrb.setNeutronNetworkId(hNrb.value.getNeutronNetworkId()); + cnrb.setTenantId(hNrb.value.getTenantId()); + cnrb.setNetworkType(hNrb.value.getNetworkType()); + cnrb.setNetworkCreated(hNrb.value.getNetworkCreated()); + cnrb.setNetworkName(hNrb.value.getNetworkName()); + cnrb.setPhysicalNetwork(hNrb.value.getPhysicalNetwork()); + List<Integer> vlansc = cnrb.getVlans(); + List<Integer> vlansh = hNrb.value.getVlans(); if (vlansh != null) { - vlansc.addAll (vlansh); + vlansc.addAll(vlansh); } } return cnrb; } - private NetworkAdapterNotify getNotifyEP (String notificationUrl) { + private NetworkAdapterNotify getNotifyEP(String notificationUrl) { URL warWsdlLoc = null; try { - warWsdlLoc = Thread.currentThread ().getContextClassLoader ().getResource ("NetworkAdapterNotify.wsdl"); + warWsdlLoc = Thread.currentThread().getContextClassLoader().getResource("NetworkAdapterNotify.wsdl"); } catch (Exception e) { logger.error("{} {} Exception - WSDL not found ", MessageEnum.RA_WSDL_NOT_FOUND, - ErrorCode.DataError.getValue(), e); + ErrorCode.DataError.getValue(), e); } if (warWsdlLoc == null) { - logger - .error("{} {} WSDL not found", MessageEnum.RA_WSDL_NOT_FOUND, ErrorCode.DataError.getValue()); + logger.error("{} {} WSDL not found", MessageEnum.RA_WSDL_NOT_FOUND, ErrorCode.DataError.getValue()); } else { try { logger.debug("NetworkAdpaterNotify.wsdl location: {}", warWsdlLoc.toURI().toString()); } catch (Exception e) { logger.error("{} {} Exception - WSDL URL convention ", MessageEnum.RA_WSDL_URL_CONVENTION_EXC, - ErrorCode.SchemaError.getValue(), e); + ErrorCode.SchemaError.getValue(), e); } } - NetworkAdapterNotify_Service notifySvc = new NetworkAdapterNotify_Service (warWsdlLoc, - new QName ("http://org.onap.so/networkNotify", - "networkAdapterNotify")); + NetworkAdapterNotify_Service notifySvc = new NetworkAdapterNotify_Service(warWsdlLoc, + new QName("http://org.onap.so/networkNotify", "networkAdapterNotify")); - NetworkAdapterNotify notifyPort = notifySvc.getMsoNetworkAdapterAsyncImplPort (); + NetworkAdapterNotify notifyPort = notifySvc.getMsoNetworkAdapterAsyncImplPort(); BindingProvider bp = (BindingProvider) notifyPort; URL epUrl = null; try { - epUrl = new URL (notificationUrl); + epUrl = new URL(notificationUrl); } catch (MalformedURLException e1) { logger.error("{} {} Exception - init notification ", MessageEnum.RA_INIT_NOTIF_EXC, - ErrorCode.DataError.getValue(), e1); + ErrorCode.DataError.getValue(), e1); } - if(null != epUrl) { + if (null != epUrl) { logger.debug("Notification Endpoint URL: {}", epUrl.toExternalForm()); - bp.getRequestContext ().put (BindingProvider.ENDPOINT_ADDRESS_PROPERTY, epUrl.toExternalForm ()); - } - else { + bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, epUrl.toExternalForm()); + } else { logger.debug("Notification Endpoint URL is NULL: "); } // authentication try { - Map <String, Object> reqCtx = bp.getRequestContext (); - Map <String, List <String>> headers = new HashMap <> (); + Map<String, Object> reqCtx = bp.getRequestContext(); + Map<String, List<String>> headers = new HashMap<>(); - String userCredentials = this.getEncryptedProperty (BPEL_AUTH_PROP, "", ENCRYPTION_KEY_PROP); + String userCredentials = this.getEncryptedProperty(BPEL_AUTH_PROP, "", ENCRYPTION_KEY_PROP); - String basicAuth = "Basic " + DatatypeConverter.printBase64Binary (userCredentials.getBytes ()); - reqCtx.put (MessageContext.HTTP_REQUEST_HEADERS, headers); - headers.put ("Authorization", Collections.singletonList (basicAuth)); + String basicAuth = "Basic " + DatatypeConverter.printBase64Binary(userCredentials.getBytes()); + reqCtx.put(MessageContext.HTTP_REQUEST_HEADERS, headers); + headers.put("Authorization", Collections.singletonList(basicAuth)); } catch (Exception e) { logger.error("{} {} Unable to set authorization in callback request {} ", - MessageEnum.RA_SET_CALLBACK_AUTH_EXC, ErrorCode.DataError.getValue(), e.getMessage(), e); + MessageEnum.RA_SET_CALLBACK_AUTH_EXC, ErrorCode.DataError.getValue(), e.getMessage(), e); } return notifyPort; } - + public String getEncryptedProperty(String key, String defaultValue, String encryptionKey) { - try { - return CryptoUtils.decrypt(this.environment.getProperty(key), this.environment.getProperty(encryptionKey)); - } catch (GeneralSecurityException e) { - logger.debug("Exception while decrypting property: {} ", this.environment.getProperty(key), e); - } - return defaultValue; + try { + return CryptoUtils.decrypt(this.environment.getProperty(key), this.environment.getProperty(encryptionKey)); + } catch (GeneralSecurityException e) { + logger.debug("Exception while decrypting property: {} ", this.environment.getProperty(key), e); + } + return defaultValue; - } + } - private CreateNetworkNotification.SubnetIdMap copyCreateSubnetIdMap (Holder <Map <String, String>> hMap) { + private CreateNetworkNotification.SubnetIdMap copyCreateSubnetIdMap(Holder<Map<String, String>> hMap) { - CreateNetworkNotification.SubnetIdMap subnetIdMap = new CreateNetworkNotification.SubnetIdMap (); + CreateNetworkNotification.SubnetIdMap subnetIdMap = new CreateNetworkNotification.SubnetIdMap(); if (hMap != null && hMap.value != null) { - Map <String, String> sMap = hMap.value; - CreateNetworkNotification.SubnetIdMap.Entry entry = new CreateNetworkNotification.SubnetIdMap.Entry (); - - for (Map.Entry<String,String> mapEntry : sMap.entrySet ()) { - String key = mapEntry.getKey(); - String value = mapEntry.getValue(); - entry.setKey (key); - entry.setValue (value); - subnetIdMap.getEntry ().add (entry); + Map<String, String> sMap = hMap.value; + CreateNetworkNotification.SubnetIdMap.Entry entry = new CreateNetworkNotification.SubnetIdMap.Entry(); + + for (Map.Entry<String, String> mapEntry : sMap.entrySet()) { + String key = mapEntry.getKey(); + String value = mapEntry.getValue(); + entry.setKey(key); + entry.setValue(value); + subnetIdMap.getEntry().add(entry); } } return subnetIdMap; } - private UpdateNetworkNotification.SubnetIdMap copyUpdateSubnetIdMap (Holder <Map <String, String>> hMap) { + private UpdateNetworkNotification.SubnetIdMap copyUpdateSubnetIdMap(Holder<Map<String, String>> hMap) { - UpdateNetworkNotification.SubnetIdMap subnetIdMap = new UpdateNetworkNotification.SubnetIdMap (); + UpdateNetworkNotification.SubnetIdMap subnetIdMap = new UpdateNetworkNotification.SubnetIdMap(); if (hMap != null && hMap.value != null) { - Map <String, String> sMap = hMap.value; - UpdateNetworkNotification.SubnetIdMap.Entry entry = new UpdateNetworkNotification.SubnetIdMap.Entry (); - - for (Map.Entry<String,String> mapEntry : sMap.entrySet ()) { - String key = mapEntry.getKey(); - String value = mapEntry.getValue(); - entry.setKey (key); - entry.setValue (value); - subnetIdMap.getEntry ().add (entry); + Map<String, String> sMap = hMap.value; + UpdateNetworkNotification.SubnetIdMap.Entry entry = new UpdateNetworkNotification.SubnetIdMap.Entry(); + + for (Map.Entry<String, String> mapEntry : sMap.entrySet()) { + String key = mapEntry.getKey(); + String value = mapEntry.getValue(); + entry.setKey(key); + entry.setValue(value); + subnetIdMap.getEntry().add(entry); } } return subnetIdMap; } - private QueryNetworkNotification.SubnetIdMap copyQuerySubnetIdMap (Holder <Map <String, String>> hMap) { + private QueryNetworkNotification.SubnetIdMap copyQuerySubnetIdMap(Holder<Map<String, String>> hMap) { - QueryNetworkNotification.SubnetIdMap subnetIdMap = new QueryNetworkNotification.SubnetIdMap (); + QueryNetworkNotification.SubnetIdMap subnetIdMap = new QueryNetworkNotification.SubnetIdMap(); if (hMap != null && hMap.value != null) { - Map <String, String> sMap = hMap.value; - QueryNetworkNotification.SubnetIdMap.Entry entry = new QueryNetworkNotification.SubnetIdMap.Entry (); - - for (Map.Entry<String,String> mapEntry : sMap.entrySet ()) { - String key = mapEntry.getKey(); - String value = mapEntry.getValue(); - entry.setKey (key); - entry.setValue (value); - subnetIdMap.getEntry ().add (entry); + Map<String, String> sMap = hMap.value; + QueryNetworkNotification.SubnetIdMap.Entry entry = new QueryNetworkNotification.SubnetIdMap.Entry(); + + for (Map.Entry<String, String> mapEntry : sMap.entrySet()) { + String key = mapEntry.getKey(); + String value = mapEntry.getValue(); + entry.setKey(key); + entry.setValue(value); + subnetIdMap.getEntry().add(entry); } } return subnetIdMap; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java index 108a7148f6..a79a6191cf 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java @@ -11,9 +11,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -76,11 +76,12 @@ import org.springframework.transaction.annotation.Transactional; @Component @Transactional -@WebService(serviceName = "NetworkAdapter", endpointInterface = "org.onap.so.adapters.network.MsoNetworkAdapter", targetNamespace = "http://org.onap.so/network") +@WebService(serviceName = "NetworkAdapter", endpointInterface = "org.onap.so.adapters.network.MsoNetworkAdapter", + targetNamespace = "http://org.onap.so/network") public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { - private static final String AIC3_NW_PROPERTY= "org.onap.so.adapters.network.aic3nw"; - private static final String AIC3_NW="OS::ContrailV2::VirtualNetwork"; + private static final String AIC3_NW_PROPERTY = "org.onap.so.adapters.network.aic3nw"; + private static final String AIC3_NW = "OS::ContrailV2::VirtualNetwork"; private static final String VLANS = "vlans"; private static final String PHYSICAL_NETWORK = "physical_network"; private static final String UPDATE_NETWORK_CONTEXT = "UpdateNetwork"; @@ -89,7 +90,7 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { private static final String CREATE_NETWORK_CONTEXT = "CreateNetwork"; private static final String MSO_CONFIGURATION_ERROR = "MsoConfigurationError"; private static final String NEUTRON_MODE = "NEUTRON"; - + private static final Logger logger = LoggerFactory.getLogger(MsoNetworkAdapterImpl.class); @Autowired @@ -104,178 +105,95 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { private MsoHeatUtilsWithUpdate heatWithUpdate; @Autowired private MsoCommonUtils commonUtils; - - @Autowired - private NetworkResourceCustomizationRepository networkCustomRepo; - + + @Autowired + private NetworkResourceCustomizationRepository networkCustomRepo; + @Autowired private CollectionNetworkResourceCustomizationRepository collectionNetworkCustomRepo; - + @Autowired - private NetworkResourceRepository networkResourceRepo; + private NetworkResourceRepository networkResourceRepo; + /** * Health Check web method. Does nothing but return to show the adapter is deployed. */ @Override - public void healthCheck () { - logger.debug ("Health check call in Network Adapter"); + public void healthCheck() { + logger.debug("Health check call in Network Adapter"); } /** * Do not use this constructor or the msoPropertiesFactory will be NULL. * - * @see MsoNetworkAdapterImpl#MsoNetworkAdapterImpl(MsoPropertiesFactory) + * @see MsoNetworkAdapterImpl#MsoNetworkAdapterImpl(MsoPropertiesFactory) */ - public MsoNetworkAdapterImpl() { - } + public MsoNetworkAdapterImpl() {} @Override - public void createNetwork (String cloudSiteId, - String tenantId, - String networkType, - String modelCustomizationUuid, - String networkName, - String physicalNetworkName, - List <Integer> vlans, - String shared, - String external, - Boolean failIfExists, - Boolean backout, - List <Subnet> subnets, - Map<String, String> networkParams, - MsoRequest msoRequest, - Holder <String> networkId, - Holder <String> neutronNetworkId, - Holder <Map <String, String>> subnetIdMap, - Holder <NetworkRollback> rollback) throws NetworkException { - Holder <String> networkFqdn = new Holder <> (); - createNetwork (cloudSiteId, - tenantId, - networkType, - modelCustomizationUuid, - networkName, - physicalNetworkName, - vlans, - null, - shared, - external, - failIfExists, - backout, - subnets, - null, - null, - msoRequest, - networkId, - neutronNetworkId, - networkFqdn, - subnetIdMap, - rollback); + public void createNetwork(String cloudSiteId, String tenantId, String networkType, String modelCustomizationUuid, + String networkName, String physicalNetworkName, List<Integer> vlans, String shared, String external, + Boolean failIfExists, Boolean backout, List<Subnet> subnets, Map<String, String> networkParams, + MsoRequest msoRequest, Holder<String> networkId, Holder<String> neutronNetworkId, + Holder<Map<String, String>> subnetIdMap, Holder<NetworkRollback> rollback) throws NetworkException { + Holder<String> networkFqdn = new Holder<>(); + createNetwork(cloudSiteId, tenantId, networkType, modelCustomizationUuid, networkName, physicalNetworkName, + vlans, null, shared, external, failIfExists, backout, subnets, null, null, msoRequest, networkId, + neutronNetworkId, networkFqdn, subnetIdMap, rollback); } @Override - public void createNetworkContrail (String cloudSiteId, - String tenantId, - String networkType, - String modelCustomizationUuid, - String networkName, - List <RouteTarget> routeTargets, - String shared, - String external, - Boolean failIfExists, - Boolean backout, - List <Subnet> subnets, - Map<String, String> networkParams, - List <String> policyFqdns, - List<String> routeTableFqdns, - MsoRequest msoRequest, - Holder <String> networkId, - Holder <String> neutronNetworkId, - Holder <String> networkFqdn, - Holder <Map <String, String>> subnetIdMap, - Holder <NetworkRollback> rollback) throws NetworkException { - createNetwork (cloudSiteId, - tenantId, - networkType, - modelCustomizationUuid, - networkName, - null, - null, - routeTargets, - shared, - external, - failIfExists, - backout, - subnets, - policyFqdns, - routeTableFqdns, - msoRequest, - networkId, - neutronNetworkId, - networkFqdn, - subnetIdMap, - rollback); + public void createNetworkContrail(String cloudSiteId, String tenantId, String networkType, + String modelCustomizationUuid, String networkName, List<RouteTarget> routeTargets, String shared, + String external, Boolean failIfExists, Boolean backout, List<Subnet> subnets, + Map<String, String> networkParams, List<String> policyFqdns, List<String> routeTableFqdns, + MsoRequest msoRequest, Holder<String> networkId, Holder<String> neutronNetworkId, + Holder<String> networkFqdn, Holder<Map<String, String>> subnetIdMap, Holder<NetworkRollback> rollback) + throws NetworkException { + createNetwork(cloudSiteId, tenantId, networkType, modelCustomizationUuid, networkName, null, null, routeTargets, + shared, external, failIfExists, backout, subnets, policyFqdns, routeTableFqdns, msoRequest, networkId, + neutronNetworkId, networkFqdn, subnetIdMap, rollback); } /** - * This is the "Create Network" web service implementation. - * It will create a new Network of the requested type in the specified cloud - * and tenant. The tenant must exist at the time this service is called. + * This is the "Create Network" web service implementation. It will create a new Network of the requested type in + * the specified cloud and tenant. The tenant must exist at the time this service is called. * - * If a network with the same name already exists, this can be considered a - * success or failure, depending on the value of the 'failIfExists' parameter. + * If a network with the same name already exists, this can be considered a success or failure, depending on the + * value of the 'failIfExists' parameter. * - * There will be a pre-defined set of network types defined in the MSO Catalog. - * All such networks will have a similar configuration, based on the allowable - * Openstack networking definitions. This includes basic networks, provider - * networks (with a single VLAN), and multi-provider networks (one or more VLANs) + * There will be a pre-defined set of network types defined in the MSO Catalog. All such networks will have a + * similar configuration, based on the allowable Openstack networking definitions. This includes basic networks, + * provider networks (with a single VLAN), and multi-provider networks (one or more VLANs) * - * Initially, all provider networks must be "vlan" type, and multiple segments in - * a multi-provider network must be multiple VLANs on the same physical network. + * Initially, all provider networks must be "vlan" type, and multiple segments in a multi-provider network must be + * multiple VLANs on the same physical network. * - * This service supports two modes of Network creation/update: - * - via Heat Templates - * - via Neutron API - * The network orchestration mode for each network type is declared in its - * catalog definition. All Heat-based templates must support some subset of - * the same input parameters: network_name, physical_network, vlan(s). + * This service supports two modes of Network creation/update: - via Heat Templates - via Neutron API The network + * orchestration mode for each network type is declared in its catalog definition. All Heat-based templates must + * support some subset of the same input parameters: network_name, physical_network, vlan(s). * - * The method returns the network ID and a NetworkRollback object. This latter - * object can be passed as-is to the rollbackNetwork operation to undo everything - * that was created. This is useful if a network is successfully created but - * the orchestration fails on a subsequent operation. + * The method returns the network ID and a NetworkRollback object. This latter object can be passed as-is to the + * rollbackNetwork operation to undo everything that was created. This is useful if a network is successfully + * created but the orchestration fails on a subsequent operation. */ - private void createNetwork (String cloudSiteId, - String tenantId, - String networkType, - String modelCustomizationUuid, - String networkName, - String physicalNetworkName, - List <Integer> vlans, - List <RouteTarget> routeTargets, - String shared, - String external, - Boolean failIfExists, - Boolean backout, - List <Subnet> subnets, - List <String> policyFqdns, - List <String> routeTableFqdns, - MsoRequest msoRequest, - Holder <String> networkId, - Holder <String> neutronNetworkId, - Holder <String> networkFqdn, - Holder <Map <String, String>> subnetIdMap, - Holder <NetworkRollback> rollback) throws NetworkException { + private void createNetwork(String cloudSiteId, String tenantId, String networkType, String modelCustomizationUuid, + String networkName, String physicalNetworkName, List<Integer> vlans, List<RouteTarget> routeTargets, + String shared, String external, Boolean failIfExists, Boolean backout, List<Subnet> subnets, + List<String> policyFqdns, List<String> routeTableFqdns, MsoRequest msoRequest, Holder<String> networkId, + Holder<String> neutronNetworkId, Holder<String> networkFqdn, Holder<Map<String, String>> subnetIdMap, + Holder<NetworkRollback> rollback) throws NetworkException { logger.debug("*** CREATE Network: {} of type {} in {}/{}", networkName, networkType, cloudSiteId, tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); // Build a default rollback object (no actions performed) - NetworkRollback networkRollback = new NetworkRollback (); - networkRollback.setCloudId (cloudSiteId); - networkRollback.setTenantId (tenantId); - networkRollback.setMsoRequest (msoRequest); + NetworkRollback networkRollback = new NetworkRollback(); + networkRollback.setCloudId(cloudSiteId); + networkRollback.setTenantId(tenantId); + networkRollback.setMsoRequest(msoRequest); networkRollback.setModelCustomizationUuid(modelCustomizationUuid); // tenant query is not required here. @@ -283,10 +201,9 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { // So this is just catching that error in a bit more obvious way up front. Optional<CloudSite> cloudSiteOpt = cloudConfig.getCloudSite(cloudSiteId); - if (!cloudSiteOpt.isPresent()) - { - String error = String - .format("Configuration Error. Stack %s in %s/%s: CloudSite does not exist in MSO Configuration", + if (!cloudSiteOpt.isPresent()) { + String error = String.format( + "Configuration Error. Stack %s in %s/%s: CloudSite does not exist in MSO Configuration", networkName, cloudSiteId, tenantId); logger.error("{} {} {}", MessageEnum.RA_CONFIG_EXC, ErrorCode.DataError.getValue(), error); // Set the detailed error as the Exception 'message' @@ -294,441 +211,332 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { } - NetworkResource networkResource = networkCheck (startTime, - networkType, - modelCustomizationUuid, - networkName, - physicalNetworkName, - vlans, - routeTargets, - cloudSiteId, - cloudSiteOpt.get()); - String mode = networkResource.getOrchestrationMode (); - NetworkType neutronNetworkType = NetworkType.valueOf (networkResource.getNeutronNetworkType ()); + NetworkResource networkResource = networkCheck(startTime, networkType, modelCustomizationUuid, networkName, + physicalNetworkName, vlans, routeTargets, cloudSiteId, cloudSiteOpt.get()); + String mode = networkResource.getOrchestrationMode(); + NetworkType neutronNetworkType = NetworkType.valueOf(networkResource.getNeutronNetworkType()); - if (NEUTRON_MODE.equals (mode)) { + if (NEUTRON_MODE.equals(mode)) { - // Use an MsoNeutronUtils for all neutron commands + // Use an MsoNeutronUtils for all neutron commands - // See if the Network already exists (by name) - NetworkInfo netInfo = null; - long queryNetworkStarttime = System.currentTimeMillis (); - try { - netInfo = neutron.queryNetwork (networkName, tenantId, cloudSiteId); - } catch (MsoException me) { - logger.error( + // See if the Network already exists (by name) + NetworkInfo netInfo = null; + long queryNetworkStarttime = System.currentTimeMillis(); + try { + netInfo = neutron.queryNetwork(networkName, tenantId, cloudSiteId); + } catch (MsoException me) { + logger.error( "{} {} Exception while querying network {} for CloudSite {} from Tenant {} from OpenStack ", - MessageEnum.RA_QUERY_NETWORK_EXC, ErrorCode.BusinessProcesssError.getValue(), - networkName, cloudSiteId, tenantId, me); - me.addContext (CREATE_NETWORK_CONTEXT); - throw new NetworkException (me); - } + MessageEnum.RA_QUERY_NETWORK_EXC, ErrorCode.BusinessProcesssError.getValue(), networkName, + cloudSiteId, tenantId, me); + me.addContext(CREATE_NETWORK_CONTEXT); + throw new NetworkException(me); + } - if (netInfo != null) { - // Exists. If that's OK, return success with the network ID. - // Otherwise, return an exception. - if (failIfExists != null && failIfExists) { - String error = String - .format("Create Nework: Network %s already exists in %s/%s with ID %s", networkName, - cloudSiteId, tenantId, netInfo.getId()); - logger.error("{} {} {}", MessageEnum.RA_NETWORK_ALREADY_EXIST, - ErrorCode.DataError.getValue(), error); - throw new NetworkException(error, MsoExceptionCategory.USERDATA); - } else { - // Populate the outputs from the existing network. - networkId.value = netInfo.getId (); - neutronNetworkId.value = netInfo.getId (); - rollback.value = networkRollback; // Default rollback - no updates performed - logger.warn("{} {} Found Existing network, status={} for Neutron mode ", - MessageEnum.RA_NETWORK_ALREADY_EXIST, ErrorCode.DataError.getValue(), - netInfo.getStatus()); - } - return; + if (netInfo != null) { + // Exists. If that's OK, return success with the network ID. + // Otherwise, return an exception. + if (failIfExists != null && failIfExists) { + String error = String.format("Create Nework: Network %s already exists in %s/%s with ID %s", + networkName, cloudSiteId, tenantId, netInfo.getId()); + logger.error("{} {} {}", MessageEnum.RA_NETWORK_ALREADY_EXIST, ErrorCode.DataError.getValue(), + error); + throw new NetworkException(error, MsoExceptionCategory.USERDATA); + } else { + // Populate the outputs from the existing network. + networkId.value = netInfo.getId(); + neutronNetworkId.value = netInfo.getId(); + rollback.value = networkRollback; // Default rollback - no updates performed + logger.warn("{} {} Found Existing network, status={} for Neutron mode ", + MessageEnum.RA_NETWORK_ALREADY_EXIST, ErrorCode.DataError.getValue(), netInfo.getStatus()); } + return; + } - long createNetworkStarttime = System.currentTimeMillis (); - try { - netInfo = neutron.createNetwork (cloudSiteId, - tenantId, - neutronNetworkType, - networkName, - physicalNetworkName, - vlans); - } catch (MsoException me) { - me.addContext(CREATE_NETWORK_CONTEXT); - logger.error("{} {} Create Network: type {} in {}/{}: ", MessageEnum.RA_CREATE_NETWORK_EXC, + long createNetworkStarttime = System.currentTimeMillis(); + try { + netInfo = neutron.createNetwork(cloudSiteId, tenantId, neutronNetworkType, networkName, + physicalNetworkName, vlans); + } catch (MsoException me) { + me.addContext(CREATE_NETWORK_CONTEXT); + logger.error("{} {} Create Network: type {} in {}/{}: ", MessageEnum.RA_CREATE_NETWORK_EXC, ErrorCode.DataError.getValue(), neutronNetworkType, cloudSiteId, tenantId, me); - throw new NetworkException (me); - } + throw new NetworkException(me); + } - // Note: ignoring MsoNetworkAlreadyExists because we already checked. + // Note: ignoring MsoNetworkAlreadyExists because we already checked. - // If reach this point, network creation is successful. - // Since directly created via Neutron, networkId tracked by MSO is the same - // as the neutron network ID. - networkId.value = netInfo.getId (); - neutronNetworkId.value = netInfo.getId (); + // If reach this point, network creation is successful. + // Since directly created via Neutron, networkId tracked by MSO is the same + // as the neutron network ID. + networkId.value = netInfo.getId(); + neutronNetworkId.value = netInfo.getId(); - networkRollback.setNetworkCreated (true); - networkRollback.setNetworkId (netInfo.getId ()); - networkRollback.setNeutronNetworkId (netInfo.getId ()); - networkRollback.setNetworkType (networkType); + networkRollback.setNetworkCreated(true); + networkRollback.setNetworkId(netInfo.getId()); + networkRollback.setNeutronNetworkId(netInfo.getId()); + networkRollback.setNetworkType(networkType); - logger.debug("Network {} created, id = {}", networkName, netInfo.getId()); - } else if ("HEAT".equals (mode)) { + logger.debug("Network {} created, id = {}", networkName, netInfo.getId()); + } else if ("HEAT".equals(mode)) { - HeatTemplate heatTemplate = networkResource.getHeatTemplate(); - if (heatTemplate == null) { - String error = String - .format("Network error - undefined Heat Template. Network Type = %s", networkType); - logger.error("{} {} {}", MessageEnum.RA_PARAM_NOT_FOUND, ErrorCode.DataError.getValue(), - error); - throw new NetworkException (error, MsoExceptionCategory.INTERNAL); - } + HeatTemplate heatTemplate = networkResource.getHeatTemplate(); + if (heatTemplate == null) { + String error = String.format("Network error - undefined Heat Template. Network Type = %s", networkType); + logger.error("{} {} {}", MessageEnum.RA_PARAM_NOT_FOUND, ErrorCode.DataError.getValue(), error); + throw new NetworkException(error, MsoExceptionCategory.INTERNAL); + } - logger.debug("Got HEAT Template from DB: {}", heatTemplate.toString()); + logger.debug("Got HEAT Template from DB: {}", heatTemplate.toString()); - // "Fix" the template if it has CR/LF (getting this from Oracle) - String template = heatTemplate.getHeatTemplate (); - template = template.replaceAll ("\r\n", "\n"); + // "Fix" the template if it has CR/LF (getting this from Oracle) + String template = heatTemplate.getHeatTemplate(); + template = template.replaceAll("\r\n", "\n"); - boolean aic3template=false; - String aic3nw = AIC3_NW; + boolean aic3template = false; + String aic3nw = AIC3_NW; - aic3nw = environment.getProperty(AIC3_NW_PROPERTY, AIC3_NW); + aic3nw = environment.getProperty(AIC3_NW_PROPERTY, AIC3_NW); - if (template.contains(aic3nw)) - aic3template = true; + if (template.contains(aic3nw)) + aic3template = true; - // First, look up to see if the Network already exists (by name). - // For HEAT orchestration of networks, the stack name will always match the network name - StackInfo heatStack = null; - long queryNetworkStarttime = System.currentTimeMillis (); - try { - heatStack = heat.queryStack (cloudSiteId, tenantId, networkName); - } catch (MsoException me) { - me.addContext (CREATE_NETWORK_CONTEXT); - logger.error("{} {} Create Network (heat): query network {} in {}/{}: ", - MessageEnum.RA_QUERY_NETWORK_EXC, ErrorCode.DataError.getValue(), networkName, - cloudSiteId, tenantId, me); - throw new NetworkException (me); - } + // First, look up to see if the Network already exists (by name). + // For HEAT orchestration of networks, the stack name will always match the network name + StackInfo heatStack = null; + long queryNetworkStarttime = System.currentTimeMillis(); + try { + heatStack = heat.queryStack(cloudSiteId, "CloudOwner", tenantId, networkName); + } catch (MsoException me) { + me.addContext(CREATE_NETWORK_CONTEXT); + logger.error("{} {} Create Network (heat): query network {} in {}/{}: ", + MessageEnum.RA_QUERY_NETWORK_EXC, ErrorCode.DataError.getValue(), networkName, cloudSiteId, + tenantId, me); + throw new NetworkException(me); + } - if (heatStack != null && (heatStack.getStatus () != HeatStatus.NOTFOUND)) { - // Stack exists. Return success or error depending on input directive - if (failIfExists != null && failIfExists) { - String error = String - .format("CreateNetwork: Stack %s already exists in %s/%s as %s", networkName, cloudSiteId, - tenantId, heatStack.getCanonicalName()); - logger.error("{} {} {}", MessageEnum.RA_NETWORK_ALREADY_EXIST, - ErrorCode.DataError.getValue(), error); - throw new NetworkException(error, MsoExceptionCategory.USERDATA); - } else { - // Populate the outputs from the existing stack. - networkId.value = heatStack.getCanonicalName (); - neutronNetworkId.value = (String) heatStack.getOutputs ().get (NETWORK_ID); - rollback.value = networkRollback; // Default rollback - no updates performed - if (aic3template) - { - networkFqdn.value = (String) heatStack.getOutputs().get(NETWORK_FQDN); - } - Map <String, Object> outputs = heatStack.getOutputs (); - Map <String, String> sMap = new HashMap <> (); - if (outputs != null) { - for (Map.Entry<String, Object> entry : outputs.entrySet()) { - String key=entry.getKey(); - if (key != null && key.startsWith ("subnet")) { - if (aic3template) //one subnet_id output - { - Map <String, String> map = getSubnetUUId(key, outputs, subnets); - sMap.putAll(map); - } - else //multiples subnet_%aaid% outputs - { - String subnetUUId = (String) outputs.get(key); - sMap.put (key.substring("subnet_id_".length()), subnetUUId); - } - } - } + if (heatStack != null && (heatStack.getStatus() != HeatStatus.NOTFOUND)) { + // Stack exists. Return success or error depending on input directive + if (failIfExists != null && failIfExists) { + String error = String.format("CreateNetwork: Stack %s already exists in %s/%s as %s", networkName, + cloudSiteId, tenantId, heatStack.getCanonicalName()); + logger.error("{} {} {}", MessageEnum.RA_NETWORK_ALREADY_EXIST, ErrorCode.DataError.getValue(), + error); + throw new NetworkException(error, MsoExceptionCategory.USERDATA); + } else { + // Populate the outputs from the existing stack. + networkId.value = heatStack.getCanonicalName(); + neutronNetworkId.value = (String) heatStack.getOutputs().get(NETWORK_ID); + rollback.value = networkRollback; // Default rollback - no updates performed + if (aic3template) { + networkFqdn.value = (String) heatStack.getOutputs().get(NETWORK_FQDN); + } + Map<String, Object> outputs = heatStack.getOutputs(); + Map<String, String> sMap = new HashMap<>(); + if (outputs != null) { + for (Map.Entry<String, Object> entry : outputs.entrySet()) { + String key = entry.getKey(); + if (key != null && key.startsWith("subnet")) { + if (aic3template) // one subnet_id output + { + Map<String, String> map = getSubnetUUId(key, outputs, subnets); + sMap.putAll(map); + } else // multiples subnet_%aaid% outputs + { + String subnetUUId = (String) outputs.get(key); + sMap.put(key.substring("subnet_id_".length()), subnetUUId); + } + } } - subnetIdMap.value = sMap; - logger.warn("{} {} Found Existing network stack, status={} networkName={} for {}/{}", - MessageEnum.RA_NETWORK_ALREADY_EXIST, ErrorCode.DataError.getValue(), - heatStack.getStatus(), networkName, cloudSiteId, tenantId); } - return; - } - - // Ready to deploy the new Network - // Build the common set of HEAT template parameters - Map <String, Object> stackParams = populateNetworkParams (neutronNetworkType, - networkName, - physicalNetworkName, - vlans, - routeTargets, - shared, - external, - aic3template); - - // Validate (and update) the input parameters against the DB definition - // Shouldn't happen unless DB config is wrong, since all networks use same inputs - // and inputs were already validated. - try { - stackParams = heat.validateStackParams (stackParams, heatTemplate); - } catch (IllegalArgumentException e) { - String error = "Create Network: Configuration Error: " + e.getMessage (); - logger.error("{} {} {} ", MessageEnum.RA_CONFIG_EXC, - ErrorCode.DataError.getValue(), error,e); - // Input parameters were not valid - throw new NetworkException (error, MsoExceptionCategory.INTERNAL); + subnetIdMap.value = sMap; + logger.warn("{} {} Found Existing network stack, status={} networkName={} for {}/{}", + MessageEnum.RA_NETWORK_ALREADY_EXIST, ErrorCode.DataError.getValue(), heatStack.getStatus(), + networkName, cloudSiteId, tenantId); } + return; + } - if (subnets != null) { - try { - if (aic3template) - { - template = mergeSubnetsAIC3 (template, subnets, stackParams); - } - else - { - template = mergeSubnets (template, subnets); - } - } catch (MsoException me) { - me.addContext (CREATE_NETWORK_CONTEXT); - logger - .error("{} {} Exception Create Network, merging subnets for network (heat) type {} in {}/{} ", - MessageEnum.RA_CREATE_NETWORK_EXC, ErrorCode.DataError.getValue(), - neutronNetworkType.toString(), cloudSiteId, tenantId, me); - throw new NetworkException (me); - } - } + // Ready to deploy the new Network + // Build the common set of HEAT template parameters + Map<String, Object> stackParams = populateNetworkParams(neutronNetworkType, networkName, + physicalNetworkName, vlans, routeTargets, shared, external, aic3template); + + // Validate (and update) the input parameters against the DB definition + // Shouldn't happen unless DB config is wrong, since all networks use same inputs + // and inputs were already validated. + try { + stackParams = heat.validateStackParams(stackParams, heatTemplate); + } catch (IllegalArgumentException e) { + String error = "Create Network: Configuration Error: " + e.getMessage(); + logger.error("{} {} {} ", MessageEnum.RA_CONFIG_EXC, ErrorCode.DataError.getValue(), error, e); + // Input parameters were not valid + throw new NetworkException(error, MsoExceptionCategory.INTERNAL); + } - if (policyFqdns != null && !policyFqdns.isEmpty() && aic3template) { - try { - mergePolicyRefs (policyFqdns, stackParams); - } catch (MsoException me) { - me.addContext (CREATE_NETWORK_CONTEXT); - logger.error("{} {} Exception Create Network, merging policyRefs type {} in {}/{} ", + if (subnets != null) { + try { + if (aic3template) { + template = mergeSubnetsAIC3(template, subnets, stackParams); + } else { + template = mergeSubnets(template, subnets); + } + } catch (MsoException me) { + me.addContext(CREATE_NETWORK_CONTEXT); + logger.error("{} {} Exception Create Network, merging subnets for network (heat) type {} in {}/{} ", MessageEnum.RA_CREATE_NETWORK_EXC, ErrorCode.DataError.getValue(), neutronNetworkType.toString(), cloudSiteId, tenantId, me); - throw new NetworkException (me); - } + throw new NetworkException(me); } + } - if (routeTableFqdns != null && !routeTableFqdns.isEmpty() && aic3template) { - try { - mergeRouteTableRefs (routeTableFqdns, stackParams); - } catch (MsoException me) { - me.addContext (CREATE_NETWORK_CONTEXT); - logger.error("{} {} Exception Create Network, merging routeTableRefs type {} in {}/{} ", + if (policyFqdns != null && !policyFqdns.isEmpty() && aic3template) { + try { + mergePolicyRefs(policyFqdns, stackParams); + } catch (MsoException me) { + me.addContext(CREATE_NETWORK_CONTEXT); + logger.error("{} {} Exception Create Network, merging policyRefs type {} in {}/{} ", MessageEnum.RA_CREATE_NETWORK_EXC, ErrorCode.DataError.getValue(), neutronNetworkType.toString(), cloudSiteId, tenantId, me); - throw new NetworkException (me); - } + throw new NetworkException(me); } + } - // Deploy the network stack - // Ignore MsoStackAlreadyExists exception because we already checked. + if (routeTableFqdns != null && !routeTableFqdns.isEmpty() && aic3template) { try { - if (backout == null) - backout = true; - heatStack = heat.createStack (cloudSiteId, - tenantId, - networkName, - template, - stackParams, - true, - heatTemplate.getTimeoutMinutes (), - null, - null, - null, - backout.booleanValue()); + mergeRouteTableRefs(routeTableFqdns, stackParams); } catch (MsoException me) { - me.addContext (CREATE_NETWORK_CONTEXT); - logger - .error("{} {} Exception creating network type {} in {}/{} ", MessageEnum.RA_CREATE_NETWORK_EXC, - ErrorCode.DataError.getValue(), networkName, cloudSiteId, tenantId, me); - throw new NetworkException (me); + me.addContext(CREATE_NETWORK_CONTEXT); + logger.error("{} {} Exception Create Network, merging routeTableRefs type {} in {}/{} ", + MessageEnum.RA_CREATE_NETWORK_EXC, ErrorCode.DataError.getValue(), + neutronNetworkType.toString(), cloudSiteId, tenantId, me); + throw new NetworkException(me); } + } + + // Deploy the network stack + // Ignore MsoStackAlreadyExists exception because we already checked. + try { + if (backout == null) + backout = true; + heatStack = heat.createStack(cloudSiteId, "CloudOwner", tenantId, networkName, null, template, + stackParams, true, heatTemplate.getTimeoutMinutes(), null, null, null, backout.booleanValue()); + } catch (MsoException me) { + me.addContext(CREATE_NETWORK_CONTEXT); + logger.error("{} {} Exception creating network type {} in {}/{} ", MessageEnum.RA_CREATE_NETWORK_EXC, + ErrorCode.DataError.getValue(), networkName, cloudSiteId, tenantId, me); + throw new NetworkException(me); + } - // Reach this point if createStack is successful. + // Reach this point if createStack is successful. - // For Heat-based orchestration, the MSO-tracked network ID is the heat stack, - // and the neutronNetworkId is the network UUID returned in stack outputs. - networkId.value = heatStack.getCanonicalName (); - neutronNetworkId.value = (String) heatStack.getOutputs ().get (NETWORK_ID); - if (aic3template) - { - networkFqdn.value = (String) heatStack.getOutputs().get(NETWORK_FQDN); - } - Map <String, Object> outputs = heatStack.getOutputs (); - Map <String, String> sMap = new HashMap <> (); - if (outputs != null) { - for (Map.Entry<String, Object> entry : outputs.entrySet()) { - String key = entry.getKey(); - if (key != null && key.startsWith ("subnet")) { - if (aic3template) //one subnet output expected - { - Map <String, String> map = getSubnetUUId(key, outputs, subnets); - sMap.putAll(map); - } - else //multiples subnet_%aaid% outputs allowed - { - String subnetUUId = (String) outputs.get(key); - sMap.put (key.substring("subnet_id_".length()), subnetUUId); - } + // For Heat-based orchestration, the MSO-tracked network ID is the heat stack, + // and the neutronNetworkId is the network UUID returned in stack outputs. + networkId.value = heatStack.getCanonicalName(); + neutronNetworkId.value = (String) heatStack.getOutputs().get(NETWORK_ID); + if (aic3template) { + networkFqdn.value = (String) heatStack.getOutputs().get(NETWORK_FQDN); + } + Map<String, Object> outputs = heatStack.getOutputs(); + Map<String, String> sMap = new HashMap<>(); + if (outputs != null) { + for (Map.Entry<String, Object> entry : outputs.entrySet()) { + String key = entry.getKey(); + if (key != null && key.startsWith("subnet")) { + if (aic3template) // one subnet output expected + { + Map<String, String> map = getSubnetUUId(key, outputs, subnets); + sMap.putAll(map); + } else // multiples subnet_%aaid% outputs allowed + { + String subnetUUId = (String) outputs.get(key); + sMap.put(key.substring("subnet_id_".length()), subnetUUId); } } } - subnetIdMap.value = sMap; + } + subnetIdMap.value = sMap; - rollback.value = networkRollback; - // Populate remaining rollback info and response parameters. - networkRollback.setNetworkStackId (heatStack.getCanonicalName ()); - networkRollback.setNeutronNetworkId ((String) heatStack.getOutputs ().get (NETWORK_ID)); - networkRollback.setNetworkCreated (true); - networkRollback.setNetworkType (networkType); + rollback.value = networkRollback; + // Populate remaining rollback info and response parameters. + networkRollback.setNetworkStackId(heatStack.getCanonicalName()); + networkRollback.setNeutronNetworkId((String) heatStack.getOutputs().get(NETWORK_ID)); + networkRollback.setNetworkCreated(true); + networkRollback.setNetworkType(networkType); + + logger.debug("Network {} successfully created via HEAT", networkName); + } - logger.debug("Network {} successfully created via HEAT", networkName); - } - return; } @Override - public void updateNetwork (String cloudSiteId, - String tenantId, - String networkType, - String modelCustomizationUuid, - String networkId, - String networkName, - String physicalNetworkName, - List <Integer> vlans, - String shared, - String external, - List <Subnet> subnets, - Map<String,String> networkParams, - MsoRequest msoRequest, - Holder <Map <String, String>> subnetIdMap, - Holder <NetworkRollback> rollback) throws NetworkException { - updateNetwork (cloudSiteId, - tenantId, - networkType, - modelCustomizationUuid, - networkId, - networkName, - physicalNetworkName, - vlans, - null, - shared, - external, - subnets, - null, - null, - msoRequest, - subnetIdMap, - rollback); + public void updateNetwork(String cloudSiteId, String tenantId, String networkType, String modelCustomizationUuid, + String networkId, String networkName, String physicalNetworkName, List<Integer> vlans, String shared, + String external, List<Subnet> subnets, Map<String, String> networkParams, MsoRequest msoRequest, + Holder<Map<String, String>> subnetIdMap, Holder<NetworkRollback> rollback) throws NetworkException { + updateNetwork(cloudSiteId, tenantId, networkType, modelCustomizationUuid, networkId, networkName, + physicalNetworkName, vlans, null, shared, external, subnets, null, null, msoRequest, subnetIdMap, + rollback); } @Override - public void updateNetworkContrail (String cloudSiteId, - String tenantId, - String networkType, - String modelCustomizationUuid, - String networkId, - String networkName, - List <RouteTarget> routeTargets, - String shared, - String external, - List <Subnet> subnets, - Map<String, String> networkParams, - List <String> policyFqdns, - List<String> routeTableFqdns, - MsoRequest msoRequest, - Holder <Map <String, String>> subnetIdMap, - Holder <NetworkRollback> rollback) throws NetworkException { - updateNetwork (cloudSiteId, - tenantId, - networkType, - modelCustomizationUuid, - networkId, - networkName, - null, - null, - routeTargets, - shared, - external, - subnets, - policyFqdns, - routeTableFqdns, - msoRequest, - subnetIdMap, - rollback); + public void updateNetworkContrail(String cloudSiteId, String tenantId, String networkType, + String modelCustomizationUuid, String networkId, String networkName, List<RouteTarget> routeTargets, + String shared, String external, List<Subnet> subnets, Map<String, String> networkParams, + List<String> policyFqdns, List<String> routeTableFqdns, MsoRequest msoRequest, + Holder<Map<String, String>> subnetIdMap, Holder<NetworkRollback> rollback) throws NetworkException { + updateNetwork(cloudSiteId, tenantId, networkType, modelCustomizationUuid, networkId, networkName, null, null, + routeTargets, shared, external, subnets, policyFqdns, routeTableFqdns, msoRequest, subnetIdMap, + rollback); } /** - * This is the "Update Network" web service implementation. - * It will update an existing Network of the requested type in the specified cloud - * and tenant. The typical use will be to replace the VLANs with the supplied - * list (to add or remove a VLAN), but other properties may be updated as well. + * This is the "Update Network" web service implementation. It will update an existing Network of the requested type + * in the specified cloud and tenant. The typical use will be to replace the VLANs with the supplied list (to add or + * remove a VLAN), but other properties may be updated as well. * - * There will be a pre-defined set of network types defined in the MSO Catalog. - * All such networks will have a similar configuration, based on the allowable - * Openstack networking definitions. This includes basic networks, provider - * networks (with a single VLAN), and multi-provider networks (one or more VLANs). + * There will be a pre-defined set of network types defined in the MSO Catalog. All such networks will have a + * similar configuration, based on the allowable Openstack networking definitions. This includes basic networks, + * provider networks (with a single VLAN), and multi-provider networks (one or more VLANs). * - * Initially, all provider networks must currently be "vlan" type, and multi-provider - * networks must be multiple VLANs on the same physical network. + * Initially, all provider networks must currently be "vlan" type, and multi-provider networks must be multiple + * VLANs on the same physical network. * - * This service supports two modes of Network update: - * - via Heat Templates - * - via Neutron API - * The network orchestration mode for each network type is declared in its - * catalog definition. All Heat-based templates must support some subset of - * the same input parameters: network_name, physical_network, vlan, segments. + * This service supports two modes of Network update: - via Heat Templates - via Neutron API The network + * orchestration mode for each network type is declared in its catalog definition. All Heat-based templates must + * support some subset of the same input parameters: network_name, physical_network, vlan, segments. * - * The method returns a NetworkRollback object. This object can be passed - * as-is to the rollbackNetwork operation to undo everything that was updated. - * This is useful if a network is successfully updated but orchestration - * fails on a subsequent operation. + * The method returns a NetworkRollback object. This object can be passed as-is to the rollbackNetwork operation to + * undo everything that was updated. This is useful if a network is successfully updated but orchestration fails on + * a subsequent operation. */ - private void updateNetwork (String cloudSiteId, - String tenantId, - String networkType, - String modelCustomizationUuid, - String networkId, - String networkName, - String physicalNetworkName, - List <Integer> vlans, - List <RouteTarget> routeTargets, - String shared, - String external, - List <Subnet> subnets, - List <String> policyFqdns, - List<String> routeTableFqdns, - MsoRequest msoRequest, - Holder <Map <String, String>> subnetIdMap, - Holder <NetworkRollback> rollback) throws NetworkException { + private void updateNetwork(String cloudSiteId, String tenantId, String networkType, String modelCustomizationUuid, + String networkId, String networkName, String physicalNetworkName, List<Integer> vlans, + List<RouteTarget> routeTargets, String shared, String external, List<Subnet> subnets, + List<String> policyFqdns, List<String> routeTableFqdns, MsoRequest msoRequest, + Holder<Map<String, String>> subnetIdMap, Holder<NetworkRollback> rollback) throws NetworkException { logger.debug("***UPDATE Network adapter with Network: {} of type {} in {}/{}", networkName, networkType, - cloudSiteId, tenantId); + cloudSiteId, tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); // Build a default rollback object (no actions performed) - NetworkRollback networkRollback = new NetworkRollback (); - networkRollback.setCloudId (cloudSiteId); - networkRollback.setTenantId (tenantId); - networkRollback.setMsoRequest (msoRequest); + NetworkRollback networkRollback = new NetworkRollback(); + networkRollback.setCloudId(cloudSiteId); + networkRollback.setTenantId(tenantId); + networkRollback.setMsoRequest(msoRequest); - Optional<CloudSite> cloudSiteOpt = cloudConfig.getCloudSite (cloudSiteId); + Optional<CloudSite> cloudSiteOpt = cloudConfig.getCloudSite(cloudSiteId); if (!cloudSiteOpt.isPresent()) { String error = String.format( - "UpdateNetwork: Configuration Error. Stack %s in %s/%s: CloudSite does not exist in MSO Configuration", - networkName, cloudSiteId, tenantId); + "UpdateNetwork: Configuration Error. Stack %s in %s/%s: CloudSite does not exist in MSO Configuration", + networkName, cloudSiteId, tenantId); logger.error("{} {} {}", MessageEnum.RA_CONFIG_EXC, ErrorCode.DataError.getValue(), error); // Set the detailed error as the Exception 'message' throw new NetworkException(error, MsoExceptionCategory.USERDATA); @@ -736,440 +544,364 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { - - NetworkResource networkResource = networkCheck( - startTime, - networkType, - modelCustomizationUuid, - networkName, - physicalNetworkName, - vlans, - routeTargets, - cloudSiteId, - cloudSiteOpt.get()); - String mode = networkResource.getOrchestrationMode(); - NetworkType neutronNetworkType = NetworkType.valueOf(networkResource.getNeutronNetworkType()); + NetworkResource networkResource = networkCheck(startTime, networkType, modelCustomizationUuid, networkName, + physicalNetworkName, vlans, routeTargets, cloudSiteId, cloudSiteOpt.get()); + String mode = networkResource.getOrchestrationMode(); + NetworkType neutronNetworkType = NetworkType.valueOf(networkResource.getNeutronNetworkType()); - // Use an MsoNeutronUtils for all Neutron commands + // Use an MsoNeutronUtils for all Neutron commands - if (NEUTRON_MODE.equals(mode)) { + if (NEUTRON_MODE.equals(mode)) { - // Verify that the Network exists - // For Neutron-based orchestration, the networkId is the Neutron Network UUID. - NetworkInfo netInfo = null; - long queryNetworkStarttime = System.currentTimeMillis(); - try { - netInfo = neutron.queryNetwork(networkId, tenantId, cloudSiteId); - } catch (MsoException me) { - me.addContext(UPDATE_NETWORK_CONTEXT); - logger.error("{} {} Exception - queryNetwork query {} in {}/{} ", MessageEnum.RA_QUERY_NETWORK_EXC, + // Verify that the Network exists + // For Neutron-based orchestration, the networkId is the Neutron Network UUID. + NetworkInfo netInfo = null; + long queryNetworkStarttime = System.currentTimeMillis(); + try { + netInfo = neutron.queryNetwork(networkId, tenantId, cloudSiteId); + } catch (MsoException me) { + me.addContext(UPDATE_NETWORK_CONTEXT); + logger.error("{} {} Exception - queryNetwork query {} in {}/{} ", MessageEnum.RA_QUERY_NETWORK_EXC, ErrorCode.BusinessProcesssError.getValue(), networkId, cloudSiteId, tenantId, me); - throw new NetworkException(me); - } + throw new NetworkException(me); + } - if (netInfo == null) { - String error = String - .format("Update Nework: Network %s does not exist in %s/%s", networkId, cloudSiteId, tenantId); - logger.error("{} {} {}", MessageEnum.RA_NETWORK_NOT_FOUND, - ErrorCode.BusinessProcesssError.getValue(), error); - // Does not exist. Throw an exception (can't update a non-existent network) - throw new NetworkException(error, MsoExceptionCategory.USERDATA); - } - long updateNetworkStarttime = System.currentTimeMillis(); - try { - netInfo = neutron.updateNetwork(cloudSiteId, - tenantId, - networkId, - neutronNetworkType, - physicalNetworkName, - vlans); - } catch (MsoException me) { - me.addContext(UPDATE_NETWORK_CONTEXT); - logger.error("{} {} Exception - updateNetwork {} in {}/{} ", MessageEnum.RA_UPDATE_NETWORK_ERR, + if (netInfo == null) { + String error = String.format("Update Nework: Network %s does not exist in %s/%s", networkId, + cloudSiteId, tenantId); + logger.error("{} {} {}", MessageEnum.RA_NETWORK_NOT_FOUND, ErrorCode.BusinessProcesssError.getValue(), + error); + // Does not exist. Throw an exception (can't update a non-existent network) + throw new NetworkException(error, MsoExceptionCategory.USERDATA); + } + long updateNetworkStarttime = System.currentTimeMillis(); + try { + netInfo = neutron.updateNetwork(cloudSiteId, tenantId, networkId, neutronNetworkType, + physicalNetworkName, vlans); + } catch (MsoException me) { + me.addContext(UPDATE_NETWORK_CONTEXT); + logger.error("{} {} Exception - updateNetwork {} in {}/{} ", MessageEnum.RA_UPDATE_NETWORK_ERR, ErrorCode.DataError.getValue(), networkId, cloudSiteId, tenantId, me); - throw new NetworkException(me); - } - - // Add the network ID and previously queried vlans to the rollback object - networkRollback.setNetworkId(netInfo.getId()); - networkRollback.setNeutronNetworkId(netInfo.getId()); - networkRollback.setNetworkType(networkType); - // Save previous parameters - networkRollback.setNetworkName(netInfo.getName()); - networkRollback.setPhysicalNetwork(netInfo.getProvider()); - networkRollback.setVlans(netInfo.getVlans()); - - logger.debug("Network {} updated, id = {}", networkId, netInfo.getId()); - } else if ("HEAT".equals(mode)) { + throw new NetworkException(me); + } - // First, look up to see that the Network already exists. - // For Heat-based orchestration, the networkId is the network Stack ID. - StackInfo heatStack = null; - long queryStackStarttime = System.currentTimeMillis(); - try { - heatStack = heat.queryStack(cloudSiteId, tenantId, networkName); - } catch (MsoException me) { - me.addContext(UPDATE_NETWORK_CONTEXT); - logger.error("{} {} Exception - QueryStack query {} in {}/{} ", MessageEnum.RA_QUERY_NETWORK_EXC, + // Add the network ID and previously queried vlans to the rollback object + networkRollback.setNetworkId(netInfo.getId()); + networkRollback.setNeutronNetworkId(netInfo.getId()); + networkRollback.setNetworkType(networkType); + // Save previous parameters + networkRollback.setNetworkName(netInfo.getName()); + networkRollback.setPhysicalNetwork(netInfo.getProvider()); + networkRollback.setVlans(netInfo.getVlans()); + + logger.debug("Network {} updated, id = {}", networkId, netInfo.getId()); + } else if ("HEAT".equals(mode)) { + + // First, look up to see that the Network already exists. + // For Heat-based orchestration, the networkId is the network Stack ID. + StackInfo heatStack = null; + long queryStackStarttime = System.currentTimeMillis(); + try { + heatStack = heat.queryStack(cloudSiteId, "CloudOwner", tenantId, networkName); + } catch (MsoException me) { + me.addContext(UPDATE_NETWORK_CONTEXT); + logger.error("{} {} Exception - QueryStack query {} in {}/{} ", MessageEnum.RA_QUERY_NETWORK_EXC, ErrorCode.DataError.getValue(), networkId, cloudSiteId, tenantId, me); - throw new NetworkException(me); - } + throw new NetworkException(me); + } - if (heatStack == null || (heatStack.getStatus() == HeatStatus.NOTFOUND)) { - String error = String - .format("UpdateNetwork: Stack %s does not exist in %s/%s", networkName, cloudSiteId, tenantId); - logger.error("{} {} {}", MessageEnum.RA_NETWORK_NOT_FOUND, ErrorCode.DataError.getValue(), - error); - // Network stack does not exist. Return an error - throw new NetworkException(error, MsoExceptionCategory.USERDATA); - } + if (heatStack == null || (heatStack.getStatus() == HeatStatus.NOTFOUND)) { + String error = String.format("UpdateNetwork: Stack %s does not exist in %s/%s", networkName, + cloudSiteId, tenantId); + logger.error("{} {} {}", MessageEnum.RA_NETWORK_NOT_FOUND, ErrorCode.DataError.getValue(), error); + // Network stack does not exist. Return an error + throw new NetworkException(error, MsoExceptionCategory.USERDATA); + } - // Get the previous parameters for rollback - Map<String, Object> heatParams = heatStack.getParameters(); + // Get the previous parameters for rollback + Map<String, Object> heatParams = heatStack.getParameters(); - String previousNetworkName = (String) heatParams.get("network_name"); - String previousPhysicalNetwork = (String) heatParams.get(PHYSICAL_NETWORK); + String previousNetworkName = (String) heatParams.get("network_name"); + String previousPhysicalNetwork = (String) heatParams.get(PHYSICAL_NETWORK); - List<Integer> previousVlans = new ArrayList<>(); - String vlansParam = (String) heatParams.get(VLANS); - if (vlansParam != null) { - for (String vlan : vlansParam.split(",")) { - try { - previousVlans.add(Integer.parseInt(vlan)); - } catch (NumberFormatException e) { - logger.warn("{} {} Exception - VLAN parse for params {} ", MessageEnum.RA_VLAN_PARSE, + List<Integer> previousVlans = new ArrayList<>(); + String vlansParam = (String) heatParams.get(VLANS); + if (vlansParam != null) { + for (String vlan : vlansParam.split(",")) { + try { + previousVlans.add(Integer.parseInt(vlan)); + } catch (NumberFormatException e) { + logger.warn("{} {} Exception - VLAN parse for params {} ", MessageEnum.RA_VLAN_PARSE, ErrorCode.DataError.getValue(), vlansParam, e); - } } } - logger.debug("Update Stack: Previous VLANS: {}", previousVlans); + } + logger.debug("Update Stack: Previous VLANS: {}", previousVlans); - // Ready to deploy the updated Network via Heat + // Ready to deploy the updated Network via Heat - HeatTemplate heatTemplate = networkResource.getHeatTemplate(); - if (heatTemplate == null) { - String error = "Network error - undefined Heat Template. Network Type=" + networkType; - logger.error("{} {} {}", MessageEnum.RA_PARAM_NOT_FOUND, ErrorCode.DataError.getValue(), - error); - throw new NetworkException(error, MsoExceptionCategory.INTERNAL); - } + HeatTemplate heatTemplate = networkResource.getHeatTemplate(); + if (heatTemplate == null) { + String error = "Network error - undefined Heat Template. Network Type=" + networkType; + logger.error("{} {} {}", MessageEnum.RA_PARAM_NOT_FOUND, ErrorCode.DataError.getValue(), error); + throw new NetworkException(error, MsoExceptionCategory.INTERNAL); + } - logger.debug("Got HEAT Template from DB: {}", heatTemplate.toString()); - - // "Fix" the template if it has CR/LF (getting this from Oracle) - String template = heatTemplate.getHeatTemplate(); - template = template.replaceAll("\r\n", "\n"); - - boolean aic3template = false; - String aic3nw = AIC3_NW; - - aic3nw = environment.getProperty(AIC3_NW_PROPERTY, AIC3_NW); - - if (template.contains(aic3nw)) - aic3template = true; - - // Build the common set of HEAT template parameters - Map<String, Object> stackParams = populateNetworkParams(neutronNetworkType, - networkName, - physicalNetworkName, - vlans, - routeTargets, - shared, - external, - aic3template); - - // Validate (and update) the input parameters against the DB definition - // Shouldn't happen unless DB config is wrong, since all networks use same inputs - try { - stackParams = heat.validateStackParams(stackParams, heatTemplate); - } catch (IllegalArgumentException e) { - String error = "UpdateNetwork: Configuration Error: Network Type=" + networkType; - logger.error("{} {} {} ", MessageEnum.RA_CONFIG_EXC, ErrorCode.DataError.getValue(), error); - throw new NetworkException(error, MsoExceptionCategory.INTERNAL, e); - } + logger.debug("Got HEAT Template from DB: {}", heatTemplate.toString()); - if (subnets != null) { - try { - if (aic3template) { - template = mergeSubnetsAIC3(template, subnets, stackParams); - } else { - template = mergeSubnets(template, subnets); - } - } catch (MsoException me) { - me.addContext(UPDATE_NETWORK_CONTEXT); - logger.error("{} {} Exception - UpdateNetwork mergeSubnets for network type {} in {}/{} ", - MessageEnum.RA_UPDATE_NETWORK_ERR, ErrorCode.DataError.getValue(), - neutronNetworkType.toString(), cloudSiteId, tenantId, me); - throw new NetworkException(me); - } - } + // "Fix" the template if it has CR/LF (getting this from Oracle) + String template = heatTemplate.getHeatTemplate(); + template = template.replaceAll("\r\n", "\n"); - if (policyFqdns != null && aic3template) { - try { - mergePolicyRefs(policyFqdns, stackParams); - } catch (MsoException me) { - me.addContext(UPDATE_NETWORK_CONTEXT); - logger.error("{} {} Exception - UpdateNetwork mergePolicyRefs type {} in {}/{} ", + boolean aic3template = false; + String aic3nw = AIC3_NW; + + aic3nw = environment.getProperty(AIC3_NW_PROPERTY, AIC3_NW); + + if (template.contains(aic3nw)) + aic3template = true; + + // Build the common set of HEAT template parameters + Map<String, Object> stackParams = populateNetworkParams(neutronNetworkType, networkName, + physicalNetworkName, vlans, routeTargets, shared, external, aic3template); + + // Validate (and update) the input parameters against the DB definition + // Shouldn't happen unless DB config is wrong, since all networks use same inputs + try { + stackParams = heat.validateStackParams(stackParams, heatTemplate); + } catch (IllegalArgumentException e) { + String error = "UpdateNetwork: Configuration Error: Network Type=" + networkType; + logger.error("{} {} {} ", MessageEnum.RA_CONFIG_EXC, ErrorCode.DataError.getValue(), error); + throw new NetworkException(error, MsoExceptionCategory.INTERNAL, e); + } + + if (subnets != null) { + try { + if (aic3template) { + template = mergeSubnetsAIC3(template, subnets, stackParams); + } else { + template = mergeSubnets(template, subnets); + } + } catch (MsoException me) { + me.addContext(UPDATE_NETWORK_CONTEXT); + logger.error("{} {} Exception - UpdateNetwork mergeSubnets for network type {} in {}/{} ", MessageEnum.RA_UPDATE_NETWORK_ERR, ErrorCode.DataError.getValue(), neutronNetworkType.toString(), cloudSiteId, tenantId, me); - throw new NetworkException(me); - } + throw new NetworkException(me); } + } - if (routeTableFqdns != null && !routeTableFqdns.isEmpty() && aic3template) { - try { - mergeRouteTableRefs(routeTableFqdns, stackParams); - } catch (MsoException me) { - me.addContext(UPDATE_NETWORK_CONTEXT); - logger.error("{} {} Exception - UpdateNetwork mergeRouteTableRefs type {} in {}/{} ", + if (policyFqdns != null && aic3template) { + try { + mergePolicyRefs(policyFqdns, stackParams); + } catch (MsoException me) { + me.addContext(UPDATE_NETWORK_CONTEXT); + logger.error("{} {} Exception - UpdateNetwork mergePolicyRefs type {} in {}/{} ", MessageEnum.RA_UPDATE_NETWORK_ERR, ErrorCode.DataError.getValue(), neutronNetworkType.toString(), cloudSiteId, tenantId, me); - throw new NetworkException(me); - } + throw new NetworkException(me); } + } - // Update the network stack - // Ignore MsoStackNotFound exception because we already checked. - long updateStackStarttime = System.currentTimeMillis(); + if (routeTableFqdns != null && !routeTableFqdns.isEmpty() && aic3template) { try { - heatStack = heatWithUpdate.updateStack(cloudSiteId, - tenantId, - networkId, - template, - stackParams, - true, - heatTemplate.getTimeoutMinutes()); + mergeRouteTableRefs(routeTableFqdns, stackParams); } catch (MsoException me) { me.addContext(UPDATE_NETWORK_CONTEXT); - logger.error("{} {} Exception - update network {} in {}/{} ", MessageEnum.RA_UPDATE_NETWORK_ERR, - ErrorCode.DataError.getValue(), networkId, cloudSiteId, tenantId, me); + logger.error("{} {} Exception - UpdateNetwork mergeRouteTableRefs type {} in {}/{} ", + MessageEnum.RA_UPDATE_NETWORK_ERR, ErrorCode.DataError.getValue(), + neutronNetworkType.toString(), cloudSiteId, tenantId, me); throw new NetworkException(me); } + } - Map<String, Object> outputs = heatStack.getOutputs(); - Map<String, String> sMap = new HashMap<>(); - if (outputs != null) { - for (Map.Entry<String, Object> entry : outputs.entrySet()) { - String key=entry.getKey(); - if (key != null && key.startsWith("subnet")) { - if (aic3template) //one subnet output expected - { - Map<String, String> map = getSubnetUUId(key, outputs, subnets); - sMap.putAll(map); - } else //multiples subnet_%aaid% outputs allowed - { - String subnetUUId = (String) outputs.get(key); - sMap.put(key.substring("subnet_id_".length()), subnetUUId); - } + // Update the network stack + // Ignore MsoStackNotFound exception because we already checked. + long updateStackStarttime = System.currentTimeMillis(); + try { + heatStack = heatWithUpdate.updateStack(cloudSiteId, "CloudOwner", tenantId, networkId, template, + stackParams, true, heatTemplate.getTimeoutMinutes()); + } catch (MsoException me) { + me.addContext(UPDATE_NETWORK_CONTEXT); + logger.error("{} {} Exception - update network {} in {}/{} ", MessageEnum.RA_UPDATE_NETWORK_ERR, + ErrorCode.DataError.getValue(), networkId, cloudSiteId, tenantId, me); + throw new NetworkException(me); + } + + Map<String, Object> outputs = heatStack.getOutputs(); + Map<String, String> sMap = new HashMap<>(); + if (outputs != null) { + for (Map.Entry<String, Object> entry : outputs.entrySet()) { + String key = entry.getKey(); + if (key != null && key.startsWith("subnet")) { + if (aic3template) // one subnet output expected + { + Map<String, String> map = getSubnetUUId(key, outputs, subnets); + sMap.putAll(map); + } else // multiples subnet_%aaid% outputs allowed + { + String subnetUUId = (String) outputs.get(key); + sMap.put(key.substring("subnet_id_".length()), subnetUUId); } } } - subnetIdMap.value = sMap; + } + subnetIdMap.value = sMap; - // Reach this point if createStack is successful. - // Populate remaining rollback info and response parameters. - networkRollback.setNetworkStackId(heatStack.getCanonicalName()); - if(null != outputs) { - networkRollback.setNeutronNetworkId((String) outputs.get(NETWORK_ID)); - } - else { - logger.debug("outputs is NULL"); - } - networkRollback.setNetworkType(networkType); - // Save previous parameters - networkRollback.setNetworkName(previousNetworkName); - networkRollback.setPhysicalNetwork(previousPhysicalNetwork); - networkRollback.setVlans(previousVlans); + // Reach this point if createStack is successful. + // Populate remaining rollback info and response parameters. + networkRollback.setNetworkStackId(heatStack.getCanonicalName()); + if (null != outputs) { + networkRollback.setNeutronNetworkId((String) outputs.get(NETWORK_ID)); + } else { + logger.debug("outputs is NULL"); + } + networkRollback.setNetworkType(networkType); + // Save previous parameters + networkRollback.setNetworkName(previousNetworkName); + networkRollback.setPhysicalNetwork(previousPhysicalNetwork); + networkRollback.setVlans(previousVlans); - rollback.value = networkRollback; + rollback.value = networkRollback; - logger.debug("Network {} successfully updated via HEAT", networkId); - } + logger.debug("Network {} successfully updated via HEAT", networkId); + } return; } - private NetworkResource networkCheck (long startTime, - String networkType, - String modelCustomizationUuid, - String networkName, - String physicalNetworkName, - List <Integer> vlans, - List <RouteTarget> routeTargets, - String cloudSiteId, - CloudSite cloudSite) throws NetworkException { + private NetworkResource networkCheck(long startTime, String networkType, String modelCustomizationUuid, + String networkName, String physicalNetworkName, List<Integer> vlans, List<RouteTarget> routeTargets, + String cloudSiteId, CloudSite cloudSite) throws NetworkException { // Retrieve the Network Resource definition NetworkResource networkResource = null; NetworkResourceCustomization networkCust = null; CollectionNetworkResourceCustomization collectionNetworkCust = null; - if (commonUtils.isNullOrEmpty(modelCustomizationUuid)) { - if (!commonUtils.isNullOrEmpty(networkType)) { - networkResource = networkResourceRepo.findFirstByModelNameOrderByModelVersionDesc(networkType); - } - } else { - networkCust = networkCustomRepo.findOneByModelCustomizationUUID(modelCustomizationUuid); - if (networkCust == null) { - collectionNetworkCust = collectionNetworkCustomRepo.findOneByModelCustomizationUUID(modelCustomizationUuid); - } - } - if(networkCust != null){ - logger.debug("Got Network Customization definition from Catalog: {}", networkCust.toString()); - - networkResource = networkCust.getNetworkResource(); - } else if (collectionNetworkCust != null) { - logger.debug("Retrieved Collection Network Resource Customization from Catalog: {}", - collectionNetworkCust.toString()); - networkResource = collectionNetworkCust.getNetworkResource(); - } - if (networkResource == null) { - String error = String.format( - "Create/UpdateNetwork: Unable to get network resource with NetworkType: %s or ModelCustomizationUUID:%s", - networkType, modelCustomizationUuid); - logger.error("{} {} {} ", MessageEnum.RA_UNKOWN_PARAM, ErrorCode.DataError.getValue(), error); - - throw new NetworkException(error, MsoExceptionCategory.USERDATA); - } + if (commonUtils.isNullOrEmpty(modelCustomizationUuid)) { + if (!commonUtils.isNullOrEmpty(networkType)) { + networkResource = networkResourceRepo.findFirstByModelNameOrderByModelVersionDesc(networkType); + } + } else { + networkCust = networkCustomRepo.findOneByModelCustomizationUUID(modelCustomizationUuid); + if (networkCust == null) { + collectionNetworkCust = + collectionNetworkCustomRepo.findOneByModelCustomizationUUID(modelCustomizationUuid); + } + } + if (networkCust != null) { + logger.debug("Got Network Customization definition from Catalog: {}", networkCust.toString()); + + networkResource = networkCust.getNetworkResource(); + } else if (collectionNetworkCust != null) { + logger.debug("Retrieved Collection Network Resource Customization from Catalog: {}", + collectionNetworkCust.toString()); + networkResource = collectionNetworkCust.getNetworkResource(); + } + if (networkResource == null) { + String error = String.format( + "Create/UpdateNetwork: Unable to get network resource with NetworkType: %s or ModelCustomizationUUID:%s", + networkType, modelCustomizationUuid); + logger.error("{} {} {} ", MessageEnum.RA_UNKOWN_PARAM, ErrorCode.DataError.getValue(), error); + + throw new NetworkException(error, MsoExceptionCategory.USERDATA); + } logger.debug("Got Network definition from Catalog: {}", networkResource.toString()); - String mode = networkResource.getOrchestrationMode(); - NetworkType neutronNetworkType = NetworkType - .valueOf(networkResource.getNeutronNetworkType()); - - // All Networks are orchestrated via HEAT or Neutron - if (!("HEAT".equals(mode) || NEUTRON_MODE.equals(mode))) { - String error = "CreateNetwork: Configuration Error: Network Type = " + networkType; - logger.error("{} {} {}", MessageEnum.RA_NETWORK_ORCHE_MODE_NOT_SUPPORT, - ErrorCode.DataError.getValue(), error); - throw new NetworkException(error, MsoExceptionCategory.INTERNAL); - } - - MavenLikeVersioning aicV = new MavenLikeVersioning(); - aicV.setVersion(cloudSite.getCloudVersion()); - if ((aicV.isMoreRecentThan(networkResource.getAicVersionMin()) || aicV - .isTheSameVersion(networkResource.getAicVersionMin())) // aic - // >= - // min - && (aicV.isTheSameVersion(networkResource - .getAicVersionMax()) || !(aicV - .isMoreRecentThan(networkResource - .getAicVersionMax())))) // aic <= max - { - logger.debug("Network Type:{} VersionMin:{} VersionMax:{} supported on Cloud:{} with AIC_Version:{}", - networkType, networkResource.getAicVersionMin(), networkResource.getAicVersionMax(), cloudSiteId, - cloudSite.getCloudVersion()); - } else { - String error = String - .format("Network Type:%s Version_Min:%s Version_Max:%s not supported on Cloud:%s with AIC_Version:%s", - networkType, networkType, networkResource.getAicVersionMin(), - networkResource.getAicVersionMax(), cloudSiteId, cloudSite.getCloudVersion()); - logger.error("{} {} {} ", MessageEnum.RA_CONFIG_EXC, ErrorCode.DataError.getValue(), error); - throw new NetworkException(error, MsoExceptionCategory.USERDATA); - } - - // Validate the Network parameters. - String missing = validateNetworkParams(neutronNetworkType, - networkName, physicalNetworkName, vlans, routeTargets); - if (!missing.isEmpty()) { - String error = "Create Network: Missing parameters: " + missing; - logger.error("{} {} {}", MessageEnum.RA_MISSING_PARAM, ErrorCode.DataError.getValue(), error); - - throw new NetworkException(error, MsoExceptionCategory.USERDATA); - } - + String mode = networkResource.getOrchestrationMode(); + NetworkType neutronNetworkType = NetworkType.valueOf(networkResource.getNeutronNetworkType()); + + // All Networks are orchestrated via HEAT or Neutron + if (!("HEAT".equals(mode) || NEUTRON_MODE.equals(mode))) { + String error = "CreateNetwork: Configuration Error: Network Type = " + networkType; + logger.error("{} {} {}", MessageEnum.RA_NETWORK_ORCHE_MODE_NOT_SUPPORT, ErrorCode.DataError.getValue(), + error); + throw new NetworkException(error, MsoExceptionCategory.INTERNAL); + } + + MavenLikeVersioning aicV = new MavenLikeVersioning(); + aicV.setVersion(cloudSite.getCloudVersion()); + if ((aicV.isMoreRecentThan(networkResource.getAicVersionMin()) + || aicV.isTheSameVersion(networkResource.getAicVersionMin())) // aic + // >= + // min + && (aicV.isTheSameVersion(networkResource.getAicVersionMax()) + || !(aicV.isMoreRecentThan(networkResource.getAicVersionMax())))) // aic <= max + { + logger.debug("Network Type:{} VersionMin:{} VersionMax:{} supported on Cloud:{} with AIC_Version:{}", + networkType, networkResource.getAicVersionMin(), networkResource.getAicVersionMax(), cloudSiteId, + cloudSite.getCloudVersion()); + } else { + String error = String.format( + "Network Type:%s Version_Min:%s Version_Max:%s not supported on Cloud:%s with AIC_Version:%s", + networkType, networkType, networkResource.getAicVersionMin(), networkResource.getAicVersionMax(), + cloudSiteId, cloudSite.getCloudVersion()); + logger.error("{} {} {} ", MessageEnum.RA_CONFIG_EXC, ErrorCode.DataError.getValue(), error); + throw new NetworkException(error, MsoExceptionCategory.USERDATA); + } + + // Validate the Network parameters. + String missing = + validateNetworkParams(neutronNetworkType, networkName, physicalNetworkName, vlans, routeTargets); + if (!missing.isEmpty()) { + String error = "Create Network: Missing parameters: " + missing; + logger.error("{} {} {}", MessageEnum.RA_MISSING_PARAM, ErrorCode.DataError.getValue(), error); + + throw new NetworkException(error, MsoExceptionCategory.USERDATA); + } + return networkResource; } @Override - public void queryNetwork (String cloudSiteId, - String tenantId, - String networkNameOrId, - MsoRequest msoRequest, - Holder <Boolean> networkExists, - Holder <String> networkId, - Holder <String> neutronNetworkId, - Holder <NetworkStatus> status, - Holder <List <Integer>> vlans, - Holder <Map <String, String>> subnetIdMap) throws NetworkException { - queryNetwork (cloudSiteId, - tenantId, - networkNameOrId, - msoRequest, - networkExists, - networkId, - neutronNetworkId, - status, - vlans, - null, - subnetIdMap); + public void queryNetwork(String cloudSiteId, String tenantId, String networkNameOrId, MsoRequest msoRequest, + Holder<Boolean> networkExists, Holder<String> networkId, Holder<String> neutronNetworkId, + Holder<NetworkStatus> status, Holder<List<Integer>> vlans, Holder<Map<String, String>> subnetIdMap) + throws NetworkException { + queryNetwork(cloudSiteId, tenantId, networkNameOrId, msoRequest, networkExists, networkId, neutronNetworkId, + status, vlans, null, subnetIdMap); } @Override - public void queryNetworkContrail (String cloudSiteId, - String tenantId, - String networkNameOrId, - MsoRequest msoRequest, - Holder <Boolean> networkExists, - Holder <String> networkId, - Holder <String> neutronNetworkId, - Holder <NetworkStatus> status, - Holder <List <RouteTarget>> routeTargets, - Holder <Map <String, String>> subnetIdMap) throws NetworkException { - queryNetwork (cloudSiteId, - tenantId, - networkNameOrId, - msoRequest, - networkExists, - networkId, - neutronNetworkId, - status, - null, - routeTargets, - subnetIdMap); + public void queryNetworkContrail(String cloudSiteId, String tenantId, String networkNameOrId, MsoRequest msoRequest, + Holder<Boolean> networkExists, Holder<String> networkId, Holder<String> neutronNetworkId, + Holder<NetworkStatus> status, Holder<List<RouteTarget>> routeTargets, + Holder<Map<String, String>> subnetIdMap) throws NetworkException { + queryNetwork(cloudSiteId, tenantId, networkNameOrId, msoRequest, networkExists, networkId, neutronNetworkId, + status, null, routeTargets, subnetIdMap); } /** - * This is the queryNetwork method. It returns the existence and status of - * the specified network, along with its Neutron UUID and list of VLANs. - * This method attempts to find the network using both Heat and Neutron. - * Heat stacks are first searched based on the provided network name/id. - * If none is found, the Neutron is directly queried. + * This is the queryNetwork method. It returns the existence and status of the specified network, along with its + * Neutron UUID and list of VLANs. This method attempts to find the network using both Heat and Neutron. Heat stacks + * are first searched based on the provided network name/id. If none is found, the Neutron is directly queried. */ - private void queryNetwork (String cloudSiteId, - String tenantId, - String networkNameOrId, - MsoRequest msoRequest, - Holder <Boolean> networkExists, - Holder <String> networkId, - Holder <String> neutronNetworkId, - Holder <NetworkStatus> status, - Holder <List <Integer>> vlans, - Holder <List <RouteTarget>> routeTargets, - Holder <Map <String, String>> subnetIdMap) throws NetworkException { + private void queryNetwork(String cloudSiteId, String tenantId, String networkNameOrId, MsoRequest msoRequest, + Holder<Boolean> networkExists, Holder<String> networkId, Holder<String> neutronNetworkId, + Holder<NetworkStatus> status, Holder<List<Integer>> vlans, Holder<List<RouteTarget>> routeTargets, + Holder<Map<String, String>> subnetIdMap) throws NetworkException { logger.debug("*** QUERY Network with Network: {} in {}/{}", networkNameOrId, cloudSiteId, tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); - if (commonUtils.isNullOrEmpty (cloudSiteId) - || commonUtils.isNullOrEmpty(tenantId) - || commonUtils.isNullOrEmpty(networkNameOrId)) { + if (commonUtils.isNullOrEmpty(cloudSiteId) || commonUtils.isNullOrEmpty(tenantId) + || commonUtils.isNullOrEmpty(networkNameOrId)) { String error = "Missing mandatory parameter cloudSiteId, tenantId or networkId"; logger.error("{} {} {}", MessageEnum.RA_MISSING_PARAM, ErrorCode.DataError.getValue(), error); - throw new NetworkException (error, MsoExceptionCategory.USERDATA); + throw new NetworkException(error, MsoExceptionCategory.USERDATA); } Optional<CloudSite> cloudSiteOpt = cloudConfig.getCloudSite(cloudSiteId); - if (!cloudSiteOpt.isPresent()) - { - String error = String - .format("Configuration Error. Stack %s in %s/%s: CloudSite does not exist in MSO Configuration", + if (!cloudSiteOpt.isPresent()) { + String error = String.format( + "Configuration Error. Stack %s in %s/%s: CloudSite does not exist in MSO Configuration", networkNameOrId, cloudSiteId, tenantId); logger.error("{} {} {}", MessageEnum.RA_CONFIG_EXC, ErrorCode.DataError.getValue(), error); - // Set the detailed error as the Exception 'message' - throw new NetworkException (error, MsoExceptionCategory.USERDATA); + // Set the detailed error as the Exception 'message' + throw new NetworkException(error, MsoExceptionCategory.USERDATA); } // Use MsoNeutronUtils for all NEUTRON commands @@ -1178,38 +910,37 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { String neutronId; // Try Heat first, since networks may be named the same as the Heat stack StackInfo heatStack = null; - long queryStackStarttime = System.currentTimeMillis (); + long queryStackStarttime = System.currentTimeMillis(); try { - heatStack = heat.queryStack (cloudSiteId, tenantId, networkNameOrId); + heatStack = heat.queryStack(cloudSiteId, "CloudOwner", tenantId, networkNameOrId); } catch (MsoException me) { - me.addContext ("QueryNetwork"); + me.addContext("QueryNetwork"); logger.error("{} {} Exception - Query Network (heat): {} in {}/{} ", MessageEnum.RA_QUERY_NETWORK_EXC, - ErrorCode.DataError.getValue(), networkNameOrId, cloudSiteId, tenantId, me); - throw new NetworkException (me); + ErrorCode.DataError.getValue(), networkNameOrId, cloudSiteId, tenantId, me); + throw new NetworkException(me); } // Populate the outputs based on the returned Stack information - if (heatStack != null && heatStack.getStatus () != HeatStatus.NOTFOUND) { + if (heatStack != null && heatStack.getStatus() != HeatStatus.NOTFOUND) { // Found it. Get the neutronNetworkId for further query - Map <String, Object> outputs = heatStack.getOutputs (); - neutronId = (String) outputs.get (NETWORK_ID); + Map<String, Object> outputs = heatStack.getOutputs(); + neutronId = (String) outputs.get(NETWORK_ID); mode = "HEAT"; - Map <String, String> sMap = new HashMap <> (); + Map<String, String> sMap = new HashMap<>(); if (outputs != null) { - for (String key : outputs.keySet ()) { - if (key != null && key.startsWith ("subnet_id_")) //multiples subnet_%aaid% outputs - { - String subnetUUId = (String) outputs.get(key); - sMap.put (key.substring("subnet_id_".length()), subnetUUId); - } - else if (key != null && key.startsWith ("subnet")) //one subnet output expected - { - Map <String, String> map = getSubnetUUId(key, outputs, null); - sMap.putAll(map); - } - - } + for (String key : outputs.keySet()) { + if (key != null && key.startsWith("subnet_id_")) // multiples subnet_%aaid% outputs + { + String subnetUUId = (String) outputs.get(key); + sMap.put(key.substring("subnet_id_".length()), subnetUUId); + } else if (key != null && key.startsWith("subnet")) // one subnet output expected + { + Map<String, String> map = getSubnetUUId(key, outputs, null); + sMap.putAll(map); + } + + } } subnetIdMap.value = sMap; } else { @@ -1221,271 +952,251 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { // Query directly against the Neutron Network for the details // no RouteTargets available for ContrailV2 in neutron net-show // networkId is heatStackId - long queryNetworkStarttime = System.currentTimeMillis (); + long queryNetworkStarttime = System.currentTimeMillis(); try { - NetworkInfo netInfo = neutron.queryNetwork (neutronId, tenantId, cloudSiteId); + NetworkInfo netInfo = neutron.queryNetwork(neutronId, tenantId, cloudSiteId); if (netInfo != null) { // Found. Populate the output elements networkExists.value = Boolean.TRUE; - if ("HEAT".equals (mode)) { - networkId.value = heatStack.getCanonicalName (); + if ("HEAT".equals(mode)) { + networkId.value = heatStack.getCanonicalName(); } else { - networkId.value = netInfo.getId (); + networkId.value = netInfo.getId(); } - neutronNetworkId.value = netInfo.getId (); - status.value = netInfo.getStatus (); + neutronNetworkId.value = netInfo.getId(); + status.value = netInfo.getStatus(); if (vlans != null) - vlans.value = netInfo.getVlans (); + vlans.value = netInfo.getVlans(); logger.debug("Network {} found({}), ID = {}{}", networkNameOrId, mode, networkId.value, - ("HEAT".equals(mode) ? ",NeutronId = " + neutronNetworkId.value : "")); + ("HEAT".equals(mode) ? ",NeutronId = " + neutronNetworkId.value : "")); } else { // Not found. Populate the status fields, leave the rest null networkExists.value = Boolean.FALSE; status.value = NetworkStatus.NOTFOUND; neutronNetworkId.value = null; if (vlans != null) - vlans.value = new ArrayList<>(); + vlans.value = new ArrayList<>(); logger.debug("Network {} not found", networkNameOrId); } } catch (MsoException me) { - me.addContext ("QueryNetwork"); + me.addContext("QueryNetwork"); logger.error("{} {} Exception - Query Network (neutron): {} in {}/{} ", MessageEnum.RA_QUERY_NETWORK_EXC, - ErrorCode.DataError.getValue(), networkNameOrId, cloudSiteId, tenantId, me); - throw new NetworkException (me); + ErrorCode.DataError.getValue(), networkNameOrId, cloudSiteId, tenantId, me); + throw new NetworkException(me); } return; } /** - * This is the "Delete Network" web service implementation. - * It will delete a Network in the specified cloud and tenant. + * This is the "Delete Network" web service implementation. It will delete a Network in the specified cloud and + * tenant. * * If the network is not found, it is treated as a success. * - * This service supports two modes of Network creation/update/delete: - * - via Heat Templates - * - via Neutron API - * The network orchestration mode for each network type is declared in its - * catalog definition. + * This service supports two modes of Network creation/update/delete: - via Heat Templates - via Neutron API The + * network orchestration mode for each network type is declared in its catalog definition. * - * For Heat-based orchestration, the networkId should be the stack ID. - * For Neutron-based orchestration, the networkId should be the Neutron network UUID. + * For Heat-based orchestration, the networkId should be the stack ID. For Neutron-based orchestration, the + * networkId should be the Neutron network UUID. * - * The method returns nothing on success. Rollback is not possible for delete - * commands, so any failure on delete will require manual fallout in the client. + * The method returns nothing on success. Rollback is not possible for delete commands, so any failure on delete + * will require manual fallout in the client. */ @Override - public void deleteNetwork (String cloudSiteId, - String tenantId, - String networkType, - String modelCustomizationUuid, - String networkId, - MsoRequest msoRequest, - Holder <Boolean> networkDeleted) throws NetworkException { + public void deleteNetwork(String cloudSiteId, String tenantId, String networkType, String modelCustomizationUuid, + String networkId, MsoRequest msoRequest, Holder<Boolean> networkDeleted) throws NetworkException { logger.debug("*** DELETE Network adapter with Network: {} in {}/{}", networkId, cloudSiteId, tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); - - if (commonUtils.isNullOrEmpty (cloudSiteId) - || commonUtils.isNullOrEmpty(tenantId) - || commonUtils.isNullOrEmpty(networkId)) { - String error = "Missing mandatory parameter cloudSiteId, tenantId or networkId"; - logger.error("{} {} {} ", MessageEnum.RA_MISSING_PARAM, ErrorCode.DataError.getValue(), error); - throw new NetworkException (error, MsoExceptionCategory.USERDATA); - } - // Retrieve the Network Resource definition - NetworkResource networkResource = null; - - if (commonUtils.isNullOrEmpty(modelCustomizationUuid)) { - if (!commonUtils.isNullOrEmpty(networkType)) { - networkResource = networkResourceRepo.findFirstByModelNameOrderByModelVersionDesc(networkType); - } - } else { - NetworkResourceCustomization nrc = networkCustomRepo.findOneByModelCustomizationUUID(modelCustomizationUuid); - if (nrc != null) { - networkResource = nrc.getNetworkResource(); - } - } - - String mode = ""; - if (networkResource != null) { - logger.debug("Got Network definition from Catalog: {}", networkResource.toString()); - - mode = networkResource.getOrchestrationMode (); + if (commonUtils.isNullOrEmpty(cloudSiteId) || commonUtils.isNullOrEmpty(tenantId) + || commonUtils.isNullOrEmpty(networkId)) { + String error = "Missing mandatory parameter cloudSiteId, tenantId or networkId"; + logger.error("{} {} {} ", MessageEnum.RA_MISSING_PARAM, ErrorCode.DataError.getValue(), error); + throw new NetworkException(error, MsoExceptionCategory.USERDATA); + } + + // Retrieve the Network Resource definition + NetworkResource networkResource = null; + + if (commonUtils.isNullOrEmpty(modelCustomizationUuid)) { + if (!commonUtils.isNullOrEmpty(networkType)) { + networkResource = networkResourceRepo.findFirstByModelNameOrderByModelVersionDesc(networkType); + } + } else { + NetworkResourceCustomization nrc = + networkCustomRepo.findOneByModelCustomizationUUID(modelCustomizationUuid); + if (nrc != null) { + networkResource = nrc.getNetworkResource(); } + } + String mode = ""; + if (networkResource != null) { + logger.debug("Got Network definition from Catalog: {}", networkResource.toString()); - if (NEUTRON_MODE.equals (mode)) { + mode = networkResource.getOrchestrationMode(); + } - // Use MsoNeutronUtils for all NEUTRON commands - long deleteNetworkStarttime = System.currentTimeMillis (); - try { - // The deleteNetwork function in MsoNeutronUtils returns success if the network - // was not found. So don't bother to query first. - boolean deleted = neutron.deleteNetwork (networkId, tenantId, cloudSiteId); - networkDeleted.value = deleted; - } catch (MsoException me) { - me.addContext ("DeleteNetwork"); - logger.error("{} {} Delete Network (neutron): {} in {}/{} ", MessageEnum.RA_DELETE_NETWORK_EXC, + if (NEUTRON_MODE.equals(mode)) { + + // Use MsoNeutronUtils for all NEUTRON commands + long deleteNetworkStarttime = System.currentTimeMillis(); + try { + // The deleteNetwork function in MsoNeutronUtils returns success if the network + // was not found. So don't bother to query first. + boolean deleted = neutron.deleteNetwork(networkId, tenantId, cloudSiteId); + networkDeleted.value = deleted; + } catch (MsoException me) { + me.addContext("DeleteNetwork"); + logger.error("{} {} Delete Network (neutron): {} in {}/{} ", MessageEnum.RA_DELETE_NETWORK_EXC, ErrorCode.DataError.getValue(), networkId, cloudSiteId, tenantId, me); - throw new NetworkException (me); - } - } else { // DEFAULT to ("HEAT".equals (mode)) - long deleteStackStarttime = System.currentTimeMillis (); + throw new NetworkException(me); + } + } else { // DEFAULT to ("HEAT".equals (mode)) + long deleteStackStarttime = System.currentTimeMillis(); - try { - // The deleteStack function in MsoHeatUtils returns NOTFOUND if the stack was not found or if the stack was deleted. - // So query first to report back if stack WAS deleted or just NOTOFUND - StackInfo heatStack = null; - heatStack = heat.queryStack(cloudSiteId, tenantId, networkId); - if (heatStack != null && heatStack.getStatus() != HeatStatus.NOTFOUND) - { - heat.deleteStack (tenantId, cloudSiteId, networkId, true); - networkDeleted.value = true; - } - else - { - networkDeleted.value = false; - } - } catch (MsoException me) { - me.addContext ("DeleteNetwork"); - logger.error("{} {} Delete Network (heat): {} in {}/{} ", MessageEnum.RA_DELETE_NETWORK_EXC, - ErrorCode.DataError.getValue(), networkId, cloudSiteId, tenantId, me); - throw new NetworkException (me); + try { + // The deleteStack function in MsoHeatUtils returns NOTFOUND if the stack was not found or if the stack + // was deleted. + // So query first to report back if stack WAS deleted or just NOTOFUND + StackInfo heatStack = null; + heatStack = heat.queryStack(cloudSiteId, "CloudOwner", tenantId, networkId); + if (heatStack != null && heatStack.getStatus() != HeatStatus.NOTFOUND) { + heat.deleteStack(tenantId, "CloudOwner", cloudSiteId, networkId, true); + networkDeleted.value = true; + } else { + networkDeleted.value = false; } + } catch (MsoException me) { + me.addContext("DeleteNetwork"); + logger.error("{} {} Delete Network (heat): {} in {}/{} ", MessageEnum.RA_DELETE_NETWORK_EXC, + ErrorCode.DataError.getValue(), networkId, cloudSiteId, tenantId, me); + throw new NetworkException(me); } - + } + // On success, nothing is returned. return; } /** - * This web service endpoint will rollback a previous Create VNF operation. - * A rollback object is returned to the client in a successful creation - * response. The client can pass that object as-is back to the rollbackVnf - * operation to undo the creation. + * This web service endpoint will rollback a previous Create VNF operation. A rollback object is returned to the + * client in a successful creation response. The client can pass that object as-is back to the rollbackVnf operation + * to undo the creation. * - * The rollback includes removing the VNF and deleting the tenant if the - * tenant did not exist prior to the VNF creation. + * The rollback includes removing the VNF and deleting the tenant if the tenant did not exist prior to the VNF + * creation. */ @Override - public void rollbackNetwork (NetworkRollback rollback) throws NetworkException { + public void rollbackNetwork(NetworkRollback rollback) throws NetworkException { // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); if (rollback == null) { - logger - .error("{} {} rollback is null", MessageEnum.RA_ROLLBACK_NULL, ErrorCode.DataError.getValue()); + logger.error("{} {} rollback is null", MessageEnum.RA_ROLLBACK_NULL, ErrorCode.DataError.getValue()); return; } // Get the elements of the VnfRollback object for easier access - String cloudSiteId = rollback.getCloudId (); - String tenantId = rollback.getTenantId (); - String networkId = rollback.getNetworkStackId (); - String networkType = rollback.getNetworkType (); + String cloudSiteId = rollback.getCloudId(); + String tenantId = rollback.getTenantId(); + String networkId = rollback.getNetworkStackId(); + String networkType = rollback.getNetworkType(); String modelCustomizationUuid = rollback.getModelCustomizationUuid(); logger.debug("*** ROLLBACK Network {} in {}/{}", networkId, cloudSiteId, tenantId); - // Retrieve the Network Resource definition - NetworkResource networkResource = null; - if (commonUtils.isNullOrEmpty(modelCustomizationUuid)) { - networkResource = networkCustomRepo.findOneByNetworkType(networkType).getNetworkResource(); - } else { - networkResource = networkCustomRepo.findOneByModelCustomizationUUID(modelCustomizationUuid).getNetworkResource(); - } - String mode = ""; - if (networkResource != null) { + // Retrieve the Network Resource definition + NetworkResource networkResource = null; + if (commonUtils.isNullOrEmpty(modelCustomizationUuid)) { + networkResource = networkCustomRepo.findOneByNetworkType(networkType).getNetworkResource(); + } else { + networkResource = + networkCustomRepo.findOneByModelCustomizationUUID(modelCustomizationUuid).getNetworkResource(); + } + String mode = ""; + if (networkResource != null) { - logger.debug("Got Network definition from Catalog: {}", networkResource.toString()); + logger.debug("Got Network definition from Catalog: {}", networkResource.toString()); - mode = networkResource.getOrchestrationMode (); - } + mode = networkResource.getOrchestrationMode(); + } - if (rollback.getNetworkCreated ()) { - // Rolling back a newly created network, so delete it. - if (NEUTRON_MODE.equals (mode)) { - // Use MsoNeutronUtils for all NEUTRON commands - long deleteNetworkStarttime = System.currentTimeMillis (); - try { - // The deleteNetwork function in MsoNeutronUtils returns success if the network - // was not found. So don't bother to query first. - neutron.deleteNetwork (networkId, tenantId, cloudSiteId); - } catch (MsoException me) { - me.addContext ("RollbackNetwork"); - logger.error("{} {} Exception - Rollback Network (neutron): {} in {}/{} ", - MessageEnum.RA_DELETE_NETWORK_EXC, ErrorCode.BusinessProcesssError.getValue(), - networkId, cloudSiteId, tenantId, me); - throw new NetworkException (me); - } - } else { // DEFAULT to if ("HEAT".equals (mode)) - long deleteStackStarttime = System.currentTimeMillis (); - try { - // The deleteStack function in MsoHeatUtils returns success if the stack - // was not found. So don't bother to query first. - heat.deleteStack (tenantId, cloudSiteId, networkId, true); - } catch (MsoException me) { - me.addContext ("RollbackNetwork"); - logger.error("{} {} Exception - Rollback Network (heat): {} in {}/{} ", - MessageEnum.RA_DELETE_NETWORK_EXC, ErrorCode.BusinessProcesssError.getValue(), - networkId, cloudSiteId, tenantId, me); - throw new NetworkException (me); - } + if (rollback.getNetworkCreated()) { + // Rolling back a newly created network, so delete it. + if (NEUTRON_MODE.equals(mode)) { + // Use MsoNeutronUtils for all NEUTRON commands + long deleteNetworkStarttime = System.currentTimeMillis(); + try { + // The deleteNetwork function in MsoNeutronUtils returns success if the network + // was not found. So don't bother to query first. + neutron.deleteNetwork(networkId, tenantId, cloudSiteId); + } catch (MsoException me) { + me.addContext("RollbackNetwork"); + logger.error("{} {} Exception - Rollback Network (neutron): {} in {}/{} ", + MessageEnum.RA_DELETE_NETWORK_EXC, ErrorCode.BusinessProcesssError.getValue(), networkId, + cloudSiteId, tenantId, me); + throw new NetworkException(me); + } + } else { // DEFAULT to if ("HEAT".equals (mode)) + long deleteStackStarttime = System.currentTimeMillis(); + try { + // The deleteStack function in MsoHeatUtils returns success if the stack + // was not found. So don't bother to query first. + heat.deleteStack(tenantId, "CloudOwner", cloudSiteId, networkId, true); + } catch (MsoException me) { + me.addContext("RollbackNetwork"); + logger.error("{} {} Exception - Rollback Network (heat): {} in {}/{} ", + MessageEnum.RA_DELETE_NETWORK_EXC, ErrorCode.BusinessProcesssError.getValue(), networkId, + cloudSiteId, tenantId, me); + throw new NetworkException(me); } } + } return; } - private String validateNetworkParams (NetworkType neutronNetworkType, - String networkName, - String physicalNetwork, - List <Integer> vlans, - List <RouteTarget> routeTargets) { + private String validateNetworkParams(NetworkType neutronNetworkType, String networkName, String physicalNetwork, + List<Integer> vlans, List<RouteTarget> routeTargets) { String sep = ""; - StringBuilder missing = new StringBuilder (); + StringBuilder missing = new StringBuilder(); if (commonUtils.isNullOrEmpty(networkName)) { - missing.append ("networkName"); + missing.append("networkName"); sep = ","; } if (neutronNetworkType == NetworkType.PROVIDER || neutronNetworkType == NetworkType.MULTI_PROVIDER) { if (commonUtils.isNullOrEmpty(physicalNetwork)) { - missing.append (sep).append ("physicalNetworkName"); + missing.append(sep).append("physicalNetworkName"); sep = ","; } - if (vlans == null || vlans.isEmpty ()) { - missing.append (sep).append (VLANS); + if (vlans == null || vlans.isEmpty()) { + missing.append(sep).append(VLANS); } } - return missing.toString (); + return missing.toString(); } - private Map <String, Object> populateNetworkParams (NetworkType neutronNetworkType, - String networkName, - String physicalNetwork, - List <Integer> vlans, - List <RouteTarget> routeTargets, - String shared, - String external, - boolean aic3template) { + private Map<String, Object> populateNetworkParams(NetworkType neutronNetworkType, String networkName, + String physicalNetwork, List<Integer> vlans, List<RouteTarget> routeTargets, String shared, String external, + boolean aic3template) { // Build the common set of HEAT template parameters - Map <String, Object> stackParams = new HashMap <> (); - stackParams.put ("network_name", networkName); + Map<String, Object> stackParams = new HashMap<>(); + stackParams.put("network_name", networkName); if (neutronNetworkType == NetworkType.PROVIDER) { // For Provider type - stackParams.put (PHYSICAL_NETWORK, physicalNetwork); - stackParams.put ("vlan", vlans.get (0).toString ()); + stackParams.put(PHYSICAL_NETWORK, physicalNetwork); + stackParams.put("vlan", vlans.get(0).toString()); } else if (neutronNetworkType == NetworkType.MULTI_PROVIDER) { // For Multi-provider, PO supports a custom resource extension of ProviderNet. // It supports all ProviderNet properties except segmentation_id, and adds a @@ -1493,420 +1204,337 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { // Note that this does not match the Neutron definition of Multi-Provider network, // which contains a list of 'segments', each having physical_network, network_type, // and segmentation_id. - StringBuilder buf = new StringBuilder (); + StringBuilder buf = new StringBuilder(); String sep = ""; for (Integer vlan : vlans) { - buf.append (sep).append (vlan.toString ()); + buf.append(sep).append(vlan.toString()); sep = ","; } - String csl = buf.toString (); + String csl = buf.toString(); - stackParams.put (PHYSICAL_NETWORK, physicalNetwork); - stackParams.put (VLANS, csl); + stackParams.put(PHYSICAL_NETWORK, physicalNetwork); + stackParams.put(VLANS, csl); } if (routeTargets != null) { - + String rtGlobal = ""; String rtImport = ""; String rtExport = ""; String sep = ""; for (RouteTarget rt : routeTargets) { - boolean rtIsNull = false; - if (rt != null) - { - String routeTarget = rt.getRouteTarget(); - String routeTargetRole = rt.getRouteTargetRole(); - logger.debug("Checking for an actually null route target: {}", rt); - if (routeTarget == null || routeTarget.equals("") || routeTarget.equalsIgnoreCase("null")) - rtIsNull = true; - if (routeTargetRole == null || routeTargetRole.equals("") || routeTargetRole.equalsIgnoreCase("null")) - rtIsNull = true; - } else { - rtIsNull = true; - } - if (!rtIsNull) { - logger.debug("Input RT:{}", rt); - String role = rt.getRouteTargetRole(); - String rtValue = rt.getRouteTarget(); - - if ("IMPORT".equalsIgnoreCase(role)) - { - sep = rtImport.isEmpty() ? "" : ","; - rtImport = aic3template ? rtImport + sep + "target:" + rtValue : rtImport + sep + rtValue ; - } - else if ("EXPORT".equalsIgnoreCase(role)) - { - sep = rtExport.isEmpty() ? "" : ","; - rtExport = aic3template ? rtExport + sep + "target:" + rtValue : rtExport + sep + rtValue ; - } - else // covers BOTH, empty etc - { - sep = rtGlobal.isEmpty() ? "" : ","; - rtGlobal = aic3template ? rtGlobal + sep + "target:" + rtValue : rtGlobal + sep + rtValue ; - } - - } + boolean rtIsNull = false; + if (rt != null) { + String routeTarget = rt.getRouteTarget(); + String routeTargetRole = rt.getRouteTargetRole(); + logger.debug("Checking for an actually null route target: {}", rt); + if (routeTarget == null || routeTarget.equals("") || routeTarget.equalsIgnoreCase("null")) + rtIsNull = true; + if (routeTargetRole == null || routeTargetRole.equals("") + || routeTargetRole.equalsIgnoreCase("null")) + rtIsNull = true; + } else { + rtIsNull = true; + } + if (!rtIsNull) { + logger.debug("Input RT:{}", rt); + String role = rt.getRouteTargetRole(); + String rtValue = rt.getRouteTarget(); + + if ("IMPORT".equalsIgnoreCase(role)) { + sep = rtImport.isEmpty() ? "" : ","; + rtImport = aic3template ? rtImport + sep + "target:" + rtValue : rtImport + sep + rtValue; + } else if ("EXPORT".equalsIgnoreCase(role)) { + sep = rtExport.isEmpty() ? "" : ","; + rtExport = aic3template ? rtExport + sep + "target:" + rtValue : rtExport + sep + rtValue; + } else // covers BOTH, empty etc + { + sep = rtGlobal.isEmpty() ? "" : ","; + rtGlobal = aic3template ? rtGlobal + sep + "target:" + rtValue : rtGlobal + sep + rtValue; + } + + } } - - if (!rtImport.isEmpty()) - { - stackParams.put ("route_targets_import", rtImport); + + if (!rtImport.isEmpty()) { + stackParams.put("route_targets_import", rtImport); } - if (!rtExport.isEmpty()) - { - stackParams.put ("route_targets_export", rtExport); + if (!rtExport.isEmpty()) { + stackParams.put("route_targets_export", rtExport); } - if (!rtGlobal.isEmpty()) - { - stackParams.put ("route_targets", rtGlobal); + if (!rtGlobal.isEmpty()) { + stackParams.put("route_targets", rtGlobal); } } if (commonUtils.isNullOrEmpty(shared)) { - stackParams.put ("shared", "False"); + stackParams.put("shared", "False"); } else { - stackParams.put ("shared", shared); + stackParams.put("shared", shared); } if (commonUtils.isNullOrEmpty(external)) { - stackParams.put ("external", "False"); + stackParams.put("external", "False"); } else { - stackParams.put ("external", external); + stackParams.put("external", external); } return stackParams; } - /** policyRef_list structure in stackParams - [ - { - "network_policy_refs_data_sequence": { - "network_policy_refs_data_sequence_major": "1", - "network_policy_refs_data_sequence_minor": "0" - } - }, - { - "network_policy_refs_data_sequence": { - "network_policy_refs_data_sequence_major": "2", - "network_policy_refs_data_sequence_minor": "0" - } - } - ] - **/ - private void mergePolicyRefs(List <String> pFqdns, Map <String, Object> stackParams) throws MsoException { - //Resource Property - List<ContrailPolicyRef> prlist = new ArrayList <> (); - int index = 1; - for (String pf : pFqdns) { - if (!commonUtils.isNullOrEmpty(pf)) - { - ContrailPolicyRef pr = new ContrailPolicyRef(); - ContrailPolicyRefSeq refSeq = new ContrailPolicyRefSeq(String.valueOf(index), "0"); - pr.setSeq(refSeq); - index++; - logger.debug("Contrail PolicyRefs Data:{}", pr); - prlist.add(pr); - } - } - - JsonNode node = null; - try - { - ObjectMapper mapper = new ObjectMapper(); - node = mapper.convertValue(prlist, JsonNode.class); - String jsonString = mapper.writeValueAsString(prlist); - logger.debug("Json PolicyRefs Data:{}", jsonString); - } - catch (Exception e) - { - String error = "Error creating JsonNode for policyRefs Data"; - logger.error("{} {} {} ", MessageEnum.RA_MARSHING_ERROR, ErrorCode.BusinessProcesssError.getValue(), - error, e); - throw new MsoAdapterException (error); - } - //update parameters - if (pFqdns != null && node != null) - { - StringBuilder buf = new StringBuilder (); - String sep = ""; - for (String pf : pFqdns) { - if (!commonUtils.isNullOrEmpty(pf)) - { - buf.append (sep).append (pf); - sep = ","; - } - } - String csl = buf.toString (); - stackParams.put ("policy_refs", csl); - stackParams.put ("policy_refsdata", node); - } + /** + * policyRef_list structure in stackParams [ { "network_policy_refs_data_sequence": { + * "network_policy_refs_data_sequence_major": "1", "network_policy_refs_data_sequence_minor": "0" } }, { + * "network_policy_refs_data_sequence": { "network_policy_refs_data_sequence_major": "2", + * "network_policy_refs_data_sequence_minor": "0" } } ] + **/ + private void mergePolicyRefs(List<String> pFqdns, Map<String, Object> stackParams) throws MsoException { + // Resource Property + List<ContrailPolicyRef> prlist = new ArrayList<>(); + int index = 1; + for (String pf : pFqdns) { + if (!commonUtils.isNullOrEmpty(pf)) { + ContrailPolicyRef pr = new ContrailPolicyRef(); + ContrailPolicyRefSeq refSeq = new ContrailPolicyRefSeq(String.valueOf(index), "0"); + pr.setSeq(refSeq); + index++; + logger.debug("Contrail PolicyRefs Data:{}", pr); + prlist.add(pr); + } + } + + JsonNode node = null; + try { + ObjectMapper mapper = new ObjectMapper(); + node = mapper.convertValue(prlist, JsonNode.class); + String jsonString = mapper.writeValueAsString(prlist); + logger.debug("Json PolicyRefs Data:{}", jsonString); + } catch (Exception e) { + String error = "Error creating JsonNode for policyRefs Data"; + logger.error("{} {} {} ", MessageEnum.RA_MARSHING_ERROR, ErrorCode.BusinessProcesssError.getValue(), error, + e); + throw new MsoAdapterException(error); + } + // update parameters + if (pFqdns != null && node != null) { + StringBuilder buf = new StringBuilder(); + String sep = ""; + for (String pf : pFqdns) { + if (!commonUtils.isNullOrEmpty(pf)) { + buf.append(sep).append(pf); + sep = ","; + } + } + String csl = buf.toString(); + stackParams.put("policy_refs", csl); + stackParams.put("policy_refsdata", node); + } logger.debug("StackParams updated with policy refs"); - return; + return; } - private void mergeRouteTableRefs(List <String> rtFqdns, Map <String, Object> stackParams) throws MsoException { - - //update parameters - if (rtFqdns != null) - { - StringBuilder buf = new StringBuilder (); - String sep = ""; - for (String rtf : rtFqdns) { - if (!commonUtils.isNullOrEmpty(rtf)) - { - buf.append (sep).append (rtf); - sep = ","; - } - } - String csl = buf.toString (); - stackParams.put ("route_table_refs", csl); - } + private void mergeRouteTableRefs(List<String> rtFqdns, Map<String, Object> stackParams) throws MsoException { + + // update parameters + if (rtFqdns != null) { + StringBuilder buf = new StringBuilder(); + String sep = ""; + for (String rtf : rtFqdns) { + if (!commonUtils.isNullOrEmpty(rtf)) { + buf.append(sep).append(rtf); + sep = ","; + } + } + String csl = buf.toString(); + stackParams.put("route_table_refs", csl); + } logger.debug("StackParams updated with route_table refs"); - return; + return; } - /*** Subnet Output structure from Juniper - { - "ipam_subnets": [ - { - "subnet": { - "ip_prefix": "10.100.1.0", - "ip_prefix_len": 28 - }, - "addr_from_start": null, - "enable_dhcp": false, - "default_gateway": "10.100.1.1", - "dns_nameservers": [], - "dhcp_option_list": null, - "subnet_uuid": "10391fbf-6b9c-4160-825d-2d018b7649cf", - "allocation_pools": [ - { - "start": "10.100.1.3", - "end": "10.100.1.5" - }, - { - "start": "10.100.1.6", - "end": "10.100.1.9" - } - ], - "host_routes": null, - "dns_server_address": "10.100.1.13", - "subnet_name": "subnet_MsoNW1_692c9032-e1a2-4d64-828c-7b9a4fcc05b0" - }, - { - "subnet": { - "ip_prefix": "10.100.2.16", - "ip_prefix_len": 28 - }, - "addr_from_start": null, - "enable_dhcp": true, - "default_gateway": "10.100.2.17", - "dns_nameservers": [], - "dhcp_option_list": null, - "subnet_uuid": "c7aac5ea-66fe-443a-85f9-9c38a608c0f6", - "allocation_pools": [ - { - "start": "10.100.2.18", - "end": "10.100.2.20" - } - ], - "host_routes": null, - "dns_server_address": "10.100.2.29", - "subnet_name": "subnet_MsoNW1_692c9032-e1a2-4d64-828c-7b9a4fcc05b1" + /*** + * Subnet Output structure from Juniper { "ipam_subnets": [ { "subnet": { "ip_prefix": "10.100.1.0", + * "ip_prefix_len": 28 }, "addr_from_start": null, "enable_dhcp": false, "default_gateway": "10.100.1.1", + * "dns_nameservers": [], "dhcp_option_list": null, "subnet_uuid": "10391fbf-6b9c-4160-825d-2d018b7649cf", + * "allocation_pools": [ { "start": "10.100.1.3", "end": "10.100.1.5" }, { "start": "10.100.1.6", "end": + * "10.100.1.9" } ], "host_routes": null, "dns_server_address": "10.100.1.13", "subnet_name": + * "subnet_MsoNW1_692c9032-e1a2-4d64-828c-7b9a4fcc05b0" }, { "subnet": { "ip_prefix": "10.100.2.16", + * "ip_prefix_len": 28 }, "addr_from_start": null, "enable_dhcp": true, "default_gateway": "10.100.2.17", + * "dns_nameservers": [], "dhcp_option_list": null, "subnet_uuid": "c7aac5ea-66fe-443a-85f9-9c38a608c0f6", + * "allocation_pools": [ { "start": "10.100.2.18", "end": "10.100.2.20" } ], "host_routes": null, + * "dns_server_address": "10.100.2.29", "subnet_name": "subnet_MsoNW1_692c9032-e1a2-4d64-828c-7b9a4fcc05b1" } ], + * "host_routes": null } + ***/ + private String mergeSubnetsAIC3(String heatTemplate, List<Subnet> subnets, Map<String, Object> stackParams) + throws MsoException { + + // Resource Property + List<ContrailSubnet> cslist = new ArrayList<>(); + for (Subnet subnet : subnets) { + logger.debug("Input Subnet:{}", subnet.toString()); + ContrailSubnet cs = new ContrailSubnetMapper(subnet).map(); + logger.debug("Contrail Subnet:{}", cs.toString()); + cslist.add(cs); + } + + JsonNode node = null; + try { + ObjectMapper mapper = new ObjectMapper(); + node = mapper.convertValue(cslist, JsonNode.class); + String jsonString = mapper.writeValueAsString(cslist); + logger.debug("Json Subnet List:{}", jsonString); + } catch (Exception e) { + String error = "Error creating JsonNode from input subnets"; + logger.error("{} {} {} ", MessageEnum.RA_MARSHING_ERROR, ErrorCode.DataError.getValue(), error, e); + throw new MsoAdapterException(error); } - ], - "host_routes": null - } - ***/ - private String mergeSubnetsAIC3 (String heatTemplate, List <Subnet> subnets, Map <String, Object> stackParams) throws MsoException { - - //Resource Property - List<ContrailSubnet> cslist = new ArrayList <> (); - for (Subnet subnet : subnets) { - logger.debug("Input Subnet:{}", subnet.toString()); - ContrailSubnet cs = new ContrailSubnetMapper(subnet).map(); - logger.debug("Contrail Subnet:{}", cs.toString()); - cslist.add(cs); - } - - JsonNode node = null; - try - { - ObjectMapper mapper = new ObjectMapper(); - node = mapper.convertValue(cslist, JsonNode.class); - String jsonString = mapper.writeValueAsString(cslist); - logger.debug("Json Subnet List:{}", jsonString); - } - catch (Exception e) - { - String error = "Error creating JsonNode from input subnets"; - logger.error("{} {} {} ", MessageEnum.RA_MARSHING_ERROR, ErrorCode.DataError.getValue(), error, e); - throw new MsoAdapterException (error); - } - //update parameters - if (node != null) - { - stackParams.put ("subnet_list", node); - } - //Outputs - All subnets are in one ipam_subnets structure - String outputTempl = " subnet:\n" + " description: Openstack subnet identifier\n" - + " value: { get_attr: [network, network_ipam_refs, 0, attr]}\n"; - - // append outputs in heatTemplate - int outputsIdx = heatTemplate.indexOf ("outputs:"); - heatTemplate = insertStr (heatTemplate, outputTempl, outputsIdx + 8); + // update parameters + if (node != null) { + stackParams.put("subnet_list", node); + } + // Outputs - All subnets are in one ipam_subnets structure + String outputTempl = " subnet:\n" + " description: Openstack subnet identifier\n" + + " value: { get_attr: [network, network_ipam_refs, 0, attr]}\n"; + + // append outputs in heatTemplate + int outputsIdx = heatTemplate.indexOf("outputs:"); + heatTemplate = insertStr(heatTemplate, outputTempl, outputsIdx + 8); logger.debug("Template updated with all AIC3.0 subnets:{}", heatTemplate); - return heatTemplate; + return heatTemplate; } - private String mergeSubnets (String heatTemplate, List <Subnet> subnets) throws MsoException { - - String resourceTempl = " subnet_%subnetId%:\n" + " type: OS::Neutron::Subnet\n" - + " properties:\n" - + " name: %name%\n" - + " network_id: { get_resource: network }\n" - + " cidr: %cidr%\n"; - - /* make these optional - + " ip_version: %ipversion%\n" - + " enable_dhcp: %enabledhcp%\n" - + " gateway_ip: %gatewayip%\n" - + " allocation_pools:\n" - + " - start: %poolstart%\n" - + " end: %poolend%\n"; - - */ - - String outputTempl = " subnet_id_%subnetId%:\n" + " description: Openstack subnet identifier\n" - + " value: {get_resource: subnet_%subnetId%}\n"; - - String curR; - String curO; - StringBuilder resourcesBuf = new StringBuilder (); - StringBuilder outputsBuf = new StringBuilder (); - for (Subnet subnet : subnets) { - - // build template for each subnet - curR = resourceTempl; - if (subnet.getSubnetId () != null) { - curR = curR.replace ("%subnetId%", subnet.getSubnetId ()); - } else { - String error = "Missing Required AAI SubnetId for subnet in HEAT Template"; - logger.error("{} {} {} ", MessageEnum.RA_MISSING_PARAM, ErrorCode.DataError.getValue(), error); - throw new MsoAdapterException (error); - } - - if (subnet.getSubnetName () != null) { - curR = curR.replace ("%name%", subnet.getSubnetName ()); - } else { - curR = curR.replace ("%name%", subnet.getSubnetId ()); - } - - if (subnet.getCidr () != null) { - curR = curR.replace ("%cidr%", subnet.getCidr ()); - } else { - String error = "Missing Required cidr for subnet in HEAT Template"; - logger.error("{} {} {} ", MessageEnum.RA_MISSING_PARAM, ErrorCode.DataError.getValue(), error); - throw new MsoAdapterException (error); - } - - if (subnet.getIpVersion () != null) { - curR = curR + " ip_version: " + subnet.getIpVersion () + "\n"; - } - if (subnet.getEnableDHCP () != null) { - curR = curR + " enable_dhcp: " + Boolean.toString (subnet.getEnableDHCP ()) + "\n"; - } - if (subnet.getGatewayIp () != null && !subnet.getGatewayIp ().isEmpty() ) { - curR = curR + " gateway_ip: " + subnet.getGatewayIp () + "\n"; - } - - if (subnet.getAllocationPools() != null) { - curR = curR + " allocation_pools:\n"; - for (Pool pool : subnet.getAllocationPools()) - { - if (!commonUtils.isNullOrEmpty(pool.getStart()) && !commonUtils.isNullOrEmpty(pool.getEnd())) - { - curR = curR + " - start: " + pool.getStart () + "\n"; - curR = curR + " end: " + pool.getEnd () + "\n"; - } - } - } - - resourcesBuf.append (curR); - - curO = outputTempl; - curO = curO.replace ("%subnetId%", subnet.getSubnetId ()); - - outputsBuf.append (curO); - - } - // append resources and outputs in heatTemplate + private String mergeSubnets(String heatTemplate, List<Subnet> subnets) throws MsoException { + + String resourceTempl = " subnet_%subnetId%:\n" + " type: OS::Neutron::Subnet\n" + " properties:\n" + + " name: %name%\n" + " network_id: { get_resource: network }\n" + " cidr: %cidr%\n"; + + /* + * make these optional + " ip_version: %ipversion%\n" + " enable_dhcp: %enabledhcp%\n" + + * " gateway_ip: %gatewayip%\n" + " allocation_pools:\n" + " - start: %poolstart%\n" + + * " end: %poolend%\n"; + * + */ + + String outputTempl = " subnet_id_%subnetId%:\n" + " description: Openstack subnet identifier\n" + + " value: {get_resource: subnet_%subnetId%}\n"; + + String curR; + String curO; + StringBuilder resourcesBuf = new StringBuilder(); + StringBuilder outputsBuf = new StringBuilder(); + for (Subnet subnet : subnets) { + + // build template for each subnet + curR = resourceTempl; + if (subnet.getSubnetId() != null) { + curR = curR.replace("%subnetId%", subnet.getSubnetId()); + } else { + String error = "Missing Required AAI SubnetId for subnet in HEAT Template"; + logger.error("{} {} {} ", MessageEnum.RA_MISSING_PARAM, ErrorCode.DataError.getValue(), error); + throw new MsoAdapterException(error); + } + + if (subnet.getSubnetName() != null) { + curR = curR.replace("%name%", subnet.getSubnetName()); + } else { + curR = curR.replace("%name%", subnet.getSubnetId()); + } + + if (subnet.getCidr() != null) { + curR = curR.replace("%cidr%", subnet.getCidr()); + } else { + String error = "Missing Required cidr for subnet in HEAT Template"; + logger.error("{} {} {} ", MessageEnum.RA_MISSING_PARAM, ErrorCode.DataError.getValue(), error); + throw new MsoAdapterException(error); + } + + if (subnet.getIpVersion() != null) { + curR = curR + " ip_version: " + subnet.getIpVersion() + "\n"; + } + if (subnet.getEnableDHCP() != null) { + curR = curR + " enable_dhcp: " + Boolean.toString(subnet.getEnableDHCP()) + "\n"; + } + if (subnet.getGatewayIp() != null && !subnet.getGatewayIp().isEmpty()) { + curR = curR + " gateway_ip: " + subnet.getGatewayIp() + "\n"; + } + + if (subnet.getAllocationPools() != null) { + curR = curR + " allocation_pools:\n"; + for (Pool pool : subnet.getAllocationPools()) { + if (!commonUtils.isNullOrEmpty(pool.getStart()) && !commonUtils.isNullOrEmpty(pool.getEnd())) { + curR = curR + " - start: " + pool.getStart() + "\n"; + curR = curR + " end: " + pool.getEnd() + "\n"; + } + } + } + + resourcesBuf.append(curR); + + curO = outputTempl; + curO = curO.replace("%subnetId%", subnet.getSubnetId()); + + outputsBuf.append(curO); + + } + // append resources and outputs in heatTemplate logger.debug("Tempate initial:{}", heatTemplate); - int outputsIdx = heatTemplate.indexOf ("outputs:"); - heatTemplate = insertStr (heatTemplate, outputsBuf.toString (), outputsIdx + 8); - int resourcesIdx = heatTemplate.indexOf ("resources:"); - heatTemplate = insertStr (heatTemplate, resourcesBuf.toString (), resourcesIdx + 10); + int outputsIdx = heatTemplate.indexOf("outputs:"); + heatTemplate = insertStr(heatTemplate, outputsBuf.toString(), outputsIdx + 8); + int resourcesIdx = heatTemplate.indexOf("resources:"); + heatTemplate = insertStr(heatTemplate, resourcesBuf.toString(), resourcesIdx + 10); logger.debug("Template updated with all subnets:{}", heatTemplate); - return heatTemplate; + return heatTemplate; } - private Map <String, String> getSubnetUUId(String key, Map <String, Object> outputs, List <Subnet> subnets) { - - Map <String, String> sMap = new HashMap <> (); - - try{ - Object obj = outputs.get(key); - ObjectMapper mapper = new ObjectMapper(); - String jStr = mapper.writeValueAsString(obj); - logger.debug("Subnet_Ipam Output JSON String:{} {}", obj.getClass(), jStr); - - JsonNode rootNode = mapper.readTree(jStr); - for (JsonNode sNode : rootNode.path("ipam_subnets")) - { - logger.debug("Output Subnet Node {}", sNode.toString()); - String name = sNode.path("subnet_name").textValue(); - String uuid = sNode.path("subnet_uuid").textValue(); - String aaiId = name; // default - // try to find aaiId for name in input subnetList - if (subnets != null) - { - for (Subnet subnet : subnets) - { - if ( subnet != null && !commonUtils.isNullOrEmpty(subnet.getSubnetName())) - { - if (subnet.getSubnetName().equals(name)) - { - aaiId = subnet.getSubnetId(); - break; - } - } - } - } - sMap.put(aaiId, uuid); //bpmn needs aaid to uuid map - } - } - catch (Exception e) - { - logger.error("{} {} Exception getting subnet-uuids ", MessageEnum.RA_MARSHING_ERROR, - ErrorCode.DataError.getValue(), e); - } + private Map<String, String> getSubnetUUId(String key, Map<String, Object> outputs, List<Subnet> subnets) { + + Map<String, String> sMap = new HashMap<>(); + + try { + Object obj = outputs.get(key); + ObjectMapper mapper = new ObjectMapper(); + String jStr = mapper.writeValueAsString(obj); + logger.debug("Subnet_Ipam Output JSON String:{} {}", obj.getClass(), jStr); + + JsonNode rootNode = mapper.readTree(jStr); + for (JsonNode sNode : rootNode.path("ipam_subnets")) { + logger.debug("Output Subnet Node {}", sNode.toString()); + String name = sNode.path("subnet_name").textValue(); + String uuid = sNode.path("subnet_uuid").textValue(); + String aaiId = name; // default + // try to find aaiId for name in input subnetList + if (subnets != null) { + for (Subnet subnet : subnets) { + if (subnet != null && !commonUtils.isNullOrEmpty(subnet.getSubnetName())) { + if (subnet.getSubnetName().equals(name)) { + aaiId = subnet.getSubnetId(); + break; + } + } + } + } + sMap.put(aaiId, uuid); // bpmn needs aaid to uuid map + } + } catch (Exception e) { + logger.error("{} {} Exception getting subnet-uuids ", MessageEnum.RA_MARSHING_ERROR, + ErrorCode.DataError.getValue(), e); + } logger.debug("Return sMap {}", sMap.toString()); - return sMap; + return sMap; } - private static String insertStr (String template, String snippet, int index) { + private static String insertStr(String template, String snippet, int index) { String updatedTemplate; logger.debug("Index:{} Snippet:{}", index, snippet); - String templateBeg = template.substring (0, index); - String templateEnd = template.substring (index); + String templateBeg = template.substring(0, index); + String templateEnd = template.substring(index); updatedTemplate = templateBeg + "\n" + snippet + templateEnd; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/NetworkAdapterRest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/NetworkAdapterRest.java index 4a6d591977..b44704d1cf 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/NetworkAdapterRest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/NetworkAdapterRest.java @@ -85,652 +85,552 @@ import org.springframework.transaction.annotation.Transactional; public class NetworkAdapterRest { private static final Logger logger = LoggerFactory.getLogger(NetworkAdapterRest.class); - private static final String TESTING_KEYWORD = "___TESTING___"; - private String EXCEPTION = "Exception:"; - - @Autowired - private MsoNetworkAdapterImpl adapter; - - @Autowired - private Provider<BpelRestClient> bpelRestClientProvider; - - - @POST - @Path("") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "CreateNetwork", - response = Response.class, - notes = "Creates a new network, CreateNetworkRquest JSON is required") - @ApiResponses({ - @ApiResponse(code = 200, message = "network has been successfully created"), - @ApiResponse(code = 202, message = "create network request has been accepted (async only)"), - @ApiResponse(code = 500, message = "create network failed, examine entity object for details") }) - public Response createNetwork( - @ApiParam(value = "details of network being created", required = true) - CreateNetworkRequest req) { - logger.debug("createNetwork enter: {}", req.toJsonString()); - CreateNetworkTask task = new CreateNetworkTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception while create network ", MessageEnum.RA_CREATE_NETWORK_EXC, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("createNetwork exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class CreateNetworkTask implements Runnable { - private final CreateNetworkRequest req; - private CreateNetworkResponse response = null; - private CreateNetworkError eresp = null; - private boolean sendxml; - - public CreateNetworkTask(CreateNetworkRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<CreateNetworkResponse>(response) {} - : new GenericEntity<CreateNetworkError>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("CreateNetworkTask start"); - try { - // Synchronous Web Service Outputs - Holder<String> networkId = new Holder<>(); - Holder<String> neutronNetworkId = new Holder<>(); - Holder<String> networkFqdn = new Holder<>(); - Holder<Map<String, String>> subnetIdMap = new Holder<>(); - Holder<NetworkRollback> rollback = new Holder<>(); - - HashMap<String, String> params = (HashMap<String, String>) req.getNetworkParams(); - if (params == null) { - params = new HashMap<String,String>(); - } - String shared = null; - String external = null; - - String cloudsite = req.getCloudSiteId(); - if (cloudsite != null && cloudsite.equals(TESTING_KEYWORD)) { - String tenant = req.getTenantId(); - if (tenant != null && tenant.equals(TESTING_KEYWORD)) { - throw new NetworkException("testing."); - } - networkId.value = "479D3D8B-6360-47BC-AB75-21CC91981484"; - neutronNetworkId.value = "55e55884-28fa-11e6-8971-0017f20fe1b8"; - networkFqdn.value = "086f70b6-28fb-11e6-8260-0017f20fe1b8"; - subnetIdMap.value = testMap(); - rollback.value = new NetworkRollback(); - } else if (req.isContrailRequest()) { - ContrailNetwork ctn = req.getContrailNetwork(); - if (ctn == null) { - ctn = new ContrailNetwork(); - req.setContrailNetwork(ctn); - } - if (params.containsKey("shared")) { - shared = params.get("shared"); - } else { - if (ctn.getShared() != null) { - shared = ctn.getShared(); - } - } - if (params.containsKey("external")) { - external = params.get("external"); - } else { - if (ctn.getExternal() != null) { - external = ctn.getExternal(); - } - } - adapter.createNetworkContrail( - req.getCloudSiteId(), - req.getTenantId(), - req.getNetworkType(), - req.getModelCustomizationUuid(), - req.getNetworkName(), - req.getContrailNetwork().getRouteTargets(), - shared, - external, - req.getFailIfExists(), - req.getBackout(), - req.getSubnets(), - params, - req.getContrailNetwork().getPolicyFqdns(), - req.getContrailNetwork().getRouteTableFqdns(), - req.getMsoRequest(), - networkId, - neutronNetworkId, - networkFqdn, - subnetIdMap, - rollback); - } else { - ProviderVlanNetwork pvn = req.getProviderVlanNetwork(); - if (pvn == null) { - pvn = new ProviderVlanNetwork(); - req.setProviderVlanNetwork(pvn); - } - if (params.containsKey("shared")) - shared = params.get("shared"); - if (params.containsKey("external")) - external = params.get("external"); - adapter.createNetwork( - req.getCloudSiteId(), - req.getTenantId(), - req.getNetworkType(), - req.getModelCustomizationUuid(), - req.getNetworkName(), - req.getProviderVlanNetwork().getPhysicalNetworkName(), - req.getProviderVlanNetwork().getVlans(), - shared, - external, - req.getFailIfExists(), - req.getBackout(), - req.getSubnets(), - params, - req.getMsoRequest(), - networkId, - neutronNetworkId, - subnetIdMap, - rollback); - } - response = new CreateNetworkResponse( - req.getNetworkId(), - neutronNetworkId.value, - rollback.value.getNetworkStackId(), - networkFqdn.value, - rollback.value.getNetworkCreated(), - subnetIdMap.value, - rollback.value, - req.getMessageId()); - } catch (NetworkException e) { - logger.debug(EXCEPTION, e); - eresp = new CreateNetworkError( - e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("CreateNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse()); - } - } - - @DELETE - @Path("{aaiNetworkId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "DeleteNetwork", - response = Response.class, - notes = "Deletes an existing network, aaiNetworkId and DeleteNetworkRequest JSON are required") - @ApiResponses({ - @ApiResponse(code = 200, message = "network has been successfully deleted"), - @ApiResponse(code = 202, message = "request to delete network has been accepted (async only)"), - @ApiResponse(code = 500, message = "delete network failed, examine entity object for details") }) - public Response deleteNetwork( - @ApiParam(value = "aaiNetworkId to be deleted ", required = true) - @PathParam("aaiNetworkId") String aaiNetworkId, - @ApiParam(value = "details of network being deleted", required = true) - DeleteNetworkRequest req) - { - logger.debug("deleteNetwork enter: {}", req.toJsonString()); - if (aaiNetworkId == null || !aaiNetworkId.equals(req.getNetworkId())) { - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity("A&AI NetworkId in URL ("+aaiNetworkId+") does not match content ("+req.getNetworkId()+")") - .build(); - } - DeleteNetworkTask task = new DeleteNetworkTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception while delete network ", MessageEnum.RA_DELETE_NETWORK_EXC, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("deleteNetwork exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class DeleteNetworkTask implements Runnable { - private final DeleteNetworkRequest req; - private DeleteNetworkResponse response = null; - private DeleteNetworkError eresp = null; - private boolean sendxml; - - public DeleteNetworkTask(DeleteNetworkRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<DeleteNetworkResponse>(response) {} - : new GenericEntity<DeleteNetworkError>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("DeleteNetworkTask start"); - try { - Holder<Boolean> networkDeleted = new Holder<>(); - if (req.getCloudSiteId().equals(TESTING_KEYWORD)) { - networkDeleted.value = true; - } else { - adapter.deleteNetwork( - req.getCloudSiteId(), - req.getTenantId(), - req.getNetworkType(), - req.getModelCustomizationUuid(), - req.getNetworkStackId(), - req.getMsoRequest(), - networkDeleted); - } - response = new DeleteNetworkResponse(req.getNetworkId(), networkDeleted.value, req.getMessageId()); - } catch (NetworkException e) { - logger.debug(EXCEPTION, e); - eresp = new DeleteNetworkError(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("DeleteNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse()); - } - } - - @GET - @Path("{aaiNetworkId}") - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "QueryNetwork", - response = Response.class, - notes = "Queries an existing network") - @ApiResponses({ - @ApiResponse(code = 200, message = "Query network successful"), - @ApiResponse(code = 500, message = "Query network failed, examine entity object for details") }) - public Response queryNetwork( - @ApiParam(value = "cloudSiteId", required = false) - @QueryParam("cloudSiteId") String cloudSiteId, - @ApiParam(value = "tenantId", required = false) - @QueryParam("tenantId") String tenantId, - @ApiParam(value = "networkStackId", required = false) - @QueryParam("networkStackId") String networkStackId, - @ApiParam(value = "skipAAI", required = false) - @QueryParam("skipAAI") String skipAAI, - @ApiParam(value = "msoRequest.requestId", required = false) - @QueryParam("msoRequest.requestId") String requestId, - @ApiParam(value = "msoRequest.serviceInstanceId", required = false) - @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId, - @ApiParam(value = "aaiNetworkId", required = false) - @PathParam("aaiNetworkId") String aaiNetworkId) - { - //This request responds synchronously only - logger.debug("Query network enter:{}" + aaiNetworkId); - MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId); - - try { - int respStatus = HttpStatus.SC_OK; - QueryNetworkResponse resp = new QueryNetworkResponse(networkStackId, null, networkStackId, null, null); - Holder<Boolean> networkExists = new Holder<>(); + private static final String TESTING_KEYWORD = "___TESTING___"; + private String EXCEPTION = "Exception:"; + + @Autowired + private MsoNetworkAdapterImpl adapter; + + @Autowired + private Provider<BpelRestClient> bpelRestClientProvider; + + + @POST + @Path("") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "CreateNetwork", response = Response.class, + notes = "Creates a new network, CreateNetworkRquest JSON is required") + @ApiResponses({@ApiResponse(code = 200, message = "network has been successfully created"), + @ApiResponse(code = 202, message = "create network request has been accepted (async only)"), + @ApiResponse(code = 500, message = "create network failed, examine entity object for details")}) + public Response createNetwork( + @ApiParam(value = "details of network being created", required = true) CreateNetworkRequest req) { + logger.debug("createNetwork enter: {}", req.toJsonString()); + CreateNetworkTask task = new CreateNetworkTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception while create network ", MessageEnum.RA_CREATE_NETWORK_EXC, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("createNetwork exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class CreateNetworkTask implements Runnable { + private final CreateNetworkRequest req; + private CreateNetworkResponse response = null; + private CreateNetworkError eresp = null; + private boolean sendxml; + + public CreateNetworkTask(CreateNetworkRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<CreateNetworkResponse>(response) {} + : new GenericEntity<CreateNetworkError>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("CreateNetworkTask start"); + try { + // Synchronous Web Service Outputs + Holder<String> networkId = new Holder<>(); + Holder<String> neutronNetworkId = new Holder<>(); + Holder<String> networkFqdn = new Holder<>(); + Holder<Map<String, String>> subnetIdMap = new Holder<>(); + Holder<NetworkRollback> rollback = new Holder<>(); + + HashMap<String, String> params = (HashMap<String, String>) req.getNetworkParams(); + if (params == null) { + params = new HashMap<String, String>(); + } + String shared = null; + String external = null; + + String cloudsite = req.getCloudSiteId(); + if (cloudsite != null && cloudsite.equals(TESTING_KEYWORD)) { + String tenant = req.getTenantId(); + if (tenant != null && tenant.equals(TESTING_KEYWORD)) { + throw new NetworkException("testing."); + } + networkId.value = "479D3D8B-6360-47BC-AB75-21CC91981484"; + neutronNetworkId.value = "55e55884-28fa-11e6-8971-0017f20fe1b8"; + networkFqdn.value = "086f70b6-28fb-11e6-8260-0017f20fe1b8"; + subnetIdMap.value = testMap(); + rollback.value = new NetworkRollback(); + } else if (req.isContrailRequest()) { + ContrailNetwork ctn = req.getContrailNetwork(); + if (ctn == null) { + ctn = new ContrailNetwork(); + req.setContrailNetwork(ctn); + } + if (params.containsKey("shared")) { + shared = params.get("shared"); + } else { + if (ctn.getShared() != null) { + shared = ctn.getShared(); + } + } + if (params.containsKey("external")) { + external = params.get("external"); + } else { + if (ctn.getExternal() != null) { + external = ctn.getExternal(); + } + } + adapter.createNetworkContrail(req.getCloudSiteId(), req.getTenantId(), req.getNetworkType(), + req.getModelCustomizationUuid(), req.getNetworkName(), + req.getContrailNetwork().getRouteTargets(), shared, external, req.getFailIfExists(), + req.getBackout(), req.getSubnets(), params, req.getContrailNetwork().getPolicyFqdns(), + req.getContrailNetwork().getRouteTableFqdns(), req.getMsoRequest(), networkId, + neutronNetworkId, networkFqdn, subnetIdMap, rollback); + } else { + ProviderVlanNetwork pvn = req.getProviderVlanNetwork(); + if (pvn == null) { + pvn = new ProviderVlanNetwork(); + req.setProviderVlanNetwork(pvn); + } + if (params.containsKey("shared")) + shared = params.get("shared"); + if (params.containsKey("external")) + external = params.get("external"); + adapter.createNetwork(req.getCloudSiteId(), req.getTenantId(), req.getNetworkType(), + req.getModelCustomizationUuid(), req.getNetworkName(), + req.getProviderVlanNetwork().getPhysicalNetworkName(), + req.getProviderVlanNetwork().getVlans(), shared, external, req.getFailIfExists(), + req.getBackout(), req.getSubnets(), params, req.getMsoRequest(), networkId, + neutronNetworkId, subnetIdMap, rollback); + } + response = new CreateNetworkResponse(req.getNetworkId(), neutronNetworkId.value, + rollback.value.getNetworkStackId(), networkFqdn.value, rollback.value.getNetworkCreated(), + subnetIdMap.value, rollback.value, req.getMessageId()); + } catch (NetworkException e) { + logger.debug(EXCEPTION, e); + eresp = new CreateNetworkError(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("CreateNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse()); + } + } + + @DELETE + @Path("{aaiNetworkId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "DeleteNetwork", response = Response.class, + notes = "Deletes an existing network, aaiNetworkId and DeleteNetworkRequest JSON are required") + @ApiResponses({@ApiResponse(code = 200, message = "network has been successfully deleted"), + @ApiResponse(code = 202, message = "request to delete network has been accepted (async only)"), + @ApiResponse(code = 500, message = "delete network failed, examine entity object for details")}) + public Response deleteNetwork( + @ApiParam(value = "aaiNetworkId to be deleted ", + required = true) @PathParam("aaiNetworkId") String aaiNetworkId, + @ApiParam(value = "details of network being deleted", required = true) DeleteNetworkRequest req) { + logger.debug("deleteNetwork enter: {}", req.toJsonString()); + if (aaiNetworkId == null || !aaiNetworkId.equals(req.getNetworkId())) { + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN).entity( + "A&AI NetworkId in URL (" + aaiNetworkId + ") does not match content (" + req.getNetworkId() + ")") + .build(); + } + DeleteNetworkTask task = new DeleteNetworkTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception while delete network ", MessageEnum.RA_DELETE_NETWORK_EXC, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("deleteNetwork exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class DeleteNetworkTask implements Runnable { + private final DeleteNetworkRequest req; + private DeleteNetworkResponse response = null; + private DeleteNetworkError eresp = null; + private boolean sendxml; + + public DeleteNetworkTask(DeleteNetworkRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<DeleteNetworkResponse>(response) {} + : new GenericEntity<DeleteNetworkError>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("DeleteNetworkTask start"); + try { + Holder<Boolean> networkDeleted = new Holder<>(); + if (req.getCloudSiteId().equals(TESTING_KEYWORD)) { + networkDeleted.value = true; + } else { + adapter.deleteNetwork(req.getCloudSiteId(), req.getTenantId(), req.getNetworkType(), + req.getModelCustomizationUuid(), req.getNetworkStackId(), req.getMsoRequest(), + networkDeleted); + } + response = new DeleteNetworkResponse(req.getNetworkId(), networkDeleted.value, req.getMessageId()); + } catch (NetworkException e) { + logger.debug(EXCEPTION, e); + eresp = new DeleteNetworkError(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("DeleteNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse()); + } + } + + @GET + @Path("{aaiNetworkId}") + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "QueryNetwork", response = Response.class, notes = "Queries an existing network") + @ApiResponses({@ApiResponse(code = 200, message = "Query network successful"), + @ApiResponse(code = 500, message = "Query network failed, examine entity object for details")}) + public Response queryNetwork( + @ApiParam(value = "cloudSiteId", required = false) @QueryParam("cloudSiteId") String cloudSiteId, + @ApiParam(value = "tenantId", required = false) @QueryParam("tenantId") String tenantId, + @ApiParam(value = "networkStackId", required = false) @QueryParam("networkStackId") String networkStackId, + @ApiParam(value = "skipAAI", required = false) @QueryParam("skipAAI") String skipAAI, + @ApiParam(value = "msoRequest.requestId", + required = false) @QueryParam("msoRequest.requestId") String requestId, + @ApiParam(value = "msoRequest.serviceInstanceId", + required = false) @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId, + @ApiParam(value = "aaiNetworkId", required = false) @PathParam("aaiNetworkId") String aaiNetworkId) { + // This request responds synchronously only + logger.debug("Query network enter:{}" + aaiNetworkId); + MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId); + + try { + int respStatus = HttpStatus.SC_OK; + QueryNetworkResponse resp = new QueryNetworkResponse(networkStackId, null, networkStackId, null, null); + Holder<Boolean> networkExists = new Holder<>(); Holder<String> networkId = new Holder<>(); Holder<String> neutronNetworkId = new Holder<>(); Holder<NetworkStatus> status = new Holder<>(); Holder<List<RouteTarget>> routeTargets = new Holder<>(); Holder<Map<String, String>> subnetIdMap = new Holder<>(); - adapter.queryNetworkContrail(cloudSiteId, tenantId, aaiNetworkId, msoRequest, - networkExists, networkId, neutronNetworkId, status, routeTargets, subnetIdMap); - - if (!networkExists.value) { - logger.debug("network not found"); - respStatus = HttpStatus.SC_NOT_FOUND; - } else { - logger.debug("network found {}, status={}", networkId.value, status.value); - resp.setNetworkExists(networkExists.value); - resp.setNetworkId(networkId.value); - resp.setNeutronNetworkId(neutronNetworkId.value); - resp.setNetworkStatus(status.value); - resp.setRouteTargets(routeTargets.value); - resp.setSubnetIdMap(subnetIdMap.value); - } - logger.debug("Query network exit"); - return Response - .status(respStatus) - .entity(new GenericEntity<QueryNetworkResponse>(resp) {}) - .build(); - } catch (NetworkException e) { - logger.error("{} {} Exception when query VNF ", MessageEnum.RA_QUERY_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); - QueryNetworkError err = new QueryNetworkError(); - err.setMessage(e.getMessage()); - err.setCategory(MsoExceptionCategory.INTERNAL); - return Response - .status(HttpStatus.SC_INTERNAL_SERVER_ERROR) - .entity(new GenericEntity<QueryNetworkError>(err) {}) - .build(); - } - } - - @DELETE - @Path("{aaiNetworkId}/rollback") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "RollbackNetwork", - response = Response.class, - notes = "Rollback an existing network") - @ApiResponses({ - @ApiResponse(code = 200, message = "Rollback network successful"), - @ApiResponse(code = 202, message = "Rollback network request has been accepted (async only)"), - @ApiResponse(code = 500, message = "Rollback network failed, examine entity object for details") }) - public Response rollbackNetwork( - @ApiParam(value = "RollbackNetworkRequest in JSON format", required = true) - RollbackNetworkRequest req) - { - logger.debug("rollbackNetwork enter: {}", req.toJsonString()); - RollbackNetworkTask task = new RollbackNetworkTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception in rollbackNetwork ", MessageEnum.RA_ROLLBACK_NULL, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("rollbackNetwork exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class RollbackNetworkTask implements Runnable { - private final RollbackNetworkRequest req; - private RollbackNetworkResponse response = null; - private RollbackNetworkError eresp = null; - private boolean sendxml; - - public RollbackNetworkTask(RollbackNetworkRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<RollbackNetworkResponse>(response) {} - : new GenericEntity<RollbackNetworkError>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("RollbackNetworkTask start"); - try { - NetworkRollback nwr = req.getNetworkRollback(); - adapter.rollbackNetwork(nwr); - response = new RollbackNetworkResponse(true, req.getMessageId()); - } catch (NetworkException e) { - logger.debug(EXCEPTION, e); - eresp = new RollbackNetworkError(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("RollbackNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse()); - } - } - - @PUT - @Path("{aaiNetworkId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "UpdateNetwork", - response = Response.class, - notes = "Update an existing network") - @ApiResponses({ - @ApiResponse(code = 200, message = "Update network successful"), - @ApiResponse(code = 202, message = "Update network request has been accepted (async only)"), - @ApiResponse(code = 500, message = "Update network failed, examine entity object for details") }) - public Response updateNetwork( - @ApiParam(value = "aaiNetworkId", required = true) - @PathParam("aaiNetworkId") String aaiNetworkId, - @ApiParam(value = "UpdateNetworkRequest in JSON format", required = true) - UpdateNetworkRequest req) - { - logger.debug("updateNetwork enter: {}", req.toJsonString()); - if (aaiNetworkId == null || !aaiNetworkId.equals(req.getNetworkId())) { - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity("A&AI NetworkId in URL ("+aaiNetworkId+") does not match content ("+req.getNetworkId()+")") - .build(); - } - UpdateNetworkTask task = new UpdateNetworkTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception in updateNetwork ", MessageEnum.RA_UPDATE_NETWORK_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("updateNetwork exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class UpdateNetworkTask implements Runnable { - private final UpdateNetworkRequest req; - private UpdateNetworkResponse response = null; - private UpdateNetworkError eresp = null; - private boolean sendxml; - - public UpdateNetworkTask(UpdateNetworkRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<UpdateNetworkResponse>(response) {} - : new GenericEntity<UpdateNetworkError>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("UpdateNetworkTask start"); - try { - Holder<Map<String, String>> subnetIdMap = new Holder<>(); - Holder<NetworkRollback> rollback = new Holder<> (); - HashMap<String, String> params = (HashMap<String, String>) req.getNetworkParams(); - if (params == null) { - params = new HashMap<String,String>(); - } - String shared = null; - String external = null; - - if (req.getCloudSiteId().equals(TESTING_KEYWORD)) { - subnetIdMap.value = testMap(); - NetworkRollback rb = new NetworkRollback (); - rb.setCloudId(req.getCloudSiteId()); - rb.setTenantId(req.getTenantId()); - rb.setMsoRequest(req.getMsoRequest()); - rollback.value = rb; - } else if (req.isContrailRequest()) { - ContrailNetwork ctn = req.getContrailNetwork(); - if (ctn == null) { - ctn = new ContrailNetwork(); - req.setContrailNetwork(ctn); - } - if (params.containsKey("shared")) { - shared = params.get("shared"); - } else { - if (ctn.getShared() != null) { - shared = ctn.getShared(); - } - } - if (params.containsKey("external")) { - external = params.get("external"); - } else { - if (ctn.getExternal() != null) { - external = ctn.getExternal(); - } - } - adapter.updateNetworkContrail( - req.getCloudSiteId(), - req.getTenantId(), - req.getNetworkType(), - req.getModelCustomizationUuid(), - req.getNetworkStackId(), - req.getNetworkName(), - req.getContrailNetwork().getRouteTargets(), - shared, - external, - req.getSubnets(), - params, - req.getContrailNetwork().getPolicyFqdns(), - req.getContrailNetwork().getRouteTableFqdns(), - req.getMsoRequest(), - subnetIdMap, - rollback); - } else { - ProviderVlanNetwork pvn = req.getProviderVlanNetwork(); - if (pvn == null) { - pvn = new ProviderVlanNetwork(); - req.setProviderVlanNetwork(pvn); - } - if (params.containsKey("shared")) { - shared = params.get("shared"); - } - if (params.containsKey("external")) { - external = params.get("external"); - } - adapter.updateNetwork( - req.getCloudSiteId(), - req.getTenantId(), - req.getNetworkType(), - req.getModelCustomizationUuid(), - req.getNetworkStackId(), - req.getNetworkName(), - req.getProviderVlanNetwork().getPhysicalNetworkName(), - req.getProviderVlanNetwork().getVlans(), - shared, - external, - req.getSubnets(), - params, - req.getMsoRequest(), - subnetIdMap, - rollback); - } - response = new UpdateNetworkResponse( - req.getNetworkId(), - null, // NeutronNetworkId is not available from an update - subnetIdMap.value, - req.getMessageId()); - } catch (NetworkException e) { - logger.debug(EXCEPTION, e); - eresp = new UpdateNetworkError(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("UpdateNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse()); - } - } - - public static Map<String, String> testMap() { - Map<String, String> m = new HashMap<>(); - m.put("mickey", "7"); - m.put("clyde", "10"); - m.put("wayne", "99"); - return m; + adapter.queryNetworkContrail(cloudSiteId, tenantId, aaiNetworkId, msoRequest, networkExists, networkId, + neutronNetworkId, status, routeTargets, subnetIdMap); + + if (!networkExists.value) { + logger.debug("network not found"); + respStatus = HttpStatus.SC_NOT_FOUND; + } else { + logger.debug("network found {}, status={}", networkId.value, status.value); + resp.setNetworkExists(networkExists.value); + resp.setNetworkId(networkId.value); + resp.setNeutronNetworkId(neutronNetworkId.value); + resp.setNetworkStatus(status.value); + resp.setRouteTargets(routeTargets.value); + resp.setSubnetIdMap(subnetIdMap.value); + } + logger.debug("Query network exit"); + return Response.status(respStatus).entity(new GenericEntity<QueryNetworkResponse>(resp) {}).build(); + } catch (NetworkException e) { + logger.error("{} {} Exception when query VNF ", MessageEnum.RA_QUERY_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), e); + QueryNetworkError err = new QueryNetworkError(); + err.setMessage(e.getMessage()); + err.setCategory(MsoExceptionCategory.INTERNAL); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR) + .entity(new GenericEntity<QueryNetworkError>(err) {}).build(); + } + } + + @DELETE + @Path("{aaiNetworkId}/rollback") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "RollbackNetwork", response = Response.class, notes = "Rollback an existing network") + @ApiResponses({@ApiResponse(code = 200, message = "Rollback network successful"), + @ApiResponse(code = 202, message = "Rollback network request has been accepted (async only)"), + @ApiResponse(code = 500, message = "Rollback network failed, examine entity object for details")}) + public Response rollbackNetwork( + @ApiParam(value = "RollbackNetworkRequest in JSON format", required = true) RollbackNetworkRequest req) { + logger.debug("rollbackNetwork enter: {}", req.toJsonString()); + RollbackNetworkTask task = new RollbackNetworkTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception in rollbackNetwork ", MessageEnum.RA_ROLLBACK_NULL, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("rollbackNetwork exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class RollbackNetworkTask implements Runnable { + private final RollbackNetworkRequest req; + private RollbackNetworkResponse response = null; + private RollbackNetworkError eresp = null; + private boolean sendxml; + + public RollbackNetworkTask(RollbackNetworkRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<RollbackNetworkResponse>(response) {} + : new GenericEntity<RollbackNetworkError>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("RollbackNetworkTask start"); + try { + NetworkRollback nwr = req.getNetworkRollback(); + adapter.rollbackNetwork(nwr); + response = new RollbackNetworkResponse(true, req.getMessageId()); + } catch (NetworkException e) { + logger.debug(EXCEPTION, e); + eresp = new RollbackNetworkError(e.getMessage(), MsoExceptionCategory.INTERNAL, true, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("RollbackNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse()); + } + } + + @PUT + @Path("{aaiNetworkId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "UpdateNetwork", response = Response.class, notes = "Update an existing network") + @ApiResponses({@ApiResponse(code = 200, message = "Update network successful"), + @ApiResponse(code = 202, message = "Update network request has been accepted (async only)"), + @ApiResponse(code = 500, message = "Update network failed, examine entity object for details")}) + public Response updateNetwork( + @ApiParam(value = "aaiNetworkId", required = true) @PathParam("aaiNetworkId") String aaiNetworkId, + @ApiParam(value = "UpdateNetworkRequest in JSON format", required = true) UpdateNetworkRequest req) { + logger.debug("updateNetwork enter: {}", req.toJsonString()); + if (aaiNetworkId == null || !aaiNetworkId.equals(req.getNetworkId())) { + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN).entity( + "A&AI NetworkId in URL (" + aaiNetworkId + ") does not match content (" + req.getNetworkId() + ")") + .build(); + } + UpdateNetworkTask task = new UpdateNetworkTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception in updateNetwork ", MessageEnum.RA_UPDATE_NETWORK_ERR, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("updateNetwork exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class UpdateNetworkTask implements Runnable { + private final UpdateNetworkRequest req; + private UpdateNetworkResponse response = null; + private UpdateNetworkError eresp = null; + private boolean sendxml; + + public UpdateNetworkTask(UpdateNetworkRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<UpdateNetworkResponse>(response) {} + : new GenericEntity<UpdateNetworkError>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("UpdateNetworkTask start"); + try { + Holder<Map<String, String>> subnetIdMap = new Holder<>(); + Holder<NetworkRollback> rollback = new Holder<>(); + HashMap<String, String> params = (HashMap<String, String>) req.getNetworkParams(); + if (params == null) { + params = new HashMap<String, String>(); + } + String shared = null; + String external = null; + + if (req.getCloudSiteId().equals(TESTING_KEYWORD)) { + subnetIdMap.value = testMap(); + NetworkRollback rb = new NetworkRollback(); + rb.setCloudId(req.getCloudSiteId()); + rb.setTenantId(req.getTenantId()); + rb.setMsoRequest(req.getMsoRequest()); + rollback.value = rb; + } else if (req.isContrailRequest()) { + ContrailNetwork ctn = req.getContrailNetwork(); + if (ctn == null) { + ctn = new ContrailNetwork(); + req.setContrailNetwork(ctn); + } + if (params.containsKey("shared")) { + shared = params.get("shared"); + } else { + if (ctn.getShared() != null) { + shared = ctn.getShared(); + } + } + if (params.containsKey("external")) { + external = params.get("external"); + } else { + if (ctn.getExternal() != null) { + external = ctn.getExternal(); + } + } + adapter.updateNetworkContrail(req.getCloudSiteId(), req.getTenantId(), req.getNetworkType(), + req.getModelCustomizationUuid(), req.getNetworkStackId(), req.getNetworkName(), + req.getContrailNetwork().getRouteTargets(), shared, external, req.getSubnets(), params, + req.getContrailNetwork().getPolicyFqdns(), req.getContrailNetwork().getRouteTableFqdns(), + req.getMsoRequest(), subnetIdMap, rollback); + } else { + ProviderVlanNetwork pvn = req.getProviderVlanNetwork(); + if (pvn == null) { + pvn = new ProviderVlanNetwork(); + req.setProviderVlanNetwork(pvn); + } + if (params.containsKey("shared")) { + shared = params.get("shared"); + } + if (params.containsKey("external")) { + external = params.get("external"); + } + adapter.updateNetwork(req.getCloudSiteId(), req.getTenantId(), req.getNetworkType(), + req.getModelCustomizationUuid(), req.getNetworkStackId(), req.getNetworkName(), + req.getProviderVlanNetwork().getPhysicalNetworkName(), + req.getProviderVlanNetwork().getVlans(), shared, external, req.getSubnets(), params, + req.getMsoRequest(), subnetIdMap, rollback); + } + response = new UpdateNetworkResponse(req.getNetworkId(), null, // NeutronNetworkId is not available from + // an update + subnetIdMap.value, req.getMessageId()); + } catch (NetworkException e) { + logger.debug(EXCEPTION, e); + eresp = new UpdateNetworkError(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("UpdateNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse()); + } + } + + public static Map<String, String> testMap() { + Map<String, String> m = new HashMap<>(); + m.put("mickey", "7"); + m.put("clyde", "10"); + m.put("wayne", "99"); + return m; } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/CreateNetworkNotification.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/CreateNetworkNotification.java index fcce165d27..f30ccf2214 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/CreateNetworkNotification.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/CreateNetworkNotification.java @@ -24,7 +24,6 @@ package org.onap.so.adapters.network.async.client; import java.util.ArrayList; import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -32,9 +31,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for createNetworkNotification complex type. + * <p> + * Java class for createNetworkNotification complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="createNetworkNotification"> @@ -79,16 +80,8 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "createNetworkNotification", propOrder = { - "messageId", - "completed", - "exception", - "errorMessage", - "networkId", - "neutronNetworkId", - "subnetIdMap", - "rollback" -}) +@XmlType(name = "createNetworkNotification", propOrder = {"messageId", "completed", "exception", "errorMessage", + "networkId", "neutronNetworkId", "subnetIdMap", "rollback"}) public class CreateNetworkNotification { @XmlElement(required = true) @@ -104,10 +97,8 @@ public class CreateNetworkNotification { /** * Gets the value of the messageId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getMessageId() { return messageId; @@ -116,10 +107,8 @@ public class CreateNetworkNotification { /** * Sets the value of the messageId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setMessageId(String value) { this.messageId = value; @@ -144,10 +133,8 @@ public class CreateNetworkNotification { /** * Gets the value of the exception property. * - * @return - * possible object is - * {@link MsoExceptionCategory } - * + * @return possible object is {@link MsoExceptionCategory } + * */ public MsoExceptionCategory getException() { return exception; @@ -156,10 +143,8 @@ public class CreateNetworkNotification { /** * Sets the value of the exception property. * - * @param value - * allowed object is - * {@link MsoExceptionCategory } - * + * @param value allowed object is {@link MsoExceptionCategory } + * */ public void setException(MsoExceptionCategory value) { this.exception = value; @@ -168,10 +153,8 @@ public class CreateNetworkNotification { /** * Gets the value of the errorMessage property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getErrorMessage() { return errorMessage; @@ -180,10 +163,8 @@ public class CreateNetworkNotification { /** * Sets the value of the errorMessage property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setErrorMessage(String value) { this.errorMessage = value; @@ -192,10 +173,8 @@ public class CreateNetworkNotification { /** * Gets the value of the networkId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getNetworkId() { return networkId; @@ -204,10 +183,8 @@ public class CreateNetworkNotification { /** * Sets the value of the networkId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setNetworkId(String value) { this.networkId = value; @@ -216,10 +193,8 @@ public class CreateNetworkNotification { /** * Gets the value of the neutronNetworkId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getNeutronNetworkId() { return neutronNetworkId; @@ -228,10 +203,8 @@ public class CreateNetworkNotification { /** * Sets the value of the neutronNetworkId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setNeutronNetworkId(String value) { this.neutronNetworkId = value; @@ -240,10 +213,8 @@ public class CreateNetworkNotification { /** * Gets the value of the subnetIdMap property. * - * @return - * possible object is - * {@link CreateNetworkNotification.SubnetIdMap } - * + * @return possible object is {@link CreateNetworkNotification.SubnetIdMap } + * */ public CreateNetworkNotification.SubnetIdMap getSubnetIdMap() { return subnetIdMap; @@ -252,10 +223,8 @@ public class CreateNetworkNotification { /** * Sets the value of the subnetIdMap property. * - * @param value - * allowed object is - * {@link CreateNetworkNotification.SubnetIdMap } - * + * @param value allowed object is {@link CreateNetworkNotification.SubnetIdMap } + * */ public void setSubnetIdMap(CreateNetworkNotification.SubnetIdMap value) { this.subnetIdMap = value; @@ -264,10 +233,8 @@ public class CreateNetworkNotification { /** * Gets the value of the rollback property. * - * @return - * possible object is - * {@link NetworkRollback } - * + * @return possible object is {@link NetworkRollback } + * */ public NetworkRollback getRollback() { return rollback; @@ -276,10 +243,8 @@ public class CreateNetworkNotification { /** * Sets the value of the rollback property. * - * @param value - * allowed object is - * {@link NetworkRollback } - * + * @param value allowed object is {@link NetworkRollback } + * */ public void setRollback(NetworkRollback value) { this.rollback = value; @@ -287,9 +252,11 @@ public class CreateNetworkNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -317,9 +284,7 @@ public class CreateNetworkNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "entry" - }) + @XmlType(name = "", propOrder = {"entry"}) public static class SubnetIdMap { protected List<CreateNetworkNotification.SubnetIdMap.Entry> entry; @@ -328,21 +293,20 @@ public class CreateNetworkNotification { * Gets the value of the entry property. * * <p> - * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a <CODE>set</CODE> method for the entry property. + * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you + * make to the returned list will be present inside the JAXB object. This is why there is not a <CODE>set</CODE> + * method for the entry property. * * <p> * For example, to add a new item, do as follows: + * * <pre> - * getEntry().add(newItem); + * getEntry().add(newItem); * </pre> * * * <p> - * Objects of the following type(s) are allowed in the list - * {@link CreateNetworkNotification.SubnetIdMap.Entry } + * Objects of the following type(s) are allowed in the list {@link CreateNetworkNotification.SubnetIdMap.Entry } * * */ @@ -355,9 +319,11 @@ public class CreateNetworkNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -375,10 +341,7 @@ public class CreateNetworkNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "key", - "value" - }) + @XmlType(name = "", propOrder = {"key", "value"}) public static class Entry { protected String key; @@ -387,10 +350,8 @@ public class CreateNetworkNotification { /** * Gets the value of the key property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getKey() { return key; @@ -399,10 +360,8 @@ public class CreateNetworkNotification { /** * Sets the value of the key property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setKey(String value) { this.key = value; @@ -411,10 +370,8 @@ public class CreateNetworkNotification { /** * Gets the value of the value property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getValue() { return value; @@ -423,10 +380,8 @@ public class CreateNetworkNotification { /** * Sets the value of the value property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setValue(String value) { this.value = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/CreateNetworkNotificationResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/CreateNetworkNotificationResponse.java index a0e40c0e6a..4ade875193 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/CreateNetworkNotificationResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/CreateNetworkNotificationResponse.java @@ -26,9 +26,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for createNetworkNotificationResponse complex type. + * <p> + * Java class for createNetworkNotificationResponse complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="createNetworkNotificationResponse"> diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/DeleteNetworkNotification.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/DeleteNetworkNotification.java index d4f992a9b4..ff94be9156 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/DeleteNetworkNotification.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/DeleteNetworkNotification.java @@ -27,9 +27,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for deleteNetworkNotification complex type. + * <p> + * Java class for deleteNetworkNotification complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="deleteNetworkNotification"> @@ -50,13 +52,8 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "deleteNetworkNotification", propOrder = { - "messageId", - "completed", - "exception", - "errorMessage", - "networkDeleted" -}) +@XmlType(name = "deleteNetworkNotification", + propOrder = {"messageId", "completed", "exception", "errorMessage", "networkDeleted"}) public class DeleteNetworkNotification { @XmlElement(required = true) @@ -69,10 +66,8 @@ public class DeleteNetworkNotification { /** * Gets the value of the messageId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getMessageId() { return messageId; @@ -81,10 +76,8 @@ public class DeleteNetworkNotification { /** * Sets the value of the messageId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setMessageId(String value) { this.messageId = value; @@ -109,10 +102,8 @@ public class DeleteNetworkNotification { /** * Gets the value of the exception property. * - * @return - * possible object is - * {@link MsoExceptionCategory } - * + * @return possible object is {@link MsoExceptionCategory } + * */ public MsoExceptionCategory getException() { return exception; @@ -121,10 +112,8 @@ public class DeleteNetworkNotification { /** * Sets the value of the exception property. * - * @param value - * allowed object is - * {@link MsoExceptionCategory } - * + * @param value allowed object is {@link MsoExceptionCategory } + * */ public void setException(MsoExceptionCategory value) { this.exception = value; @@ -133,10 +122,8 @@ public class DeleteNetworkNotification { /** * Gets the value of the errorMessage property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getErrorMessage() { return errorMessage; @@ -145,10 +132,8 @@ public class DeleteNetworkNotification { /** * Sets the value of the errorMessage property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setErrorMessage(String value) { this.errorMessage = value; @@ -157,10 +142,8 @@ public class DeleteNetworkNotification { /** * Gets the value of the networkDeleted property. * - * @return - * possible object is - * {@link Boolean } - * + * @return possible object is {@link Boolean } + * */ public Boolean isNetworkDeleted() { return networkDeleted; @@ -169,10 +152,8 @@ public class DeleteNetworkNotification { /** * Sets the value of the networkDeleted property. * - * @param value - * allowed object is - * {@link Boolean } - * + * @param value allowed object is {@link Boolean } + * */ public void setNetworkDeleted(Boolean value) { this.networkDeleted = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/DeleteNetworkNotificationResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/DeleteNetworkNotificationResponse.java index 76eb8115d5..7f7d0ae569 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/DeleteNetworkNotificationResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/DeleteNetworkNotificationResponse.java @@ -26,9 +26,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for deleteNetworkNotificationResponse complex type. + * <p> + * Java class for deleteNetworkNotificationResponse complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="deleteNetworkNotificationResponse"> diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/MsoExceptionCategory.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/MsoExceptionCategory.java index 8c18a59e68..ad3c541730 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/MsoExceptionCategory.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/MsoExceptionCategory.java @@ -25,10 +25,13 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for msoExceptionCategory. + * <p> + * Java class for msoExceptionCategory. * - * <p>The following schema fragment specifies the expected content contained within this class. * <p> + * The following schema fragment specifies the expected content contained within this class. + * <p> + * * <pre> * <simpleType name="msoExceptionCategory"> * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> @@ -45,10 +48,7 @@ import javax.xml.bind.annotation.XmlType; @XmlEnum public enum MsoExceptionCategory { - OPENSTACK, - IO, - INTERNAL, - USERDATA; + OPENSTACK, IO, INTERNAL, USERDATA; public String value() { return name(); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/MsoRequest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/MsoRequest.java index aa6f34f2e0..90ae448660 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/MsoRequest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/MsoRequest.java @@ -26,9 +26,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for msoRequest complex type. + * <p> + * Java class for msoRequest complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="msoRequest"> @@ -46,10 +48,7 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "msoRequest", propOrder = { - "requestId", - "serviceInstanceId" -}) +@XmlType(name = "msoRequest", propOrder = {"requestId", "serviceInstanceId"}) public class MsoRequest { protected String requestId; @@ -58,10 +57,8 @@ public class MsoRequest { /** * Gets the value of the requestId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getRequestId() { return requestId; @@ -70,10 +67,8 @@ public class MsoRequest { /** * Sets the value of the requestId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setRequestId(String value) { this.requestId = value; @@ -82,10 +77,8 @@ public class MsoRequest { /** * Gets the value of the serviceInstanceId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getServiceInstanceId() { return serviceInstanceId; @@ -94,10 +87,8 @@ public class MsoRequest { /** * Sets the value of the serviceInstanceId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setServiceInstanceId(String value) { this.serviceInstanceId = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkAdapterNotify.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkAdapterNotify.java index 0433aab0cc..8fb62cc32e 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkAdapterNotify.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkAdapterNotify.java @@ -21,7 +21,6 @@ package org.onap.so.adapters.network.async.client; import java.util.List; - import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @@ -32,15 +31,11 @@ import javax.xml.ws.ResponseWrapper; /** - * This class was generated by the JAX-WS RI. - * JAX-WS RI 2.2.9-b14002 - * Generated source version: 2.2 + * This class was generated by the JAX-WS RI. JAX-WS RI 2.2.9-b14002 Generated source version: 2.2 * */ @WebService(name = "networkAdapterNotify", targetNamespace = "http://org.onap.so/networkNotify") -@XmlSeeAlso({ - ObjectFactory.class -}) +@XmlSeeAlso({ObjectFactory.class}) public interface NetworkAdapterNotify { @@ -52,18 +47,17 @@ public interface NetworkAdapterNotify { * @param completed */ @WebMethod - @RequestWrapper(localName = "rollbackNetworkNotification", targetNamespace = "http://org.onap.so/networkNotify", className = "org.onap.so.adapters.network.async.client.RollbackNetworkNotification") - @ResponseWrapper(localName = "rollbackNetworkNotificationResponse", targetNamespace = "http://org.onap.so/networkNotify", className = "org.onap.so.adapters.network.async.client.RollbackNetworkNotificationResponse") - @Action(input = "http://org.onap.so/notify/adapterNotify/rollbackNetworkNotificationRequest", output = "http://org.onap.so/notify/adapterNotify/rollbackNetworkNotificationResponse") - public void rollbackNetworkNotification( - @WebParam(name = "messageId", targetNamespace = "") - String messageId, - @WebParam(name = "completed", targetNamespace = "") - boolean completed, - @WebParam(name = "exception", targetNamespace = "") - MsoExceptionCategory exception, - @WebParam(name = "errorMessage", targetNamespace = "") - String errorMessage); + @RequestWrapper(localName = "rollbackNetworkNotification", targetNamespace = "http://org.onap.so/networkNotify", + className = "org.onap.so.adapters.network.async.client.RollbackNetworkNotification") + @ResponseWrapper(localName = "rollbackNetworkNotificationResponse", + targetNamespace = "http://org.onap.so/networkNotify", + className = "org.onap.so.adapters.network.async.client.RollbackNetworkNotificationResponse") + @Action(input = "http://org.onap.so/notify/adapterNotify/rollbackNetworkNotificationRequest", + output = "http://org.onap.so/notify/adapterNotify/rollbackNetworkNotificationResponse") + public void rollbackNetworkNotification(@WebParam(name = "messageId", targetNamespace = "") String messageId, + @WebParam(name = "completed", targetNamespace = "") boolean completed, + @WebParam(name = "exception", targetNamespace = "") MsoExceptionCategory exception, + @WebParam(name = "errorMessage", targetNamespace = "") String errorMessage); /** * @@ -79,30 +73,23 @@ public interface NetworkAdapterNotify { * @param subnetIdMap */ @WebMethod - @RequestWrapper(localName = "queryNetworkNotification", targetNamespace = "http://org.onap.so/networkNotify", className = "org.onap.so.adapters.network.async.client.QueryNetworkNotification") - @ResponseWrapper(localName = "queryNetworkNotificationResponse", targetNamespace = "http://org.onap.so/networkNotify", className = "org.onap.so.adapters.network.async.client.QueryNetworkNotificationResponse") - @Action(input = "http://org.onap.so/notify/adapterNotify/queryNetworkNotificationRequest", output = "http://org.onap.so/notify/adapterNotify/queryNetworkNotificationResponse") - public void queryNetworkNotification( - @WebParam(name = "messageId", targetNamespace = "") - String messageId, - @WebParam(name = "completed", targetNamespace = "") - boolean completed, - @WebParam(name = "exception", targetNamespace = "") - MsoExceptionCategory exception, - @WebParam(name = "errorMessage", targetNamespace = "") - String errorMessage, - @WebParam(name = "networkExists", targetNamespace = "") - Boolean networkExists, - @WebParam(name = "networkId", targetNamespace = "") - String networkId, - @WebParam(name = "neutronNetworkId", targetNamespace = "") - String neutronNetworkId, - @WebParam(name = "status", targetNamespace = "") - NetworkStatus status, - @WebParam(name = "vlans", targetNamespace = "") - List<Integer> vlans, - @WebParam(name = "subnetIdMap", targetNamespace = "") - org.onap.so.adapters.network.async.client.QueryNetworkNotification.SubnetIdMap subnetIdMap); + @RequestWrapper(localName = "queryNetworkNotification", targetNamespace = "http://org.onap.so/networkNotify", + className = "org.onap.so.adapters.network.async.client.QueryNetworkNotification") + @ResponseWrapper(localName = "queryNetworkNotificationResponse", + targetNamespace = "http://org.onap.so/networkNotify", + className = "org.onap.so.adapters.network.async.client.QueryNetworkNotificationResponse") + @Action(input = "http://org.onap.so/notify/adapterNotify/queryNetworkNotificationRequest", + output = "http://org.onap.so/notify/adapterNotify/queryNetworkNotificationResponse") + public void queryNetworkNotification(@WebParam(name = "messageId", targetNamespace = "") String messageId, + @WebParam(name = "completed", targetNamespace = "") boolean completed, + @WebParam(name = "exception", targetNamespace = "") MsoExceptionCategory exception, + @WebParam(name = "errorMessage", targetNamespace = "") String errorMessage, + @WebParam(name = "networkExists", targetNamespace = "") Boolean networkExists, + @WebParam(name = "networkId", targetNamespace = "") String networkId, + @WebParam(name = "neutronNetworkId", targetNamespace = "") String neutronNetworkId, + @WebParam(name = "status", targetNamespace = "") NetworkStatus status, + @WebParam(name = "vlans", targetNamespace = "") List<Integer> vlans, @WebParam(name = "subnetIdMap", + targetNamespace = "") org.onap.so.adapters.network.async.client.QueryNetworkNotification.SubnetIdMap subnetIdMap); /** * @@ -116,26 +103,22 @@ public interface NetworkAdapterNotify { * @param subnetIdMap */ @WebMethod - @RequestWrapper(localName = "createNetworkNotification", targetNamespace = "http://org.onap.so/networkNotify", className = "org.onap.so.adapters.network.async.client.CreateNetworkNotification") - @ResponseWrapper(localName = "createNetworkNotificationResponse", targetNamespace = "http://org.onap.so/networkNotify", className = "org.onap.so.adapters.network.async.client.CreateNetworkNotificationResponse") - @Action(input = "http://org.onap.so/notify/adapterNotify/createNetworkNotificationRequest", output = "http://org.onap.so/notify/adapterNotify/createNetworkNotificationResponse") - public void createNetworkNotification( - @WebParam(name = "messageId", targetNamespace = "") - String messageId, - @WebParam(name = "completed", targetNamespace = "") - boolean completed, - @WebParam(name = "exception", targetNamespace = "") - MsoExceptionCategory exception, - @WebParam(name = "errorMessage", targetNamespace = "") - String errorMessage, - @WebParam(name = "networkId", targetNamespace = "") - String networkId, - @WebParam(name = "neutronNetworkId", targetNamespace = "") - String neutronNetworkId, - @WebParam(name = "subnetIdMap", targetNamespace = "") - org.onap.so.adapters.network.async.client.CreateNetworkNotification.SubnetIdMap subnetIdMap, - @WebParam(name = "rollback", targetNamespace = "") - NetworkRollback rollback); + @RequestWrapper(localName = "createNetworkNotification", targetNamespace = "http://org.onap.so/networkNotify", + className = "org.onap.so.adapters.network.async.client.CreateNetworkNotification") + @ResponseWrapper(localName = "createNetworkNotificationResponse", + targetNamespace = "http://org.onap.so/networkNotify", + className = "org.onap.so.adapters.network.async.client.CreateNetworkNotificationResponse") + @Action(input = "http://org.onap.so/notify/adapterNotify/createNetworkNotificationRequest", + output = "http://org.onap.so/notify/adapterNotify/createNetworkNotificationResponse") + public void createNetworkNotification(@WebParam(name = "messageId", targetNamespace = "") String messageId, + @WebParam(name = "completed", targetNamespace = "") boolean completed, + @WebParam(name = "exception", targetNamespace = "") MsoExceptionCategory exception, + @WebParam(name = "errorMessage", targetNamespace = "") String errorMessage, + @WebParam(name = "networkId", targetNamespace = "") String networkId, + @WebParam(name = "neutronNetworkId", targetNamespace = "") String neutronNetworkId, + @WebParam(name = "subnetIdMap", + targetNamespace = "") org.onap.so.adapters.network.async.client.CreateNetworkNotification.SubnetIdMap subnetIdMap, + @WebParam(name = "rollback", targetNamespace = "") NetworkRollback rollback); /** * @@ -146,20 +129,18 @@ public interface NetworkAdapterNotify { * @param completed */ @WebMethod - @RequestWrapper(localName = "deleteNetworkNotification", targetNamespace = "http://org.onap.so/networkNotify", className = "org.onap.so.adapters.network.async.client.DeleteNetworkNotification") - @ResponseWrapper(localName = "deleteNetworkNotificationResponse", targetNamespace = "http://org.onap.so/networkNotify", className = "org.onap.so.adapters.network.async.client.DeleteNetworkNotificationResponse") - @Action(input = "http://org.onap.so/notify/adapterNotify/deleteNetworkNotificationRequest", output = "http://org.onap.so/notify/adapterNotify/deleteNetworkNotificationResponse") - public void deleteNetworkNotification( - @WebParam(name = "messageId", targetNamespace = "") - String messageId, - @WebParam(name = "completed", targetNamespace = "") - boolean completed, - @WebParam(name = "exception", targetNamespace = "") - MsoExceptionCategory exception, - @WebParam(name = "errorMessage", targetNamespace = "") - String errorMessage, - @WebParam(name = "networkDeleted", targetNamespace = "") - Boolean networkDeleted); + @RequestWrapper(localName = "deleteNetworkNotification", targetNamespace = "http://org.onap.so/networkNotify", + className = "org.onap.so.adapters.network.async.client.DeleteNetworkNotification") + @ResponseWrapper(localName = "deleteNetworkNotificationResponse", + targetNamespace = "http://org.onap.so/networkNotify", + className = "org.onap.so.adapters.network.async.client.DeleteNetworkNotificationResponse") + @Action(input = "http://org.onap.so/notify/adapterNotify/deleteNetworkNotificationRequest", + output = "http://org.onap.so/notify/adapterNotify/deleteNetworkNotificationResponse") + public void deleteNetworkNotification(@WebParam(name = "messageId", targetNamespace = "") String messageId, + @WebParam(name = "completed", targetNamespace = "") boolean completed, + @WebParam(name = "exception", targetNamespace = "") MsoExceptionCategory exception, + @WebParam(name = "errorMessage", targetNamespace = "") String errorMessage, + @WebParam(name = "networkDeleted", targetNamespace = "") Boolean networkDeleted); /** * @@ -171,21 +152,19 @@ public interface NetworkAdapterNotify { * @param subnetIdMap */ @WebMethod - @RequestWrapper(localName = "updateNetworkNotification", targetNamespace = "http://org.onap.so/networkNotify", className = "org.onap.so.adapters.network.async.client.UpdateNetworkNotification") - @ResponseWrapper(localName = "updateNetworkNotificationResponse", targetNamespace = "http://org.onap.so/networkNotify", className = "org.onap.so.adapters.network.async.client.UpdateNetworkNotificationResponse") - @Action(input = "http://org.onap.so/notify/adapterNotify/updateNetworkNotificationRequest", output = "http://org.onap.so/notify/adapterNotify/updateNetworkNotificationResponse") - public void updateNetworkNotification( - @WebParam(name = "messageId", targetNamespace = "") - String messageId, - @WebParam(name = "completed", targetNamespace = "") - boolean completed, - @WebParam(name = "exception", targetNamespace = "") - MsoExceptionCategory exception, - @WebParam(name = "errorMessage", targetNamespace = "") - String errorMessage, - @WebParam(name = "subnetIdMap", targetNamespace = "") - org.onap.so.adapters.network.async.client.UpdateNetworkNotification.SubnetIdMap subnetIdMap, - @WebParam(name = "rollback", targetNamespace = "") - NetworkRollback rollback); + @RequestWrapper(localName = "updateNetworkNotification", targetNamespace = "http://org.onap.so/networkNotify", + className = "org.onap.so.adapters.network.async.client.UpdateNetworkNotification") + @ResponseWrapper(localName = "updateNetworkNotificationResponse", + targetNamespace = "http://org.onap.so/networkNotify", + className = "org.onap.so.adapters.network.async.client.UpdateNetworkNotificationResponse") + @Action(input = "http://org.onap.so/notify/adapterNotify/updateNetworkNotificationRequest", + output = "http://org.onap.so/notify/adapterNotify/updateNetworkNotificationResponse") + public void updateNetworkNotification(@WebParam(name = "messageId", targetNamespace = "") String messageId, + @WebParam(name = "completed", targetNamespace = "") boolean completed, + @WebParam(name = "exception", targetNamespace = "") MsoExceptionCategory exception, + @WebParam(name = "errorMessage", targetNamespace = "") String errorMessage, + @WebParam(name = "subnetIdMap", + targetNamespace = "") org.onap.so.adapters.network.async.client.UpdateNetworkNotification.SubnetIdMap subnetIdMap, + @WebParam(name = "rollback", targetNamespace = "") NetworkRollback rollback); } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkAdapterNotify_Service.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkAdapterNotify_Service.java index f408f227c6..c275073c46 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkAdapterNotify_Service.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkAdapterNotify_Service.java @@ -23,7 +23,6 @@ package org.onap.so.adapters.network.async.client; import java.net.URL; - import javax.xml.namespace.QName; import javax.xml.ws.Service; import javax.xml.ws.WebEndpoint; @@ -33,26 +32,26 @@ import javax.xml.ws.WebServiceFeature; /** - * This class was generated by the JAX-WS RI. - * JAX-WS RI 2.2.9-b14002 - * Generated source version: 2.2 + * This class was generated by the JAX-WS RI. JAX-WS RI 2.2.9-b14002 Generated source version: 2.2 * */ -@WebServiceClient(name = "networkAdapterNotify", targetNamespace = "http://org.onap.so/networkNotify", wsdlLocation = "/NetworkAdapterNotify.wsdl") -public class NetworkAdapterNotify_Service - extends Service -{ +@WebServiceClient(name = "networkAdapterNotify", targetNamespace = "http://org.onap.so/networkNotify", + wsdlLocation = "/NetworkAdapterNotify.wsdl") +public class NetworkAdapterNotify_Service extends Service { private static final URL NETWORKADAPTERNOTIFY_WSDL_LOCATION; private static final WebServiceException NETWORKADAPTERNOTIFY_EXCEPTION; - private static final String URL="http://org.onap.so/networkNotify"; + private static final String URL = "http://org.onap.so/networkNotify"; private static final QName NETWORKADAPTERNOTIFY_QNAME = new QName(URL, "networkAdapterNotify"); static { - NETWORKADAPTERNOTIFY_WSDL_LOCATION = org.onap.so.adapters.network.async.client.NetworkAdapterNotify_Service.class.getResource("/NetworkAdapterNotify.wsdl"); + NETWORKADAPTERNOTIFY_WSDL_LOCATION = + org.onap.so.adapters.network.async.client.NetworkAdapterNotify_Service.class + .getResource("/NetworkAdapterNotify.wsdl"); WebServiceException e = null; if (NETWORKADAPTERNOTIFY_WSDL_LOCATION == null) { - e = new WebServiceException("Cannot find '/NetworkAdapterNotify.wsdl' wsdl. Place the resource correctly in the classpath."); + e = new WebServiceException( + "Cannot find '/NetworkAdapterNotify.wsdl' wsdl. Place the resource correctly in the classpath."); } NETWORKADAPTERNOTIFY_EXCEPTION = e; } @@ -83,8 +82,7 @@ public class NetworkAdapterNotify_Service /** * - * @return - * returns NetworkAdapterNotify + * @return returns NetworkAdapterNotify */ @WebEndpoint(name = "MsoNetworkAdapterAsyncImplPort") public NetworkAdapterNotify getMsoNetworkAdapterAsyncImplPort() { @@ -93,10 +91,9 @@ public class NetworkAdapterNotify_Service /** * - * @param features - * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values. - * @return - * returns NetworkAdapterNotify + * @param features A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features + * not in the <code>features</code> parameter will have their default values. + * @return returns NetworkAdapterNotify */ @WebEndpoint(name = "MsoNetworkAdapterAsyncImplPort") public NetworkAdapterNotify getMsoNetworkAdapterAsyncImplPort(WebServiceFeature... features) { @@ -104,7 +101,7 @@ public class NetworkAdapterNotify_Service } private static URL __getWsdlLocation() { - if (NETWORKADAPTERNOTIFY_EXCEPTION!= null) { + if (NETWORKADAPTERNOTIFY_EXCEPTION != null) { throw NETWORKADAPTERNOTIFY_EXCEPTION; } return NETWORKADAPTERNOTIFY_WSDL_LOCATION; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkRollback.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkRollback.java index e7ace110ac..c51a21d5f0 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkRollback.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkRollback.java @@ -24,7 +24,6 @@ package org.onap.so.adapters.network.async.client; import java.util.ArrayList; import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -32,9 +31,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for networkRollback complex type. + * <p> + * Java class for networkRollback complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="networkRollback"> @@ -62,20 +63,9 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "networkRollback", propOrder = { - "cloudId", - "msoRequest", - "networkCreated", - "networkId", - "networkStackId", - "networkName", - "networkType", - "networkUpdated", - "neutronNetworkId", - "physicalNetwork", - "tenantId", - "vlans" -}) +@XmlType(name = "networkRollback", + propOrder = {"cloudId", "msoRequest", "networkCreated", "networkId", "networkStackId", "networkName", + "networkType", "networkUpdated", "neutronNetworkId", "physicalNetwork", "tenantId", "vlans"}) public class NetworkRollback { protected String cloudId; @@ -95,10 +85,8 @@ public class NetworkRollback { /** * Gets the value of the cloudId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getCloudId() { return cloudId; @@ -107,10 +95,8 @@ public class NetworkRollback { /** * Sets the value of the cloudId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setCloudId(String value) { this.cloudId = value; @@ -119,10 +105,8 @@ public class NetworkRollback { /** * Gets the value of the msoRequest property. * - * @return - * possible object is - * {@link MsoRequest } - * + * @return possible object is {@link MsoRequest } + * */ public MsoRequest getMsoRequest() { return msoRequest; @@ -131,10 +115,8 @@ public class NetworkRollback { /** * Sets the value of the msoRequest property. * - * @param value - * allowed object is - * {@link MsoRequest } - * + * @param value allowed object is {@link MsoRequest } + * */ public void setMsoRequest(MsoRequest value) { this.msoRequest = value; @@ -159,10 +141,8 @@ public class NetworkRollback { /** * Gets the value of the networkId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getNetworkId() { return networkId; @@ -171,10 +151,8 @@ public class NetworkRollback { /** * Sets the value of the networkId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setNetworkId(String value) { this.networkId = value; @@ -183,10 +161,8 @@ public class NetworkRollback { /** * Gets the value of the networkStackId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getNetworkStackId() { return networkStackId; @@ -195,10 +171,8 @@ public class NetworkRollback { /** * Sets the value of the networkStackId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setNetworkStackId(String value) { this.networkStackId = value; @@ -207,10 +181,8 @@ public class NetworkRollback { /** * Gets the value of the networkName property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getNetworkName() { return networkName; @@ -219,10 +191,8 @@ public class NetworkRollback { /** * Sets the value of the networkName property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setNetworkName(String value) { this.networkName = value; @@ -231,10 +201,8 @@ public class NetworkRollback { /** * Gets the value of the networkType property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getNetworkType() { return networkType; @@ -243,10 +211,8 @@ public class NetworkRollback { /** * Sets the value of the networkType property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setNetworkType(String value) { this.networkType = value; @@ -271,10 +237,8 @@ public class NetworkRollback { /** * Gets the value of the neutronNetworkId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getNeutronNetworkId() { return neutronNetworkId; @@ -283,10 +247,8 @@ public class NetworkRollback { /** * Sets the value of the neutronNetworkId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setNeutronNetworkId(String value) { this.neutronNetworkId = value; @@ -295,10 +257,8 @@ public class NetworkRollback { /** * Gets the value of the physicalNetwork property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getPhysicalNetwork() { return physicalNetwork; @@ -307,10 +267,8 @@ public class NetworkRollback { /** * Sets the value of the physicalNetwork property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setPhysicalNetwork(String value) { this.physicalNetwork = value; @@ -319,10 +277,8 @@ public class NetworkRollback { /** * Gets the value of the tenantId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getTenantId() { return tenantId; @@ -331,10 +287,8 @@ public class NetworkRollback { /** * Sets the value of the tenantId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setTenantId(String value) { this.tenantId = value; @@ -344,21 +298,20 @@ public class NetworkRollback { * Gets the value of the vlans property. * * <p> - * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a <CODE>set</CODE> method for the vlans property. + * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make to + * the returned list will be present inside the JAXB object. This is why there is not a <CODE>set</CODE> method for + * the vlans property. * * <p> * For example, to add a new item, do as follows: + * * <pre> - * getVlans().add(newItem); + * getVlans().add(newItem); * </pre> * * * <p> - * Objects of the following type(s) are allowed in the list - * {@link Integer } + * Objects of the following type(s) are allowed in the list {@link Integer } * * */ diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkStatus.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkStatus.java index 982f214bd8..36641477c0 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkStatus.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/NetworkStatus.java @@ -25,10 +25,13 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for networkStatus. + * <p> + * Java class for networkStatus. * - * <p>The following schema fragment specifies the expected content contained within this class. * <p> + * The following schema fragment specifies the expected content contained within this class. + * <p> + * * <pre> * <simpleType name="networkStatus"> * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> @@ -47,12 +50,7 @@ import javax.xml.bind.annotation.XmlType; @XmlEnum public enum NetworkStatus { - NOTFOUND, - ACTIVE, - DOWN, - BUILD, - ERROR, - UNKNOWN; + NOTFOUND, ACTIVE, DOWN, BUILD, ERROR, UNKNOWN; public String value() { return name(); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/ObjectFactory.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/ObjectFactory.java index f2238fce78..81ccd8aa04 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/ObjectFactory.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/ObjectFactory.java @@ -27,40 +27,41 @@ import javax.xml.namespace.QName; /** - * This object contains factory methods for each - * Java content interface and Java element interface - * generated in the org.onap.so.adapters.network.async.client package. - * <p>An ObjectFactory allows you to programatically - * construct new instances of the Java representation - * for XML content. The Java representation of XML - * content can consist of schema derived interfaces - * and classes representing the binding of schema - * type definitions, element declarations and model - * groups. Factory methods for each of these are - * provided in this class. + * This object contains factory methods for each Java content interface and Java element interface generated in the + * org.onap.so.adapters.network.async.client package. + * <p> + * An ObjectFactory allows you to programatically construct new instances of the Java representation for XML content. + * The Java representation of XML content can consist of schema derived interfaces and classes representing the binding + * of schema type definitions, element declarations and model groups. Factory methods for each of these are provided in + * this class. * */ @XmlRegistry public class ObjectFactory { - - private static final String Url= "http://org.onap.so/networkNotify"; + + private static final String Url = "http://org.onap.so/networkNotify"; private static final QName _RollbackNetworkNotification_QNAME = new QName(Url, "rollbackNetworkNotification"); private static final QName _UpdateNetworkNotification_QNAME = new QName(Url, "updateNetworkNotification"); - private static final QName _QueryNetworkNotificationResponse_QNAME = new QName(Url, "queryNetworkNotificationResponse"); - private static final QName _UpdateNetworkNotificationResponse_QNAME = new QName(Url, "updateNetworkNotificationResponse"); - private static final QName _CreateNetworkNotificationResponse_QNAME = new QName(Url, "createNetworkNotificationResponse"); + private static final QName _QueryNetworkNotificationResponse_QNAME = + new QName(Url, "queryNetworkNotificationResponse"); + private static final QName _UpdateNetworkNotificationResponse_QNAME = + new QName(Url, "updateNetworkNotificationResponse"); + private static final QName _CreateNetworkNotificationResponse_QNAME = + new QName(Url, "createNetworkNotificationResponse"); private static final QName _DeleteNetworkNotification_QNAME = new QName(Url, "deleteNetworkNotification"); - private static final QName _DeleteNetworkNotificationResponse_QNAME = new QName(Url, "deleteNetworkNotificationResponse"); + private static final QName _DeleteNetworkNotificationResponse_QNAME = + new QName(Url, "deleteNetworkNotificationResponse"); private static final QName _CreateNetworkNotification_QNAME = new QName(Url, "createNetworkNotification"); private static final QName _QueryNetworkNotification_QNAME = new QName(Url, "queryNetworkNotification"); - private static final QName _RollbackNetworkNotificationResponse_QNAME = new QName(Url, "rollbackNetworkNotificationResponse"); + private static final QName _RollbackNetworkNotificationResponse_QNAME = + new QName(Url, "rollbackNetworkNotificationResponse"); /** - * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.onap.so.adapters.network.async.client + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: + * org.onap.so.adapters.network.async.client * */ - public ObjectFactory() { - } + public ObjectFactory() {} /** * Create an instance of {@link QueryNetworkNotification } @@ -211,7 +212,8 @@ public class ObjectFactory { * */ @XmlElementDecl(namespace = Url, name = "rollbackNetworkNotification") - public JAXBElement<RollbackNetworkNotification> createRollbackNetworkNotification(RollbackNetworkNotification value) { + public JAXBElement<RollbackNetworkNotification> createRollbackNetworkNotification( + RollbackNetworkNotification value) { return new JAXBElement<>(_RollbackNetworkNotification_QNAME, RollbackNetworkNotification.class, null, value); } @@ -229,8 +231,10 @@ public class ObjectFactory { * */ @XmlElementDecl(namespace = Url, name = "queryNetworkNotificationResponse") - public JAXBElement<QueryNetworkNotificationResponse> createQueryNetworkNotificationResponse(QueryNetworkNotificationResponse value) { - return new JAXBElement<>(_QueryNetworkNotificationResponse_QNAME, QueryNetworkNotificationResponse.class, null, value); + public JAXBElement<QueryNetworkNotificationResponse> createQueryNetworkNotificationResponse( + QueryNetworkNotificationResponse value) { + return new JAXBElement<>(_QueryNetworkNotificationResponse_QNAME, QueryNetworkNotificationResponse.class, null, + value); } /** @@ -238,8 +242,10 @@ public class ObjectFactory { * */ @XmlElementDecl(namespace = Url, name = "updateNetworkNotificationResponse") - public JAXBElement<UpdateNetworkNotificationResponse> createUpdateNetworkNotificationResponse(UpdateNetworkNotificationResponse value) { - return new JAXBElement<>(_UpdateNetworkNotificationResponse_QNAME, UpdateNetworkNotificationResponse.class, null, value); + public JAXBElement<UpdateNetworkNotificationResponse> createUpdateNetworkNotificationResponse( + UpdateNetworkNotificationResponse value) { + return new JAXBElement<>(_UpdateNetworkNotificationResponse_QNAME, UpdateNetworkNotificationResponse.class, + null, value); } /** @@ -247,8 +253,10 @@ public class ObjectFactory { * */ @XmlElementDecl(namespace = Url, name = "createNetworkNotificationResponse") - public JAXBElement<CreateNetworkNotificationResponse> createCreateNetworkNotificationResponse(CreateNetworkNotificationResponse value) { - return new JAXBElement<>(_CreateNetworkNotificationResponse_QNAME, CreateNetworkNotificationResponse.class, null, value); + public JAXBElement<CreateNetworkNotificationResponse> createCreateNetworkNotificationResponse( + CreateNetworkNotificationResponse value) { + return new JAXBElement<>(_CreateNetworkNotificationResponse_QNAME, CreateNetworkNotificationResponse.class, + null, value); } /** @@ -265,8 +273,10 @@ public class ObjectFactory { * */ @XmlElementDecl(namespace = Url, name = "deleteNetworkNotificationResponse") - public JAXBElement<DeleteNetworkNotificationResponse> createDeleteNetworkNotificationResponse(DeleteNetworkNotificationResponse value) { - return new JAXBElement<>(_DeleteNetworkNotificationResponse_QNAME, DeleteNetworkNotificationResponse.class, null, value); + public JAXBElement<DeleteNetworkNotificationResponse> createDeleteNetworkNotificationResponse( + DeleteNetworkNotificationResponse value) { + return new JAXBElement<>(_DeleteNetworkNotificationResponse_QNAME, DeleteNetworkNotificationResponse.class, + null, value); } /** @@ -292,8 +302,10 @@ public class ObjectFactory { * */ @XmlElementDecl(namespace = Url, name = "rollbackNetworkNotificationResponse") - public JAXBElement<RollbackNetworkNotificationResponse> createRollbackNetworkNotificationResponse(RollbackNetworkNotificationResponse value) { - return new JAXBElement<>(_RollbackNetworkNotificationResponse_QNAME, RollbackNetworkNotificationResponse.class, null, value); + public JAXBElement<RollbackNetworkNotificationResponse> createRollbackNetworkNotificationResponse( + RollbackNetworkNotificationResponse value) { + return new JAXBElement<>(_RollbackNetworkNotificationResponse_QNAME, RollbackNetworkNotificationResponse.class, + null, value); } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/QueryNetworkNotification.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/QueryNetworkNotification.java index 87aa2183f1..d9adbf2ad2 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/QueryNetworkNotification.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/QueryNetworkNotification.java @@ -24,7 +24,6 @@ package org.onap.so.adapters.network.async.client; import java.util.ArrayList; import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -32,9 +31,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for queryNetworkNotification complex type. + * <p> + * Java class for queryNetworkNotification complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="queryNetworkNotification"> @@ -81,18 +82,8 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "queryNetworkNotification", propOrder = { - "messageId", - "completed", - "exception", - "errorMessage", - "networkExists", - "networkId", - "neutronNetworkId", - "status", - "vlans", - "subnetIdMap" -}) +@XmlType(name = "queryNetworkNotification", propOrder = {"messageId", "completed", "exception", "errorMessage", + "networkExists", "networkId", "neutronNetworkId", "status", "vlans", "subnetIdMap"}) public class QueryNetworkNotification { @XmlElement(required = true) @@ -111,10 +102,8 @@ public class QueryNetworkNotification { /** * Gets the value of the messageId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getMessageId() { return messageId; @@ -123,10 +112,8 @@ public class QueryNetworkNotification { /** * Sets the value of the messageId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setMessageId(String value) { this.messageId = value; @@ -151,10 +138,8 @@ public class QueryNetworkNotification { /** * Gets the value of the exception property. * - * @return - * possible object is - * {@link MsoExceptionCategory } - * + * @return possible object is {@link MsoExceptionCategory } + * */ public MsoExceptionCategory getException() { return exception; @@ -163,10 +148,8 @@ public class QueryNetworkNotification { /** * Sets the value of the exception property. * - * @param value - * allowed object is - * {@link MsoExceptionCategory } - * + * @param value allowed object is {@link MsoExceptionCategory } + * */ public void setException(MsoExceptionCategory value) { this.exception = value; @@ -175,10 +158,8 @@ public class QueryNetworkNotification { /** * Gets the value of the errorMessage property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getErrorMessage() { return errorMessage; @@ -187,10 +168,8 @@ public class QueryNetworkNotification { /** * Sets the value of the errorMessage property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setErrorMessage(String value) { this.errorMessage = value; @@ -199,10 +178,8 @@ public class QueryNetworkNotification { /** * Gets the value of the networkExists property. * - * @return - * possible object is - * {@link Boolean } - * + * @return possible object is {@link Boolean } + * */ public Boolean isNetworkExists() { return networkExists; @@ -211,10 +188,8 @@ public class QueryNetworkNotification { /** * Sets the value of the networkExists property. * - * @param value - * allowed object is - * {@link Boolean } - * + * @param value allowed object is {@link Boolean } + * */ public void setNetworkExists(Boolean value) { this.networkExists = value; @@ -223,10 +198,8 @@ public class QueryNetworkNotification { /** * Gets the value of the networkId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getNetworkId() { return networkId; @@ -235,10 +208,8 @@ public class QueryNetworkNotification { /** * Sets the value of the networkId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setNetworkId(String value) { this.networkId = value; @@ -247,10 +218,8 @@ public class QueryNetworkNotification { /** * Gets the value of the neutronNetworkId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getNeutronNetworkId() { return neutronNetworkId; @@ -259,10 +228,8 @@ public class QueryNetworkNotification { /** * Sets the value of the neutronNetworkId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setNeutronNetworkId(String value) { this.neutronNetworkId = value; @@ -271,10 +238,8 @@ public class QueryNetworkNotification { /** * Gets the value of the status property. * - * @return - * possible object is - * {@link NetworkStatus } - * + * @return possible object is {@link NetworkStatus } + * */ public NetworkStatus getStatus() { return status; @@ -283,10 +248,8 @@ public class QueryNetworkNotification { /** * Sets the value of the status property. * - * @param value - * allowed object is - * {@link NetworkStatus } - * + * @param value allowed object is {@link NetworkStatus } + * */ public void setStatus(NetworkStatus value) { this.status = value; @@ -296,21 +259,20 @@ public class QueryNetworkNotification { * Gets the value of the vlans property. * * <p> - * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a <CODE>set</CODE> method for the vlans property. + * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make to + * the returned list will be present inside the JAXB object. This is why there is not a <CODE>set</CODE> method for + * the vlans property. * * <p> * For example, to add a new item, do as follows: + * * <pre> - * getVlans().add(newItem); + * getVlans().add(newItem); * </pre> * * * <p> - * Objects of the following type(s) are allowed in the list - * {@link Integer } + * Objects of the following type(s) are allowed in the list {@link Integer } * * */ @@ -324,10 +286,8 @@ public class QueryNetworkNotification { /** * Gets the value of the subnetIdMap property. * - * @return - * possible object is - * {@link QueryNetworkNotification.SubnetIdMap } - * + * @return possible object is {@link QueryNetworkNotification.SubnetIdMap } + * */ public QueryNetworkNotification.SubnetIdMap getSubnetIdMap() { return subnetIdMap; @@ -336,10 +296,8 @@ public class QueryNetworkNotification { /** * Sets the value of the subnetIdMap property. * - * @param value - * allowed object is - * {@link QueryNetworkNotification.SubnetIdMap } - * + * @param value allowed object is {@link QueryNetworkNotification.SubnetIdMap } + * */ public void setSubnetIdMap(QueryNetworkNotification.SubnetIdMap value) { this.subnetIdMap = value; @@ -347,9 +305,11 @@ public class QueryNetworkNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -377,9 +337,7 @@ public class QueryNetworkNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "entry" - }) + @XmlType(name = "", propOrder = {"entry"}) public static class SubnetIdMap { protected List<QueryNetworkNotification.SubnetIdMap.Entry> entry; @@ -388,21 +346,20 @@ public class QueryNetworkNotification { * Gets the value of the entry property. * * <p> - * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a <CODE>set</CODE> method for the entry property. + * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you + * make to the returned list will be present inside the JAXB object. This is why there is not a <CODE>set</CODE> + * method for the entry property. * * <p> * For example, to add a new item, do as follows: + * * <pre> - * getEntry().add(newItem); + * getEntry().add(newItem); * </pre> * * * <p> - * Objects of the following type(s) are allowed in the list - * {@link QueryNetworkNotification.SubnetIdMap.Entry } + * Objects of the following type(s) are allowed in the list {@link QueryNetworkNotification.SubnetIdMap.Entry } * * */ @@ -415,9 +372,11 @@ public class QueryNetworkNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -435,10 +394,7 @@ public class QueryNetworkNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "key", - "value" - }) + @XmlType(name = "", propOrder = {"key", "value"}) public static class Entry { protected String key; @@ -447,10 +403,8 @@ public class QueryNetworkNotification { /** * Gets the value of the key property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getKey() { return key; @@ -459,10 +413,8 @@ public class QueryNetworkNotification { /** * Sets the value of the key property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setKey(String value) { this.key = value; @@ -471,10 +423,8 @@ public class QueryNetworkNotification { /** * Gets the value of the value property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getValue() { return value; @@ -483,10 +433,8 @@ public class QueryNetworkNotification { /** * Sets the value of the value property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setValue(String value) { this.value = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/QueryNetworkNotificationResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/QueryNetworkNotificationResponse.java index 0320df27fc..2e18e05860 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/QueryNetworkNotificationResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/QueryNetworkNotificationResponse.java @@ -26,9 +26,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for queryNetworkNotificationResponse complex type. + * <p> + * Java class for queryNetworkNotificationResponse complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="queryNetworkNotificationResponse"> diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/RollbackNetworkNotification.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/RollbackNetworkNotification.java index 08f37fc85d..7b5d0f0f2a 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/RollbackNetworkNotification.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/RollbackNetworkNotification.java @@ -27,9 +27,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for rollbackNetworkNotification complex type. + * <p> + * Java class for rollbackNetworkNotification complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="rollbackNetworkNotification"> @@ -49,12 +51,7 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "rollbackNetworkNotification", propOrder = { - "messageId", - "completed", - "exception", - "errorMessage" -}) +@XmlType(name = "rollbackNetworkNotification", propOrder = {"messageId", "completed", "exception", "errorMessage"}) public class RollbackNetworkNotification { @XmlElement(required = true) @@ -66,10 +63,8 @@ public class RollbackNetworkNotification { /** * Gets the value of the messageId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getMessageId() { return messageId; @@ -78,10 +73,8 @@ public class RollbackNetworkNotification { /** * Sets the value of the messageId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setMessageId(String value) { this.messageId = value; @@ -106,10 +99,8 @@ public class RollbackNetworkNotification { /** * Gets the value of the exception property. * - * @return - * possible object is - * {@link MsoExceptionCategory } - * + * @return possible object is {@link MsoExceptionCategory } + * */ public MsoExceptionCategory getException() { return exception; @@ -118,10 +109,8 @@ public class RollbackNetworkNotification { /** * Sets the value of the exception property. * - * @param value - * allowed object is - * {@link MsoExceptionCategory } - * + * @param value allowed object is {@link MsoExceptionCategory } + * */ public void setException(MsoExceptionCategory value) { this.exception = value; @@ -130,10 +119,8 @@ public class RollbackNetworkNotification { /** * Gets the value of the errorMessage property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getErrorMessage() { return errorMessage; @@ -142,10 +129,8 @@ public class RollbackNetworkNotification { /** * Sets the value of the errorMessage property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setErrorMessage(String value) { this.errorMessage = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/RollbackNetworkNotificationResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/RollbackNetworkNotificationResponse.java index 44db3a1583..7ddc8d75de 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/RollbackNetworkNotificationResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/RollbackNetworkNotificationResponse.java @@ -26,9 +26,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for rollbackNetworkNotificationResponse complex type. + * <p> + * Java class for rollbackNetworkNotificationResponse complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="rollbackNetworkNotificationResponse"> diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/UpdateNetworkNotification.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/UpdateNetworkNotification.java index daff548b45..1a464d3250 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/UpdateNetworkNotification.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/UpdateNetworkNotification.java @@ -24,7 +24,6 @@ package org.onap.so.adapters.network.async.client; import java.util.ArrayList; import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -32,9 +31,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for updateNetworkNotification complex type. + * <p> + * Java class for updateNetworkNotification complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="updateNetworkNotification"> @@ -77,14 +78,8 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "updateNetworkNotification", propOrder = { - "messageId", - "completed", - "exception", - "errorMessage", - "subnetIdMap", - "rollback" -}) +@XmlType(name = "updateNetworkNotification", + propOrder = {"messageId", "completed", "exception", "errorMessage", "subnetIdMap", "rollback"}) public class UpdateNetworkNotification { @XmlElement(required = true) @@ -98,10 +93,8 @@ public class UpdateNetworkNotification { /** * Gets the value of the messageId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getMessageId() { return messageId; @@ -110,10 +103,8 @@ public class UpdateNetworkNotification { /** * Sets the value of the messageId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setMessageId(String value) { this.messageId = value; @@ -138,10 +129,8 @@ public class UpdateNetworkNotification { /** * Gets the value of the exception property. * - * @return - * possible object is - * {@link MsoExceptionCategory } - * + * @return possible object is {@link MsoExceptionCategory } + * */ public MsoExceptionCategory getException() { return exception; @@ -150,10 +139,8 @@ public class UpdateNetworkNotification { /** * Sets the value of the exception property. * - * @param value - * allowed object is - * {@link MsoExceptionCategory } - * + * @param value allowed object is {@link MsoExceptionCategory } + * */ public void setException(MsoExceptionCategory value) { this.exception = value; @@ -162,10 +149,8 @@ public class UpdateNetworkNotification { /** * Gets the value of the errorMessage property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getErrorMessage() { return errorMessage; @@ -174,10 +159,8 @@ public class UpdateNetworkNotification { /** * Sets the value of the errorMessage property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setErrorMessage(String value) { this.errorMessage = value; @@ -186,10 +169,8 @@ public class UpdateNetworkNotification { /** * Gets the value of the subnetIdMap property. * - * @return - * possible object is - * {@link UpdateNetworkNotification.SubnetIdMap } - * + * @return possible object is {@link UpdateNetworkNotification.SubnetIdMap } + * */ public UpdateNetworkNotification.SubnetIdMap getSubnetIdMap() { return subnetIdMap; @@ -198,10 +179,8 @@ public class UpdateNetworkNotification { /** * Sets the value of the subnetIdMap property. * - * @param value - * allowed object is - * {@link UpdateNetworkNotification.SubnetIdMap } - * + * @param value allowed object is {@link UpdateNetworkNotification.SubnetIdMap } + * */ public void setSubnetIdMap(UpdateNetworkNotification.SubnetIdMap value) { this.subnetIdMap = value; @@ -210,10 +189,8 @@ public class UpdateNetworkNotification { /** * Gets the value of the rollback property. * - * @return - * possible object is - * {@link NetworkRollback } - * + * @return possible object is {@link NetworkRollback } + * */ public NetworkRollback getRollback() { return rollback; @@ -222,10 +199,8 @@ public class UpdateNetworkNotification { /** * Sets the value of the rollback property. * - * @param value - * allowed object is - * {@link NetworkRollback } - * + * @param value allowed object is {@link NetworkRollback } + * */ public void setRollback(NetworkRollback value) { this.rollback = value; @@ -233,9 +208,11 @@ public class UpdateNetworkNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -263,9 +240,7 @@ public class UpdateNetworkNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "entry" - }) + @XmlType(name = "", propOrder = {"entry"}) public static class SubnetIdMap { protected List<UpdateNetworkNotification.SubnetIdMap.Entry> entry; @@ -274,21 +249,20 @@ public class UpdateNetworkNotification { * Gets the value of the entry property. * * <p> - * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a <CODE>set</CODE> method for the entry property. + * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you + * make to the returned list will be present inside the JAXB object. This is why there is not a <CODE>set</CODE> + * method for the entry property. * * <p> * For example, to add a new item, do as follows: + * * <pre> - * getEntry().add(newItem); + * getEntry().add(newItem); * </pre> * * * <p> - * Objects of the following type(s) are allowed in the list - * {@link UpdateNetworkNotification.SubnetIdMap.Entry } + * Objects of the following type(s) are allowed in the list {@link UpdateNetworkNotification.SubnetIdMap.Entry } * * */ @@ -301,9 +275,11 @@ public class UpdateNetworkNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -321,10 +297,7 @@ public class UpdateNetworkNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "key", - "value" - }) + @XmlType(name = "", propOrder = {"key", "value"}) public static class Entry { protected String key; @@ -333,10 +306,8 @@ public class UpdateNetworkNotification { /** * Gets the value of the key property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getKey() { return key; @@ -345,10 +316,8 @@ public class UpdateNetworkNotification { /** * Sets the value of the key property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setKey(String value) { this.key = value; @@ -357,10 +326,8 @@ public class UpdateNetworkNotification { /** * Gets the value of the value property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getValue() { return value; @@ -369,10 +336,8 @@ public class UpdateNetworkNotification { /** * Sets the value of the value property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setValue(String value) { this.value = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/UpdateNetworkNotificationResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/UpdateNetworkNotificationResponse.java index e0016d9b8e..0ffcb5e9e6 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/UpdateNetworkNotificationResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/async/client/UpdateNetworkNotificationResponse.java @@ -26,9 +26,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for updateNetworkNotificationResponse complex type. + * <p> + * Java class for updateNetworkNotificationResponse complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="updateNetworkNotificationResponse"> diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/exceptions/NetworkException.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/exceptions/NetworkException.java index cb4cd8b927..175535fef3 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/exceptions/NetworkException.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/exceptions/NetworkException.java @@ -23,58 +23,58 @@ package org.onap.so.adapters.network.exceptions; import javax.xml.ws.WebFault; - import org.onap.so.openstack.exceptions.MsoException; import org.onap.so.openstack.exceptions.MsoExceptionCategory; /** - * This class simply extends Exception (without addition additional functionality) - * to provide an identifier for Network related exceptions on create, delete, query. + * This class simply extends Exception (without addition additional functionality) to provide an identifier for Network + * related exceptions on create, delete, query. * * */ -@WebFault (name="NetworkException", faultBean="org.onap.so.adapters.network.exceptions.NetworkExceptionBean", targetNamespace="http://org.onap.so/network") +@WebFault(name = "NetworkException", faultBean = "org.onap.so.adapters.network.exceptions.NetworkExceptionBean", + targetNamespace = "http://org.onap.so/network") public class NetworkException extends Exception { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + private NetworkExceptionBean faultInfo; + + public NetworkException(String msg) { + super(msg); + faultInfo = new NetworkExceptionBean(msg); + } + + public NetworkException(Throwable e) { + super(e); + faultInfo = new NetworkExceptionBean(e.getMessage()); + } + + public NetworkException(String msg, Throwable e) { + super(msg, e); + faultInfo = new NetworkExceptionBean(msg); + } + + public NetworkException(String msg, MsoExceptionCategory category) { + super(msg); + faultInfo = new NetworkExceptionBean(msg, category); + } + + public NetworkException(String msg, MsoExceptionCategory category, Throwable e) { + super(msg, e); + faultInfo = new NetworkExceptionBean(msg, category); + } - private NetworkExceptionBean faultInfo; - - public NetworkException (String msg) { - super(msg); - faultInfo = new NetworkExceptionBean (msg); - } - - public NetworkException (Throwable e) { - super(e); - faultInfo = new NetworkExceptionBean (e.getMessage()); - } - - public NetworkException (String msg, Throwable e) { - super (msg, e); - faultInfo = new NetworkExceptionBean (msg); - } + public NetworkException(MsoException e) { + super(e); + faultInfo = new NetworkExceptionBean(e.getContextMessage(), e.getCategory()); + } - public NetworkException (String msg, MsoExceptionCategory category) { - super(msg); - faultInfo = new NetworkExceptionBean (msg, category); - } - - public NetworkException (String msg, MsoExceptionCategory category, Throwable e) { - super (msg, e); - faultInfo = new NetworkExceptionBean (msg, category); - } - - public NetworkException (MsoException e) { - super (e); - faultInfo = new NetworkExceptionBean (e.getContextMessage(), e.getCategory()); - } - - public NetworkExceptionBean getFaultInfo() { - return faultInfo; - } + public NetworkExceptionBean getFaultInfo() { + return faultInfo; + } - public void setFaultInfo(NetworkExceptionBean faultInfo) { - this.faultInfo = faultInfo; - } + public void setFaultInfo(NetworkExceptionBean faultInfo) { + this.faultInfo = faultInfo; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/exceptions/NetworkExceptionBean.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/exceptions/NetworkExceptionBean.java index 5256891ffa..6a3d567ebd 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/exceptions/NetworkExceptionBean.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/exceptions/NetworkExceptionBean.java @@ -22,7 +22,6 @@ package org.onap.so.adapters.network.exceptions; import java.io.Serializable; - import org.onap.so.openstack.exceptions.MsoExceptionCategory; /** @@ -33,41 +32,41 @@ public class NetworkExceptionBean implements Serializable { private static final long serialVersionUID = 1655343530371342871L; private String message; - private MsoExceptionCategory category; - private Boolean rolledBack; + private MsoExceptionCategory category; + private Boolean rolledBack; - public NetworkExceptionBean () {} + public NetworkExceptionBean() {} - public NetworkExceptionBean (String message) { - this.message = message; - } + public NetworkExceptionBean(String message) { + this.message = message; + } - public NetworkExceptionBean (String message, MsoExceptionCategory category) { - this.message = message; - this.category = category; - } + public NetworkExceptionBean(String message, MsoExceptionCategory category) { + this.message = message; + this.category = category; + } - public String getMessage() { - return message; - } + public String getMessage() { + return message; + } - public void setMessage(String message) { - this.message = message; - } + public void setMessage(String message) { + this.message = message; + } - public MsoExceptionCategory getCategory () { - return category; - } + public MsoExceptionCategory getCategory() { + return category; + } - public void setCategory (MsoExceptionCategory category) { - this.category = category; - } + public void setCategory(MsoExceptionCategory category) { + this.category = category; + } - public Boolean isRolledBack() { - return rolledBack; - } + public Boolean isRolledBack() { + return rolledBack; + } - public void setRolledBack(Boolean rolledBack) { - this.rolledBack = rolledBack; - } + public void setRolledBack(Boolean rolledBack) { + this.rolledBack = rolledBack; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java index c529413891..68b8598267 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java @@ -22,7 +22,6 @@ package org.onap.so.adapters.openstack; import java.net.MalformedURLException; import java.net.URL; - import org.onap.so.client.aai.AAIProperties; import org.onap.so.client.aai.AAIVersion; import org.onap.so.spring.SpringContextHelper; @@ -30,40 +29,40 @@ import org.springframework.context.ApplicationContext; public class AaiClientPropertiesImpl implements AAIProperties { - private String aaiEndpoint; - private String auth; - private String key; - private static final String SYSTEM_NAME = "MSO"; - - public AaiClientPropertiesImpl() { - ApplicationContext context = SpringContextHelper.getAppContext(); - aaiEndpoint = context.getEnvironment().getProperty("aai.endpoint"); - this.auth = context.getEnvironment().getProperty("aai.auth"); - this.key = context.getEnvironment().getProperty("mso.msoKey"); - } + private String aaiEndpoint; + private String auth; + private String key; + private static final String SYSTEM_NAME = "MSO"; + + public AaiClientPropertiesImpl() { + ApplicationContext context = SpringContextHelper.getAppContext(); + aaiEndpoint = context.getEnvironment().getProperty("aai.endpoint"); + this.auth = context.getEnvironment().getProperty("aai.auth"); + this.key = context.getEnvironment().getProperty("mso.msoKey"); + } + + @Override + public URL getEndpoint() throws MalformedURLException { + return new URL(aaiEndpoint); + } + + @Override + public String getSystemName() { + return SYSTEM_NAME; + } - @Override - public URL getEndpoint() throws MalformedURLException { - return new URL(aaiEndpoint); - } + @Override + public AAIVersion getDefaultVersion() { + return AAIVersion.LATEST; + } - @Override - public String getSystemName() { - return SYSTEM_NAME; - } - - @Override - public AAIVersion getDefaultVersion() { - return AAIVersion.LATEST; - } - - @Override - public String getAuth() { - return this.auth; - } + @Override + public String getAuth() { + return this.auth; + } - @Override - public String getKey() { - return this.key; - } + @Override + public String getKey() { + return this.key; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/CXFConfiguration.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/CXFConfiguration.java index 72c74ccaf9..4396fc035d 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/CXFConfiguration.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/CXFConfiguration.java @@ -23,9 +23,7 @@ package org.onap.so.adapters.openstack; import java.util.Arrays; - import javax.xml.ws.Endpoint; - import org.apache.cxf.Bus; import org.apache.cxf.bus.spring.SpringBus; import org.apache.cxf.endpoint.Server; @@ -47,62 +45,59 @@ import org.onap.so.adapters.vnf.VnfAdapterRestV2; import org.onap.so.adapters.vnf.VolumeAdapterRest; import org.onap.so.adapters.vnf.VolumeAdapterRestV2; import org.onap.so.client.policy.JettisonStyleMapperProvider; - import org.onap.so.logging.cxf.interceptor.SOAPLoggingInInterceptor; import org.onap.so.logging.cxf.interceptor.SOAPLoggingOutInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; - import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; @Configuration public class CXFConfiguration { - @Autowired - private NetworkAdapterRest networkAdapterRest; - @Autowired - private TenantAdapterRest tenantAdapterRest; - @Autowired - private VnfAdapterRest vnfAdapterRest; - @Autowired - private VnfAdapterRestV2 vnfAdapterRestV2; - @Autowired - private VolumeAdapterRest volumeAdapterRest; - @Autowired - private VolumeAdapterRestV2 volumeAdapterRestV2; - @Autowired - private MsoNetworkAdapterImpl networkAdapterImpl; - @Autowired - private MsoNetworkAdapterAsyncImpl networkAdapterAsyncImpl; - @Autowired - private MsoTenantAdapterImpl tenantAdapterImpl; - @Autowired - private MsoVnfAdapterImpl vnfAdapterImpl; - @Autowired - private MsoVnfAdapterAsyncImpl vnfAdapterAsyncImpl; - @Autowired - private MsoVnfCloudifyAdapterImpl vnfCloudifyAdapterImpl; - @Autowired - private JettisonStyleMapperProvider jettisonStyleObjectMapper; + @Autowired + private NetworkAdapterRest networkAdapterRest; + @Autowired + private TenantAdapterRest tenantAdapterRest; + @Autowired + private VnfAdapterRest vnfAdapterRest; + @Autowired + private VnfAdapterRestV2 vnfAdapterRestV2; + @Autowired + private VolumeAdapterRest volumeAdapterRest; + @Autowired + private VolumeAdapterRestV2 volumeAdapterRestV2; + @Autowired + private MsoNetworkAdapterImpl networkAdapterImpl; + @Autowired + private MsoNetworkAdapterAsyncImpl networkAdapterAsyncImpl; + @Autowired + private MsoTenantAdapterImpl tenantAdapterImpl; + @Autowired + private MsoVnfAdapterImpl vnfAdapterImpl; + @Autowired + private MsoVnfAdapterAsyncImpl vnfAdapterAsyncImpl; + @Autowired + private MsoVnfCloudifyAdapterImpl vnfCloudifyAdapterImpl; + @Autowired + private JettisonStyleMapperProvider jettisonStyleObjectMapper; - @Bean(name=Bus.DEFAULT_BUS_ID) - public SpringBus springBus() { + @Bean(name = Bus.DEFAULT_BUS_ID) + public SpringBus springBus() { return new SpringBus(); - } - - @Bean - public ServletRegistrationBean SoapDispatcherServlet() { - ServletRegistrationBean servletRegistrationBean = - new ServletRegistrationBean(new CXFServlet(), "/services/*"); + } + + @Bean + public ServletRegistrationBean SoapDispatcherServlet() { + ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/services/*"); servletRegistrationBean.setName("services"); - return servletRegistrationBean; - } + return servletRegistrationBean; + } - /* - * network adapter endpoint - */ + /* + * network adapter endpoint + */ @Bean public Endpoint networkAdapterEndpoint() { EndpointImpl endpoint = new EndpointImpl(springBus(), networkAdapterImpl); @@ -112,8 +107,8 @@ public class CXFConfiguration { endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor()); endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor()); return endpoint; - } - + } + @Bean public Endpoint networkAdapterAsyncEndpoint() { EndpointImpl endpoint = new EndpointImpl(springBus(), networkAdapterAsyncImpl); @@ -123,8 +118,8 @@ public class CXFConfiguration { endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor()); endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor()); return endpoint; - } - + } + /* * tenant adapter endpoint */ @@ -138,11 +133,9 @@ public class CXFConfiguration { endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor()); return endpoint; } - + /* - * vnfAdapterEndpoint - * VnfAsyncAdapterEndpoint - * VnfCloudAdapterEndpoint + * vnfAdapterEndpoint VnfAsyncAdapterEndpoint VnfCloudAdapterEndpoint */ @Bean public Endpoint vnfAdapterEndpoint() { @@ -154,7 +147,7 @@ public class CXFConfiguration { endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor()); return endpoint; } - + @Bean public Endpoint VnfAsyncAdapterEndpoint() { EndpointImpl endpoint = new EndpointImpl(springBus(), vnfAdapterAsyncImpl); @@ -165,7 +158,7 @@ public class CXFConfiguration { endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor()); return endpoint; } - + @Bean public Endpoint VnfCloudAdapterEndpoint() { EndpointImpl endpoint = new EndpointImpl(springBus(), vnfCloudifyAdapterImpl); @@ -176,34 +169,31 @@ public class CXFConfiguration { endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor()); return endpoint; } - + @Bean public Server rsServer() { JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean(); endpoint.setBus(springBus()); - endpoint.setServiceBeans(Arrays.<Object>asList(networkAdapterRest, - tenantAdapterRest, - vnfAdapterRest, - vnfAdapterRestV2, - volumeAdapterRest, - volumeAdapterRestV2)); + endpoint.setServiceBeans(Arrays.<Object>asList(networkAdapterRest, tenantAdapterRest, vnfAdapterRest, + vnfAdapterRestV2, volumeAdapterRest, volumeAdapterRestV2)); endpoint.setAddress("/rest"); endpoint.setFeatures(Arrays.asList(createSwaggerFeature(), new LoggingFeature())); endpoint.setProvider(new JacksonJsonProvider(jettisonStyleObjectMapper.getMapper())); return endpoint.create(); - } - - + } + + @Bean public Swagger2Feature createSwaggerFeature() { - Swagger2Feature swagger2Feature= new Swagger2Feature(); + Swagger2Feature swagger2Feature = new Swagger2Feature(); swagger2Feature.setPrettyPrint(true); swagger2Feature.setTitle("SO Orchestration Application"); swagger2Feature.setContact("The ONAP SO team"); swagger2Feature.setDescription("This project is the SO Orchestration Engine"); swagger2Feature.setVersion("1.0.0"); - swagger2Feature.setResourcePackage("org.onap.so.adapters.network,org.onap.so.adapters.tenant,org.onap.so.adapters.vnf"); + swagger2Feature.setResourcePackage( + "org.onap.so.adapters.network,org.onap.so.adapters.tenant,org.onap.so.adapters.vnf"); swagger2Feature.setScan(true); return swagger2Feature; - } + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/MsoOpenstackAdaptersApplication.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/MsoOpenstackAdaptersApplication.java index 9408f0d681..97a2500c59 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/MsoOpenstackAdaptersApplication.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/MsoOpenstackAdaptersApplication.java @@ -21,7 +21,6 @@ package org.onap.so.adapters.openstack; import java.util.concurrent.Executor; - import org.onap.so.logging.jaxrs.filter.MDCTaskDecorator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -34,46 +33,45 @@ import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -@SpringBootApplication(scanBasePackages = { "org.onap.so" }) +@SpringBootApplication(scanBasePackages = {"org.onap.so"}) @EnableAsync @EnableScheduling -@EnableJpaRepositories({ "org.onap.so.db.catalog.data.repository", - "org.onap.so.db.request.data.repository"}) -@EntityScan({ "org.onap.so.db.catalog.beans", "org.onap.so.db.request.beans"}) +@EnableJpaRepositories({"org.onap.so.db.catalog.data.repository", "org.onap.so.db.request.data.repository"}) +@EntityScan({"org.onap.so.db.catalog.beans", "org.onap.so.db.request.beans"}) public class MsoOpenstackAdaptersApplication { - @Value("${mso.async.core-pool-size}") - private int corePoolSize; + @Value("${mso.async.core-pool-size}") + private int corePoolSize; - @Value("${mso.async.max-pool-size}") - private int maxPoolSize; + @Value("${mso.async.max-pool-size}") + private int maxPoolSize; - @Value("${mso.async.queue-capacity}") - private int queueCapacity; + @Value("${mso.async.queue-capacity}") + private int queueCapacity; - private static final String LOGS_DIR = "logs_dir"; + private static final String LOGS_DIR = "logs_dir"; - private static void setLogsDir() { - if (System.getProperty(LOGS_DIR) == null) { - System.getProperties().setProperty(LOGS_DIR, "./logs/openstack/"); - } - } + private static void setLogsDir() { + if (System.getProperty(LOGS_DIR) == null) { + System.getProperties().setProperty(LOGS_DIR, "./logs/openstack/"); + } + } - public static void main(String[] args) { - SpringApplication.run(MsoOpenstackAdaptersApplication.class, args); - setLogsDir(); - } + public static void main(String[] args) { + SpringApplication.run(MsoOpenstackAdaptersApplication.class, args); + setLogsDir(); + } - @Bean - public Executor asyncExecutor() { - ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setTaskDecorator(new MDCTaskDecorator()); - executor.setCorePoolSize(corePoolSize); - executor.setMaxPoolSize(maxPoolSize); - executor.setQueueCapacity(queueCapacity); - executor.setThreadNamePrefix("OpenstackAdapters-"); - executor.initialize(); - return executor; - } + @Bean + public Executor asyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setTaskDecorator(new MDCTaskDecorator()); + executor.setCorePoolSize(corePoolSize); + executor.setMaxPoolSize(maxPoolSize); + executor.setQueueCapacity(queueCapacity); + executor.setThreadNamePrefix("OpenstackAdapters-"); + executor.initialize(); + return executor; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/WebSecurityConfigImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/WebSecurityConfigImpl.java index aca16d9996..97e43d9828 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/WebSecurityConfigImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/WebSecurityConfigImpl.java @@ -19,7 +19,7 @@ * limitations under the License. * ============LICENSE_END========================================================= */ - + package org.onap.so.adapters.openstack; import org.onap.so.security.MSOSpringFirewall; @@ -33,21 +33,18 @@ import org.springframework.util.StringUtils; @EnableWebSecurity public class WebSecurityConfigImpl extends WebSecurityConfig { - @Override - protected void configure(HttpSecurity http) throws Exception { - http.csrf().disable() - .authorizeRequests() - .antMatchers("/manage/health","/manage/info").permitAll() - .antMatchers("/**").hasAnyRole(StringUtils.collectionToDelimitedString(getRoles(),",")) - .and() - .httpBasic(); - } - - @Override - public void configure(WebSecurity web) throws Exception { - super.configure(web); - StrictHttpFirewall firewall = new MSOSpringFirewall(); - web.httpFirewall(firewall); - } + @Override + protected void configure(HttpSecurity http) throws Exception { + http.csrf().disable().authorizeRequests().antMatchers("/manage/health", "/manage/info").permitAll() + .antMatchers("/**").hasAnyRole(StringUtils.collectionToDelimitedString(getRoles(), ",")).and() + .httpBasic(); + } + + @Override + public void configure(WebSecurity web) throws Exception { + super.configure(web); + StrictHttpFirewall firewall = new MSOSpringFirewall(); + web.httpFirewall(firewall); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/MsoTenantAdapter.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/MsoTenantAdapter.java index d82d478a93..68f7558add 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/MsoTenantAdapter.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/MsoTenantAdapter.java @@ -24,55 +24,48 @@ package org.onap.so.adapters.tenant; import java.util.Map; - import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebParam.Mode; import javax.jws.WebService; import javax.xml.bind.annotation.XmlElement; import javax.xml.ws.Holder; - import org.onap.so.adapters.tenant.exceptions.TenantException; import org.onap.so.adapters.tenantrest.TenantRollback; import org.onap.so.entity.MsoRequest; -@WebService (name="TenantAdapter", targetNamespace="http://org.onap.so/tenant") -public interface MsoTenantAdapter -{ - /** - * This is the "Create Tenant" Web Service Endpoint definition. - */ - @WebMethod - public void createTenant (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantName") @XmlElement(required=true) String tenantName, - @WebParam(name="metadata") Map<String,String> metadata, - @WebParam(name="failIfExists") Boolean failIfExists, - @WebParam(name="backout") Boolean backout, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="tenantId", mode=Mode.OUT) Holder<String> tenantId, - @WebParam(name="rollback", mode=Mode.OUT) Holder<TenantRollback> rollback ) - throws TenantException; - - @WebMethod - public void queryTenant (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantNameOrId") @XmlElement(required=true) String tenantNameOrId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="tenantId", mode=Mode.OUT) Holder<String> tenantId, - @WebParam(name="tenantName", mode=Mode.OUT) Holder<String> tenantName, - @WebParam(name="metadata", mode=Mode.OUT) Holder<Map<String,String>> metadata ) - throws TenantException; - - @WebMethod - public void deleteTenant (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="tenantDeleted", mode=Mode.OUT) Holder<Boolean> tenantDeleted) - throws TenantException; - - @WebMethod - public void rollbackTenant (@WebParam(name="rollback") @XmlElement(required=true) TenantRollback rollback) - throws TenantException; - - @WebMethod - public void healthCheck (); +@WebService(name = "TenantAdapter", targetNamespace = "http://org.onap.so/tenant") +public interface MsoTenantAdapter { + /** + * This is the "Create Tenant" Web Service Endpoint definition. + */ + @WebMethod + public void createTenant(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantName") @XmlElement(required = true) String tenantName, + @WebParam(name = "metadata") Map<String, String> metadata, + @WebParam(name = "failIfExists") Boolean failIfExists, @WebParam(name = "backout") Boolean backout, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "tenantId", mode = Mode.OUT) Holder<String> tenantId, + @WebParam(name = "rollback", mode = Mode.OUT) Holder<TenantRollback> rollback) throws TenantException; + + @WebMethod + public void queryTenant(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantNameOrId") @XmlElement(required = true) String tenantNameOrId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "tenantId", mode = Mode.OUT) Holder<String> tenantId, + @WebParam(name = "tenantName", mode = Mode.OUT) Holder<String> tenantName, + @WebParam(name = "metadata", mode = Mode.OUT) Holder<Map<String, String>> metadata) throws TenantException; + + @WebMethod + public void deleteTenant(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "tenantDeleted", mode = Mode.OUT) Holder<Boolean> tenantDeleted) throws TenantException; + + @WebMethod + public void rollbackTenant(@WebParam(name = "rollback") @XmlElement(required = true) TenantRollback rollback) + throws TenantException; + + @WebMethod + public void healthCheck(); } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/MsoTenantAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/MsoTenantAdapterImpl.java index ceae1caca6..04b90b444f 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/MsoTenantAdapterImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/MsoTenantAdapterImpl.java @@ -45,96 +45,93 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -@WebService(serviceName = "TenantAdapter", endpointInterface = "org.onap.so.adapters.tenant.MsoTenantAdapter", targetNamespace = "http://org.onap.so/tenant") +@WebService(serviceName = "TenantAdapter", endpointInterface = "org.onap.so.adapters.tenant.MsoTenantAdapter", + targetNamespace = "http://org.onap.so/tenant") @Component public class MsoTenantAdapterImpl implements MsoTenantAdapter { - public static final String CREATE_TENANT = "createTenant"; + public static final String CREATE_TENANT = "createTenant"; public static final String OPENSTACK = "OpenStack"; public static final String QUERY_TENANT = "QueryTenant"; public static final String DELETE_TENANT = "DeleteTenant"; public static final String ROLLBACK_TENANT = "RollbackTenant"; - private static final String OPENSTACK_COMMUNICATE_EXCEPTION_MSG = "{} {} Exception while communicate with Open Stack "; + private static final String OPENSTACK_COMMUNICATE_EXCEPTION_MSG = + "{} {} Exception while communicate with Open Stack "; @Resource private WebServiceContext wsContext; @Autowired - private MsoTenantUtilsFactory tFactory; + private MsoTenantUtilsFactory tFactory; private static Logger logger = LoggerFactory.getLogger(MsoTenantAdapterImpl.class); + /** * Health Check web method. Does nothing but return to show the adapter is deployed. */ @Override - public void healthCheck () { - logger.debug ("Health check call in Tenant Adapter"); + public void healthCheck() { + logger.debug("Health check call in Tenant Adapter"); } /** - * This is the "Create Tenant" web service implementation. It will create - * a new Tenant in the specified cloud. If the tenant already exists, this - * can be considered a success or failure, depending on the value of the + * This is the "Create Tenant" web service implementation. It will create a new Tenant in the specified cloud. If + * the tenant already exists, this can be considered a success or failure, depending on the value of the * 'failIfExists' parameter. * - * The method returns the tenantId (the Openstack ID), and a TenantRollback - * object. This last object can be passed as-is to the rollbackTenant method - * to undo what (if anything) was created. This is useful if a Tenant is + * The method returns the tenantId (the Openstack ID), and a TenantRollback object. This last object can be passed + * as-is to the rollbackTenant method to undo what (if anything) was created. This is useful if a Tenant is * successfully created but the orchestrator fails on a subsequent operation. */ @Override - public void createTenant (String cloudSiteId, - String tenantName, - Map <String, String> metadata, - Boolean failIfExists, - Boolean backout, - MsoRequest msoRequest, - Holder <String> tenantId, - Holder <TenantRollback> rollback) throws TenantException { + public void createTenant(String cloudSiteId, String tenantName, Map<String, String> metadata, Boolean failIfExists, + Boolean backout, MsoRequest msoRequest, Holder<String> tenantId, Holder<TenantRollback> rollback) + throws TenantException { logger.debug("Call to MSO createTenant adapter. Creating Tenant: {} in {}", tenantName, cloudSiteId); // Start building up rollback object - TenantRollback tenantRollback = new TenantRollback (); - tenantRollback.setCloudId (cloudSiteId); - tenantRollback.setMsoRequest (msoRequest); - + TenantRollback tenantRollback = new TenantRollback(); + tenantRollback.setCloudId(cloudSiteId); + tenantRollback.setMsoRequest(msoRequest); + MsoTenantUtils tUtils; - try { - tUtils = tFactory.getTenantUtils (cloudSiteId); - } catch (MsoCloudSiteNotFound me) { - logger.error("{} {} no implementation found for {}: ", MessageEnum.RA_CREATE_TENANT_ERR, - ErrorCode.DataError.getValue(), cloudSiteId, me); - throw new TenantException (me); - } + try { + tUtils = tFactory.getTenantUtils(cloudSiteId); + } catch (MsoCloudSiteNotFound me) { + logger.error("{} {} no implementation found for {}: ", MessageEnum.RA_CREATE_TENANT_ERR, + ErrorCode.DataError.getValue(), cloudSiteId, me); + throw new TenantException(me); + } MsoTenant newTenant = null; String newTenantId; try { - newTenant = tUtils.queryTenantByName (tenantName, cloudSiteId); + newTenant = tUtils.queryTenantByName(tenantName, cloudSiteId); } catch (MsoException me) { logger.error(OPENSTACK_COMMUNICATE_EXCEPTION_MSG, MessageEnum.RA_CREATE_TENANT_ERR, - ErrorCode.DataError.getValue(), me); - throw new TenantException (me); + ErrorCode.DataError.getValue(), me); + throw new TenantException(me); } if (newTenant == null) { if (backout == null) backout = true; try { - newTenantId = tUtils.createTenant (tenantName, cloudSiteId, metadata, backout.booleanValue ()); + newTenantId = tUtils.createTenant(tenantName, cloudSiteId, metadata, backout.booleanValue()); } catch (MsoException me) { - logger.error (OPENSTACK_COMMUNICATE_EXCEPTION_MSG, MessageEnum.RA_CREATE_TENANT_ERR, ErrorCode.DataError.getValue(), me); - throw new TenantException (me); + logger.error(OPENSTACK_COMMUNICATE_EXCEPTION_MSG, MessageEnum.RA_CREATE_TENANT_ERR, + ErrorCode.DataError.getValue(), me); + throw new TenantException(me); } - tenantRollback.setTenantId (newTenantId); - tenantRollback.setTenantCreated (true); - logger.debug ("Tenant {} successfully created with ID {}", tenantName, newTenantId); + tenantRollback.setTenantId(newTenantId); + tenantRollback.setTenantCreated(true); + logger.debug("Tenant {} successfully created with ID {}", tenantName, newTenantId); } else { if (failIfExists != null && failIfExists) { logger.error("{} {} CreateTenant: Tenant {} already exists in {} ", MessageEnum.RA_TENANT_ALREADY_EXIST, - ErrorCode.DataError.getValue(), tenantName, cloudSiteId); - throw new TenantAlreadyExists (tenantName, cloudSiteId, newTenant.getTenantId ()); + ErrorCode.DataError.getValue(), tenantName, cloudSiteId); + throw new TenantAlreadyExists(tenantName, cloudSiteId, newTenant.getTenantId()); } - newTenantId = newTenant.getTenantId (); - tenantRollback.setTenantCreated (false); + newTenantId = newTenant.getTenantId(); + tenantRollback.setTenantCreated(false); logger.debug("Tenant {} already exists with ID {}", tenantName, newTenantId); } @@ -145,69 +142,63 @@ public class MsoTenantAdapterImpl implements MsoTenantAdapter { } @Override - public void queryTenant (String cloudSiteId, - String tenantNameOrId, - MsoRequest msoRequest, - Holder <String> tenantId, - Holder <String> tenantName, - Holder <Map <String, String>> metadata) throws TenantException { + public void queryTenant(String cloudSiteId, String tenantNameOrId, MsoRequest msoRequest, Holder<String> tenantId, + Holder<String> tenantName, Holder<Map<String, String>> metadata) throws TenantException { - logger.debug ("Querying Tenant {} in {}", tenantNameOrId, cloudSiteId); + logger.debug("Querying Tenant {} in {}", tenantNameOrId, cloudSiteId); MsoTenantUtils tUtils; - try { - tUtils = tFactory.getTenantUtils (cloudSiteId); - } catch (MsoCloudSiteNotFound me) { - logger.error("{} {} no implementation found for {}: ", MessageEnum.RA_CREATE_TENANT_ERR, - ErrorCode.DataError.getValue(), cloudSiteId, me); - throw new TenantException (me); - } - + try { + tUtils = tFactory.getTenantUtils(cloudSiteId); + } catch (MsoCloudSiteNotFound me) { + logger.error("{} {} no implementation found for {}: ", MessageEnum.RA_CREATE_TENANT_ERR, + ErrorCode.DataError.getValue(), cloudSiteId, me); + throw new TenantException(me); + } + MsoTenant qTenant = null; try { - qTenant = tUtils.queryTenant (tenantNameOrId, cloudSiteId); + qTenant = tUtils.queryTenant(tenantNameOrId, cloudSiteId); if (qTenant == null) { // Not found by ID, Try by name. - qTenant = tUtils.queryTenantByName (tenantNameOrId, cloudSiteId); + qTenant = tUtils.queryTenantByName(tenantNameOrId, cloudSiteId); } if (qTenant == null) { - logger.debug ("QueryTenant: Tenant {} not found", tenantNameOrId); + logger.debug("QueryTenant: Tenant {} not found", tenantNameOrId); tenantId.value = null; tenantName.value = null; metadata.value = null; } else { logger.debug("QueryTenant: Tenant {} found with ID {}", tenantNameOrId, qTenant.getTenantId()); - tenantId.value = qTenant.getTenantId (); - tenantName.value = qTenant.getTenantName (); - metadata.value = qTenant.getMetadata (); + tenantId.value = qTenant.getTenantId(); + tenantName.value = qTenant.getTenantName(); + metadata.value = qTenant.getMetadata(); } } catch (MsoException me) { logger.error("Exception in queryTenant for {}: ", MessageEnum.RA_GENERAL_EXCEPTION, - ErrorCode.DataError.getValue(), tenantNameOrId, me); - throw new TenantException (me); + ErrorCode.DataError.getValue(), tenantNameOrId, me); + throw new TenantException(me); } return; } @Override - public void deleteTenant (String cloudSiteId, - String tenantId, - MsoRequest msoRequest, - Holder <Boolean> tenantDeleted) throws TenantException { + public void deleteTenant(String cloudSiteId, String tenantId, MsoRequest msoRequest, Holder<Boolean> tenantDeleted) + throws TenantException { - logger.debug ("Deleting Tenant {} in {}", tenantId, cloudSiteId); + logger.debug("Deleting Tenant {} in {}", tenantId, cloudSiteId); // Delete the Tenant. try { - - MsoTenantUtils tUtils = tFactory.getTenantUtils (cloudSiteId); - boolean deleted = tUtils.deleteTenant (tenantId, cloudSiteId); + + MsoTenantUtils tUtils = tFactory.getTenantUtils(cloudSiteId); + boolean deleted = tUtils.deleteTenant(tenantId, cloudSiteId); tenantDeleted.value = deleted; } catch (MsoException me) { logger.error("{} {} Exception - DeleteTenant {}: ", MessageEnum.RA_DELETE_TEMAMT_ERR, - ErrorCode.DataError.getValue(), tenantId, me); - throw new TenantException (me); + ErrorCode.DataError.getValue(), tenantId, me); + throw new TenantException(me); } // On success, nothing is returned. @@ -215,40 +206,39 @@ public class MsoTenantAdapterImpl implements MsoTenantAdapter { } /** - * This web service endpoint will rollback a previous Create VNF operation. - * A rollback object is returned to the client in a successful creation - * response. The client can pass that object as-is back to the rollbackVnf - * operation to undo the creation. + * This web service endpoint will rollback a previous Create VNF operation. A rollback object is returned to the + * client in a successful creation response. The client can pass that object as-is back to the rollbackVnf operation + * to undo the creation. * - * The rollback includes removing the VNF and deleting the tenant if the - * tenant did not exist prior to the VNF creation. + * The rollback includes removing the VNF and deleting the tenant if the tenant did not exist prior to the VNF + * creation. */ @Override - public void rollbackTenant (TenantRollback rollback) throws TenantException { + public void rollbackTenant(TenantRollback rollback) throws TenantException { // rollback may be null (e.g. if stack already existed when Create was called) if (rollback == null) { logger.warn("{} {} rollbackTenant, rollback is null", MessageEnum.RA_ROLLBACK_NULL, - ErrorCode.DataError.getValue()); + ErrorCode.DataError.getValue()); return; } // Get the elements of the VnfRollback object for easier access - String cloudSiteId = rollback.getCloudId (); - String tenantId = rollback.getTenantId (); + String cloudSiteId = rollback.getCloudId(); + String tenantId = rollback.getTenantId(); logger.debug("Rolling Back Tenant {} in {}", rollback.getTenantId(), cloudSiteId); - if (rollback.getTenantCreated ()) { + if (rollback.getTenantCreated()) { try { - - MsoTenantUtils tUtils = tFactory.getTenantUtils (cloudSiteId); - tUtils.deleteTenant (tenantId, cloudSiteId); + + MsoTenantUtils tUtils = tFactory.getTenantUtils(cloudSiteId); + tUtils.deleteTenant(tenantId, cloudSiteId); } catch (MsoException me) { - me.addContext (ROLLBACK_TENANT); + me.addContext(ROLLBACK_TENANT); // Failed to delete the tenant. logger.error("{} {} Exception - rollbackTenant {}: ", MessageEnum.RA_ROLLBACK_TENANT_ERR, - ErrorCode.DataError.getValue(), tenantId, me); - throw new TenantException (me); + ErrorCode.DataError.getValue(), tenantId, me); + throw new TenantException(me); } } return; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/TenantAdapterRest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/TenantAdapterRest.java index 11051df34e..6a38cc60e6 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/TenantAdapterRest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/TenantAdapterRest.java @@ -65,8 +65,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** - * This class services calls to the REST interface for Tenants (http://host:port/vnfs/rest/v1/tenants) - * Both XML and JSON can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default. + * This class services calls to the REST interface for Tenants (http://host:port/vnfs/rest/v1/tenants) Both XML and JSON + * can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default. */ @Path("/v1/tenants") @Api(value = "/v1/tenants", description = "root of tenant adapters restful web service") @@ -74,265 +74,176 @@ import org.springframework.stereotype.Component; public class TenantAdapterRest { private static Logger logger = LoggerFactory.getLogger(TenantAdapterRest.class); - private static final String EXCEPTION= "Exception :"; - //RAA? No logging in wrappers - @Autowired - private MsoTenantAdapterImpl tenantImpl; - - - - /* - URL: - EP: http://host:8080/tenants/rest - Resource: v1/tenants - REQ - metadata? - { - "cloudSiteId": "DAN", - "tenantName": "RAA_1", - "failIfExists": true, - "msoRequest": { - "requestId": "ra1", - "serviceInstanceId": "sa1" - }} - RESP- - { - "cloudSiteId": "DAN", - "tenantId": "128e10b9996d43a7874f19bbc4eb6749", - "tenantCreated": true, - "tenantRollback": { - "tenantId": "128e10b9996d43a7874f19bbc4eb6749", - "cloudId": "DAN", // RAA? cloudId instead of cloudSiteId - "tenantCreated": true, - "msoRequest": { - "requestId": "ra1", - "serviceInstanceId": "sa1" - } - } - } - */ - @POST - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "CreateTenant", - response = Response.class, - notes = "Creates a new tenant, CreateTenantRequest data is required") - @ApiResponses({ - @ApiResponse(code = 200, message = "tenant has been successfully created"), - @ApiResponse(code = 500, message = "create tenant failed") }) - public Response createTenant( - @ApiParam(value = "details of tenant being created", required = true) - CreateTenantRequest req) { - logger.debug("createTenant enter: {}", req.toJsonString()); - - String newTenantId = null; - TenantRollback tenantRollback = new TenantRollback (); - - try { - Holder<String> htenant = new Holder<>(); - Holder<TenantRollback> hrollback = new Holder<>(); - MsoTenantAdapter impl = tenantImpl; - impl.createTenant( - req.getCloudSiteId(), - req.getTenantName(), - req.getMetadata(), - req.getFailIfExists(), - req.getBackout(), - req.getMsoRequest(), - htenant, - hrollback); - newTenantId = htenant.value; - tenantRollback = hrollback.value; - - } - catch (TenantAlreadyExists tae) { - logger.debug(EXCEPTION, tae); - CreateTenantError exc = new CreateTenantError(tae.getMessage(), tae.getFaultInfo().getCategory(), Boolean.TRUE); - return Response.status(HttpServletResponse.SC_NOT_IMPLEMENTED).entity(exc).build(); - } - catch (TenantException te) { - logger.debug(EXCEPTION, te); - CreateTenantError exc = new CreateTenantError(te.getFaultInfo().getMessage(), te.getFaultInfo().getCategory(), Boolean.TRUE); - return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); - } - catch (Exception e) { - logger.debug(EXCEPTION, e); - CreateTenantError exc = new CreateTenantError(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE); - return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); - } - - CreateTenantResponse resp = new CreateTenantResponse (req.getCloudSiteId(), newTenantId, tenantRollback.getTenantCreated(), tenantRollback); - return Response.status(HttpServletResponse.SC_OK).entity(resp).build(); - } - - /* - URL: - http://host:8080/tenants/rest - Resource: v1/tenant/tennatId - REQ: - {"cloudSiteId": "DAN", - "tenantId": "ca84cd3d3df44272845da554656b3ace", - "msoRequest": { - "requestId": "ra1", - "serviceInstanceId": "sa1" - } - } - RESP: - {"tenantDeleted": true} - */ - @DELETE - @Path("{tenantId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "DeleteTenant", - response = Response.class, - notes = "Delete an existing tenant") - @ApiResponses({ - @ApiResponse(code = 200, message = "tenant has been successfully deleted"), - @ApiResponse(code = 500, message = "delete tenant failed") }) - public Response deleteTenant( - @ApiParam(value = "tenantId of tenant being deleted", required = true) - @PathParam("tenantId") String tenantId, - @ApiParam(value = "DeleteTenantRequest object containing additional information of tenant being deleted", required = false) - DeleteTenantRequest req) - { - boolean tenantDeleted = false; - - try { - Holder<Boolean> deleted = new Holder<>(); - MsoTenantAdapter impl = tenantImpl; - impl.deleteTenant( - req.getCloudSiteId(), - req.getTenantId(), - req.getMsoRequest(), - deleted); - tenantDeleted = deleted.value; - } - catch (TenantException te) { - logger.debug(EXCEPTION, te); - DeleteTenantError exc = new DeleteTenantError(te.getFaultInfo().getMessage(), te.getFaultInfo().getCategory(), Boolean.TRUE); - return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); - } - catch (Exception e) { - logger.debug(EXCEPTION, e); - DeleteTenantError exc = new DeleteTenantError(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE); - return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); - } - DeleteTenantResponse resp = new DeleteTenantResponse(); - resp.setTenantDeleted(tenantDeleted); - return Response.status(HttpServletResponse.SC_OK).entity(resp).build(); - } - - /* - URL - EP://http://host:8080/tenants/rest - Resource: /v1/tenants - Params:?tenantNameOrId=RAA_1&cloudSiteId=DAN - RESP - { - "tenantId": "214b428a1f554c02935e66330f6a5409", - "tenantName": "RAA_1", - "metadata": {} - } - */ - @GET - @Path("{tenantId}") - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "QueryTenant", - response = Response.class, - notes = "Query an existing tenant") - @ApiResponses({ - @ApiResponse(code = 200, message = "tenant has been successfully queried"), - @ApiResponse(code = 500, message = "query tenant failed") }) - public Response queryTenant( - @ApiParam(value = "tenantId", required = true) - @PathParam("tenantId") String tenantId, -// @QueryParam("tenantNameOrId") String tenantNameOrId, //RAA? diff from doc - @ApiParam(value = "cloudSiteId", required = true) - @QueryParam("cloudSiteId") String cloudSiteId, - @ApiParam(value = "msoRequest.requestId", required = true) - @QueryParam("msoRequest.requestId") String requestId, - @ApiParam(value = "msoRequest.serviceInstanceId", required = true) - @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId) - { - MsoTenant tenant = null; - try { - Holder<String> htenant = new Holder<>(); - Holder<String> tenantName = new Holder<>(); - Holder<Map<String,String>> metadata = new Holder<>(); - MsoTenantAdapter impl = tenantImpl; - impl.queryTenant( - cloudSiteId, - tenantId, - null, - htenant, - tenantName, - metadata - ); - tenant = new MsoTenant(htenant.value, tenantName.value, metadata.value); - - } - catch (TenantException te) { - logger.debug(EXCEPTION, te); - QueryTenantError exc = new QueryTenantError(te.getFaultInfo().getMessage(), te.getFaultInfo().getCategory()); - return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); - } - catch (Exception e) { - logger.debug(EXCEPTION, e); - QueryTenantError exc = new QueryTenantError(e.getMessage(), MsoExceptionCategory.INTERNAL); - return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); - } - QueryTenantResponse resp = new QueryTenantResponse(tenant.getTenantId(), tenant.getTenantName(), tenant.getMetadata()); - return Response.status(HttpServletResponse.SC_OK).entity(resp).build(); - } - - /* - URL - EP: //http://host:8080/tenants/rest - Resource: /v1/tenants/rollback - REQ - {"cloudSiteId": "DAN", - "tenantId": "f58abb05041d4ff384d4d22d1ccd2a6c", - "msoRequest": { - "requestId": "ra1", - "serviceInstanceId": "sa1" - } - } - RESP: - {"tenantDeleted": true} - */ - @DELETE - @Path("") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "RollbackTenant", - response = Response.class, - notes = "Rollback an existing tenant") - @ApiResponses({ - @ApiResponse(code = 200, message = "tenant has been successfully rolledback"), - @ApiResponse(code = 500, message = "rollback tenant failed") }) - public Response rollbackTenant( - @ApiParam(value = "rollback, command action", required = true) - @QueryParam("rollback") String action, - @ApiParam(value = "RollbackTenantRequest", required = true) - RollbackTenantRequest req) - { - try { - MsoTenantAdapter impl = tenantImpl; - impl.rollbackTenant(req.getTenantRollback()); - } - catch (TenantException te) { - logger.debug(EXCEPTION, te); - RollbackTenantError exc = new RollbackTenantError(te.getFaultInfo().getMessage(), te.getFaultInfo().getCategory(), Boolean.TRUE); - return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); - } - catch (Exception e) { - logger.debug(EXCEPTION, e); - RollbackTenantError exc = new RollbackTenantError(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE); - return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); - } - - RollbackTenantResponse resp = new RollbackTenantResponse (); - resp.setTenantRolledback(req != null); - return Response.status(HttpServletResponse.SC_OK).entity(resp).build(); - } + private static final String EXCEPTION = "Exception :"; + // RAA? No logging in wrappers + @Autowired + private MsoTenantAdapterImpl tenantImpl; + + + + /* + * URL: EP: http://host:8080/tenants/rest Resource: v1/tenants REQ - metadata? { "cloudSiteId": "DAN", "tenantName": + * "RAA_1", "failIfExists": true, "msoRequest": { "requestId": "ra1", "serviceInstanceId": "sa1" }} RESP- { + * "cloudSiteId": "DAN", "tenantId": "128e10b9996d43a7874f19bbc4eb6749", "tenantCreated": true, "tenantRollback": { + * "tenantId": "128e10b9996d43a7874f19bbc4eb6749", "cloudId": "DAN", // RAA? cloudId instead of cloudSiteId + * "tenantCreated": true, "msoRequest": { "requestId": "ra1", "serviceInstanceId": "sa1" } } } + */ + @POST + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "CreateTenant", response = Response.class, + notes = "Creates a new tenant, CreateTenantRequest data is required") + @ApiResponses({@ApiResponse(code = 200, message = "tenant has been successfully created"), + @ApiResponse(code = 500, message = "create tenant failed")}) + public Response createTenant( + @ApiParam(value = "details of tenant being created", required = true) CreateTenantRequest req) { + logger.debug("createTenant enter: {}", req.toJsonString()); + + String newTenantId = null; + TenantRollback tenantRollback = new TenantRollback(); + + try { + Holder<String> htenant = new Holder<>(); + Holder<TenantRollback> hrollback = new Holder<>(); + MsoTenantAdapter impl = tenantImpl; + impl.createTenant(req.getCloudSiteId(), req.getTenantName(), req.getMetadata(), req.getFailIfExists(), + req.getBackout(), req.getMsoRequest(), htenant, hrollback); + newTenantId = htenant.value; + tenantRollback = hrollback.value; + + } catch (TenantAlreadyExists tae) { + logger.debug(EXCEPTION, tae); + CreateTenantError exc = + new CreateTenantError(tae.getMessage(), tae.getFaultInfo().getCategory(), Boolean.TRUE); + return Response.status(HttpServletResponse.SC_NOT_IMPLEMENTED).entity(exc).build(); + } catch (TenantException te) { + logger.debug(EXCEPTION, te); + CreateTenantError exc = new CreateTenantError(te.getFaultInfo().getMessage(), + te.getFaultInfo().getCategory(), Boolean.TRUE); + return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); + } catch (Exception e) { + logger.debug(EXCEPTION, e); + CreateTenantError exc = new CreateTenantError(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE); + return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); + } + + CreateTenantResponse resp = new CreateTenantResponse(req.getCloudSiteId(), newTenantId, + tenantRollback.getTenantCreated(), tenantRollback); + return Response.status(HttpServletResponse.SC_OK).entity(resp).build(); + } + + /* + * URL: http://host:8080/tenants/rest Resource: v1/tenant/tennatId REQ: {"cloudSiteId": "DAN", "tenantId": + * "ca84cd3d3df44272845da554656b3ace", "msoRequest": { "requestId": "ra1", "serviceInstanceId": "sa1" } } RESP: + * {"tenantDeleted": true} + */ + @DELETE + @Path("{tenantId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "DeleteTenant", response = Response.class, notes = "Delete an existing tenant") + @ApiResponses({@ApiResponse(code = 200, message = "tenant has been successfully deleted"), + @ApiResponse(code = 500, message = "delete tenant failed")}) + public Response deleteTenant( + @ApiParam(value = "tenantId of tenant being deleted", + required = true) @PathParam("tenantId") String tenantId, + @ApiParam(value = "DeleteTenantRequest object containing additional information of tenant being deleted", + required = false) DeleteTenantRequest req) { + boolean tenantDeleted = false; + + try { + Holder<Boolean> deleted = new Holder<>(); + MsoTenantAdapter impl = tenantImpl; + impl.deleteTenant(req.getCloudSiteId(), req.getTenantId(), req.getMsoRequest(), deleted); + tenantDeleted = deleted.value; + } catch (TenantException te) { + logger.debug(EXCEPTION, te); + DeleteTenantError exc = new DeleteTenantError(te.getFaultInfo().getMessage(), + te.getFaultInfo().getCategory(), Boolean.TRUE); + return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); + } catch (Exception e) { + logger.debug(EXCEPTION, e); + DeleteTenantError exc = new DeleteTenantError(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE); + return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); + } + DeleteTenantResponse resp = new DeleteTenantResponse(); + resp.setTenantDeleted(tenantDeleted); + return Response.status(HttpServletResponse.SC_OK).entity(resp).build(); + } + + /* + * URL EP://http://host:8080/tenants/rest Resource: /v1/tenants Params:?tenantNameOrId=RAA_1&cloudSiteId=DAN RESP { + * "tenantId": "214b428a1f554c02935e66330f6a5409", "tenantName": "RAA_1", "metadata": {} } + */ + @GET + @Path("{tenantId}") + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "QueryTenant", response = Response.class, notes = "Query an existing tenant") + @ApiResponses({@ApiResponse(code = 200, message = "tenant has been successfully queried"), + @ApiResponse(code = 500, message = "query tenant failed")}) + public Response queryTenant(@ApiParam(value = "tenantId", required = true) @PathParam("tenantId") String tenantId, + // @QueryParam("tenantNameOrId") String tenantNameOrId, //RAA? diff from doc + @ApiParam(value = "cloudSiteId", required = true) @QueryParam("cloudSiteId") String cloudSiteId, + @ApiParam(value = "msoRequest.requestId", + required = true) @QueryParam("msoRequest.requestId") String requestId, + @ApiParam(value = "msoRequest.serviceInstanceId", + required = true) @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId) { + MsoTenant tenant = null; + try { + Holder<String> htenant = new Holder<>(); + Holder<String> tenantName = new Holder<>(); + Holder<Map<String, String>> metadata = new Holder<>(); + MsoTenantAdapter impl = tenantImpl; + impl.queryTenant(cloudSiteId, tenantId, null, htenant, tenantName, metadata); + tenant = new MsoTenant(htenant.value, tenantName.value, metadata.value); + + } catch (TenantException te) { + logger.debug(EXCEPTION, te); + QueryTenantError exc = + new QueryTenantError(te.getFaultInfo().getMessage(), te.getFaultInfo().getCategory()); + return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); + } catch (Exception e) { + logger.debug(EXCEPTION, e); + QueryTenantError exc = new QueryTenantError(e.getMessage(), MsoExceptionCategory.INTERNAL); + return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); + } + QueryTenantResponse resp = + new QueryTenantResponse(tenant.getTenantId(), tenant.getTenantName(), tenant.getMetadata()); + return Response.status(HttpServletResponse.SC_OK).entity(resp).build(); + } + + /* + * URL EP: //http://host:8080/tenants/rest Resource: /v1/tenants/rollback REQ {"cloudSiteId": "DAN", "tenantId": + * "f58abb05041d4ff384d4d22d1ccd2a6c", "msoRequest": { "requestId": "ra1", "serviceInstanceId": "sa1" } } RESP: + * {"tenantDeleted": true} + */ + @DELETE + @Path("") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "RollbackTenant", response = Response.class, notes = "Rollback an existing tenant") + @ApiResponses({@ApiResponse(code = 200, message = "tenant has been successfully rolledback"), + @ApiResponse(code = 500, message = "rollback tenant failed")}) + public Response rollbackTenant( + @ApiParam(value = "rollback, command action", required = true) @QueryParam("rollback") String action, + @ApiParam(value = "RollbackTenantRequest", required = true) RollbackTenantRequest req) { + try { + MsoTenantAdapter impl = tenantImpl; + impl.rollbackTenant(req.getTenantRollback()); + } catch (TenantException te) { + logger.debug(EXCEPTION, te); + RollbackTenantError exc = new RollbackTenantError(te.getFaultInfo().getMessage(), + te.getFaultInfo().getCategory(), Boolean.TRUE); + return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); + } catch (Exception e) { + logger.debug(EXCEPTION, e); + RollbackTenantError exc = + new RollbackTenantError(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE); + return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(exc).build(); + } + + RollbackTenantResponse resp = new RollbackTenantResponse(); + resp.setTenantRolledback(req != null); + return Response.status(HttpServletResponse.SC_OK).entity(resp).build(); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantAlreadyExists.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantAlreadyExists.java index 5b8e7c7294..8955eb50c6 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantAlreadyExists.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantAlreadyExists.java @@ -23,23 +23,23 @@ package org.onap.so.adapters.tenant.exceptions; import javax.xml.ws.WebFault; - import org.onap.so.openstack.exceptions.MsoExceptionCategory; /** - * This class reports an exception when trying to create a VNF when another - * VNF of the same name already exists in the target cloud/tenant. Note that - * the createVnf method suppresses this exception by default. + * This class reports an exception when trying to create a VNF when another VNF of the same name already exists in the + * target cloud/tenant. Note that the createVnf method suppresses this exception by default. * * */ -@WebFault (name="TenantAlreadyExists", faultBean="org.onap.so.adapters.tenant.exceptions.TenantExceptionBean", targetNamespace="http://org.onap.so/tenant") +@WebFault(name = "TenantAlreadyExists", faultBean = "org.onap.so.adapters.tenant.exceptions.TenantExceptionBean", + targetNamespace = "http://org.onap.so/tenant") public class TenantAlreadyExists extends TenantException { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - public TenantAlreadyExists (String name, String cloudId, String tenantId) { - super("Tenant " + name + " already exists in " + cloudId + " with ID " + tenantId, MsoExceptionCategory.USERDATA); - } + public TenantAlreadyExists(String name, String cloudId, String tenantId) { + super("Tenant " + name + " already exists in " + cloudId + " with ID " + tenantId, + MsoExceptionCategory.USERDATA); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantException.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantException.java index b8074ef7fc..998da98c8d 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantException.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantException.java @@ -23,53 +23,53 @@ package org.onap.so.adapters.tenant.exceptions; import javax.xml.ws.WebFault; - import org.onap.so.openstack.exceptions.MsoException; import org.onap.so.openstack.exceptions.MsoExceptionCategory; /** - * This class simply extends Exception (without addition additional functionality) - * to provide an identifier for Tenant related exceptions on create, delete, query. + * This class simply extends Exception (without addition additional functionality) to provide an identifier for Tenant + * related exceptions on create, delete, query. * * */ -@WebFault (name="TenantException", faultBean="org.onap.so.adapters.tenant.exceptions.TenantExceptionBean", targetNamespace="http://org.onap.so/tenant") +@WebFault(name = "TenantException", faultBean = "org.onap.so.adapters.tenant.exceptions.TenantExceptionBean", + targetNamespace = "http://org.onap.so/tenant") public class TenantException extends Exception { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + private TenantExceptionBean faultInfo; + + public TenantException(String msg) { + super(msg); + faultInfo = new TenantExceptionBean(msg); + } + + public TenantException(String msg, Throwable e) { + super(msg, e); + faultInfo = new TenantExceptionBean(msg); + } + + public TenantException(String msg, MsoExceptionCategory category) { + super(msg); + faultInfo = new TenantExceptionBean(msg, category); + } - private TenantExceptionBean faultInfo; - - public TenantException (String msg) { - super(msg); - faultInfo = new TenantExceptionBean (msg); - } - - public TenantException (String msg, Throwable e) { - super (msg, e); - faultInfo = new TenantExceptionBean (msg); - } + public TenantException(String msg, MsoExceptionCategory category, Throwable e) { + super(msg, e); + faultInfo = new TenantExceptionBean(msg, category); + } - public TenantException (String msg, MsoExceptionCategory category) { - super(msg); - faultInfo = new TenantExceptionBean (msg, category); - } - - public TenantException (String msg, MsoExceptionCategory category, Throwable e) { - super (msg, e); - faultInfo = new TenantExceptionBean (msg, category); - } - - public TenantException (MsoException e) { - super (e); - faultInfo = new TenantExceptionBean (e.getContextMessage(), e.getCategory()); - } + public TenantException(MsoException e) { + super(e); + faultInfo = new TenantExceptionBean(e.getContextMessage(), e.getCategory()); + } - public TenantExceptionBean getFaultInfo() { - return faultInfo; - } + public TenantExceptionBean getFaultInfo() { + return faultInfo; + } - public void setFaultInfo(TenantExceptionBean faultInfo) { - this.faultInfo = faultInfo; - } + public void setFaultInfo(TenantExceptionBean faultInfo) { + this.faultInfo = faultInfo; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionBean.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionBean.java index 1dada60e93..2d9260615a 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionBean.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionBean.java @@ -22,7 +22,6 @@ package org.onap.so.adapters.tenant.exceptions; import java.io.Serializable; - import org.onap.so.openstack.exceptions.MsoExceptionCategory; /** @@ -33,32 +32,32 @@ public class TenantExceptionBean implements Serializable { private static final long serialVersionUID = -9062290006520066109L; private String message; - private MsoExceptionCategory category; + private MsoExceptionCategory category; - public TenantExceptionBean () {} + public TenantExceptionBean() {} - public TenantExceptionBean (String message) { - this.message = message; - } + public TenantExceptionBean(String message) { + this.message = message; + } - public TenantExceptionBean (String message, MsoExceptionCategory category) { - this.message = message; - this.category = category; - } + public TenantExceptionBean(String message, MsoExceptionCategory category) { + this.message = message; + this.category = category; + } - public String getMessage() { - return message; - } + public String getMessage() { + return message; + } - public void setMessage(String message) { - this.message = message; - } + public void setMessage(String message) { + this.message = message; + } - public MsoExceptionCategory getCategory () { - return category; - } + public MsoExceptionCategory getCategory() { + return category; + } - public void setCategory (MsoExceptionCategory category) { - this.category = category; - } + public void setCategory(MsoExceptionCategory category) { + this.category = category; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/GenericValetResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/GenericValetResponse.java index 30062a0144..6946fb1f90 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/GenericValetResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/GenericValetResponse.java @@ -23,50 +23,57 @@ package org.onap.so.adapters.valet; import org.apache.commons.lang3.builder.ToStringBuilder; /* - * The purpose of this class is to encapsulate the possible responses from Valet in to one generic class - * that the vnf adapter can more easily utilize. This will ensure we get an object back. Any status - * code other than 200 will be treated as a failure. We may still get a 200 back - but the - * ValetStatus.status is "failed" - which will also be treated as a failure. The T class is - * expected to be one of the Valet*Response pojos. + * The purpose of this class is to encapsulate the possible responses from Valet in to one generic class that the vnf + * adapter can more easily utilize. This will ensure we get an object back. Any status code other than 200 will be + * treated as a failure. We may still get a 200 back - but the ValetStatus.status is "failed" - which will also be + * treated as a failure. The T class is expected to be one of the Valet*Response pojos. */ public class GenericValetResponse<T> { - private int statusCode; - private String errorMessage; - private T returnObject; - + private int statusCode; + private String errorMessage; + private T returnObject; + + + public GenericValetResponse(int statusCode, String errorMessage, T obj) { + super(); + this.statusCode = statusCode; + this.errorMessage = errorMessage; + this.returnObject = obj; + } + + public GenericValetResponse() { + this(-1, "not set", null); + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("statusCode", statusCode).append("errorMessage", errorMessage) + .append("returnObject", returnObject).toString(); + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public String getErrorMessage() { + return this.errorMessage; + } + + public void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + + public int getStatusCode() { + return this.statusCode; + } + + public void setReturnObject(T obj) { + this.returnObject = obj; + } + + public T getReturnObject() { + return this.returnObject; + } - public GenericValetResponse(int statusCode, String errorMessage, T obj) { - super(); - this.statusCode = statusCode; - this.errorMessage = errorMessage; - this.returnObject = obj; - } - public GenericValetResponse() { - this(-1, "not set", null); - } - @Override - public String toString() { - return new ToStringBuilder(this).append("statusCode", statusCode).append("errorMessage", errorMessage) - .append("returnObject", returnObject).toString(); - } - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - public String getErrorMessage() { - return this.errorMessage; - } - public void setStatusCode(int statusCode) { - this.statusCode = statusCode; - } - public int getStatusCode() { - return this.statusCode; - } - public void setReturnObject(T obj) { - this.returnObject = obj; - } - public T getReturnObject() { - return this.returnObject; - } - } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/ValetClient.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/ValetClient.java index 5645759b02..34177ff5a3 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/ValetClient.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/ValetClient.java @@ -11,9 +11,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -58,275 +58,292 @@ public class ValetClient { private static Logger logger = LoggerFactory.getLogger(ValetClient.class); - @Autowired - private Environment environment; - - private static final String VALET_BASE_URL = "org.onap.so.adapters.valet.base_url"; - private static final String VALET_BASE_PATH = "org.onap.so.adapters.valet.base_path"; - private static final String VALET_AUTH = "org.onap.so.adapters.valet.basic_auth"; - private static final String REQ_ID_HEADER_NAME = "X-RequestID"; - protected static final String NO_STATUS_RETURNED = "no status returned from Valet"; - - private static final String DEFAULT_BASE_URL = "http://localhost:8080/"; - private static final String DEFAULT_BASE_PATH = "api/valet/placement/v1"; - private static final String DEFAULT_AUTH_STRING = ""; - private static final String REQUEST_ID="requestId"; - private static final String HEADERS=", headers="; - private static final String BODY=", body="; - @Autowired - private ObjectMapper mapper; - - protected String baseUrl; - protected String basePath; - protected String authString; - - /* - * Setup the properties needed from properties file. Each will fall to a default - */ - @PostConstruct - private void setupParams() { - try { + @Autowired + private Environment environment; + + private static final String VALET_BASE_URL = "org.onap.so.adapters.valet.base_url"; + private static final String VALET_BASE_PATH = "org.onap.so.adapters.valet.base_path"; + private static final String VALET_AUTH = "org.onap.so.adapters.valet.basic_auth"; + private static final String REQ_ID_HEADER_NAME = "X-RequestID"; + protected static final String NO_STATUS_RETURNED = "no status returned from Valet"; + + private static final String DEFAULT_BASE_URL = "http://localhost:8080/"; + private static final String DEFAULT_BASE_PATH = "api/valet/placement/v1"; + private static final String DEFAULT_AUTH_STRING = ""; + private static final String REQUEST_ID = "requestId"; + private static final String HEADERS = ", headers="; + private static final String BODY = ", body="; + @Autowired + private ObjectMapper mapper; + + protected String baseUrl; + protected String basePath; + protected String authString; + + /* + * Setup the properties needed from properties file. Each will fall to a default + */ + @PostConstruct + private void setupParams() { + try { this.baseUrl = this.environment.getProperty(ValetClient.VALET_BASE_URL, ValetClient.DEFAULT_BASE_URL); this.basePath = this.environment.getProperty(ValetClient.VALET_BASE_PATH, ValetClient.DEFAULT_BASE_PATH); - this.authString = this.environment.getProperty(ValetClient.VALET_AUTH, ValetClient.DEFAULT_AUTH_STRING); - } catch (Exception e) { - logger.debug("Error retrieving valet properties. {}", e.getMessage()); + this.authString = this.environment.getProperty(ValetClient.VALET_AUTH, ValetClient.DEFAULT_AUTH_STRING); + } catch (Exception e) { + logger.debug("Error retrieving valet properties. {}", e.getMessage()); + } + } + + /* + * This method will be invoked to send a Create request to Valet. + */ + public GenericValetResponse<ValetCreateResponse> callValetCreateRequest(String requestId, String regionId, + String ownerId, String tenantId, String serviceInstanceId, String vnfId, String vnfName, String vfModuleId, + String vfModuleName, String keystoneUrl, HeatRequest heatRequest) throws Exception { + ResponseEntity<ValetCreateResponse> response = null; + GenericValetResponse<ValetCreateResponse> gvr = null; + + try { + UriBuilder builder = UriBuilder.fromPath(baseUrl).path(basePath).queryParam(REQUEST_ID, requestId); + URI uri = builder.build(); + + ValetCreateRequest vcr = this.createValetCreateRequest(regionId, ownerId, tenantId, serviceInstanceId, + vnfId, vnfName, vfModuleId, vfModuleName, keystoneUrl, heatRequest); + String body = mapper.writeValueAsString(vcr); + HttpHeaders headers = generateHeaders(requestId); + HttpEntity<String> entity = new HttpEntity<>(body, headers); + + response = getRestTemplate().exchange(uri, HttpMethod.POST, entity, ValetCreateResponse.class); + gvr = this.getGVRFromResponse(response); + } catch (Exception e) { + logger.error("An exception occurred in callValetCreateRequest", e); + throw e; + } + return gvr; + } + + private RestTemplate getRestTemplate() { + RestTemplate restTemplate = new RestTemplate(); + restTemplate + .setRequestFactory(new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory())); + return restTemplate; + } + + /* + * This method will be invoked to send an Update request to Valet. + */ + public GenericValetResponse<ValetUpdateResponse> callValetUpdateRequest(String requestId, String regionId, + String ownerId, String tenantId, String serviceInstanceId, String vnfId, String vnfName, String vfModuleId, + String vfModuleName, String keystoneUrl, HeatRequest heatRequest) throws Exception { + ResponseEntity<ValetUpdateResponse> response = null; + GenericValetResponse<ValetUpdateResponse> gvr = null; + + try { + UriBuilder builder = UriBuilder.fromPath(baseUrl).path(basePath).queryParam(REQUEST_ID, requestId); + URI uri = builder.build(); + + ValetUpdateRequest vur = this.createValetUpdateRequest(regionId, ownerId, tenantId, serviceInstanceId, + vnfId, vnfName, vfModuleId, vfModuleName, keystoneUrl, heatRequest); + String body = mapper.writeValueAsString(vur); + HttpHeaders headers = generateHeaders(requestId); + HttpEntity<String> entity = new HttpEntity<>(body, headers); + + + response = getRestTemplate().exchange(uri, HttpMethod.PUT, entity, ValetUpdateResponse.class); + gvr = this.getGVRFromResponse(response); + } catch (Exception e) { + logger.error("An exception occurred in callValetUpdateRequest", e); + throw e; + } + return gvr; + } + + /* + * This method will be invoked to send a Delete request to Valet. + */ + public GenericValetResponse<ValetDeleteResponse> callValetDeleteRequest(String requestId, String regionId, + String ownerId, String tenantId, String vfModuleId, String vfModuleName) throws Exception { + ResponseEntity<ValetDeleteResponse> response = null; + GenericValetResponse<ValetDeleteResponse> gvr = null; + + try { + UriBuilder builder = UriBuilder.fromPath(baseUrl).path(basePath).queryParam(REQUEST_ID, requestId); + URI uri = builder.build(); + + ValetDeleteRequest vdr = + this.createValetDeleteRequest(regionId, ownerId, tenantId, vfModuleId, vfModuleName); + + String body = mapper.writeValueAsString(vdr); + HttpHeaders headers = generateHeaders(requestId); + HttpEntity<String> entity = new HttpEntity<>(body, headers); + + + response = getRestTemplate().exchange(uri, HttpMethod.DELETE, entity, ValetDeleteResponse.class); + gvr = this.getGVRFromResponse(response); + } catch (Exception e) { + logger.error("An exception occurred in callValetDeleteRequest", e); + throw e; + } + return gvr; + } + + /* + * This method is called to invoke a Confirm request to Valet. + */ + public GenericValetResponse<ValetConfirmResponse> callValetConfirmRequest(String requestId, String stackId) + throws Exception { + ResponseEntity<ValetConfirmResponse> response = null; + GenericValetResponse<ValetConfirmResponse> gvr = null; + + try { + UriBuilder builder = UriBuilder.fromPath(this.baseUrl).path(this.basePath).path("{requestId}/confirm/"); + URI uri = builder.build(requestId); + + ValetConfirmRequest vcr = this.createValetConfirmRequest(stackId); + + String body = mapper.writeValueAsString(vcr); + HttpHeaders headers = generateHeaders(requestId); + HttpEntity<String> entity = new HttpEntity<>(body, headers); + logger.debug("valet confirm req: {} {} {} {} {}", uri, HEADERS, headers, BODY, body); + + response = getRestTemplate().exchange(uri, HttpMethod.PUT, entity, ValetConfirmResponse.class); + gvr = this.getGVRFromResponse(response); + } catch (Exception e) { + logger.error("An exception occurred in callValetConfirmRequest", e); + throw e; + } + return gvr; + } + + /* + * This method is called to invoke a Rollback request to Valet. + */ + public GenericValetResponse<ValetRollbackResponse> callValetRollbackRequest(String requestId, String stackId, + Boolean suppressRollback, String errorMessage) throws Exception { + ResponseEntity<ValetRollbackResponse> response = null; + GenericValetResponse<ValetRollbackResponse> gvr = null; + + try { + UriBuilder builder = UriBuilder.fromPath(this.baseUrl).path(this.basePath).path("{requestId}/rollback/"); + URI uri = builder.build(requestId); + + ValetRollbackRequest vrr = this.createValetRollbackRequest(stackId, suppressRollback, errorMessage); + + String body = mapper.writeValueAsString(vrr); + HttpHeaders headers = generateHeaders(requestId); + HttpEntity<String> entity = new HttpEntity<>(body, headers); + + + response = getRestTemplate().exchange(uri, HttpMethod.PUT, entity, ValetRollbackResponse.class); + gvr = this.getGVRFromResponse(response); + } catch (Exception e) { + logger.error("An exception occurred in callValetRollbackRequest", e); + throw e; + } + return gvr; + } + + /* + * This method is to construct the ValetCreateRequest pojo + */ + private ValetCreateRequest createValetCreateRequest(String regionId, String ownerId, String tenantId, + String serviceInstanceId, String vnfId, String vnfName, String vfModuleId, String vfModuleName, + String keystoneUrl, HeatRequest heatRequest) { + ValetCreateRequest vcr = new ValetCreateRequest(); + vcr.setHeatRequest(heatRequest); + vcr.setKeystoneUrl(keystoneUrl); + vcr.setRegionId(regionId); + vcr.setOwnerId(ownerId); + vcr.setServiceInstanceId(serviceInstanceId); + vcr.setTenantId(tenantId); + vcr.setVfModuleId(vfModuleId); + vcr.setVfModuleName(vfModuleName); + vcr.setVnfId(vnfId); + vcr.setVnfName(vnfName); + + return vcr; + } + + /* + * This method is to construct the ValetUpdateRequest pojo + */ + private ValetUpdateRequest createValetUpdateRequest(String regionId, String ownerId, String tenantId, + String serviceInstanceId, String vnfId, String vnfName, String vfModuleId, String vfModuleName, + String keystoneUrl, HeatRequest heatRequest) { + ValetUpdateRequest vur = new ValetUpdateRequest(); + vur.setHeatRequest(heatRequest); + vur.setKeystoneUrl(keystoneUrl); + vur.setRegionId(regionId == null ? "" : regionId); + vur.setOwnerId(ownerId == null ? "" : ownerId); + vur.setServiceInstanceId(serviceInstanceId == null ? "" : serviceInstanceId); + vur.setTenantId(tenantId == null ? "" : tenantId); + vur.setVfModuleId(vfModuleId == null ? "" : vfModuleId); + vur.setVfModuleName(vfModuleName == null ? "" : vfModuleName); + vur.setVnfId(vnfId == null ? "" : vnfId); + vur.setVnfName(vnfName == null ? "" : vnfName); + + return vur; + } + + /* + * This method is to construct the ValetDeleteRequest pojo + */ + private ValetDeleteRequest createValetDeleteRequest(String regionId, String ownerId, String tenantId, + String vfModuleId, String vfModuleName) { + ValetDeleteRequest vdr = new ValetDeleteRequest(); + vdr.setRegionId(regionId == null ? "" : regionId); + vdr.setOwnerId(ownerId == null ? "" : ownerId); + vdr.setTenantId(tenantId == null ? "" : tenantId); + vdr.setVfModuleId(vfModuleId == null ? "" : vfModuleId); + vdr.setVfModuleName(vfModuleName == null ? "" : vfModuleName); + + return vdr; + } + + /* + * This method is to construct the ValetDeleteRequest pojo + */ + private ValetConfirmRequest createValetConfirmRequest(String stackId) { + ValetConfirmRequest vcr = new ValetConfirmRequest(); + vcr.setStackId(stackId); + + return vcr; + } + + /* + * This method is to construct the ValetRollbackRequest pojo + */ + private ValetRollbackRequest createValetRollbackRequest(String stackId, Boolean suppressRollback, + String errorMessage) { + ValetRollbackRequest vrr = new ValetRollbackRequest(); + vrr.setStackId(stackId); + vrr.setSuppressRollback(suppressRollback); + vrr.setErrorMessage(errorMessage); + + return vrr; + } + + private HttpHeaders generateHeaders(String requestId) { + HttpHeaders headers = new HttpHeaders(); + headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); + if (!(this.authString == null || this.authString.isEmpty())) { + headers.add("Authorization", "Basic " + this.authString); + } + headers.add(ValetClient.REQ_ID_HEADER_NAME, requestId); + + return headers; + } + + private <T> GenericValetResponse<T> getGVRFromResponse(ResponseEntity<T> response) { + GenericValetResponse<T> gvr = null; + if (response != null) { + T responseObj = response.getBody(); + gvr = new GenericValetResponse<>(response.getStatusCodeValue(), ValetClient.NO_STATUS_RETURNED, + responseObj); + + } else { + gvr = new GenericValetResponse<>(-1, ValetClient.NO_STATUS_RETURNED, null); + } + return gvr; } - } - - /* - * This method will be invoked to send a Create request to Valet. - */ - public GenericValetResponse<ValetCreateResponse> callValetCreateRequest(String requestId, String regionId, String tenantId, String serviceInstanceId, - String vnfId, String vnfName, String vfModuleId, String vfModuleName, String keystoneUrl, HeatRequest heatRequest) throws Exception { - ResponseEntity<ValetCreateResponse> response = null; - GenericValetResponse<ValetCreateResponse> gvr = null; - - try { - UriBuilder builder = UriBuilder.fromPath(baseUrl).path(basePath).queryParam(REQUEST_ID, requestId); - URI uri = builder.build(); - - ValetCreateRequest vcr = this.createValetCreateRequest(regionId, tenantId, serviceInstanceId, vnfId, vnfName, vfModuleId, vfModuleName, keystoneUrl, heatRequest); - String body = mapper.writeValueAsString(vcr); - HttpHeaders headers = generateHeaders(requestId); - HttpEntity<String> entity = new HttpEntity<>(body, headers); - - response = getRestTemplate().exchange(uri, HttpMethod.POST, entity, ValetCreateResponse.class); - gvr = this.getGVRFromResponse(response); - } catch (Exception e) { - logger.error("An exception occurred in callValetCreateRequest", e); - throw e; - } - return gvr; - } - - private RestTemplate getRestTemplate(){ - RestTemplate restTemplate = new RestTemplate(); - restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory())); - return restTemplate; - } - - /* - * This method will be invoked to send an Update request to Valet. - */ - public GenericValetResponse<ValetUpdateResponse> callValetUpdateRequest(String requestId, String regionId, String tenantId, String serviceInstanceId, - String vnfId, String vnfName, String vfModuleId, String vfModuleName, String keystoneUrl, HeatRequest heatRequest) throws Exception { - ResponseEntity<ValetUpdateResponse> response = null; - GenericValetResponse<ValetUpdateResponse> gvr = null; - - try { - UriBuilder builder = UriBuilder.fromPath(baseUrl).path(basePath).queryParam(REQUEST_ID, requestId); - URI uri = builder.build(); - - ValetUpdateRequest vur = this.createValetUpdateRequest(regionId, tenantId, serviceInstanceId, vnfId, vnfName, vfModuleId, vfModuleName, keystoneUrl, heatRequest); - String body = mapper.writeValueAsString(vur); - HttpHeaders headers = generateHeaders(requestId); - HttpEntity<String> entity = new HttpEntity<>(body, headers); - - - response = getRestTemplate().exchange(uri, HttpMethod.PUT, entity, ValetUpdateResponse.class); - gvr = this.getGVRFromResponse(response); - } catch (Exception e) { - logger.error("An exception occurred in callValetUpdateRequest", e); - throw e; - } - return gvr; - } - - /* - * This method will be invoked to send a Delete request to Valet. - */ - public GenericValetResponse<ValetDeleteResponse> callValetDeleteRequest(String requestId, String regionId, String tenantId, String vfModuleId, String vfModuleName) throws Exception { - ResponseEntity<ValetDeleteResponse> response = null; - GenericValetResponse<ValetDeleteResponse> gvr = null; - - try { - UriBuilder builder = UriBuilder.fromPath(baseUrl).path(basePath).queryParam(REQUEST_ID, requestId); - URI uri = builder.build(); - - ValetDeleteRequest vdr = this.createValetDeleteRequest(regionId, tenantId, vfModuleId, vfModuleName); - - String body = mapper.writeValueAsString(vdr); - HttpHeaders headers = generateHeaders(requestId); - HttpEntity<String> entity = new HttpEntity<>(body, headers); - - - response = getRestTemplate().exchange(uri, HttpMethod.DELETE, entity, ValetDeleteResponse.class); - gvr = this.getGVRFromResponse(response); - } catch (Exception e) { - logger.error("An exception occurred in callValetDeleteRequest", e); - throw e; - } - return gvr; - } - - /* - * This method is called to invoke a Confirm request to Valet. - */ - public GenericValetResponse<ValetConfirmResponse> callValetConfirmRequest(String requestId, String stackId) throws Exception { - ResponseEntity<ValetConfirmResponse> response = null; - GenericValetResponse<ValetConfirmResponse> gvr = null; - - try { - UriBuilder builder = UriBuilder.fromPath(this.baseUrl).path(this.basePath).path("{requestId}/confirm/"); - URI uri = builder.build(requestId); - - ValetConfirmRequest vcr = this.createValetConfirmRequest(stackId); - - String body = mapper.writeValueAsString(vcr); - HttpHeaders headers = generateHeaders(requestId); - HttpEntity<String> entity = new HttpEntity<>(body, headers); - logger.debug("valet confirm req: {} {} {} {} {}", uri, HEADERS, headers, BODY, body); - - response = getRestTemplate().exchange(uri, HttpMethod.PUT, entity, ValetConfirmResponse.class); - gvr = this.getGVRFromResponse(response); - } catch (Exception e) { - logger.error("An exception occurred in callValetConfirmRequest", e); - throw e; - } - return gvr; - } - - /* - * This method is called to invoke a Rollback request to Valet. - */ - public GenericValetResponse<ValetRollbackResponse> callValetRollbackRequest(String requestId, String stackId, Boolean suppressRollback, String errorMessage) throws Exception { - ResponseEntity<ValetRollbackResponse> response = null; - GenericValetResponse<ValetRollbackResponse> gvr = null; - - try { - UriBuilder builder = UriBuilder.fromPath(this.baseUrl).path(this.basePath).path("{requestId}/rollback/"); - URI uri = builder.build(requestId); - - ValetRollbackRequest vrr = this.createValetRollbackRequest(stackId, suppressRollback, errorMessage); - - String body = mapper.writeValueAsString(vrr); - HttpHeaders headers = generateHeaders(requestId); - HttpEntity<String> entity = new HttpEntity<>(body, headers); - - - response = getRestTemplate().exchange(uri, HttpMethod.PUT, entity, ValetRollbackResponse.class); - gvr = this.getGVRFromResponse(response); - } catch (Exception e) { - logger.error("An exception occurred in callValetRollbackRequest", e); - throw e; - } - return gvr; - } - - /* - * This method is to construct the ValetCreateRequest pojo - */ - private ValetCreateRequest createValetCreateRequest(String regionId, String tenantId, String serviceInstanceId, - String vnfId, String vnfName, String vfModuleId, String vfModuleName, String keystoneUrl, HeatRequest heatRequest) { - ValetCreateRequest vcr = new ValetCreateRequest(); - vcr.setHeatRequest(heatRequest); - vcr.setKeystoneUrl(keystoneUrl); - vcr.setRegionId(regionId); - vcr.setServiceInstanceId(serviceInstanceId); - vcr.setTenantId(tenantId); - vcr.setVfModuleId(vfModuleId); - vcr.setVfModuleName(vfModuleName); - vcr.setVnfId(vnfId); - vcr.setVnfName(vnfName); - - return vcr; - } - - /* - * This method is to construct the ValetUpdateRequest pojo - */ - private ValetUpdateRequest createValetUpdateRequest(String regionId, String tenantId, String serviceInstanceId, - String vnfId, String vnfName, String vfModuleId, String vfModuleName, String keystoneUrl, HeatRequest heatRequest) { - ValetUpdateRequest vur = new ValetUpdateRequest(); - vur.setHeatRequest(heatRequest); - vur.setKeystoneUrl(keystoneUrl); - vur.setRegionId(regionId == null ? "" : regionId); - vur.setServiceInstanceId(serviceInstanceId == null ? "" : serviceInstanceId); - vur.setTenantId(tenantId == null ? "" : tenantId); - vur.setVfModuleId(vfModuleId == null ? "" : vfModuleId); - vur.setVfModuleName(vfModuleName == null ? "" : vfModuleName); - vur.setVnfId(vnfId == null ? "" : vnfId); - vur.setVnfName(vnfName == null ? "" : vnfName); - - return vur; - } - - /* - * This method is to construct the ValetDeleteRequest pojo - */ - private ValetDeleteRequest createValetDeleteRequest(String regionId, String tenantId, String vfModuleId, String vfModuleName) { - ValetDeleteRequest vdr = new ValetDeleteRequest(); - vdr.setRegionId(regionId == null ? "" : regionId); - vdr.setTenantId(tenantId == null ? "" : tenantId); - vdr.setVfModuleId(vfModuleId == null ? "" : vfModuleId); - vdr.setVfModuleName(vfModuleName == null ? "" : vfModuleName); - - return vdr; - } - - /* - * This method is to construct the ValetDeleteRequest pojo - */ - private ValetConfirmRequest createValetConfirmRequest(String stackId) { - ValetConfirmRequest vcr = new ValetConfirmRequest(); - vcr.setStackId(stackId); - - return vcr; - } - - /* - * This method is to construct the ValetRollbackRequest pojo - */ - private ValetRollbackRequest createValetRollbackRequest(String stackId, Boolean suppressRollback, String errorMessage) { - ValetRollbackRequest vrr = new ValetRollbackRequest(); - vrr.setStackId(stackId); - vrr.setSuppressRollback(suppressRollback); - vrr.setErrorMessage(errorMessage); - - return vrr; - } - - private HttpHeaders generateHeaders(String requestId) { - HttpHeaders headers = new HttpHeaders(); - headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); - if (!(this.authString == null || this.authString.isEmpty())) { - headers.add("Authorization", "Basic " + this.authString); - } - headers.add(ValetClient.REQ_ID_HEADER_NAME, requestId); - - return headers; - } - - private <T> GenericValetResponse<T> getGVRFromResponse(ResponseEntity<T> response) { - GenericValetResponse<T> gvr = null; - if (response != null) { - T responseObj = response.getBody(); - gvr = new GenericValetResponse<>(response.getStatusCodeValue(), ValetClient.NO_STATUS_RETURNED, responseObj); - - } else { - gvr = new GenericValetResponse<>(-1, ValetClient.NO_STATUS_RETURNED, null); - } - return gvr; - } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/HeatRequest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/HeatRequest.java index 5a28f65db4..c12c89dbff 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/HeatRequest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/HeatRequest.java @@ -19,108 +19,119 @@ * limitations under the License. * ============LICENSE_END========================================================= */ - + package org.onap.so.adapters.valet.beans; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonProperty; /* - * This class represents the heat request as sent to OpenStack as defined in the - * Valet Placement Operations API + * This class represents the heat request as sent to OpenStack as defined in the Valet Placement Operations API */ public class HeatRequest implements Serializable { - private static final long serialVersionUID = 768026109321305392L; - @JsonProperty("stack_name") - private String stackName; - @JsonProperty("disable_rollback") - private Boolean disableRollback; - @JsonProperty("timeout_mins") - private Integer timeoutMins; - @JsonProperty("template") - private String template; - @JsonProperty("environment") - private String environment; - @JsonProperty("files") - private Map<String, Object> files = new HashMap<>(); - @JsonProperty("parameters") - private Map<String, Object> parameters = new HashMap<>(); - - public HeatRequest(String stackName, boolean disableRollback, int timeoutMins, String template, String environment, Map<String, Object> files, Map<String, Object> parameters) { - super(); - this.stackName = stackName; - this.disableRollback = disableRollback; - this.timeoutMins = timeoutMins; - this.template = template; - this.environment = environment; - this.files = files; - this.parameters = parameters; - } - - public String getStackName() { - return this.stackName; - } - public void setStackName(String stackName) { - this.stackName = stackName; - } - public Boolean getDisableRollback() { - return this.disableRollback; - } - public void setDisableRollback(Boolean disableRollback) { - this.disableRollback = disableRollback; - } - public Integer getTimeoutMins() { - return this.timeoutMins; - } - public void setTimeoutMins(Integer timeoutMins) { - this.timeoutMins = timeoutMins; - } - public String getTemplate() { - return this.template; - } - public void setTemplate(String template) { - this.template = template; - } - public String getEnvironment() { - return this.environment; - } - public void setEnvironment(String environment) { - this.environment = environment; - } - public Map<String, Object> getFiles() { - return this.files; - } - public void setFiles(Map<String, Object> files) { - this.files = files; - } - public Map<String, Object> getParameters() { - return this.parameters; - } - public void setParameters(Map<String, Object> parameters) { - this.parameters = parameters; - } - @Override - public int hashCode() { - return Objects.hash(stackName, disableRollback, timeoutMins, template, environment, files, parameters); - } - @Override - public boolean equals(Object o) { - if (o == this) - return true; - if (!(o instanceof HeatRequest)) { - return false; - } - HeatRequest hr = (HeatRequest) o; - return Objects.equals(stackName, hr.stackName) - && Objects.equals(disableRollback, hr.disableRollback) - && Objects.equals(timeoutMins, hr.timeoutMins) - && Objects.equals(template, hr.template) - && Objects.equals(environment, hr.environment) - && Objects.equals(files, hr.files) - && Objects.equals(parameters, hr.parameters); - } + private static final long serialVersionUID = 768026109321305392L; + @JsonProperty("stack_name") + private String stackName; + @JsonProperty("disable_rollback") + private Boolean disableRollback; + @JsonProperty("timeout_mins") + private Integer timeoutMins; + @JsonProperty("template") + private String template; + @JsonProperty("environment") + private String environment; + @JsonProperty("files") + private Map<String, Object> files = new HashMap<>(); + @JsonProperty("parameters") + private Map<String, Object> parameters = new HashMap<>(); + + public HeatRequest(String stackName, boolean disableRollback, int timeoutMins, String template, String environment, + Map<String, Object> files, Map<String, Object> parameters) { + super(); + this.stackName = stackName; + this.disableRollback = disableRollback; + this.timeoutMins = timeoutMins; + this.template = template; + this.environment = environment; + this.files = files; + this.parameters = parameters; + } + + public String getStackName() { + return this.stackName; + } + + public void setStackName(String stackName) { + this.stackName = stackName; + } + + public Boolean getDisableRollback() { + return this.disableRollback; + } + + public void setDisableRollback(Boolean disableRollback) { + this.disableRollback = disableRollback; + } + + public Integer getTimeoutMins() { + return this.timeoutMins; + } + + public void setTimeoutMins(Integer timeoutMins) { + this.timeoutMins = timeoutMins; + } + + public String getTemplate() { + return this.template; + } + + public void setTemplate(String template) { + this.template = template; + } + + public String getEnvironment() { + return this.environment; + } + + public void setEnvironment(String environment) { + this.environment = environment; + } + + public Map<String, Object> getFiles() { + return this.files; + } + + public void setFiles(Map<String, Object> files) { + this.files = files; + } + + public Map<String, Object> getParameters() { + return this.parameters; + } + + public void setParameters(Map<String, Object> parameters) { + this.parameters = parameters; + } + + @Override + public int hashCode() { + return Objects.hash(stackName, disableRollback, timeoutMins, template, environment, files, parameters); + } + + @Override + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof HeatRequest)) { + return false; + } + HeatRequest hr = (HeatRequest) o; + return Objects.equals(stackName, hr.stackName) && Objects.equals(disableRollback, hr.disableRollback) + && Objects.equals(timeoutMins, hr.timeoutMins) && Objects.equals(template, hr.template) + && Objects.equals(environment, hr.environment) && Objects.equals(files, hr.files) + && Objects.equals(parameters, hr.parameters); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetConfirmRequest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetConfirmRequest.java index 36083e8be6..0d6c47b2db 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetConfirmRequest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetConfirmRequest.java @@ -22,44 +22,47 @@ package org.onap.so.adapters.valet.beans; import java.io.Serializable; import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonProperty; + /* * This class represents the body of a Confirm operation on a Valet Placement API call */ public class ValetConfirmRequest implements Serializable { - private static final long serialVersionUID = 768026109321305392L; - - @JsonProperty("stack_id") - private String stackId; - - public ValetConfirmRequest() { - super(); - } - public ValetConfirmRequest(String stackId) { - super(); - this.stackId = stackId; - } - - public String getStackId() { - return this.stackId; - } - public void setStackId(String stackId) { - this.stackId = stackId; - } - - @Override - public int hashCode() { - return Objects.hash(stackId); - } - @Override - public boolean equals(Object o) { - if (o == this) - return true; - if (!(o instanceof ValetConfirmRequest)) { - return false; - } - ValetConfirmRequest vcr = (ValetConfirmRequest) o; - return Objects.equals(stackId, vcr.stackId); - } + private static final long serialVersionUID = 768026109321305392L; + + @JsonProperty("stack_id") + private String stackId; + + public ValetConfirmRequest() { + super(); + } + + public ValetConfirmRequest(String stackId) { + super(); + this.stackId = stackId; + } + + public String getStackId() { + return this.stackId; + } + + public void setStackId(String stackId) { + this.stackId = stackId; + } + + @Override + public int hashCode() { + return Objects.hash(stackId); + } + + @Override + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof ValetConfirmRequest)) { + return false; + } + ValetConfirmRequest vcr = (ValetConfirmRequest) o; + return Objects.equals(stackId, vcr.stackId); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetConfirmResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetConfirmResponse.java index c009da9608..f69b9b7eb8 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetConfirmResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetConfirmResponse.java @@ -25,6 +25,6 @@ import java.io.Serializable; /* This class has no body - placeholder if needed - for the response to a Confirm operation */ public class ValetConfirmResponse implements Serializable { - private static final long serialVersionUID = 768026109321305392L; + private static final long serialVersionUID = 768026109321305392L; } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetCreateRequest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetCreateRequest.java index d692416ea1..5aac0a167a 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetCreateRequest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetCreateRequest.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -22,113 +22,137 @@ package org.onap.so.adapters.valet.beans; import java.io.Serializable; import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonProperty; /* * This class represents the body of a Create request operation on a Valet Placement API call */ public class ValetCreateRequest implements Serializable { - private static final long serialVersionUID = 768026109321305392L; - - @JsonProperty("region_id") - private String regionId; - @JsonProperty("tenant_id") - private String tenantId; - @JsonProperty("service_instance_id") - private String serviceInstanceId; - @JsonProperty("vnf_id") - private String vnfId; - @JsonProperty("vnf_name") - private String vnfName; - @JsonProperty("vf_module_id") - private String vfModuleId; - @JsonProperty("vf_module_name") - private String vfModuleName; - @JsonProperty("keystone_url") - private String keystoneUrl; - @JsonProperty("heat_request") - private HeatRequest heatRequest; - - public ValetCreateRequest() { - super(); - } - - public String getRegionId() { - return this.regionId; - } - public void setRegionId(String regionId) { - this.regionId = regionId; - } - public String getTenantId() { - return this.tenantId; - } - public void setTenantId(String tenantId) { - this.tenantId = tenantId; - } - public String getServiceInstanceId() { - return this.serviceInstanceId; - } - public void setServiceInstanceId(String serviceInstanceId) { - this.serviceInstanceId = serviceInstanceId; - } - public String getVnfId() { - return this.vnfId; - } - public void setVnfId(String vnfId) { - this.vnfId = vnfId; - } - public String getVnfName() { - return this.vnfName; - } - public void setVnfName(String vnfName) { - this.vnfName = vnfName; - } - public String getVfModuleId() { - return this.vfModuleId; - } - public void setVfModuleId(String vfModuleId) { - this.vfModuleId = vfModuleId; - } - public String getVfModuleName() { - return this.vfModuleName; - } - public void setVfModuleName(String vfModuleName) { - this.vfModuleName = vfModuleName; - } - public String getKeystoneUrl() { - return this.keystoneUrl; - } - public void setKeystoneUrl(String keystoneUrl) { - this.keystoneUrl = keystoneUrl; - } - public HeatRequest getHeatRequest() { - return this.heatRequest; - } - public void setHeatRequest(HeatRequest heatRequest) { - this.heatRequest = heatRequest; - } - - @Override - public int hashCode() { - return Objects.hash(regionId, tenantId, serviceInstanceId, vnfId, vnfName, vfModuleId, vfModuleName, keystoneUrl, heatRequest); - } - @Override - public boolean equals(Object o) { - if (o == this) - return true; - if (!(o instanceof ValetCreateRequest)) { - return false; - } - ValetCreateRequest vcr = (ValetCreateRequest) o; - return Objects.equals(regionId, vcr.regionId) - && Objects.equals(tenantId, vcr.tenantId) - && Objects.equals(serviceInstanceId, vcr.serviceInstanceId) - && Objects.equals(vnfId, vcr.vnfId) - && Objects.equals(vnfName, vcr.vnfName) - && Objects.equals(vfModuleId, vcr.vfModuleId) - && Objects.equals(vfModuleName, vcr.vfModuleName) - && Objects.equals(keystoneUrl, vcr.keystoneUrl) - && Objects.equals(heatRequest, vcr.heatRequest); - } + private static final long serialVersionUID = 768026109321305392L; + + @JsonProperty("region_id") + private String regionId; + @JsonProperty("owner_id") + private String ownerId; + @JsonProperty("tenant_id") + private String tenantId; + @JsonProperty("service_instance_id") + private String serviceInstanceId; + @JsonProperty("vnf_id") + private String vnfId; + @JsonProperty("vnf_name") + private String vnfName; + @JsonProperty("vf_module_id") + private String vfModuleId; + @JsonProperty("vf_module_name") + private String vfModuleName; + @JsonProperty("keystone_url") + private String keystoneUrl; + @JsonProperty("heat_request") + private HeatRequest heatRequest; + + public ValetCreateRequest() { + super(); + } + + public String getRegionId() { + return this.regionId; + } + + public void setRegionId(String regionId) { + this.regionId = regionId; + } + + public String getOwnerId() { + return this.ownerId; + } + + public void setOwnerId(String ownerId) { + this.ownerId = ownerId; + } + + public String getTenantId() { + return this.tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getServiceInstanceId() { + return this.serviceInstanceId; + } + + public void setServiceInstanceId(String serviceInstanceId) { + this.serviceInstanceId = serviceInstanceId; + } + + public String getVnfId() { + return this.vnfId; + } + + public void setVnfId(String vnfId) { + this.vnfId = vnfId; + } + + public String getVnfName() { + return this.vnfName; + } + + public void setVnfName(String vnfName) { + this.vnfName = vnfName; + } + + public String getVfModuleId() { + return this.vfModuleId; + } + + public void setVfModuleId(String vfModuleId) { + this.vfModuleId = vfModuleId; + } + + public String getVfModuleName() { + return this.vfModuleName; + } + + public void setVfModuleName(String vfModuleName) { + this.vfModuleName = vfModuleName; + } + + public String getKeystoneUrl() { + return this.keystoneUrl; + } + + public void setKeystoneUrl(String keystoneUrl) { + this.keystoneUrl = keystoneUrl; + } + + public HeatRequest getHeatRequest() { + return this.heatRequest; + } + + public void setHeatRequest(HeatRequest heatRequest) { + this.heatRequest = heatRequest; + } + + @Override + public int hashCode() { + return Objects.hash(regionId, ownerId, tenantId, serviceInstanceId, vnfId, vnfName, vfModuleId, vfModuleName, + keystoneUrl, heatRequest); + } + + @Override + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof ValetCreateRequest)) { + return false; + } + ValetCreateRequest vcr = (ValetCreateRequest) o; + return Objects.equals(regionId, vcr.regionId) && Objects.equals(ownerId, vcr.ownerId) + && Objects.equals(tenantId, vcr.tenantId) && Objects.equals(serviceInstanceId, vcr.serviceInstanceId) + && Objects.equals(vnfId, vcr.vnfId) && Objects.equals(vnfName, vcr.vnfName) + && Objects.equals(vfModuleId, vcr.vfModuleId) && Objects.equals(vfModuleName, vcr.vfModuleName) + && Objects.equals(keystoneUrl, vcr.keystoneUrl) && Objects.equals(heatRequest, vcr.heatRequest); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetCreateResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetCreateResponse.java index e0c750e79f..e09788714a 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetCreateResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetCreateResponse.java @@ -24,47 +24,51 @@ import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Map; import java.util.Objects; import java.io.Serializable; + /* * This class represents the body of a Create response on a Valet Placement API call */ public class ValetCreateResponse implements Serializable { - private static final long serialVersionUID = 768026109321305392L; - - @JsonProperty("status") - private ValetStatus status; - @JsonProperty("parameters") - private Map<String, Object> parameters; - - public ValetCreateResponse() { - super(); - } - - public ValetStatus getStatus() { - return this.status; - } - public void setStatus(ValetStatus status) { - this.status = status; - } - public Map<String, Object> getParameters() { - return this.parameters; - } - public void setParameters(Map<String, Object> parameters) { - this.parameters = parameters; - } - - @Override - public int hashCode() { - return Objects.hash(status, parameters); - } - @Override - public boolean equals(Object o) { - if (o == this) - return true; - if (!(o instanceof ValetCreateResponse)) { - return false; - } - ValetCreateResponse vcr = (ValetCreateResponse) o; - return Objects.equals(status, vcr.status) - && Objects.equals(parameters, vcr.parameters); - } + private static final long serialVersionUID = 768026109321305392L; + + @JsonProperty("status") + private ValetStatus status; + @JsonProperty("parameters") + private Map<String, Object> parameters; + + public ValetCreateResponse() { + super(); + } + + public ValetStatus getStatus() { + return this.status; + } + + public void setStatus(ValetStatus status) { + this.status = status; + } + + public Map<String, Object> getParameters() { + return this.parameters; + } + + public void setParameters(Map<String, Object> parameters) { + this.parameters = parameters; + } + + @Override + public int hashCode() { + return Objects.hash(status, parameters); + } + + @Override + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof ValetCreateResponse)) { + return false; + } + ValetCreateResponse vcr = (ValetCreateResponse) o; + return Objects.equals(status, vcr.status) && Objects.equals(parameters, vcr.parameters); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetDeleteRequest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetDeleteRequest.java index 7bd5855d0e..fb6ceb45d8 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetDeleteRequest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetDeleteRequest.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -22,63 +22,80 @@ package org.onap.so.adapters.valet.beans; import java.io.Serializable; import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonProperty; /* * This class represents the body of a Delete request on a Valet Placement API call */ public class ValetDeleteRequest implements Serializable { - private static final long serialVersionUID = 768026109321305392L; - - @JsonProperty("region_id") - private String regionId; - @JsonProperty("tenant_id") - private String tenantId; - @JsonProperty("vf_module_id") - private String vfModuleId; - @JsonProperty("vf_module_name") - private String vfModuleName; - - public String getRegionId() { - return this.regionId; - } - public void setRegionId(String regionId) { - this.regionId = regionId; - } - public String getTenantId() { - return this.tenantId; - } - public void setTenantId(String tenantId) { - this.tenantId = tenantId; - } - public String getVfModuleId() { - return this.vfModuleId; - } - public void setVfModuleId(String vfModuleId) { - this.vfModuleId = vfModuleId; - } - public String getVfModuleName() { - return this.vfModuleName; - } - public void setVfModuleName(String vfModuleName) { - this.vfModuleName = vfModuleName; - } - @Override - public int hashCode() { - return Objects.hash(regionId, tenantId, vfModuleId, vfModuleName); - } - @Override - public boolean equals(Object o) { - if (o == this) - return true; - if (!(o instanceof ValetDeleteRequest)) { - return false; - } - ValetDeleteRequest vdr = (ValetDeleteRequest) o; - return Objects.equals(regionId, vdr.regionId) - && Objects.equals(tenantId, vdr.tenantId) - && Objects.equals(vfModuleId, vdr.vfModuleId) - && Objects.equals(vfModuleName, vdr.vfModuleName); - } + private static final long serialVersionUID = 768026109321305392L; + + @JsonProperty("region_id") + private String regionId; + @JsonProperty("owner_id") + private String ownerId; + @JsonProperty("tenant_id") + private String tenantId; + @JsonProperty("vf_module_id") + private String vfModuleId; + @JsonProperty("vf_module_name") + private String vfModuleName; + + public String getRegionId() { + return this.regionId; + } + + public void setRegionId(String regionId) { + this.regionId = regionId; + } + + public String getOwnerId() { + return this.ownerId; + } + + public void setOwnerId(String ownerId) { + this.ownerId = ownerId; + } + + public String getTenantId() { + return this.tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getVfModuleId() { + return this.vfModuleId; + } + + public void setVfModuleId(String vfModuleId) { + this.vfModuleId = vfModuleId; + } + + public String getVfModuleName() { + return this.vfModuleName; + } + + public void setVfModuleName(String vfModuleName) { + this.vfModuleName = vfModuleName; + } + + @Override + public int hashCode() { + return Objects.hash(regionId, ownerId, tenantId, vfModuleId, vfModuleName); + } + + @Override + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof ValetDeleteRequest)) { + return false; + } + ValetDeleteRequest vdr = (ValetDeleteRequest) o; + return Objects.equals(regionId, vdr.regionId) && Objects.equals(ownerId, vdr.ownerId) + && Objects.equals(tenantId, vdr.tenantId) && Objects.equals(vfModuleId, vdr.vfModuleId) + && Objects.equals(vfModuleName, vdr.vfModuleName); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetDeleteResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetDeleteResponse.java index fa58752d61..81cfbc7acb 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetDeleteResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetDeleteResponse.java @@ -22,45 +22,47 @@ package org.onap.so.adapters.valet.beans; import java.io.Serializable; import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonProperty; /* * This class represents the body of a Delete response on a Valet Placement API call */ public class ValetDeleteResponse implements Serializable { - private static final long serialVersionUID = 768026109321305392L; - @JsonProperty("status") - private ValetStatus status; - - public ValetDeleteResponse() { - super(); - } - public ValetDeleteResponse(ValetStatus status) { - super(); - this.status = status; - } - - public ValetStatus getStatus() { - return this.status; - } - public void setStatus(ValetStatus status) { - this.status = status; - } - - @Override - public int hashCode() { - return Objects.hash(status); - } - @Override - public boolean equals(Object o) { - if (o == this) - return true; - if (!(o instanceof ValetDeleteResponse)) { - return false; - } - ValetDeleteResponse vdr = (ValetDeleteResponse) o; - return Objects.equals(status, vdr.status); - } + private static final long serialVersionUID = 768026109321305392L; + @JsonProperty("status") + private ValetStatus status; + + public ValetDeleteResponse() { + super(); + } + + public ValetDeleteResponse(ValetStatus status) { + super(); + this.status = status; + } + + public ValetStatus getStatus() { + return this.status; + } + + public void setStatus(ValetStatus status) { + this.status = status; + } + + @Override + public int hashCode() { + return Objects.hash(status); + } + + @Override + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof ValetDeleteResponse)) { + return false; + } + ValetDeleteResponse vdr = (ValetDeleteResponse) o; + return Objects.equals(status, vdr.status); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetRollbackRequest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetRollbackRequest.java index ae0af67f80..7ca11af443 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetRollbackRequest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetRollbackRequest.java @@ -22,60 +22,64 @@ package org.onap.so.adapters.valet.beans; import java.io.Serializable; import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonProperty; /* * This class represents the body of a Rollback request on a Valet Placement API call */ public class ValetRollbackRequest implements Serializable { - private static final long serialVersionUID = 768026109321305392L; + private static final long serialVersionUID = 768026109321305392L; + + @JsonProperty("stack_id") + private String stackId; + @JsonProperty("suppress_rollback") + private Boolean suppressRollback = false; + @JsonProperty("error_message") + private String errorMessage; + + public ValetRollbackRequest() { + super(); + } + + public String getStackId() { + return this.stackId; + } + + public void setStackId(String stackId) { + this.stackId = stackId; + } + + public Boolean getSuppressRollback() { + return this.suppressRollback; + } + + public void setSuppressRollback(Boolean suppressRollback) { + this.suppressRollback = suppressRollback; + } + + public String getErrorMessage() { + return this.errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + @Override + public int hashCode() { + return Objects.hash(stackId, suppressRollback, errorMessage); + } - @JsonProperty("stack_id") - private String stackId; - @JsonProperty("suppress_rollback") - private Boolean suppressRollback = false; - @JsonProperty("error_message") - private String errorMessage; - - public ValetRollbackRequest() { - super(); - } - - public String getStackId() { - return this.stackId; - } - public void setStackId(String stackId) { - this.stackId = stackId; - } - public Boolean getSuppressRollback() { - return this.suppressRollback; - } - public void setSuppressRollback(Boolean suppressRollback) { - this.suppressRollback = suppressRollback; - } - public String getErrorMessage() { - return this.errorMessage; - } - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - @Override - public int hashCode() { - return Objects.hash(stackId, suppressRollback, errorMessage); - } - @Override - public boolean equals(Object o) { - if (o == this) - return true; - if (!(o instanceof ValetRollbackRequest)) { - return false; - } - ValetRollbackRequest vrr = (ValetRollbackRequest) o; - return Objects.equals(stackId, vrr.stackId) - && Objects.equals(suppressRollback, vrr.suppressRollback) - && Objects.equals(errorMessage, vrr.errorMessage); - } + @Override + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof ValetRollbackRequest)) { + return false; + } + ValetRollbackRequest vrr = (ValetRollbackRequest) o; + return Objects.equals(stackId, vrr.stackId) && Objects.equals(suppressRollback, vrr.suppressRollback) + && Objects.equals(errorMessage, vrr.errorMessage); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetRollbackResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetRollbackResponse.java index 429aa95af0..d9d29c0935 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetRollbackResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetRollbackResponse.java @@ -21,9 +21,9 @@ package org.onap.so.adapters.valet.beans; import java.io.Serializable; -/* This class has no body - placeholder - body of a Rollback response on a Valet Placement Operation */ +/* This class has no body - placeholder - body of a Rollback response on a Valet Placement Operation */ public class ValetRollbackResponse implements Serializable { - private static final long serialVersionUID = 768026109321305392L; + private static final long serialVersionUID = 768026109321305392L; } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetStatus.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetStatus.java index cc48e95c81..3b8528cd72 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetStatus.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetStatus.java @@ -22,62 +22,65 @@ package org.onap.so.adapters.valet.beans; import java.io.Serializable; import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonProperty; import org.apache.commons.lang3.builder.ToStringBuilder; -/* +/* * This class represents the status object as defined in the Valet Placement Operations API - part of Response objects */ public class ValetStatus implements Serializable { - private static final long serialVersionUID = 1L; - @JsonProperty("status") - private String status; - @JsonProperty("message") - private String message; + private static final long serialVersionUID = 1L; + @JsonProperty("status") + private String status; + @JsonProperty("message") + private String message; + + + public ValetStatus() { + super(); + } + + public ValetStatus(String statusCode, String statusMessage) { + super(); + this.status = statusCode; + this.message = statusMessage; + } + + + @Override + public String toString() { + return new ToStringBuilder(this).append("status", status).append("message", message).toString(); + } + + public String getStatus() { + return this.status; + } + + public void setStatus(String statusCode) { + this.status = statusCode; + } + + public String getMessage() { + return this.message; + } + public void setMessage(String statusMessage) { + this.message = statusMessage; + } - public ValetStatus() { - super(); - } - - public ValetStatus(String statusCode, String statusMessage) { - super(); - this.status = statusCode; - this.message = statusMessage; - } - - - @Override - public String toString() { - return new ToStringBuilder(this).append("status", status).append("message", message).toString(); - } - - public String getStatus() { - return this.status; - } - public void setStatus(String statusCode) { - this.status = statusCode; - } - public String getMessage() { - return this.message; - } - public void setMessage(String statusMessage) { - this.message = statusMessage; - } + @Override + public int hashCode() { + return Objects.hash(status, message); + } - @Override - public int hashCode() { - return Objects.hash(status, message); - } - @Override - public boolean equals(Object o) { - if (o == this) - return true; - if (!(o instanceof ValetStatus)) { - return false; - } - ValetStatus vs = (ValetStatus) o; - return Objects.equals(status, vs.status) && Objects.equals(message, vs.message); - } + @Override + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof ValetStatus)) { + return false; + } + ValetStatus vs = (ValetStatus) o; + return Objects.equals(status, vs.status) && Objects.equals(message, vs.message); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetUpdateRequest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetUpdateRequest.java index 360c07b225..ff27d88a1f 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetUpdateRequest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetUpdateRequest.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -22,113 +22,138 @@ package org.onap.so.adapters.valet.beans; import java.io.Serializable; import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonProperty; /* * This class represents the body of an Update request on a Valet Placement API call */ public class ValetUpdateRequest implements Serializable { - private static final long serialVersionUID = 768026109321305392L; - - @JsonProperty("region_id") - private String regionId; - @JsonProperty("tenant_id") - private String tenantId; - @JsonProperty("service_instance_id") - private String serviceInstanceId; - @JsonProperty("vnf_id") - private String vnfId; - @JsonProperty("vnf_name") - private String vnfName; - @JsonProperty("vf_module_id") - private String vfModuleId; - @JsonProperty("vf_module_name") - private String vfModuleName; - @JsonProperty("keystone_url") - private String keystoneUrl; - @JsonProperty("heat_request") - private HeatRequest heatRequest; - - public ValetUpdateRequest() { - super(); - } - - public String getRegionId() { - return this.regionId; - } - public void setRegionId(String regionId) { - this.regionId = regionId; - } - public String getTenantId() { - return this.tenantId; - } - public void setTenantId(String tenantId) { - this.tenantId = tenantId; - } - public String getServiceInstanceId() { - return this.serviceInstanceId; - } - public void setServiceInstanceId(String serviceInstanceId) { - this.serviceInstanceId = serviceInstanceId; - } - public String getVnfId() { - return this.vnfId; - } - public void setVnfId(String vnfId) { - this.vnfId = vnfId; - } - public String getVnfName() { - return this.vnfName; - } - public void setVnfName(String vnfName) { - this.vnfName = vnfName; - } - public String getVfModuleId() { - return this.vfModuleId; - } - public void setVfModuleId(String vfModuleId) { - this.vfModuleId = vfModuleId; - } - public String getVfModuleName() { - return this.vfModuleName; - } - public void setVfModuleName(String vfModuleName) { - this.vfModuleName = vfModuleName; - } - public String getKeystoneUrl() { - return this.keystoneUrl; - } - public void setKeystoneUrl(String keystoneUrl) { - this.keystoneUrl = keystoneUrl; - } - public HeatRequest getHeatRequest() { - return this.heatRequest; - } - public void setHeatRequest(HeatRequest heatRequest) { - this.heatRequest = heatRequest; - } - @Override - public int hashCode() { - return Objects.hash(regionId, tenantId, serviceInstanceId, vnfId, vnfName, vfModuleId, vfModuleName, keystoneUrl, heatRequest); - - } - @Override - public boolean equals(Object o) { - if (o == this) - return true; - if (!(o instanceof ValetUpdateRequest)) { - return false; - } - ValetUpdateRequest vur = (ValetUpdateRequest) o; - return Objects.equals(regionId, vur.regionId) - && Objects.equals(tenantId, vur.tenantId) - && Objects.equals(serviceInstanceId, vur.serviceInstanceId) - && Objects.equals(vnfId, vur.vnfId) - && Objects.equals(vnfName, vur.vnfName) - && Objects.equals(vfModuleId, vur.vfModuleId) - && Objects.equals(vfModuleName, vur.vfModuleName) - && Objects.equals(keystoneUrl, vur.keystoneUrl) - && Objects.equals(heatRequest, vur.heatRequest); - } + private static final long serialVersionUID = 768026109321305392L; + + @JsonProperty("region_id") + private String regionId; + @JsonProperty("owner)_id") + private String ownerId; + @JsonProperty("tenant_id") + private String tenantId; + @JsonProperty("service_instance_id") + private String serviceInstanceId; + @JsonProperty("vnf_id") + private String vnfId; + @JsonProperty("vnf_name") + private String vnfName; + @JsonProperty("vf_module_id") + private String vfModuleId; + @JsonProperty("vf_module_name") + private String vfModuleName; + @JsonProperty("keystone_url") + private String keystoneUrl; + @JsonProperty("heat_request") + private HeatRequest heatRequest; + + public ValetUpdateRequest() { + super(); + } + + public String getRegionId() { + return this.regionId; + } + + public void setRegionId(String regionId) { + this.regionId = regionId; + } + + public String getOwnerId() { + return this.ownerId; + } + + public void setOwnerId(String ownerId) { + this.ownerId = ownerId; + } + + public String getTenantId() { + return this.tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getServiceInstanceId() { + return this.serviceInstanceId; + } + + public void setServiceInstanceId(String serviceInstanceId) { + this.serviceInstanceId = serviceInstanceId; + } + + public String getVnfId() { + return this.vnfId; + } + + public void setVnfId(String vnfId) { + this.vnfId = vnfId; + } + + public String getVnfName() { + return this.vnfName; + } + + public void setVnfName(String vnfName) { + this.vnfName = vnfName; + } + + public String getVfModuleId() { + return this.vfModuleId; + } + + public void setVfModuleId(String vfModuleId) { + this.vfModuleId = vfModuleId; + } + + public String getVfModuleName() { + return this.vfModuleName; + } + + public void setVfModuleName(String vfModuleName) { + this.vfModuleName = vfModuleName; + } + + public String getKeystoneUrl() { + return this.keystoneUrl; + } + + public void setKeystoneUrl(String keystoneUrl) { + this.keystoneUrl = keystoneUrl; + } + + public HeatRequest getHeatRequest() { + return this.heatRequest; + } + + public void setHeatRequest(HeatRequest heatRequest) { + this.heatRequest = heatRequest; + } + + @Override + public int hashCode() { + return Objects.hash(regionId, ownerId, tenantId, serviceInstanceId, vnfId, vnfName, vfModuleId, vfModuleName, + keystoneUrl, heatRequest); + + } + + @Override + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof ValetUpdateRequest)) { + return false; + } + ValetUpdateRequest vur = (ValetUpdateRequest) o; + return Objects.equals(regionId, vur.regionId) && Objects.equals(ownerId, vur.ownerId) + && Objects.equals(tenantId, vur.tenantId) && Objects.equals(serviceInstanceId, vur.serviceInstanceId) + && Objects.equals(vnfId, vur.vnfId) && Objects.equals(vnfName, vur.vnfName) + && Objects.equals(vfModuleId, vur.vfModuleId) && Objects.equals(vfModuleName, vur.vfModuleName) + && Objects.equals(keystoneUrl, vur.keystoneUrl) && Objects.equals(heatRequest, vur.heatRequest); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetUpdateResponse.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetUpdateResponse.java index b6cb27caa3..10b6d2a09e 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetUpdateResponse.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/valet/beans/ValetUpdateResponse.java @@ -23,49 +23,51 @@ package org.onap.so.adapters.valet.beans; import java.io.Serializable; import java.util.HashMap; import java.util.Objects; - import com.fasterxml.jackson.annotation.JsonProperty; /* * This class represents the body of an Update response on a Valet Placement API call */ public class ValetUpdateResponse implements Serializable { - private static final long serialVersionUID = 768026109321305392L; - @JsonProperty("status") - private ValetStatus status; - @JsonProperty("parameters") - private HashMap<String, Object> parameters; - - public ValetUpdateResponse() { - super(); - } - - public ValetStatus getStatus() { - return this.status; - } - public void setStatus(ValetStatus status) { - this.status = status; - } - public HashMap<String, Object> getParameters() { - return this.parameters; - } - public void setParameters(HashMap<String, Object> parameters) { - this.parameters = parameters; - } + private static final long serialVersionUID = 768026109321305392L; + @JsonProperty("status") + private ValetStatus status; + @JsonProperty("parameters") + private HashMap<String, Object> parameters; + + public ValetUpdateResponse() { + super(); + } + + public ValetStatus getStatus() { + return this.status; + } + + public void setStatus(ValetStatus status) { + this.status = status; + } + + public HashMap<String, Object> getParameters() { + return this.parameters; + } + + public void setParameters(HashMap<String, Object> parameters) { + this.parameters = parameters; + } + + @Override + public int hashCode() { + return Objects.hash(status, parameters); + } - @Override - public int hashCode() { - return Objects.hash(status, parameters); - } - @Override - public boolean equals(Object o) { - if (o == this) - return true; - if (!(o instanceof ValetUpdateResponse)) { - return false; - } - ValetUpdateResponse vur = (ValetUpdateResponse) o; - return Objects.equals(status, vur.status) - && Objects.equals(parameters, vur.parameters); - } + @Override + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof ValetUpdateResponse)) { + return false; + } + ValetUpdateResponse vur = (ValetUpdateResponse) o; + return Objects.equals(status, vur.status) && Objects.equals(parameters, vur.parameters); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vdu/mapper/VfModuleCustomizationToVduMapper.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vdu/mapper/VfModuleCustomizationToVduMapper.java index f6442b6252..f8a6e96bc6 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vdu/mapper/VfModuleCustomizationToVduMapper.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vdu/mapper/VfModuleCustomizationToVduMapper.java @@ -21,7 +21,6 @@ package org.onap.so.adapters.vdu.mapper; import java.util.List; - import org.onap.so.adapters.vdu.VduModelInfo; import org.onap.so.adapters.vdu.VduArtifact; import org.onap.so.adapters.vdu.VduArtifact.ArtifactType; @@ -33,95 +32,97 @@ import org.springframework.stereotype.Component; @Component public class VfModuleCustomizationToVduMapper { - - public VduModelInfo mapVfModuleCustomizationToVdu(VfModuleCustomization vfModuleCustom) - { - VduModelInfo vduModel = new VduModelInfo(); - vduModel.setModelCustomizationUUID(vfModuleCustom.getModelCustomizationUUID()); - - // Map the cloud templates, attached files, and environment file - mapCloudTemplates(vfModuleCustom.getVfModule().getModuleHeatTemplate(), vduModel); - mapCloudFiles(vfModuleCustom,vduModel); - mapEnvironment(vfModuleCustom.getHeatEnvironment(), vduModel); - - return vduModel; - } - - public VduModelInfo mapVfModuleCustVolumeToVdu(VfModuleCustomization vfModuleCustom) - { - VduModelInfo vduModel = new VduModelInfo(); - vduModel.setModelCustomizationUUID(vfModuleCustom.getModelCustomizationUUID()); - - // Map the cloud templates, attached files, and environment file - mapCloudTemplates(vfModuleCustom.getVfModule().getVolumeHeatTemplate(), vduModel); - mapCloudFiles(vfModuleCustom,vduModel); - mapEnvironment(vfModuleCustom.getVolumeHeatEnv(), vduModel); - - return vduModel; - } - - private void mapCloudTemplates(HeatTemplate heatTemplate, VduModelInfo vduModel) { - // TODO: These catalog objects will be refactored to be non-Heat-specific - - List<VduArtifact> vduArtifacts = vduModel.getArtifacts(); - - // Main template. Also set the VDU timeout based on the main template. - vduArtifacts.add(mapHeatTemplateToVduArtifact(heatTemplate, ArtifactType.MAIN_TEMPLATE)); - vduModel.setTimeoutMinutes(heatTemplate.getTimeoutMinutes()); - - // Nested templates - List<HeatTemplate> childTemplates = heatTemplate.getChildTemplates(); - if (childTemplates != null) { - for(HeatTemplate childTemplate : childTemplates){ - vduArtifacts.add(mapHeatTemplateToVduArtifact(childTemplate, ArtifactType.NESTED_TEMPLATE)); - } - } - } - - private VduArtifact mapHeatTemplateToVduArtifact(HeatTemplate heatTemplate, ArtifactType artifactType) { - VduArtifact vduArtifact = new VduArtifact(); - vduArtifact.setName(heatTemplate.getTemplateName()); - vduArtifact.setContent(heatTemplate.getHeatTemplate().getBytes()); - vduArtifact.setType(artifactType); - return vduArtifact; - } - - private void mapCloudFiles(VfModuleCustomization vfModuleCustom, VduModelInfo vduModel) { - // TODO: These catalog objects will be refactored to be non-Heat-specific - - List<VduArtifact> vduArtifacts = vduModel.getArtifacts(); - - // Attached Files - List<HeatFiles> heatFiles = vfModuleCustom.getVfModule().getHeatFiles(); - if (heatFiles != null) { - for(HeatFiles file : heatFiles){ - vduArtifacts.add(mapCloudFileToVduArtifact(file, ArtifactType.TEXT_FILE)); - } - } - } - - private VduArtifact mapCloudFileToVduArtifact(HeatFiles heatFile, ArtifactType artifactType) { - VduArtifact vduArtifact = new VduArtifact(); - vduArtifact.setName(heatFile.getFileName()); - vduArtifact.setContent(heatFile.getFileBody().getBytes()); - vduArtifact.setType(artifactType); - return vduArtifact; - } - - private void mapEnvironment(HeatEnvironment heatEnvironment, VduModelInfo vduModel) { - // TODO: These catalog objects will be refactored to be non-Heat-specific - if (heatEnvironment != null) { - List<VduArtifact> vduArtifacts = vduModel.getArtifacts(); - vduArtifacts.add(mapEnvironmentFileToVduArtifact(heatEnvironment)); - } - } - - private VduArtifact mapEnvironmentFileToVduArtifact(HeatEnvironment heatEnv) { - VduArtifact vduArtifact = new VduArtifact(); - vduArtifact.setName(heatEnv.getName()); - vduArtifact.setContent(heatEnv.getEnvironment().getBytes()); - vduArtifact.setType(ArtifactType.ENVIRONMENT); - return vduArtifact; - } + + public VduModelInfo mapVfModuleCustomizationToVdu(VfModuleCustomization vfModuleCustom) { + VduModelInfo vduModel = new VduModelInfo(); + vduModel.setModelCustomizationUUID(vfModuleCustom.getModelCustomizationUUID()); + vduModel.setModelUUID(vfModuleCustom.getVfModule().getModelUUID()); + vduModel.setModelInvariantUUID(vfModuleCustom.getVfModule().getModelInvariantUUID()); + + // Map the cloud templates, attached files, and environment file + mapCloudTemplates(vfModuleCustom.getVfModule().getModuleHeatTemplate(), vduModel); + mapCloudFiles(vfModuleCustom, vduModel); + mapEnvironment(vfModuleCustom.getHeatEnvironment(), vduModel); + + return vduModel; + } + + public VduModelInfo mapVfModuleCustVolumeToVdu(VfModuleCustomization vfModuleCustom) { + VduModelInfo vduModel = new VduModelInfo(); + vduModel.setModelCustomizationUUID(vfModuleCustom.getModelCustomizationUUID()); + vduModel.setModelUUID(vfModuleCustom.getVfModule().getModelUUID()); + vduModel.setModelInvariantUUID(vfModuleCustom.getVfModule().getModelInvariantUUID()); + + // Map the cloud templates, attached files, and environment file + mapCloudTemplates(vfModuleCustom.getVfModule().getVolumeHeatTemplate(), vduModel); + mapCloudFiles(vfModuleCustom, vduModel); + mapEnvironment(vfModuleCustom.getVolumeHeatEnv(), vduModel); + + return vduModel; + } + + private void mapCloudTemplates(HeatTemplate heatTemplate, VduModelInfo vduModel) { + // TODO: These catalog objects will be refactored to be non-Heat-specific + + List<VduArtifact> vduArtifacts = vduModel.getArtifacts(); + + // Main template. Also set the VDU timeout based on the main template. + vduArtifacts.add(mapHeatTemplateToVduArtifact(heatTemplate, ArtifactType.MAIN_TEMPLATE)); + vduModel.setTimeoutMinutes(heatTemplate.getTimeoutMinutes()); + + // Nested templates + List<HeatTemplate> childTemplates = heatTemplate.getChildTemplates(); + if (childTemplates != null) { + for (HeatTemplate childTemplate : childTemplates) { + vduArtifacts.add(mapHeatTemplateToVduArtifact(childTemplate, ArtifactType.NESTED_TEMPLATE)); + } + } + } + + private VduArtifact mapHeatTemplateToVduArtifact(HeatTemplate heatTemplate, ArtifactType artifactType) { + VduArtifact vduArtifact = new VduArtifact(); + vduArtifact.setName(heatTemplate.getTemplateName()); + vduArtifact.setContent(heatTemplate.getHeatTemplate().getBytes()); + vduArtifact.setType(artifactType); + return vduArtifact; + } + + private void mapCloudFiles(VfModuleCustomization vfModuleCustom, VduModelInfo vduModel) { + // TODO: These catalog objects will be refactored to be non-Heat-specific + + List<VduArtifact> vduArtifacts = vduModel.getArtifacts(); + + // Attached Files + List<HeatFiles> heatFiles = vfModuleCustom.getVfModule().getHeatFiles(); + if (heatFiles != null) { + for (HeatFiles file : heatFiles) { + vduArtifacts.add(mapCloudFileToVduArtifact(file, ArtifactType.TEXT_FILE)); + } + } + } + + private VduArtifact mapCloudFileToVduArtifact(HeatFiles heatFile, ArtifactType artifactType) { + VduArtifact vduArtifact = new VduArtifact(); + vduArtifact.setName(heatFile.getFileName()); + vduArtifact.setContent(heatFile.getFileBody().getBytes()); + vduArtifact.setType(artifactType); + return vduArtifact; + } + + private void mapEnvironment(HeatEnvironment heatEnvironment, VduModelInfo vduModel) { + // TODO: These catalog objects will be refactored to be non-Heat-specific + if (heatEnvironment != null) { + List<VduArtifact> vduArtifacts = vduModel.getArtifacts(); + vduArtifacts.add(mapEnvironmentFileToVduArtifact(heatEnvironment)); + } + } + + private VduArtifact mapEnvironmentFileToVduArtifact(HeatEnvironment heatEnv) { + VduArtifact vduArtifact = new VduArtifact(); + vduArtifact.setName(heatEnv.getName()); + vduArtifact.setContent(heatEnv.getEnvironment().getBytes()); + vduArtifact.setType(ArtifactType.ENVIRONMENT); + return vduArtifact; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/BpelRestClient.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/BpelRestClient.java index 1601de064d..906c285c28 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/BpelRestClient.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/BpelRestClient.java @@ -48,254 +48,250 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; /** - * This is the class that is used to POST replies from the MSO adapters to the BPEL engine. - * It can be configured via property file, or modified using the member methods. - * The properties to use are: - * org.onap.so.adapters.vnf.bpelauth encrypted authorization string to send to BEPL engine - * org.onap.so.adapters.vnf.sockettimeout socket timeout value - * org.onap.so.adapters.vnf.connecttimeout connect timeout value - * org.onap.so.adapters.vnf.retrycount number of times to retry failed connections - * org.onap.so.adapters.vnf.retryinterval interval (in seconds) between retries - * org.onap.so.adapters.vnf.retrylist list of response codes that will trigger a retry (the special code - * 900 means "connection was not established") + * This is the class that is used to POST replies from the MSO adapters to the BPEL engine. It can be configured via + * property file, or modified using the member methods. The properties to use are: org.onap.so.adapters.vnf.bpelauth + * encrypted authorization string to send to BEPL engine org.onap.so.adapters.vnf.sockettimeout socket timeout value + * org.onap.so.adapters.vnf.connecttimeout connect timeout value org.onap.so.adapters.vnf.retrycount number of times to + * retry failed connections org.onap.so.adapters.vnf.retryinterval interval (in seconds) between retries + * org.onap.so.adapters.vnf.retrylist list of response codes that will trigger a retry (the special code 900 means + * "connection was not established") */ @Component @Scope("prototype") public class BpelRestClient { - public static final String MSO_PROP_VNF_ADAPTER = "MSO_PROP_VNF_ADAPTER"; - private static final String PROPERTY_DOMAIN = "org.onap.so.adapters.vnf"; - private static final String BPEL_AUTH_PROPERTY = PROPERTY_DOMAIN+".bpelauth"; - private static final String SOCKET_TIMEOUT_PROPERTY = PROPERTY_DOMAIN+".sockettimeout"; - private static final String CONN_TIMEOUT_PROPERTY = PROPERTY_DOMAIN+".connecttimeout"; - private static final String RETRY_COUNT_PROPERTY = PROPERTY_DOMAIN+".retrycount"; - private static final String RETRY_INTERVAL_PROPERTY = PROPERTY_DOMAIN+".retryinterval"; - private static final String RETRY_LIST_PROPERTY = PROPERTY_DOMAIN+".retrylist"; - private static final String ENCRYPTION_KEY_PROP = "org.onap.so.adapters.network.encryptionKey"; + public static final String MSO_PROP_VNF_ADAPTER = "MSO_PROP_VNF_ADAPTER"; + private static final String PROPERTY_DOMAIN = "org.onap.so.adapters.vnf"; + private static final String BPEL_AUTH_PROPERTY = PROPERTY_DOMAIN + ".bpelauth"; + private static final String SOCKET_TIMEOUT_PROPERTY = PROPERTY_DOMAIN + ".sockettimeout"; + private static final String CONN_TIMEOUT_PROPERTY = PROPERTY_DOMAIN + ".connecttimeout"; + private static final String RETRY_COUNT_PROPERTY = PROPERTY_DOMAIN + ".retrycount"; + private static final String RETRY_INTERVAL_PROPERTY = PROPERTY_DOMAIN + ".retryinterval"; + private static final String RETRY_LIST_PROPERTY = PROPERTY_DOMAIN + ".retrylist"; + private static final String ENCRYPTION_KEY_PROP = "org.onap.so.adapters.network.encryptionKey"; private static final Logger logger = LoggerFactory.getLogger(BpelRestClient.class); - /** Default socket timeout (in seconds) */ - public static final int DEFAULT_SOCKET_TIMEOUT = 5; - /** Default connect timeout (in seconds) */ - public static final int DEFAULT_CONNECT_TIMEOUT = 5; - /** By default, retry up to five times */ - public static final int DEFAULT_RETRY_COUNT = 5; - /** Default interval to wait between retries (in seconds), negative means use backoff algorithm */ - public static final int DEFAULT_RETRY_INTERVAL = -15; - /** Default list of response codes to trigger a retry */ - public static final String DEFAULT_RETRY_LIST = "408,429,500,502,503,504,900"; // 900 is "connection failed" - /** Default credentials */ - public static final String DEFAULT_CREDENTIALS = ""; - - @Autowired - private Environment env; - // Properties of the BPEL client -- all are configurable - private int socketTimeout; - private int connectTimeout; - private int retryCount; - private int retryInterval; - private Set<Integer> retryList; - private String credentials; - - // last response from BPEL engine - private int lastResponseCode; - private String lastResponse; - - /** - * Create a client to send results to the BPEL engine, using configuration from the - * MSO_PROP_VNF_ADAPTER properties. - */ - public BpelRestClient() { - socketTimeout = DEFAULT_SOCKET_TIMEOUT; - connectTimeout = DEFAULT_CONNECT_TIMEOUT; - retryCount = DEFAULT_RETRY_COUNT; - retryInterval = DEFAULT_RETRY_INTERVAL; - setRetryList(DEFAULT_RETRY_LIST); - credentials = DEFAULT_CREDENTIALS; - lastResponseCode = 0; - lastResponse = ""; - - } - - @PostConstruct - protected void init() { - - socketTimeout = env.getProperty(SOCKET_TIMEOUT_PROPERTY, Integer.class, DEFAULT_SOCKET_TIMEOUT); - connectTimeout = env.getProperty(CONN_TIMEOUT_PROPERTY, Integer.class, DEFAULT_CONNECT_TIMEOUT); - retryCount = env.getProperty(RETRY_COUNT_PROPERTY, Integer.class, DEFAULT_RETRY_COUNT); - retryInterval = env.getProperty(RETRY_INTERVAL_PROPERTY, Integer.class, DEFAULT_RETRY_INTERVAL); - setRetryList(env.getProperty(RETRY_LIST_PROPERTY, DEFAULT_RETRY_LIST)); - credentials = getEncryptedProperty(BPEL_AUTH_PROPERTY, DEFAULT_CREDENTIALS, ENCRYPTION_KEY_PROP); - } - - public int getSocketTimeout() { - return socketTimeout; - } - - public void setSocketTimeout(int socketTimeout) { - this.socketTimeout = socketTimeout; - } - - public int getConnectTimeout() { - return connectTimeout; - } - - public void setConnectTimeout(int connectTimeout) { - this.connectTimeout = connectTimeout; - } - - public int getRetryCount() { - return retryCount; - } - - public void setRetryCount(int retryCount) { - int newRetryCount = retryCount; - if (newRetryCount < 0) - newRetryCount = DEFAULT_RETRY_COUNT; - this.retryCount = newRetryCount; - } - - public int getRetryInterval() { - return retryInterval; - } - - public void setRetryInterval(int retryInterval) { - this.retryInterval = retryInterval; - } - - public String getCredentials() { - return credentials; - } - - public void setCredentials(String credentials) { - this.credentials = credentials; - } - - public String getRetryList() { - if (retryList.isEmpty()) - return ""; - String t = retryList.toString(); - return t.substring(1, t.length()-1); - } - - public void setRetryList(String retryList) { - Set<Integer> s = new TreeSet<>(); - for (String t : retryList.split("[, ]")) { - try { - s.add(Integer.parseInt(t)); - } catch (NumberFormatException x) { - // ignore - } - } - this.retryList = s; - } - - public int getLastResponseCode() { - return lastResponseCode; - } - - public String getLastResponse() { - return lastResponse; - } - - /** - * Post a response to the URL of the BPEL engine. As long as the response code is one of those in - * the retryList, the post will be retried up to "retrycount" times with an interval (in seconds) - * of "retryInterval". If retryInterval is negative, then each successive retry interval will be - * double the previous one. - * @param toBpelStr the content (XML or JSON) to post - * @param bpelUrl the URL to post to - * @param isxml true if the content is XML, otherwise assumed to be JSON - * @return true if the post succeeded, false if all retries failed - */ - public boolean bpelPost(final String toBpelStr, final String bpelUrl, final boolean isxml) { - debug("Sending response to BPEL: " + toBpelStr); - int totalretries = 0; - int retryint = retryInterval; - while (true) { - sendOne(toBpelStr, bpelUrl, isxml); - // Note: really should handle response code 415 by switching between content types if needed - if (!retryList.contains(lastResponseCode)) { - debug("Got response code: " + lastResponseCode + ": returning."); - return true; - } - if (totalretries >= retryCount) { - debug("Retried " + totalretries + " times, giving up."); - logger.error("{} {} Could not deliver response to BPEL after {} tries: {}", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), totalretries, toBpelStr); - return false; - } - totalretries++; - int sleepinterval = retryint; - if (retryint < 0) { - // if retry interval is negative double the retry on each pass - sleepinterval = -retryint; - retryint *= 2; - } - debug("Sleeping for " + sleepinterval + " seconds."); - try { - Thread.sleep(sleepinterval * 1000L); - } catch (InterruptedException e) { - logger.debug("Exception while Thread sleep", e); - Thread.currentThread().interrupt(); - } - } - } - private void debug(String m) { - logger.debug(m); - } - private void sendOne(final String toBpelStr, final String bpelUrl, final boolean isxml) { - logger.debug("Sending to BPEL server: {}", bpelUrl); - logger.debug("Content is: {}", toBpelStr); - - //POST - HttpPost post = new HttpPost(bpelUrl); - if (credentials != null && !credentials.isEmpty()) - post.addHeader("Authorization", "Basic " + DatatypeConverter.printBase64Binary(credentials.getBytes())); - - logger.debug("HTTPPost Headers: {}", post.getAllHeaders()); - - //ContentType + /** Default socket timeout (in seconds) */ + public static final int DEFAULT_SOCKET_TIMEOUT = 5; + /** Default connect timeout (in seconds) */ + public static final int DEFAULT_CONNECT_TIMEOUT = 5; + /** By default, retry up to five times */ + public static final int DEFAULT_RETRY_COUNT = 5; + /** Default interval to wait between retries (in seconds), negative means use backoff algorithm */ + public static final int DEFAULT_RETRY_INTERVAL = -15; + /** Default list of response codes to trigger a retry */ + public static final String DEFAULT_RETRY_LIST = "408,429,500,502,503,504,900"; // 900 is "connection failed" + /** Default credentials */ + public static final String DEFAULT_CREDENTIALS = ""; + + @Autowired + private Environment env; + // Properties of the BPEL client -- all are configurable + private int socketTimeout; + private int connectTimeout; + private int retryCount; + private int retryInterval; + private Set<Integer> retryList; + private String credentials; + + // last response from BPEL engine + private int lastResponseCode; + private String lastResponse; + + /** + * Create a client to send results to the BPEL engine, using configuration from the MSO_PROP_VNF_ADAPTER properties. + */ + public BpelRestClient() { + socketTimeout = DEFAULT_SOCKET_TIMEOUT; + connectTimeout = DEFAULT_CONNECT_TIMEOUT; + retryCount = DEFAULT_RETRY_COUNT; + retryInterval = DEFAULT_RETRY_INTERVAL; + setRetryList(DEFAULT_RETRY_LIST); + credentials = DEFAULT_CREDENTIALS; + lastResponseCode = 0; + lastResponse = ""; + + } + + @PostConstruct + protected void init() { + + socketTimeout = env.getProperty(SOCKET_TIMEOUT_PROPERTY, Integer.class, DEFAULT_SOCKET_TIMEOUT); + connectTimeout = env.getProperty(CONN_TIMEOUT_PROPERTY, Integer.class, DEFAULT_CONNECT_TIMEOUT); + retryCount = env.getProperty(RETRY_COUNT_PROPERTY, Integer.class, DEFAULT_RETRY_COUNT); + retryInterval = env.getProperty(RETRY_INTERVAL_PROPERTY, Integer.class, DEFAULT_RETRY_INTERVAL); + setRetryList(env.getProperty(RETRY_LIST_PROPERTY, DEFAULT_RETRY_LIST)); + credentials = getEncryptedProperty(BPEL_AUTH_PROPERTY, DEFAULT_CREDENTIALS, ENCRYPTION_KEY_PROP); + } + + public int getSocketTimeout() { + return socketTimeout; + } + + public void setSocketTimeout(int socketTimeout) { + this.socketTimeout = socketTimeout; + } + + public int getConnectTimeout() { + return connectTimeout; + } + + public void setConnectTimeout(int connectTimeout) { + this.connectTimeout = connectTimeout; + } + + public int getRetryCount() { + return retryCount; + } + + public void setRetryCount(int retryCount) { + int newRetryCount = retryCount; + if (newRetryCount < 0) + newRetryCount = DEFAULT_RETRY_COUNT; + this.retryCount = newRetryCount; + } + + public int getRetryInterval() { + return retryInterval; + } + + public void setRetryInterval(int retryInterval) { + this.retryInterval = retryInterval; + } + + public String getCredentials() { + return credentials; + } + + public void setCredentials(String credentials) { + this.credentials = credentials; + } + + public String getRetryList() { + if (retryList.isEmpty()) + return ""; + String t = retryList.toString(); + return t.substring(1, t.length() - 1); + } + + public void setRetryList(String retryList) { + Set<Integer> s = new TreeSet<>(); + for (String t : retryList.split("[, ]")) { + try { + s.add(Integer.parseInt(t)); + } catch (NumberFormatException x) { + // ignore + } + } + this.retryList = s; + } + + public int getLastResponseCode() { + return lastResponseCode; + } + + public String getLastResponse() { + return lastResponse; + } + + /** + * Post a response to the URL of the BPEL engine. As long as the response code is one of those in the retryList, the + * post will be retried up to "retrycount" times with an interval (in seconds) of "retryInterval". If retryInterval + * is negative, then each successive retry interval will be double the previous one. + * + * @param toBpelStr the content (XML or JSON) to post + * @param bpelUrl the URL to post to + * @param isxml true if the content is XML, otherwise assumed to be JSON + * @return true if the post succeeded, false if all retries failed + */ + public boolean bpelPost(final String toBpelStr, final String bpelUrl, final boolean isxml) { + debug("Sending response to BPEL: " + toBpelStr); + int totalretries = 0; + int retryint = retryInterval; + while (true) { + sendOne(toBpelStr, bpelUrl, isxml); + // Note: really should handle response code 415 by switching between content types if needed + if (!retryList.contains(lastResponseCode)) { + debug("Got response code: " + lastResponseCode + ": returning."); + return true; + } + if (totalretries >= retryCount) { + debug("Retried " + totalretries + " times, giving up."); + logger.error("{} {} Could not deliver response to BPEL after {} tries: {}", + MessageEnum.RA_SEND_VNF_NOTIF_ERR, ErrorCode.BusinessProcesssError.getValue(), totalretries, + toBpelStr); + return false; + } + totalretries++; + int sleepinterval = retryint; + if (retryint < 0) { + // if retry interval is negative double the retry on each pass + sleepinterval = -retryint; + retryint *= 2; + } + debug("Sleeping for " + sleepinterval + " seconds."); + try { + Thread.sleep(sleepinterval * 1000L); + } catch (InterruptedException e) { + logger.debug("Exception while Thread sleep", e); + Thread.currentThread().interrupt(); + } + } + } + + private void debug(String m) { + logger.debug(m); + } + + private void sendOne(final String toBpelStr, final String bpelUrl, final boolean isxml) { + logger.debug("Sending to BPEL server: {}", bpelUrl); + logger.debug("Content is: {}", toBpelStr); + + // POST + HttpPost post = new HttpPost(bpelUrl); + if (credentials != null && !credentials.isEmpty()) + post.addHeader("Authorization", "Basic " + DatatypeConverter.printBase64Binary(credentials.getBytes())); + + logger.debug("HTTPPost Headers: {}", post.getAllHeaders()); + + // ContentType ContentType ctype = isxml ? ContentType.APPLICATION_XML : ContentType.APPLICATION_JSON; post.setEntity(new StringEntity(toBpelStr, ctype)); - //Timeouts - RequestConfig requestConfig = RequestConfig - .custom() - .setSocketTimeout(socketTimeout * 1000) - .setConnectTimeout(connectTimeout * 1000) - .build(); - post.setConfig(requestConfig); - + // Timeouts + RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout * 1000) + .setConnectTimeout(connectTimeout * 1000).build(); + post.setConfig(requestConfig); + try (CloseableHttpClient client = HttpClients.createDefault()) { - CloseableHttpResponse response = client.execute(post); - if (response != null) { - lastResponseCode = response.getStatusLine().getStatusCode(); - HttpEntity entity = response.getEntity(); - lastResponse = (entity != null) ? EntityUtils.toString(entity) : ""; - } else { - lastResponseCode = 900; - lastResponse = ""; - } - } catch (Exception e) { + CloseableHttpResponse response = client.execute(post); + if (response != null) { + lastResponseCode = response.getStatusLine().getStatusCode(); + HttpEntity entity = response.getEntity(); + lastResponse = (entity != null) ? EntityUtils.toString(entity) : ""; + } else { + lastResponseCode = 900; + lastResponse = ""; + } + } catch (Exception e) { logger.error("{} {} Exception - Error sending Bpel notification: {} ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), toBpelStr, e); - lastResponseCode = 900; - lastResponse = ""; - } - - logger.debug("Response code from BPEL server: {}", lastResponseCode); - logger.debug("Response body is: {}", lastResponse); - } - - private String getEncryptedProperty(String key, String defaultValue, String encryptionKey) { - if (env.getProperty(key) != null) { - try { - return CryptoUtils.decrypt(env.getProperty(key), env.getProperty(encryptionKey)); - } catch (GeneralSecurityException e) { - logger.debug("Exception while decrypting property: {} ", env.getProperty(key), e); - } - } - return defaultValue; - } + ErrorCode.BusinessProcesssError.getValue(), toBpelStr, e); + lastResponseCode = 900; + lastResponse = ""; + } + + logger.debug("Response code from BPEL server: {}", lastResponseCode); + logger.debug("Response body is: {}", lastResponse); + } + + private String getEncryptedProperty(String key, String defaultValue, String encryptionKey) { + if (env.getProperty(key) != null) { + try { + return CryptoUtils.decrypt(env.getProperty(key), env.getProperty(encryptionKey)); + } catch (GeneralSecurityException e) { + logger.debug("Exception while decrypting property: {} ", env.getProperty(key), e); + } + } + return defaultValue; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/CSAR.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/CSAR.java index bbfcef02e2..7786b872ef 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/CSAR.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/CSAR.java @@ -31,162 +31,159 @@ import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; - import org.onap.so.adapters.vdu.VduArtifact; import org.onap.so.adapters.vdu.VduArtifact.ArtifactType; import org.onap.so.adapters.vdu.VduModelInfo; import org.onap.so.adapters.vnf.exceptions.VnfException; - import com.google.common.io.Files; /** - * The purpose of this class is to create a CSAR byte array from Vdu inputs for the purpose - * of forwarding to a TOSCA orchestrator. + * The purpose of this class is to create a CSAR byte array from Vdu inputs for the purpose of forwarding to a TOSCA + * orchestrator. * * @author DeWayne * */ public class CSAR { - private static final String MANIFEST_FILENAME = "MANIFEST.MF"; - private VduModelInfo vduModel; - - public CSAR(VduModelInfo model){ - this.vduModel = model; - } - - /** - * Creates a byte array representation of a CSAR corresponding to the VduBlueprint arg in the - * constructor. - * - * @return - * @throws VnfException - */ - public byte[] create() { - File dir = Files.createTempDir(); - - /** - * Create subdir - */ - File metadir = new File(dir.getAbsolutePath() + "/TOSCA-Metadata"); - if (!metadir.mkdir()) { - throw new RuntimeException("CSAR TOSCA-Metadata directory create failed"); - } - - /** - * Organize model info for consumption - */ - VduArtifact mainTemplate = null; - List<VduArtifact> extraFiles = new ArrayList<>(); - for(VduArtifact artifact: vduModel.getArtifacts()) { - if(artifact.getType() == ArtifactType.MAIN_TEMPLATE ) { - mainTemplate = artifact; - } else{ - extraFiles.add(artifact); - } - } - - if (mainTemplate == null) { // make a dummy to avoid null pointers - mainTemplate = new VduArtifact("", new byte[0], null); - } - - /** - * Write template files - */ - try (OutputStream ofs = new FileOutputStream(new File(dir, mainTemplate.getName())); - PrintStream mfstream = new PrintStream(new File(metadir.getAbsolutePath() + '/' + MANIFEST_FILENAME)); - ) { - ofs.write(mainTemplate.getContent()); - - /** - * Write other files - */ - if (!extraFiles.isEmpty()) { - for (VduArtifact artifact: extraFiles){ - try (OutputStream out = new FileOutputStream(new File(dir, artifact.getName()));) { - out.write(artifact.getContent()); - } - } - } - - - /** - * Create manifest - */ - mfstream.println("TOSCA-Meta-File-Version: 1.0"); - mfstream.println("CSAR-Version: 1.1"); - mfstream.println("Created-by: ONAP"); - mfstream.println("Entry-Definitions: " + mainTemplate.getName()); - - /** - * ZIP it up - */ - ByteArrayOutputStream zipbytes = new ByteArrayOutputStream(); - ZipOutputStream zos = new ZipOutputStream(zipbytes); - compressTree(zos, "", dir, dir); - zos.close(); - return zipbytes.toByteArray(); - - } catch (Exception e) { - throw new RuntimeException("Failed to create CSAR: " + e.getMessage()); - } finally { - /** - * Clean up tmpdir - */ - deleteDirectory(dir); - } - } - - /** - * Private methods - */ - - /** - * Compresses (ZIPs) a directory tree - * - * @param dir - * @throws IOException - */ - private void compressTree(ZipOutputStream zos, String path, File basedir, File dir) throws IOException { - if (!dir.isDirectory()) - return; - - for (File f : dir.listFiles()) { - if (f.isDirectory()) { - String newpath = path + f.getName() + '/'; - ZipEntry entry = new ZipEntry(newpath); - zos.putNextEntry(entry); - zos.closeEntry(); - compressTree(zos, newpath, basedir, f); - } else { - ZipEntry ze = new ZipEntry( - f.getAbsolutePath().substring(basedir.getAbsolutePath().length() + 1).replaceAll("\\\\", "/")); - zos.putNextEntry(ze); - // read the file and write to ZipOutputStream - try (FileInputStream fis = new FileInputStream(f);) { - byte[] buffer = new byte[1024]; - int len; - while ((len = fis.read(buffer)) > 0) { - zos.write(buffer, 0, len); - } - } - zos.closeEntry(); - } - } - } - - private boolean deleteDirectory(File directory) { - if (directory.exists()) { - File[] files = directory.listFiles(); - if (null != files) { - for (int i = 0; i < files.length; i++) { - if (files[i].isDirectory()) { - deleteDirectory(files[i]); - } else { - files[i].delete(); - } - } - } - } - return (directory.delete()); - } + private static final String MANIFEST_FILENAME = "MANIFEST.MF"; + private VduModelInfo vduModel; + + public CSAR(VduModelInfo model) { + this.vduModel = model; + } + + /** + * Creates a byte array representation of a CSAR corresponding to the VduBlueprint arg in the constructor. + * + * @return + * @throws VnfException + */ + public byte[] create() { + File dir = Files.createTempDir(); + + /** + * Create subdir + */ + File metadir = new File(dir.getAbsolutePath() + "/TOSCA-Metadata"); + if (!metadir.mkdir()) { + throw new RuntimeException("CSAR TOSCA-Metadata directory create failed"); + } + + /** + * Organize model info for consumption + */ + VduArtifact mainTemplate = null; + List<VduArtifact> extraFiles = new ArrayList<>(); + for (VduArtifact artifact : vduModel.getArtifacts()) { + if (artifact.getType() == ArtifactType.MAIN_TEMPLATE) { + mainTemplate = artifact; + } else { + extraFiles.add(artifact); + } + } + + if (mainTemplate == null) { // make a dummy to avoid null pointers + mainTemplate = new VduArtifact("", new byte[0], null); + } + + /** + * Write template files + */ + try (OutputStream ofs = new FileOutputStream(new File(dir, mainTemplate.getName())); + PrintStream mfstream = + new PrintStream(new File(metadir.getAbsolutePath() + '/' + MANIFEST_FILENAME));) { + ofs.write(mainTemplate.getContent()); + + /** + * Write other files + */ + if (!extraFiles.isEmpty()) { + for (VduArtifact artifact : extraFiles) { + try (OutputStream out = new FileOutputStream(new File(dir, artifact.getName()));) { + out.write(artifact.getContent()); + } + } + } + + + /** + * Create manifest + */ + mfstream.println("TOSCA-Meta-File-Version: 1.0"); + mfstream.println("CSAR-Version: 1.1"); + mfstream.println("Created-by: ONAP"); + mfstream.println("Entry-Definitions: " + mainTemplate.getName()); + + /** + * ZIP it up + */ + ByteArrayOutputStream zipbytes = new ByteArrayOutputStream(); + ZipOutputStream zos = new ZipOutputStream(zipbytes); + compressTree(zos, "", dir, dir); + zos.close(); + return zipbytes.toByteArray(); + + } catch (Exception e) { + throw new RuntimeException("Failed to create CSAR: " + e.getMessage()); + } finally { + /** + * Clean up tmpdir + */ + deleteDirectory(dir); + } + } + + /** + * Private methods + */ + + /** + * Compresses (ZIPs) a directory tree + * + * @param dir + * @throws IOException + */ + private void compressTree(ZipOutputStream zos, String path, File basedir, File dir) throws IOException { + if (!dir.isDirectory()) + return; + + for (File f : dir.listFiles()) { + if (f.isDirectory()) { + String newpath = path + f.getName() + '/'; + ZipEntry entry = new ZipEntry(newpath); + zos.putNextEntry(entry); + zos.closeEntry(); + compressTree(zos, newpath, basedir, f); + } else { + ZipEntry ze = new ZipEntry( + f.getAbsolutePath().substring(basedir.getAbsolutePath().length() + 1).replaceAll("\\\\", "/")); + zos.putNextEntry(ze); + // read the file and write to ZipOutputStream + try (FileInputStream fis = new FileInputStream(f);) { + byte[] buffer = new byte[1024]; + int len; + while ((len = fis.read(buffer)) > 0) { + zos.write(buffer, 0, len); + } + } + zos.closeEntry(); + } + } + } + + private boolean deleteDirectory(File directory) { + if (directory.exists()) { + File[] files = directory.listFiles(); + if (null != files) { + for (int i = 0; i < files.length; i++) { + if (files[i].isDirectory()) { + deleteDirectory(files[i]); + } else { + files[i].delete(); + } + } + } + } + return (directory.delete()); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapter.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapter.java index c54b067a78..f6ea2261d7 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapter.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapter.java @@ -22,128 +22,126 @@ package org.onap.so.adapters.vnf; import java.util.Map; - import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebParam.Mode; import javax.jws.WebService; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import javax.xml.ws.Holder; - import org.onap.so.adapters.vnf.exceptions.VnfAlreadyExists; import org.onap.so.adapters.vnf.exceptions.VnfException; import org.onap.so.entity.MsoRequest; import org.onap.so.openstack.beans.VnfRollback; import org.onap.so.openstack.beans.VnfStatus; +import org.onap.so.openstack.mappers.MapAdapter; -@WebService (name="VnfAdapter", targetNamespace="http://org.onap.so/vnf") -public interface MsoVnfAdapter -{ - /** - * This is the "Create VNF" Web Service Endpoint definition. - */ - @WebMethod - public void createVnf (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vnfType") @XmlElement(required=true) String vnfType, - @WebParam(name="vnfVersion") @XmlElement(required=false) String vnfVersion, - @WebParam(name="vnfName") @XmlElement(required=true) String vnfName, - @WebParam(name="requestType") @XmlElement(required=false) String requestType, - @WebParam(name="volumeGroupHeatStackId") @XmlElement(required=false) String volumeGroupHeatStackId, - @WebParam(name="inputs") Map<String,Object> inputs, - @WebParam(name="failIfExists") Boolean failIfExists, - @WebParam(name="backout") Boolean backout, - @WebParam(name="enableBridge") Boolean enableBridge, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="vnfId", mode=Mode.OUT) Holder<String> vnfId, - @WebParam(name="outputs", mode=Mode.OUT) Holder<Map<String,String>> outputs, - @WebParam(name="rollback", mode=Mode.OUT) Holder<VnfRollback> rollback ) - throws VnfException, VnfAlreadyExists; +@WebService(name = "VnfAdapter", targetNamespace = "http://org.onap.so/vnf") +public interface MsoVnfAdapter { + /** + * This is the "Create VNF" Web Service Endpoint definition. + */ + @WebMethod + public void createVnf(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vnfType") @XmlElement(required = true) String vnfType, + @WebParam(name = "vnfVersion") @XmlElement(required = false) String vnfVersion, + @WebParam(name = "vnfName") @XmlElement(required = true) String vnfName, + @WebParam(name = "requestType") @XmlElement(required = false) String requestType, + @WebParam(name = "volumeGroupHeatStackId") @XmlElement(required = false) String volumeGroupHeatStackId, + @WebParam(name = "inputs") @XmlJavaTypeAdapter(MapAdapter.class) Map<String, Object> inputs, + @WebParam(name = "failIfExists") Boolean failIfExists, @WebParam(name = "backout") Boolean backout, + @WebParam(name = "enableBridge") Boolean enableBridge, @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "vnfId", mode = Mode.OUT) Holder<String> vnfId, + @WebParam(name = "outputs", mode = Mode.OUT) Holder<Map<String, String>> outputs, + @WebParam(name = "rollback", mode = Mode.OUT) Holder<VnfRollback> rollback) + throws VnfException, VnfAlreadyExists; - @WebMethod - public void updateVnf (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vnfType") @XmlElement(required=true) String vnfType, - @WebParam(name="vnfVersion") @XmlElement(required=false) String vnfVersion, - @WebParam(name="vnfName") @XmlElement(required=true) String vnfName, - @WebParam(name="requestType") @XmlElement(required=false) String requestType, - @WebParam(name="volumeGroupHeatStackId") @XmlElement(required=false) String volumeGroupHeatStackId, - @WebParam(name="inputs") Map<String,Object> inputs, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="outputs", mode=Mode.OUT) Holder<Map<String,String>> outputs, - @WebParam(name="rollback", mode=Mode.OUT) Holder<VnfRollback> rollback ) - throws VnfException; + @WebMethod + public void updateVnf(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vnfType") @XmlElement(required = true) String vnfType, + @WebParam(name = "vnfVersion") @XmlElement(required = false) String vnfVersion, + @WebParam(name = "vnfName") @XmlElement(required = true) String vnfName, + @WebParam(name = "requestType") @XmlElement(required = false) String requestType, + @WebParam(name = "volumeGroupHeatStackId") @XmlElement(required = false) String volumeGroupHeatStackId, + @WebParam(name = "inputs") @XmlJavaTypeAdapter(MapAdapter.class) Map<String, Object> inputs, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "outputs", mode = Mode.OUT) Holder<Map<String, String>> outputs, + @WebParam(name = "rollback", mode = Mode.OUT) Holder<VnfRollback> rollback) throws VnfException; - @WebMethod - public void queryVnf (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vnfName") @XmlElement(required=true) String vnfName, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="vnfExists", mode=Mode.OUT) Holder<Boolean> vnfExists, - @WebParam(name="vnfId", mode=Mode.OUT) Holder<String> vnfId, - @WebParam(name="status", mode=Mode.OUT) Holder<VnfStatus> status, - @WebParam(name="outputs", mode=Mode.OUT) Holder<Map<String,String>> outputs ) - throws VnfException; + @WebMethod + public void queryVnf(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vnfName") @XmlElement(required = true) String vnfName, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "vnfExists", mode = Mode.OUT) Holder<Boolean> vnfExists, + @WebParam(name = "vnfId", mode = Mode.OUT) Holder<String> vnfId, + @WebParam(name = "status", mode = Mode.OUT) Holder<VnfStatus> status, + @WebParam(name = "outputs", mode = Mode.OUT) Holder<Map<String, String>> outputs) throws VnfException; - @WebMethod - public void deleteVnf (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vnfName") @XmlElement(required=true) String vnfName, - @WebParam(name="request") MsoRequest msoRequest) - throws VnfException; + @WebMethod + public void deleteVnf(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vnfName") @XmlElement(required = true) String vnfName, + @WebParam(name = "request") MsoRequest msoRequest) throws VnfException; - @WebMethod - public void rollbackVnf (@WebParam(name="rollback") @XmlElement(required=true) VnfRollback rollback) - throws VnfException; + @WebMethod + public void rollbackVnf(@WebParam(name = "rollback") @XmlElement(required = true) VnfRollback rollback) + throws VnfException; - @WebMethod - public void createVfModule (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vnfType") @XmlElement(required=true) String vnfType, - @WebParam(name="vnfVersion") @XmlElement(required=false) String vnfVersion, - @WebParam(name="genericVnfId") @XmlElement(required=true) String genericVnfId, - @WebParam(name="vnfName") @XmlElement(required=true) String vnfName, - @WebParam(name="vfModuleId") @XmlElement(required=true) String vfModuleId, - @WebParam(name="requestType") @XmlElement(required=false) String requestType, - @WebParam(name="volumeGroupHeatStackId") @XmlElement(required=false) String volumeGroupHeatStackId, - @WebParam(name="baseVfHeatStackId") @XmlElement(required=false) String baseVfHeatStackId, - @WebParam(name = "modelCustomizationUuid") @XmlElement(required = false) String modelCustomizationUuid, - @WebParam(name="inputs") Map<String,Object> inputs, - @WebParam(name="failIfExists") Boolean failIfExists, - @WebParam(name="backout") Boolean backout, - @WebParam(name="enableBridge") Boolean enableBridge, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="vnfId", mode=Mode.OUT) Holder<String> vnfId, - @WebParam(name="outputs", mode=Mode.OUT) Holder<Map<String,String>> outputs, - @WebParam(name="rollback", mode=Mode.OUT) Holder<VnfRollback> rollback ) - throws VnfException, VnfAlreadyExists; + @WebMethod + public void createVfModule(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vnfType") @XmlElement(required = true) String vnfType, + @WebParam(name = "vnfVersion") @XmlElement(required = false) String vnfVersion, + @WebParam(name = "genericVnfId") @XmlElement(required = true) String genericVnfId, + @WebParam(name = "vnfName") @XmlElement(required = true) String vnfName, + @WebParam(name = "vfModuleId") @XmlElement(required = true) String vfModuleId, + @WebParam(name = "requestType") @XmlElement(required = false) String requestType, + @WebParam(name = "volumeGroupHeatStackId") @XmlElement(required = false) String volumeGroupHeatStackId, + @WebParam(name = "baseVfHeatStackId") @XmlElement(required = false) String baseVfHeatStackId, + @WebParam(name = "modelCustomizationUuid") @XmlElement(required = false) String modelCustomizationUuid, + @WebParam(name = "inputs") @XmlJavaTypeAdapter(MapAdapter.class) Map<String, Object> inputs, + @WebParam(name = "failIfExists") Boolean failIfExists, @WebParam(name = "backout") Boolean backout, + @WebParam(name = "enableBridge") Boolean enableBridge, @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "vnfId", mode = Mode.OUT) Holder<String> vnfId, + @WebParam(name = "outputs", mode = Mode.OUT) Holder<Map<String, String>> outputs, + @WebParam(name = "rollback", mode = Mode.OUT) Holder<VnfRollback> rollback) + throws VnfException, VnfAlreadyExists; - @WebMethod - public void deleteVfModule (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vfName") @XmlElement(required=true) String vfName, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name = "vfModuleOutputs", mode = Mode.OUT) Holder<Map<String, String>> vfModuleOutputs) - throws VnfException; + @WebMethod + public void deleteVfModule(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vfName") @XmlElement(required = true) String vfName, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "vfModuleOutputs", mode = Mode.OUT) Holder<Map<String, String>> vfModuleOutputs) + throws VnfException; - @WebMethod - public void updateVfModule (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vnfType") @XmlElement(required=true) String vnfType, - @WebParam(name="vnfVersion") @XmlElement(required=false) String vnfVersion, - @WebParam(name="vnfName") @XmlElement(required=true) String vnfName, - @WebParam(name="requestType") @XmlElement(required=false) String requestType, - @WebParam(name="volumeGroupHeatStackId") @XmlElement(required=false) String volumeGroupHeatStackId, - @WebParam(name="baseVfHeatStackId") @XmlElement(required=false) String baseVfHeatStackId, - @WebParam(name="vfModuleStackId") @XmlElement(required=false) String vfModuleStackId, - @WebParam(name = "modelCustomizationUuid") @XmlElement(required = false) String modelCustomizationUuid, - @WebParam(name="inputs") Map<String,Object> inputs, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="outputs", mode=Mode.OUT) Holder<Map<String,String>> outputs, - @WebParam(name="rollback", mode=Mode.OUT) Holder<VnfRollback> rollback ) - throws VnfException; + @WebMethod + public void updateVfModule(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vnfType") @XmlElement(required = true) String vnfType, + @WebParam(name = "vnfVersion") @XmlElement(required = false) String vnfVersion, + @WebParam(name = "vnfName") @XmlElement(required = true) String vnfName, + @WebParam(name = "requestType") @XmlElement(required = false) String requestType, + @WebParam(name = "volumeGroupHeatStackId") @XmlElement(required = false) String volumeGroupHeatStackId, + @WebParam(name = "baseVfHeatStackId") @XmlElement(required = false) String baseVfHeatStackId, + @WebParam(name = "vfModuleStackId") @XmlElement(required = false) String vfModuleStackId, + @WebParam(name = "modelCustomizationUuid") @XmlElement(required = false) String modelCustomizationUuid, + @WebParam(name = "inputs") @XmlJavaTypeAdapter(MapAdapter.class) Map<String, Object> inputs, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "outputs", mode = Mode.OUT) Holder<Map<String, String>> outputs, + @WebParam(name = "rollback", mode = Mode.OUT) Holder<VnfRollback> rollback) throws VnfException; - @WebMethod - public void healthCheck (); + @WebMethod + public void healthCheck(); } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsync.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsync.java index 6f61f0292c..13ca78a1f5 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsync.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsync.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -22,84 +22,85 @@ package org.onap.so.adapters.vnf; import java.util.Map; - import javax.jws.Oneway; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.xml.bind.annotation.XmlElement; - +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.onap.so.entity.MsoRequest; import org.onap.so.openstack.beans.VnfRollback; +import org.onap.so.openstack.mappers.MapAdapter; /** - * This webservice defines the Asynchronous versions of VNF adapter calls. - * The notification messages for final responses are documented elsewhere - * (by the client service WSDL). + * This webservice defines the Asynchronous versions of VNF adapter calls. The notification messages for final responses + * are documented elsewhere (by the client service WSDL). * */ -@WebService (name="VnfAdapterAsync", targetNamespace="http://org.onap.so/vnfA") -public interface MsoVnfAdapterAsync -{ - /** - * This is the "Create VNF" Web Service Endpoint definition. - */ - @WebMethod - @Oneway - public void createVnfA (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vnfType") @XmlElement(required=true) String vnfType, - @WebParam(name="vnfVersion") @XmlElement(required=false) String vnfVersion, - @WebParam(name="vnfName") @XmlElement(required=true) String vnfName, - @WebParam(name="requestType") @XmlElement(required=false) String requestType, - @WebParam(name="volumeGroupHeatStackId") @XmlElement(required=false) String volumeGroupHeatStackId, - @WebParam(name="inputs") Map<String,Object> inputs, - @WebParam(name="failIfExists") Boolean failIfExists, - @WebParam(name="backout") Boolean backout, - @WebParam(name="enableBridge") Boolean enableBridge, - @WebParam(name="messageId") @XmlElement(required=true) String messageId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); - - @WebMethod - @Oneway - public void updateVnfA (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vnfType") @XmlElement(required=true) String vnfType, - @WebParam(name="vnfVersion") @XmlElement(required=false) String vnfVersion, - @WebParam(name="vnfName") @XmlElement(required=true) String vnfName, - @WebParam(name="requestType") @XmlElement(required=false) String requestType, - @WebParam(name="volumeGroupHeatStackId") @XmlElement(required=false) String volumeGroupHeatStackId, - @WebParam(name="inputs") Map<String,Object> inputs, - @WebParam(name="messageId") @XmlElement(required=true) String messageId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); - - @WebMethod - @Oneway - public void queryVnfA (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vnfName") @XmlElement(required=true) String vnfName, - @WebParam(name="messageId") @XmlElement(required=true) String messageId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); +@WebService(name = "VnfAdapterAsync", targetNamespace = "http://org.onap.so/vnfA") +public interface MsoVnfAdapterAsync { + /** + * This is the "Create VNF" Web Service Endpoint definition. + */ + @WebMethod + @Oneway + public void createVnfA(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vnfType") @XmlElement(required = true) String vnfType, + @WebParam(name = "vnfVersion") @XmlElement(required = false) String vnfVersion, + @WebParam(name = "vnfName") @XmlElement(required = true) String vnfName, + @WebParam(name = "requestType") @XmlElement(required = false) String requestType, + @WebParam(name = "volumeGroupHeatStackId") @XmlElement(required = false) String volumeGroupHeatStackId, + @WebParam(name = "inputs") @XmlJavaTypeAdapter(MapAdapter.class) Map<String, Object> inputs, + @WebParam(name = "failIfExists") Boolean failIfExists, @WebParam(name = "backout") Boolean backout, + @WebParam(name = "enableBridge") Boolean enableBridge, + @WebParam(name = "messageId") @XmlElement(required = true) String messageId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "notificationUrl") @XmlElement(required = true) String notificationUrl); + + @WebMethod + @Oneway + public void updateVnfA(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vnfType") @XmlElement(required = true) String vnfType, + @WebParam(name = "vnfVersion") @XmlElement(required = false) String vnfVersion, + @WebParam(name = "vnfName") @XmlElement(required = true) String vnfName, + @WebParam(name = "requestType") @XmlElement(required = false) String requestType, + @WebParam(name = "volumeGroupHeatStackId") @XmlElement(required = false) String volumeGroupHeatStackId, + @WebParam(name = "inputs") @XmlJavaTypeAdapter(MapAdapter.class) Map<String, Object> inputs, + @WebParam(name = "messageId") @XmlElement(required = true) String messageId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "notificationUrl") @XmlElement(required = true) String notificationUrl); + + @WebMethod + @Oneway + public void queryVnfA(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vnfName") @XmlElement(required = true) String vnfName, + @WebParam(name = "messageId") @XmlElement(required = true) String messageId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "notificationUrl") @XmlElement(required = true) String notificationUrl); + + @WebMethod + @Oneway + public void deleteVnfA(@WebParam(name = "cloudSiteId") @XmlElement(required = true) String cloudSiteId, + @WebParam(name = "cloudOwner") @XmlElement(required = false) String cloudOwner, + @WebParam(name = "tenantId") @XmlElement(required = true) String tenantId, + @WebParam(name = "vnfName") @XmlElement(required = true) String vnfName, + @WebParam(name = "messageId") @XmlElement(required = true) String messageId, + @WebParam(name = "request") MsoRequest msoRequest, + @WebParam(name = "notificationUrl") @XmlElement(required = true) String notificationUrl); - @WebMethod - @Oneway - public void deleteVnfA (@WebParam(name="cloudSiteId") @XmlElement(required=true) String cloudSiteId, - @WebParam(name="tenantId") @XmlElement(required=true) String tenantId, - @WebParam(name="vnfName") @XmlElement(required=true) String vnfName, - @WebParam(name="messageId") @XmlElement(required=true) String messageId, - @WebParam(name="request") MsoRequest msoRequest, - @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); + @WebMethod + @Oneway + public void rollbackVnfA(@WebParam(name = "rollback") @XmlElement(required = true) VnfRollback rollback, + @WebParam(name = "messageId") @XmlElement(required = true) String messageId, + @WebParam(name = "notificationUrl") @XmlElement(required = true) String notificationUrl); - @WebMethod - @Oneway - public void rollbackVnfA (@WebParam(name="rollback") @XmlElement(required=true) VnfRollback rollback, - @WebParam(name="messageId") @XmlElement(required=true) String messageId, - @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); - - @WebMethod - public void healthCheckA (); + @WebMethod + public void healthCheckA(); } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsyncImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsyncImpl.java index fce14c718b..fe11fa07b4 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsyncImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsyncImpl.java @@ -10,9 +10,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -55,7 +55,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -@WebService(serviceName = "VnfAdapterAsync", endpointInterface = "org.onap.so.adapters.vnf.MsoVnfAdapterAsync", targetNamespace = "http://org.onap.so/vnfA") +@WebService(serviceName = "VnfAdapterAsync", endpointInterface = "org.onap.so.adapters.vnf.MsoVnfAdapterAsync", + targetNamespace = "http://org.onap.so/vnfA") @Component public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { @@ -63,10 +64,10 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { private static final String BPEL_AUTH_PROP = "org.onap.so.adapters.vnf.bpelauth"; private static final String ENCRYPTION_KEY_PROP = "org.onap.so.adapters.network.encryptionKey"; - + @Autowired private Environment environment; - + @Autowired private MsoVnfAdapterImpl vnfImpl; @@ -74,110 +75,81 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { * Health Check web method. Does nothing but return to show the adapter is deployed. */ @Override - public void healthCheckA () { - logger.debug ("Health check call in VNF Adapter"); + public void healthCheckA() { + logger.debug("Health check call in VNF Adapter"); } /** - * This is the asynchronous "Create VNF" web service implementation. - * It will create a new VNF of the requested type in the specified cloud - * and tenant. The tenant must exist before this service is called. + * This is the asynchronous "Create VNF" web service implementation. It will create a new VNF of the requested type + * in the specified cloud and tenant. The tenant must exist before this service is called. * - * If a VNF with the same name already exists, this can be considered a - * success or failure, depending on the value of the 'failIfExists' parameter. + * If a VNF with the same name already exists, this can be considered a success or failure, depending on the value + * of the 'failIfExists' parameter. * - * All VNF types will be defined in the MSO catalog. The caller must request - * one of these pre-defined types or an error will be returned. Within the - * catalog, each VNF type references (among other things) a Heat template - * which is used to deploy the required VNF artifacts (VMs, networks, etc.) - * to the cloud. + * All VNF types will be defined in the MSO catalog. The caller must request one of these pre-defined types or an + * error will be returned. Within the catalog, each VNF type references (among other things) a Heat template which + * is used to deploy the required VNF artifacts (VMs, networks, etc.) to the cloud. * - * Depending on the Heat template, a variable set of input parameters will - * be defined, some of which are required. The caller is responsible to - * pass the necessary input data for the VNF or an error will be thrown. + * Depending on the Heat template, a variable set of input parameters will be defined, some of which are required. + * The caller is responsible to pass the necessary input data for the VNF or an error will be thrown. * - * The method sends an asynchronous response to the notification URL when - * processing completes. The createAsyncResponse contains the vnfId (the - * canonical name of the stack), a Map of VNF output attributes, and a - * VnfRollback object. This last object can be passed as-is to the - * rollbackVnf operation to undo everything that was created for the VNF. - * This is useful if a VNF is successfully created but the orchestrator - * fails on a subsequent operation. + * The method sends an asynchronous response to the notification URL when processing completes. The + * createAsyncResponse contains the vnfId (the canonical name of the stack), a Map of VNF output attributes, and a + * VnfRollback object. This last object can be passed as-is to the rollbackVnf operation to undo everything that was + * created for the VNF. This is useful if a VNF is successfully created but the orchestrator fails on a subsequent + * operation. * - * Note: this method is implemented by calling the synchronous web method - * and translating the response to an asynchronous notification. + * Note: this method is implemented by calling the synchronous web method and translating the response to an + * asynchronous notification. * * @param cloudSiteId CLLI code of the cloud site in which to create the VNF + * @param cloudOwner cloud owner of the cloud site in which to create the VNF * @param tenantId Openstack tenant identifier * @param vnfType VNF type key, should match a VNF definition in catalog DB * @param vnfName Name to be assigned to the new VNF * @param inputs Map of key=value inputs for VNF stack creation - * @param failIfExists Flag whether already existing VNF should be considered - * a success or failure + * @param failIfExists Flag whether already existing VNF should be considered a success or failure * @param msoRequest Request tracking information for logs * @param notificationURL the target URL for asynchronous response */ @Override - public void createVnfA (String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - Map <String, Object> inputs, - Boolean failIfExists, - Boolean backout, - Boolean enableBridge, - String messageId, - MsoRequest msoRequest, - String notificationUrl) { + public void createVnfA(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, String vnfVersion, + String vnfName, String requestType, String volumeGroupHeatStackId, Map<String, Object> inputs, + Boolean failIfExists, Boolean backout, Boolean enableBridge, String messageId, MsoRequest msoRequest, + String notificationUrl) { logger.info("{} createVnfA", MessageEnum.RA_ASYNC_CREATE_VNF); // Use the synchronous method to perform the actual Create MsoVnfAdapter vnfAdapter = vnfImpl; // Synchronous Web Service Outputs - Holder <String> vnfId = new Holder <> (); - Holder <Map <String, String>> outputs = new Holder <> (); - Holder <VnfRollback> vnfRollback = new Holder <> (); + Holder<String> vnfId = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + Holder<VnfRollback> vnfRollback = new Holder<>(); try { - vnfAdapter.createVnf (cloudSiteId, - tenantId, - vnfType, - vnfVersion, - vnfName, - requestType, - volumeGroupHeatStackId, - inputs, - failIfExists, - backout, - enableBridge, - msoRequest, - vnfId, - outputs, - vnfRollback); + vnfAdapter.createVnf(cloudSiteId, cloudOwner, tenantId, vnfType, vnfVersion, vnfName, requestType, + volumeGroupHeatStackId, inputs, failIfExists, backout, enableBridge, msoRequest, vnfId, outputs, + vnfRollback); } catch (VnfException e) { logger.error("{} {} VnfException in createVnfA ", MessageEnum.RA_CREATE_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); org.onap.so.adapters.vnf.async.client.MsoExceptionCategory exCat = null; String eMsg = null; try { - eMsg = e.getFaultInfo ().getMessage (); - exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory.fromValue (e.getFaultInfo () - .getCategory () - .name ()); + eMsg = e.getFaultInfo().getMessage(); + exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory + .fromValue(e.getFaultInfo().getCategory().name()); } catch (Exception e1) { logger.error("{} {} Exception - Fault info ", MessageEnum.RA_FAULT_INFO_EXC, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } // Build and send Asynchronous error response try { - VnfAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.createVnfNotification (messageId, false, exCat, eMsg, null, null, null); + VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.createVnfNotification(messageId, false, exCat, eMsg, null, null, null); } catch (Exception e1) { logger.error("{} {} Exception sending createVnf notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } logger.info("{}", MessageEnum.RA_ASYNC_CREATE_VNF_COMPLETE); return; @@ -185,34 +157,21 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { logger.debug("Async Create VNF: {} VnfId:{}", vnfName, vnfId.value); // Build and send Asynchronous response try { - VnfAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.createVnfNotification (messageId, - true, - null, - null, - vnfId.value, - copyCreateOutputs (outputs), - copyVrb (vnfRollback)); + VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.createVnfNotification(messageId, true, null, null, vnfId.value, copyCreateOutputs(outputs), + copyVrb(vnfRollback)); } catch (Exception e) { logger.error("{} {} Exception sending createVnf notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); } logger.info("{} createVnfA", MessageEnum.RA_ASYNC_CREATE_VNF_COMPLETE); return; } @Override - public void updateVnfA (String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - Map <String, Object> inputs, - String messageId, - MsoRequest msoRequest, - String notificationUrl) { + public void updateVnfA(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, String vnfVersion, + String vnfName, String requestType, String volumeGroupHeatStackId, Map<String, Object> inputs, + String messageId, MsoRequest msoRequest, String notificationUrl) { logger.info("{} UpdateVnfA", MessageEnum.RA_ASYNC_UPDATE_VNF); @@ -220,33 +179,33 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { MsoVnfAdapter vnfAdapter = vnfImpl; // Synchronous Web Service Outputs - Holder <String> vnfId = new Holder <> (); - Holder <Map <String, String>> outputs = new Holder <> (); - Holder <VnfRollback> vnfRollback = new Holder <> (); + Holder<String> vnfId = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + Holder<VnfRollback> vnfRollback = new Holder<>(); try { - vnfAdapter.updateVnf (cloudSiteId, tenantId, vnfType,vnfVersion, vnfName, requestType, volumeGroupHeatStackId, inputs, msoRequest, outputs, vnfRollback); + vnfAdapter.updateVnf(cloudSiteId, cloudOwner, tenantId, vnfType, vnfVersion, vnfName, requestType, + volumeGroupHeatStackId, inputs, msoRequest, outputs, vnfRollback); } catch (VnfException e) { logger.error("{} {} Exception sending updateVnf notification ", MessageEnum.RA_UPDATE_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); org.onap.so.adapters.vnf.async.client.MsoExceptionCategory exCat = null; String eMsg = null; try { - eMsg = e.getFaultInfo ().getMessage (); - exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory.fromValue (e.getFaultInfo () - .getCategory () - .name ()); + eMsg = e.getFaultInfo().getMessage(); + exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory + .fromValue(e.getFaultInfo().getCategory().name()); } catch (Exception e1) { logger.error("{} {} Exception - fault info ", MessageEnum.RA_FAULT_INFO_EXC, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } // Build and send Asynchronous error response try { - VnfAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.updateVnfNotification (messageId, false, exCat, eMsg, null, null); + VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.updateVnfNotification(messageId, false, exCat, eMsg, null, null); } catch (Exception e1) { logger.error("{} {} Exception sending updateVnf notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } logger.info("{} UpdateVnfA", MessageEnum.RA_ASYNC_UPDATE_VNF_COMPLETE); return; @@ -254,41 +213,34 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { logger.debug("Async Update VNF: {} VnfId:{}", vnfName, vnfId.value); // Build and send Asynchronous response try { - VnfAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.updateVnfNotification (messageId, - true, - null, - null, - copyUpdateOutputs (outputs), - copyVrb (vnfRollback)); + VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.updateVnfNotification(messageId, true, null, null, copyUpdateOutputs(outputs), + copyVrb(vnfRollback)); } catch (Exception e) { logger.error("{} {} Exception sending updateVnf notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); } logger.info("{} UpdateVnfA", MessageEnum.RA_ASYNC_UPDATE_VNF_COMPLETE); return; } /** - * This is the "Query VNF" web service implementation. - * It will look up a VNF by name or ID in the specified cloud and tenant. + * This is the "Query VNF" web service implementation. It will look up a VNF by name or ID in the specified cloud + * and tenant. * - * The method returns an indicator that the VNF exists, its Openstack internal - * ID, its status, and the set of outputs (from when the stack was created). + * The method returns an indicator that the VNF exists, its Openstack internal ID, its status, and the set of + * outputs (from when the stack was created). * * @param cloudSiteId CLLI code of the cloud site in which to query + * @param cloudOwner cloud owner of cloud site in which to query * @param tenantId Openstack tenant identifier * @param vnfName VNF Name or Openstack ID * @param msoRequest Request tracking information for logs * @param notificationURL the target URL for asynchronous response */ @Override - public void queryVnfA (String cloudSiteId, - String tenantId, - String vnfName, - String messageId, - MsoRequest msoRequest, - String notificationUrl) { + public void queryVnfA(String cloudSiteId, String cloudOwner, String tenantId, String vnfName, String messageId, + MsoRequest msoRequest, String notificationUrl) { String serviceName = "QueryVnfA"; logger.info("{}", MessageEnum.RA_ASYNC_QUERY_VNF); @@ -297,59 +249,54 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { MsoVnfAdapter vnfAdapter = vnfImpl; // Synchronous Web Service Outputs - Holder <Boolean> vnfExists = new Holder <> (); - Holder <String> vnfId = new Holder <> (); - Holder <VnfStatus> status = new Holder <> (); - Holder <Map <String, String>> outputs = new Holder <> (); + Holder<Boolean> vnfExists = new Holder<>(); + Holder<String> vnfId = new Holder<>(); + Holder<VnfStatus> status = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); try { - vnfAdapter.queryVnf (cloudSiteId, tenantId, vnfName, msoRequest, vnfExists, vnfId, status, outputs); + vnfAdapter.queryVnf(cloudSiteId, cloudOwner, tenantId, vnfName, msoRequest, vnfExists, vnfId, status, + outputs); } catch (VnfException e) { logger.error("{} {} Exception sending queryVnfA notification ", MessageEnum.RA_QUERY_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); org.onap.so.adapters.vnf.async.client.MsoExceptionCategory exCat = null; String eMsg = null; try { - eMsg = e.getFaultInfo ().getMessage (); - exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory.fromValue (e.getFaultInfo () - .getCategory () - .name ()); + eMsg = e.getFaultInfo().getMessage(); + exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory + .fromValue(e.getFaultInfo().getCategory().name()); } catch (Exception e1) { logger.error("{} {} Exception - fault info ", MessageEnum.RA_FAULT_INFO_EXC, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } // Build and send Asynchronous error response try { - VnfAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.queryVnfNotification (messageId, false, exCat, eMsg, null, null, null, null); + VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.queryVnfNotification(messageId, false, exCat, eMsg, null, null, null, null); } catch (Exception e1) { logger.error("{} {} Exception sending queryVnf notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } logger.info("{} queryVnfA", MessageEnum.RA_ASYNC_QUERY_VNF_COMPLETE); return; } if (!vnfExists.value) { - logger.debug ("Async Query, VNF not found"); + logger.debug("Async Query, VNF not found"); } else { logger.debug("Async Query, VNF={}, status={}", vnfId.value, status.value); } // Build and send Asynchronous response try { - VnfAdapterNotify notifyPort = getNotifyEP (notificationUrl); - org.onap.so.adapters.vnf.async.client.VnfStatus vnfS = org.onap.so.adapters.vnf.async.client.VnfStatus.fromValue (status.value.name ()); - notifyPort.queryVnfNotification (messageId, - true, - null, - null, - vnfExists.value, - vnfId.value, - vnfS, - copyQueryOutputs (outputs)); + VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl); + org.onap.so.adapters.vnf.async.client.VnfStatus vnfS = + org.onap.so.adapters.vnf.async.client.VnfStatus.fromValue(status.value.name()); + notifyPort.queryVnfNotification(messageId, true, null, null, vnfExists.value, vnfId.value, vnfS, + copyQueryOutputs(outputs)); } catch (Exception e) { logger.error("{} {} Exception sending queryVnf notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); } logger.info("{} queryVnfA", MessageEnum.RA_ASYNC_QUERY_VNF_COMPLETE); @@ -357,24 +304,21 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { } /** - * This is the Asynchronous "Delete VNF" web service implementation. - * It will delete a VNF by name or ID in the specified cloud and tenant. + * This is the Asynchronous "Delete VNF" web service implementation. It will delete a VNF by name or ID in the + * specified cloud and tenant. * * The method has no outputs. * * @param cloudSiteId CLLI code of the cloud site in which to delete + * @param cloudOwner cloud owner of cloud site in which to delete * @param tenantId Openstack tenant identifier * @param vnfName VNF Name or Openstack ID * @param msoRequest Request tracking information for logs * @param notificationURL the target URL for asynchronous response */ @Override - public void deleteVnfA (String cloudSiteId, - String tenantId, - String vnfName, - String messageId, - MsoRequest msoRequest, - String notificationUrl) { + public void deleteVnfA(String cloudSiteId, String cloudOwner, String tenantId, String vnfName, String messageId, + MsoRequest msoRequest, String notificationUrl) { String serviceName = "DeleteVnfA"; logger.info("{}", MessageEnum.RA_ASYNC_DELETE_VNF); @@ -383,28 +327,27 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { MsoVnfAdapter vnfAdapter = vnfImpl; try { - vnfAdapter.deleteVnf (cloudSiteId, tenantId, vnfName, msoRequest); + vnfAdapter.deleteVnf(cloudSiteId, cloudOwner, tenantId, vnfName, msoRequest); } catch (VnfException e) { logger.error("{} {} Exception sending deleteVnfA notification ", MessageEnum.RA_DELETE_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); org.onap.so.adapters.vnf.async.client.MsoExceptionCategory exCat = null; String eMsg = null; try { - eMsg = e.getFaultInfo ().getMessage (); - exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory.fromValue (e.getFaultInfo () - .getCategory () - .name ()); + eMsg = e.getFaultInfo().getMessage(); + exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory + .fromValue(e.getFaultInfo().getCategory().name()); } catch (Exception e1) { logger.error("{} {} Exception - fault info ", MessageEnum.RA_FAULT_INFO_EXC, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } // Build and send Asynchronous error response try { - VnfAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.deleteVnfNotification (messageId, false, exCat, eMsg); + VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.deleteVnfNotification(messageId, false, exCat, eMsg); } catch (Exception e1) { logger.error("{} {} Exception sending deleteVnfA notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } logger.info("{} deleteVnfA", MessageEnum.RA_ASYNC_DELETE_VNF_COMPLETE); return; @@ -413,12 +356,12 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { logger.debug("Async Delete VNF: {}", vnfName); // Build and send Asynchronous response try { - VnfAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.deleteVnfNotification (messageId, true, null, null); + VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.deleteVnfNotification(messageId, true, null, null); } catch (Exception e) { logger.error("{} {} Exception sending deleteVnfA notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); } logger.info("{} deleteVnfA", MessageEnum.RA_ASYNC_DELETE_VNF_COMPLETE); @@ -426,13 +369,12 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { } /** - * This web service endpoint will rollback a previous Create VNF operation. - * A rollback object is returned to the client in a successful creation - * response. The client can pass that object as-is back to the rollbackVnf - * operation to undo the creation. + * This web service endpoint will rollback a previous Create VNF operation. A rollback object is returned to the + * client in a successful creation response. The client can pass that object as-is back to the rollbackVnf operation + * to undo the creation. */ @Override - public void rollbackVnfA (VnfRollback rollback, String messageId, String notificationUrl) { + public void rollbackVnfA(VnfRollback rollback, String messageId, String notificationUrl) { // rollback may be null (e.g. if stack already existed when Create was called) if (rollback == null) { logger.info("{} rollbackVnfA: Empty Rollback: No action to perform", MessageEnum.RA_ROLLBACK_NULL); @@ -445,200 +387,199 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync { MsoVnfAdapter vnfAdapter = vnfImpl; try { - vnfAdapter.rollbackVnf (rollback); + vnfAdapter.rollbackVnf(rollback); } catch (VnfException e) { logger.error("{} {} Exception sending rollbackVnfA notification ", MessageEnum.RA_ROLLBACK_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); org.onap.so.adapters.vnf.async.client.MsoExceptionCategory exCat = null; String eMsg = null; try { - eMsg = e.getFaultInfo ().getMessage (); - exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory.fromValue (e.getFaultInfo () - .getCategory () - .name ()); + eMsg = e.getFaultInfo().getMessage(); + exCat = org.onap.so.adapters.vnf.async.client.MsoExceptionCategory + .fromValue(e.getFaultInfo().getCategory().name()); } catch (Exception e1) { logger.error("{} {} Exception - fault info ", MessageEnum.RA_FAULT_INFO_EXC, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } // Build and send Asynchronous error response try { - VnfAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.rollbackVnfNotification (messageId, false, exCat, eMsg); + VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.rollbackVnfNotification(messageId, false, exCat, eMsg); } catch (Exception e1) { logger.error("{} {} Exception sending rollbackVnfA notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } logger.info("{} rollbackVnfA", MessageEnum.RA_ASYNC_ROLLBACK_VNF_COMPLETE); return; } - logger.debug ("Async Rollback VNF:" + rollback.getVnfId ()); + logger.debug("Async Rollback VNF:" + rollback.getVnfId()); // Build and send Asynchronous response try { - VnfAdapterNotify notifyPort = getNotifyEP (notificationUrl); - notifyPort.rollbackVnfNotification (messageId, true, null, null); + VnfAdapterNotify notifyPort = getNotifyEP(notificationUrl); + notifyPort.rollbackVnfNotification(messageId, true, null, null); } catch (Exception e) { logger.error("{} {} Exception sending rollbackVnfA notification ", MessageEnum.RA_SEND_VNF_NOTIF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); } logger.info("{} rollbackVnfA", MessageEnum.RA_ASYNC_ROLLBACK_VNF_COMPLETE); return; } - private org.onap.so.adapters.vnf.async.client.VnfRollback copyVrb (Holder <VnfRollback> hVrb) { - org.onap.so.adapters.vnf.async.client.VnfRollback cvrb = new org.onap.so.adapters.vnf.async.client.VnfRollback (); + private org.onap.so.adapters.vnf.async.client.VnfRollback copyVrb(Holder<VnfRollback> hVrb) { + org.onap.so.adapters.vnf.async.client.VnfRollback cvrb = + new org.onap.so.adapters.vnf.async.client.VnfRollback(); if (hVrb != null && hVrb.value != null) { - org.onap.so.adapters.vnf.async.client.MsoRequest cmr = new org.onap.so.adapters.vnf.async.client.MsoRequest (); + org.onap.so.adapters.vnf.async.client.MsoRequest cmr = + new org.onap.so.adapters.vnf.async.client.MsoRequest(); - cvrb.setCloudSiteId (hVrb.value.getCloudSiteId ()); + cvrb.setCloudSiteId(hVrb.value.getCloudSiteId()); if (hVrb.value.getMsoRequest() != null) { - cmr.setRequestId (hVrb.value.getMsoRequest ().getRequestId ()); - cmr.setServiceInstanceId (hVrb.value.getMsoRequest ().getServiceInstanceId ()); + cmr.setRequestId(hVrb.value.getMsoRequest().getRequestId()); + cmr.setServiceInstanceId(hVrb.value.getMsoRequest().getServiceInstanceId()); } else { - cmr.setRequestId (null); - cmr.setServiceInstanceId (null); + cmr.setRequestId(null); + cmr.setServiceInstanceId(null); } - cvrb.setMsoRequest (cmr); - cvrb.setVnfId (hVrb.value.getVnfId ()); - cvrb.setTenantId (hVrb.value.getTenantId ()); - cvrb.setTenantCreated (hVrb.value.getTenantCreated ()); - cvrb.setVnfCreated (hVrb.value.getVnfCreated ()); + cvrb.setMsoRequest(cmr); + cvrb.setVnfId(hVrb.value.getVnfId()); + cvrb.setTenantId(hVrb.value.getTenantId()); + cvrb.setTenantCreated(hVrb.value.getTenantCreated()); + cvrb.setVnfCreated(hVrb.value.getVnfCreated()); } return cvrb; } - private CreateVnfNotification.Outputs copyCreateOutputs (Holder <Map <String, String>> hMap) { + private CreateVnfNotification.Outputs copyCreateOutputs(Holder<Map<String, String>> hMap) { - CreateVnfNotification.Outputs outputs = new CreateVnfNotification.Outputs (); + CreateVnfNotification.Outputs outputs = new CreateVnfNotification.Outputs(); if (hMap != null && hMap.value != null) { - Map <String, String> sMap = new HashMap <> (); + Map<String, String> sMap = new HashMap<>(); sMap = hMap.value; - CreateVnfNotification.Outputs.Entry entry = new CreateVnfNotification.Outputs.Entry (); + CreateVnfNotification.Outputs.Entry entry = new CreateVnfNotification.Outputs.Entry(); - for (String key : sMap.keySet ()) { - entry.setKey (key); - entry.setValue (sMap.get (key)); - outputs.getEntry ().add (entry); + for (String key : sMap.keySet()) { + entry.setKey(key); + entry.setValue(sMap.get(key)); + outputs.getEntry().add(entry); } } return outputs; } - private UpdateVnfNotification.Outputs copyUpdateOutputs (Holder <Map <String, String>> hMap) { + private UpdateVnfNotification.Outputs copyUpdateOutputs(Holder<Map<String, String>> hMap) { - UpdateVnfNotification.Outputs outputs = new UpdateVnfNotification.Outputs (); + UpdateVnfNotification.Outputs outputs = new UpdateVnfNotification.Outputs(); if (hMap != null && hMap.value != null) { - Map <String, String> sMap = new HashMap <> (); + Map<String, String> sMap = new HashMap<>(); sMap = hMap.value; - UpdateVnfNotification.Outputs.Entry entry = new UpdateVnfNotification.Outputs.Entry (); - - for (Map.Entry<String,String> mapEntry : sMap.entrySet ()) { - String key = mapEntry.getKey(); - String value = mapEntry.getValue(); - entry.setKey (key); - entry.setValue (value); - outputs.getEntry ().add (entry); + UpdateVnfNotification.Outputs.Entry entry = new UpdateVnfNotification.Outputs.Entry(); + + for (Map.Entry<String, String> mapEntry : sMap.entrySet()) { + String key = mapEntry.getKey(); + String value = mapEntry.getValue(); + entry.setKey(key); + entry.setValue(value); + outputs.getEntry().add(entry); } } return outputs; } - private QueryVnfNotification.Outputs copyQueryOutputs (Holder <Map <String, String>> hMap) { + private QueryVnfNotification.Outputs copyQueryOutputs(Holder<Map<String, String>> hMap) { - QueryVnfNotification.Outputs outputs = new QueryVnfNotification.Outputs (); + QueryVnfNotification.Outputs outputs = new QueryVnfNotification.Outputs(); if (hMap != null && hMap.value != null) { - Map <String, String> sMap = new HashMap <> (); + Map<String, String> sMap = new HashMap<>(); sMap = hMap.value; - QueryVnfNotification.Outputs.Entry entry = new QueryVnfNotification.Outputs.Entry (); + QueryVnfNotification.Outputs.Entry entry = new QueryVnfNotification.Outputs.Entry(); - for (Map.Entry<String,String> mapEntry : sMap.entrySet ()) { - String key = mapEntry.getKey(); - String value = mapEntry.getValue(); - entry.setKey (key); - entry.setValue (value); - outputs.getEntry ().add (entry); + for (Map.Entry<String, String> mapEntry : sMap.entrySet()) { + String key = mapEntry.getKey(); + String value = mapEntry.getValue(); + entry.setKey(key); + entry.setValue(value); + outputs.getEntry().add(entry); } } return outputs; } - private VnfAdapterNotify getNotifyEP (String notificationUrl) { + private VnfAdapterNotify getNotifyEP(String notificationUrl) { URL warWsdlLoc = null; try { - warWsdlLoc = Thread.currentThread ().getContextClassLoader ().getResource ("VnfAdapterNotify.wsdl"); + warWsdlLoc = Thread.currentThread().getContextClassLoader().getResource("VnfAdapterNotify.wsdl"); } catch (Exception e) { logger.error("{} {} Exception - WSDL not found ", MessageEnum.RA_WSDL_NOT_FOUND, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); } if (warWsdlLoc == null) { logger.error("{} {} WSDL not found", MessageEnum.RA_WSDL_NOT_FOUND, - ErrorCode.BusinessProcesssError.getValue()); + ErrorCode.BusinessProcesssError.getValue()); } else { try { logger.debug("VnfAdpaterNotify.wsdl location:{}", warWsdlLoc.toURI().toString()); } catch (Exception e) { logger.error("{} {} Exception - WSDL URL convention ", MessageEnum.RA_WSDL_URL_CONVENTION_EXC, - ErrorCode.BusinessProcesssError.getValue(), e); + ErrorCode.BusinessProcesssError.getValue(), e); } } - VnfAdapterNotify_Service notifySvc = new VnfAdapterNotify_Service (warWsdlLoc, - new QName ("http://org.onap.so/vnfNotify", - "vnfAdapterNotify")); + VnfAdapterNotify_Service notifySvc = + new VnfAdapterNotify_Service(warWsdlLoc, new QName("http://org.onap.so/vnfNotify", "vnfAdapterNotify")); - VnfAdapterNotify notifyPort = notifySvc.getMsoVnfAdapterAsyncImplPort (); + VnfAdapterNotify notifyPort = notifySvc.getMsoVnfAdapterAsyncImplPort(); BindingProvider bp = (BindingProvider) notifyPort; URL epUrl = null; try { - epUrl = new URL (notificationUrl); + epUrl = new URL(notificationUrl); } catch (MalformedURLException e1) { logger.error("{} {} MalformedURLException ", MessageEnum.RA_INIT_NOTIF_EXC, - ErrorCode.BusinessProcesssError.getValue(), e1); + ErrorCode.BusinessProcesssError.getValue(), e1); } - if(null != epUrl) { + if (null != epUrl) { logger.debug("Notification Endpoint URL: {}", epUrl.toExternalForm()); - bp.getRequestContext ().put (BindingProvider.ENDPOINT_ADDRESS_PROPERTY, epUrl.toExternalForm ()); - } - else { - logger.debug ("epUrl is NULL:"); + bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, epUrl.toExternalForm()); + } else { + logger.debug("epUrl is NULL:"); } // authentication try { - Map <String, Object> reqCtx = bp.getRequestContext (); - Map <String, List <String>> headers = new HashMap <> (); + Map<String, Object> reqCtx = bp.getRequestContext(); + Map<String, List<String>> headers = new HashMap<>(); String userCredentials = this.getEncryptedProperty(BPEL_AUTH_PROP, "", ENCRYPTION_KEY_PROP); - String basicAuth = "Basic " + DatatypeConverter.printBase64Binary (userCredentials.getBytes ()); - reqCtx.put (MessageContext.HTTP_REQUEST_HEADERS, headers); - headers.put ("Authorization", Collections.singletonList (basicAuth)); + String basicAuth = "Basic " + DatatypeConverter.printBase64Binary(userCredentials.getBytes()); + reqCtx.put(MessageContext.HTTP_REQUEST_HEADERS, headers); + headers.put("Authorization", Collections.singletonList(basicAuth)); } catch (Exception e) { logger.error("{} {} Exception - Unable to set authorization in callback request ", - MessageEnum.RA_SET_CALLBACK_AUTH_EXC, ErrorCode.BusinessProcesssError.getValue(), e); + MessageEnum.RA_SET_CALLBACK_AUTH_EXC, ErrorCode.BusinessProcesssError.getValue(), e); } return notifyPort; } - + public String getEncryptedProperty(String key, String defaultValue, String encryptionKey) { - try { - return CryptoUtils.decrypt(this.environment.getProperty(key), this.environment.getProperty(encryptionKey)); - } catch (GeneralSecurityException e) { - logger.debug("Exception while decrypting property: {} ", this.environment.getProperty(key), e); - } - return defaultValue; - - } + try { + return CryptoUtils.decrypt(this.environment.getProperty(key), this.environment.getProperty(encryptionKey)); + } catch (GeneralSecurityException e) { + logger.debug("Exception while decrypting property: {} ", this.environment.getProperty(key), e); + } + return defaultValue; + + } } 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 af09e5ac0c..5c7e70673b 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 @@ -33,14 +33,24 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.TimeUnit; - import javax.jws.WebService; import javax.xml.ws.Holder; - +import org.apache.commons.collections.CollectionUtils; +import org.onap.so.adapters.valet.GenericValetResponse; +import org.onap.so.adapters.valet.ValetClient; +import org.onap.so.adapters.valet.beans.HeatRequest; +import org.onap.so.adapters.valet.beans.ValetConfirmResponse; +import org.onap.so.adapters.valet.beans.ValetCreateResponse; +import org.onap.so.adapters.valet.beans.ValetDeleteResponse; +import org.onap.so.adapters.valet.beans.ValetRollbackResponse; +import org.onap.so.adapters.valet.beans.ValetStatus; +import org.onap.so.adapters.valet.beans.ValetUpdateResponse; import org.onap.so.adapters.vnf.exceptions.VnfAlreadyExists; import org.onap.so.adapters.vnf.exceptions.VnfException; import org.onap.so.adapters.vnf.exceptions.VnfNotFound; +import org.onap.so.client.aai.AAIResourcesClient; import org.onap.so.cloud.CloudConfig; +import org.onap.so.db.catalog.beans.CloudIdentity; import org.onap.so.db.catalog.beans.CloudSite; import org.onap.so.db.catalog.beans.HeatEnvironment; import org.onap.so.db.catalog.beans.HeatFiles; @@ -54,48 +64,46 @@ import org.onap.so.db.catalog.data.repository.VnfResourceRepository; import org.onap.so.db.catalog.utils.MavenLikeVersioning; import org.onap.so.entity.MsoRequest; import org.onap.so.logger.ErrorCode; +import org.onap.so.heatbridge.HeatBridgeApi; +import org.onap.so.heatbridge.HeatBridgeImpl; +import org.onap.so.heatbridge.openstack.api.OpenstackClient; import org.onap.so.logger.MessageEnum; - import org.onap.so.openstack.beans.HeatStatus; import org.onap.so.openstack.beans.StackInfo; import org.onap.so.openstack.beans.VnfRollback; import org.onap.so.openstack.beans.VnfStatus; +import org.onap.so.openstack.exceptions.MsoCloudSiteNotFound; import org.onap.so.openstack.exceptions.MsoException; import org.onap.so.openstack.exceptions.MsoExceptionCategory; import org.onap.so.openstack.exceptions.MsoHeatNotFoundException; import org.onap.so.openstack.utils.MsoHeatEnvironmentEntry; import org.onap.so.openstack.utils.MsoHeatUtils; import org.onap.so.openstack.utils.MsoHeatUtilsWithUpdate; -import org.onap.so.adapters.valet.ValetClient; -import org.onap.so.adapters.valet.beans.HeatRequest; -import org.onap.so.adapters.valet.beans.ValetConfirmResponse; -import org.onap.so.adapters.valet.beans.ValetCreateResponse; -import org.onap.so.adapters.valet.beans.ValetDeleteResponse; -import org.onap.so.adapters.valet.beans.ValetRollbackResponse; -import org.onap.so.adapters.valet.beans.ValetStatus; -import org.onap.so.adapters.valet.beans.ValetUpdateResponse; -import org.onap.so.adapters.valet.GenericValetResponse; +import org.openstack4j.model.compute.Flavor; +import org.openstack4j.model.compute.Image; +import org.openstack4j.model.compute.Server; +import org.openstack4j.model.heat.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; - import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -@WebService(serviceName = "VnfAdapter", endpointInterface = "org.onap.so.adapters.vnf.MsoVnfAdapter", targetNamespace = "http://org.onap.so/vnf") +@WebService(serviceName = "VnfAdapter", endpointInterface = "org.onap.so.adapters.vnf.MsoVnfAdapter", + targetNamespace = "http://org.onap.so/vnf") @Component @Transactional public class MsoVnfAdapterImpl implements MsoVnfAdapter { - @Autowired - private CloudConfig cloudConfig; + @Autowired + private CloudConfig cloudConfig; - @Autowired - private Environment environment; + @Autowired + private Environment environment; private static final Logger logger = LoggerFactory.getLogger(MsoVnfAdapterImpl.class); @@ -105,8 +113,9 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { private static final String ADD_GET_FILES_ON_VOLUME_REQ = "org.onap.so.adapters.vnf.addGetFilesOnVolumeReq"; private static final ObjectMapper JSON_MAPPER = new ObjectMapper(); private static final String VALET_ENABLED = "org.onap.so.adapters.vnf.valet_enabled"; - private static final String FAIL_REQUESTS_ON_VALET_FAILURE = "org.onap.so.adapters.vnf.fail_requests_on_valet_failure"; - private static final String SUCCESS_MSG = "Successfully received response from Open Stack"; + private static final String FAIL_REQUESTS_ON_VALET_FAILURE = + "org.onap.so.adapters.vnf.fail_requests_on_valet_failure"; + private static final String SUCCESS_MSG = "Successfully received response from Open Stack"; @Autowired private VFModuleCustomizationRepository vfModuleCustomRepo; @@ -124,165 +133,111 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { /** * DO NOT use that constructor to instantiate this class, the msoPropertiesfactory will be NULL. + * * @see MsoVnfAdapterImpl#MsoVnfAdapterImpl(MsoPropertiesFactory, CloudConfigFactory) */ public MsoVnfAdapterImpl() { - // Do nothing - //DO NOT use that constructor to instantiate this class, the msoPropertiesfactory will be NULL. - } + // Do nothing + // DO NOT use that constructor to instantiate this class, the msoPropertiesfactory will be NULL. + } - /** + /** * Health Check web method. Does nothing but return to show the adapter is deployed. */ @Override - public void healthCheck () { - logger.debug ("Health check call in VNF Adapter"); + public void healthCheck() { + logger.debug("Health check call in VNF Adapter"); } /** - * This is the "Create VNF" web service implementation. - * It will create a new VNF of the requested type in the specified cloud - * and tenant. The tenant must exist before this service is called. + * This is the "Create VNF" web service implementation. It will create a new VNF of the requested type in the + * specified cloud and tenant. The tenant must exist before this service is called. * - * If a VNF with the same name already exists, this can be considered a - * success or failure, depending on the value of the 'failIfExists' parameter. + * If a VNF with the same name already exists, this can be considered a success or failure, depending on the value + * of the 'failIfExists' parameter. * - * All VNF types will be defined in the MSO catalog. The caller must request - * one of these pre-defined types or an error will be returned. Within the - * catalog, each VNF type references (among other things) a Heat template - * which is used to deploy the required VNF artifacts (VMs, networks, etc.) - * to the cloud. + * All VNF types will be defined in the MSO catalog. The caller must request one of these pre-defined types or an + * error will be returned. Within the catalog, each VNF type references (among other things) a Heat template which + * is used to deploy the required VNF artifacts (VMs, networks, etc.) to the cloud. * - * Depending on the Heat template, a variable set of input parameters will - * be defined, some of which are required. The caller is responsible to - * pass the necessary input data for the VNF or an error will be thrown. + * Depending on the Heat template, a variable set of input parameters will be defined, some of which are required. + * The caller is responsible to pass the necessary input data for the VNF or an error will be thrown. * - * The method returns the vnfId (the canonical name), a Map of VNF output - * attributes, and a VnfRollback object. This last object can be passed - * as-is to the rollbackVnf operation to undo everything that was created - * for the VNF. This is useful if a VNF is successfully created but the - * orchestrator fails on a subsequent operation. + * The method returns the vnfId (the canonical name), a Map of VNF output attributes, and a VnfRollback object. This + * last object can be passed as-is to the rollbackVnf operation to undo everything that was created for the VNF. + * This is useful if a VNF is successfully created but the orchestrator fails on a subsequent operation. * * @param cloudSiteId CLLI code of the cloud site in which to create the VNF + * @param cloudOwner cloud owner of the cloud region in which to create the VNF * @param tenantId Openstack tenant identifier * @param vnfType VNF type key, should match a VNF definition in catalog DB * @param vnfVersion VNF version key, should match a VNF definition in catalog DB * @param vnfName Name to be assigned to the new VNF * @param inputs Map of key=value inputs for VNF stack creation - * @param failIfExists Flag whether already existing VNF should be considered - * a success or failure + * @param failIfExists Flag whether already existing VNF should be considered a success or failure * @param msoRequest Request tracking information for logs * @param vnfId Holder for output VNF Openstack ID * @param outputs Holder for Map of VNF outputs from heat (assigned IPs, etc) * @param rollback Holder for returning VnfRollback object */ @Override - public void createVnf (String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - Map <String, Object> inputs, - Boolean failIfExists, - Boolean backout, - Boolean enableBridge, - MsoRequest msoRequest, - Holder <String> vnfId, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) throws VnfException { + public void createVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, String vnfVersion, + String vnfName, String requestType, String volumeGroupHeatStackId, Map<String, Object> inputs, + Boolean failIfExists, Boolean backout, Boolean enableBridge, MsoRequest msoRequest, Holder<String> vnfId, + Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) throws VnfException { // parameters used for multicloud adapter String genericVnfId = ""; String vfModuleId = ""; - // Create a hook here to catch shortcut createVf requests: - if (requestType != null && requestType.startsWith("VFMOD")) { - logger.debug("Calling createVfModule from createVnf -- requestType=" + requestType); - String newRequestType = requestType.substring(5); - String vfVolGroupHeatStackId = ""; - String vfBaseHeatStackId = ""; - try { - if (volumeGroupHeatStackId != null) { - vfVolGroupHeatStackId = volumeGroupHeatStackId.substring(0, volumeGroupHeatStackId.lastIndexOf('|')); - vfBaseHeatStackId = volumeGroupHeatStackId.substring(volumeGroupHeatStackId.lastIndexOf('|')+1); - } - } catch (Exception e) { - // might be ok - both are just blank - logger.debug("ERROR trying to parse the volumeGroupHeatStackId " + volumeGroupHeatStackId,e); - } - this.createVfModule(cloudSiteId, - tenantId, - vnfType, - vnfVersion, - genericVnfId, - vnfName, - vfModuleId, - newRequestType, - vfVolGroupHeatStackId, - vfBaseHeatStackId, - null, - inputs, - failIfExists, - backout, - enableBridge, - msoRequest, - vnfId, - outputs, - rollback); - return; - } - // createVf will know if the requestType starts with "X" that it's the "old" way - StringBuilder newRequestTypeSb = new StringBuilder("X"); - String vfVolGroupHeatStackId = ""; - String vfBaseHeatStackId = ""; - if (requestType != null) { - newRequestTypeSb.append(requestType); - } - this.createVfModule(cloudSiteId, - tenantId, - vnfType, - vnfVersion, - genericVnfId, - vnfName, - vfModuleId, - newRequestTypeSb.toString(), - vfVolGroupHeatStackId, - vfBaseHeatStackId, - null, - inputs, - failIfExists, - backout, - enableBridge, - msoRequest, - vnfId, - outputs, - rollback); - return; - // End createVf shortcut + // Create a hook here to catch shortcut createVf requests: + if (requestType != null && requestType.startsWith("VFMOD")) { + logger.debug("Calling createVfModule from createVnf -- requestType=" + requestType); + String newRequestType = requestType.substring(5); + String vfVolGroupHeatStackId = ""; + String vfBaseHeatStackId = ""; + try { + if (volumeGroupHeatStackId != null) { + vfVolGroupHeatStackId = + volumeGroupHeatStackId.substring(0, volumeGroupHeatStackId.lastIndexOf('|')); + vfBaseHeatStackId = volumeGroupHeatStackId.substring(volumeGroupHeatStackId.lastIndexOf('|') + 1); + } + } catch (Exception e) { + // might be ok - both are just blank + logger.debug("ERROR trying to parse the volumeGroupHeatStackId {}", volumeGroupHeatStackId, e); + } + this.createVfModule(cloudSiteId, cloudOwner, tenantId, vnfType, vnfVersion, genericVnfId, vnfName, + vfModuleId, newRequestType, vfVolGroupHeatStackId, vfBaseHeatStackId, null, inputs, failIfExists, + backout, enableBridge, msoRequest, vnfId, outputs, rollback); + return; } + // createVf will know if the requestType starts with "X" that it's the "old" way + StringBuilder newRequestTypeSb = new StringBuilder("X"); + String vfVolGroupHeatStackId = ""; + String vfBaseHeatStackId = ""; + if (requestType != null) { + newRequestTypeSb.append(requestType); + } + this.createVfModule(cloudSiteId, cloudOwner, tenantId, vnfType, vnfVersion, genericVnfId, vnfName, vfModuleId, + newRequestTypeSb.toString(), vfVolGroupHeatStackId, vfBaseHeatStackId, null, inputs, failIfExists, + backout, enableBridge, msoRequest, vnfId, outputs, rollback); + return; + // End createVf shortcut + } @Override - public void updateVnf(String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - Map <String, Object> inputs, - MsoRequest msoRequest, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) throws VnfException { - // As of 1707 - this method should no longer be called - logger.debug("UpdateVnf called?? This should not be called any longer - update vfModule"); + public void updateVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, String vnfVersion, + String vnfName, String requestType, String volumeGroupHeatStackId, Map<String, Object> inputs, + MsoRequest msoRequest, Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) + throws VnfException { + // As of 1707 - this method should no longer be called + logger.debug("UpdateVnf called?? This should not be called any longer - update vfModule"); } /** - * This is the "Query VNF" web service implementation. - * It will look up a VNF by name or ID in the specified cloud and tenant. + * This is the "Query VNF" web service implementation. It will look up a VNF by name or ID in the specified cloud + * and tenant. * - * The method returns an indicator that the VNF exists, its Openstack internal - * ID, its status, and the set of outputs (from when the stack was created). + * The method returns an indicator that the VNF exists, its Openstack internal ID, its status, and the set of + * outputs (from when the stack was created). * * @param cloudSiteId CLLI code of the cloud site in which to query * @param tenantId Openstack tenant identifier @@ -293,95 +248,90 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { * @param outputs Holder for Map of VNF outputs from heat (assigned IPs, etc) */ @Override - public void queryVnf (String cloudSiteId, - String tenantId, - String vnfName, - MsoRequest msoRequest, - Holder <Boolean> vnfExists, - Holder <String> vnfId, - Holder <VnfStatus> status, - Holder <Map <String, String>> outputs) throws VnfException { + public void queryVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfName, MsoRequest msoRequest, + Holder<Boolean> vnfExists, Holder<String> vnfId, Holder<VnfStatus> status, + Holder<Map<String, String>> outputs) throws VnfException { logger.debug("Querying VNF {} in {}", vnfName, cloudSiteId + "/" + tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); StackInfo heatStack = null; - long subStartTime = System.currentTimeMillis (); + long subStartTime = System.currentTimeMillis(); try { - heatStack = heat.queryStack (cloudSiteId, tenantId, vnfName); + heatStack = heat.queryStack(cloudSiteId, cloudOwner, tenantId, vnfName); } catch (MsoException me) { - me.addContext ("QueryVNF"); + me.addContext("QueryVNF"); // Failed to query the Stack due to an openstack exception. // Convert to a generic VnfException - String error = "Query VNF: " + vnfName + " in " + cloudSiteId + "/" + tenantId + ": " + me; + String error = + "Query VNF: " + vnfName + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + ": " + me; logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, cloudSiteId, - tenantId, "OpenStack", "QueryVNF", ErrorCode.DataError.getValue(), "Exception - queryStack", - me); + tenantId, "OpenStack", "QueryVNF", ErrorCode.DataError.getValue(), "Exception - queryStack", me); logger.debug(error); - throw new VnfException (me); + throw new VnfException(me); } // Populate the outputs based on the returned Stack information // - if (heatStack == null || heatStack.getStatus () == HeatStatus.NOTFOUND) { + if (heatStack == null || heatStack.getStatus() == HeatStatus.NOTFOUND) { // Not Found vnfExists.value = Boolean.FALSE; status.value = VnfStatus.NOTFOUND; vnfId.value = null; outputs.value = new HashMap<>(); // Return as an empty map - logger.debug ("VNF {} not found", vnfName); + logger.debug("VNF {} not found", vnfName); } else { vnfExists.value = Boolean.TRUE; - status.value = stackStatusToVnfStatus (heatStack.getStatus ()); - vnfId.value = heatStack.getCanonicalName (); - outputs.value = copyStringOutputs (heatStack.getOutputs ()); + status.value = stackStatusToVnfStatus(heatStack.getStatus()); + vnfId.value = heatStack.getCanonicalName(); + outputs.value = copyStringOutputs(heatStack.getOutputs()); - logger.debug ("VNF {} found, ID = {}", vnfName, vnfId.value); + logger.debug("VNF {} found, ID = {}", vnfName, vnfId.value); } return; } /** - * This is the "Delete VNF" web service implementation. - * It will delete a VNF by name or ID in the specified cloud and tenant. + * This is the "Delete VNF" web service implementation. It will delete a VNF by name or ID in the specified cloud + * and tenant. * * The method has no outputs. * * @param cloudSiteId CLLI code of the cloud site in which to delete + * @param cloudOwner cloud owner of the cloud region in which to delete * @param tenantId Openstack tenant identifier * @param vnfName VNF Name or Openstack ID * @param msoRequest Request tracking information for logs */ @Override - public void deleteVnf (String cloudSiteId, - String tenantId, - String vnfName, - MsoRequest msoRequest) throws VnfException { + public void deleteVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfName, MsoRequest msoRequest) + throws VnfException { logger.debug("Deleting VNF {} in {}", vnfName, cloudSiteId + "/" + tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); // Use the MsoHeatUtils to delete the stack. Set the polling flag to true. // The possible outcomes of deleteStack are a StackInfo object with status // of NOTFOUND (on success) or FAILED (on error). Also, MsoOpenstackException // could be thrown. - long subStartTime = System.currentTimeMillis (); + long subStartTime = System.currentTimeMillis(); try { - heat.deleteStack (tenantId, cloudSiteId, vnfName, true); + heat.deleteStack(tenantId, cloudOwner, cloudSiteId, vnfName, true); } catch (MsoException me) { - me.addContext ("DeleteVNF"); + me.addContext("DeleteVNF"); // Failed to query the Stack due to an openstack exception. // Convert to a generic VnfException - String error = "Delete VNF: " + vnfName + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vnfName, cloudSiteId, - tenantId, "OpenStack", "DeleteVNF", ErrorCode.DataError.getValue(), "Exception - DeleteVNF", - me); + String error = + "Delete VNF: " + vnfName + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vnfName, cloudOwner, + cloudSiteId, tenantId, "OpenStack", "DeleteVNF", ErrorCode.DataError.getValue(), + "Exception - DeleteVNF", me); logger.debug(error); - throw new VnfException (me); + throw new VnfException(me); } // On success, nothing is returned. @@ -389,48 +339,49 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { } /** - * This web service endpoint will rollback a previous Create VNF operation. - * A rollback object is returned to the client in a successful creation - * response. The client can pass that object as-is back to the rollbackVnf - * operation to undo the creation. + * This web service endpoint will rollback a previous Create VNF operation. A rollback object is returned to the + * client in a successful creation response. The client can pass that object as-is back to the rollbackVnf operation + * to undo the creation. */ @Override - public void rollbackVnf (VnfRollback rollback) throws VnfException { - long startTime = System.currentTimeMillis (); - // rollback may be null (e.g. if stack already existed when Create was called) + public void rollbackVnf(VnfRollback rollback) throws VnfException { + long startTime = System.currentTimeMillis(); + // rollback may be null (e.g. if stack already existed when Create was called) if (rollback == null) { logger.info(MessageEnum.RA_ROLLBACK_NULL.toString(), "OpenStack", "rollbackVnf"); return; } // Get the elements of the VnfRollback object for easier access - String cloudSiteId = rollback.getCloudSiteId (); - String tenantId = rollback.getTenantId (); - String vnfId = rollback.getVnfId (); + String cloudSiteId = rollback.getCloudSiteId(); + String cloudOwner = rollback.getCloudOwner(); + String tenantId = rollback.getTenantId(); + String vnfId = rollback.getVnfId(); - logger.debug("Rolling Back VNF {} in {}", vnfId, cloudSiteId + "/" + tenantId); + logger.debug("Rolling Back VNF {} in {}", vnfId, cloudOwner + "/" + cloudSiteId + "/" + tenantId); // Use the MsoHeatUtils to delete the stack. Set the polling flag to true. // The possible outcomes of deleteStack are a StackInfo object with status // of NOTFOUND (on success) or FAILED (on error). Also, MsoOpenstackException // could be thrown. try { - heat.deleteStack (tenantId, cloudSiteId, vnfId, true); + heat.deleteStack(tenantId, cloudOwner, cloudSiteId, vnfId, true); } catch (MsoException me) { // Failed to rollback the Stack due to an openstack exception. // Convert to a generic VnfException - me.addContext ("RollbackVNF"); - String error = "Rollback VNF: " + vnfId + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vnfId, cloudSiteId, - tenantId, "OpenStack", "DeleteStack", ErrorCode.DataError.getValue(), - "Exception - DeleteStack", me); + me.addContext("RollbackVNF"); + String error = + "Rollback VNF: " + vnfId + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vnfId, cloudOwner, + cloudSiteId, tenantId, "OpenStack", "DeleteStack", ErrorCode.DataError.getValue(), + "Exception - DeleteStack", me); logger.debug(error); - throw new VnfException (me); + throw new VnfException(me); } return; } - private VnfStatus stackStatusToVnfStatus (HeatStatus stackStatus) { + private VnfStatus stackStatusToVnfStatus(HeatStatus stackStatus) { switch (stackStatus) { case CREATED: return VnfStatus.ACTIVE; @@ -443,61 +394,119 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { } } - private Map <String, String> copyStringOutputs(Map <String, Object> stackOutputs) { - Map <String, String> stringOutputs = new HashMap <> (); - for (Map.Entry<String,Object> entry : stackOutputs.entrySet ()) { + private Map<String, String> copyStringOutputs(Map<String, Object> stackOutputs) { + Map<String, String> stringOutputs = new HashMap<>(); + for (Map.Entry<String, Object> entry : stackOutputs.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); try { - stringOutputs.put(key, value.toString()); + stringOutputs.put(key, value.toString()); } catch (Exception e) { - StringBuilder msg = new StringBuilder("Unable to add " + key + " to outputs"); - if (value instanceof Integer) { // nothing to add to the message - } else if (value instanceof JsonNode) { - msg.append(" - exception converting JsonNode"); - } else if (value instanceof java.util.LinkedHashMap) { - msg.append(" exception converting LinkedHashMap"); - } else { - msg.append(" - unable to call .toString() " + e.getMessage()); - } - logger.debug(msg.toString(), e); + StringBuilder msg = new StringBuilder("Unable to add " + key + " to outputs"); + if (value instanceof Integer) { // nothing to add to the message + } else if (value instanceof JsonNode) { + msg.append(" - exception converting JsonNode"); + } else if (value instanceof java.util.LinkedHashMap) { + msg.append(" exception converting LinkedHashMap"); + } else { + msg.append(" - unable to call .toString() " + e.getMessage()); + } + logger.debug(msg.toString(), e); } } return stringOutputs; } - private Map <String, Object> copyStringInputs (Map <String, Object> stringInputs) { - return new HashMap <> (stringInputs); + private Map<String, Object> copyStringInputs(Map<String, Object> stringInputs) { + return new HashMap<>(stringInputs); } protected boolean callHeatbridge(String heatStackId) { - String executionDir = "/usr/local/lib/python2.7/dist-packages/heatbridge"; - String openstackIdentityUrl = "", username = "", password = "", tenant = "", region = "", owner = ""; + String executionDir = "/usr/local/lib/python2.7/dist-packages/heatbridge"; + String openstackIdentityUrl = "", username = "", password = "", tenant = "", region = "", owner = ""; long waitTimeMs = 10000L; - try { - String[] cmdarray = - {"/usr/bin/python", "HeatBridgeMain.py", openstackIdentityUrl, username, password, tenant, region, owner, - heatStackId}; - String[] envp = null; - File dir = new File(executionDir); - logger.debug("Calling HeatBridgeMain.py in {} with arguments {}", dir, Arrays.toString(cmdarray)); - Runtime r = Runtime.getRuntime(); - Process p = r.exec(cmdarray, envp, dir); - boolean wait = p.waitFor(waitTimeMs, TimeUnit.MILLISECONDS); - - logger.debug(" HeatBridgeMain.py returned {} with code {}", wait, p.exitValue()); - return wait && p.exitValue() == 0; - } catch (IOException e) { - logger.debug(" HeatBridgeMain.py failed with IO Exception! " + e); - return false; - } catch (RuntimeException e) { - logger.debug(" HeatBridgeMain.py failed during runtime!" + e); - return false; - } - catch (Exception e) { - logger.debug(" HeatBridgeMain.py failed for unknown reasons! " + e); - return false; - } + try { + String[] cmdarray = {"/usr/bin/python", "HeatBridgeMain.py", openstackIdentityUrl, username, password, + tenant, region, owner, heatStackId}; + String[] envp = null; + File dir = new File(executionDir); + logger.debug("Calling HeatBridgeMain.py in {} with arguments {}", dir, Arrays.toString(cmdarray)); + Runtime r = Runtime.getRuntime(); + Process p = r.exec(cmdarray, envp, dir); + boolean wait = p.waitFor(waitTimeMs, TimeUnit.MILLISECONDS); + + logger.debug(" HeatBridgeMain.py returned {} with code {}", wait, p.exitValue()); + return wait && p.exitValue() == 0; + } catch (IOException e) { + logger.debug(" HeatBridgeMain.py failed with IO Exception! " + e); + return false; + } catch (RuntimeException e) { + logger.debug(" HeatBridgeMain.py failed during runtime!" + e); + return false; + } catch (Exception e) { + logger.debug(" HeatBridgeMain.py failed for unknown reasons! " + e); + return false; + } + } + + private void heatbridge(StackInfo heatStack, String cloudOwner, String cloudSiteId, String tenantId, + String genericVnfName, String vfModuleId) { + try { + CloudSite cloudSite = + cloudConfig.getCloudSite(cloudSiteId).orElseThrow(() -> new MsoCloudSiteNotFound(cloudSiteId)); + CloudIdentity cloudIdentity = cloudSite.getIdentityService(); + String heatStackId = heatStack.getCanonicalName().split("/")[1]; + + List<String> oobMgtNetNames = new ArrayList<>(); + + HeatBridgeApi heatBridgeClient = + new HeatBridgeImpl(new AAIResourcesClient(), cloudIdentity, cloudOwner, cloudSiteId, tenantId); + + OpenstackClient openstackClient = heatBridgeClient.authenticate(); + List<Resource> stackResources = heatBridgeClient.queryNestedHeatStackResources(heatStackId); + + List<Server> osServers = heatBridgeClient.getAllOpenstackServers(stackResources); + + List<Image> osImages = heatBridgeClient.extractOpenstackImagesFromServers(osServers); + + List<Flavor> osFlavors = heatBridgeClient.extractOpenstackFlavorsFromServers(osServers); + + logger.debug("Successfully queried heat stack{} for resources.", heatStackId); + // os images + if (osImages != null && !osImages.isEmpty()) { + heatBridgeClient.buildAddImagesToAaiAction(osImages); + logger.debug("Successfully built AAI actions to add images."); + } else { + logger.debug("No images to update to AAI."); + } + // flavors + if (osFlavors != null && !osFlavors.isEmpty()) { + heatBridgeClient.buildAddFlavorsToAaiAction(osFlavors); + logger.debug("Successfully built AAI actions to add flavors."); + } else { + logger.debug("No flavors to update to AAI."); + } + + // compute resources + heatBridgeClient.buildAddVserversToAaiAction(genericVnfName, vfModuleId, osServers); + logger.debug("Successfully queried compute resources and built AAI vserver actions."); + + // neutron resources + List<String> oobMgtNetIds = new ArrayList<>(); + + // if no network-id list is provided, however network-name list is + if (!CollectionUtils.isEmpty(oobMgtNetNames)) { + oobMgtNetIds = heatBridgeClient.extractNetworkIds(oobMgtNetNames); + } + heatBridgeClient.buildAddVserverLInterfacesToAaiAction(stackResources, oobMgtNetIds); + logger.debug( + "Successfully queried neutron resources and built AAI actions to add l-interfaces to vservers."); + + // Update AAI + heatBridgeClient.submitToAai(); + } catch (Exception ex) { + logger.debug("Heatbrige failed for stackId: " + heatStack.getCanonicalName(), ex); + } } private String convertNode(final JsonNode node) { @@ -505,9 +514,9 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { final Object obj = JSON_MAPPER.treeToValue(node, Object.class); return JSON_MAPPER.writeValueAsString(obj); } catch (JsonParseException jpe) { - logger.debug("Error converting json to string " + jpe.getMessage(),jpe); + logger.debug("Error converting json to string: {}", jpe.getMessage(), jpe); } catch (Exception e) { - logger.debug("Error converting json to string " + e.getMessage(),e); + logger.debug("Error converting json to string: {}", e.getMessage(), e); } return "[Error converting json to string]"; } @@ -522,15 +531,15 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { Object obj = objectMap.get(key); if (obj instanceof String) { stringMap.put(key, (String) objectMap.get(key)); - } else if (obj instanceof JsonNode ){ + } else if (obj instanceof JsonNode) { // This is a bit of mess - but I think it's the least impacting // let's convert it BACK to a string - then it will get converted back later try { String str = this.convertNode((JsonNode) obj); stringMap.put(key, str); } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value for JsonNode "+ key,e); - //okay in this instance - only string values (fqdn) are expected to be needed + logger.debug("DANGER WILL ROBINSON: unable to convert value for JsonNode " + key, e); + // okay in this instance - only string values (fqdn) are expected to be needed } } else if (obj instanceof java.util.LinkedHashMap) { logger.debug("LinkedHashMap - this is showing up as a LinkedHashMap instead of JsonNode"); @@ -538,21 +547,23 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { String str = JSON_MAPPER.writeValueAsString(obj); stringMap.put(key, str); } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value for LinkedHashMap "+ key,e); - } - } else if (obj instanceof Integer) { - try { - String str = "" + obj; - stringMap.put(key, str); - } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value for Integer "+ key,e); + logger.debug("DANGER WILL ROBINSON: unable to convert value for LinkedHashMap " + key, e); + } + } else if (obj instanceof Integer) { + try { + String str = "" + obj; + stringMap.put(key, str); + } catch (Exception e) { + logger.debug("DANGER WILL ROBINSON: unable to convert value for Integer " + key, e); } } else { try { - String str = obj.toString(); + String str = obj.toString(); stringMap.put(key, str); } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value "+ key + " (" + e.getMessage() + ")",e); + logger.debug( + "DANGER WILL ROBINSON: unable to convert value " + key + " (" + e.getMessage() + ")", + e); } } } @@ -562,33 +573,21 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { } @Override - public void createVfModule(String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String genericVnfName, - String vnfName, - String vfModuleId, - String requestType, - String volumeGroupHeatStackId, - String baseVfHeatStackId, - String modelCustomizationUuid, - Map <String, Object> inputs, - Boolean failIfExists, - Boolean backout, - Boolean enableBridge, - MsoRequest msoRequest, - Holder <String> vnfId, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) throws VnfException { - String vfModuleName = vnfName; - String vfModuleType = vnfType; - String vfVersion = vnfVersion; + public void createVfModule(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, + String vnfVersion, String genericVnfName, String vnfName, String vfModuleId, String requestType, + String volumeGroupHeatStackId, String baseVfHeatStackId, String modelCustomizationUuid, + Map<String, Object> inputs, Boolean failIfExists, Boolean backout, Boolean enableBridge, + MsoRequest msoRequest, Holder<String> vnfId, Holder<Map<String, String>> outputs, + Holder<VnfRollback> rollback) throws VnfException { + String vfModuleName = vnfName; + String vfModuleType = vnfType; + String vfVersion = vnfVersion; String mcu = modelCustomizationUuid; boolean useMCUuid = false; if (mcu != null && !mcu.isEmpty()) { if ("null".equalsIgnoreCase(mcu)) { - logger.debug("modelCustomizationUuid: passed in as the string 'null' - will ignore: " + modelCustomizationUuid); + logger.debug("modelCustomizationUuid: passed in as the string 'null' - will ignore: " + + modelCustomizationUuid); useMCUuid = false; mcu = ""; } else { @@ -597,41 +596,44 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { } } - String requestTypeString = ""; + String requestTypeString = ""; if (requestType != null && !"".equals(requestType)) { - requestTypeString = requestType; + requestTypeString = requestType; } String nestedStackId = null; - if (volumeGroupHeatStackId != null && !"".equals(volumeGroupHeatStackId) && !"null".equalsIgnoreCase(volumeGroupHeatStackId)) { - nestedStackId = volumeGroupHeatStackId; + if (volumeGroupHeatStackId != null && !"".equals(volumeGroupHeatStackId) + && !"null".equalsIgnoreCase(volumeGroupHeatStackId)) { + nestedStackId = volumeGroupHeatStackId; } String nestedBaseStackId = null; if (baseVfHeatStackId != null && !"".equals(baseVfHeatStackId) && !"null".equalsIgnoreCase(baseVfHeatStackId)) { - nestedBaseStackId = baseVfHeatStackId; + nestedBaseStackId = baseVfHeatStackId; } - //This method will also handle doing things the "old" way - i.e., just orchestrate a VNF + // This method will also handle doing things the "old" way - i.e., just orchestrate a VNF boolean oldWay = false; if (requestTypeString.startsWith("X")) { - oldWay = true; + oldWay = true; logger.debug("orchestrating a VNF - *NOT* a module!"); - requestTypeString = requestTypeString.substring(1); + requestTypeString = requestTypeString.substring(1); } // 1607 - let's parse out the request type we're being sent boolean isBaseRequest = false; boolean isVolumeRequest = false; if (requestTypeString.startsWith("VOLUME")) { - isVolumeRequest = true; + isVolumeRequest = true; } - logger.debug("requestTypeString = " + requestTypeString + ", nestedStackId = " + nestedStackId + ", nestedBaseStackId = " + nestedBaseStackId); + logger.debug("requestTypeString = " + requestTypeString + ", nestedStackId = " + nestedStackId + + ", nestedBaseStackId = " + nestedBaseStackId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); // Build a default rollback object (no actions performed) VnfRollback vfRollback = new VnfRollback(); vfRollback.setCloudSiteId(cloudSiteId); + vfRollback.setCloudOwner(cloudOwner); vfRollback.setTenantId(tenantId); vfRollback.setMsoRequest(msoRequest); vfRollback.setRequestType(requestTypeString); @@ -641,145 +643,158 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { vfRollback.setModelCustomizationUuid(mcu); // Put data into A&AI through Heatstack - if(enableBridge != null && enableBridge) { - callHeatbridge(baseVfHeatStackId); + if (enableBridge != null && enableBridge) { + callHeatbridge(baseVfHeatStackId); } StackInfo heatStack = null; - long subStartTime1 = System.currentTimeMillis (); + long subStartTime1 = System.currentTimeMillis(); try { - heatStack = heat.queryStack (cloudSiteId, tenantId, vfModuleName); + heatStack = heat.queryStack(cloudSiteId, cloudOwner, tenantId, vfModuleName); } catch (MsoException me) { - String error = "Create VF Module: Query " + vfModuleName + " in " + cloudSiteId + "/" + tenantId + ": " + me ; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, cloudSiteId, - tenantId, "OpenStack", "queryStack", ErrorCode.DataError.getValue(), "Exception - queryStack", - me); + String error = "Create VF Module: Query " + vfModuleName + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "OpenStack", "queryStack", ErrorCode.DataError.getValue(), + "Exception - queryStack", me); logger.debug(error); // Failed to query the Stack due to an openstack exception. // Convert to a generic VnfException - me.addContext ("CreateVFModule"); - throw new VnfException (me); + me.addContext("CreateVFModule"); + throw new VnfException(me); } // New with 1607 - more precise handling/messaging if the stack already exists if (heatStack != null && heatStack.getStatus() != HeatStatus.NOTFOUND) { - // INIT, CREATED, NOTFOUND, FAILED, BUILDING, DELETING, UNKNOWN, UPDATING, UPDATED - HeatStatus status = heatStack.getStatus(); - if (status == HeatStatus.INIT || status == HeatStatus.BUILDING || status == HeatStatus.DELETING || status == HeatStatus.UPDATING) { - // fail - it's in progress - return meaningful error - String error = "Create VF: Stack " + vfModuleName + " already exists and has status " + status.toString() + " in " + cloudSiteId + "/" + tenantId + "; please wait for it to complete, or fix manually."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, "OpenStack", "queryStack", ErrorCode.DataError.getValue(), - "Stack " + vfModuleName + " already exists"); - logger.debug(error); - throw new VnfAlreadyExists (vfModuleName, cloudSiteId, tenantId, heatStack.getCanonicalName ()); - } - if (status == HeatStatus.FAILED) { - // fail - it exists and is in a FAILED state - String error = "Create VF: Stack " + vfModuleName + " already exists and is in FAILED state in " + cloudSiteId + "/" + tenantId + "; requires manual intervention."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, "OpenStack", "queryStack", ErrorCode.DataError.getValue(), - "Stack " + vfModuleName + " already exists and is " + "in FAILED state"); - logger.debug(error); - throw new VnfAlreadyExists (vfModuleName, cloudSiteId, tenantId, heatStack.getCanonicalName ()); - } - if (status == HeatStatus.UNKNOWN || status == HeatStatus.UPDATED) { - // fail - it exists and is in a FAILED state - String error = - "Create VF: Stack " + vfModuleName + " already exists and has status " + status.toString() + " in " - + cloudSiteId + "/" + tenantId + "; requires manual intervention."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, "OpenStack", "queryStack", ErrorCode.DataError.getValue(), - "Stack " + vfModuleName + " already exists and is " + "in UPDATED or UNKNOWN state"); - logger.debug(error); - throw new VnfAlreadyExists(vfModuleName, cloudSiteId, tenantId, heatStack.getCanonicalName()); - } - if (status == HeatStatus.CREATED) { - // fail - it exists - if (failIfExists != null && failIfExists) { - String error = - "Create VF: Stack " + vfModuleName + " already exists in " + cloudSiteId + "/" + tenantId; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, "OpenStack", "queryStack", ErrorCode.DataError.getValue(), - "Stack " + vfModuleName + " already exists"); + // INIT, CREATED, NOTFOUND, FAILED, BUILDING, DELETING, UNKNOWN, UPDATING, UPDATED + HeatStatus status = heatStack.getStatus(); + if (status == HeatStatus.INIT || status == HeatStatus.BUILDING || status == HeatStatus.DELETING + || status == HeatStatus.UPDATING) { + // fail - it's in progress - return meaningful error + String error = "Create VF: Stack " + vfModuleName + " already exists and has status " + + status.toString() + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + "; please wait for it to complete, or fix manually."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "OpenStack", "queryStack", ErrorCode.DataError.getValue(), + "Stack " + vfModuleName + " already exists"); logger.debug(error); - throw new VnfAlreadyExists(vfModuleName, cloudSiteId, tenantId, heatStack.getCanonicalName()); - } else { - logger.debug ("Found Existing stack, status={}", heatStack.getStatus ()); - // Populate the outputs from the existing stack. - vnfId.value = heatStack.getCanonicalName (); - outputs.value = copyStringOutputs (heatStack.getOutputs ()); - rollback.value = vfRollback; // Default rollback - no updates performed - } - } + throw new VnfAlreadyExists(vfModuleName, cloudOwner, cloudSiteId, tenantId, + heatStack.getCanonicalName()); + } + if (status == HeatStatus.FAILED) { + // fail - it exists and is in a FAILED state + String error = "Create VF: Stack " + vfModuleName + " already exists and is in FAILED state in " + + cloudOwner + "/" + cloudSiteId + "/" + tenantId + "; requires manual intervention."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "OpenStack", "queryStack", ErrorCode.DataError.getValue(), + "Stack " + vfModuleName + " already exists and is " + "in FAILED state"); + logger.debug(error); + throw new VnfAlreadyExists(vfModuleName, cloudOwner, cloudSiteId, tenantId, + heatStack.getCanonicalName()); + } + if (status == HeatStatus.UNKNOWN || status == HeatStatus.UPDATED) { + // fail - it exists and is in a FAILED state + String error = "Create VF: Stack " + vfModuleName + " already exists and has status " + + status.toString() + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + "; requires manual intervention."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "OpenStack", "queryStack", ErrorCode.DataError.getValue(), + "Stack " + vfModuleName + " already exists and is " + "in UPDATED or UNKNOWN state"); + logger.debug(error); + throw new VnfAlreadyExists(vfModuleName, cloudOwner, cloudSiteId, tenantId, + heatStack.getCanonicalName()); + } + if (status == HeatStatus.CREATED) { + // fail - it exists + if (failIfExists != null && failIfExists) { + String error = "Create VF: Stack " + vfModuleName + " already exists in " + cloudOwner + "/" + + cloudSiteId + "/" + tenantId; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), + vfModuleName, cloudOwner, cloudSiteId, tenantId, "OpenStack", "queryStack", + ErrorCode.DataError.getValue(), "Stack " + vfModuleName + " already exists"); + logger.debug(error); + throw new VnfAlreadyExists(vfModuleName, cloudOwner, cloudSiteId, tenantId, + heatStack.getCanonicalName()); + } else { + logger.debug("Found Existing stack, status={}", heatStack.getStatus()); + // Populate the outputs from the existing stack. + vnfId.value = heatStack.getCanonicalName(); + outputs.value = copyStringOutputs(heatStack.getOutputs()); + rollback.value = vfRollback; // Default rollback - no updates performed + } + } return; } // handle a nestedStackId if sent- this one would be for the volume - so applies to both Vf and Vnf StackInfo nestedHeatStack = null; - long subStartTime2 = System.currentTimeMillis (); + long subStartTime2 = System.currentTimeMillis(); Map<String, Object> nestedVolumeOutputs = null; if (nestedStackId != null) { - try { - logger.debug("Querying for nestedStackId = {}", nestedStackId); - nestedHeatStack = heat.queryStack(cloudSiteId, tenantId, nestedStackId); - } catch (MsoException me) { - // Failed to query the Stack due to an openstack exception. - // Convert to a generic VnfException - me.addContext ("CreateVFModule"); - String error = "Create VFModule: Attached heatStack ID Query " + nestedStackId + " in " + cloudSiteId + "/" + tenantId + ": " + me ; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, cloudSiteId, - tenantId, "OpenStack", "queryStack", ErrorCode.BusinessProcesssError.getValue(), - "MsoException trying to query nested stack", me); - logger.debug("ERROR trying to query nested stack= {}", error); - throw new VnfException (me); - } - if (nestedHeatStack == null || nestedHeatStack.getStatus() == HeatStatus.NOTFOUND) { - String error = "Create VFModule: Attached heatStack ID DOES NOT EXIST " + nestedStackId + " in " + cloudSiteId + "/" + tenantId + " USER ERROR" ; - logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, - cloudSiteId, tenantId, error, "OpenStack", "queryStack", - ErrorCode.BusinessProcesssError.getValue(), - "Create VFModule: Attached heatStack ID " + "DOES NOT EXIST"); - logger.debug(error); - throw new VnfException (error, MsoExceptionCategory.USERDATA); - } else { - logger.debug("Found nested volume heat stack - copying values to inputs *later*"); - nestedVolumeOutputs = nestedHeatStack.getOutputs(); - } + try { + logger.debug("Querying for nestedStackId = {}", nestedStackId); + nestedHeatStack = heat.queryStack(cloudSiteId, cloudOwner, tenantId, nestedStackId); + } catch (MsoException me) { + // Failed to query the Stack due to an openstack exception. + // Convert to a generic VnfException + me.addContext("CreateVFModule"); + String error = "Create VFModule: Attached heatStack ID Query " + nestedStackId + " in " + cloudOwner + + "/" + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "OpenStack", "queryStack", + ErrorCode.BusinessProcesssError.getValue(), "MsoException trying to query nested stack", me); + logger.debug("ERROR trying to query nested stack= {}", error); + throw new VnfException(me); + } + if (nestedHeatStack == null || nestedHeatStack.getStatus() == HeatStatus.NOTFOUND) { + String error = "Create VFModule: Attached heatStack ID DOES NOT EXIST " + nestedStackId + " in " + + cloudOwner + "/" + cloudSiteId + "/" + tenantId + " USER ERROR"; + logger.error("{} {} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, error, "OpenStack", "queryStack", + ErrorCode.BusinessProcesssError.getValue(), + "Create VFModule: Attached heatStack ID " + "DOES NOT EXIST"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } else { + logger.debug("Found nested volume heat stack - copying values to inputs *later*"); + nestedVolumeOutputs = nestedHeatStack.getOutputs(); + } } // handle a nestedBaseStackId if sent- this is the stack ID of the base. Should be null for VNF requests StackInfo nestedBaseHeatStack = null; - long subStartTime3 = System.currentTimeMillis (); + long subStartTime3 = System.currentTimeMillis(); Map<String, Object> baseStackOutputs = null; if (nestedBaseStackId != null) { - try { - logger.debug("Querying for nestedBaseStackId = {}", nestedBaseStackId); - nestedBaseHeatStack = heat.queryStack(cloudSiteId, tenantId, nestedBaseStackId); - } catch (MsoException me) { - // Failed to query the Stack due to an openstack exception. - // Convert to a generic VnfException - me.addContext ("CreateVFModule"); - String error = "Create VFModule: Attached baseHeatStack ID Query " + nestedBaseStackId + " in " + cloudSiteId + "/" + tenantId + ": " + me ; - logger - .error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, cloudSiteId, - tenantId, "OpenStack", "QueryStack", ErrorCode.BusinessProcesssError.getValue(), - "MsoException trying to query nested base stack", me); - logger.debug("ERROR trying to query nested base stack= {}", error); - throw new VnfException (me); - } - if (nestedBaseHeatStack == null || nestedBaseHeatStack.getStatus() == HeatStatus.NOTFOUND) { - String error = "Create VFModule: Attached base heatStack ID DOES NOT EXIST " + nestedBaseStackId + " in " + cloudSiteId + "/" + tenantId + " USER ERROR" ; - logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, - cloudSiteId, tenantId, error, "OpenStack", "QueryStack", - ErrorCode.BusinessProcesssError.getValue(), - "Create VFModule: Attached base heatStack ID DOES NOT EXIST"); - logger.debug("Exception occurred", error); - throw new VnfException (error, MsoExceptionCategory.USERDATA); - } else { - logger.debug("Found nested base heat stack - these values will be copied to inputs *later*"); - baseStackOutputs = nestedBaseHeatStack.getOutputs(); - } + try { + logger.debug("Querying for nestedBaseStackId = {}", nestedBaseStackId); + nestedBaseHeatStack = heat.queryStack(cloudSiteId, cloudOwner, tenantId, nestedBaseStackId); + } catch (MsoException me) { + // Failed to query the Stack due to an openstack exception. + // Convert to a generic VnfException + me.addContext("CreateVFModule"); + String error = "Create VFModule: Attached baseHeatStack ID Query " + nestedBaseStackId + " in " + + cloudOwner + "/" + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "OpenStack", "QueryStack", + ErrorCode.BusinessProcesssError.getValue(), "MsoException trying to query nested base stack", + me); + logger.debug("ERROR trying to query nested base stack= {}", error); + throw new VnfException(me); + } + if (nestedBaseHeatStack == null || nestedBaseHeatStack.getStatus() == HeatStatus.NOTFOUND) { + String error = "Create VFModule: Attached base heatStack ID DOES NOT EXIST " + nestedBaseStackId + + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + " USER ERROR"; + logger.error("{} {} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, error, "OpenStack", "QueryStack", + ErrorCode.BusinessProcesssError.getValue(), + "Create VFModule: Attached base heatStack ID DOES NOT EXIST"); + logger.debug("Exception occurred", error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } else { + logger.debug("Found nested base heat stack - these values will be copied to inputs *later*"); + baseStackOutputs = nestedBaseHeatStack.getOutputs(); + } } // Ready to deploy the new VNF @@ -788,30 +803,31 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { try { // Retrieve the VF - VfModule vf = null; - VnfResource vnfResource = null; - VfModuleCustomization vfmc = null; - logger.debug("version: {}", vfVersion); + VfModule vf = null; + VnfResource vnfResource = null; + VfModuleCustomization vfmc = null; + logger.debug("version: {}", vfVersion); if (useMCUuid) { - // 1707 - db refactoring - vfmc = vfModuleCustomRepo.findByModelCustomizationUUID(mcu); - if(vfmc != null) - vf=vfmc.getVfModule(); - else - vf=null; + // 1707 - db refactoring + vfmc = vfModuleCustomRepo.findFirstByModelCustomizationUUIDOrderByCreatedDesc(mcu); + if (vfmc != null) + vf = vfmc.getVfModule(); + else + vf = null; // 1702 - this will be the new way going forward. We find the vf by mcu - otherwise, code is the same. if (vf == null) { - logger.debug("Unable to find vfModuleCust with modelCustomizationUuid={}", mcu); - String error = "Create vfModule error: Unable to find vfModuleCust with modelCustomizationUuid=" + mcu; + logger.debug("Unable to find vfModuleCust with modelCustomizationUuid={}", mcu); + String error = + "Create vfModule error: Unable to find vfModuleCust with modelCustomizationUuid=" + mcu; logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), - "VF Module ModelCustomizationUuid", modelCustomizationUuid, "OpenStack", - ErrorCode.DataError.getValue(), - "Create VF Module: Unable to find vfModule with " + "modelCustomizationUuid=" + mcu); + "VF Module ModelCustomizationUuid", modelCustomizationUuid, "OpenStack", + ErrorCode.DataError.getValue(), + "Create VF Module: Unable to find vfModule with " + "modelCustomizationUuid=" + mcu); logger.debug(error); throw new VnfException(error, MsoExceptionCategory.USERDATA); } else { - logger.trace("Found vfModuleCust entry {}", vfmc.toString()); + logger.trace("Found vfModuleCust entry {}", vfmc.toString()); } if (vf.getIsBase()) { isBaseRequest = true; @@ -819,166 +835,170 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { } else { logger.debug("This is *not* a BASE VF request!"); if (!isVolumeRequest && nestedBaseStackId == null) { - logger.debug("DANGER WILL ROBINSON! This is unexpected - no nestedBaseStackId with this non-base request"); + logger.debug( + "DANGER WILL ROBINSON! This is unexpected - no nestedBaseStackId with this non-base request"); } } - } - - else { // This is to support gamma only - get info from vnf_resource table - if (vfVersion != null && !vfVersion.isEmpty()) { - vnfResource = vnfResourceRepo.findByModelNameAndModelVersion(vnfType, vnfVersion); - } else { - vnfResource = vnfResourceRepo.findByModelName(vnfType); - } - if (vnfResource == null) { - String error = "Create VNF: Unknown VNF Type: " + vnfType; - logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "VNF Type", vnfType, - "OpenStack", ErrorCode.DataError.getValue(), "Create VNF: Unknown VNF Type"); - logger.debug(error); - throw new VnfException(error, MsoExceptionCategory.USERDATA); - } + } + + else { // This is to support gamma only - get info from vnf_resource table + if (vfVersion != null && !vfVersion.isEmpty()) { + vnfResource = vnfResourceRepo.findByModelNameAndModelVersion(vnfType, vnfVersion); + } else { + vnfResource = vnfResourceRepo.findByModelName(vnfType); + } + if (vnfResource == null) { + String error = "Create VNF: Unknown VNF Type: " + vnfType; + logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "VNF Type", vnfType, + "OpenStack", ErrorCode.DataError.getValue(), "Create VNF: Unknown VNF Type"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } logger.debug("Got VNF module definition from Catalog: {}", vnfResource.toString()); } - // By here - we have either a vf or vnfResource + // By here - we have either a vf or vnfResource - //1607 - Add version check + // 1607 - Add version check // First - see if it's in the VnfResource record // if we have a vf Module - then we have to query to get the VnfResource record. if (!oldWay && vf.getVnfResources() != null) { - vnfResource = vf.getVnfResources(); - if (vnfResource == null) { - logger.debug("Unable to find vnfResource will not error for now..."); - } + vnfResource = vf.getVnfResources(); + if (vnfResource == null) { + logger.debug("Unable to find vnfResource will not error for now..."); + } } String minVersionVnf = null; String maxVersionVnf = null; if (vnfResource != null) { - try { - minVersionVnf = vnfResource.getAicVersionMin(); - maxVersionVnf = vnfResource.getAicVersionMax(); - } catch (Exception e) { - logger.debug("Unable to pull min/max version for this VNF Resource entry",e); - minVersionVnf = null; - maxVersionVnf = null; - } - if (minVersionVnf != null && "".equals(minVersionVnf)) { - minVersionVnf = null; - } - if (maxVersionVnf != null && "".equals(maxVersionVnf)) { - maxVersionVnf = null; - } - } - if (minVersionVnf != null && maxVersionVnf != null) { - MavenLikeVersioning aicV = new MavenLikeVersioning(); - - // double check - if (this.cloudConfig != null) { + try { + minVersionVnf = vnfResource.getAicVersionMin(); + maxVersionVnf = vnfResource.getAicVersionMax(); + } catch (Exception e) { + logger.debug("Unable to pull min/max version for this VNF Resource entry", e); + minVersionVnf = null; + maxVersionVnf = null; + } + if (minVersionVnf != null && "".equals(minVersionVnf)) { + minVersionVnf = null; + } + if (maxVersionVnf != null && "".equals(maxVersionVnf)) { + maxVersionVnf = null; + } + } + if (minVersionVnf != null && maxVersionVnf != null) { + MavenLikeVersioning aicV = new MavenLikeVersioning(); + + // double check + if (this.cloudConfig != null) { Optional<CloudSite> cloudSiteOpt = this.cloudConfig.getCloudSite(cloudSiteId); if (cloudSiteOpt.isPresent()) { aicV.setVersion(cloudSiteOpt.get().getCloudVersion()); - // Add code to handle unexpected values in here - boolean moreThanMin = true; - boolean equalToMin = true; - boolean moreThanMax = true; - boolean equalToMax = true; - boolean doNotTest = false; - try { - moreThanMin = aicV.isMoreRecentThan(minVersionVnf); - equalToMin = aicV.isTheSameVersion(minVersionVnf); - moreThanMax = aicV.isMoreRecentThan(maxVersionVnf); - equalToMax = aicV.isTheSameVersion(maxVersionVnf); - } catch (Exception e) { - logger.debug("An exception occurred while trying to test AIC Version {} - will default to not check", - e.getMessage(), e); - doNotTest = true; - } - if (!doNotTest) { - if ((moreThanMin || equalToMin) // aic >= min - && (equalToMax || !(moreThanMax))) { //aic <= max - logger.debug( - "VNF Resource " + vnfResource.getModelName() + ", ModelUuid=" + vnfResource.getModelUUID() - + " VersionMin=" + minVersionVnf + " VersionMax:" + maxVersionVnf + " supported on Cloud: " - + cloudSiteId + " with AIC_Version:" + cloudSiteOpt.get().getCloudVersion()); - } else { - // ERROR - String error = "VNF Resource type: " + vnfResource.getModelName() + ", ModelUuid=" + vnfResource.getModelUUID() + " VersionMin=" + minVersionVnf + " VersionMax:" + maxVersionVnf + " NOT supported on Cloud: " + cloudSiteId + " with AIC_Version:" + cloudSiteOpt.get().getCloudVersion(); - logger.error("{} {} {} {} {}", MessageEnum.RA_CONFIG_EXC.toString(), error, "OpenStack", - ErrorCode.BusinessProcesssError.getValue(), "Exception - setVersion"); - logger.debug(error); - throw new VnfException(error, MsoExceptionCategory.USERDATA); - } - } else { - logger.debug("bypassing testing AIC version..."); - } - } // let this error out downstream to avoid introducing uncertainty at this stage - } else { - logger.debug("cloudConfig is NULL - cannot check cloud site version"); - } - } else { - logger.debug("AIC Version not set in VNF_Resource - this is expected thru 1607 - do not error here - not checked" - + "."); - } - // End Version check 1607 - - - - - // By the time we get here - heatTemplateId and heatEnvtId should be populated (or null) - HeatTemplate heatTemplate = null; + // Add code to handle unexpected values in here + boolean moreThanMin = true; + boolean equalToMin = true; + boolean moreThanMax = true; + boolean equalToMax = true; + boolean doNotTest = false; + try { + moreThanMin = aicV.isMoreRecentThan(minVersionVnf); + equalToMin = aicV.isTheSameVersion(minVersionVnf); + moreThanMax = aicV.isMoreRecentThan(maxVersionVnf); + equalToMax = aicV.isTheSameVersion(maxVersionVnf); + } catch (Exception e) { + logger.debug( + "An exception occurred while trying to test AIC Version {} - will default to not check", + e.getMessage(), e); + doNotTest = true; + } + if (!doNotTest) { + if ((moreThanMin || equalToMin) // aic >= min + && (equalToMax || !(moreThanMax))) { // aic <= max + logger.debug("VNF Resource " + vnfResource.getModelName() + ", ModelUuid=" + + vnfResource.getModelUUID() + " VersionMin=" + minVersionVnf + " VersionMax:" + + maxVersionVnf + " supported on Cloud: " + cloudSiteId + " with AIC_Version:" + + cloudSiteOpt.get().getCloudVersion()); + } else { + // ERROR + String error = "VNF Resource type: " + vnfResource.getModelName() + ", ModelUuid=" + + vnfResource.getModelUUID() + " VersionMin=" + minVersionVnf + " VersionMax:" + + maxVersionVnf + " NOT supported on Cloud: " + cloudSiteId + + " with AIC_Version:" + cloudSiteOpt.get().getCloudVersion(); + logger.error("{} {} {} {} {}", MessageEnum.RA_CONFIG_EXC.toString(), error, "OpenStack", + ErrorCode.BusinessProcesssError.getValue(), "Exception - setVersion"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } + } else { + logger.debug("bypassing testing AIC version..."); + } + } // let this error out downstream to avoid introducing uncertainty at this stage + } else { + logger.debug("cloudConfig is NULL - cannot check cloud site version"); + } + } else { + logger.debug( + "AIC Version not set in VNF_Resource - this is expected thru 1607 - do not error here - not checked" + + "."); + } + // End Version check 1607 + + + + // By the time we get here - heatTemplateId and heatEnvtId should be populated (or null) + HeatTemplate heatTemplate = null; HeatEnvironment heatEnvironment = null; if (oldWay) { - //This will handle old Gamma BrocadeVCE VNF - heatTemplate = vnfResource.getHeatTemplates(); - } - else { - if (vf != null) { - if (isVolumeRequest) { - heatTemplate = vf.getVolumeHeatTemplate(); - heatEnvironment = vfmc.getVolumeHeatEnv(); - } else { - heatTemplate = vf.getModuleHeatTemplate(); - heatEnvironment = vfmc.getHeatEnvironment(); - } - } - } - - if (heatTemplate == null) { - String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + ", reqType=" + requestTypeString; - logger - .error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Template ID", vfModuleType, - "OpenStack", ErrorCode.DataError.getValue(), error); - logger.debug(error); - throw new VnfException(error, MsoExceptionCategory.INTERNAL); - } else { - logger.debug("Got HEAT Template from DB: {}", heatTemplate.getHeatTemplate()); - } - - if (oldWay) { - //This will handle old Gamma BrocadeVCE VNF - logger.debug("No environment parameter found for this Type " + vfModuleType); - } else { - if (heatEnvironment == null) { - String error = "Update VNF: undefined Heat Environment. VF=" + vfModuleType; - logger.error("{} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Environment ID", - "OpenStack", ErrorCode.DataError.getValue(), error); - logger.debug(error); - throw new VnfException (error, MsoExceptionCategory.INTERNAL); - } else { - logger.debug("Got Heat Environment from DB: {}", heatEnvironment.getEnvironment()); - } - } + // This will handle old Gamma BrocadeVCE VNF + heatTemplate = vnfResource.getHeatTemplates(); + } else { + if (vf != null) { + if (isVolumeRequest) { + heatTemplate = vf.getVolumeHeatTemplate(); + heatEnvironment = vfmc.getVolumeHeatEnv(); + } else { + heatTemplate = vf.getModuleHeatTemplate(); + heatEnvironment = vfmc.getHeatEnvironment(); + } + } + } + + if (heatTemplate == null) { + String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + + ", reqType=" + requestTypeString; + logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Template ID", + vfModuleType, "OpenStack", ErrorCode.DataError.getValue(), error); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.INTERNAL); + } else { + logger.debug("Got HEAT Template from DB: {}", heatTemplate.getHeatTemplate()); + } + + if (oldWay) { + // This will handle old Gamma BrocadeVCE VNF + logger.debug("No environment parameter found for this Type " + vfModuleType); + } else { + if (heatEnvironment == null) { + String error = "Update VNF: undefined Heat Environment. VF=" + vfModuleType; + logger.error("{} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Environment ID", + "OpenStack", ErrorCode.DataError.getValue(), error); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.INTERNAL); + } else { + logger.debug("Got Heat Environment from DB: {}", heatEnvironment.getEnvironment()); + } + } logger.debug("In MsoVnfAdapterImpl, about to call db.getNestedTemplates avec templateId=" - + heatTemplate.getArtifactUuid ()); + + heatTemplate.getArtifactUuid()); List<HeatTemplate> nestedTemplates = heatTemplate.getChildTemplates(); - Map <String, Object> nestedTemplatesChecked = new HashMap <> (); + Map<String, Object> nestedTemplatesChecked = new HashMap<>(); if (nestedTemplates != null && !nestedTemplates.isEmpty()) { // for debugging print them out logger.debug("Contents of nestedTemplates - to be added to files: on stack:"); for (HeatTemplate entry : nestedTemplates) { - nestedTemplatesChecked.put (entry.getTemplateName(), entry.getTemplateBody()); + nestedTemplatesChecked.put(entry.getTemplateName(), entry.getTemplateBody()); logger.debug(entry.getTemplateName() + " -> " + entry.getTemplateBody()); } } else { @@ -990,51 +1010,53 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { // *if* there are any List<HeatFiles> heatFiles = null; - Map<String, Object> heatFilesObjects = new HashMap<>(); + Map<String, Object> heatFilesObjects = new HashMap<>(); // Add ability to turn on adding get_files with volume requests (by property). boolean addGetFilesOnVolumeReq = false; try { - String propertyString = this.environment.getProperty(MsoVnfAdapterImpl.ADD_GET_FILES_ON_VOLUME_REQ); - if ("true".equalsIgnoreCase(propertyString) || "y".equalsIgnoreCase(propertyString)) { - addGetFilesOnVolumeReq = true; - logger.debug("AddGetFilesOnVolumeReq - setting to true! {}", propertyString); - } + String propertyString = this.environment.getProperty(MsoVnfAdapterImpl.ADD_GET_FILES_ON_VOLUME_REQ); + if ("true".equalsIgnoreCase(propertyString) || "y".equalsIgnoreCase(propertyString)) { + addGetFilesOnVolumeReq = true; + logger.debug("AddGetFilesOnVolumeReq - setting to true! {}", propertyString); + } } catch (Exception e) { logger.debug("An error occured trying to get property " + MsoVnfAdapterImpl.ADD_GET_FILES_ON_VOLUME_REQ - + " - default to false", e); - } - - if (!isVolumeRequest || addGetFilesOnVolumeReq) { - if (oldWay) { - logger.debug("In MsoVnfAdapterImpl createVfModule, this should not happen - old way is gamma only - no heat " - + "files!"); - } else { - // 1607 - now use VF_MODULE_TO_HEAT_FILES table - logger.debug("In MsoVnfAdapterImpl createVfModule, about to call db.getHeatFilesForVfModule avec vfModuleId=" - + vf.getModelUUID()); - heatFiles = vf.getHeatFiles(); - } - if (heatFiles != null && !heatFiles.isEmpty()) { - // add these to stack - to be done in createStack - // here, we will map them to Map<String, Object> from - // Map<String, HeatFiles> - // this will match the nested templates format - logger.debug("Contents of heatFiles - to be added to files: on stack"); - - for (HeatFiles heatfile : heatFiles) { - logger.debug(heatfile.getFileName() + " -> " + heatfile.getFileBody()); - heatFilesObjects.put(heatfile.getFileName(), heatfile.getFileBody()); + + " - default to false", e); + } + + if (!isVolumeRequest || addGetFilesOnVolumeReq) { + if (oldWay) { + logger.debug( + "In MsoVnfAdapterImpl createVfModule, this should not happen - old way is gamma only - no heat " + + "files!"); + } else { + // 1607 - now use VF_MODULE_TO_HEAT_FILES table + logger.debug( + "In MsoVnfAdapterImpl createVfModule, about to call db.getHeatFilesForVfModule avec vfModuleId=" + + vf.getModelUUID()); + heatFiles = vf.getHeatFiles(); + } + if (heatFiles != null && !heatFiles.isEmpty()) { + // add these to stack - to be done in createStack + // here, we will map them to Map<String, Object> from + // Map<String, HeatFiles> + // this will match the nested templates format + logger.debug("Contents of heatFiles - to be added to files: on stack"); + + for (HeatFiles heatfile : heatFiles) { + logger.debug(heatfile.getFileName() + " -> " + heatfile.getFileBody()); + heatFilesObjects.put(heatfile.getFileName(), heatfile.getFileBody()); + } + } else { + logger.debug("No heat files found -nothing to do here"); + heatFilesObjects = null; + } } - } else { - logger.debug("No heat files found -nothing to do here"); - heatFilesObjects = null; - } - } // Check that required parameters have been supplied String missingParams = null; - List <String> paramList = new ArrayList <> (); + List<String> paramList = new ArrayList<>(); // New for 1510 - consult the PARAM_ALIAS field to see if we've been // supplied an alias. Only check if we don't find it initially. @@ -1043,11 +1065,11 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { // shouldn't boolean checkRequiredParameters = true; try { - String propertyString = this.environment.getProperty (MsoVnfAdapterImpl.CHECK_REQD_PARAMS); - if ("false".equalsIgnoreCase (propertyString) || "n".equalsIgnoreCase (propertyString)) { + String propertyString = this.environment.getProperty(MsoVnfAdapterImpl.CHECK_REQD_PARAMS); + if ("false".equalsIgnoreCase(propertyString) || "n".equalsIgnoreCase(propertyString)) { checkRequiredParameters = false; logger.debug("CheckRequiredParameters is FALSE. Will still check but then skip blocking..." - + MsoVnfAdapterImpl.CHECK_REQD_PARAMS); + + MsoVnfAdapterImpl.CHECK_REQD_PARAMS); } } catch (Exception e) { // No problem - default is true @@ -1058,21 +1080,22 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { // Part 2: only submit to openstack the parameters in the envt that are in the heat template // Note this also removes any comments MsoHeatEnvironmentEntry mhee = null; - if (heatEnvironment != null && heatEnvironment.getEnvironment() != null && heatEnvironment.getEnvironment().contains ("parameters:")) { + if (heatEnvironment != null && heatEnvironment.getEnvironment() != null + && heatEnvironment.getEnvironment().contains("parameters:")) { - logger.debug("Enhanced environment checking enabled - 1604"); + logger.debug("Enhanced environment checking enabled - 1604"); StringBuilder sb = new StringBuilder(heatEnvironment.getEnvironment()); mhee = new MsoHeatEnvironmentEntry(sb); StringBuilder sb2 = new StringBuilder("\nHeat Template Parameters:\n"); for (HeatTemplateParam parm : heatTemplate.getParameters()) { - sb2.append("\t" + parm.getParamName() + ", required=" + parm.isRequired()); + sb2.append("\t" + parm.getParamName() + ", required=" + parm.isRequired()); } if (!mhee.isValid()) { - sb2.append("Environment says it's not valid! " + mhee.getErrorString()); + sb2.append("Environment says it's not valid! " + mhee.getErrorString()); } else { - sb2.append("\nEnvironment:"); - sb2.append(mhee.toFullString()); + sb2.append("\nEnvironment:"); + sb2.append(mhee.toFullString()); } logger.debug(sb2.toString()); } else { @@ -1087,18 +1110,18 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { StringBuilder sb = new StringBuilder("\nTemplate Parameters:\n"); int cntr = 0; try { - for (HeatTemplateParam htp : heatTemplate.getParameters()) { - sb.append("param[" + cntr++ + "]=" + htp.getParamName()); - parameterNames.add(htp.getParamName()); - if (htp.getParamAlias() != null && !"".equals(htp.getParamAlias())) { - aliasToParam.put(htp.getParamAlias(), htp.getParamName()); - sb.append(" ** (alias=" + htp.getParamAlias() + ")"); - } - sb.append("\n"); - } + for (HeatTemplateParam htp : heatTemplate.getParameters()) { + sb.append("param[" + cntr++ + "]=" + htp.getParamName()); + parameterNames.add(htp.getParamName()); + if (htp.getParamAlias() != null && !"".equals(htp.getParamAlias())) { + aliasToParam.put(htp.getParamAlias(), htp.getParamName()); + sb.append(" ** (alias=" + htp.getParamAlias() + ")"); + } + sb.append("\n"); + } logger.debug(sb.toString()); } catch (Exception e) { - logger.debug("??An exception occurred trying to go through Parameter Names {}", e.getMessage(),e); + logger.debug("??An exception occurred trying to go through Parameter Names {}", e.getMessage(), e); } // Step 1 - convert what we got as inputs (Map<String, String>) to a // Map<String, Object> - where the object matches the param type identified in the template @@ -1111,147 +1134,141 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { logger.debug("Now add in the volume stack outputs if applicable"); heat.copyBaseOutputsToInputs(goldenInputs, nestedVolumeOutputs, parameterNames, aliasToParam); - for (HeatTemplateParam parm : heatTemplate.getParameters ()) { - logger.debug( - "Parameter:'" + parm.getParamName() + "', isRequired=" + parm.isRequired() + ", alias=" + parm - .getParamAlias()); + for (HeatTemplateParam parm : heatTemplate.getParameters()) { + logger.debug("Parameter:'" + parm.getParamName() + "', isRequired=" + parm.isRequired() + ", alias=" + + parm.getParamAlias()); - if (parm.isRequired () && (goldenInputs == null || !goldenInputs.containsKey (parm.getParamName ()))) { - // The check for an alias was moved to the method in MsoHeatUtils - when we converted the Map<String, String> to Map<String, Object> - logger.debug("**Parameter " + parm.getParamName() + " is required and not in the inputs...check " - + "environment"); + if (parm.isRequired() && (goldenInputs == null || !goldenInputs.containsKey(parm.getParamName()))) { + // The check for an alias was moved to the method in MsoHeatUtils - when we converted the + // Map<String, String> to Map<String, Object> + logger.debug("**Parameter " + parm.getParamName() + " is required and not in the inputs...check " + + "environment"); if (mhee != null && mhee.containsParameter(parm.getParamName())) { logger.debug("Required parameter {} appears to be in environment - do not count as missing", - parm.getParamName()); + parm.getParamName()); } else { logger.debug("adding to missing parameters list: {}", parm.getParamName()); if (missingParams == null) { - missingParams = parm.getParamName (); + missingParams = parm.getParamName(); } else { - missingParams += "," + parm.getParamName (); + missingParams += "," + parm.getParamName(); } } } - paramList.add (parm.getParamName ()); + paramList.add(parm.getParamName()); } if (missingParams != null) { - if (checkRequiredParameters) { - // Problem - missing one or more required parameters - String error = "Create VFModule: Missing Required inputs: " + missingParams; - logger.error("{} {} {} {} {}", MessageEnum.RA_MISSING_PARAM.toString(), missingParams, "OpenStack", - ErrorCode.DataError.getValue(), "Create VFModule: Missing Required inputs"); - logger.debug(error); - throw new VnfException (error, MsoExceptionCategory.USERDATA); - } else { - logger.debug ("found missing parameters - but checkRequiredParameters is false - will not block"); - } + if (checkRequiredParameters) { + // Problem - missing one or more required parameters + String error = "Create VFModule: Missing Required inputs: " + missingParams; + logger.error("{} {} {} {} {}", MessageEnum.RA_MISSING_PARAM.toString(), missingParams, "OpenStack", + ErrorCode.DataError.getValue(), "Create VFModule: Missing Required inputs"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } else { + logger.debug("found missing parameters - but checkRequiredParameters is false - will not block"); + } } else { - logger.debug ("No missing parameters found - ok to proceed"); + logger.debug("No missing parameters found - ok to proceed"); } // We can now remove the recreating of the ENV with only legit params - that check is done for us, // and it causes problems with json that has arrays String newEnvironmentString = null; if (mhee != null) { - newEnvironmentString = mhee.getRawEntry().toString(); + newEnvironmentString = mhee.getRawEntry().toString(); } // "Fix" the template if it has CR/LF (getting this from Oracle) - String template = heatTemplate.getHeatTemplate (); - template = template.replaceAll ("\r\n", "\n"); + String template = heatTemplate.getHeatTemplate(); + template = template.replaceAll("\r\n", "\n"); // Valet - 1806 boolean isValetEnabled = this.checkBooleanProperty(MsoVnfAdapterImpl.VALET_ENABLED, false); - boolean failRequestOnValetFailure = this.checkBooleanProperty(MsoVnfAdapterImpl.FAIL_REQUESTS_ON_VALET_FAILURE, false); + boolean failRequestOnValetFailure = + this.checkBooleanProperty(MsoVnfAdapterImpl.FAIL_REQUESTS_ON_VALET_FAILURE, false); logger.debug("isValetEnabled={}, failRequestsOnValetFailure={}", isValetEnabled, failRequestOnValetFailure); if (oldWay || isVolumeRequest) { - isValetEnabled = false; + isValetEnabled = false; logger.debug("do not send to valet for volume requests or brocade"); } boolean sendResponseToValet = false; if (isValetEnabled) { - Holder<Map<String, Object>> valetModifiedParamsHolder = new Holder<>(); - sendResponseToValet = this.valetCreateRequest(cloudSiteId, tenantId, heatFilesObjects, - nestedTemplatesChecked, vfModuleName, backout, heatTemplate, newEnvironmentString, goldenInputs, - msoRequest, inputs, failRequestOnValetFailure, valetModifiedParamsHolder); - if (sendResponseToValet) { - goldenInputs = valetModifiedParamsHolder.value; - } + Holder<Map<String, Object>> valetModifiedParamsHolder = new Holder<>(); + sendResponseToValet = this.valetCreateRequest(cloudSiteId, cloudOwner, tenantId, heatFilesObjects, + nestedTemplatesChecked, vfModuleName, backout, heatTemplate, newEnvironmentString, goldenInputs, + msoRequest, inputs, failRequestOnValetFailure, valetModifiedParamsHolder); + if (sendResponseToValet) { + goldenInputs = valetModifiedParamsHolder.value; + } } // Have the tenant. Now deploy the stack itself // Ignore MsoTenantNotFound and MsoStackAlreadyExists exceptions // because we already checked for those. - long createStackStarttime = System.currentTimeMillis (); + long createStackStarttime = System.currentTimeMillis(); try { // heatStack = heat.createStack(cloudSiteId, tenantId, vnfName, template, inputs, true, // heatTemplate.getTimeoutMinutes()); - if (backout == null) { - backout = true; - } - if (heat != null) { - logger.debug("heat is not null!!"); - - heatStack = heat.createStack (cloudSiteId, - tenantId, - vfModuleName, - template, - goldenInputs, - true, - heatTemplate.getTimeoutMinutes(), - newEnvironmentString, - nestedTemplatesChecked, - heatFilesObjects, - backout.booleanValue()); - } - else { - logger.debug("heat is null!"); - throw new MsoHeatNotFoundException(); - } + if (backout == null) { + backout = true; + } + if (heat != null) { + logger.debug("heat is not null!!"); + + heatStack = heat.createStack(cloudSiteId, cloudOwner, tenantId, vfModuleName, null, template, + goldenInputs, true, heatTemplate.getTimeoutMinutes(), newEnvironmentString, + nestedTemplatesChecked, heatFilesObjects, backout.booleanValue()); + } else { + logger.debug("heat is null!"); + throw new MsoHeatNotFoundException(); + } } catch (MsoException me) { - me.addContext ("CreateVFModule"); - String error = "Create VF Module " + vfModuleType + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger - .error("{} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, cloudSiteId, - tenantId, "OpenStack", ErrorCode.DataError.getValue(), "MsoException - createStack", - me); + me.addContext("CreateVFModule"); + String error = "Create VF Module " + vfModuleType + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, + cloudOwner, cloudSiteId, tenantId, "OpenStack", ErrorCode.DataError.getValue(), + "MsoException - createStack", me); logger.debug(error); if (isValetEnabled && sendResponseToValet) { - logger.debug("valet is enabled, the orchestration failed - now sending rollback to valet"); - try { - GenericValetResponse<ValetRollbackResponse> gvr = this.vci.callValetRollbackRequest(msoRequest.getRequestId(), null, backout, me.getMessage()); - // Nothing to really do here whether it succeeded or not other than log it. - logger.debug("Return code from Rollback response is {}", gvr.getStatusCode()); - } catch (Exception e) { - logger.error("Exception encountered while sending Rollback to Valet ", e); - } + logger.debug("valet is enabled, the orchestration failed - now sending rollback to valet"); + try { + GenericValetResponse<ValetRollbackResponse> gvr = this.vci + .callValetRollbackRequest(msoRequest.getRequestId(), null, backout, me.getMessage()); + // Nothing to really do here whether it succeeded or not other than log it. + logger.debug("Return code from Rollback response is {}", gvr.getStatusCode()); + } catch (Exception e) { + logger.error("Exception encountered while sending Rollback to Valet ", e); + } } - throw new VnfException (me); + throw new VnfException(me); } catch (NullPointerException npe) { - String error = "Create VFModule " + vfModuleType + " in " + cloudSiteId + "/" + tenantId + ": " + npe; - logger - .error("{} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, cloudSiteId, - tenantId, "OpenStack", ErrorCode.DataError.getValue(), + String error = "Create VFModule " + vfModuleType + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + npe; + logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, + cloudOwner, cloudSiteId, tenantId, "OpenStack", ErrorCode.DataError.getValue(), "NullPointerException - createStack", npe); logger.debug(error); logger.debug("NULL POINTER EXCEPTION at heat.createStack"); - //npe.addContext ("CreateVNF"); - throw new VnfException ("NullPointerException during heat.createStack"); + // npe.addContext ("CreateVNF"); + throw new VnfException("NullPointerException during heat.createStack"); } catch (Exception e) { - logger.debug("unhandled exception at heat.createStack",e); - throw new VnfException("Exception during heat.createStack! " + e.getMessage()); + logger.debug("unhandled exception at heat.createStack", e); + throw new VnfException("Exception during heat.createStack! " + e.getMessage()); } // Reach this point if createStack is successful. // Populate remaining rollback info and response parameters. - vfRollback.setVnfId (heatStack.getCanonicalName ()); - vfRollback.setVnfCreated (true); + vfRollback.setVnfId(heatStack.getCanonicalName()); + vfRollback.setVnfCreated(true); - vnfId.value = heatStack.getCanonicalName (); - outputs.value = copyStringOutputs (heatStack.getOutputs ()); + vnfId.value = heatStack.getCanonicalName(); + outputs.value = copyStringOutputs(heatStack.getOutputs()); rollback.value = vfRollback; if (isValetEnabled && sendResponseToValet) { - logger.debug("valet is enabled, the orchestration succeeded - now send confirm to valet with stack id"); - try { - GenericValetResponse<ValetConfirmResponse> gvr = this.vci.callValetConfirmRequest(msoRequest.getRequestId(), heatStack.getCanonicalName()); + logger.debug("valet is enabled, the orchestration succeeded - now send confirm to valet with stack id"); + try { + GenericValetResponse<ValetConfirmResponse> gvr = + this.vci.callValetConfirmRequest(msoRequest.getRequestId(), heatStack.getCanonicalName()); // Nothing to really do here whether it succeeded or not other than log it. logger.debug("Return code from Confirm response is {}", gvr.getStatusCode()); } catch (Exception e) { @@ -1259,88 +1276,94 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { } } logger.debug("VF Module {} successfully created", vfModuleName); + // call heatbridge + heatbridge(heatStack, cloudOwner, cloudSiteId, tenantId, genericVnfName, vfModuleId); return; } catch (Exception e) { - logger.debug("unhandled exception in create VF",e); - throw new VnfException("Exception during create VF " + e.getMessage()); + logger.debug("unhandled exception in create VF", e); + throw new VnfException("Exception during create VF " + e.getMessage()); } } @Override - public void deleteVfModule (String cloudSiteId, - String tenantId, - String vnfName, - MsoRequest msoRequest, - Holder <Map <String, String>> outputs) throws VnfException { + public void deleteVfModule(String cloudSiteId, String cloudOwner, String tenantId, String vnfName, + MsoRequest msoRequest, Holder<Map<String, String>> outputs) throws VnfException { - logger.debug("Deleting VF {} in ", vnfName, cloudSiteId + "/" + tenantId); + logger.debug("Deleting VF {} in ", vnfName, cloudOwner + "/" + cloudSiteId + "/" + tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); // 1702 capture the output parameters on a delete // so we'll need to query first Map<String, Object> stackOutputs = null; try { - stackOutputs = heat.queryStackForOutputs(cloudSiteId, tenantId, vnfName); + stackOutputs = heat.queryStackForOutputs(cloudSiteId, cloudOwner, tenantId, vnfName); } catch (MsoException me) { // Failed to query the Stack due to an openstack exception. // Convert to a generic VnfException - me.addContext ("DeleteVFModule"); - String error = "Delete VFModule: Query to get outputs: " + vnfName + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, cloudSiteId, - tenantId, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), "Exception - QueryStack", - me); + me.addContext("DeleteVFModule"); + String error = "Delete VFModule: Query to get outputs: " + vnfName + " in " + cloudOwner + "/" + cloudSiteId + + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, cloudOwner, + cloudSiteId, tenantId, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), + "Exception - QueryStack", me); logger.debug(error); - throw new VnfException (me); + throw new VnfException(me); } - // call method which handles the conversion from Map<String,Object> to Map<String,String> for our expected Object types + // call method which handles the conversion from Map<String,Object> to Map<String,String> for our expected + // Object types outputs.value = this.convertMapStringObjectToStringString(stackOutputs); boolean isValetEnabled = this.checkBooleanProperty(MsoVnfAdapterImpl.VALET_ENABLED, false); - boolean failRequestOnValetFailure = this.checkBooleanProperty(MsoVnfAdapterImpl.FAIL_REQUESTS_ON_VALET_FAILURE, false); + boolean failRequestOnValetFailure = + this.checkBooleanProperty(MsoVnfAdapterImpl.FAIL_REQUESTS_ON_VALET_FAILURE, false); logger.debug("isValetEnabled={}, failRequestsOnValetFailure={}", isValetEnabled, failRequestOnValetFailure); boolean valetDeleteRequestSucceeded = false; if (isValetEnabled) { - valetDeleteRequestSucceeded = this.valetDeleteRequest(cloudSiteId, tenantId, vnfName, msoRequest, failRequestOnValetFailure); + valetDeleteRequestSucceeded = this.valetDeleteRequest(cloudSiteId, cloudOwner, tenantId, vnfName, + msoRequest, failRequestOnValetFailure); } // Use the MsoHeatUtils to delete the stack. Set the polling flag to true. // The possible outcomes of deleteStack are a StackInfo object with status // of NOTFOUND (on success) or FAILED (on error). Also, MsoOpenstackException // could be thrown. - long subStartTime = System.currentTimeMillis (); + long subStartTime = System.currentTimeMillis(); try { - heat.deleteStack (tenantId, cloudSiteId, vnfName, true); + heat.deleteStack(tenantId, cloudOwner, cloudSiteId, vnfName, true); } catch (MsoException me) { - me.addContext ("DeleteVNF"); + me.addContext("DeleteVNF"); // Failed to query the Stack due to an openstack exception. // Convert to a generic VnfException - String error = "Delete VF: " + vnfName + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vnfName, cloudSiteId, - tenantId, "OpenStack", "DeleteStack", ErrorCode.DataError.getValue(), - "Exception - deleteStack", me); + String error = + "Delete VF: " + vnfName + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vnfName, cloudOwner, + cloudSiteId, tenantId, "OpenStack", "DeleteStack", ErrorCode.DataError.getValue(), + "Exception - deleteStack", me); logger.debug(error); if (isValetEnabled && valetDeleteRequestSucceeded) { - logger.debug("valet is enabled, the orchestration failed - now sending rollback to valet"); - try { - GenericValetResponse<ValetRollbackResponse> gvr = this.vci.callValetRollbackRequest(msoRequest.getRequestId(), vnfName, false, me.getMessage()); - // Nothing to really do here whether it succeeded or not other than log it. - logger.debug("Return code from Rollback response is {}", gvr.getStatusCode()); - } catch (Exception e) { - logger.error("Exception encountered while sending Rollback to Valet ", e); - } + logger.debug("valet is enabled, the orchestration failed - now sending rollback to valet"); + try { + GenericValetResponse<ValetRollbackResponse> gvr = this.vci + .callValetRollbackRequest(msoRequest.getRequestId(), vnfName, false, me.getMessage()); + // Nothing to really do here whether it succeeded or not other than log it. + logger.debug("Return code from Rollback response is {}", gvr.getStatusCode()); + } catch (Exception e) { + logger.error("Exception encountered while sending Rollback to Valet ", e); + } } - throw new VnfException (me); + throw new VnfException(me); } if (isValetEnabled && valetDeleteRequestSucceeded) { - // only if the original request succeeded do we send a confirm - logger.debug("valet is enabled, the delete succeeded - now send confirm to valet"); - try { - GenericValetResponse<ValetConfirmResponse> gvr = this.vci.callValetConfirmRequest(msoRequest.getRequestId(), vnfName); + // only if the original request succeeded do we send a confirm + logger.debug("valet is enabled, the delete succeeded - now send confirm to valet"); + try { + GenericValetResponse<ValetConfirmResponse> gvr = + this.vci.callValetConfirmRequest(msoRequest.getRequestId(), vnfName); // Nothing to really do here whether it succeeded or not other than log it. - logger.debug("Return code from Confirm response is {}", gvr.getStatusCode()); + logger.debug("Return code from Confirm response is {}", gvr.getStatusCode()); } catch (Exception e) { - logger.error("Exception encountered while sending Confirm to Valet ", e); + logger.error("Exception encountered while sending Confirm to Valet ", e); } } @@ -1349,45 +1372,37 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { } @Override - public void updateVfModule (String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - String baseVfHeatStackId, - String vfModuleStackId, - String modelCustomizationUuid, - Map <String, Object> inputs, - MsoRequest msoRequest, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) throws VnfException { - String vfModuleName = vnfName; - String vfModuleType = vnfType; - String methodName = "updateVfModule"; - String serviceName = VNF_ADAPTER_SERVICE_NAME + methodName; - - StringBuilder sbInit = new StringBuilder(); - sbInit.append("updateVfModule: \n"); - sbInit.append("cloudSiteId=" + cloudSiteId + "\n"); - sbInit.append("tenantId=" + tenantId + "\n"); - sbInit.append("vnfType=" + vnfType + "\n"); - sbInit.append("vnfVersion=" + vnfVersion + "\n"); - sbInit.append("vnfName=" + vnfName + "\n"); - sbInit.append("requestType=" + requestType + "\n"); - sbInit.append("volumeGroupHeatStackId=" + volumeGroupHeatStackId + "\n"); - sbInit.append("baseVfHeatStackId=" + baseVfHeatStackId + "\n"); - sbInit.append("vfModuleStackId=" + vfModuleStackId + "\n"); - sbInit.append("modelCustomizationUuid=" + modelCustomizationUuid + "\n"); - logger.debug(sbInit.toString()); + public void updateVfModule(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, + String vnfVersion, String vnfName, String requestType, String volumeGroupHeatStackId, + String baseVfHeatStackId, String vfModuleStackId, String modelCustomizationUuid, Map<String, Object> inputs, + MsoRequest msoRequest, Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) + throws VnfException { + String vfModuleName = vnfName; + String vfModuleType = vnfType; + String methodName = "updateVfModule"; + String serviceName = VNF_ADAPTER_SERVICE_NAME + methodName; + + StringBuilder sbInit = new StringBuilder(); + sbInit.append("updateVfModule: \n"); + sbInit.append("cloudOwner=" + cloudOwner + "\n"); + sbInit.append("cloudSiteId=" + cloudSiteId + "\n"); + sbInit.append("tenantId=" + tenantId + "\n"); + sbInit.append("vnfType=" + vnfType + "\n"); + sbInit.append("vnfVersion=" + vnfVersion + "\n"); + sbInit.append("vnfName=" + vnfName + "\n"); + sbInit.append("requestType=" + requestType + "\n"); + sbInit.append("volumeGroupHeatStackId=" + volumeGroupHeatStackId + "\n"); + sbInit.append("baseVfHeatStackId=" + baseVfHeatStackId + "\n"); + sbInit.append("vfModuleStackId=" + vfModuleStackId + "\n"); + sbInit.append("modelCustomizationUuid=" + modelCustomizationUuid + "\n"); + logger.debug(sbInit.toString()); String mcu = modelCustomizationUuid; boolean useMCUuid = false; if (mcu != null && !mcu.isEmpty()) { if ("null".equalsIgnoreCase(mcu)) { logger.debug("modelCustomizationUuid: passed in as the string 'null' - will ignore: {}", - modelCustomizationUuid); + modelCustomizationUuid); useMCUuid = false; mcu = ""; } else { @@ -1396,46 +1411,50 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { } } - String requestTypeString = ""; + String requestTypeString = ""; if (requestType != null && !"".equals(requestType)) { - requestTypeString = requestType; + requestTypeString = requestType; } String nestedStackId = null; - if (volumeGroupHeatStackId != null && !"".equals(volumeGroupHeatStackId) && !"null".equalsIgnoreCase(volumeGroupHeatStackId)) { - nestedStackId = volumeGroupHeatStackId; + if (volumeGroupHeatStackId != null && !"".equals(volumeGroupHeatStackId) + && !"null".equalsIgnoreCase(volumeGroupHeatStackId)) { + nestedStackId = volumeGroupHeatStackId; } String nestedBaseStackId = null; if (baseVfHeatStackId != null && !"".equals(baseVfHeatStackId) && !"null".equalsIgnoreCase(baseVfHeatStackId)) { - nestedBaseStackId = baseVfHeatStackId; + nestedBaseStackId = baseVfHeatStackId; } if (inputs == null) { - // Create an empty set of inputs - inputs = new HashMap<>(); + // Create an empty set of inputs + inputs = new HashMap<>(); logger.debug("inputs == null - setting to empty"); } boolean isBaseRequest = false; boolean isVolumeRequest = false; if (requestTypeString.startsWith("VOLUME")) { - isVolumeRequest = true; + isVolumeRequest = true; } if ((vfModuleName == null || "".equals(vfModuleName.trim())) && vfModuleStackId != null) { - vfModuleName = this.getVfModuleNameFromModuleStackId(vfModuleStackId); + vfModuleName = this.getVfModuleNameFromModuleStackId(vfModuleStackId); } - logger.debug ("Updating VFModule: " + vfModuleName + " of type " + vfModuleType + "in " + cloudSiteId + "/" + tenantId); - logger.debug("requestTypeString = " + requestTypeString + ", nestedVolumeStackId = " + nestedStackId + ", nestedBaseStackId = " + nestedBaseStackId); + logger.debug("Updating VFModule: " + vfModuleName + " of type " + vfModuleType + "in " + cloudOwner + "/" + + cloudSiteId + "/" + tenantId); + logger.debug("requestTypeString = " + requestTypeString + ", nestedVolumeStackId = " + nestedStackId + + ", nestedBaseStackId = " + nestedBaseStackId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); // Build a default rollback object (no actions performed) - VnfRollback vfRollback = new VnfRollback (); - vfRollback.setCloudSiteId (cloudSiteId); - vfRollback.setTenantId (tenantId); - vfRollback.setMsoRequest (msoRequest); + VnfRollback vfRollback = new VnfRollback(); + vfRollback.setCloudSiteId(cloudSiteId); + vfRollback.setCloudOwner(cloudOwner); + vfRollback.setTenantId(tenantId); + vfRollback.setMsoRequest(msoRequest); vfRollback.setRequestType(requestTypeString); vfRollback.setVolumeGroupHeatStackId(volumeGroupHeatStackId); vfRollback.setBaseGroupHeatStackId(baseVfHeatStackId); @@ -1444,575 +1463,569 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { vfRollback.setModelCustomizationUuid(mcu); StackInfo heatStack = null; - long queryStackStarttime = System.currentTimeMillis (); + long queryStackStarttime = System.currentTimeMillis(); logger.debug("UpdateVfModule - querying for {}", vfModuleName); try { - heatStack = heat.queryStack (cloudSiteId, tenantId, vfModuleName); + heatStack = heat.queryStack(cloudSiteId, cloudOwner, tenantId, vfModuleName); } catch (MsoException me) { // Failed to query the Stack due to an openstack exception. // Convert to a generic VnfException - me.addContext ("UpdateVFModule"); - String error = "Update VFModule: Query " + vfModuleName + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, cloudSiteId, - tenantId, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), "Exception - QueryStack", - me); + me.addContext("UpdateVFModule"); + String error = "Update VFModule: Query " + vfModuleName + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), + "Exception - QueryStack", me); logger.debug(error); - throw new VnfException (me); + throw new VnfException(me); } - //TODO - do we need to check for the other status possibilities? - if (heatStack == null || heatStack.getStatus () == HeatStatus.NOTFOUND) { + // TODO - do we need to check for the other status possibilities? + if (heatStack == null || heatStack.getStatus() == HeatStatus.NOTFOUND) { // Not Found - String error = "Update VF: Stack " + vfModuleName + " does not exist in " + cloudSiteId + "/" + tenantId; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_NOT_EXIST.toString(), vfModuleName, cloudSiteId, - tenantId, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), error); - throw new VnfNotFound (cloudSiteId, tenantId, vfModuleName); + String error = "Update VF: Stack " + vfModuleName + " does not exist in " + cloudOwner + "/" + cloudSiteId + + "/" + tenantId; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_NOT_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), + error); + throw new VnfNotFound(cloudSiteId, cloudOwner, tenantId, vfModuleName); } else { logger.debug("Found Existing stack, status={}", heatStack.getStatus()); // Populate the outputs from the existing stack. - outputs.value = copyStringOutputs (heatStack.getOutputs ()); + outputs.value = copyStringOutputs(heatStack.getOutputs()); rollback.value = vfRollback; // Default rollback - no updates performed } // 1604 Cinder Volume support - handle a nestedStackId if sent (volumeGroupHeatStackId): StackInfo nestedHeatStack = null; - long queryStackStarttime2 = System.currentTimeMillis (); + long queryStackStarttime2 = System.currentTimeMillis(); Map<String, Object> nestedVolumeOutputs = null; if (nestedStackId != null) { - try { - logger.debug("Querying for nestedStackId = {}", nestedStackId); - nestedHeatStack = heat.queryStack(cloudSiteId, tenantId, nestedStackId); - } catch (MsoException me) { - // Failed to query the Stack due to an openstack exception. - // Convert to a generic VnfException - me.addContext ("UpdateVFModule"); - String error = "Update VF: Attached heatStack ID Query " + nestedStackId + " in " + cloudSiteId + "/" + tenantId + ": " + me ; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, cloudSiteId, - tenantId, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), "Exception - " + error, - me); - logger.debug("ERROR trying to query nested stack= {}", error); - throw new VnfException (me); - } - if (nestedHeatStack == null || nestedHeatStack.getStatus() == HeatStatus.NOTFOUND) { - String error = "Update VFModule: Attached volume heatStack ID DOES NOT EXIST " + nestedStackId + " in " + cloudSiteId + "/" + tenantId + " USER ERROR" ; - logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, cloudSiteId, - tenantId, error, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), error); - logger.debug(error); - throw new VnfException (error, MsoExceptionCategory.USERDATA); - } else { - logger.debug("Found nested heat stack - copying values to inputs *later*"); - nestedVolumeOutputs = nestedHeatStack.getOutputs(); - heat.copyStringOutputsToInputs(inputs, nestedHeatStack.getOutputs(), false); - } + try { + logger.debug("Querying for nestedStackId = {}", nestedStackId); + nestedHeatStack = heat.queryStack(cloudSiteId, cloudOwner, tenantId, nestedStackId); + } catch (MsoException me) { + // Failed to query the Stack due to an openstack exception. + // Convert to a generic VnfException + me.addContext("UpdateVFModule"); + String error = "Update VF: Attached heatStack ID Query " + nestedStackId + " in " + cloudOwner + "/" + + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, cloudOwner, + cloudSiteId, tenantId, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), + "Exception - " + error, me); + logger.debug("ERROR trying to query nested stack= {}", error); + throw new VnfException(me); + } + if (nestedHeatStack == null || nestedHeatStack.getStatus() == HeatStatus.NOTFOUND) { + String error = "Update VFModule: Attached volume heatStack ID DOES NOT EXIST " + nestedStackId + " in " + + cloudOwner + "/" + cloudSiteId + "/" + tenantId + " USER ERROR"; + logger.error("{} {} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, + cloudOwner, cloudSiteId, tenantId, error, "OpenStack", "QueryStack", + ErrorCode.DataError.getValue(), error); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } else { + logger.debug("Found nested heat stack - copying values to inputs *later*"); + nestedVolumeOutputs = nestedHeatStack.getOutputs(); + heat.copyStringOutputsToInputs(inputs, nestedHeatStack.getOutputs(), false); + } } // handle a nestedBaseStackId if sent - this is the stack ID of the base. StackInfo nestedBaseHeatStack = null; Map<String, Object> baseStackOutputs = null; if (nestedBaseStackId != null) { - long queryStackStarttime3 = System.currentTimeMillis (); - try { - logger.debug("Querying for nestedBaseStackId = {}", nestedBaseStackId); - nestedBaseHeatStack = heat.queryStack(cloudSiteId, tenantId, nestedBaseStackId); - } catch (MsoException me) { - // Failed to query the Stack due to an openstack exception. - // Convert to a generic VnfException - me.addContext ("UpdateVfModule"); - String error = "Update VFModule: Attached baseHeatStack ID Query " + nestedBaseStackId + " in " + cloudSiteId + "/" + tenantId + ": " + me ; - logger - .error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, cloudSiteId, - tenantId, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), - "Exception - " + error, me); - logger.debug("ERROR trying to query nested base stack= {}", error); - throw new VnfException (me); - } - if (nestedBaseHeatStack == null || nestedBaseHeatStack.getStatus() == HeatStatus.NOTFOUND) { - String error = "Update VFModule: Attached base heatStack ID DOES NOT EXIST " + nestedBaseStackId + " in " + cloudSiteId + "/" + tenantId + " USER ERROR" ; - logger.error ("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, - cloudSiteId, tenantId, error, "OpenStack", - "QueryStack", ErrorCode.DataError.getValue(), error); - logger.debug(error); - throw new VnfException (error, MsoExceptionCategory.USERDATA); - } else { - logger.debug("Found nested base heat stack - copying values to inputs *later*"); - baseStackOutputs = nestedBaseHeatStack.getOutputs(); - heat.copyStringOutputsToInputs(inputs, nestedBaseHeatStack.getOutputs(), false); - } + long queryStackStarttime3 = System.currentTimeMillis(); + try { + logger.debug("Querying for nestedBaseStackId = {}", nestedBaseStackId); + nestedBaseHeatStack = heat.queryStack(cloudSiteId, cloudOwner, tenantId, nestedBaseStackId); + } catch (MsoException me) { + // Failed to query the Stack due to an openstack exception. + // Convert to a generic VnfException + me.addContext("UpdateVfModule"); + String error = "Update VFModule: Attached baseHeatStack ID Query " + nestedBaseStackId + " in " + + cloudOwner + "/" + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "OpenStack", "QueryStack", ErrorCode.DataError.getValue(), + "Exception - " + error, me); + logger.debug("ERROR trying to query nested base stack= {}", error); + throw new VnfException(me); + } + if (nestedBaseHeatStack == null || nestedBaseHeatStack.getStatus() == HeatStatus.NOTFOUND) { + String error = "Update VFModule: Attached base heatStack ID DOES NOT EXIST " + nestedBaseStackId + + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + " USER ERROR"; + logger.error("{} {} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, error, "OpenStack", "QueryStack", + ErrorCode.DataError.getValue(), error); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } else { + logger.debug("Found nested base heat stack - copying values to inputs *later*"); + baseStackOutputs = nestedBaseHeatStack.getOutputs(); + heat.copyStringOutputsToInputs(inputs, nestedBaseHeatStack.getOutputs(), false); + } } // Ready to deploy the new VNF - // Retrieve the VF definition - VnfResource vnfResource = null; - VfModule vf = null; - VfModuleCustomization vfmc = null; - if (useMCUuid){ - vfmc = vfModuleCustomRepo.findByModelCustomizationUUID(modelCustomizationUuid); - vf = vfmc != null ? vfmc.getVfModule() : null; - if (vf == null) { - logger.debug("Unable to find a vfModule matching modelCustomizationUuid={}", mcu); - } - } else { - logger.debug("1707 and later - MUST PROVIDE Model Customization UUID!"); - } - if (vf == null) { - String error = "Update VfModule: unable to find vfModule with modelCustomizationUuid=" + mcu; - logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "VF Module Type", - vfModuleType, "OpenStack", ErrorCode.DataError.getValue(), error); - throw new VnfException(error, MsoExceptionCategory.USERDATA); - } - logger.debug("Got VF module definition from Catalog: {}", vf.toString()); - if (vf.getIsBase()) { - isBaseRequest = true; - logger.debug("This a BASE update request"); - } else { - logger.debug("This is *not* a BASE VF update request"); - if (!isVolumeRequest && nestedBaseStackId == null) { - logger.debug("DANGER WILL ROBINSON! This is unexpected - no nestedBaseStackId with this non-base request"); - } + // Retrieve the VF definition + VnfResource vnfResource = null; + VfModule vf = null; + VfModuleCustomization vfmc = null; + if (useMCUuid) { + vfmc = vfModuleCustomRepo.findFirstByModelCustomizationUUIDOrderByCreatedDesc(modelCustomizationUuid); + vf = vfmc != null ? vfmc.getVfModule() : null; + if (vf == null) { + logger.debug("Unable to find a vfModule matching modelCustomizationUuid={}", mcu); + } + } else { + logger.debug("1707 and later - MUST PROVIDE Model Customization UUID!"); + } + if (vf == null) { + String error = "Update VfModule: unable to find vfModule with modelCustomizationUuid=" + mcu; + logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "VF Module Type", + vfModuleType, "OpenStack", ErrorCode.DataError.getValue(), error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } + logger.debug("Got VF module definition from Catalog: {}", vf.toString()); + if (vf.getIsBase()) { + isBaseRequest = true; + logger.debug("This a BASE update request"); + } else { + logger.debug("This is *not* a BASE VF update request"); + if (!isVolumeRequest && nestedBaseStackId == null) { + logger.debug( + "DANGER WILL ROBINSON! This is unexpected - no nestedBaseStackId with this non-base request"); } + } - //1607 - Add version check - // First - see if it's in the VnfResource record - // if we have a vf Module - then we have to query to get the VnfResource record. - if (vf.getModelUUID() != null) { - String vnfResourceModelUuid = vf.getModelUUID(); + // 1607 - Add version check + // First - see if it's in the VnfResource record + // if we have a vf Module - then we have to query to get the VnfResource record. + if (vf.getModelUUID() != null) { + String vnfResourceModelUuid = vf.getModelUUID(); - vnfResource = vf.getVnfResources(); - if (vnfResource == null) { - logger.debug("Unable to find vnfResource at ? will not error for now...", vnfResourceModelUuid); - } + vnfResource = vf.getVnfResources(); + if (vnfResource == null) { + logger.debug("Unable to find vnfResource at ? will not error for now...", vnfResourceModelUuid); } + } - String minVersionVnf = null; - String maxVersionVnf = null; - if (vnfResource != null) { - try { - minVersionVnf = vnfResource.getAicVersionMin(); - maxVersionVnf = vnfResource.getAicVersionMax(); - } catch (Exception e) { - logger.debug("Unable to pull min/max version for this VNF Resource entry",e); - minVersionVnf = null; - maxVersionVnf = null; - } - if (minVersionVnf != null && "".equals(minVersionVnf)) { - minVersionVnf = null; - } - if (maxVersionVnf != null && "".equals(maxVersionVnf)) { - maxVersionVnf = null; - } - } - if (minVersionVnf != null && maxVersionVnf != null) { - MavenLikeVersioning aicV = new MavenLikeVersioning(); - - // double check - if (this.cloudConfig != null) { - Optional<CloudSite> cloudSiteOpt = this.cloudConfig.getCloudSite(cloudSiteId); - if (cloudSiteOpt.isPresent()) { - aicV.setVersion(cloudSiteOpt.get().getCloudVersion()); - boolean moreThanMin = true; - boolean equalToMin = true; - boolean moreThanMax = true; - boolean equalToMax = true; - boolean doNotTest = false; - try { - moreThanMin = aicV.isMoreRecentThan(minVersionVnf); - equalToMin = aicV.isTheSameVersion(minVersionVnf); - moreThanMax = aicV.isMoreRecentThan(maxVersionVnf); - equalToMax = aicV.isTheSameVersion(maxVersionVnf); - } catch (Exception e) { - logger.debug("An exception occured while trying to test AIC Version {} - will default to not check", - e.getMessage(), e); - doNotTest = true; - } - if (!doNotTest) { - if ((moreThanMin || equalToMin) // aic >= min - && ((equalToMax) || !(moreThanMax))) { // aic <= max - logger.debug( - "VNF Resource " + vnfResource.getModelName() + " VersionMin=" + minVersionVnf + " VersionMax:" - + maxVersionVnf + " supported on Cloud: " + cloudSiteId + " with AIC_Version:" + aicV); + String minVersionVnf = null; + String maxVersionVnf = null; + if (vnfResource != null) { + try { + minVersionVnf = vnfResource.getAicVersionMin(); + maxVersionVnf = vnfResource.getAicVersionMax(); + } catch (Exception e) { + logger.debug("Unable to pull min/max version for this VNF Resource entry", e); + minVersionVnf = null; + maxVersionVnf = null; + } + if (minVersionVnf != null && "".equals(minVersionVnf)) { + minVersionVnf = null; + } + if (maxVersionVnf != null && "".equals(maxVersionVnf)) { + maxVersionVnf = null; + } + } + if (minVersionVnf != null && maxVersionVnf != null) { + MavenLikeVersioning aicV = new MavenLikeVersioning(); + + // double check + if (this.cloudConfig != null) { + Optional<CloudSite> cloudSiteOpt = this.cloudConfig.getCloudSite(cloudSiteId); + if (cloudSiteOpt.isPresent()) { + aicV.setVersion(cloudSiteOpt.get().getCloudVersion()); + boolean moreThanMin = true; + boolean equalToMin = true; + boolean moreThanMax = true; + boolean equalToMax = true; + boolean doNotTest = false; + try { + moreThanMin = aicV.isMoreRecentThan(minVersionVnf); + equalToMin = aicV.isTheSameVersion(minVersionVnf); + moreThanMax = aicV.isMoreRecentThan(maxVersionVnf); + equalToMax = aicV.isTheSameVersion(maxVersionVnf); + } catch (Exception e) { + logger.debug( + "An exception occured while trying to test AIC Version {} - will default to not check", + e.getMessage(), e); + doNotTest = true; + } + if (!doNotTest) { + if ((moreThanMin || equalToMin) // aic >= min + && ((equalToMax) || !(moreThanMax))) { // aic <= max + logger.debug("VNF Resource " + vnfResource.getModelName() + " VersionMin=" + minVersionVnf + + " VersionMax:" + maxVersionVnf + " supported on Cloud: " + cloudSiteId + + " with AIC_Version:" + aicV); + } else { + // ERROR + String error = "VNF Resource type: " + vnfResource.getModelName() + " VersionMin=" + + minVersionVnf + " VersionMax:" + maxVersionVnf + " NOT supported on Cloud: " + + cloudSiteId + " with AIC_Version:" + aicV; + logger.error("{} {} {} {} {}", MessageEnum.RA_CONFIG_EXC.toString(), error, "OpenStack", + ErrorCode.BusinessProcesssError.getValue(), "Exception - setVersion"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } + } else { + logger.debug("bypassing testing AIC version..."); + } + } // let this error out downstream to avoid introducing uncertainty at this stage } else { - // ERROR - String error = "VNF Resource type: " + vnfResource.getModelName() + " VersionMin=" - + minVersionVnf + " VersionMax:" + maxVersionVnf + " NOT supported on Cloud: " - + cloudSiteId + " with AIC_Version:" + aicV; - logger.error("{} {} {} {} {}", MessageEnum.RA_CONFIG_EXC.toString(), error, "OpenStack", - ErrorCode.BusinessProcesssError.getValue(), "Exception - setVersion"); - logger.debug(error); - throw new VnfException(error, MsoExceptionCategory.USERDATA); - } - } else { - logger.debug("bypassing testing AIC version..."); - } - } // let this error out downstream to avoid introducing uncertainty at this stage - } else { - logger.debug("cloudConfig is NULL - cannot check cloud site version"); - } - - } else { - logger.debug("AIC Version not set in VNF_Resource - do not error for now - not checked."); + logger.debug("cloudConfig is NULL - cannot check cloud site version"); } - // End Version check 1607 - HeatTemplate heatTemplate = null; - HeatEnvironment heatEnvironment = null; - if (isVolumeRequest) { - heatTemplate = vf.getVolumeHeatTemplate(); - heatEnvironment = vfmc.getVolumeHeatEnv(); - } else { - heatTemplate = vf.getModuleHeatTemplate(); - heatEnvironment = vfmc.getHeatEnvironment(); - } - - if (heatTemplate == null) { - String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + ", reqType=" + requestTypeString; - logger - .error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Template ID", vfModuleType, - "OpenStack", ErrorCode.DataError.getValue(), error); - throw new VnfException(error, MsoExceptionCategory.INTERNAL); - } else { - logger.debug("Got HEAT Template from DB: {}", heatTemplate.getHeatTemplate()); - } - - if (heatEnvironment == null) { - String error = "Update VNF: undefined Heat Environment. VF=" + vfModuleType; - logger.error("{} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Environment ID", + } else { + logger.debug("AIC Version not set in VNF_Resource - do not error for now - not checked."); + } + // End Version check 1607 + + HeatTemplate heatTemplate = null; + HeatEnvironment heatEnvironment = null; + if (isVolumeRequest) { + heatTemplate = vf.getVolumeHeatTemplate(); + heatEnvironment = vfmc.getVolumeHeatEnv(); + } else { + heatTemplate = vf.getModuleHeatTemplate(); + heatEnvironment = vfmc.getHeatEnvironment(); + } + + if (heatTemplate == null) { + String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + + ", reqType=" + requestTypeString; + logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Template ID", + vfModuleType, "OpenStack", ErrorCode.DataError.getValue(), error); + throw new VnfException(error, MsoExceptionCategory.INTERNAL); + } else { + logger.debug("Got HEAT Template from DB: {}", heatTemplate.getHeatTemplate()); + } + + if (heatEnvironment == null) { + String error = "Update VNF: undefined Heat Environment. VF=" + vfModuleType; + logger.error("{} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Environment ID", "OpenStack", ErrorCode.DataError.getValue(), error); - throw new VnfException (error, MsoExceptionCategory.INTERNAL); - } else { - logger.debug ("Got Heat Environment from DB: {}", heatEnvironment.getEnvironment()); - } + throw new VnfException(error, MsoExceptionCategory.INTERNAL); + } else { + logger.debug("Got Heat Environment from DB: {}", heatEnvironment.getEnvironment()); + } logger.debug("In MsoVnfAdapterImpl, about to call db.getNestedTemplates avec templateId={}", - heatTemplate.getArtifactUuid()); + heatTemplate.getArtifactUuid()); - List<HeatTemplate> nestedTemplates = heatTemplate.getChildTemplates(); - Map <String, Object> nestedTemplatesChecked = new HashMap <> (); - if (nestedTemplates != null && !nestedTemplates.isEmpty()) { - // for debugging print them out - logger.debug("Contents of nestedTemplates - to be added to files: on stack:"); - for (HeatTemplate entry : nestedTemplates) { + List<HeatTemplate> nestedTemplates = heatTemplate.getChildTemplates(); + Map<String, Object> nestedTemplatesChecked = new HashMap<>(); + if (nestedTemplates != null && !nestedTemplates.isEmpty()) { + // for debugging print them out + logger.debug("Contents of nestedTemplates - to be added to files: on stack:"); + for (HeatTemplate entry : nestedTemplates) { - nestedTemplatesChecked.put (entry.getTemplateName(), entry.getTemplateBody()); - logger.debug(entry.getTemplateName() + " -> " + entry.getTemplateBody()); - } - } else { - logger.debug("No nested templates found - nothing to do here"); - nestedTemplatesChecked = null; + nestedTemplatesChecked.put(entry.getTemplateName(), entry.getTemplateBody()); + logger.debug(entry.getTemplateName() + " -> " + entry.getTemplateBody()); } + } else { + logger.debug("No nested templates found - nothing to do here"); + nestedTemplatesChecked = null; + } - // Also add the files: for any get_files associated with this VfModule - // *if* there are any - logger.debug("In MsoVnfAdapterImpl.updateVfModule, about to call db.getHeatFiles avec vfModuleId={}", - vf.getModelUUID()); + // Also add the files: for any get_files associated with this VfModule + // *if* there are any + logger.debug("In MsoVnfAdapterImpl.updateVfModule, about to call db.getHeatFiles avec vfModuleId={}", + vf.getModelUUID()); - List<HeatFiles> heatFiles = null; - Map <String, Object> heatFilesObjects = new HashMap <> (); + List<HeatFiles> heatFiles = null; + Map<String, Object> heatFilesObjects = new HashMap<>(); - // Add ability to turn on adding get_files with volume requests (by property). - boolean addGetFilesOnVolumeReq = false; - try { - String propertyString = this.environment.getProperty(MsoVnfAdapterImpl.ADD_GET_FILES_ON_VOLUME_REQ); - if ("true".equalsIgnoreCase(propertyString) || "y".equalsIgnoreCase(propertyString)) { - addGetFilesOnVolumeReq = true; - logger.debug("AddGetFilesOnVolumeReq - setting to true! {}", propertyString); - } - } catch (Exception e) { - logger.debug("An error occured trying to get property {} - default to false", - MsoVnfAdapterImpl.ADD_GET_FILES_ON_VOLUME_REQ, e); + // Add ability to turn on adding get_files with volume requests (by property). + boolean addGetFilesOnVolumeReq = false; + try { + String propertyString = this.environment.getProperty(MsoVnfAdapterImpl.ADD_GET_FILES_ON_VOLUME_REQ); + if ("true".equalsIgnoreCase(propertyString) || "y".equalsIgnoreCase(propertyString)) { + addGetFilesOnVolumeReq = true; + logger.debug("AddGetFilesOnVolumeReq - setting to true! {}", propertyString); } - if (!isVolumeRequest || addGetFilesOnVolumeReq) { + } catch (Exception e) { + logger.debug("An error occured trying to get property {} - default to false", + MsoVnfAdapterImpl.ADD_GET_FILES_ON_VOLUME_REQ, e); + } + if (!isVolumeRequest || addGetFilesOnVolumeReq) { logger.debug("In MsoVnfAdapterImpl updateVfModule, about to call db.getHeatFilesForVfModule avec " - + "vfModuleId={}", vf.getModelUUID()); - - heatFiles = vf.getHeatFiles(); - if (heatFiles != null && !heatFiles.isEmpty()) { - // add these to stack - to be done in createStack - // here, we will map them to Map<String, Object> from Map<String, HeatFiles> - // this will match the nested templates format - logger.debug("Contents of heatFiles - to be added to files: on stack:"); - for (HeatFiles heatfile : heatFiles) { - logger.debug(heatfile.getFileName() + " -> " + heatfile.getFileBody()); - heatFilesObjects.put(heatfile.getFileName(), heatfile.getFileBody()); - } - } else { - logger.debug("No heat files found -nothing to do here"); - heatFilesObjects = null; + + "vfModuleId={}", vf.getModelUUID()); + + heatFiles = vf.getHeatFiles(); + if (heatFiles != null && !heatFiles.isEmpty()) { + // add these to stack - to be done in createStack + // here, we will map them to Map<String, Object> from Map<String, HeatFiles> + // this will match the nested templates format + logger.debug("Contents of heatFiles - to be added to files: on stack:"); + for (HeatFiles heatfile : heatFiles) { + logger.debug(heatfile.getFileName() + " -> " + heatfile.getFileBody()); + heatFilesObjects.put(heatfile.getFileName(), heatfile.getFileBody()); } + } else { + logger.debug("No heat files found -nothing to do here"); + heatFilesObjects = null; } + } - // Check that required parameters have been supplied - String missingParams = null; - List <String> paramList = new ArrayList <> (); + // Check that required parameters have been supplied + String missingParams = null; + List<String> paramList = new ArrayList<>(); - // New for 1510 - consult the PARAM_ALIAS field to see if we've been - // supplied an alias. Only check if we don't find it initially. - // Also new in 1510 - don't flag missing parameters if there's an environment - because they might be there. - // And also new - add parameter to turn off checking all together if we find we're blocking orders we - // shouldn't - boolean checkRequiredParameters = true; - try { - String propertyString = this.environment.getProperty (MsoVnfAdapterImpl.CHECK_REQD_PARAMS); - if ("false".equalsIgnoreCase (propertyString) || "n".equalsIgnoreCase (propertyString)) { - checkRequiredParameters = false; - logger.debug("CheckRequiredParameters is FALSE. Will still check but then skip blocking...", + // New for 1510 - consult the PARAM_ALIAS field to see if we've been + // supplied an alias. Only check if we don't find it initially. + // Also new in 1510 - don't flag missing parameters if there's an environment - because they might be there. + // And also new - add parameter to turn off checking all together if we find we're blocking orders we + // shouldn't + boolean checkRequiredParameters = true; + try { + String propertyString = this.environment.getProperty(MsoVnfAdapterImpl.CHECK_REQD_PARAMS); + if ("false".equalsIgnoreCase(propertyString) || "n".equalsIgnoreCase(propertyString)) { + checkRequiredParameters = false; + logger.debug("CheckRequiredParameters is FALSE. Will still check but then skip blocking...", MsoVnfAdapterImpl.CHECK_REQD_PARAMS); - } - } catch (Exception e) { - // No problem - default is true - logger.debug ("An exception occured trying to get property {}", MsoVnfAdapterImpl.CHECK_REQD_PARAMS, - e); } - // 1604 - Add enhanced environment & parameter checking - // Part 1: parse envt entries to see if reqd parameter is there (before used a simple grep - // Part 2: only submit to openstack the parameters in the envt that are in the heat template - // Note this also removes any comments - MsoHeatEnvironmentEntry mhee = null; - if (heatEnvironment != null && heatEnvironment.getEnvironment().toLowerCase ().contains ("parameters:")) { - logger.debug("Enhanced environment checking enabled - 1604"); - StringBuilder sb = new StringBuilder(heatEnvironment.getEnvironment()); - mhee = new MsoHeatEnvironmentEntry(sb); - StringBuilder sb2 = new StringBuilder("\nHeat Template Parameters:\n"); - for (HeatTemplateParam parm : heatTemplate.getParameters()) { - sb2.append("\t" + parm.getParamName() + ", required=" + parm.isRequired()); - } - if (!mhee.isValid()) { - sb2.append("Environment says it's not valid! " + mhee.getErrorString()); - } else { - sb2.append("\nEnvironment:"); - sb2.append(mhee.toFullString()); - } - logger.debug(sb2.toString()); + } catch (Exception e) { + // No problem - default is true + logger.debug("An exception occured trying to get property {}", MsoVnfAdapterImpl.CHECK_REQD_PARAMS, e); + } + // 1604 - Add enhanced environment & parameter checking + // Part 1: parse envt entries to see if reqd parameter is there (before used a simple grep + // Part 2: only submit to openstack the parameters in the envt that are in the heat template + // Note this also removes any comments + MsoHeatEnvironmentEntry mhee = null; + if (heatEnvironment != null && heatEnvironment.getEnvironment().toLowerCase().contains("parameters:")) { + logger.debug("Enhanced environment checking enabled - 1604"); + StringBuilder sb = new StringBuilder(heatEnvironment.getEnvironment()); + mhee = new MsoHeatEnvironmentEntry(sb); + StringBuilder sb2 = new StringBuilder("\nHeat Template Parameters:\n"); + for (HeatTemplateParam parm : heatTemplate.getParameters()) { + sb2.append("\t" + parm.getParamName() + ", required=" + parm.isRequired()); + } + if (!mhee.isValid()) { + sb2.append("Environment says it's not valid! " + mhee.getErrorString()); } else { - logger.debug("NO ENVIRONMENT for this entry"); - } - // New for 1607 - support params of json type - HashMap<String, JsonNode> jsonParams = new HashMap<>(); - boolean hasJson = false; - - for (HeatTemplateParam parm : heatTemplate.getParameters ()) { - logger.debug ("Parameter:'" + parm.getParamName () - + "', isRequired=" - + parm.isRequired () - + ", alias=" - + parm.getParamAlias ()); - // handle json - String parameterType = parm.getParamType(); - if (parameterType == null || "".equals(parameterType.trim())) { - parameterType = "String"; - } - JsonNode jsonNode = null; - if ("json".equalsIgnoreCase(parameterType) && inputs != null) { - if (inputs.containsKey(parm.getParamName()) ) { - hasJson = true; - String jsonString = null; - try { - jsonString = JSON_MAPPER.writeValueAsString(inputs.get(parm.getParamName())); - jsonNode = JSON_MAPPER.readTree(jsonString); - } catch (JsonParseException jpe) { - //TODO - what to do here? - //for now - send the error to debug, but just leave it as a String - String errorMessage = jpe.getMessage(); - logger.debug("Json Error Converting " + parm.getParamName() + " - " + errorMessage,jpe); - hasJson = false; - jsonNode = null; - } catch (Exception e) { + sb2.append("\nEnvironment:"); + sb2.append(mhee.toFullString()); + } + logger.debug(sb2.toString()); + } else { + logger.debug("NO ENVIRONMENT for this entry"); + } + // New for 1607 - support params of json type + HashMap<String, JsonNode> jsonParams = new HashMap<>(); + boolean hasJson = false; + + for (HeatTemplateParam parm : heatTemplate.getParameters()) { + logger.debug("Parameter:'" + parm.getParamName() + "', isRequired=" + parm.isRequired() + ", alias=" + + parm.getParamAlias()); + // handle json + String parameterType = parm.getParamType(); + if (parameterType == null || "".equals(parameterType.trim())) { + parameterType = "String"; + } + JsonNode jsonNode = null; + if ("json".equalsIgnoreCase(parameterType) && inputs != null) { + if (inputs.containsKey(parm.getParamName())) { + hasJson = true; + String jsonString = null; + try { + jsonString = JSON_MAPPER.writeValueAsString(inputs.get(parm.getParamName())); + jsonNode = JSON_MAPPER.readTree(jsonString); + } catch (JsonParseException jpe) { + // TODO - what to do here? + // for now - send the error to debug + logger.debug("Json Error Converting {} - {}", parm.getParamName(), jpe.getMessage(), jpe); + hasJson = false; + jsonNode = null; + } catch (Exception e) { + // or here? + logger.debug("Json Error Converting {} {}", parm.getParamName(), e.getMessage(), e); + hasJson = false; + jsonNode = null; + } + if (jsonNode != null) { + jsonParams.put(parm.getParamName(), jsonNode); + } + } else if (inputs.containsKey(parm.getParamAlias())) { + hasJson = true; + String jsonString = null; + try { + jsonString = (String) inputs.get(parm.getParamAlias()); + jsonNode = JSON_MAPPER.readTree(jsonString); + } catch (JsonParseException jpe) { + // TODO - what to do here? + // for now - send the error to debug, but just leave it as a String + String errorMessage = jpe.getMessage(); + logger.debug("Json Error Converting " + parm.getParamName() + " - " + errorMessage, jpe); + hasJson = false; + jsonNode = null; + } catch (Exception e) { // or here? logger.debug("Json Error Converting " + parm.getParamName() + " " + e.getMessage(), e); hasJson = false; jsonNode = null; } - if (jsonNode != null) { - jsonParams.put(parm.getParamName(), jsonNode); - } - } else if (inputs.containsKey(parm.getParamAlias())) { - hasJson = true; - String jsonString = null; - try { - jsonString = (String)inputs.get(parm.getParamAlias()); - jsonNode = JSON_MAPPER.readTree(jsonString); - } catch (JsonParseException jpe) { - //TODO - what to do here? - //for now - send the error to debug, but just leave it as a String - String errorMessage = jpe.getMessage(); - logger.debug("Json Error Converting " + parm.getParamName() + " - " + errorMessage,jpe); - hasJson = false; - jsonNode = null; - } catch (Exception e) { - // or here? - logger.debug("Json Error Converting " + parm.getParamName() + " " + e.getMessage(), e); - hasJson = false; - jsonNode = null; - } - if (jsonNode != null) { - // Notice here - we add it to the jsonParams hashMap with the actual name - - // then manipulate the inputs so when we check for aliases below - it will not - // get flagged. - jsonParams.put(parm.getParamName(), jsonNode); - inputs.remove(parm.getParamAlias()); - inputs.put(parm.getParamName(), jsonString); - } - } //TODO add a check for the parameter in the env file - } - - if (parm.isRequired () && (inputs == null || !inputs.containsKey (parm.getParamName ()))) { - if (inputs.containsKey (parm.getParamAlias ())) { - // They've submitted using an alias name. Remove that from inputs, and add back using real name. - String realParamName = parm.getParamName (); - String alias = parm.getParamAlias (); - Object value = inputs.get (alias); - logger.debug ("*Found an Alias: paramName=" + realParamName - + ",alias=" - + alias - + ",value=" - + value); - inputs.remove (alias); - inputs.put (realParamName, value); - logger.debug ("{} entry removed from inputs, added back using {}", alias, realParamName); + if (jsonNode != null) { + // Notice here - we add it to the jsonParams hashMap with the actual name - + // then manipulate the inputs so when we check for aliases below - it will not + // get flagged. + jsonParams.put(parm.getParamName(), jsonNode); + inputs.remove(parm.getParamAlias()); + inputs.put(parm.getParamName(), jsonString); } - // enhanced - check if it's in the Environment (note: that method - else if (mhee != null && mhee.containsParameter(parm.getParamName())) { + } // TODO add a check for the parameter in the env file + } - logger.debug("Required parameter {} appears to be in environment - do not count as missing", + if (parm.isRequired() && (inputs == null || !inputs.containsKey(parm.getParamName()))) { + if (inputs.containsKey(parm.getParamAlias())) { + // They've submitted using an alias name. Remove that from inputs, and add back using real name. + String realParamName = parm.getParamName(); + String alias = parm.getParamAlias(); + Object value = inputs.get(alias); + logger.debug("*Found an Alias: paramName=" + realParamName + ",alias=" + alias + ",value=" + value); + inputs.remove(alias); + inputs.put(realParamName, value); + logger.debug("{} entry removed from inputs, added back using {}", alias, realParamName); + } + // enhanced - check if it's in the Environment (note: that method + else if (mhee != null && mhee.containsParameter(parm.getParamName())) { + + logger.debug("Required parameter {} appears to be in environment - do not count as missing", parm.getParamName()); - } - else { - logger.debug("adding to missing parameters list: {}", parm.getParamName()); - if (missingParams == null) { - missingParams = parm.getParamName (); - } else { - missingParams += "," + parm.getParamName (); - } + } else { + logger.debug("adding to missing parameters list: {}", parm.getParamName()); + if (missingParams == null) { + missingParams = parm.getParamName(); + } else { + missingParams += "," + parm.getParamName(); } } - paramList.add (parm.getParamName ()); } + paramList.add(parm.getParamName()); + } - if (missingParams != null) { - // Problem - missing one or more required parameters - if (checkRequiredParameters) { + if (missingParams != null) { + // Problem - missing one or more required parameters + if (checkRequiredParameters) { String error = "Update VNF: Missing Required inputs: " + missingParams; - logger.error("{} {} {} {} {}", MessageEnum.RA_MISSING_PARAM.toString(), missingParams, "OpenStack", - ErrorCode.DataError.getValue(), error); - throw new VnfException (error, MsoExceptionCategory.USERDATA); - } else { - logger.debug("found missing parameters - but checkRequiredParameters is false - will not block"); - } + logger.error("{} {} {} {} {}", MessageEnum.RA_MISSING_PARAM.toString(), missingParams, "OpenStack", + ErrorCode.DataError.getValue(), error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); } else { - logger.debug("No missing parameters found - ok to proceed"); + logger.debug("found missing parameters - but checkRequiredParameters is false - will not block"); } + } else { + logger.debug("No missing parameters found - ok to proceed"); + } - // Just submit the envt entry as received from the database - String newEnvironmentString = null; - if (mhee != null) { - newEnvironmentString = mhee.getRawEntry().toString(); - } - // Remove any extraneous parameters (don't throw an error) - if (inputs != null) { - List <String> extraParams = new ArrayList <> (); - extraParams.addAll (inputs.keySet ()); - // This is not a valid parameter for this template - extraParams.removeAll (paramList); - if (!extraParams.isEmpty ()) { - logger.warn("{} {} {} {} {} {}", MessageEnum.RA_VNF_EXTRA_PARAM.toString(), vnfType, + // Just submit the envt entry as received from the database + String newEnvironmentString = null; + if (mhee != null) { + newEnvironmentString = mhee.getRawEntry().toString(); + } + // Remove any extraneous parameters (don't throw an error) + if (inputs != null) { + List<String> extraParams = new ArrayList<>(); + extraParams.addAll(inputs.keySet()); + // This is not a valid parameter for this template + extraParams.removeAll(paramList); + if (!extraParams.isEmpty()) { + logger.warn("{} {} {} {} {} {}", MessageEnum.RA_VNF_EXTRA_PARAM.toString(), vnfType, extraParams.toString(), "OpenStack", ErrorCode.DataError.getValue(), "Extra params"); - inputs.keySet ().removeAll (extraParams); - } + inputs.keySet().removeAll(extraParams); } - Map<String, Object> goldenInputs = copyStringInputs(inputs); - // 1607 - when we get here - we have clean inputs. Create inputsTwo in case we have json - Map<String, Object> inputsTwo = null; - if (hasJson && jsonParams.size() > 0) { - inputsTwo = new HashMap<>(); - for (Map.Entry<String, Object> entry : inputs.entrySet()) { - String keyParamName = entry.getKey(); - Object value = entry.getValue(); - if (jsonParams.containsKey(keyParamName)) { - inputsTwo.put(keyParamName, jsonParams.get(keyParamName)); - } else { - inputsTwo.put(keyParamName, value); - } - } - goldenInputs = inputsTwo; + } + Map<String, Object> goldenInputs = copyStringInputs(inputs); + // 1607 - when we get here - we have clean inputs. Create inputsTwo in case we have json + Map<String, Object> inputsTwo = null; + if (hasJson && jsonParams.size() > 0) { + inputsTwo = new HashMap<>(); + for (Map.Entry<String, Object> entry : inputs.entrySet()) { + String keyParamName = entry.getKey(); + Object value = entry.getValue(); + if (jsonParams.containsKey(keyParamName)) { + inputsTwo.put(keyParamName, jsonParams.get(keyParamName)); + } else { + inputsTwo.put(keyParamName, value); + } } + goldenInputs = inputsTwo; + } - // "Fix" the template if it has CR/LF (getting this from Oracle) - String template = heatTemplate.getHeatTemplate (); - template = template.replaceAll ("\r\n", "\n"); + // "Fix" the template if it has CR/LF (getting this from Oracle) + String template = heatTemplate.getHeatTemplate(); + template = template.replaceAll("\r\n", "\n"); - boolean isValetEnabled = this.checkBooleanProperty(MsoVnfAdapterImpl.VALET_ENABLED, false); - boolean failRequestOnValetFailure = this.checkBooleanProperty(MsoVnfAdapterImpl.FAIL_REQUESTS_ON_VALET_FAILURE, false); - logger.debug("isValetEnabled={}, failRequestsOnValetFailure={}", isValetEnabled, failRequestOnValetFailure); - if (isVolumeRequest) { - isValetEnabled = false; - logger.debug("never send a volume request to valet"); + boolean isValetEnabled = this.checkBooleanProperty(MsoVnfAdapterImpl.VALET_ENABLED, false); + boolean failRequestOnValetFailure = + this.checkBooleanProperty(MsoVnfAdapterImpl.FAIL_REQUESTS_ON_VALET_FAILURE, false); + logger.debug("isValetEnabled={}, failRequestsOnValetFailure={}", isValetEnabled, failRequestOnValetFailure); + if (isVolumeRequest) { + isValetEnabled = false; + logger.debug("never send a volume request to valet"); + } + boolean sendResponseToValet = false; + if (isValetEnabled) { + Holder<Map<String, Object>> valetModifiedParamsHolder = new Holder<>(); + String parsedVfModuleName = this.getVfModuleNameFromModuleStackId(vfModuleStackId); + // Make sure it is set to something. + if (parsedVfModuleName == null || parsedVfModuleName.isEmpty()) { + parsedVfModuleName = "unknown"; } - boolean sendResponseToValet = false; - if (isValetEnabled) { - Holder<Map<String, Object>> valetModifiedParamsHolder = new Holder<>(); - String parsedVfModuleName = this.getVfModuleNameFromModuleStackId(vfModuleStackId); - // Make sure it is set to something. - if (parsedVfModuleName == null || parsedVfModuleName.isEmpty()) { - parsedVfModuleName = "unknown"; - } - sendResponseToValet = this.valetUpdateRequest(cloudSiteId, tenantId, heatFilesObjects, - nestedTemplatesChecked, parsedVfModuleName, false, heatTemplate, newEnvironmentString, (HashMap<String, Object>) goldenInputs, - msoRequest, inputs, failRequestOnValetFailure, valetModifiedParamsHolder); - if (sendResponseToValet) { - goldenInputs = valetModifiedParamsHolder.value; - } + sendResponseToValet = this.valetUpdateRequest(cloudSiteId, cloudOwner, tenantId, heatFilesObjects, + nestedTemplatesChecked, parsedVfModuleName, false, heatTemplate, newEnvironmentString, + (HashMap<String, Object>) goldenInputs, msoRequest, inputs, failRequestOnValetFailure, + valetModifiedParamsHolder); + if (sendResponseToValet) { + goldenInputs = valetModifiedParamsHolder.value; } + } - // Have the tenant. Now deploy the stack itself - // Ignore MsoTenantNotFound and MsoStackAlreadyExists exceptions - // because we already checked for those. - long updateStackStarttime = System.currentTimeMillis (); - try { - heatStack = heatU.updateStack( - cloudSiteId, - tenantId, - vfModuleName, - template, - goldenInputs, - true, - heatTemplate.getTimeoutMinutes(), - newEnvironmentString, - //heatEnvironmentString, - nestedTemplatesChecked, - heatFilesObjects - ); - } catch (MsoException me) { - me.addContext ("UpdateVFModule"); - String error = "Update VFModule " + vfModuleType + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger - .error("{} {} {} {} {} {} {}", MessageEnum.RA_UPDATE_VNF_ERR.toString(), vfModuleType, cloudSiteId, - tenantId, "OpenStack", ErrorCode.DataError.getValue(), "Exception - " + error, me); - if (isValetEnabled && sendResponseToValet) { - logger.debug("valet is enabled, the orchestration failed - now sending rollback to valet"); - try { - GenericValetResponse<ValetRollbackResponse> gvr = this.vci.callValetRollbackRequest(msoRequest.getRequestId(), null, false, me.getMessage()); - // Nothing to really do here whether it succeeded or not other than log it. - logger.debug("Return code from Rollback response is {}", gvr.getStatusCode()); - } catch (Exception e) { - logger.error("Exception encountered while sending Rollback to Valet ", e); - } + // Have the tenant. Now deploy the stack itself + // Ignore MsoTenantNotFound and MsoStackAlreadyExists exceptions + // because we already checked for those. + long updateStackStarttime = System.currentTimeMillis(); + try { + heatStack = heatU.updateStack(cloudSiteId, cloudOwner, tenantId, vfModuleName, template, goldenInputs, true, + heatTemplate.getTimeoutMinutes(), newEnvironmentString, + // heatEnvironmentString, + nestedTemplatesChecked, heatFilesObjects); + } catch (MsoException me) { + me.addContext("UpdateVFModule"); + String error = "Update VFModule " + vfModuleType + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + ": " + me; + logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_UPDATE_VNF_ERR.toString(), vfModuleType, cloudOwner, + cloudSiteId, tenantId, "OpenStack", ErrorCode.DataError.getValue(), "Exception - " + error, me); + if (isValetEnabled && sendResponseToValet) { + logger.debug("valet is enabled, the orchestration failed - now sending rollback to valet"); + try { + GenericValetResponse<ValetRollbackResponse> gvr = + this.vci.callValetRollbackRequest(msoRequest.getRequestId(), null, false, me.getMessage()); + // Nothing to really do here whether it succeeded or not other than log it. + logger.debug("Return code from Rollback response is {}", gvr.getStatusCode()); + } catch (Exception e) { + logger.error("Exception encountered while sending Rollback to Valet ", e); } - throw new VnfException (me); } + throw new VnfException(me); + } // Reach this point if updateStack is successful. // Populate remaining rollback info and response parameters. - vfRollback.setVnfId (heatStack.getCanonicalName ()); - vfRollback.setVnfCreated (true); + vfRollback.setVnfId(heatStack.getCanonicalName()); + vfRollback.setVnfCreated(true); if (isValetEnabled && sendResponseToValet) { - logger.debug("valet is enabled, the update succeeded - now send confirm to valet with stack id"); - try { - GenericValetResponse<ValetConfirmResponse> gvr = this.vci.callValetConfirmRequest(msoRequest.getRequestId(), heatStack.getCanonicalName()); + logger.debug("valet is enabled, the update succeeded - now send confirm to valet with stack id"); + try { + GenericValetResponse<ValetConfirmResponse> gvr = + this.vci.callValetConfirmRequest(msoRequest.getRequestId(), heatStack.getCanonicalName()); // Nothing to really do here whether it succeeded or not other than log it. logger.debug("Return code from Confirm response is {}", gvr.getStatusCode()); } catch (Exception e) { @@ -2020,72 +2033,74 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { } } - outputs.value = copyStringOutputs (heatStack.getOutputs ()); + outputs.value = copyStringOutputs(heatStack.getOutputs()); rollback.value = vfRollback; return; } private String getVfModuleNameFromModuleStackId(String vfModuleStackId) { - // expected format of vfModuleStackId is "MSOTEST51-vSAMP3_base_module-0/1fc1f86c-7b35-447f-99a6-c23ec176ae24" - // before the "/" is the vfModuleName and after the "/" is the heat stack id in Openstack - if (vfModuleStackId == null) - return null; - int index = vfModuleStackId.lastIndexOf('/'); - if (index <= 0) - return null; - String vfModuleName = null; - try { - vfModuleName = vfModuleStackId.substring(0, index); - } catch (Exception e) { - logger.debug("Exception", e); - vfModuleName = null; - } - return vfModuleName; + // expected format of vfModuleStackId is "MSOTEST51-vSAMP3_base_module-0/1fc1f86c-7b35-447f-99a6-c23ec176ae24" + // before the "/" is the vfModuleName and after the "/" is the heat stack id in Openstack + if (vfModuleStackId == null) + return null; + int index = vfModuleStackId.lastIndexOf('/'); + if (index <= 0) + return null; + String vfModuleName = null; + try { + vfModuleName = vfModuleStackId.substring(0, index); + } catch (Exception e) { + logger.debug("Exception", e); + vfModuleName = null; + } + return vfModuleName; } /* * Helper method to check a boolean property value - on error return provided default */ private boolean checkBooleanProperty(String propertyName, boolean defaultValue) { - boolean property = defaultValue; - try { - String propertyString = this.environment.getProperty(propertyName); - if ("true".equalsIgnoreCase(propertyString) || "y".equalsIgnoreCase(propertyString)) { - property = true; - } else if ("false".equalsIgnoreCase(propertyString) || "n".equalsIgnoreCase(propertyString)) { - property = false; - } - } catch (Exception e) { - logger.debug("An exception occured trying to get property {} - defaulting to ", propertyName, defaultValue, e); - property = defaultValue; - } - return property; + boolean property = defaultValue; + try { + String propertyString = this.environment.getProperty(propertyName); + if ("true".equalsIgnoreCase(propertyString) || "y".equalsIgnoreCase(propertyString)) { + property = true; + } else if ("false".equalsIgnoreCase(propertyString) || "n".equalsIgnoreCase(propertyString)) { + property = false; + } + } catch (Exception e) { + logger.debug("An exception occured trying to get property {} - defaulting to ", propertyName, defaultValue, + e); + property = defaultValue; + } + return property; } /* * Helper method to combine getFiles and nestedTemplates in to a single Map */ - private Map<String, Object> combineGetFilesAndNestedTemplates(Map<String, Object> getFiles, Map<String, Object> nestedTemplates) { - boolean haveGetFiles = true; - boolean haveNestedTemplates = true; - Map<String, Object> files = new HashMap<String, Object>(); - if (getFiles == null || getFiles.isEmpty()) { - haveGetFiles = false; - } - if (nestedTemplates == null || nestedTemplates.isEmpty()) { - haveNestedTemplates = false; - } + private Map<String, Object> combineGetFilesAndNestedTemplates(Map<String, Object> getFiles, + Map<String, Object> nestedTemplates) { + boolean haveGetFiles = true; + boolean haveNestedTemplates = true; + Map<String, Object> files = new HashMap<String, Object>(); + if (getFiles == null || getFiles.isEmpty()) { + haveGetFiles = false; + } + if (nestedTemplates == null || nestedTemplates.isEmpty()) { + haveNestedTemplates = false; + } if (haveGetFiles && haveNestedTemplates) { - for (String keyString : getFiles.keySet ()) { - files.put (keyString, getFiles.get (keyString)); + for (String keyString : getFiles.keySet()) { + files.put(keyString, getFiles.get(keyString)); } - for (String keyString : nestedTemplates.keySet ()) { - files.put (keyString, nestedTemplates.get (keyString)); + for (String keyString : nestedTemplates.keySet()) { + files.put(keyString, nestedTemplates.get(keyString)); } } else { // Handle if we only have one or neither: if (haveGetFiles) { - files = getFiles; + files = getFiles; } if (haveNestedTemplates) { files = nestedTemplates; @@ -2097,171 +2112,173 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { /* * Valet Create request */ - private boolean valetCreateRequest(String cloudSiteId, String tenantId, Map<String, Object> heatFilesObjects, Map<String, Object> nestedTemplatesChecked, - String vfModuleName, boolean backout, HeatTemplate heatTemplate, String newEnvironmentString, Map<String, Object> goldenInputs, - MsoRequest msoRequest, Map<String, Object> inputs, boolean failRequestOnValetFailure, Holder<Map<String, Object>> valetModifiedParamsHolder) throws VnfException { - boolean valetSucceeded = false; - String valetErrorMessage = "more detail not available"; - try { - String keystoneUrl = heat.getCloudSiteKeystoneUrl(cloudSiteId); - Map<String, Object> files = this.combineGetFilesAndNestedTemplates(heatFilesObjects, - nestedTemplatesChecked); - HeatRequest heatRequest = new HeatRequest(vfModuleName, backout, heatTemplate.getTimeoutMinutes(), - heatTemplate.getTemplateBody(), newEnvironmentString, files, goldenInputs); - GenericValetResponse<ValetCreateResponse> createReq = this.vci.callValetCreateRequest(msoRequest.getRequestId(), - cloudSiteId, tenantId, msoRequest.getServiceInstanceId(), (String)inputs.get("vnf_id"), - (String)inputs.get("vnf_name"), (String)inputs.get("vf_module_id"), (String)inputs.get("vf_module_name"), keystoneUrl, - heatRequest); - ValetCreateResponse vcr = createReq.getReturnObject(); - if (vcr != null && createReq.getStatusCode() == 200) { - ValetStatus status = vcr.getStatus(); - if (status != null) { - String statusCode = status.getStatus(); // "ok" or "failed" - if ("ok".equalsIgnoreCase(statusCode)) { - Map<String, Object> newInputs = vcr.getParameters(); - if (newInputs != null) { - Map<String, Object> oldGold = goldenInputs; - logger.debug("parameters before being modified by valet:{}", oldGold.toString()); - goldenInputs = new HashMap<String, Object>(); - for (String key : newInputs.keySet()) { - goldenInputs.put(key, newInputs.get(key)); - } - valetModifiedParamsHolder.value = goldenInputs; - logger.debug("parameters after being modified by valet:{}", goldenInputs.toString()); - valetSucceeded = true; - } - } else { - valetErrorMessage = status.getMessage(); - } - } - } else { - logger.debug("Got a bad response back from valet"); - valetErrorMessage = "Bad response back from Valet"; - valetSucceeded = false; - } - } catch (Exception e) { - logger.error("An exception occurred trying to call valet ...", e); - valetSucceeded = false; - valetErrorMessage = e.getMessage(); - } - if (failRequestOnValetFailure && !valetSucceeded) { - // The valet request failed - and property says to fail the request - //TODO Create a new exception class for valet? - throw new VnfException("A failure occurred with Valet: " + valetErrorMessage); - } - return valetSucceeded; + private boolean valetCreateRequest(String cloudSiteId, String cloudOwner, String tenantId, + Map<String, Object> heatFilesObjects, Map<String, Object> nestedTemplatesChecked, String vfModuleName, + boolean backout, HeatTemplate heatTemplate, String newEnvironmentString, Map<String, Object> goldenInputs, + MsoRequest msoRequest, Map<String, Object> inputs, boolean failRequestOnValetFailure, + Holder<Map<String, Object>> valetModifiedParamsHolder) throws VnfException { + boolean valetSucceeded = false; + String valetErrorMessage = "more detail not available"; + try { + String keystoneUrl = heat.getCloudSiteKeystoneUrl(cloudSiteId); + Map<String, Object> files = + this.combineGetFilesAndNestedTemplates(heatFilesObjects, nestedTemplatesChecked); + HeatRequest heatRequest = new HeatRequest(vfModuleName, backout, heatTemplate.getTimeoutMinutes(), + heatTemplate.getTemplateBody(), newEnvironmentString, files, goldenInputs); + GenericValetResponse<ValetCreateResponse> createReq = this.vci.callValetCreateRequest( + msoRequest.getRequestId(), cloudSiteId, cloudOwner, tenantId, msoRequest.getServiceInstanceId(), + (String) inputs.get("vnf_id"), (String) inputs.get("vnf_name"), (String) inputs.get("vf_module_id"), + (String) inputs.get("vf_module_name"), keystoneUrl, heatRequest); + ValetCreateResponse vcr = createReq.getReturnObject(); + if (vcr != null && createReq.getStatusCode() == 200) { + ValetStatus status = vcr.getStatus(); + if (status != null) { + String statusCode = status.getStatus(); // "ok" or "failed" + if ("ok".equalsIgnoreCase(statusCode)) { + Map<String, Object> newInputs = vcr.getParameters(); + if (newInputs != null) { + Map<String, Object> oldGold = goldenInputs; + logger.debug("parameters before being modified by valet:{}", oldGold.toString()); + goldenInputs = new HashMap<String, Object>(); + for (String key : newInputs.keySet()) { + goldenInputs.put(key, newInputs.get(key)); + } + valetModifiedParamsHolder.value = goldenInputs; + logger.debug("parameters after being modified by valet:{}", goldenInputs.toString()); + valetSucceeded = true; + } + } else { + valetErrorMessage = status.getMessage(); + } + } + } else { + logger.debug("Got a bad response back from valet"); + valetErrorMessage = "Bad response back from Valet"; + valetSucceeded = false; + } + } catch (Exception e) { + logger.error("An exception occurred trying to call valet ...", e); + valetSucceeded = false; + valetErrorMessage = e.getMessage(); + } + if (failRequestOnValetFailure && !valetSucceeded) { + // The valet request failed - and property says to fail the request + // TODO Create a new exception class for valet? + throw new VnfException("A failure occurred with Valet: " + valetErrorMessage); + } + return valetSucceeded; } /* * Valet update request */ - private boolean valetUpdateRequest(String cloudSiteId, String tenantId, - Map<String, Object> heatFilesObjects, Map<String, Object> nestedTemplatesChecked, String vfModuleName, - boolean backout, HeatTemplate heatTemplate, String newEnvironmentString, - Map<String, Object> goldenInputs, MsoRequest msoRequest, Map<String, Object> inputs, - boolean failRequestOnValetFailure, Holder<Map<String, Object>> valetModifiedParamsHolder) throws VnfException { - - boolean valetSucceeded = false; - String valetErrorMessage = "more detail not available"; - try { - String keystoneUrl = heat.getCloudSiteKeystoneUrl(cloudSiteId); - Map<String, Object> files = this.combineGetFilesAndNestedTemplates(heatFilesObjects, - nestedTemplatesChecked); - HeatRequest heatRequest = new HeatRequest(vfModuleName, false, heatTemplate.getTimeoutMinutes(), - heatTemplate.getTemplateBody(), newEnvironmentString, files, goldenInputs); - // vnf name is not sent to MSO on update requests - so we will set it to the vf module name for now - GenericValetResponse<ValetUpdateResponse> updateReq = this.vci.callValetUpdateRequest(msoRequest.getRequestId(), - cloudSiteId, tenantId, msoRequest.getServiceInstanceId(), (String)inputs.get("vnf_id"), - vfModuleName, (String)inputs.get("vf_module_id"), vfModuleName, keystoneUrl, - heatRequest); - ValetUpdateResponse vur = updateReq.getReturnObject(); - if (vur != null && updateReq.getStatusCode() == 200) { - ValetStatus status = vur.getStatus(); - if (status != null) { - String statusCode = status.getStatus(); // "ok" or "failed" - if ("ok".equalsIgnoreCase(statusCode)) { - Map<String, Object> newInputs = vur.getParameters(); - if (newInputs != null) { - Map<String, Object> oldGold = goldenInputs; - logger.debug("parameters before being modified by valet:{}", oldGold.toString()); - goldenInputs = new HashMap<String, Object>(); - for (String key : newInputs.keySet()) { - goldenInputs.put(key, newInputs.get(key)); - } - valetModifiedParamsHolder.value = goldenInputs; - logger.debug("parameters after being modified by valet:{}", goldenInputs.toString()); - valetSucceeded = true; - } - } else { - valetErrorMessage = status.getMessage(); - } - } - } else { - logger.debug("Got a bad response back from valet"); - valetErrorMessage = "Got a bad response back from valet"; - valetSucceeded = false; - } - } catch (Exception e) { - logger.error("An exception occurred trying to call valet - will continue processing for now...", e); - valetErrorMessage = e.getMessage(); - valetSucceeded = false; + private boolean valetUpdateRequest(String cloudSiteId, String cloudOwnerId, String tenantId, + Map<String, Object> heatFilesObjects, Map<String, Object> nestedTemplatesChecked, String vfModuleName, + boolean backout, HeatTemplate heatTemplate, String newEnvironmentString, Map<String, Object> goldenInputs, + MsoRequest msoRequest, Map<String, Object> inputs, boolean failRequestOnValetFailure, + Holder<Map<String, Object>> valetModifiedParamsHolder) throws VnfException { + + boolean valetSucceeded = false; + String valetErrorMessage = "more detail not available"; + try { + String keystoneUrl = heat.getCloudSiteKeystoneUrl(cloudSiteId); + Map<String, Object> files = + this.combineGetFilesAndNestedTemplates(heatFilesObjects, nestedTemplatesChecked); + HeatRequest heatRequest = new HeatRequest(vfModuleName, false, heatTemplate.getTimeoutMinutes(), + heatTemplate.getTemplateBody(), newEnvironmentString, files, goldenInputs); + // vnf name is not sent to MSO on update requests - so we will set it to the vf module name for now + GenericValetResponse<ValetUpdateResponse> updateReq = + this.vci.callValetUpdateRequest(msoRequest.getRequestId(), cloudSiteId, cloudOwnerId, tenantId, + msoRequest.getServiceInstanceId(), (String) inputs.get("vnf_id"), vfModuleName, + (String) inputs.get("vf_module_id"), vfModuleName, keystoneUrl, heatRequest); + ValetUpdateResponse vur = updateReq.getReturnObject(); + if (vur != null && updateReq.getStatusCode() == 200) { + ValetStatus status = vur.getStatus(); + if (status != null) { + String statusCode = status.getStatus(); // "ok" or "failed" + if ("ok".equalsIgnoreCase(statusCode)) { + Map<String, Object> newInputs = vur.getParameters(); + if (newInputs != null) { + Map<String, Object> oldGold = goldenInputs; + logger.debug("parameters before being modified by valet:{}", oldGold.toString()); + goldenInputs = new HashMap<String, Object>(); + for (String key : newInputs.keySet()) { + goldenInputs.put(key, newInputs.get(key)); + } + valetModifiedParamsHolder.value = goldenInputs; + logger.debug("parameters after being modified by valet:{}", goldenInputs.toString()); + valetSucceeded = true; + } + } else { + valetErrorMessage = status.getMessage(); + } + } + } else { + logger.debug("Got a bad response back from valet"); + valetErrorMessage = "Got a bad response back from valet"; + valetSucceeded = false; + } + } catch (Exception e) { + logger.error("An exception occurred trying to call valet - will continue processing for now...", e); + valetErrorMessage = e.getMessage(); + valetSucceeded = false; + } + if (failRequestOnValetFailure && !valetSucceeded) { + // The valet request failed - and property says to fail the request + // TODO Create a new exception class for valet? + throw new VnfException("A failure occurred with Valet: " + valetErrorMessage); + } + return valetSucceeded; } - if (failRequestOnValetFailure && !valetSucceeded) { - // The valet request failed - and property says to fail the request - // TODO Create a new exception class for valet? - throw new VnfException("A failure occurred with Valet: " + valetErrorMessage); - } - return valetSucceeded; - } - - /* - * Valet delete request - */ - private boolean valetDeleteRequest(String cloudSiteId, String tenantId, String vnfName, - MsoRequest msoRequest, boolean failRequestOnValetFailure) { - boolean valetDeleteRequestSucceeded = false; - String valetErrorMessage = "more detail not available"; - try { - String vfModuleId = vnfName; - String vfModuleName = vnfName; - try { - vfModuleName = vnfName.substring(0, vnfName.indexOf('/')); - vfModuleId = vnfName.substring(vnfName.indexOf('/') + 1); - } catch (Exception e) { - // do nothing - send what we got for vnfName for both to valet - logger.error("An exception occurred trying to call MsoVnfAdapterImpl.valetDeleteRequest() method", e); - } - GenericValetResponse<ValetDeleteResponse> deleteReq = this.vci.callValetDeleteRequest(msoRequest.getRequestId(), - cloudSiteId, tenantId, vfModuleId, vfModuleName); - ValetDeleteResponse vdr = deleteReq.getReturnObject(); - if (vdr != null && deleteReq.getStatusCode() == 200) { - ValetStatus status = vdr.getStatus(); - if (status != null) { - String statusCode = status.getStatus(); // "ok" or "failed" - if ("ok".equalsIgnoreCase(statusCode)) { - logger.debug("delete request to valet returned success"); - valetDeleteRequestSucceeded = true; + + /* + * Valet delete request + */ + private boolean valetDeleteRequest(String cloudSiteId, String cloudOwnerId, String tenantId, String vnfName, + MsoRequest msoRequest, boolean failRequestOnValetFailure) { + boolean valetDeleteRequestSucceeded = false; + String valetErrorMessage = "more detail not available"; + try { + String vfModuleId = vnfName; + String vfModuleName = vnfName; + try { + vfModuleName = vnfName.substring(0, vnfName.indexOf('/')); + vfModuleId = vnfName.substring(vnfName.indexOf('/') + 1); + } catch (Exception e) { + // do nothing - send what we got for vnfName for both to valet + logger.error("An exception occurred trying to call MsoVnfAdapterImpl.valetDeleteRequest() method", e); + } + GenericValetResponse<ValetDeleteResponse> deleteReq = this.vci.callValetDeleteRequest( + msoRequest.getRequestId(), cloudSiteId, cloudOwnerId, tenantId, vfModuleId, vfModuleName); + ValetDeleteResponse vdr = deleteReq.getReturnObject(); + if (vdr != null && deleteReq.getStatusCode() == 200) { + ValetStatus status = vdr.getStatus(); + if (status != null) { + String statusCode = status.getStatus(); // "ok" or "failed" + if ("ok".equalsIgnoreCase(statusCode)) { + logger.debug("delete request to valet returned success"); + valetDeleteRequestSucceeded = true; + } else { + logger.debug("delete request to valet returned failure"); + valetDeleteRequestSucceeded = false; + valetErrorMessage = status.getMessage(); + } + } } else { - logger.debug("delete request to valet returned failure"); + logger.debug("Got a bad response back from valet - delete request failed"); valetDeleteRequestSucceeded = false; - valetErrorMessage = status.getMessage(); - } - } - } else { - logger.debug("Got a bad response back from valet - delete request failed"); - valetDeleteRequestSucceeded = false; - valetErrorMessage = "Got a bad response back from valet - delete request failed"; - } - } catch (Exception e) { - logger.error("An exception occurred trying to call valet - valetDeleteRequest failed", e); - valetDeleteRequestSucceeded = false; - valetErrorMessage = e.getMessage(); + valetErrorMessage = "Got a bad response back from valet - delete request failed"; + } + } catch (Exception e) { + logger.error("An exception occurred trying to call valet - valetDeleteRequest failed", e); + valetDeleteRequestSucceeded = false; + valetErrorMessage = e.getMessage(); + } + if (valetDeleteRequestSucceeded == false && failRequestOnValetFailure == true) { + logger.error("ValetDeleteRequestFailed - del req still will be sent to openstack", + new VnfException("ValetDeleteRequestFailedError")); + } + return valetDeleteRequestSucceeded; } - if (valetDeleteRequestSucceeded == false && failRequestOnValetFailure == true) { - logger.error("ValetDeleteRequestFailed - del req still will be sent to openstack", new VnfException - ("ValetDeleteRequestFailedError")); - } - return valetDeleteRequestSucceeded; - } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImpl.java index b8be910c43..2ea7ff417c 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImpl.java @@ -30,10 +30,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; - import javax.jws.WebService; import javax.xml.ws.Holder; - import org.onap.so.adapters.vnf.exceptions.VnfAlreadyExists; import org.onap.so.adapters.vnf.exceptions.VnfException; import org.onap.so.cloud.CloudConfig; @@ -54,7 +52,6 @@ import org.onap.so.db.catalog.utils.MavenLikeVersioning; import org.onap.so.entity.MsoRequest; import org.onap.so.logger.ErrorCode; import org.onap.so.logger.MessageEnum; - import org.onap.so.openstack.beans.MsoTenant; import org.onap.so.openstack.beans.VnfRollback; import org.onap.so.openstack.beans.VnfStatus; @@ -69,7 +66,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; - import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -77,7 +73,8 @@ import org.springframework.transaction.annotation.Transactional; @Component @Transactional -@WebService(serviceName = "VnfAdapter", endpointInterface = "org.onap.so.adapters.vnf.MsoVnfAdapter", targetNamespace = "http://org.onap.so/vnf") +@WebService(serviceName = "VnfAdapter", endpointInterface = "org.onap.so.adapters.vnf.MsoVnfAdapter", + targetNamespace = "http://org.onap.so/vnf") public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { private static Logger logger = LoggerFactory.getLogger(MsoVnfCloudifyAdapterImpl.class); @@ -87,8 +84,8 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { private static final String LOG_REPLY_NAME = "MSO-VnfAdapter:MSO-BPMN."; private static final String CHECK_REQD_PARAMS = "org.onap.so.adapters.vnf.checkRequiredParameters"; private static final String ADD_GET_FILES_ON_VOLUME_REQ = "org.onap.so.adapters.vnf.addGetFilesOnVolumeReq"; - private static final String CLOUDIFY_RESPONSE_SUCCESS="Successfully received response from Cloudify"; - private static final String CLOUDIFY="Cloudify"; + private static final String CLOUDIFY_RESPONSE_SUCCESS = "Successfully received response from Cloudify"; + private static final String CLOUDIFY = "Cloudify"; private static final ObjectMapper JSON_MAPPER = new ObjectMapper(); @@ -106,16 +103,18 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { @Autowired protected MsoCloudifyUtils cloudifyUtils; + /** * Health Check web method. Does nothing but return to show the adapter is deployed. */ @Override - public void healthCheck () { + public void healthCheck() { logger.debug("Health check call in VNF Cloudify Adapter"); } /** * DO NOT use that constructor to instantiate this class, the msoPropertiesfactory will be NULL. + * * @see MsoVnfCloudifyAdapterImpl#MsoVnfAdapterImpl(MsoPropertiesFactory, CloudConfigFactory) */ public MsoVnfCloudifyAdapterImpl() { @@ -123,55 +122,31 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { } /** - * This is the "Create VNF" web service implementation. - * This function is now unsupported and will return an error. + * This is the "Create VNF" web service implementation. This function is now unsupported and will return an error. * */ @Override - public void createVnf (String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - Map <String, Object> inputs, - Boolean failIfExists, - Boolean backout, - Boolean enableBridge, - MsoRequest msoRequest, - Holder <String> vnfId, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) - throws VnfException - { - // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. + public void createVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, String vnfVersion, + String vnfName, String requestType, String volumeGroupHeatStackId, Map<String, Object> inputs, + Boolean failIfExists, Boolean backout, Boolean enableBridge, MsoRequest msoRequest, Holder<String> vnfId, + Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) throws VnfException { + // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. logger.debug("CreateVNF command attempted but not supported"); throw new VnfException("CreateVNF: Unsupported command", MsoExceptionCategory.USERDATA); } /** - * This is the "Update VNF" web service implementation. - * This function is now unsupported and will return an error. + * This is the "Update VNF" web service implementation. This function is now unsupported and will return an error. * */ @Override - public void updateVnf (String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - Map <String, Object> inputs, - MsoRequest msoRequest, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) - throws VnfException - { - // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. - logger.debug("UpdateVNF command attempted but not supported"); - throw new VnfException ("UpdateVNF: Unsupported command", MsoExceptionCategory.USERDATA); + public void updateVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, String vnfVersion, + String vnfName, String requestType, String volumeGroupHeatStackId, Map<String, Object> inputs, + MsoRequest msoRequest, Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) + throws VnfException { + // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. + logger.debug("UpdateVNF command attempted but not supported"); + throw new VnfException("UpdateVNF: Unsupported command", MsoExceptionCategory.USERDATA); } /** @@ -179,15 +154,16 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { * * This really should be QueryVfModule, but nobody ever changed it. * - * For Cloudify, this will look up a deployment by its deployment ID, which is really the same - * as deployment name, since it assigned by the client when a deployment is created. - * Also, the input cloudSiteId is used only to identify which Cloudify instance to query, - * and the tenantId is ignored (since that really only applies for Openstack/Heat). + * For Cloudify, this will look up a deployment by its deployment ID, which is really the same as deployment name, + * since it assigned by the client when a deployment is created. Also, the input cloudSiteId is used only to + * identify which Cloudify instance to query, and the tenantId is ignored (since that really only applies for + * Openstack/Heat). * - * The method returns an indicator that the VNF exists, along with its status and outputs. - * The input "vnfName" will also be reflected back as its ID. + * The method returns an indicator that the VNF exists, along with its status and outputs. The input "vnfName" will + * also be reflected back as its ID. * * @param cloudSiteId CLLI code of the cloud site in which to query + * @param cloudOwner cloud owner of the cloud site in which to query * @param tenantId Openstack tenant identifier - ignored for Cloudify * @param vnfName VNF Name (should match a deployment ID) * @param msoRequest Request tracking information for logs @@ -196,43 +172,35 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { * @param outputs Holder for Map of VNF outputs from Cloudify deployment (assigned IPs, etc) */ @Override - public void queryVnf (String cloudSiteId, - String tenantId, - String vnfName, - MsoRequest msoRequest, - Holder <Boolean> vnfExists, - Holder <String> vnfId, - Holder <VnfStatus> status, - Holder <Map <String, String>> outputs) - throws VnfException - { - logger.debug ("Querying VNF {} in {}", vnfName, cloudSiteId + "/" + tenantId); + public void queryVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfName, MsoRequest msoRequest, + Holder<Boolean> vnfExists, Holder<String> vnfId, Holder<VnfStatus> status, + Holder<Map<String, String>> outputs) throws VnfException { + logger.debug("Querying VNF {} in {}", vnfName, cloudSiteId + "/" + tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); - long subStartTime = System.currentTimeMillis (); - - DeploymentInfo deployment = null; - - try { - deployment = cloudifyUtils.queryDeployment(cloudSiteId, tenantId, vnfName); - } - catch (MsoCloudifyManagerNotFound e) { - // This site does not have a Cloudify Manager. - // This isn't an error, just means we won't find the VNF here. - deployment = null; - } - catch (MsoException me) { - // Failed to query the Deployment due to a cloudify exception. - // Convert to a generic VnfException - me.addContext("QueryVNF"); - String error = "Query VNF (Cloudify): " + vnfName + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger - .error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, cloudSiteId, tenantId, - CLOUDIFY, "QueryVNF", ErrorCode.DataError.getValue(), "Exception - queryDeployment", me); - logger.debug(error); - throw new VnfException(me); - } + long startTime = System.currentTimeMillis(); + long subStartTime = System.currentTimeMillis(); + + DeploymentInfo deployment = null; + + try { + deployment = cloudifyUtils.queryDeployment(cloudSiteId, tenantId, vnfName); + } catch (MsoCloudifyManagerNotFound e) { + // This site does not have a Cloudify Manager. + // This isn't an error, just means we won't find the VNF here. + deployment = null; + } catch (MsoException me) { + // Failed to query the Deployment due to a cloudify exception. + // Convert to a generic VnfException + me.addContext("QueryVNF"); + String error = "Query VNF (Cloudify): " + vnfName + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, cloudOwner, + cloudSiteId, tenantId, CLOUDIFY, "QueryVNF", ErrorCode.DataError.getValue(), + "Exception - queryDeployment", me); + logger.debug(error); + throw new VnfException(me); + } if (deployment != null && deployment.getStatus() != DeploymentStatus.NOTFOUND) { vnfExists.value = Boolean.TRUE; @@ -254,36 +222,31 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { /** - * This is the "Delete VNF" web service implementation. - * This function is now unsupported and will return an error. + * This is the "Delete VNF" web service implementation. This function is now unsupported and will return an error. * */ @Override - public void deleteVnf (String cloudSiteId, - String tenantId, - String vnfName, - MsoRequest msoRequest) throws VnfException { + public void deleteVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfName, MsoRequest msoRequest) + throws VnfException { - // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. + // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. logger.debug("DeleteVNF command attempted but not supported"); - throw new VnfException ("DeleteVNF: Unsupported command", MsoExceptionCategory.USERDATA); + throw new VnfException("DeleteVNF: Unsupported command", MsoExceptionCategory.USERDATA); } /** - * This web service endpoint will rollback a previous Create VNF operation. - * A rollback object is returned to the client in a successful creation - * response. The client can pass that object as-is back to the rollbackVnf - * operation to undo the creation. + * This web service endpoint will rollback a previous Create VNF operation. A rollback object is returned to the + * client in a successful creation response. The client can pass that object as-is back to the rollbackVnf operation + * to undo the creation. * - * TODO: This should be rollbackVfModule and/or rollbackVolumeGroup, - * but APIs were apparently never updated. + * TODO: This should be rollbackVfModule and/or rollbackVolumeGroup, but APIs were apparently never updated. */ @Override - public void rollbackVnf (VnfRollback rollback) throws VnfException { - long startTime = System.currentTimeMillis (); - // rollback may be null (e.g. if stack already existed when Create was called) + public void rollbackVnf(VnfRollback rollback) throws VnfException { + long startTime = System.currentTimeMillis(); + // rollback may be null (e.g. if stack already existed when Create was called) if (rollback == null) { - logger.info ("{} {} {}", MessageEnum.RA_ROLLBACK_NULL.toString(), "OpenStack", "rollbackVnf"); + logger.info("{} {} {}", MessageEnum.RA_ROLLBACK_NULL.toString(), "OpenStack", "rollbackVnf"); return; } @@ -293,103 +256,102 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { } // Get the elements of the VnfRollback object for easier access - String cloudSiteId = rollback.getCloudSiteId (); - String tenantId = rollback.getTenantId (); - String vfModuleId = rollback.getVfModuleStackId (); + String cloudSiteId = rollback.getCloudSiteId(); + String cloudOwner = rollback.getCloudOwner(); + String tenantId = rollback.getTenantId(); + String vfModuleId = rollback.getVfModuleStackId(); - logger.debug("Rolling Back VF Module {} in {}", vfModuleId, cloudSiteId + "/" + tenantId); + logger.debug("Rolling Back VF Module {} in {}", vfModuleId, cloudOwner + "/" + cloudSiteId + "/" + tenantId); - DeploymentInfo deployment = null; + DeploymentInfo deployment = null; // Use the MsoCloudifyUtils to delete the deployment. Set the polling flag to true. // The possible outcomes of deleteStack are a StackInfo object with status // of NOTFOUND (on success) or FAILED (on error). Also, MsoOpenstackException // could be thrown. - long subStartTime = System.currentTimeMillis (); + long subStartTime = System.currentTimeMillis(); try { - // KLUDGE - Cloudify requires Tenant Name for Openstack. We have the ID. - // Go directly to Keystone until APIs could be updated to supply the name. - MsoTenant msoTenant = keystoneUtils.queryTenant(tenantId, cloudSiteId); - String tenantName = (msoTenant != null? msoTenant.getTenantName() : tenantId); + // KLUDGE - Cloudify requires Tenant Name for Openstack. We have the ID. + // Go directly to Keystone until APIs could be updated to supply the name. + MsoTenant msoTenant = keystoneUtils.queryTenant(tenantId, cloudSiteId); + String tenantName = (msoTenant != null ? msoTenant.getTenantName() : tenantId); - // TODO: Get a reasonable timeout. Use a global property, or store the creation timeout in rollback object and use that. + // TODO: Get a reasonable timeout. Use a global property, or store the creation timeout in rollback object + // and use that. deployment = cloudifyUtils.uninstallAndDeleteDeployment(cloudSiteId, tenantName, vfModuleId, 5); logger.debug("Rolled back deployment: {}", deployment.getId()); } catch (MsoException me) { // Failed to rollback the VNF due to a cloudify exception. // Convert to a generic VnfException - me.addContext ("RollbackVNF"); - String error = "Rollback VF Module: " + vfModuleId + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vfModuleId, cloudSiteId, - tenantId, CLOUDIFY, "DeleteDeployment", ErrorCode.DataError.getValue(), - "Exception - DeleteDeployment", me); + me.addContext("RollbackVNF"); + String error = "Rollback VF Module: " + vfModuleId + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vfModuleId, cloudOwner, + cloudSiteId, tenantId, CLOUDIFY, "DeleteDeployment", ErrorCode.DataError.getValue(), + "Exception - DeleteDeployment", me); logger.debug(error); - throw new VnfException (me); + throw new VnfException(me); } return; } - private VnfStatus deploymentStatusToVnfStatus (DeploymentInfo deployment) { - // Determine the status based on last action & status - // DeploymentInfo object should be enhanced to report a better status internally. - DeploymentStatus status = deployment.getStatus(); - String lastAction = deployment.getLastAction(); - - if (status == null || lastAction == null) { - return VnfStatus.UNKNOWN; - } - else if (status == DeploymentStatus.NOTFOUND) { - return VnfStatus.NOTFOUND; - } - else if (status == DeploymentStatus.INSTALLED) { - return VnfStatus.ACTIVE; - } - else if (status == DeploymentStatus.CREATED) { - // Should have an INACTIVE status for this case. Shouldn't really happen, but - // Install was never run, or Uninstall was done but deployment didn't get deleted. - return VnfStatus.UNKNOWN; - } - else if (status == DeploymentStatus.FAILED) { - return VnfStatus.FAILED; - } - - return VnfStatus.UNKNOWN; + private VnfStatus deploymentStatusToVnfStatus(DeploymentInfo deployment) { + // Determine the status based on last action & status + // DeploymentInfo object should be enhanced to report a better status internally. + DeploymentStatus status = deployment.getStatus(); + String lastAction = deployment.getLastAction(); + + if (status == null || lastAction == null) { + return VnfStatus.UNKNOWN; + } else if (status == DeploymentStatus.NOTFOUND) { + return VnfStatus.NOTFOUND; + } else if (status == DeploymentStatus.INSTALLED) { + return VnfStatus.ACTIVE; + } else if (status == DeploymentStatus.CREATED) { + // Should have an INACTIVE status for this case. Shouldn't really happen, but + // Install was never run, or Uninstall was done but deployment didn't get deleted. + return VnfStatus.UNKNOWN; + } else if (status == DeploymentStatus.FAILED) { + return VnfStatus.FAILED; + } + + return VnfStatus.UNKNOWN; } - private Map <String, String> copyStringOutputs (Map <String, Object> stackOutputs) { - Map <String, String> stringOutputs = new HashMap <String, String> (); - for (String key : stackOutputs.keySet ()) { - if (stackOutputs.get (key) instanceof String) { - stringOutputs.put (key, (String) stackOutputs.get (key)); - } else if (stackOutputs.get(key) instanceof Integer) { - try { - String str = "" + stackOutputs.get(key); - stringOutputs.put(key, str); - } catch (Exception e) { - logger.debug("Unable to add " + key + " to outputs"); - } + private Map<String, String> copyStringOutputs(Map<String, Object> stackOutputs) { + Map<String, String> stringOutputs = new HashMap<String, String>(); + for (String key : stackOutputs.keySet()) { + if (stackOutputs.get(key) instanceof String) { + stringOutputs.put(key, (String) stackOutputs.get(key)); + } else if (stackOutputs.get(key) instanceof Integer) { + try { + String str = "" + stackOutputs.get(key); + stringOutputs.put(key, str); + } catch (Exception e) { + logger.debug("Unable to add " + key + " to outputs"); + } } else if (stackOutputs.get(key) instanceof JsonNode) { - try { - String str = this.convertNode((JsonNode) stackOutputs.get(key)); - stringOutputs.put(key, str); - } catch (Exception e) { - logger.debug("Unable to add " + key + " to outputs - exception converting JsonNode"); - } + try { + String str = this.convertNode((JsonNode) stackOutputs.get(key)); + stringOutputs.put(key, str); + } catch (Exception e) { + logger.debug("Unable to add " + key + " to outputs - exception converting JsonNode"); + } } else if (stackOutputs.get(key) instanceof java.util.LinkedHashMap) { - try { - String str = JSON_MAPPER.writeValueAsString(stackOutputs.get(key)); - stringOutputs.put(key, str); - } catch (Exception e) { - logger.debug("Unable to add " + key + " to outputs - exception converting LinkedHashMap"); - } + try { + String str = JSON_MAPPER.writeValueAsString(stackOutputs.get(key)); + stringOutputs.put(key, str); + } catch (Exception e) { + logger.debug("Unable to add " + key + " to outputs - exception converting LinkedHashMap"); + } } else { - try { - String str = stackOutputs.get(key).toString(); - stringOutputs.put(key, str); - } catch (Exception e) { - logger.debug("Unable to add " + key + " to outputs - unable to call .toString() " + e.getMessage()); - } + try { + String str = stackOutputs.get(key).toString(); + stringOutputs.put(key, str); + } catch (Exception e) { + logger.debug("Unable to add " + key + " to outputs - unable to call .toString() " + e.getMessage()); + } } } return stringOutputs; @@ -397,43 +359,41 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { private void sendMapToDebug(Map<String, Object> inputs, String optionalName) { - int i = 0; - StringBuilder sb = new StringBuilder(optionalName == null ? "\ninputs" : "\n" + optionalName); - if (inputs == null) { - sb.append("\tNULL"); - } - else if (inputs.size() < 1) { - sb.append("\tEMPTY"); - } else { - for (String str : inputs.keySet()) { - String outputString; - try { - outputString = inputs.get(str).toString(); - } catch (Exception e) { - outputString = "Unable to call toString() on the value for " + str; - } - sb.append("\t\nitem " + i++ + ": '" + str + "'='" + outputString + "'"); - } - } - logger.debug(sb.toString()); - return; + int i = 0; + StringBuilder sb = new StringBuilder(optionalName == null ? "\ninputs" : "\n" + optionalName); + if (inputs == null) { + sb.append("\tNULL"); + } else if (inputs.size() < 1) { + sb.append("\tEMPTY"); + } else { + for (String str : inputs.keySet()) { + String outputString; + try { + outputString = inputs.get(str).toString(); + } catch (Exception e) { + outputString = "Unable to call toString() on the value for " + str; + } + sb.append("\t\nitem " + i++ + ": '" + str + "'='" + outputString + "'"); + } + } + logger.debug(sb.toString()); + return; } private void sendMapToDebug(Map<String, Object> inputs) { - int i = 0; - StringBuilder sb = new StringBuilder("inputs:"); - if (inputs == null) { - sb.append("\tNULL"); - } - else if (inputs.size() < 1) { - sb.append("\tEMPTY"); - } else { - for (String str : inputs.keySet()) { - sb.append("\titem " + i++ + ": " + str + "=" + inputs.get(str)); - } - } - logger.debug(sb.toString()); - return; + int i = 0; + StringBuilder sb = new StringBuilder("inputs:"); + if (inputs == null) { + sb.append("\tNULL"); + } else if (inputs.size() < 1) { + sb.append("\tEMPTY"); + } else { + for (String str : inputs.keySet()) { + sb.append("\titem " + i++ + ": " + str + "=" + inputs.get(str)); + } + } + logger.debug(sb.toString()); + return; } private String convertNode(final JsonNode node) { @@ -459,15 +419,15 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { Object obj = objectMap.get(key); if (obj instanceof String) { stringMap.put(key, (String) objectMap.get(key)); - } else if (obj instanceof JsonNode ){ + } else if (obj instanceof JsonNode) { // This is a bit of mess - but I think it's the least impacting // let's convert it BACK to a string - then it will get converted back later try { String str = this.convertNode((JsonNode) obj); stringMap.put(key, str); } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value for JsonNode "+ key); - //okay in this instance - only string values (fqdn) are expected to be needed + logger.debug("DANGER WILL ROBINSON: unable to convert value for JsonNode " + key); + // okay in this instance - only string values (fqdn) are expected to be needed } } else if (obj instanceof java.util.LinkedHashMap) { logger.debug("LinkedHashMap - this is showing up as a LinkedHashMap instead of JsonNode"); @@ -475,21 +435,22 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { String str = JSON_MAPPER.writeValueAsString(obj); stringMap.put(key, str); } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value for LinkedHashMap "+ key); - } - } else if (obj instanceof Integer) { - try { - String str = "" + obj; - stringMap.put(key, str); - } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value for Integer "+ key); + logger.debug("DANGER WILL ROBINSON: unable to convert value for LinkedHashMap " + key); + } + } else if (obj instanceof Integer) { + try { + String str = "" + obj; + stringMap.put(key, str); + } catch (Exception e) { + logger.debug("DANGER WILL ROBINSON: unable to convert value for Integer " + key); } } else { try { - String str = obj.toString(); + String str = obj.toString(); stringMap.put(key, str); } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value "+ key + " (" + e.getMessage() + ")"); + logger.debug( + "DANGER WILL ROBINSON: unable to convert value " + key + " (" + e.getMessage() + ")"); } } } @@ -499,45 +460,38 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { } /** - * This is the "Create VF Module" web service implementation. - * It will instantiate a new VF Module of the requested type in the specified cloud - * and tenant. The tenant must exist before this service is called. + * This is the "Create VF Module" web service implementation. It will instantiate a new VF Module of the requested + * type in the specified cloud and tenant. The tenant must exist before this service is called. * - * If a VF Module with the same name already exists, this can be considered a - * success or failure, depending on the value of the 'failIfExists' parameter. + * If a VF Module with the same name already exists, this can be considered a success or failure, depending on the + * value of the 'failIfExists' parameter. * - * All VF Modules are defined in the MSO catalog. The caller must request - * one of the pre-defined module types or an error will be returned. Within the - * catalog, each VF Module references (among other things) a cloud template - * which is used to deploy the required artifacts (VMs, networks, etc.) - * to the cloud. In this adapter implementation, that artifact is expected - * to be a Cloudify blueprint. + * All VF Modules are defined in the MSO catalog. The caller must request one of the pre-defined module types or an + * error will be returned. Within the catalog, each VF Module references (among other things) a cloud template which + * is used to deploy the required artifacts (VMs, networks, etc.) to the cloud. In this adapter implementation, that + * artifact is expected to be a Cloudify blueprint. * - * Depending on the blueprint, a variable set of input parameters will - * be defined, some of which are required. The caller is responsible to - * pass the necessary input data for the module or an error will be thrown. + * Depending on the blueprint, a variable set of input parameters will be defined, some of which are required. The + * caller is responsible to pass the necessary input data for the module or an error will be thrown. * - * The method returns the vfModuleId, a Map of output attributes, and a VnfRollback - * object. This last object can be passed as-is to the rollbackVnf operation to - * undo everything that was created for the Module. This is useful if a VF module - * is successfully created but the orchestration fails on a subsequent step. + * The method returns the vfModuleId, a Map of output attributes, and a VnfRollback object. This last object can be + * passed as-is to the rollbackVnf operation to undo everything that was created for the Module. This is useful if a + * VF module is successfully created but the orchestration fails on a subsequent step. * * @param cloudSiteId CLLI code of the cloud site in which to create the VNF + * @param cloudOwner cloud owner of the cloud site in which to create the VNF * @param tenantId Openstack tenant identifier - * @param vfModuleType VF Module type key, should match a VNF definition in catalog DB. - * Deprecated - should use modelCustomizationUuid - * @param vnfVersion VNF version key, should match a VNF definition in catalog DB - * Deprecated - VF Module versions also captured by modelCustomizationUuid + * @param vfModuleType VF Module type key, should match a VNF definition in catalog DB. Deprecated - should use + * modelCustomizationUuid + * @param vnfVersion VNF version key, should match a VNF definition in catalog DB Deprecated - VF Module versions + * also captured by modelCustomizationUuid * @param genericVnfId Generic VNF ID * @param vfModuleName Name to be assigned to the new VF Module * @param vfModuleId Id of the new VF Module * @param requestType Indicates if this is a Volume Group or Module request - * @param volumeGroupId Identifier (i.e. deployment ID) for a Volume Group - * to attach to a VF Module - * @param baseVfModuleId Identifier (i.e. deployment ID) of the Base Module if - * this is an Add-on module - * @param modelCustomizationUuid Unique ID for the VF Module's model. Replaces - * the use of vfModuleType. + * @param volumeGroupId Identifier (i.e. deployment ID) for a Volume Group to attach to a VF Module + * @param baseVfModuleId Identifier (i.e. deployment ID) of the Base Module if this is an Add-on module + * @param modelCustomizationUuid Unique ID for the VF Module's model. Replaces the use of vfModuleType. * @param inputs Map of key=value inputs for VNF stack creation * @param failIfExists Flag whether already existing VNF should be considered * @param backout Flag whether to suppress automatic backout (for testing) @@ -547,226 +501,214 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { * @param rollback Holder for returning VnfRollback object */ @Override - public void createVfModule(String cloudSiteId, - String tenantId, - String vfModuleType, - String vnfVersion, - String genericVnfId, - String vfModuleName, - String vfModuleId, - String requestType, - String volumeGroupId, - String baseVfModuleId, - String modelCustomizationUuid, - Map <String, Object> inputs, - Boolean failIfExists, - Boolean backout, - Boolean enableBridge, - MsoRequest msoRequest, - Holder <String> vnfId, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) - throws VnfException - { + public void createVfModule(String cloudSiteId, String cloudOwner, String tenantId, String vfModuleType, + String vnfVersion, String genericVnfId, String vfModuleName, String vfModuleId, String requestType, + String volumeGroupId, String baseVfModuleId, String modelCustomizationUuid, Map<String, Object> inputs, + Boolean failIfExists, Boolean backout, Boolean enableBridge, MsoRequest msoRequest, Holder<String> vnfId, + Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) throws VnfException { // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); - // Require a model customization ID. Every VF Module definition must have one. + // Require a model customization ID. Every VF Module definition must have one. if (modelCustomizationUuid == null || modelCustomizationUuid.isEmpty()) { logger.debug("Missing required input: modelCustomizationUuid"); String error = "Create vfModule error: Missing required input: modelCustomizationUuid"; logger.error("{} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), - "VF Module ModelCustomizationUuid", CLOUDIFY, ErrorCode.DataError.getValue(), - "Create VF Module: Missing required input: modelCustomizationUuid"); + "VF Module ModelCustomizationUuid", CLOUDIFY, ErrorCode.DataError.getValue(), + "Create VF Module: Missing required input: modelCustomizationUuid"); logger.debug(error); throw new VnfException(error, MsoExceptionCategory.USERDATA); } // Clean up some inputs to make comparisons easier if (requestType == null) - requestType = ""; + requestType = ""; if ("".equals(volumeGroupId) || "null".equals(volumeGroupId)) - volumeGroupId = null; + volumeGroupId = null; if ("".equals(baseVfModuleId) || "null".equals(baseVfModuleId)) - baseVfModuleId = null; + baseVfModuleId = null; if (inputs == null) { - // Create an empty set of inputs - inputs = new HashMap<>(); - logger.debug("inputs == null - setting to empty"); + // Create an empty set of inputs + inputs = new HashMap<>(); + logger.debug("inputs == null - setting to empty"); } else { - this.sendMapToDebug(inputs); + this.sendMapToDebug(inputs); } // Check if this is for a "Volume" module boolean isVolumeRequest = false; if (requestType.startsWith("VOLUME")) { - isVolumeRequest = true; + isVolumeRequest = true; } - logger.debug("requestType = " + requestType + ", volumeGroupStackId = " + volumeGroupId + ", baseStackId = " + - baseVfModuleId); + logger.debug("requestType = " + requestType + ", volumeGroupStackId = " + volumeGroupId + ", baseStackId = " + + baseVfModuleId); // Build a default rollback object (no actions performed) VnfRollback vfRollback = new VnfRollback(); vfRollback.setCloudSiteId(cloudSiteId); + vfRollback.setCloudOwner(cloudOwner); vfRollback.setTenantId(tenantId); vfRollback.setMsoRequest(msoRequest); vfRollback.setRequestType(requestType); - vfRollback.setIsBase(false); // Until we know better + vfRollback.setIsBase(false); // Until we know better vfRollback.setVolumeGroupHeatStackId(volumeGroupId); vfRollback.setBaseGroupHeatStackId(baseVfModuleId); vfRollback.setModelCustomizationUuid(modelCustomizationUuid); vfRollback.setMode("CFY"); - rollback.value = vfRollback; // Default rollback - no updates performed + rollback.value = vfRollback; // Default rollback - no updates performed // Get the VNF/VF Module definition from the Catalog DB first. - // There are three relevant records: VfModule, VfModuleCustomization, VnfResource + // There are three relevant records: VfModule, VfModuleCustomization, VnfResource VfModule vf = null; - VnfResource vnfResource = null; - VfModuleCustomization vfmc = null; + VnfResource vnfResource = null; + VfModuleCustomization vfmc = null; try { - vfmc = vfModuleCustomRepo.findByModelCustomizationUUID(modelCustomizationUuid); + vfmc = vfModuleCustomRepo.findFirstByModelCustomizationUUIDOrderByCreatedDesc(modelCustomizationUuid); if (vfmc == null) { String error = "Create vfModule error: Unable to find vfModuleCust with modelCustomizationUuid=" - + modelCustomizationUuid; + + modelCustomizationUuid; logger.debug(error); - logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "VF Module " - + "ModelCustomizationUuid", - modelCustomizationUuid, "CatalogDb", ErrorCode.DataError.getValue(), error); + logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), + "VF Module " + "ModelCustomizationUuid", modelCustomizationUuid, "CatalogDb", + ErrorCode.DataError.getValue(), error); throw new VnfException(error, MsoExceptionCategory.USERDATA); } else { logger.debug("Found vfModuleCust entry " + vfmc.toString()); } // Get the vfModule and vnfResource records - vf = vfmc.getVfModule(); - vnfResource = vfmc.getVfModule().getVnfResources(); - } - catch (Exception e) { + vf = vfmc.getVfModule(); + vnfResource = vfmc.getVfModule().getVnfResources(); + } catch (Exception e) { - logger.debug("unhandled exception in create VF - [Query]" + e.getMessage()); - throw new VnfException("Exception during create VF " + e.getMessage()); + logger.debug("unhandled exception in create VF - [Query]" + e.getMessage()); + throw new VnfException("Exception during create VF " + e.getMessage()); } - // Perform a version check against cloudSite + // Perform a version check against cloudSite // Obtain the cloud site information where we will create the VF Module - Optional<CloudSite> cloudSiteOp = cloudConfig.getCloudSite (cloudSiteId); + Optional<CloudSite> cloudSiteOp = cloudConfig.getCloudSite(cloudSiteId); if (!cloudSiteOp.isPresent()) { - throw new VnfException (new MsoCloudSiteNotFound (cloudSiteId)); + throw new VnfException(new MsoCloudSiteNotFound(cloudSiteId)); } CloudSite cloudSite = cloudSiteOp.get(); - MavenLikeVersioning aicV = new MavenLikeVersioning(); - aicV.setVersion(cloudSite.getCloudVersion()); - - String vnfMin = vnfResource.getAicVersionMin(); - String vnfMax = vnfResource.getAicVersionMax(); - - if ( (vnfMin != null && !(aicV.isMoreRecentThan(vnfMin) || aicV.isTheSameVersion(vnfMin))) || - (vnfMax != null && aicV.isMoreRecentThan(vnfMax))) - { - // ERROR - String error = "VNF Resource type: " + vnfResource.getModelName() + ", ModelUuid=" + vnfResource.getModelUUID() - + " VersionMin=" + vnfMin + " VersionMax:" + vnfMax + " NOT supported on Cloud: " + cloudSiteId - + " with AIC_Version:" + cloudSite.getCloudVersion(); - logger.error("{} {} {} {} {}", MessageEnum.RA_CONFIG_EXC.toString(), error, "OpenStack", - ErrorCode.BusinessProcesssError.getValue(), "Exception - setVersion"); - logger.debug(error); - throw new VnfException(error, MsoExceptionCategory.USERDATA); - } - // End Version check + MavenLikeVersioning aicV = new MavenLikeVersioning(); + aicV.setVersion(cloudSite.getCloudVersion()); + + String vnfMin = vnfResource.getAicVersionMin(); + String vnfMax = vnfResource.getAicVersionMax(); + + if ((vnfMin != null && !(aicV.isMoreRecentThan(vnfMin) || aicV.isTheSameVersion(vnfMin))) + || (vnfMax != null && aicV.isMoreRecentThan(vnfMax))) { + // ERROR + String error = "VNF Resource type: " + vnfResource.getModelName() + ", ModelUuid=" + + vnfResource.getModelUUID() + " VersionMin=" + vnfMin + " VersionMax:" + vnfMax + + " NOT supported on Cloud: " + cloudSiteId + " with AIC_Version:" + cloudSite.getCloudVersion(); + logger.error("{} {} {} {} {}", MessageEnum.RA_CONFIG_EXC.toString(), error, "OpenStack", + ErrorCode.BusinessProcesssError.getValue(), "Exception - setVersion"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } + // End Version check DeploymentInfo cloudifyDeployment = null; // First, look up to see if the VF already exists. - long subStartTime1 = System.currentTimeMillis (); + long subStartTime1 = System.currentTimeMillis(); try { - cloudifyDeployment = cloudifyUtils.queryDeployment (cloudSiteId, tenantId, vfModuleName); - } - catch (MsoException me) { + cloudifyDeployment = cloudifyUtils.queryDeployment(cloudSiteId, tenantId, vfModuleName); + } catch (MsoException me) { // Failed to query the Deployment due to a cloudify exception. - String error = "Create VF Module: Query " + vfModuleName + " in " + cloudSiteId + "/" + tenantId + ": " + me ; + String error = "Create VF Module: Query " + vfModuleName + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + me; logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, cloudSiteId, - tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), - "Exception - queryDeployment", me); + tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), + "Exception - queryDeployment", me); logger.debug(error); // Convert to a generic VnfException - me.addContext ("CreateVFModule"); - throw new VnfException (me); + me.addContext("CreateVFModule"); + throw new VnfException(me); } // More precise handling/messaging if the Module already exists - if (cloudifyDeployment != null && !(cloudifyDeployment.getStatus () == DeploymentStatus.NOTFOUND)) { - // CREATED, INSTALLED, INSTALLING, FAILED, UNINSTALLING, UNKNOWN - DeploymentStatus status = cloudifyDeployment.getStatus(); - logger.debug ("Found Existing Deployment, status=" + status); - - if (status == DeploymentStatus.INSTALLED) { - // fail - it exists - if (failIfExists != null && failIfExists) { - String error = "Create VF: Deployment " + vfModuleName + " already exists in " + cloudSiteId + "/" + tenantId; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), - "Deployment " + vfModuleName + " already exists"); - logger.debug(error); - throw new VnfAlreadyExists (vfModuleName, cloudSiteId, tenantId, cloudifyDeployment.getId()); - } else { - // Found existing deployment and client has not requested "failIfExists". - // Populate the outputs from the existing deployment. + if (cloudifyDeployment != null && !(cloudifyDeployment.getStatus() == DeploymentStatus.NOTFOUND)) { + // CREATED, INSTALLED, INSTALLING, FAILED, UNINSTALLING, UNKNOWN + DeploymentStatus status = cloudifyDeployment.getStatus(); + logger.debug("Found Existing Deployment, status=" + status); + + if (status == DeploymentStatus.INSTALLED) { + // fail - it exists + if (failIfExists != null && failIfExists) { + String error = "Create VF: Deployment " + vfModuleName + " already exists in " + cloudOwner + "/" + + cloudSiteId + "/" + tenantId; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), + vfModuleName, cloudOwner, cloudSiteId, tenantId, CLOUDIFY, "queryDeployment", + ErrorCode.DataError.getValue(), "Deployment " + vfModuleName + " already exists"); + logger.debug(error); + throw new VnfAlreadyExists(vfModuleName, cloudSiteId, cloudOwner, tenantId, + cloudifyDeployment.getId()); + } else { + // Found existing deployment and client has not requested "failIfExists". + // Populate the outputs from the existing deployment. - vnfId.value = cloudifyDeployment.getId(); - outputs.value = copyStringOutputs (cloudifyDeployment.getOutputs ()); + vnfId.value = cloudifyDeployment.getId(); + outputs.value = copyStringOutputs(cloudifyDeployment.getOutputs()); return; - } - } - // Check through various detailed error cases - if (status == DeploymentStatus.INSTALLING || status == DeploymentStatus.UNINSTALLING) { - // fail - it's in progress - return meaningful error - String error = "Create VF: Deployment " + vfModuleName + " already exists and has status " + status.toString() + " in " + cloudSiteId + "/" + tenantId + "; please wait for it to complete, or fix manually."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), - "Deployment " + vfModuleName + " already exists"); - logger.debug(error); - throw new VnfAlreadyExists (vfModuleName, cloudSiteId, tenantId, cloudifyDeployment.getId()); - } - else if (status == DeploymentStatus.FAILED) { - // fail - it exists and is in a FAILED state - String error = "Create VF: Deployment " + vfModuleName + " already exists and is in FAILED state in " + cloudSiteId + "/" + tenantId + "; requires manual intervention."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), - "Deployment " + vfModuleName + " already " + "exists and is in FAILED state"); - logger.debug(error); - throw new VnfAlreadyExists (vfModuleName, cloudSiteId, tenantId, cloudifyDeployment.getId()); - } - else if (status == DeploymentStatus.UNKNOWN || status == DeploymentStatus.CREATED) { - // fail - it exists and is in a UNKNOWN state - String error = "Create VF: Deployment " + vfModuleName + " already exists and has status " + status.toString() + " in " + cloudSiteId + "/" + tenantId + "; requires manual intervention."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), - "Deployment " + vfModuleName + " already " + "exists and is in " + status.toString() + " state"); - logger.debug(error); - throw new VnfAlreadyExists (vfModuleName, cloudSiteId, tenantId, cloudifyDeployment.getId()); - } - else { - // Unexpected, since all known status values have been tested for - String error = - "Create VF: Deployment " + vfModuleName + " already exists with unexpected status " + status - .toString() + " in " + cloudSiteId + "/" + tenantId + "; requires manual intervention."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), - "Deployment " + vfModuleName + " already " + "exists and is in an unknown state"); - logger.debug(error); - throw new VnfAlreadyExists(vfModuleName, cloudSiteId, tenantId, cloudifyDeployment.getId()); - } + } + } + // Check through various detailed error cases + if (status == DeploymentStatus.INSTALLING || status == DeploymentStatus.UNINSTALLING) { + // fail - it's in progress - return meaningful error + String error = "Create VF: Deployment " + vfModuleName + " already exists and has status " + + status.toString() + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + "; please wait for it to complete, or fix manually."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), + "Deployment " + vfModuleName + " already exists"); + logger.debug(error); + throw new VnfAlreadyExists(vfModuleName, cloudSiteId, cloudOwner, tenantId, cloudifyDeployment.getId()); + } else if (status == DeploymentStatus.FAILED) { + // fail - it exists and is in a FAILED state + String error = "Create VF: Deployment " + vfModuleName + " already exists and is in FAILED state in " + + cloudOwner + "/" + cloudSiteId + "/" + tenantId + "; requires manual intervention."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), + "Deployment " + vfModuleName + " already " + "exists and is in FAILED state"); + logger.debug(error); + throw new VnfAlreadyExists(vfModuleName, cloudSiteId, cloudOwner, tenantId, cloudifyDeployment.getId()); + } else if (status == DeploymentStatus.UNKNOWN || status == DeploymentStatus.CREATED) { + // fail - it exists and is in a UNKNOWN state + String error = "Create VF: Deployment " + vfModuleName + " already exists and has status " + + status.toString() + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + "; requires manual intervention."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), + "Deployment " + vfModuleName + " already " + "exists and is in " + status.toString() + + " state"); + logger.debug(error); + throw new VnfAlreadyExists(vfModuleName, cloudSiteId, cloudOwner, tenantId, cloudifyDeployment.getId()); + } else { + // Unexpected, since all known status values have been tested for + String error = "Create VF: Deployment " + vfModuleName + " already exists with unexpected status " + + status.toString() + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + "; requires manual intervention."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, CLOUDIFY, "queryDeployment", ErrorCode.DataError.getValue(), + "Deployment " + vfModuleName + " already " + "exists and is in an unknown state"); + logger.debug(error); + throw new VnfAlreadyExists(vfModuleName, cloudSiteId, cloudOwner, tenantId, cloudifyDeployment.getId()); + } } @@ -776,43 +718,42 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { // If a Volume Group was provided, query its outputs for inclusion in Module input parameters if (volumeGroupId != null) { - long subStartTime2 = System.currentTimeMillis (); + long subStartTime2 = System.currentTimeMillis(); DeploymentInfo volumeDeployment = null; try { - volumeDeployment = cloudifyUtils.queryDeployment (cloudSiteId, tenantId, volumeGroupId); - } - catch (MsoException me) { + volumeDeployment = cloudifyUtils.queryDeployment(cloudSiteId, tenantId, volumeGroupId); + } catch (MsoException me) { // Failed to query the Volume GroupDeployment due to a cloudify exception. - String error = "Create VF Module: Query Volume Group " + volumeGroupId + " in " + cloudSiteId + "/" + tenantId + ": " + me ; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), volumeGroupId, - cloudSiteId, tenantId, CLOUDIFY, "queryDeployment(volume)", - ErrorCode.DataError.getValue(), "Exception - queryDeployment(volume)", me); + String error = "Create VF Module: Query Volume Group " + volumeGroupId + " in " + cloudOwner + "/" + + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), volumeGroupId, + cloudOwner, cloudSiteId, tenantId, CLOUDIFY, "queryDeployment(volume)", + ErrorCode.DataError.getValue(), "Exception - queryDeployment(volume)", me); logger.debug(error); // Convert to a generic VnfException - me.addContext ("CreateVFModule(QueryVolume)"); - throw new VnfException (me); + me.addContext("CreateVFModule(QueryVolume)"); + throw new VnfException(me); } - if (volumeDeployment == null || volumeDeployment.getStatus() == DeploymentStatus.NOTFOUND) { - String error = - "Create VFModule: Attached Volume Group DOES NOT EXIST " + volumeGroupId + " in " + cloudSiteId + "/" - + tenantId + " USER ERROR"; - logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), volumeGroupId, - cloudSiteId, tenantId, error, CLOUDIFY, "queryDeployment(volume)", - ErrorCode.BusinessProcesssError.getValue(), - "Create VFModule: Attached Volume Group DOES NOT EXIST"); - logger.debug(error); - throw new VnfException(error, MsoExceptionCategory.USERDATA); - } else { - logger.debug("Found nested volume group"); - volumeGroupOutputs = volumeDeployment.getOutputs(); - this.sendMapToDebug(volumeGroupOutputs, "volumeGroupOutputs"); - } + if (volumeDeployment == null || volumeDeployment.getStatus() == DeploymentStatus.NOTFOUND) { + String error = "Create VFModule: Attached Volume Group DOES NOT EXIST " + volumeGroupId + " in " + + cloudSiteId + "/" + tenantId + " USER ERROR"; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), volumeGroupId, + cloudSiteId, tenantId, error, CLOUDIFY, "queryDeployment(volume)", + ErrorCode.BusinessProcesssError.getValue(), + "Create VFModule: Attached Volume Group DOES NOT EXIST"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } else { + logger.debug("Found nested volume group"); + volumeGroupOutputs = volumeDeployment.getOutputs(); + this.sendMapToDebug(volumeGroupOutputs, "volumeGroupOutputs"); + } } // If this is an Add-On Module, query the Base Module outputs // Note: This will be performed whether or not the current request is for an - // Add-On Volume Group or Add-On VF Module + // Add-On Volume Group or Add-On VF Module if (vf.getIsBase()) { logger.debug("This is a BASE Module request"); @@ -823,37 +764,34 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { // Add-On Modules should always have a Base, but just treat as a warning if not provided. // Add-on Volume requests may or may not specify a base. if (!isVolumeRequest && baseVfModuleId == null) { - logger.debug ("WARNING: Add-on Module request - no Base Module ID provided"); + logger.debug("WARNING: Add-on Module request - no Base Module ID provided"); } if (baseVfModuleId != null) { - long subStartTime2 = System.currentTimeMillis (); - DeploymentInfo baseDeployment = null; - try { - baseDeployment = cloudifyUtils.queryDeployment (cloudSiteId, tenantId, baseVfModuleId); - } - catch (MsoException me) { - // Failed to query the Volume GroupDeployment due to a cloudify exception. - String error = - "Create VF Module: Query Base " + baseVfModuleId + " in " + cloudSiteId + "/" + tenantId + ": " - + me; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), baseVfModuleId, - cloudSiteId, tenantId, CLOUDIFY, "queryDeployment(Base)", - ErrorCode.DataError.getValue(), "Exception - queryDeployment(Base)", me); - logger.debug(error); - // Convert to a generic VnfException - me.addContext("CreateVFModule(QueryBase)"); - throw new VnfException (me); - } + long subStartTime2 = System.currentTimeMillis(); + DeploymentInfo baseDeployment = null; + try { + baseDeployment = cloudifyUtils.queryDeployment(cloudSiteId, tenantId, baseVfModuleId); + } catch (MsoException me) { + // Failed to query the Volume GroupDeployment due to a cloudify exception. + String error = "Create VF Module: Query Base " + baseVfModuleId + " in " + cloudOwner + "/" + + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), baseVfModuleId, + cloudOwner, cloudSiteId, tenantId, CLOUDIFY, "queryDeployment(Base)", + ErrorCode.DataError.getValue(), "Exception - queryDeployment(Base)", me); + logger.debug(error); + // Convert to a generic VnfException + me.addContext("CreateVFModule(QueryBase)"); + throw new VnfException(me); + } if (baseDeployment == null || baseDeployment.getStatus() == DeploymentStatus.NOTFOUND) { - String error = - "Create VFModule: Base Module DOES NOT EXIST " + baseVfModuleId + " in " + cloudSiteId + "/" - + tenantId + " USER ERROR"; + String error = "Create VFModule: Base Module DOES NOT EXIST " + baseVfModuleId + " in " + + cloudSiteId + "/" + tenantId + " USER ERROR"; logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), baseVfModuleId, - cloudSiteId, tenantId, error, CLOUDIFY, "queryDeployment(Base)", - ErrorCode.BusinessProcesssError.getValue(), - "Create VFModule: Base " + "Module DOES NOT EXIST"); + cloudSiteId, tenantId, error, CLOUDIFY, "queryDeployment(Base)", + ErrorCode.BusinessProcesssError.getValue(), + "Create VFModule: Base " + "Module DOES NOT EXIST"); logger.debug(error); throw new VnfException(error, MsoExceptionCategory.USERDATA); } else { @@ -867,36 +805,36 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { // Ready to deploy the new VNF - // NOTE: For this section, heatTemplate is used for both HEAT templates and Cloudify blueprints. + // NOTE: For this section, heatTemplate is used for both HEAT templates and Cloudify blueprints. // In final implementation (post-POC), the template object would either be generic or there would // be a separate DB Table/Object for Blueprints. - // NOTE: The template is fixed for the VF Module. The environment is part of the customization. + // NOTE: The template is fixed for the VF Module. The environment is part of the customization. HeatTemplate heatTemplate = null; HeatEnvironment heatEnvironment = null; if (isVolumeRequest) { - heatTemplate = vf.getVolumeHeatTemplate(); - heatEnvironment = vfmc.getVolumeHeatEnv(); - } else { - heatTemplate = vf.getModuleHeatTemplate(); - heatEnvironment = vfmc.getHeatEnvironment(); - } - - if (heatTemplate == null) { - String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + ", reqType=" - + requestType; - logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Template ID", vfModuleType, - "OpenStack", ErrorCode.DataError.getValue(), error); - throw new VnfException(error, MsoExceptionCategory.INTERNAL); - } else { - logger.debug("Got HEAT Template from DB: {}", heatTemplate.getHeatTemplate()); - } + heatTemplate = vf.getVolumeHeatTemplate(); + heatEnvironment = vfmc.getVolumeHeatEnv(); + } else { + heatTemplate = vf.getModuleHeatTemplate(); + heatEnvironment = vfmc.getHeatEnvironment(); + } + + if (heatTemplate == null) { + String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + + ", reqType=" + requestType; + logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Template ID", + vfModuleType, "OpenStack", ErrorCode.DataError.getValue(), error); + throw new VnfException(error, MsoExceptionCategory.INTERNAL); + } else { + logger.debug("Got HEAT Template from DB: {}", heatTemplate.getHeatTemplate()); + } if (heatEnvironment == null) { String error = "Update VNF: undefined Heat Environment. VF=" + vfModuleType; logger.error("{} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Environment ID", - "OpenStack", ErrorCode.DataError.getValue(), error); + "OpenStack", ErrorCode.DataError.getValue(), error); // Alarm on this error, configuration must be fixed throw new VnfException(error, MsoExceptionCategory.INTERNAL); } else { @@ -906,260 +844,252 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { try { // All variables converted to their native object types - HashMap<String, Object> goldenInputs = new HashMap<String,Object>(); + HashMap<String, Object> goldenInputs = new HashMap<String, Object>(); List<String> extraInputs = new ArrayList<String>(); - // NOTE: SKIP THIS FOR CLOUDIFY for now. Just use what was passed in. - // This whole section needs to be rewritten. - Boolean skipInputChecks = false; - - if (skipInputChecks) { - goldenInputs = new HashMap<String,Object>(); - for (String key : inputs.keySet()) { - goldenInputs.put(key, inputs.get(key)); - } - } - else { - // Build maps for the parameters (including aliases) to simplify checks - HashMap<String, HeatTemplateParam> params = new HashMap<String, HeatTemplateParam>(); - - Set<HeatTemplateParam> paramSet = heatTemplate.getParameters(); - logger.debug("paramSet has {} entries", paramSet.size()); - - for (HeatTemplateParam htp : paramSet) { - params.put(htp.getParamName(), htp); - - // Include aliases. - String alias = htp.getParamAlias(); - if (alias != null && !alias.equals("") && !params.containsKey(alias)) { - params.put(alias, htp); - } - } - - // First, convert all inputs to their "template" type - for (String key : inputs.keySet()) { - if (params.containsKey(key)) { - Object value = cloudifyUtils.convertInputValue(inputs.get(key), params.get(key)); - if (value != null) { - goldenInputs.put(key, value); - } - else { - logger.debug("Failed to convert input " + key + "='" + inputs.get(key) + "' to " + params.get(key) - .getParamType()); - } - } else { - extraInputs.add(key); - } - } - - if (!extraInputs.isEmpty()) { - logger.debug("Ignoring extra inputs: " + extraInputs); - } - - // Next add in Volume Group Outputs if there are any. Copy directly without conversions. - if (volumeGroupOutputs != null && !volumeGroupOutputs.isEmpty()) { - for (String key : volumeGroupOutputs.keySet()) { - if (params.containsKey(key) && !goldenInputs.containsKey(key)) { - goldenInputs.put(key, volumeGroupOutputs.get(key)); - } - } - } - - // Next add in Base Module Outputs if there are any. Copy directly without conversions. - if (baseModuleOutputs != null && !baseModuleOutputs.isEmpty()) { - for (String key : baseModuleOutputs.keySet()) { - if (params.containsKey(key) && !goldenInputs.containsKey(key)) { - goldenInputs.put(key, baseModuleOutputs.get(key)); - } - } - } - - // Last, add in values from the "environment" file. - // These are added to the inputs, since Cloudify doesn't pass an environment file like Heat. - - // TODO: This may take a different form for Cloudify, but for now process it - // with Heat environment file syntax + // NOTE: SKIP THIS FOR CLOUDIFY for now. Just use what was passed in. + // This whole section needs to be rewritten. + Boolean skipInputChecks = false; + + if (skipInputChecks) { + goldenInputs = new HashMap<String, Object>(); + for (String key : inputs.keySet()) { + goldenInputs.put(key, inputs.get(key)); + } + } else { + // Build maps for the parameters (including aliases) to simplify checks + HashMap<String, HeatTemplateParam> params = new HashMap<String, HeatTemplateParam>(); + + Set<HeatTemplateParam> paramSet = heatTemplate.getParameters(); + logger.debug("paramSet has {} entries", paramSet.size()); + + for (HeatTemplateParam htp : paramSet) { + params.put(htp.getParamName(), htp); + + // Include aliases. + String alias = htp.getParamAlias(); + if (alias != null && !alias.equals("") && !params.containsKey(alias)) { + params.put(alias, htp); + } + } + + // First, convert all inputs to their "template" type + for (String key : inputs.keySet()) { + if (params.containsKey(key)) { + Object value = cloudifyUtils.convertInputValue(inputs.get(key), params.get(key)); + if (value != null) { + goldenInputs.put(key, value); + } else { + logger.debug("Failed to convert input " + key + "='" + inputs.get(key) + "' to " + + params.get(key).getParamType()); + } + } else { + extraInputs.add(key); + } + } + + if (!extraInputs.isEmpty()) { + logger.debug("Ignoring extra inputs: " + extraInputs); + } + + // Next add in Volume Group Outputs if there are any. Copy directly without conversions. + if (volumeGroupOutputs != null && !volumeGroupOutputs.isEmpty()) { + for (String key : volumeGroupOutputs.keySet()) { + if (params.containsKey(key) && !goldenInputs.containsKey(key)) { + goldenInputs.put(key, volumeGroupOutputs.get(key)); + } + } + } + + // Next add in Base Module Outputs if there are any. Copy directly without conversions. + if (baseModuleOutputs != null && !baseModuleOutputs.isEmpty()) { + for (String key : baseModuleOutputs.keySet()) { + if (params.containsKey(key) && !goldenInputs.containsKey(key)) { + goldenInputs.put(key, baseModuleOutputs.get(key)); + } + } + } + + // Last, add in values from the "environment" file. + // These are added to the inputs, since Cloudify doesn't pass an environment file like Heat. + + // TODO: This may take a different form for Cloudify, but for now process it + // with Heat environment file syntax StringBuilder sb = new StringBuilder(heatEnvironment.getEnvironment()); - MsoHeatEnvironmentEntry mhee = new MsoHeatEnvironmentEntry (sb); - - if (mhee.getParameters() != null) { - for (MsoHeatEnvironmentParameter envParam : mhee.getParameters()) { - // If this is a template input, copy to golden inputs - String envKey = envParam.getName(); - if (params.containsKey(envKey) && !goldenInputs.containsKey(envKey)) { - Object value = cloudifyUtils.convertInputValue(envParam.getValue(), params.get(envKey)); - if (value != null) { - goldenInputs.put(envKey, value); - } - else { - logger.debug("Failed to convert environment parameter " + envKey + "='" + envParam.getValue() + "' to " + - params.get(envKey).getParamType()); - } - } - } - } - - this.sendMapToDebug(goldenInputs, "Final inputs sent to Cloudify"); - - - // Check that required parameters have been supplied from any of the sources - String missingParams = null; - boolean checkRequiredParameters = true; - try { - String propertyString = this.environment.getProperty(MsoVnfCloudifyAdapterImpl.CHECK_REQD_PARAMS); - if ("false".equalsIgnoreCase (propertyString) || "n".equalsIgnoreCase (propertyString)) { - checkRequiredParameters = false; - logger.debug("CheckRequiredParameters is FALSE. Will still check but then skip blocking... {}", - MsoVnfCloudifyAdapterImpl.CHECK_REQD_PARAMS); - } - } catch (Exception e) { - // No problem - default is true - logger.debug("An exception occured trying to get property {}", - MsoVnfCloudifyAdapterImpl.CHECK_REQD_PARAMS, e); - } - - - for (HeatTemplateParam parm : heatTemplate.getParameters ()) { - if (parm.isRequired () && (!goldenInputs.containsKey (parm.getParamName ()))) { - logger.debug("adding to missing parameters list: {}", parm.getParamName()); - if (missingParams == null) { - missingParams = parm.getParamName(); - } else { - missingParams += "," + parm.getParamName(); - } - } - } - - if (missingParams != null) { - if (checkRequiredParameters) { - // Problem - missing one or more required parameters - String error = "Create VFModule: Missing Required inputs: " + missingParams; - logger.error("{} {} {} {} {}", MessageEnum.RA_MISSING_PARAM.toString(), missingParams, CLOUDIFY, - ErrorCode.DataError.getValue(), "Create VFModule: Missing Required inputs"); - logger.debug(error); - throw new VnfException(error, MsoExceptionCategory.USERDATA); - } else { - logger.debug( - "found missing parameters [" + missingParams + "] - but checkRequiredParameters is false -" - + " will not block"); - } - } else { - logger.debug("No missing parameters found - ok to proceed"); - } - - } // NOTE: END PARAMETER CHECKING - - // Ready to deploy the VF Module. - // *First step - make sure the blueprint is loaded into Cloudify. - String blueprintName = heatTemplate.getTemplateName(); - String blueprint = heatTemplate.getTemplateBody(); - String blueprintId = blueprintName; - - // Use the main blueprint name as the blueprint ID (strip yaml extensions). + MsoHeatEnvironmentEntry mhee = new MsoHeatEnvironmentEntry(sb); + + if (mhee.getParameters() != null) { + for (MsoHeatEnvironmentParameter envParam : mhee.getParameters()) { + // If this is a template input, copy to golden inputs + String envKey = envParam.getName(); + if (params.containsKey(envKey) && !goldenInputs.containsKey(envKey)) { + Object value = cloudifyUtils.convertInputValue(envParam.getValue(), params.get(envKey)); + if (value != null) { + goldenInputs.put(envKey, value); + } else { + logger.debug("Failed to convert environment parameter " + envKey + "='" + + envParam.getValue() + "' to " + params.get(envKey).getParamType()); + } + } + } + } + + this.sendMapToDebug(goldenInputs, "Final inputs sent to Cloudify"); + + + // Check that required parameters have been supplied from any of the sources + String missingParams = null; + boolean checkRequiredParameters = true; + try { + String propertyString = this.environment.getProperty(MsoVnfCloudifyAdapterImpl.CHECK_REQD_PARAMS); + if ("false".equalsIgnoreCase(propertyString) || "n".equalsIgnoreCase(propertyString)) { + checkRequiredParameters = false; + logger.debug("CheckRequiredParameters is FALSE. Will still check but then skip blocking... {}", + MsoVnfCloudifyAdapterImpl.CHECK_REQD_PARAMS); + } + } catch (Exception e) { + // No problem - default is true + logger.debug("An exception occured trying to get property {}", + MsoVnfCloudifyAdapterImpl.CHECK_REQD_PARAMS, e); + } + + + for (HeatTemplateParam parm : heatTemplate.getParameters()) { + if (parm.isRequired() && (!goldenInputs.containsKey(parm.getParamName()))) { + logger.debug("adding to missing parameters list: {}", parm.getParamName()); + if (missingParams == null) { + missingParams = parm.getParamName(); + } else { + missingParams += "," + parm.getParamName(); + } + } + } + + if (missingParams != null) { + if (checkRequiredParameters) { + // Problem - missing one or more required parameters + String error = "Create VFModule: Missing Required inputs: " + missingParams; + logger.error("{} {} {} {} {}", MessageEnum.RA_MISSING_PARAM.toString(), missingParams, CLOUDIFY, + ErrorCode.DataError.getValue(), "Create VFModule: Missing Required inputs"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } else { + logger.debug("found missing parameters [" + missingParams + + "] - but checkRequiredParameters is false -" + " will not block"); + } + } else { + logger.debug("No missing parameters found - ok to proceed"); + } + + } // NOTE: END PARAMETER CHECKING + + // Ready to deploy the VF Module. + // *First step - make sure the blueprint is loaded into Cloudify. + String blueprintName = heatTemplate.getTemplateName(); + String blueprint = heatTemplate.getTemplateBody(); + String blueprintId = blueprintName; + + // Use the main blueprint name as the blueprint ID (strip yaml extensions). if (blueprintId.endsWith(".yaml")) - blueprintId = blueprintId.substring(0,blueprintId.lastIndexOf(".yaml")); - - try { - if (! cloudifyUtils.isBlueprintLoaded (cloudSiteId, blueprintId)) { - logger.debug("Blueprint " + blueprintId + " is not loaded. Will upload it now."); - - Map<String,byte[]> blueprintFiles = new HashMap<String,byte[]>(); - - blueprintFiles.put(blueprintName, blueprint.getBytes()); - - // TODO: Implement nested blueprint logic based on Cloudify structures. - // For now, just use the Heat structures. - // The query returns a map of String->Object, where the map keys provide one layer of - // indirection from the Heat template names. For this case, assume the map key matches - // the nested blueprint name. - List<HeatTemplate> nestedBlueprints = heatTemplate.getChildTemplates(); - if (nestedBlueprints != null) { - for (HeatTemplate nestedBlueprint: nestedBlueprints) { - blueprintFiles.put(nestedBlueprint.getTemplateName(), nestedBlueprint.getTemplateBody().getBytes()); - } - } - - // TODO: Implement file artifact logic based on Cloudify structures. - // For now, just use the Heat structures. - List<HeatFiles> heatFiles = vf.getHeatFiles(); - if (heatFiles != null) { - for (HeatFiles heatFile: heatFiles) { - blueprintFiles.put(heatFile.getFileName(), heatFile.getFileBody().getBytes()); - } - } - - // Upload the blueprint package - cloudifyUtils.uploadBlueprint(cloudSiteId, blueprintId, blueprintName, blueprintFiles, false); - - } - } - - catch (MsoException me) { - me.addContext("CreateVFModule"); - String error = "Create VF Module: Upload blueprint failed. Blueprint=" + blueprintName + ": " + me; - logger.error("{} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, cloudSiteId, - tenantId, CLOUDIFY, ErrorCode.DataError.getValue(), "MsoException - uploadBlueprint", me); - logger.debug(error); - throw new VnfException(me); - } + blueprintId = blueprintId.substring(0, blueprintId.lastIndexOf(".yaml")); + + try { + if (!cloudifyUtils.isBlueprintLoaded(cloudSiteId, blueprintId)) { + logger.debug("Blueprint " + blueprintId + " is not loaded. Will upload it now."); + + Map<String, byte[]> blueprintFiles = new HashMap<String, byte[]>(); + + blueprintFiles.put(blueprintName, blueprint.getBytes()); + + // TODO: Implement nested blueprint logic based on Cloudify structures. + // For now, just use the Heat structures. + // The query returns a map of String->Object, where the map keys provide one layer of + // indirection from the Heat template names. For this case, assume the map key matches + // the nested blueprint name. + List<HeatTemplate> nestedBlueprints = heatTemplate.getChildTemplates(); + if (nestedBlueprints != null) { + for (HeatTemplate nestedBlueprint : nestedBlueprints) { + blueprintFiles.put(nestedBlueprint.getTemplateName(), + nestedBlueprint.getTemplateBody().getBytes()); + } + } + + // TODO: Implement file artifact logic based on Cloudify structures. + // For now, just use the Heat structures. + List<HeatFiles> heatFiles = vf.getHeatFiles(); + if (heatFiles != null) { + for (HeatFiles heatFile : heatFiles) { + blueprintFiles.put(heatFile.getFileName(), heatFile.getFileBody().getBytes()); + } + } + + // Upload the blueprint package + cloudifyUtils.uploadBlueprint(cloudSiteId, blueprintId, blueprintName, blueprintFiles, false); + + } + } + + catch (MsoException me) { + me.addContext("CreateVFModule"); + String error = "Create VF Module: Upload blueprint failed. Blueprint=" + blueprintName + ": " + me; + logger.error("{} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, + cloudSiteId, tenantId, CLOUDIFY, ErrorCode.DataError.getValue(), + "MsoException - uploadBlueprint", me); + logger.debug(error); + throw new VnfException(me); + } // Ignore MsoTenantNotFound and MsoStackAlreadyExists exceptions // because we already checked for those. - long createDeploymentStarttime = System.currentTimeMillis (); + long createDeploymentStarttime = System.currentTimeMillis(); try { - // KLUDGE - Cloudify requires Tenant Name for Openstack. We have the ID. - // Go directly to Keystone until APIs could be updated to supply the name. - MsoTenant msoTenant = keystoneUtils.queryTenant(tenantId, cloudSiteId); - String tenantName = (msoTenant != null? msoTenant.getTenantName() : tenantId); - - if (backout == null) { - backout = true; - } - - cloudifyDeployment = cloudifyUtils.createAndInstallDeployment (cloudSiteId, - tenantName, - vfModuleName, - blueprintId, - goldenInputs, - true, - heatTemplate.getTimeoutMinutes (), - backout.booleanValue()); + // KLUDGE - Cloudify requires Tenant Name for Openstack. We have the ID. + // Go directly to Keystone until APIs could be updated to supply the name. + MsoTenant msoTenant = keystoneUtils.queryTenant(tenantId, cloudSiteId); + String tenantName = (msoTenant != null ? msoTenant.getTenantName() : tenantId); + + if (backout == null) { + backout = true; + } + + cloudifyDeployment = cloudifyUtils.createAndInstallDeployment(cloudSiteId, tenantName, vfModuleName, + blueprintId, goldenInputs, true, heatTemplate.getTimeoutMinutes(), backout.booleanValue()); } catch (MsoException me) { - me.addContext ("CreateVFModule"); - String error = "Create VF Module " + vfModuleType + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger - .error("{} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, cloudSiteId, - tenantId, CLOUDIFY, ErrorCode.DataError.getValue(), "MsoException - createDeployment", - me); + me.addContext("CreateVFModule"); + String error = "Create VF Module " + vfModuleType + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, + cloudOwner, cloudSiteId, tenantId, CLOUDIFY, ErrorCode.DataError.getValue(), + "MsoException - createDeployment", me); logger.debug(error); - throw new VnfException (me); + throw new VnfException(me); } catch (NullPointerException npe) { - String error = "Create VFModule " + vfModuleType + " in " + cloudSiteId + "/" + tenantId + ": " + npe; - logger - .error("{} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, cloudSiteId, - tenantId, CLOUDIFY, ErrorCode.DataError.getValue(), + String error = "Create VFModule " + vfModuleType + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + npe; + logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, + cloudOwner, cloudSiteId, tenantId, CLOUDIFY, ErrorCode.DataError.getValue(), "NullPointerException - createDeployment", npe); logger.debug(error); logger.debug("NULL POINTER EXCEPTION at cloudify.createAndInstallDeployment"); - //npe.addContext ("CreateVNF"); - throw new VnfException ("NullPointerException during cloudify.createAndInstallDeployment"); + // npe.addContext ("CreateVNF"); + throw new VnfException("NullPointerException during cloudify.createAndInstallDeployment"); } catch (Exception e) { logger.debug("unhandled exception at cloudify.createAndInstallDeployment"); - throw new VnfException("Exception during cloudify.createAndInstallDeployment! " + e.getMessage()); + throw new VnfException("Exception during cloudify.createAndInstallDeployment! " + e.getMessage()); } } catch (Exception e) { - logger.debug("unhandled exception in create VF"); - throw new VnfException("Exception during create VF " + e.getMessage()); + logger.debug("unhandled exception in create VF"); + throw new VnfException("Exception during create VF " + e.getMessage()); } // Reach this point if create is successful. // Populate remaining rollback info and response parameters. - vfRollback.setVnfCreated (true); - vfRollback.setVnfId (cloudifyDeployment.getId()); + vfRollback.setVnfCreated(true); + vfRollback.setVnfId(cloudifyDeployment.getId()); vnfId.value = cloudifyDeployment.getId(); - outputs.value = copyStringOutputs (cloudifyDeployment.getOutputs ()); + outputs.value = copyStringOutputs(cloudifyDeployment.getOutputs()); rollback.value = vfRollback; @@ -1167,48 +1097,47 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { return; } - public void deleteVfModule (String cloudSiteId, - String tenantId, - String vnfName, - MsoRequest msoRequest, - Holder <Map <String, String>> outputs) throws VnfException { - - logger.debug ("Deleting VF " + vnfName + " in " + cloudSiteId + "/" + tenantId); + public void deleteVfModule(String cloudSiteId, String cloudOwner, String tenantId, String vnfName, + MsoRequest msoRequest, Holder<Map<String, String>> outputs) throws VnfException { + logger.debug("Deleting VF " + vnfName + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); // 1702 capture the output parameters on a delete // so we'll need to query first DeploymentInfo deployment = null; try { - deployment = cloudifyUtils.queryDeployment(cloudSiteId, tenantId, vnfName); + deployment = cloudifyUtils.queryDeployment(cloudSiteId, tenantId, vnfName); } catch (MsoException me) { - // Failed to query the deployment. Convert to a generic VnfException - me.addContext ("DeleteVFModule"); - String error = "Delete VFModule: Query to get outputs: " + vnfName + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, cloudSiteId, - tenantId, CLOUDIFY, "QueryDeployment", ErrorCode.DataError.getValue(), - "Exception - QueryDeployment", me); + // Failed to query the deployment. Convert to a generic VnfException + me.addContext("DeleteVFModule"); + String error = "Delete VFModule: Query to get outputs: " + vnfName + " in " + cloudOwner + "/" + cloudSiteId + + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfName, cloudOwner, + cloudSiteId, tenantId, CLOUDIFY, "QueryDeployment", ErrorCode.DataError.getValue(), + "Exception - QueryDeployment", me); logger.debug(error); - throw new VnfException (me); + throw new VnfException(me); } - // call method which handles the conversion from Map<String,Object> to Map<String,String> for our expected Object types + // call method which handles the conversion from Map<String,Object> to Map<String,String> for our expected + // Object types outputs.value = convertMapStringObjectToStringString(deployment.getOutputs()); // Use the MsoHeatUtils to delete the stack. Set the polling flag to true. // The possible outcomes of deleteStack are a StackInfo object with status // of NOTFOUND (on success) or FAILED (on error). Also, MsoOpenstackException // could be thrown. - long subStartTime = System.currentTimeMillis (); + long subStartTime = System.currentTimeMillis(); try { cloudifyUtils.uninstallAndDeleteDeployment(cloudSiteId, tenantId, vnfName, 5); } catch (MsoException me) { me.addContext("DeleteVfModule"); // Convert to a generic VnfException - String error = "Delete VF: " + vnfName + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vnfName, cloudSiteId, - tenantId, "DeleteDeployment", "DeleteDeployment", ErrorCode.DataError.getValue(), - "Exception - DeleteDeployment: " + me.getMessage()); + String error = + "Delete VF: " + vnfName + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vnfName, cloudOwner, + cloudSiteId, tenantId, "DeleteDeployment", "DeleteDeployment", ErrorCode.DataError.getValue(), + "Exception - DeleteDeployment: " + me.getMessage()); logger.debug(error); throw new VnfException(me); } @@ -1217,26 +1146,16 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter { return; } - // TODO: Should Update be supported for Cloudify? What would this look like? + // TODO: Should Update be supported for Cloudify? What would this look like? @Override - public void updateVfModule (String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - String baseVfHeatStackId, - String vfModuleStackId, - String modelCustomizationUuid, - Map <String, Object> inputs, - MsoRequest msoRequest, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) throws VnfException - { - // This operation is not currently supported for Cloudify-orchestrated VF Modules. - logger.debug("Update VF Module command attempted but not supported"); - throw new VnfException ("UpdateVfModule: Unsupported command", MsoExceptionCategory.USERDATA); - } + public void updateVfModule(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, + String vnfVersion, String vnfName, String requestType, String volumeGroupHeatStackId, + String baseVfHeatStackId, String vfModuleStackId, String modelCustomizationUuid, Map<String, Object> inputs, + MsoRequest msoRequest, Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) + throws VnfException { + // This operation is not currently supported for Cloudify-orchestrated VF Modules. + logger.debug("Update VF Module command attempted but not supported"); + throw new VnfException("UpdateVfModule: Unsupported command", MsoExceptionCategory.USERDATA); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java index 197777c1ae..7b48d0b07f 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java @@ -21,21 +21,15 @@ */ /** - * This VNF Adapter implementation is based on the VDU Plugin model. It assumes that each - * VF Module definition in the MSO catalog is expressed via a set of template and/or file - * artifacts that are appropriate for some specific sub-orchestrator that provides an - * implementation of the VduPlugin interface. This adapter handles all of the common - * VF Module logic, including: - * - catalog lookups for artifact retrieval - * - parameter filtering and validation - * - base and volume module queries - * - rollback logic - * - logging and error handling + * This VNF Adapter implementation is based on the VDU Plugin model. It assumes that each VF Module definition in the + * MSO catalog is expressed via a set of template and/or file artifacts that are appropriate for some specific + * sub-orchestrator that provides an implementation of the VduPlugin interface. This adapter handles all of the common + * VF Module logic, including: - catalog lookups for artifact retrieval - parameter filtering and validation - base and + * volume module queries - rollback logic - logging and error handling * - * Then based on the orchestration mode of the VNF, it will invoke different VDU plug-ins - * to perform the low level instantiations, deletions, and queries. At this time, the - * set of available plug-ins is hard-coded, though in the future a dynamic selection - * is expected (e.g. via a service-provider interface). + * Then based on the orchestration mode of the VNF, it will invoke different VDU plug-ins to perform the low level + * instantiations, deletions, and queries. At this time, the set of available plug-ins is hard-coded, though in the + * future a dynamic selection is expected (e.g. via a service-provider interface). */ package org.onap.so.adapters.vnf; @@ -46,10 +40,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; - import javax.jws.WebService; import javax.xml.ws.Holder; - import org.onap.so.adapters.vdu.CloudInfo; import org.onap.so.adapters.vdu.VduException; import org.onap.so.adapters.vdu.VduInstance; @@ -74,7 +66,6 @@ import org.onap.so.db.catalog.utils.MavenLikeVersioning; import org.onap.so.entity.MsoRequest; import org.onap.so.logger.ErrorCode; import org.onap.so.logger.MessageEnum; - import org.onap.so.openstack.beans.VnfRollback; import org.onap.so.openstack.beans.VnfStatus; import org.onap.so.openstack.exceptions.MsoCloudSiteNotFound; @@ -90,12 +81,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; - import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -@WebService(serviceName = "VnfAdapter", endpointInterface = "org.onap.so.adapters.vnf.MsoVnfAdapter", targetNamespace = "http://org.onap.so/vnf") +@WebService(serviceName = "VnfAdapter", endpointInterface = "org.onap.so.adapters.vnf.MsoVnfAdapter", + targetNamespace = "http://org.onap.so/vnf") @Component @Transactional public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { @@ -127,19 +118,20 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { @Autowired protected MsoMulticloudUtils multicloudUtils; - @Autowired - protected VfModuleCustomizationToVduMapper vduMapper; + @Autowired + protected VfModuleCustomizationToVduMapper vduMapper; - /** + /** * Health Check web method. Does nothing but return to show the adapter is deployed. */ @Override - public void healthCheck () { + public void healthCheck() { logger.debug("Health check call in VNF Plugin Adapter"); } /** * DO NOT use that constructor to instantiate this class, the msoPropertiesfactory will be NULL. + * * @see MsoVnfPluginAdapterImpl#MsoVnfAdapterImpl(MsoPropertiesFactory, CloudConfigFactory) */ public MsoVnfPluginAdapterImpl() { @@ -147,55 +139,31 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { } /** - * This is the "Create VNF" web service implementation. - * This function is now unsupported and will return an error. + * This is the "Create VNF" web service implementation. This function is now unsupported and will return an error. * */ @Override - public void createVnf (String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - Map <String, Object> inputs, - Boolean failIfExists, - Boolean backout, - Boolean enableBridge, - MsoRequest msoRequest, - Holder <String> vnfId, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) - throws VnfException - { - // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. + public void createVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, String vnfVersion, + String vnfName, String requestType, String volumeGroupHeatStackId, Map<String, Object> inputs, + Boolean failIfExists, Boolean backout, Boolean enableBridge, MsoRequest msoRequest, Holder<String> vnfId, + Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) throws VnfException { + // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. logger.debug("CreateVNF command attempted but not supported"); throw new VnfException("CreateVNF: Unsupported command", MsoExceptionCategory.USERDATA); } /** - * This is the "Update VNF" web service implementation. - * This function is now unsupported and will return an error. + * This is the "Update VNF" web service implementation. This function is now unsupported and will return an error. * */ @Override - public void updateVnf (String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - Map <String, Object> inputs, - MsoRequest msoRequest, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) - throws VnfException - { - // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. - logger.debug("UpdateVNF command attempted but not supported"); - throw new VnfException ("UpdateVNF: Unsupported command", MsoExceptionCategory.USERDATA); + public void updateVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, String vnfVersion, + String vnfName, String requestType, String volumeGroupHeatStackId, Map<String, Object> inputs, + MsoRequest msoRequest, Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) + throws VnfException { + // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. + logger.debug("UpdateVNF command attempted but not supported"); + throw new VnfException("UpdateVNF: Unsupported command", MsoExceptionCategory.USERDATA); } /** @@ -203,8 +171,8 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { * * This really should be QueryVfModule, but nobody ever changed it. * - * The method returns an indicator that the VNF exists, along with its status and outputs. - * The input "vnfName" will also be reflected back as its ID. + * The method returns an indicator that the VNF exists, along with its status and outputs. The input "vnfName" will + * also be reflected back as its ID. * * @param cloudSiteId CLLI code of the cloud site in which to query * @param tenantId Openstack tenant identifier @@ -215,90 +183,78 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { * @param outputs Holder for Map of outputs from the deployed VF Module (assigned IPs, etc) */ @Override - public void queryVnf (String cloudSiteId, - String tenantId, - String vnfNameOrId, - MsoRequest msoRequest, - Holder <Boolean> vnfExists, - Holder <String> vnfId, - Holder <VnfStatus> status, - Holder <Map <String, String>> outputs) - throws VnfException - { - logger.debug("Querying VNF " + vnfNameOrId + " in " + cloudSiteId + "/" + tenantId); + public void queryVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfNameOrId, + MsoRequest msoRequest, Holder<Boolean> vnfExists, Holder<String> vnfId, Holder<VnfStatus> status, + Holder<Map<String, String>> outputs) throws VnfException { + logger.debug("Querying VNF " + vnfNameOrId + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); - long subStartTime = System.currentTimeMillis (); - - VduInstance vduInstance = null; - CloudInfo cloudInfo = new CloudInfo(cloudSiteId, tenantId, null); - - VduPlugin vduPlugin = getVduPlugin(cloudSiteId); - - try { - vduInstance = vduPlugin.queryVdu (cloudInfo, vnfNameOrId); - } - catch (VduException e) { - // Failed to query the VDU due to a plugin exception. - // Convert to a generic VnfException - e.addContext("QueryVNF"); - String error = "Query VNF (VDU): " + vnfNameOrId + " in " + cloudSiteId + "/" + tenantId + ": " + e; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfNameOrId, cloudSiteId, - tenantId, "VDU", "QueryVNF", ErrorCode.DataError.getValue(), "Exception - queryVDU", e); - logger.debug(error); - throw new VnfException(e); - } - - if (vduInstance != null && vduInstance.getStatus().getState() != VduStateType.NOTFOUND) { - vnfExists.value = Boolean.TRUE; - status.value = vduStatusToVnfStatus(vduInstance); - vnfId.value = vduInstance.getVduInstanceId(); - outputs.value = copyStringOutputs(vduInstance.getOutputs()); - - logger.debug("VNF {} found, ID = {}", vnfNameOrId, vnfId.value); + long startTime = System.currentTimeMillis(); + long subStartTime = System.currentTimeMillis(); + + VduInstance vduInstance = null; + CloudInfo cloudInfo = new CloudInfo(cloudSiteId, cloudOwner, tenantId, null); + + VduPlugin vduPlugin = getVduPlugin(cloudSiteId, cloudOwner); + + try { + vduInstance = vduPlugin.queryVdu(cloudInfo, vnfNameOrId); + } catch (VduException e) { + // Failed to query the VDU due to a plugin exception. + // Convert to a generic VnfException + e.addContext("QueryVNF"); + String error = "Query VNF (VDU): " + vnfNameOrId + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + ": " + e; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vnfNameOrId, cloudOwner, + cloudSiteId, tenantId, "VDU", "QueryVNF", ErrorCode.DataError.getValue(), "Exception - queryVDU", + e); + logger.debug(error); + throw new VnfException(e); + } + + if (vduInstance != null && vduInstance.getStatus().getState() != VduStateType.NOTFOUND) { + vnfExists.value = Boolean.TRUE; + status.value = vduStatusToVnfStatus(vduInstance); + vnfId.value = vduInstance.getVduInstanceId(); + outputs.value = copyStringOutputs(vduInstance.getOutputs()); + + logger.debug("VNF {} found, ID = {}", vnfNameOrId, vnfId.value); + } else { + vnfExists.value = Boolean.FALSE; + status.value = VnfStatus.NOTFOUND; + vnfId.value = null; + outputs.value = new HashMap<String, String>(); // Return as an empty map + + logger.debug("VNF {} not found", vnfNameOrId); } - else { - vnfExists.value = Boolean.FALSE; - status.value = VnfStatus.NOTFOUND; - vnfId.value = null; - outputs.value = new HashMap<String, String>(); // Return as an empty map - - logger.debug("VNF {} not found", vnfNameOrId); - } return; } /** - * This is the "Delete VNF" web service implementation. - * This function is now unsupported and will return an error. + * This is the "Delete VNF" web service implementation. This function is now unsupported and will return an error. * */ @Override - public void deleteVnf (String cloudSiteId, - String tenantId, - String vnfName, - MsoRequest msoRequest) throws VnfException { - - // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. - logger.debug("DeleteVNF command attempted but not supported"); - throw new VnfException ("DeleteVNF: Unsupported command", MsoExceptionCategory.USERDATA); + public void deleteVnf(String cloudSiteId, String cloudOwner, String tenantId, String vnfName, MsoRequest msoRequest) + throws VnfException { + + // This operation is no longer supported at the VNF level. The adapter is only called to deploy modules. + logger.debug("DeleteVNF command attempted but not supported"); + throw new VnfException("DeleteVNF: Unsupported command", MsoExceptionCategory.USERDATA); } /** - * This web service endpoint will rollback a previous Create VNF operation. - * A rollback object is returned to the client in a successful creation - * response. The client can pass that object as-is back to the rollbackVnf - * operation to undo the creation. + * This web service endpoint will rollback a previous Create VNF operation. A rollback object is returned to the + * client in a successful creation response. The client can pass that object as-is back to the rollbackVnf operation + * to undo the creation. * - * TODO: This should be rollbackVfModule and/or rollbackVolumeGroup, - * but APIs were apparently never updated. + * TODO: This should be rollbackVfModule and/or rollbackVolumeGroup, but APIs were apparently never updated. */ @Override - public void rollbackVnf (VnfRollback rollback) throws VnfException { - long startTime = System.currentTimeMillis (); - // rollback may be null (e.g. if stack already existed when Create was called) + public void rollbackVnf(VnfRollback rollback) throws VnfException { + long startTime = System.currentTimeMillis(); + // rollback may be null (e.g. if stack already existed when Create was called) if (rollback == null) { logger.info("{} {} {}", MessageEnum.RA_ROLLBACK_NULL.toString(), "OpenStack", "rollbackVnf"); return; @@ -310,130 +266,127 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { } // Get the elements of the VnfRollback object for easier access - String cloudSiteId = rollback.getCloudSiteId (); - String tenantId = rollback.getTenantId (); - CloudInfo cloudInfo = new CloudInfo (cloudSiteId, tenantId, null); + String cloudSiteId = rollback.getCloudSiteId(); + String cloudOwner = rollback.getCloudOwner(); + String tenantId = rollback.getTenantId(); + CloudInfo cloudInfo = new CloudInfo(cloudSiteId, cloudOwner, tenantId, null); - String vfModuleId = rollback.getVfModuleStackId (); + String vfModuleId = rollback.getVfModuleStackId(); - logger.debug("Rolling Back VF Module " + vfModuleId + " in " + cloudSiteId + "/" + tenantId); + logger.debug("Rolling Back VF Module " + vfModuleId + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId); - VduInstance vduInstance = null; + VduInstance vduInstance = null; // Use the VduPlugin to delete the VF Module. - VduPlugin vduPlugin = getVduPlugin(cloudSiteId); + VduPlugin vduPlugin = getVduPlugin(cloudSiteId, cloudOwner); - long subStartTime = System.currentTimeMillis (); + long subStartTime = System.currentTimeMillis(); try { - // TODO: Get a reasonable timeout. Use a global property, or store the creation timeout in rollback object and use that. + // TODO: Get a reasonable timeout. Use a global property, or store the creation timeout in rollback object + // and use that. vduInstance = vduPlugin.deleteVdu(cloudInfo, vfModuleId, 5); logger.debug("Rolled back VDU instantiation: {}", vduInstance.getVduInstanceId()); - } - catch (VduException ve) { + } catch (VduException ve) { // Failed to rollback the VF Module due to a plugin exception. // Convert to a generic VnfException - ve.addContext ("RollbackVFModule"); - String error = "Rollback VF Module: " + vfModuleId + " in " + cloudSiteId + "/" + tenantId + ": " + ve; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vfModuleId, cloudSiteId, - tenantId, "VDU", "DeleteVdu", ErrorCode.DataError.getValue(), "Exception - DeleteVdu", ve); + ve.addContext("RollbackVFModule"); + String error = "Rollback VF Module: " + vfModuleId + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + ve; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vfModuleId, cloudOwner, + cloudSiteId, tenantId, "VDU", "DeleteVdu", ErrorCode.DataError.getValue(), "Exception - DeleteVdu", + ve); logger.debug(error); - throw new VnfException (ve); + throw new VnfException(ve); } return; } - private VnfStatus vduStatusToVnfStatus (VduInstance vdu) { - // Determine the status based on last action & status - // DeploymentInfo object should be enhanced to report a better status internally. - VduStatus vduStatus = vdu.getStatus(); - VduStateType status = vduStatus.getState(); - - if (status == null) { - return VnfStatus.UNKNOWN; - } - else if (status == VduStateType.NOTFOUND) { - return VnfStatus.NOTFOUND; - } - else if (status == VduStateType.INSTANTIATED) { - return VnfStatus.ACTIVE; - } - else if (status == VduStateType.FAILED) { - return VnfStatus.FAILED; - } - - return VnfStatus.UNKNOWN; + private VnfStatus vduStatusToVnfStatus(VduInstance vdu) { + // Determine the status based on last action & status + // DeploymentInfo object should be enhanced to report a better status internally. + VduStatus vduStatus = vdu.getStatus(); + VduStateType status = vduStatus.getState(); + + if (status == null) { + return VnfStatus.UNKNOWN; + } else if (status == VduStateType.NOTFOUND) { + return VnfStatus.NOTFOUND; + } else if (status == VduStateType.INSTANTIATED) { + return VnfStatus.ACTIVE; + } else if (status == VduStateType.FAILED) { + return VnfStatus.FAILED; + } + + return VnfStatus.UNKNOWN; } - /* - * Normalize an input value to an Object, based on the target parameter type. - * If the type is not recognized, it will just be returned unchanged (as a string). - */ - private Object convertInputValue (Object inputValue, HeatTemplateParam templateParam) - { - String type = templateParam.getParamType(); - logger.debug("Parameter: {} is of type ", templateParam.getParamName(), type); - - if (type.equalsIgnoreCase("number")) { - try { - return Integer.valueOf(inputValue.toString()); - } - catch (Exception e) { - logger.debug("Unable to convert " + inputValue + " to an integer!" , e); - return null; - } - } else if (type.equalsIgnoreCase("json")) { - try { - JsonNode jsonNode = JSON_MAPPER.readTree(JSON_MAPPER.writeValueAsString(inputValue)); - return jsonNode; - } - catch (Exception e) { - logger.debug("Unable to convert " + inputValue + " to a JsonNode!", e); - return null; - } - } else if (type.equalsIgnoreCase("boolean")) { - return new Boolean(inputValue.toString()); - } - - // Nothing else matched. Return the original string - return inputValue; - } - - private Map <String, String> copyStringOutputs (Map <String, Object> stackOutputs) { - Map <String, String> stringOutputs = new HashMap <String, String> (); - for (String key : stackOutputs.keySet ()) { - if (stackOutputs.get (key) instanceof String) { - stringOutputs.put (key, (String) stackOutputs.get (key)); - } else if (stackOutputs.get(key) instanceof Integer) { - try { - String str = "" + stackOutputs.get(key); - stringOutputs.put(key, str); - } catch (Exception e) { - logger.debug("Unable to add " + key + " to outputs", e); - } + /* + * Normalize an input value to an Object, based on the target parameter type. If the type is not recognized, it will + * just be returned unchanged (as a string). + */ + private Object convertInputValue(Object inputValue, HeatTemplateParam templateParam) { + String type = templateParam.getParamType(); + logger.debug("Parameter: {} is of type ", templateParam.getParamName(), type); + + if (type.equalsIgnoreCase("number")) { + try { + return Integer.valueOf(inputValue.toString()); + } catch (Exception e) { + logger.debug("Unable to convert " + inputValue + " to an integer!", e); + return null; + } + } else if (type.equalsIgnoreCase("json")) { + try { + JsonNode jsonNode = JSON_MAPPER.readTree(JSON_MAPPER.writeValueAsString(inputValue)); + return jsonNode; + } catch (Exception e) { + logger.debug("Unable to convert " + inputValue + " to a JsonNode!", e); + return null; + } + } else if (type.equalsIgnoreCase("boolean")) { + return new Boolean(inputValue.toString()); + } + + // Nothing else matched. Return the original string + return inputValue; + } + + private Map<String, String> copyStringOutputs(Map<String, Object> stackOutputs) { + Map<String, String> stringOutputs = new HashMap<String, String>(); + for (String key : stackOutputs.keySet()) { + if (stackOutputs.get(key) instanceof String) { + stringOutputs.put(key, (String) stackOutputs.get(key)); + } else if (stackOutputs.get(key) instanceof Integer) { + try { + String str = "" + stackOutputs.get(key); + stringOutputs.put(key, str); + } catch (Exception e) { + logger.debug("Unable to add {} to outputs", key, e); + } } else if (stackOutputs.get(key) instanceof JsonNode) { - try { - String str = this.convertNode((JsonNode) stackOutputs.get(key)); - stringOutputs.put(key, str); - } catch (Exception e) { - logger.debug("Unable to add " + key + " to outputs - exception converting JsonNode", e); - } + try { + String str = this.convertNode((JsonNode) stackOutputs.get(key)); + stringOutputs.put(key, str); + } catch (Exception e) { + logger.debug("Unable to add {} to outputs - exception converting JsonNode", key, e); + } } else if (stackOutputs.get(key) instanceof java.util.LinkedHashMap) { - try { - String str = JSON_MAPPER.writeValueAsString(stackOutputs.get(key)); - stringOutputs.put(key, str); - } catch (Exception e) { - logger.debug("Unable to add " + key + " to outputs - exception converting LinkedHashMap", e); - } + try { + String str = JSON_MAPPER.writeValueAsString(stackOutputs.get(key)); + stringOutputs.put(key, str); + } catch (Exception e) { + logger.debug("Unable to add {} to outputs - exception converting LinkedHashMap", key, e); + } } else { - try { - String str = stackOutputs.get(key).toString(); - stringOutputs.put(key, str); - } catch (Exception e) { - logger - .debug("Unable to add " + key + " to outputs - unable to call .toString() " + e.getMessage(), e); - } + try { + String str = stackOutputs.get(key).toString(); + stringOutputs.put(key, str); + } catch (Exception e) { + logger.debug("Unable to add " + key + " to outputs - unable to call .toString() " + e.getMessage(), + e); + } } } return stringOutputs; @@ -441,43 +394,41 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { private void sendMapToDebug(Map<String, Object> inputs, String optionalName) { - int i = 0; - StringBuilder sb = new StringBuilder(optionalName == null ? "\ninputs" : "\n" + optionalName); - if (inputs == null) { - sb.append("\tNULL"); - } - else if (inputs.size() < 1) { - sb.append("\tEMPTY"); - } else { - for (String str : inputs.keySet()) { - String outputString; - try { - outputString = inputs.get(str).toString(); - } catch (Exception e) { - outputString = "Unable to call toString() on the value for " + str; - } - sb.append("\t\nitem " + i++ + ": '" + str + "'='" + outputString + "'"); - } - } - logger.debug(sb.toString()); - return; + int i = 0; + StringBuilder sb = new StringBuilder(optionalName == null ? "\ninputs" : "\n" + optionalName); + if (inputs == null) { + sb.append("\tNULL"); + } else if (inputs.size() < 1) { + sb.append("\tEMPTY"); + } else { + for (String str : inputs.keySet()) { + String outputString; + try { + outputString = inputs.get(str).toString(); + } catch (Exception e) { + outputString = "Unable to call toString() on the value for " + str; + } + sb.append("\t\nitem " + i++ + ": '" + str + "'='" + outputString + "'"); + } + } + logger.debug(sb.toString()); + return; } private void sendMapToDebug(Map<String, Object> inputs) { - int i = 0; - StringBuilder sb = new StringBuilder("inputs:"); - if (inputs == null) { - sb.append("\tNULL"); - } - else if (inputs.size() < 1) { - sb.append("\tEMPTY"); - } else { - for (String str : inputs.keySet()) { - sb.append("\titem " + i++ + ": " + str + "=" + inputs.get(str)); - } - } - logger.debug(sb.toString()); - return; + int i = 0; + StringBuilder sb = new StringBuilder("inputs:"); + if (inputs == null) { + sb.append("\tNULL"); + } else if (inputs.size() < 1) { + sb.append("\tEMPTY"); + } else { + for (String str : inputs.keySet()) { + sb.append("\titem " + i++ + ": " + str + "=" + inputs.get(str)); + } + } + logger.debug(sb.toString()); + return; } private String convertNode(final JsonNode node) { @@ -503,15 +454,15 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { Object obj = objectMap.get(key); if (obj instanceof String) { stringMap.put(key, (String) objectMap.get(key)); - } else if (obj instanceof JsonNode ){ + } else if (obj instanceof JsonNode) { // This is a bit of mess - but I think it's the least impacting // let's convert it BACK to a string - then it will get converted back later try { String str = this.convertNode((JsonNode) obj); stringMap.put(key, str); } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value for JsonNode "+ key, e); - //okay in this instance - only string values (fqdn) are expected to be needed + logger.debug("DANGER WILL ROBINSON: unable to convert value for JsonNode " + key, e); + // okay in this instance - only string values (fqdn) are expected to be needed } } else if (obj instanceof java.util.LinkedHashMap) { logger.debug("LinkedHashMap - this is showing up as a LinkedHashMap instead of JsonNode"); @@ -519,21 +470,23 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { String str = JSON_MAPPER.writeValueAsString(obj); stringMap.put(key, str); } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value for LinkedHashMap "+ key, e); - } - } else if (obj instanceof Integer) { - try { - String str = "" + obj; - stringMap.put(key, str); - } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value for Integer "+ key, e); + logger.debug("DANGER WILL ROBINSON: unable to convert value for LinkedHashMap " + key, e); + } + } else if (obj instanceof Integer) { + try { + String str = "" + obj; + stringMap.put(key, str); + } catch (Exception e) { + logger.debug("DANGER WILL ROBINSON: unable to convert value for Integer " + key, e); } } else { try { - String str = obj.toString(); + String str = obj.toString(); stringMap.put(key, str); } catch (Exception e) { - logger.debug("DANGER WILL ROBINSON: unable to convert value "+ key + " (" + e.getMessage() + ")", e); + logger.debug( + "DANGER WILL ROBINSON: unable to convert value " + key + " (" + e.getMessage() + ")", + e); } } } @@ -543,43 +496,37 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { } /** - * This is the "Create VF Module" web service implementation. - * It will instantiate a new VF Module of the requested type in the specified cloud - * and tenant. The tenant must exist before this service is called. + * This is the "Create VF Module" web service implementation. It will instantiate a new VF Module of the requested + * type in the specified cloud and tenant. The tenant must exist before this service is called. * - * If a VF Module with the same name already exists, this can be considered a - * success or failure, depending on the value of the 'failIfExists' parameter. + * If a VF Module with the same name already exists, this can be considered a success or failure, depending on the + * value of the 'failIfExists' parameter. * - * All VF Modules are defined in the MSO catalog. The caller must request one of - * the pre-defined module types or an error will be returned. Within the catalog, - * each VF Module references (among other things) a collection of artifacts that - * are used to deploy the required cloud resources (VMs, networks, etc.). + * All VF Modules are defined in the MSO catalog. The caller must request one of the pre-defined module types or an + * error will be returned. Within the catalog, each VF Module references (among other things) a collection of + * artifacts that are used to deploy the required cloud resources (VMs, networks, etc.). * - * Depending on the module templates, a variable set of input parameters will - * be defined, some of which are required. The caller is responsible to - * pass the necessary input data for the module or an error will be thrown. + * Depending on the module templates, a variable set of input parameters will be defined, some of which are + * required. The caller is responsible to pass the necessary input data for the module or an error will be thrown. * - * The method returns the vfModuleId, a Map of output attributes, and a VnfRollback - * object. This last object can be passed as-is to the rollbackVnf operation to - * undo everything that was created for the Module. This is useful if a VF module - * is successfully created but the orchestration fails on a subsequent step. + * The method returns the vfModuleId, a Map of output attributes, and a VnfRollback object. This last object can be + * passed as-is to the rollbackVnf operation to undo everything that was created for the Module. This is useful if a + * VF module is successfully created but the orchestration fails on a subsequent step. * * @param cloudSiteId CLLI code of the cloud site in which to create the VNF + * @param cloudOwner cloud owner of the cloud site in which to create the VNF * @param tenantId Openstack tenant identifier - * @param vfModuleType VF Module type key, should match a VNF definition in catalog DB. - * Deprecated - should use modelCustomizationUuid - * @param vnfVersion VNF version key, should match a VNF definition in catalog DB - * Deprecated - VF Module versions also captured by modelCustomizationUuid + * @param vfModuleType VF Module type key, should match a VNF definition in catalog DB. Deprecated - should use + * modelCustomizationUuid + * @param vnfVersion VNF version key, should match a VNF definition in catalog DB Deprecated - VF Module versions + * also captured by modelCustomizationUuid * @param vnfId - VNF ID * @param vfModuleName Name to be assigned to the new VF Module * @param vfModuleId Id fo the new VF Module * @param requestType Indicates if this is a Volume Group or Module request - * @param volumeGroupId Identifier (i.e. deployment ID) for a Volume Group - * to attach to a VF Module - * @param baseVfModuleId Identifier (i.e. deployment ID) of the Base Module if - * this is an Add-on module - * @param modelCustomizationUuid Unique ID for the VF Module's model. Replaces - * the use of vfModuleType. + * @param volumeGroupId Identifier (i.e. deployment ID) for a Volume Group to attach to a VF Module + * @param baseVfModuleId Identifier (i.e. deployment ID) of the Base Module if this is an Add-on module + * @param modelCustomizationUuid Unique ID for the VF Module's model. Replaces the use of vfModuleType. * @param inputs Map of key=value inputs for VNF stack creation * @param failIfExists Flag whether already existing VNF should be considered * @param backout Flag whether to suppress automatic backout (for testing) @@ -589,184 +536,168 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { * @param rollback Holder for returning VnfRollback object */ @Override - public void createVfModule(String cloudSiteId, - String tenantId, - String vfModuleType, - String vnfVersion, - String genericVnfId, - String vfModuleName, - String vfModuleId, - String requestType, - String volumeGroupId, - String baseVfModuleId, - String modelCustomizationUuid, - Map <String, Object> inputs, - Boolean failIfExists, - Boolean backout, - Boolean enableBridge, - MsoRequest msoRequest, - Holder <String> vnfId, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) - throws VnfException - { + public void createVfModule(String cloudSiteId, String cloudOwner, String tenantId, String vfModuleType, + String vnfVersion, String genericVnfId, String vfModuleName, String vfModuleId, String requestType, + String volumeGroupId, String baseVfModuleId, String modelCustomizationUuid, Map<String, Object> inputs, + Boolean failIfExists, Boolean backout, Boolean enableBridge, MsoRequest msoRequest, Holder<String> vnfId, + Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) throws VnfException { // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); - // Require a model customization ID. Every VF Module definition must have one. - if (modelCustomizationUuid == null || modelCustomizationUuid.isEmpty()) { + // Require a model customization ID. Every VF Module definition must have one. + if (modelCustomizationUuid == null || modelCustomizationUuid.isEmpty()) { logger.debug("Missing required input: modelCustomizationUuid"); String error = "Create vfModule error: Missing required input: modelCustomizationUuid"; logger.error("{} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), - "VF Module ModelCustomizationUuid", "VDU", ErrorCode.DataError, - "Create VF Module: " + "Missing required input: modelCustomizationUuid"); + "VF Module ModelCustomizationUuid", "VDU", ErrorCode.DataError, + "Create VF Module: " + "Missing required input: modelCustomizationUuid"); logger.debug(error); throw new VnfException(error, MsoExceptionCategory.USERDATA); } // Clean up some inputs to make comparisons easier if (requestType == null) - requestType = ""; + requestType = ""; if ("".equals(volumeGroupId) || "null".equals(volumeGroupId)) - volumeGroupId = null; + volumeGroupId = null; if ("".equals(baseVfModuleId) || "null".equals(baseVfModuleId)) - baseVfModuleId = null; + baseVfModuleId = null; if (inputs == null) { - // Create an empty set of inputs - inputs = new HashMap<>(); - logger.debug("inputs == null - setting to empty"); + // Create an empty set of inputs + inputs = new HashMap<>(); + logger.debug("inputs == null - setting to empty"); } else { - this.sendMapToDebug(inputs); + this.sendMapToDebug(inputs); } // Check if this is for a "Volume" module boolean isVolumeRequest = false; if (requestType.startsWith("VOLUME")) { - isVolumeRequest = true; + isVolumeRequest = true; } - logger.debug("requestType = " + requestType + ", volumeGroupStackId = " + volumeGroupId + ", baseStackId = " + - baseVfModuleId); + logger.debug("requestType = " + requestType + ", volumeGroupStackId = " + volumeGroupId + ", baseStackId = " + + baseVfModuleId); // Build a default rollback object (no actions performed) VnfRollback vfRollback = new VnfRollback(); vfRollback.setCloudSiteId(cloudSiteId); + vfRollback.setCloudOwner(cloudOwner); vfRollback.setTenantId(tenantId); vfRollback.setMsoRequest(msoRequest); vfRollback.setRequestType(requestType); - vfRollback.setIsBase(false); // Until we know better + vfRollback.setIsBase(false); // Until we know better vfRollback.setVolumeGroupHeatStackId(volumeGroupId); vfRollback.setBaseGroupHeatStackId(baseVfModuleId); vfRollback.setModelCustomizationUuid(modelCustomizationUuid); vfRollback.setMode("CFY"); - rollback.value = vfRollback; // Default rollback - no updates performed + rollback.value = vfRollback; // Default rollback - no updates performed // Get the VNF/VF Module definition from the Catalog DB first. - // There are three relevant records: VfModule, VfModuleCustomization, VnfResource + // There are three relevant records: VfModule, VfModuleCustomization, VnfResource VfModule vfModule = null; - VnfResource vnfResource = null; - VfModuleCustomization vfModuleCust = null; + VnfResource vnfResource = null; + VfModuleCustomization vfModuleCust = null; try { - vfModuleCust = vfModuleCustomRepo.findByModelCustomizationUUID(modelCustomizationUuid); + vfModuleCust = + vfModuleCustomRepo.findFirstByModelCustomizationUUIDOrderByCreatedDesc(modelCustomizationUuid); if (vfModuleCust == null) { String error = "Create vfModule error: Unable to find vfModuleCust with modelCustomizationUuid=" - + modelCustomizationUuid; + + modelCustomizationUuid; logger.debug(error); logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), - "VF Module ModelCustomizationUuid", modelCustomizationUuid, "CatalogDb", - ErrorCode.DataError, error); + "VF Module ModelCustomizationUuid", modelCustomizationUuid, "CatalogDb", ErrorCode.DataError, + error); throw new VnfException(error, MsoExceptionCategory.USERDATA); } else { logger.debug("Found vfModuleCust entry {}", vfModuleCust.toString()); } // Get the vfModule and vnfResource records - vfModule = vfModuleCust.getVfModule(); - vnfResource = vfModuleCust.getVfModule().getVnfResources(); - } - catch (Exception e) { + vfModule = vfModuleCust.getVfModule(); + vnfResource = vfModuleCust.getVfModule().getVnfResources(); + } catch (Exception e) { - logger.debug("unhandled exception in create VF - [Query]" + e.getMessage()); - throw new VnfException("Exception during create VF " + e.getMessage()); + logger.debug("unhandled exception in create VF - [Query]" + e.getMessage()); + throw new VnfException("Exception during create VF " + e.getMessage()); } - // Perform a version check against cloudSite + // Perform a version check against cloudSite // Obtain the cloud site information where we will create the VF Module - Optional<CloudSite> cloudSiteOp = cloudConfig.getCloudSite (cloudSiteId); + Optional<CloudSite> cloudSiteOp = cloudConfig.getCloudSite(cloudSiteId); if (!cloudSiteOp.isPresent()) { - throw new VnfException (new MsoCloudSiteNotFound (cloudSiteId)); - } - CloudSite cloudSite = cloudSiteOp.get(); - MavenLikeVersioning aicV = new MavenLikeVersioning(); - aicV.setVersion(cloudSite.getCloudVersion()); - Boolean usingMulticloud = getUsingMulticloud(cloudSite); + // If cloudSiteId is not present in the catalog DB, then default to multicloud + logger.debug("{} is not present in cloud_site catalog DB, defaulting to Multicloud plugin adapter", + cloudSiteId); + } else { + CloudSite cloudSite = cloudSiteOp.get(); + MavenLikeVersioning aicV = new MavenLikeVersioning(); + aicV.setVersion(cloudSite.getCloudVersion()); - String vnfMin = vnfResource.getAicVersionMin(); - String vnfMax = vnfResource.getAicVersionMax(); + String vnfMin = vnfResource.getAicVersionMin(); + String vnfMax = vnfResource.getAicVersionMax(); - if ((vnfMin != null && !(aicV.isMoreRecentThan(vnfMin) || aicV.isTheSameVersion(vnfMin))) || (vnfMax != null - && aicV.isMoreRecentThan(vnfMax))) { - // ERROR - String error = - "VNF Resource type: " + vnfResource.getModelName() + ", ModelUuid=" + vnfResource.getModelUUID() - + " VersionMin=" + vnfMin + " VersionMax:" + vnfMax + " NOT supported on Cloud: " + cloudSiteId - + " with AIC_Version:" + cloudSite.getCloudVersion(); - logger.error("{} {} {} {} {}", MessageEnum.RA_CONFIG_EXC.toString(), error, "OpenStack", - ErrorCode.BusinessProcesssError.getValue(), "Exception - setVersion"); - logger.debug(error); - throw new VnfException(error, MsoExceptionCategory.USERDATA); + if ((vnfMin != null && !(aicV.isMoreRecentThan(vnfMin) || aicV.isTheSameVersion(vnfMin))) + || (vnfMax != null && aicV.isMoreRecentThan(vnfMax))) { + // ERROR + String error = + "VNF Resource type: " + vnfResource.getModelName() + ", ModelUuid=" + vnfResource.getModelUUID() + + " VersionMin=" + vnfMin + " VersionMax:" + vnfMax + " NOT supported on Cloud: " + + cloudSiteId + " with AIC_Version:" + cloudSite.getCloudVersion(); + logger.error("{} {} {} {} {}", MessageEnum.RA_CONFIG_EXC.toString(), error, "OpenStack", + ErrorCode.BusinessProcesssError.getValue(), "Exception - setVersion"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } } // End Version check VduInstance vduInstance = null; - CloudInfo cloudInfo = new CloudInfo (cloudSiteId, tenantId, null); + CloudInfo cloudInfo = new CloudInfo(cloudSiteId, cloudOwner, tenantId, null); // Use the VduPlugin. - VduPlugin vduPlugin = getVduPlugin(cloudSiteId); + VduPlugin vduPlugin = getVduPlugin(cloudSiteId, cloudOwner); - // First, look up to see if the VF already exists, unless using multicloud adapter - - long subStartTime1 = System.currentTimeMillis (); - if (!usingMulticloud) { - try { - vduInstance = vduPlugin.queryVdu (cloudInfo, vfModuleName); - } - catch (VduException me) { - // Failed to query the VDU due to a plugin exception. - String error = "Create VF Module: Query " + vfModuleName + " in " + cloudSiteId + "/" + tenantId + ": " + me ; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, - cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), + long subStartTime1 = System.currentTimeMillis(); + try { + vduInstance = vduPlugin.queryVdu(cloudInfo, vfModuleName); + } catch (VduException me) { + // Failed to query the VDU due to a plugin exception. + String error = "Create VF Module: Query " + vfModuleName + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), "Exception - queryVdu", me); - logger.debug(error); - // Convert to a generic VnfException - me.addContext ("CreateVFModule"); - throw new VnfException (me); - } + logger.debug(error); + // Convert to a generic VnfException + me.addContext("CreateVFModule"); + throw new VnfException(me); } // More precise handling/messaging if the Module already exists if (vduInstance != null && !(vduInstance.getStatus().getState() == VduStateType.NOTFOUND)) { - VduStateType status = vduInstance.getStatus().getState(); + VduStateType status = vduInstance.getStatus().getState(); logger.debug("Found Existing VDU, status=" + status); if (status == VduStateType.INSTANTIATED) { if (failIfExists != null && failIfExists) { // fail - it exists - String error = - "Create VF: Deployment " + vfModuleName + " already exists in " + cloudSiteId + "/" + tenantId; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), - "VF Module " + vfModuleName + " already exists"); + String error = "Create VF: Deployment " + vfModuleName + " already exists in " + cloudOwner + "/" + + cloudSiteId + "/" + tenantId; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), + vfModuleName, cloudOwner, cloudSiteId, tenantId, "VDU", "queryVdu", + ErrorCode.DataError.getValue(), "VF Module " + vfModuleName + " already exists"); logger.debug(error); - throw new VnfAlreadyExists(vfModuleName, cloudSiteId, tenantId, vduInstance.getVduInstanceId()); + throw new VnfAlreadyExists(vfModuleName, cloudSiteId, cloudOwner, tenantId, + vduInstance.getVduInstanceId()); } else { // Found existing deployment and client has not requested "failIfExists". // Populate the outputs from the existing deployment. @@ -778,46 +709,49 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { } // Check through various detailed error cases else if (status == VduStateType.INSTANTIATING || status == VduStateType.DELETING - || status == VduStateType.UPDATING) { + || status == VduStateType.UPDATING) { // fail - it's in progress - return meaningful error - String error = - "Create VF: Deployment " + vfModuleName + " already exists and has status " + status.toString() - + " in " + cloudSiteId + "/" + tenantId + "; please wait for it to complete, or fix manually."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), - "VF Module " + vfModuleName + " already exists"); + String error = "Create VF: Deployment " + vfModuleName + " already exists and has status " + + status.toString() + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + "; please wait for it to complete, or fix manually."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), + "VF Module " + vfModuleName + " already exists"); logger.debug(error); - throw new VnfAlreadyExists(vfModuleName, cloudSiteId, tenantId, vduInstance.getVduInstanceId()); + throw new VnfAlreadyExists(vfModuleName, cloudSiteId, cloudOwner, tenantId, + vduInstance.getVduInstanceId()); } else if (status == VduStateType.FAILED) { // fail - it exists and is in a FAILED state - String error = - "Create VF: Deployment " + vfModuleName + " already exists and is in FAILED state in " + cloudSiteId - + "/" + tenantId + "; requires manual intervention."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), - "VF Module " + vfModuleName + " already exists and is in FAILED state"); + String error = "Create VF: Deployment " + vfModuleName + " already exists and is in FAILED state in " + + cloudOwner + "/" + cloudSiteId + "/" + tenantId + "; requires manual intervention."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), + "VF Module " + vfModuleName + " already exists and is in FAILED state"); logger.debug(error); - throw new VnfAlreadyExists(vfModuleName, cloudSiteId, tenantId, vduInstance.getVduInstanceId()); + throw new VnfAlreadyExists(vfModuleName, cloudSiteId, cloudOwner, tenantId, + vduInstance.getVduInstanceId()); } else if (status == VduStateType.UNKNOWN) { // fail - it exists and is in a UNKNOWN state - String error = - "Create VF: Deployment " + vfModuleName + " already exists and has status " + status.toString() - + " in " + cloudSiteId + "/" + tenantId + "; requires manual intervention."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), - "VF Module " + vfModuleName + " already exists and is in " + status.toString() + " state"); + String error = "Create VF: Deployment " + vfModuleName + " already exists and has status " + + status.toString() + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + "; requires manual intervention."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), + "VF Module " + vfModuleName + " already exists and is in " + status.toString() + " state"); logger.debug(error); - throw new VnfAlreadyExists(vfModuleName, cloudSiteId, tenantId, vduInstance.getVduInstanceId()); + throw new VnfAlreadyExists(vfModuleName, cloudSiteId, cloudOwner, tenantId, + vduInstance.getVduInstanceId()); } else { // Unexpected, since all known status values have been tested for - String error = - "Create VF: Deployment " + vfModuleName + " already exists with unexpected status " + status - .toString() + " in " + cloudSiteId + "/" + tenantId + "; requires manual intervention."; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, - cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), - "VF Module " + vfModuleName + " already exists and is in an unknown state"); + String error = "Create VF: Deployment " + vfModuleName + " already exists with unexpected status " + + status.toString() + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + "; requires manual intervention."; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_VNF_ALREADY_EXIST.toString(), vfModuleName, + cloudOwner, cloudSiteId, tenantId, "VDU", "queryVdu", ErrorCode.DataError.getValue(), + "VF Module " + vfModuleName + " already exists and is in an unknown state"); logger.debug(error); - throw new VnfAlreadyExists(vfModuleName, cloudSiteId, tenantId, vduInstance.getVduInstanceId()); + throw new VnfAlreadyExists(vfModuleName, cloudSiteId, cloudOwner, tenantId, + vduInstance.getVduInstanceId()); } } @@ -827,42 +761,43 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { Map<String, Object> volumeGroupOutputs = null; // If a Volume Group was provided, query its outputs for inclusion in Module input parameters - if (!usingMulticloud && volumeGroupId != null) { - long subStartTime2 = System.currentTimeMillis (); + if (volumeGroupId != null) { + long subStartTime2 = System.currentTimeMillis(); VduInstance volumeVdu = null; try { - volumeVdu = vduPlugin.queryVdu (cloudInfo, volumeGroupId); - } - catch (VduException me) { + volumeVdu = vduPlugin.queryVdu(cloudInfo, volumeGroupId); + } catch (VduException me) { // Failed to query the Volume Group VDU due to a plugin exception. - String error = "Create VF Module: Query Volume Group " + volumeGroupId + " in " + cloudSiteId + "/" + tenantId + ": " + me ; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), volumeGroupId, - cloudSiteId, tenantId, "VDU", "queryVdu(volume)", ErrorCode.DataError.getValue(), - "Exception - queryVdu(volume)", me); + String error = "Create VF Module: Query Volume Group " + volumeGroupId + " in " + cloudOwner + "/" + + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), volumeGroupId, + cloudOwner, cloudSiteId, tenantId, "VDU", "queryVdu(volume)", ErrorCode.DataError.getValue(), + "Exception - queryVdu(volume)", me); logger.debug(error); // Convert to a generic VnfException - me.addContext ("CreateVFModule(QueryVolume)"); - throw new VnfException (me); + me.addContext("CreateVFModule(QueryVolume)"); + throw new VnfException(me); } - if (volumeVdu == null || volumeVdu.getStatus().getState() == VduStateType.NOTFOUND) { - String error = "Create VFModule: Attached Volume Group DOES NOT EXIST " + volumeGroupId + " in " + cloudSiteId + "/" + tenantId + " USER ERROR" ; - logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), volumeGroupId, - cloudSiteId, tenantId, error, "VDU", "queryVdu(volume)", - ErrorCode.BusinessProcesssError.getValue(), - "Create VFModule: Attached Volume Group " + "DOES NOT EXIST"); - logger.debug(error); - throw new VnfException (error, MsoExceptionCategory.USERDATA); - } else { - logger.debug("Found nested volume group"); - volumeGroupOutputs = volumeVdu.getOutputs(); - this.sendMapToDebug(volumeGroupOutputs, "volumeGroupOutputs"); - } + if (volumeVdu == null || volumeVdu.getStatus().getState() == VduStateType.NOTFOUND) { + String error = "Create VFModule: Attached Volume Group DOES NOT EXIST " + volumeGroupId + " in " + + cloudOwner + "/" + cloudSiteId + "/" + tenantId + " USER ERROR"; + logger.error("{} {} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), volumeGroupId, + cloudOwner, cloudSiteId, tenantId, error, "VDU", "queryVdu(volume)", + ErrorCode.BusinessProcesssError.getValue(), + "Create VFModule: Attached Volume Group " + "DOES NOT EXIST"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } else { + logger.debug("Found nested volume group"); + volumeGroupOutputs = volumeVdu.getOutputs(); + this.sendMapToDebug(volumeGroupOutputs, "volumeGroupOutputs"); + } } // If this is an Add-On Module, query the Base Module outputs // Note: This will be performed whether or not the current request is for an - // Add-On Volume Group or Add-On VF Module + // Add-On Volume Group or Add-On VF Module if (vfModule.getIsBase()) { logger.debug("This is a BASE Module request"); @@ -876,33 +811,30 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { logger.debug("WARNING: Add-on Module request - no Base Module ID provided"); } - // Need to verify if multicloud needs to have the vaseVfModuleId passed to it. Ignoring this for now. - if (!usingMulticloud && baseVfModuleId != null) { - long subStartTime2 = System.currentTimeMillis (); - VduInstance baseVdu = null; - try { - baseVdu = vduPlugin.queryVdu (cloudInfo, baseVfModuleId); - } - catch (MsoException me) { - // Failed to query the Base VF Module due to a Vdu Plugin exception. - String error = "Create VF Module: Query Base " + baseVfModuleId + " in " + cloudSiteId + "/" + tenantId + ": " + me ; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), baseVfModuleId, - cloudSiteId, tenantId, "VDU", "queryVdu(Base)", ErrorCode.DataError.getValue(), - "Exception - queryVdu(Base)", me); - logger.debug(error); - // Convert to a generic VnfException - me.addContext ("CreateVFModule(QueryBase)"); - throw new VnfException (me); - } + if (baseVfModuleId != null) { + long subStartTime2 = System.currentTimeMillis(); + VduInstance baseVdu = null; + try { + baseVdu = vduPlugin.queryVdu(cloudInfo, baseVfModuleId); + } catch (MsoException me) { + // Failed to query the Base VF Module due to a Vdu Plugin exception. + String error = "Create VF Module: Query Base " + baseVfModuleId + " in " + cloudOwner + "/" + + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), baseVfModuleId, + cloudOwner, cloudSiteId, tenantId, "VDU", "queryVdu(Base)", ErrorCode.DataError.getValue(), + "Exception - queryVdu(Base)", me); + logger.debug(error); + // Convert to a generic VnfException + me.addContext("CreateVFModule(QueryBase)"); + throw new VnfException(me); + } if (baseVdu == null || baseVdu.getStatus().getState() == VduStateType.NOTFOUND) { - String error = - "Create VFModule: Base Module DOES NOT EXIST " + baseVfModuleId + " in " + cloudSiteId + "/" - + tenantId + " USER ERROR"; - logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), baseVfModuleId, - cloudSiteId, tenantId, error, "VDU", "queryVdu(Base)", - ErrorCode.BusinessProcesssError.getValue(), - "Create VFModule: Base Module DOES NOT EXIST"); + String error = "Create VFModule: Base Module DOES NOT EXIST " + baseVfModuleId + " in " + cloudOwner + + "/" + cloudSiteId + "/" + tenantId + " USER ERROR"; + logger.error("{} {} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), + baseVfModuleId, cloudOwner, cloudSiteId, tenantId, error, "VDU", "queryVdu(Base)", + ErrorCode.BusinessProcesssError.getValue(), "Create VFModule: Base Module DOES NOT EXIST"); logger.debug(error); throw new VnfException(error, MsoExceptionCategory.USERDATA); } else { @@ -914,37 +846,37 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { } - // NOTE: For this section, heatTemplate is used for all template artifacts. + // NOTE: For this section, heatTemplate is used for all template artifacts. // In final implementation (post-POC), the template object would either be generic or there would // be a separate DB Table/Object for different sub-orchestrators. - // NOTE: The template is fixed for the VF Module. The environment is part of the customization. + // NOTE: The template is fixed for the VF Module. The environment is part of the customization. HeatTemplate heatTemplate = null; HeatEnvironment heatEnvironment = null; if (isVolumeRequest) { - heatTemplate = vfModule.getVolumeHeatTemplate(); - heatEnvironment = vfModuleCust.getVolumeHeatEnv(); - } else { - heatTemplate = vfModule.getModuleHeatTemplate(); - heatEnvironment = vfModuleCust.getHeatEnvironment(); - } - - if (heatTemplate == null) { - String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + ", reqType=" - + requestType; - logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Template ID", vfModuleType, - "VNF", ErrorCode.DataError.getValue(), error); - logger.debug(error); - throw new VnfException(error, MsoExceptionCategory.INTERNAL); - } else { - logger.debug("Got HEAT Template from DB: " + heatTemplate.getHeatTemplate()); - } + heatTemplate = vfModule.getVolumeHeatTemplate(); + heatEnvironment = vfModuleCust.getVolumeHeatEnv(); + } else { + heatTemplate = vfModule.getModuleHeatTemplate(); + heatEnvironment = vfModuleCust.getHeatEnvironment(); + } + + if (heatTemplate == null) { + String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + + ", reqType=" + requestType; + logger.error("{} {} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Template ID", + vfModuleType, "VNF", ErrorCode.DataError.getValue(), error); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.INTERNAL); + } else { + logger.debug("Got HEAT Template from DB: " + heatTemplate.getHeatTemplate()); + } if (heatEnvironment == null) { String error = "Update VNF: undefined Heat Environment. VF=" + vfModuleType; logger.error("{} {} {} {} {}", MessageEnum.RA_VNF_UNKNOWN_PARAM.toString(), "Heat Environment ID", - "OpenStack", ErrorCode.DataError.getValue(), error); + "OpenStack", ErrorCode.DataError.getValue(), error); throw new VnfException(error, MsoExceptionCategory.INTERNAL); } else { logger.debug("Got Heat Environment from DB: " + heatEnvironment.getEnvironment()); @@ -952,154 +884,150 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { // Create the combined set of parameters from the incoming request, base-module outputs, - // volume-module outputs. Also, convert all variables to their native object types. + // volume-module outputs. Also, convert all variables to their native object types. - HashMap<String, Object> goldenInputs = new HashMap<String,Object>(); + HashMap<String, Object> goldenInputs = new HashMap<String, Object>(); List<String> extraInputs = new ArrayList<String>(); - Boolean skipInputChecks = false; - - if (skipInputChecks) { - goldenInputs = new HashMap<String,Object>(); - for (String key : inputs.keySet()) { - goldenInputs.put(key, inputs.get(key)); - } - } - else { - // Build maps for the parameters (including aliases) to simplify checks - HashMap<String, HeatTemplateParam> params = new HashMap<String, HeatTemplateParam>(); - - Set<HeatTemplateParam> paramSet = heatTemplate.getParameters(); - logger.debug("paramSet has " + paramSet.size() + " entries"); - - for (HeatTemplateParam htp : paramSet) { - params.put(htp.getParamName(), htp); - - // Include aliases. - String alias = htp.getParamAlias(); - if (alias != null && !alias.equals("") && !params.containsKey(alias)) { - params.put(alias, htp); - } - } - - // First, convert all inputs to their "template" type - for (String key : inputs.keySet()) { - if (params.containsKey(key)) { - Object value = convertInputValue(inputs.get(key), params.get(key)); - if (value != null) { - goldenInputs.put(key, value); - } - else { - logger.debug("Failed to convert input " + key + "='" + inputs.get(key) + "' to " + params.get(key) - .getParamType()); - } - } else { - extraInputs.add(key); - } - } - - if (!extraInputs.isEmpty()) { - // Add multicloud inputs - boolean multicloudInputs = false; - for (String key : MsoMulticloudUtils.MULTICLOUD_INPUTS) { - if (extraInputs.contains(key)) { - goldenInputs.put(key, inputs.get(key)); - extraInputs.remove(key); - multicloudInputs = true; - if (extraInputs.isEmpty()) { - break; - } - } - } - logger.debug("Ignoring extra inputs: " + extraInputs); - } - - // Next add in Volume Group Outputs if there are any. Copy directly without conversions. - if (volumeGroupOutputs != null && !volumeGroupOutputs.isEmpty()) { - for (String key : volumeGroupOutputs.keySet()) { - if (params.containsKey(key) && !goldenInputs.containsKey(key)) { - goldenInputs.put(key, volumeGroupOutputs.get(key)); - } - } - } - - // Next add in Base Module Outputs if there are any. Copy directly without conversions. - if (baseModuleOutputs != null && !baseModuleOutputs.isEmpty()) { - for (String key : baseModuleOutputs.keySet()) { - if (params.containsKey(key) && !goldenInputs.containsKey(key)) { - goldenInputs.put(key, baseModuleOutputs.get(key)); - } - } - } - - // TODO: The model should support a mechanism to pre-assign default parameter values - // per "customization" (i.e. usage) of a given module. In HEAT, this is specified by - // an Environment file. There is not a general mechanism in the model to handle this. - // For the general case, any such parameter/values can be added dynamically to the - // inputs (only if not already specified). + Boolean skipInputChecks = false; + + if (skipInputChecks) { + goldenInputs = new HashMap<String, Object>(); + for (String key : inputs.keySet()) { + goldenInputs.put(key, inputs.get(key)); + } + } else { + // Build maps for the parameters (including aliases) to simplify checks + HashMap<String, HeatTemplateParam> params = new HashMap<String, HeatTemplateParam>(); + + Set<HeatTemplateParam> paramSet = heatTemplate.getParameters(); + logger.debug("paramSet has " + paramSet.size() + " entries"); + + for (HeatTemplateParam htp : paramSet) { + params.put(htp.getParamName(), htp); + + // Include aliases. + String alias = htp.getParamAlias(); + if (alias != null && !alias.equals("") && !params.containsKey(alias)) { + params.put(alias, htp); + } + } + + // First, convert all inputs to their "template" type + for (String key : inputs.keySet()) { + if (params.containsKey(key)) { + Object value = convertInputValue(inputs.get(key), params.get(key)); + if (value != null) { + goldenInputs.put(key, value); + } else { + logger.debug("Failed to convert input " + key + "='" + inputs.get(key) + "' to " + + params.get(key).getParamType()); + } + } else { + extraInputs.add(key); + } + } + + if (!extraInputs.isEmpty()) { + // Add multicloud inputs + for (String key : MsoMulticloudUtils.MULTICLOUD_INPUTS) { + if (extraInputs.contains(key)) { + goldenInputs.put(key, inputs.get(key)); + extraInputs.remove(key); + if (extraInputs.isEmpty()) { + break; + } + } + } + logger.debug("Ignoring extra inputs: " + extraInputs); + } + + // Next add in Volume Group Outputs if there are any. Copy directly without conversions. + if (volumeGroupOutputs != null && !volumeGroupOutputs.isEmpty()) { + for (String key : volumeGroupOutputs.keySet()) { + if (params.containsKey(key) && !goldenInputs.containsKey(key)) { + goldenInputs.put(key, volumeGroupOutputs.get(key)); + } + } + } + + // Next add in Base Module Outputs if there are any. Copy directly without conversions. + if (baseModuleOutputs != null && !baseModuleOutputs.isEmpty()) { + for (String key : baseModuleOutputs.keySet()) { + if (params.containsKey(key) && !goldenInputs.containsKey(key)) { + goldenInputs.put(key, baseModuleOutputs.get(key)); + } + } + } + + // TODO: The model should support a mechanism to pre-assign default parameter values + // per "customization" (i.e. usage) of a given module. In HEAT, this is specified by + // an Environment file. There is not a general mechanism in the model to handle this. + // For the general case, any such parameter/values can be added dynamically to the + // inputs (only if not already specified). // Check that required parameters have been supplied from any of the sources String missingParams = null; boolean checkRequiredParameters = true; try { String propertyString = this.environment.getProperty(MsoVnfPluginAdapterImpl.CHECK_REQD_PARAMS); - if ("false".equalsIgnoreCase (propertyString) || "n".equalsIgnoreCase (propertyString)) { + if ("false".equalsIgnoreCase(propertyString) || "n".equalsIgnoreCase(propertyString)) { checkRequiredParameters = false; logger.debug("CheckRequiredParameters is FALSE. Will still check but then skip blocking..." - + MsoVnfPluginAdapterImpl.CHECK_REQD_PARAMS); + + MsoVnfPluginAdapterImpl.CHECK_REQD_PARAMS); } } catch (Exception e) { // No problem - default is true - logger.debug ("An exception occured trying to get property " + MsoVnfPluginAdapterImpl.CHECK_REQD_PARAMS, - e); + logger.debug("An exception occured trying to get property " + MsoVnfPluginAdapterImpl.CHECK_REQD_PARAMS, + e); } // Do the actual parameter checking. // Include looking at the ENV file as a valid definition of a parameter value. - // TODO: This handling of ENV applies only to Heat. A general mechanism to + // TODO: This handling of ENV applies only to Heat. A general mechanism to // support pre-set parameter/values does not yet exist in the model. // - StringBuilder sb = new StringBuilder(heatEnvironment.getEnvironment()); - MsoHeatEnvironmentEntry mhee = new MsoHeatEnvironmentEntry (sb); - for (HeatTemplateParam parm : heatTemplate.getParameters ()) { - if (parm.isRequired () && (!goldenInputs.containsKey (parm.getParamName ()))) { + StringBuilder sb = new StringBuilder(heatEnvironment.getEnvironment()); + MsoHeatEnvironmentEntry mhee = new MsoHeatEnvironmentEntry(sb); + for (HeatTemplateParam parm : heatTemplate.getParameters()) { + if (parm.isRequired() && (!goldenInputs.containsKey(parm.getParamName()))) { if (mhee != null && mhee.containsParameter(parm.getParamName())) { - logger.debug ("Required parameter " + parm.getParamName () - + " appears to be in environment - do not count as missing"); + logger.debug("Required parameter " + parm.getParamName() + + " appears to be in environment - do not count as missing"); } else { - logger.debug("adding to missing parameters list: " + parm.getParamName ()); - if (missingParams == null) { - missingParams = parm.getParamName (); - } else { - missingParams += "," + parm.getParamName (); - } + logger.debug("adding to missing parameters list: " + parm.getParamName()); + if (missingParams == null) { + missingParams = parm.getParamName(); + } else { + missingParams += "," + parm.getParamName(); + } } } } - if (missingParams != null) { - if (checkRequiredParameters) { - // Problem - missing one or more required parameters - String error = "Create VFModule: Missing Required inputs: " + missingParams; - logger.error("{} {} {} {} {}", MessageEnum.RA_MISSING_PARAM.toString(), missingParams, "VDU", - ErrorCode.DataError.getValue(), "Create VFModule: Missing Required inputs"); - logger.debug(error); - throw new VnfException(error, MsoExceptionCategory.USERDATA); + if (missingParams != null) { + if (checkRequiredParameters) { + // Problem - missing one or more required parameters + String error = "Create VFModule: Missing Required inputs: " + missingParams; + logger.error("{} {} {} {} {}", MessageEnum.RA_MISSING_PARAM.toString(), missingParams, "VDU", + ErrorCode.DataError.getValue(), "Create VFModule: Missing Required inputs"); + logger.debug(error); + throw new VnfException(error, MsoExceptionCategory.USERDATA); + } else { + logger.debug("found missing parameters [" + missingParams + + "] - but checkRequiredParameters is false - " + "will not block"); + } } else { - logger.debug( - "found missing parameters [" + missingParams + "] - but checkRequiredParameters is false - " - + "will not block"); + logger.debug("No missing parameters found - ok to proceed"); } - } else { - logger.debug("No missing parameters found - ok to proceed"); - } - } // NOTE: END PARAMETER CHECKING + } // NOTE: END PARAMETER CHECKING - // Here we go... ready to deploy the VF Module. - long instantiateVduStartTime = System.currentTimeMillis (); - if (backout == null) backout = true; + // Here we go... ready to deploy the VF Module. + long instantiateVduStartTime = System.currentTimeMillis(); + if (backout == null) + backout = true; try { // Construct the VDU Model structure to pass to the targeted VduPlugin @@ -1116,22 +1044,25 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { } catch (VduException me) { // Failed to instantiate the VDU. me.addContext("CreateVFModule"); - String error = "Create VF Module " + vfModuleType + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger.error("{} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, cloudSiteId, - tenantId, "VDU", ErrorCode.DataError.getValue(), "MsoException - instantiateVdu", me); + String error = "Create VF Module " + vfModuleType + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + ": " + me; + logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, cloudOwner, + cloudSiteId, tenantId, "VDU", ErrorCode.DataError.getValue(), "MsoException - instantiateVdu", me); logger.debug(error); // Convert to a generic VnfException throw new VnfException(me); } catch (NullPointerException npe) { - String error = "Create VFModule " + vfModuleType + " in " + cloudSiteId + "/" + tenantId + ": " + npe; - logger.error("{} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, cloudSiteId, - tenantId, "VDU", ErrorCode.DataError.getValue(), "NullPointerException - instantiateVdu", - npe); + String error = "Create VFModule " + vfModuleType + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + ": " + npe; + logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), vfModuleType, cloudOwner, + cloudSiteId, tenantId, "VDU", ErrorCode.DataError.getValue(), + "NullPointerException - instantiateVdu", npe); logger.debug(error); logger.debug("NULL POINTER EXCEPTION at vduPlugin.instantiateVdu", npe); throw new VnfException("NullPointerException during instantiateVdu"); } catch (Exception e) { - String error = "Create VFModule " + vfModuleType + " in " + cloudSiteId + "/" + tenantId + ": " + e; + String error = "Create VFModule " + vfModuleType + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + + ": " + e; logger.debug("Unhandled exception at vduPlugin.instantiateVdu", e); logger.debug(error); throw new VnfException("Exception during instantiateVdu: " + e.getMessage()); @@ -1140,10 +1071,10 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { // Reach this point if create is successful. // Populate remaining rollback info and response parameters. - vfRollback.setVnfCreated (true); - vfRollback.setVnfId (vduInstance.getVduInstanceId()); + vfRollback.setVnfCreated(true); + vfRollback.setVnfId(vduInstance.getVduInstanceId()); vnfId.value = vduInstance.getVduInstanceId(); - outputs.value = copyStringOutputs (vduInstance.getOutputs ()); + outputs.value = copyStringOutputs(vduInstance.getOutputs()); rollback.value = vfRollback; @@ -1152,39 +1083,37 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { } - public void deleteVfModule (String cloudSiteId, - String tenantId, - String vfModuleId, - MsoRequest msoRequest, - Holder <Map <String, String>> outputs) throws VnfException - { + public void deleteVfModule(String cloudSiteId, String cloudOwner, String tenantId, String vfModuleId, + MsoRequest msoRequest, Holder<Map<String, String>> outputs) throws VnfException { - logger.debug("Deleting VF Module " + vfModuleId + " in " + cloudSiteId + "/" + tenantId); + logger.debug("Deleting VF Module " + vfModuleId + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId); // Will capture execution time for metrics - long startTime = System.currentTimeMillis (); + long startTime = System.currentTimeMillis(); // Capture the output parameters on a delete, so need to query first - VduInstance vduInstance = null; - CloudInfo cloudInfo = new CloudInfo(cloudSiteId, tenantId, null); + VduInstance vduInstance = null; + CloudInfo cloudInfo = new CloudInfo(cloudSiteId, cloudOwner, tenantId, null); // Use the VduPlugin. - VduPlugin vduPlugin = getVduPlugin(cloudSiteId); - - try { - vduInstance = vduPlugin.queryVdu (cloudInfo, vfModuleId); - } - catch (VduException e) { - // Failed to query the VDU due to a plugin exception. - // Convert to a generic VnfException - e.addContext("QueryVFModule"); - String error = "Query VfModule (VDU): " + vfModuleId + " in " + cloudSiteId + "/" + tenantId + ": " + e; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleId, cloudSiteId, - tenantId, "VDU", "QueryVFModule", ErrorCode.DataError.getValue(), "Exception - queryVDU", e); - logger.debug(error); - throw new VnfException(e); - } - - // call method which handles the conversion from Map<String,Object> to Map<String,String> for our expected Object types + VduPlugin vduPlugin = getVduPlugin(cloudSiteId, cloudOwner); + + try { + vduInstance = vduPlugin.queryVdu(cloudInfo, vfModuleId); + } catch (VduException e) { + // Failed to query the VDU due to a plugin exception. + // Convert to a generic VnfException + e.addContext("QueryVFModule"); + String error = "Query VfModule (VDU): " + vfModuleId + " in " + cloudOwner + "/" + cloudSiteId + "/" + + tenantId + ": " + e; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleId, cloudOwner, + cloudSiteId, tenantId, "VDU", "QueryVFModule", ErrorCode.DataError.getValue(), + "Exception - queryVDU", e); + logger.debug(error); + throw new VnfException(e); + } + + // call method which handles the conversion from Map<String,Object> to Map<String,String> for our expected + // Object types outputs.value = convertMapStringObjectToStringString(vduInstance.getOutputs()); // Use the VduPlugin to delete the VDU. @@ -1193,19 +1122,20 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { // - a vnfInstance object with status of NOTFOUND (VDU did not exist, treat as success) // - a vnfInstance object with status of FAILED (error) // Also, VduException could be thrown. - long subStartTime = System.currentTimeMillis (); + long subStartTime = System.currentTimeMillis(); try { - // TODO: Get an appropriate timeout value - require access to the model + // TODO: Get an appropriate timeout value - require access to the model vduPlugin.deleteVdu(cloudInfo, vfModuleId, 5); } catch (VduException me) { - me.addContext ("DeleteVfModule"); + me.addContext("DeleteVfModule"); // Convert to a generic VnfException - String error = "Delete VF: " + vfModuleId + " in " + cloudSiteId + "/" + tenantId + ": " + me; - logger.error("{} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vfModuleId, cloudSiteId, - tenantId, "VDU", "DeleteVdu", ErrorCode.DataError.getValue(), - "Exception - DeleteVdu: " + me.getMessage()); + String error = + "Delete VF: " + vfModuleId + " in " + cloudOwner + "/" + cloudSiteId + "/" + tenantId + ": " + me; + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), vfModuleId, cloudOwner, + cloudSiteId, tenantId, "VDU", "DeleteVdu", ErrorCode.DataError.getValue(), + "Exception - DeleteVdu: " + me.getMessage()); logger.debug(error); - throw new VnfException (me); + throw new VnfException(me); } // On success, nothing is returned. @@ -1214,56 +1144,39 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { // Update VF Module not yet implemented for generic VDU plug-in model. @Override - public void updateVfModule (String cloudSiteId, - String tenantId, - String vnfType, - String vnfVersion, - String vnfName, - String requestType, - String volumeGroupHeatStackId, - String baseVfHeatStackId, - String vfModuleStackId, - String modelCustomizationUuid, - Map <String, Object> inputs, - MsoRequest msoRequest, - Holder <Map <String, String>> outputs, - Holder <VnfRollback> rollback) throws VnfException - { - // This operation is not currently supported for VduPlugin-orchestrated VF Modules. - logger.debug("Update VF Module command attempted but not supported"); - throw new VnfException ("UpdateVfModule: Unsupported command", MsoExceptionCategory.USERDATA); - } + public void updateVfModule(String cloudSiteId, String cloudOwner, String tenantId, String vnfType, + String vnfVersion, String vnfName, String requestType, String volumeGroupHeatStackId, + String baseVfHeatStackId, String vfModuleStackId, String modelCustomizationUuid, Map<String, Object> inputs, + MsoRequest msoRequest, Holder<Map<String, String>> outputs, Holder<VnfRollback> rollback) + throws VnfException { + // This operation is not currently supported for VduPlugin-orchestrated VF Modules. + logger.debug("Update VF Module command attempted but not supported"); + throw new VnfException("UpdateVfModule: Unsupported command", MsoExceptionCategory.USERDATA); + } /* - * Dynamic selection of a VduPlugin version. For initial tests, base on the "orchestrator" - * defined for the target cloud. Should really be looking at the VNF Model (ochestration_mode) - * but we don't currently have access to that in Query and Delete cases. + * Dynamic selection of a VduPlugin version. For initial tests, base on the "orchestrator" defined for the target + * cloud. Should really be looking at the VNF Model (ochestration_mode) but we don't currently have access to that + * in Query and Delete cases. */ - private VduPlugin getVduPlugin (String cloudSiteId) { - Optional<CloudSite> cloudSiteOp = cloudConfig.getCloudSite(cloudSiteId); - if (cloudSiteOp.isPresent()) { - CloudSite cloudSite = cloudSiteOp.get(); - String orchestrator = cloudSite.getOrchestrator(); - - if (orchestrator.equalsIgnoreCase("CLOUDIFY")) { - return cloudifyUtils; - } - else if (orchestrator.equalsIgnoreCase("HEAT")) { - return heatUtils; - } - if (orchestrator.equalsIgnoreCase("MULTICLOUD")) { - logger.debug ("Got MulticloudUtils for vduPlugin"); - return multicloudUtils; } - } - // Default - return HEAT plugin, though will fail later - return heatUtils; - } - - private Boolean getUsingMulticloud (CloudSite cloudSite) { - if (cloudSite.getOrchestrator().equalsIgnoreCase("MULTICLOUD")) { - return true; - } else { - return false; + private VduPlugin getVduPlugin(String cloudSiteId, String cloudOwner) { + Optional<CloudSite> cloudSiteOp = cloudConfig.getCloudSite(cloudSiteId); + if (cloudSiteOp.isPresent()) { + CloudSite cloudSite = cloudSiteOp.get(); + String orchestrator = cloudSite.getOrchestrator(); + + if (orchestrator.equalsIgnoreCase("CLOUDIFY")) { + return cloudifyUtils; + } else if (orchestrator.equalsIgnoreCase("HEAT")) { + return heatUtils; + } else if (orchestrator.equalsIgnoreCase("MULTICLOUD")) { + return multicloudUtils; + } else { + // Default if cloudSite record exists - return HEAT plugin - will fail later + return heatUtils; + } } + // Default if no cloudSite record exists - return multicloud plugin + return multicloudUtils; } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VfRollback.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VfRollback.java index 3736669094..7ba8ca8905 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VfRollback.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VfRollback.java @@ -25,108 +25,129 @@ package org.onap.so.adapters.vnf; import org.onap.so.entity.MsoRequest; public class VfRollback { - private String vnfId; - private String tenantId; - private String cloudSiteId; - private boolean tenantCreated = false; - private boolean vnfCreated = false; - private MsoRequest msoRequest; - private String volumeGroupName; - private String volumeGroupId; - private String requestType; - private String volumeGroupHeatStackId; - private String baseGroupHeatStackId; - private boolean isBase = false; - private String vfModuleStackId; - - - public String getVnfId() { - return vnfId; - } - public void setVnfId(String vnfId) { - this.vnfId = vnfId; - } - public String getTenantId() { - return tenantId; - } - - public void setTenantId(String tenantId) { - this.tenantId = tenantId; - } - public String getCloudSiteId() { - return cloudSiteId; - } - public void setCloudSiteId(String cloudId) { - this.cloudSiteId = cloudId; - } - public boolean getTenantCreated() { - return tenantCreated; - } - public void setTenantCreated(boolean tenantCreated) { - this.tenantCreated = tenantCreated; - } - public boolean getVnfCreated() { - return vnfCreated; - } - public void setVnfCreated(boolean vnfCreated) { - this.vnfCreated = vnfCreated; - } - public MsoRequest getMsoRequest() { - return msoRequest; - } - public void setMsoRequest (MsoRequest msoRequest) { - this.msoRequest = msoRequest; - } - public String getVolumeGroupName() { - return this.volumeGroupName; - } - public void setVolumeGroupName(String volumeGroupName) { - this.volumeGroupName = volumeGroupName; - } - public String getVolumeGroupId() { - return this.volumeGroupId; - } - public void setVolumeGroupId(String volumeGroupId) { - this.volumeGroupId = volumeGroupId; - } - public String getRequestType() { - return this.requestType; - } - public void setRequestType(String requestType) { - this.requestType = requestType; - } - public String getVolumeGroupHeatStackId() { - return this.volumeGroupHeatStackId; - } - public void setVolumeGroupHeatStackId(String volumeGroupHeatStackId) { - this.volumeGroupHeatStackId = volumeGroupHeatStackId; - } - - public String getBaseGroupHeatStackId() { - return this.baseGroupHeatStackId; - } - public void setBaseGroupHeatStackId(String baseGroupHeatStackId) { - this.baseGroupHeatStackId = baseGroupHeatStackId; - } - - public boolean isBase() { - return this.isBase; - } - public void setIsBase(boolean isBase) { - this.isBase = isBase; - } - public String getVfModuleStackId() { - return this.vfModuleStackId; - } - public void setVfModuleStackId(String vfModuleStackId) { - this.vfModuleStackId = vfModuleStackId; - } - - @Override + private String vnfId; + private String tenantId; + private String cloudSiteId; + private boolean tenantCreated = false; + private boolean vnfCreated = false; + private MsoRequest msoRequest; + private String volumeGroupName; + private String volumeGroupId; + private String requestType; + private String volumeGroupHeatStackId; + private String baseGroupHeatStackId; + private boolean isBase = false; + private String vfModuleStackId; + + + public String getVnfId() { + return vnfId; + } + + public void setVnfId(String vnfId) { + this.vnfId = vnfId; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getCloudSiteId() { + return cloudSiteId; + } + + public void setCloudSiteId(String cloudId) { + this.cloudSiteId = cloudId; + } + + public boolean getTenantCreated() { + return tenantCreated; + } + + public void setTenantCreated(boolean tenantCreated) { + this.tenantCreated = tenantCreated; + } + + public boolean getVnfCreated() { + return vnfCreated; + } + + public void setVnfCreated(boolean vnfCreated) { + this.vnfCreated = vnfCreated; + } + + public MsoRequest getMsoRequest() { + return msoRequest; + } + + public void setMsoRequest(MsoRequest msoRequest) { + this.msoRequest = msoRequest; + } + + public String getVolumeGroupName() { + return this.volumeGroupName; + } + + public void setVolumeGroupName(String volumeGroupName) { + this.volumeGroupName = volumeGroupName; + } + + public String getVolumeGroupId() { + return this.volumeGroupId; + } + + public void setVolumeGroupId(String volumeGroupId) { + this.volumeGroupId = volumeGroupId; + } + + public String getRequestType() { + return this.requestType; + } + + public void setRequestType(String requestType) { + this.requestType = requestType; + } + + public String getVolumeGroupHeatStackId() { + return this.volumeGroupHeatStackId; + } + + public void setVolumeGroupHeatStackId(String volumeGroupHeatStackId) { + this.volumeGroupHeatStackId = volumeGroupHeatStackId; + } + + public String getBaseGroupHeatStackId() { + return this.baseGroupHeatStackId; + } + + public void setBaseGroupHeatStackId(String baseGroupHeatStackId) { + this.baseGroupHeatStackId = baseGroupHeatStackId; + } + + public boolean isBase() { + return this.isBase; + } + + public void setIsBase(boolean isBase) { + this.isBase = isBase; + } + + public String getVfModuleStackId() { + return this.vfModuleStackId; + } + + public void setVfModuleStackId(String vfModuleStackId) { + this.vfModuleStackId = vfModuleStackId; + } + + @Override public String toString() { - return "VfRollback: cloud=" + cloudSiteId + ", tenant=" + tenantId + - ", vnf=" + vnfId + ", tenantCreated=" + tenantCreated + - ", vnfCreated=" + vnfCreated + ", requestType = " + requestType + - ", volumeGroupHeatStackId = " + this.volumeGroupHeatStackId; - } + return "VfRollback: cloud=" + cloudSiteId + ", tenant=" + tenantId + ", vnf=" + vnfId + ", tenantCreated=" + + tenantCreated + ", vnfCreated=" + vnfCreated + ", requestType = " + requestType + + ", volumeGroupHeatStackId = " + this.volumeGroupHeatStackId; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRest.java index 33055c225e..e81b211b27 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRest.java @@ -26,7 +26,6 @@ package org.onap.so.adapters.vnf; import java.util.Map; - import javax.inject.Provider; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -41,7 +40,6 @@ import javax.ws.rs.core.GenericEntity; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.xml.ws.Holder; - import org.apache.http.HttpStatus; import org.onap.so.adapters.vnf.exceptions.VnfException; import org.onap.so.adapters.vnfrest.CreateVfModuleRequest; @@ -66,7 +64,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; - import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -74,631 +71,509 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; /** - * This class services calls to the REST interface for VF Modules (http://host:port/vnfs/rest/v1/vnfs) - * Both XML and JSON can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default. - * For testing, call with cloudSiteId = ___TESTING___ - * To test exceptions, also set tenantId = ___TESTING___ + * This class services calls to the REST interface for VF Modules (http://host:port/vnfs/rest/v1/vnfs) Both XML and JSON + * can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default. For testing, call + * with cloudSiteId = ___TESTING___ To test exceptions, also set tenantId = ___TESTING___ */ @Path("/v1/vnfs") @Api(value = "/v1/vnfs", description = "root of vnf adapters restful web service") @Transactional @Component public class VnfAdapterRest { - private static Logger logger = LoggerFactory.getLogger(VnfAdapterRest.class); - private static final String TESTING_KEYWORD = "___TESTING___"; - private static final String RESP=", resp="; - - @Autowired - private MsoVnfAdapterImpl vnfAdapter; - //TODO Logging, SkipAAI, CREATED flags, Integrate with BPEL, Auth, - - @Autowired - private Provider<BpelRestClient> bpelRestClientProvider; - - - /* - * URL:http://localhost:8080/vnfs/rest/v1/vnfs/<aaivnfid>/vf-modules/<aaimodid> - * REQUEST: - * {"deleteVfModuleRequest": - {"cloudSiteId": "DAN", - "tenantId": "214b428a1f554c02935e66330f6a5409", - "vnfId": "somevnfid", - "vfModuleId": "somemodid", - "vfModuleStackId": "4e567676-e266-4594-a3a6-131c8a2baf73", - "messageId": "ra.1", - "notificationUrl": "http://localhost:8089/vnfmock", - "skipAAI": true, - "msoRequest": { - "requestId": "ra1", - "serviceInstanceId": "sa1" - }} - } - */ - @DELETE - @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "DeleteVfModule", - response = Response.class, - notes = "Delete an existing vnfModule, DeleteVfModuleRequest JSON is required") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfModule has been successfully deleted"), - @ApiResponse(code = 202, message = "delete vnfModule request has been accepted (async only)"), - @ApiResponse(code = 500, message = "delete vnfModule failed, examine entity object for details") }) - public Response deleteVfModule ( - @ApiParam(value = "aaiVnfId", required = true) - @PathParam("aaiVnfId") String aaiVnfId, - @ApiParam(value = "aaiVfModuleId", required = true) - @PathParam("aaiVfModuleId") String aaiVfModuleId, - @ApiParam(value = "DeleteVfModuleRequest", required = true) - final DeleteVfModuleRequest req) - { - logger.debug("Delete VfModule enter: " + req.toJsonString()); - if (aaiVnfId == null || !aaiVnfId.equals(req.getVnfId())) { - logger.debug("Req rejected - aaiVnfId not provided or doesn't match URL"); - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity("vnfid in URL does not match content") - .build(); - } - if (aaiVfModuleId == null || !aaiVfModuleId.equals(req.getVfModuleId())) { - logger.debug("Req rejected - aaiVfModuleId not provided or doesn't match URL"); - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity("vfModuleId in URL does not match content") - .build(); - } - DeleteVfModuleTask task = new DeleteVfModuleTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling delete, send generic failure as sync resp to caller - logger.error("", MessageEnum.RA_DELETE_VNF_ERR.toString(), "deleteVfModule", - ErrorCode.BusinessProcesssError.getValue(), "Exception in deleteVfModule", e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("deleteVNFVolumes exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class DeleteVfModuleTask implements Runnable { - private final DeleteVfModuleRequest req; - private DeleteVfModuleResponse response = null; - private VfModuleExceptionResponse eresp = null; - private boolean sendxml; - - public DeleteVfModuleTask(DeleteVfModuleRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<DeleteVfModuleResponse>(response) {} - : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - - @Override - public void run() { - try { - String cloudsite = req.getCloudSiteId(); - Holder<Map<String, String>> outputs = new Holder <> (); - if (cloudsite != null && !cloudsite.equals(TESTING_KEYWORD)) { - //vnfAdapter.deleteVnf (req.getCloudSiteId(), req.getTenantId(), req.getVfModuleStackId(), req.getMsoRequest()); - vnfAdapter.deleteVfModule (req.getCloudSiteId(), req.getTenantId(), req.getVfModuleStackId(), req.getMsoRequest(), outputs); - } - response = new DeleteVfModuleResponse(req.getVnfId(), req.getVfModuleId(), Boolean.TRUE, req.getMessageId(), outputs.value); - } catch (VnfException e) { - logger.error("{} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), - ErrorCode.BusinessProcesssError.getValue(), "VnfException - Delete VNF Module", e); - eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, req.getMessageId()); - } - if (!req.isSynchronous()) { - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("Delete vfModule exit: code=" + getStatusCode() + RESP + getResponse()); - } - } - - /* - * URL:http://localhost:8080/vnfs/rest/v1/vnfs/<aaiVnfId>/vf-modules/<aaiVfModuleId>?cloudSiteId=DAN&tenantId=vfModule?&skipAAI=TRUE&msoRequest.requestId=ra1&msoRequest.serviceInstanceId=si1&vfModuleName=T2N2S1 - * RESP: - * {"queryVfModuleResponse": { - "vfModuleId": "AvfmodId", - "vfModuleOutputs": {"entry": { - "key": "server_private_ip_1", - "value": "10.100.1.25" - }}, - "vfModuleStackId": "RaaVnf1/abfa8a6d-feb1-40af-aea3-109403b1cf6b", - "vnfId": "AvnfID", - "vnfStatus": "ACTIVE" - }} - */ - @GET - @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "QueryVfModule", - response = Response.class, - notes = "Query an existing vnfModule") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfModule has been successfully queried"), - @ApiResponse(code = 500, message = "query vnfModule failed, examine entity object for details") }) - public Response queryVfModule( - @ApiParam(value = "aaiVnfId", required = true) - @PathParam("aaiVnfId") String aaiVnfId, - @ApiParam(value = "aaiVfModuleId", required = true) - @PathParam("aaiVfModuleId") String aaiVfModuleId, - @ApiParam(value = "cloudSiteId", required = true) - @QueryParam("cloudSiteId") String cloudSiteId, - @ApiParam(value = "tenantId", required = true) - @QueryParam("tenantId") String tenantId, - @ApiParam(value = "vfModuleName", required = true) - @QueryParam("vfModuleName") String vfModuleName, //RAA? Id in doc - @ApiParam(value = "skipAAI", required = true) - @QueryParam("skipAAI") Boolean skipAAI, - @ApiParam(value = "msoRequest.requestId", required = true) - @QueryParam("msoRequest.requestId") String requestId, - @ApiParam(value = "msoRequest.serviceInstanceId", required = true) - @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId) - { - //This request responds synchronously only - logger.debug("Query vfModule enter:" + vfModuleName); - MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId); - - try { - int respStatus = HttpStatus.SC_OK; - QueryVfModuleResponse qryResp = new QueryVfModuleResponse(aaiVnfId, aaiVfModuleId, null, null, null); - Holder<Boolean> vnfExists = new Holder<>(); - Holder<String> vfModuleId = new Holder<>(); - Holder<VnfStatus> status = new Holder<>(); - Holder<Map<String, String>> outputs = new Holder <> (); - vnfAdapter.queryVnf (cloudSiteId, tenantId, vfModuleName, msoRequest, vnfExists, vfModuleId, status, outputs); - if (!vnfExists.value) { - logger.debug("vfModule not found"); - respStatus = HttpStatus.SC_NOT_FOUND; - } else { - logger.debug("vfModule found" + vfModuleId.value + ", status=" + status.value); - qryResp.setVfModuleId(vfModuleId.value); - qryResp.setVnfStatus(status.value); - qryResp.setVfModuleOutputs(outputs.value); - } - logger.debug("Query vfModule exit"); - return Response - .status(respStatus) - .entity(new GenericEntity<QueryVfModuleResponse>(qryResp) {}) - .build(); - } catch (VnfException e) { - logger.error("{} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, "queryVfModule", - ErrorCode.BusinessProcesssError.getValue(), "VnfException - queryVfModule", e); - VfModuleExceptionResponse excResp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.FALSE, null); - return Response - .status(HttpStatus.SC_INTERNAL_SERVER_ERROR) - .entity(new GenericEntity<VfModuleExceptionResponse>(excResp) {}) - .build(); - } - } - - /*URL: http://localhost:8080/vnfs/rest/v1/vnfs/<aaivnfid>/vf-modules - *REQUEST: - * {"createVfModuleRequest": - {"cloudSiteId": "DAN", - "tenantId": "214b428a1f554c02935e66330f6a5409", - "vnfId": "somevnfid", - "vfModuleId": "somemodid", - "vfModuleName": "RaaVnf1", - "vnfType": "ApacheVnf", - "vfModuleParams": {"entry": [ - {"key": "network_id", - "value": "59ed7b41-2983-413f-ba93-e7d437433916"}, - {"key": "subnet_id", - "value": "086c9298-5c57-49b7-bb2b-6fd5730c5d92"}, - {"key": "server_name_0", - "value": "RaaVnf1"} - ]}, - "failIfExists": true, - "messageId": "ra.1", - "notificationUrl": "http://localhost:8089/vnfmock", - "skipAAI": true, - "msoRequest": { - "requestId": "ra1", - "serviceInstanceId": "sa1" - }} - } - */ - @POST - @Path("{aaiVnfId}/vf-modules") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "CreateVfModule", - response = Response.class, - notes = "Create a vnfModule") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfModule has been successfully created"), - @ApiResponse(code = 202, message = "create vnfModule request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "create vnfModule failed, examine entity object for details") }) - public Response createVfModule( - @ApiParam(value = "aaiVnfId", required = true) - @PathParam("aaiVnfId") String aaiVnfId, - @ApiParam(value = "CreateVfModuleRequest", required = true) - final CreateVfModuleRequest req) - { - logger.debug("Create VfModule enter inside VnfAdapterRest: " + req.toJsonString()); - if (aaiVnfId == null || !aaiVnfId.equals(req.getVnfId())) { - logger.debug("Req rejected - aaiVnfId not provided or doesn't match URL"); - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity("vnfid in URL does not match content") - .build(); - } - CreateVfModuleTask task = new CreateVfModuleTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR, "createVfModule", - ErrorCode.BusinessProcesssError, "Exception - createVfModule", e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("createVfModule exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class CreateVfModuleTask implements Runnable { - private final CreateVfModuleRequest req; - private CreateVfModuleResponse response = null; - private VfModuleExceptionResponse eresp = null; - private boolean sendxml; - - public CreateVfModuleTask(CreateVfModuleRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<CreateVfModuleResponse>(response) {} - : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - - @Override - public void run() { - logger.debug ("CreateVfModuleTask start"); - try { - // Synchronous Web Service Outputs - Holder <String> vfModuleStackId = new Holder <> (); - Holder <Map <String, String>> outputs = new Holder <> (); - Holder <VnfRollback> vnfRollback = new Holder <> (); - String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); - logger.debug("completeVnfVfModuleType=" + completeVnfVfModuleType); - String cloudsite = req.getCloudSiteId(); - if (cloudsite != null && cloudsite.equals(TESTING_KEYWORD)) { - String tenant = req.getTenantId(); - if (tenant != null && tenant.equals(TESTING_KEYWORD)) { - throw new VnfException("testing."); - } - vnfRollback.value = new VnfRollback(req.getVnfId(), tenant, cloudsite, - true, false, new MsoRequest("reqid", "svcid"), - req.getVolumeGroupId(), req.getVolumeGroupId(), req.getRequestType(), req.getModelCustomizationUuid()); - vfModuleStackId.value = "479D3D8B-6360-47BC-AB75-21CC91981484"; - outputs.value = VolumeAdapterRest.testMap(); - } else { -// vnfAdapter.createVnf (createReq.getCloudSiteId(), -// createReq.getTenantId(), -// createReq.getVnfType(), -// createReq.getVnfVersion(), -// createReq.getVfModuleName(), -// createReq.getRequestType(), -// createReq.getVolumeGroupStackId(), -// createReq.getVfModuleParams(), -// createReq.getFailIfExists(), -// createReq.getBackout(), -// createReq.getMsoRequest(), -// vfModuleStackId, -// outputs, -// vnfRollback); - vnfAdapter.createVfModule(req.getCloudSiteId(), - req.getTenantId(), - //req.getVnfType(), - completeVnfVfModuleType, - req.getVnfVersion(), - req.getVnfId(), - req.getVfModuleName(), - req.getVfModuleId(), - req.getRequestType(), - req.getVolumeGroupStackId(), - req.getBaseVfModuleStackId(), - req.getModelCustomizationUuid(), - req.getVfModuleParams(), - req.getFailIfExists(), - req.getBackout(), - req.getEnableBridge(), - req.getMsoRequest(), - vfModuleStackId, - outputs, - vnfRollback); - } - VfModuleRollback modRollback = new VfModuleRollback(vnfRollback.value, req.getVfModuleId(), vfModuleStackId.value, req.getMessageId()); - response = new CreateVfModuleResponse(req.getVnfId(), req.getVfModuleId(), - vfModuleStackId.value, Boolean.TRUE, outputs.value, modRollback, req.getMessageId()); - } catch (VnfException e) { - logger.debug("Exception :",e); - eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, req.getMessageId()); - } - if (!req.isSynchronous()) { - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("CreateVfModuleTask exit: code=" + getStatusCode() + RESP + getResponse()); - } - } - - @PUT - @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "UpdateVfModule", - response = Response.class, - notes = "Update an existing vnfModule") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfModule has been successfully updated"), - @ApiResponse(code = 202, message = "update vnfModule request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "update vnfModule failed, examine entity object for details") }) - public Response updateVfModule( - @ApiParam(value = "aaiVnfId", required = true) - @PathParam("aaiVnfId") String aaiVnfId, - @ApiParam(value = "aaiVfModuleId", required = true) - @PathParam("aaiVfModuleId") String aaiVfModuleId, - @ApiParam(value = "UpdateVfModuleRequest", required = true) - final UpdateVfModuleRequest req) - { - logger.debug("Update VfModule enter: " + req.toJsonString()); - UpdateVfModulesTask task = new UpdateVfModulesTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} {} {}", MessageEnum.RA_UPDATE_VNF_ERR.toString(), "updateVfModule", - ErrorCode.BusinessProcesssError.getValue(), "Exception - updateVfModule", e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("updateVfModules exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class UpdateVfModulesTask implements Runnable { - private final UpdateVfModuleRequest req; - private UpdateVfModuleResponse response = null; - private VfModuleExceptionResponse eresp = null; - private boolean sendxml; - - public UpdateVfModulesTask(UpdateVfModuleRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<UpdateVfModuleResponse>(response) {} - : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - try { - //MsoVnfAdapter vnfAdapter = new MsoVnfAdapterImpl (msoPropertiesFactory, cloudConfigFactory); - - // Synchronous Web Service Outputs - Holder <String> vfModuleStackId = new Holder <> (); - Holder <Map <String, String>> outputs = new Holder <> (); - Holder <VnfRollback> vnfRollback = new Holder <> (); - String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); - logger.debug("in updateVf - completeVnfVfModuleType=" + completeVnfVfModuleType); - - vnfAdapter.updateVfModule (req.getCloudSiteId(), - req.getTenantId(), - //req.getVnfType(), - completeVnfVfModuleType, - req.getVnfVersion(), - req.getVfModuleName(), - req.getRequestType(), - req.getVolumeGroupStackId(), - req.getBaseVfModuleStackId(), - req.getVfModuleStackId(), - req.getModelCustomizationUuid(), - req.getVfModuleParams(), - req.getMsoRequest(), - outputs, - vnfRollback); - - response = new UpdateVfModuleResponse(req.getVnfId(), req.getVfModuleId(), - vfModuleStackId.value, outputs.value, req.getMessageId()); - } catch (VnfException e) { - logger.debug("Exception :",e); - eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost (getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("Update VfModule exit: code=" + getStatusCode() + RESP + getResponse()); - } - } - /* - * URL:http://localhost:8080/vnfs/rest/v1/vnfs/<aaivnfid>/vf-modules/<aaimodid>/rollback - * REQUEST: - * {"deleteVfModuleRequest": - {"cloudSiteId": "DAN", - "tenantId": "214b428a1f554c02935e66330f6a5409", - "vnfId": "somevnfid", - "vfModuleId": "somemodid", - "vfModuleStackId": "4e567676-e266-4594-a3a6-131c8a2baf73", - "messageId": "ra.1", - "notificationUrl": "http://localhost:8089/vnfmock", - "skipAAI": true, - "msoRequest": { - "requestId": "ra1", - "serviceInstanceId": "sa1" - }} - } - */ - @DELETE - @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}/rollback") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "RollbackVfModule", - response = Response.class, - notes = "Rollback an existing vnfModule") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfModule has been successfully rolled back"), - @ApiResponse(code = 202, message = "rollback vnfModule request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "rollback vnfModule failed, examine entity object for details") }) - public Response rollbackVfModule ( - @ApiParam(value = "aaiVnfId", required = true) - @PathParam("aaiVnfId") String aaiVnfId, - @ApiParam(value = "aaiVfModuleId", required = true) - @PathParam("aaiVfModuleId") String aaiVfModuleId, - @ApiParam(value = "RollbackVfModuleRequest", required = true) - //@QueryParam("rollback") String rollback, - final RollbackVfModuleRequest req) - { - logger.debug("Rollback VfModule enter: " + req.toJsonString()); - RollbackVfModulesTask task = new RollbackVfModulesTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} {} {}", MessageEnum.RA_ROLLBACK_VNF_ERR.toString(), "rollbackVfModule", - ErrorCode.BusinessProcesssError.getValue(), "Exception - rollbackVfModule", e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("rollbackVfModule exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class RollbackVfModulesTask implements Runnable { - private final RollbackVfModuleRequest req; - private RollbackVfModuleResponse response = null; - private VfModuleExceptionResponse eresp = null; - private boolean sendxml; - - public RollbackVfModulesTask(RollbackVfModuleRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<RollbackVfModuleResponse>(response) {} - : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - try { - VfModuleRollback vmr = req.getVfModuleRollback(); - VnfRollback vrb = new VnfRollback( - vmr.getVfModuleStackId(), vmr.getTenantId(), vmr.getCloudSiteId(), true, true, - vmr.getMsoRequest(), null, null, null, null); - vnfAdapter.rollbackVnf (vrb); - response = new RollbackVfModuleResponse(Boolean.TRUE, req.getMessageId()); - } catch (VnfException e) { - logger.error("{} {} {}", MessageEnum.RA_ROLLBACK_VNF_ERR, ErrorCode.BusinessProcesssError, - "Exception" + " - " + "rollbackVfModule", e); - eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, false, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost (getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("RollbackVfModulesTask exit: code=" + getStatusCode() + RESP + getResponse()); - } - } + private static Logger logger = LoggerFactory.getLogger(VnfAdapterRest.class); + private static final String TESTING_KEYWORD = "___TESTING___"; + private static final String RESP = ", resp="; + + @Autowired + private MsoVnfAdapterImpl vnfAdapter; + // TODO Logging, SkipAAI, CREATED flags, Integrate with BPEL, Auth, + + @Autowired + private Provider<BpelRestClient> bpelRestClientProvider; + + + /* + * URL:http://localhost:8080/vnfs/rest/v1/vnfs/<aaivnfid>/vf-modules/<aaimodid> REQUEST: {"deleteVfModuleRequest": + * {"cloudSiteId": "DAN", "tenantId": "214b428a1f554c02935e66330f6a5409", "vnfId": "somevnfid", "vfModuleId": + * "somemodid", "vfModuleStackId": "4e567676-e266-4594-a3a6-131c8a2baf73", "messageId": "ra.1", "notificationUrl": + * "http://localhost:8089/vnfmock", "skipAAI": true, "msoRequest": { "requestId": "ra1", "serviceInstanceId": "sa1" + * }} } + */ + @DELETE + @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "DeleteVfModule", response = Response.class, + notes = "Delete an existing vnfModule, DeleteVfModuleRequest JSON is required") + @ApiResponses({@ApiResponse(code = 200, message = "vnfModule has been successfully deleted"), + @ApiResponse(code = 202, message = "delete vnfModule request has been accepted (async only)"), + @ApiResponse(code = 500, message = "delete vnfModule failed, examine entity object for details")}) + public Response deleteVfModule( + @ApiParam(value = "aaiVnfId", required = true) @PathParam("aaiVnfId") String aaiVnfId, + @ApiParam(value = "aaiVfModuleId", required = true) @PathParam("aaiVfModuleId") String aaiVfModuleId, + @ApiParam(value = "DeleteVfModuleRequest", required = true) final DeleteVfModuleRequest req) { + logger.debug("Delete VfModule enter: " + req.toJsonString()); + if (aaiVnfId == null || !aaiVnfId.equals(req.getVnfId())) { + logger.debug("Req rejected - aaiVnfId not provided or doesn't match URL"); + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN) + .entity("vnfid in URL does not match content").build(); + } + if (aaiVfModuleId == null || !aaiVfModuleId.equals(req.getVfModuleId())) { + logger.debug("Req rejected - aaiVfModuleId not provided or doesn't match URL"); + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN) + .entity("vfModuleId in URL does not match content").build(); + } + DeleteVfModuleTask task = new DeleteVfModuleTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling delete, send generic failure as sync resp to caller + logger.error("", MessageEnum.RA_DELETE_VNF_ERR.toString(), "deleteVfModule", + ErrorCode.BusinessProcesssError.getValue(), "Exception in deleteVfModule", e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("deleteVNFVolumes exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class DeleteVfModuleTask implements Runnable { + private final DeleteVfModuleRequest req; + private DeleteVfModuleResponse response = null; + private VfModuleExceptionResponse eresp = null; + private boolean sendxml; + + public DeleteVfModuleTask(DeleteVfModuleRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<DeleteVfModuleResponse>(response) {} + : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + try { + String cloudsite = req.getCloudSiteId(); + Holder<Map<String, String>> outputs = new Holder<>(); + if (cloudsite != null && !cloudsite.equals(TESTING_KEYWORD)) { + // vnfAdapter.deleteVnf (req.getCloudSiteId(), req.getTenantId(), req.getVfModuleStackId(), + // req.getMsoRequest()); + vnfAdapter.deleteVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(), + req.getVfModuleStackId(), req.getMsoRequest(), outputs); + } + response = new DeleteVfModuleResponse(req.getVnfId(), req.getVfModuleId(), Boolean.TRUE, + req.getMessageId(), outputs.value); + } catch (VnfException e) { + logger.error("{} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), + ErrorCode.BusinessProcesssError.getValue(), "VnfException - Delete VNF Module", e); + eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, + req.getMessageId()); + } + if (!req.isSynchronous()) { + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("Delete vfModule exit: code=" + getStatusCode() + RESP + getResponse()); + } + } + + /* + * URL:http://localhost:8080/vnfs/rest/v1/vnfs/<aaiVnfId>/vf-modules/<aaiVfModuleId>?cloudSiteId=DAN&tenantId= + * vfModule?&skipAAI=TRUE&msoRequest.requestId=ra1&msoRequest.serviceInstanceId=si1&vfModuleName=T2N2S1 RESP: + * {"queryVfModuleResponse": { "vfModuleId": "AvfmodId", "vfModuleOutputs": {"entry": { "key": + * "server_private_ip_1", "value": "10.100.1.25" }}, "vfModuleStackId": + * "RaaVnf1/abfa8a6d-feb1-40af-aea3-109403b1cf6b", "vnfId": "AvnfID", "vnfStatus": "ACTIVE" }} + */ + @GET + @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "QueryVfModule", response = Response.class, notes = "Query an existing vnfModule") + @ApiResponses({@ApiResponse(code = 200, message = "vnfModule has been successfully queried"), + @ApiResponse(code = 500, message = "query vnfModule failed, examine entity object for details")}) + public Response queryVfModule(@ApiParam(value = "aaiVnfId", required = true) @PathParam("aaiVnfId") String aaiVnfId, + @ApiParam(value = "aaiVfModuleId", required = true) @PathParam("aaiVfModuleId") String aaiVfModuleId, + @ApiParam(value = "cloudSiteId", required = true) @QueryParam("cloudSiteId") String cloudSiteId, + @ApiParam(value = "cloudOwner", required = true) @QueryParam("cloudOwner") String cloudOwner, + @ApiParam(value = "tenantId", required = true) @QueryParam("tenantId") String tenantId, + @ApiParam(value = "vfModuleName", required = true) @QueryParam("vfModuleName") String vfModuleName, // RAA? + // Id in + // doc + @ApiParam(value = "skipAAI", required = true) @QueryParam("skipAAI") Boolean skipAAI, + @ApiParam(value = "msoRequest.requestId", + required = true) @QueryParam("msoRequest.requestId") String requestId, + @ApiParam(value = "msoRequest.serviceInstanceId", + required = true) @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId) { + // This request responds synchronously only + logger.debug("Query vfModule enter:" + vfModuleName); + MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId); + + try { + int respStatus = HttpStatus.SC_OK; + QueryVfModuleResponse qryResp = new QueryVfModuleResponse(aaiVnfId, aaiVfModuleId, null, null, null); + Holder<Boolean> vnfExists = new Holder<>(); + Holder<String> vfModuleId = new Holder<>(); + Holder<VnfStatus> status = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + vnfAdapter.queryVnf(cloudSiteId, cloudOwner, tenantId, vfModuleName, msoRequest, vnfExists, vfModuleId, + status, outputs); + if (!vnfExists.value) { + logger.debug("vfModule not found"); + respStatus = HttpStatus.SC_NOT_FOUND; + } else { + logger.debug("vfModule found" + vfModuleId.value + ", status=" + status.value); + qryResp.setVfModuleId(vfModuleId.value); + qryResp.setVnfStatus(status.value); + qryResp.setVfModuleOutputs(outputs.value); + } + logger.debug("Query vfModule exit"); + return Response.status(respStatus).entity(new GenericEntity<QueryVfModuleResponse>(qryResp) {}).build(); + } catch (VnfException e) { + logger.error("{} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, "queryVfModule", + ErrorCode.BusinessProcesssError.getValue(), "VnfException - queryVfModule", e); + VfModuleExceptionResponse excResp = + new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.FALSE, null); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR) + .entity(new GenericEntity<VfModuleExceptionResponse>(excResp) {}).build(); + } + } + + /* + * URL: http://localhost:8080/vnfs/rest/v1/vnfs/<aaivnfid>/vf-modules REQUEST: {"createVfModuleRequest": + * {"cloudSiteId": "DAN", "tenantId": "214b428a1f554c02935e66330f6a5409", "vnfId": "somevnfid", "vfModuleId": + * "somemodid", "vfModuleName": "RaaVnf1", "vnfType": "ApacheVnf", "vfModuleParams": {"entry": [ {"key": + * "network_id", "value": "59ed7b41-2983-413f-ba93-e7d437433916"}, {"key": "subnet_id", "value": + * "086c9298-5c57-49b7-bb2b-6fd5730c5d92"}, {"key": "server_name_0", "value": "RaaVnf1"} ]}, "failIfExists": true, + * "messageId": "ra.1", "notificationUrl": "http://localhost:8089/vnfmock", "skipAAI": true, "msoRequest": { + * "requestId": "ra1", "serviceInstanceId": "sa1" }} } + */ + @POST + @Path("{aaiVnfId}/vf-modules") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "CreateVfModule", response = Response.class, notes = "Create a vnfModule") + @ApiResponses({@ApiResponse(code = 200, message = "vnfModule has been successfully created"), + @ApiResponse(code = 202, message = "create vnfModule request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "create vnfModule failed, examine entity object for details")}) + public Response createVfModule( + @ApiParam(value = "aaiVnfId", required = true) @PathParam("aaiVnfId") String aaiVnfId, + @ApiParam(value = "CreateVfModuleRequest", required = true) final CreateVfModuleRequest req) { + logger.debug("Create VfModule enter inside VnfAdapterRest: " + req.toJsonString()); + if (aaiVnfId == null || !aaiVnfId.equals(req.getVnfId())) { + logger.debug("Req rejected - aaiVnfId not provided or doesn't match URL"); + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN) + .entity("vnfid in URL does not match content").build(); + } + CreateVfModuleTask task = new CreateVfModuleTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR, "createVfModule", + ErrorCode.BusinessProcesssError, "Exception - createVfModule", e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("createVfModule exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class CreateVfModuleTask implements Runnable { + private final CreateVfModuleRequest req; + private CreateVfModuleResponse response = null; + private VfModuleExceptionResponse eresp = null; + private boolean sendxml; + + public CreateVfModuleTask(CreateVfModuleRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<CreateVfModuleResponse>(response) {} + : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("CreateVfModuleTask start"); + try { + // Synchronous Web Service Outputs + Holder<String> vfModuleStackId = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + Holder<VnfRollback> vnfRollback = new Holder<>(); + String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); + logger.debug("completeVnfVfModuleType=" + completeVnfVfModuleType); + String cloudsite = req.getCloudSiteId(); + String cloudOwner = req.getCloudOwner(); + if (cloudsite != null && cloudsite.equals(TESTING_KEYWORD)) { + String tenant = req.getTenantId(); + if (tenant != null && tenant.equals(TESTING_KEYWORD)) { + throw new VnfException("testing."); + } + vnfRollback.value = new VnfRollback(req.getVnfId(), tenant, cloudOwner, cloudsite, true, false, + new MsoRequest("reqid", "svcid"), req.getVolumeGroupId(), req.getVolumeGroupId(), + req.getRequestType(), req.getModelCustomizationUuid()); + vfModuleStackId.value = "479D3D8B-6360-47BC-AB75-21CC91981484"; + outputs.value = VolumeAdapterRest.testMap(); + } else { + vnfAdapter.createVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(), + completeVnfVfModuleType, req.getVnfVersion(), req.getVnfId(), req.getVfModuleName(), + req.getVfModuleId(), req.getRequestType(), req.getVolumeGroupStackId(), + req.getBaseVfModuleStackId(), req.getModelCustomizationUuid(), req.getVfModuleParams(), + req.getFailIfExists(), req.getBackout(), req.getEnableBridge(), req.getMsoRequest(), + vfModuleStackId, outputs, vnfRollback); + } + VfModuleRollback modRollback = new VfModuleRollback(vnfRollback.value, req.getVfModuleId(), + vfModuleStackId.value, req.getMessageId()); + response = new CreateVfModuleResponse(req.getVnfId(), req.getVfModuleId(), vfModuleStackId.value, + Boolean.TRUE, outputs.value, modRollback, req.getMessageId()); + } catch (VnfException e) { + logger.debug("Exception :", e); + eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, + req.getMessageId()); + } + if (!req.isSynchronous()) { + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("CreateVfModuleTask exit: code=" + getStatusCode() + RESP + getResponse()); + } + } + + @PUT + @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "UpdateVfModule", response = Response.class, notes = "Update an existing vnfModule") + @ApiResponses({@ApiResponse(code = 200, message = "vnfModule has been successfully updated"), + @ApiResponse(code = 202, message = "update vnfModule request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "update vnfModule failed, examine entity object for details")}) + public Response updateVfModule( + @ApiParam(value = "aaiVnfId", required = true) @PathParam("aaiVnfId") String aaiVnfId, + @ApiParam(value = "aaiVfModuleId", required = true) @PathParam("aaiVfModuleId") String aaiVfModuleId, + @ApiParam(value = "UpdateVfModuleRequest", required = true) final UpdateVfModuleRequest req) { + logger.debug("Update VfModule enter: " + req.toJsonString()); + UpdateVfModulesTask task = new UpdateVfModulesTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} {} {}", MessageEnum.RA_UPDATE_VNF_ERR.toString(), "updateVfModule", + ErrorCode.BusinessProcesssError.getValue(), "Exception - updateVfModule", e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("updateVfModules exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class UpdateVfModulesTask implements Runnable { + private final UpdateVfModuleRequest req; + private UpdateVfModuleResponse response = null; + private VfModuleExceptionResponse eresp = null; + private boolean sendxml; + + public UpdateVfModulesTask(UpdateVfModuleRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<UpdateVfModuleResponse>(response) {} + : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + try { + // MsoVnfAdapter vnfAdapter = new MsoVnfAdapterImpl (msoPropertiesFactory, cloudConfigFactory); + + // Synchronous Web Service Outputs + Holder<String> vfModuleStackId = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + Holder<VnfRollback> vnfRollback = new Holder<>(); + String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); + logger.debug("in updateVf - completeVnfVfModuleType=" + completeVnfVfModuleType); + + vnfAdapter.updateVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(), + // req.getVnfType(), + completeVnfVfModuleType, req.getVnfVersion(), req.getVfModuleName(), req.getRequestType(), + req.getVolumeGroupStackId(), req.getBaseVfModuleStackId(), req.getVfModuleStackId(), + req.getModelCustomizationUuid(), req.getVfModuleParams(), req.getMsoRequest(), outputs, + vnfRollback); + + response = new UpdateVfModuleResponse(req.getVnfId(), req.getVfModuleId(), vfModuleStackId.value, + outputs.value, req.getMessageId()); + } catch (VnfException e) { + logger.debug("Exception :", e); + eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("Update VfModule exit: code=" + getStatusCode() + RESP + getResponse()); + } + } + + /* + * URL:http://localhost:8080/vnfs/rest/v1/vnfs/<aaivnfid>/vf-modules/<aaimodid>/rollback REQUEST: + * {"deleteVfModuleRequest": {"cloudSiteId": "DAN", "tenantId": "214b428a1f554c02935e66330f6a5409", "vnfId": + * "somevnfid", "vfModuleId": "somemodid", "vfModuleStackId": "4e567676-e266-4594-a3a6-131c8a2baf73", "messageId": + * "ra.1", "notificationUrl": "http://localhost:8089/vnfmock", "skipAAI": true, "msoRequest": { "requestId": "ra1", + * "serviceInstanceId": "sa1" }} } + */ + @DELETE + @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}/rollback") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "RollbackVfModule", response = Response.class, notes = "Rollback an existing vnfModule") + @ApiResponses({@ApiResponse(code = 200, message = "vnfModule has been successfully rolled back"), + @ApiResponse(code = 202, + message = "rollback vnfModule request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "rollback vnfModule failed, examine entity object for details")}) + public Response rollbackVfModule( + @ApiParam(value = "aaiVnfId", required = true) @PathParam("aaiVnfId") String aaiVnfId, + @ApiParam(value = "aaiVfModuleId", required = true) @PathParam("aaiVfModuleId") String aaiVfModuleId, + @ApiParam(value = "RollbackVfModuleRequest", required = true) + // @QueryParam("rollback") String rollback, + final RollbackVfModuleRequest req) { + logger.debug("Rollback VfModule enter: " + req.toJsonString()); + RollbackVfModulesTask task = new RollbackVfModulesTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} {} {}", MessageEnum.RA_ROLLBACK_VNF_ERR.toString(), "rollbackVfModule", + ErrorCode.BusinessProcesssError.getValue(), "Exception - rollbackVfModule", e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("rollbackVfModule exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class RollbackVfModulesTask implements Runnable { + private final RollbackVfModuleRequest req; + private RollbackVfModuleResponse response = null; + private VfModuleExceptionResponse eresp = null; + private boolean sendxml; + + public RollbackVfModulesTask(RollbackVfModuleRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<RollbackVfModuleResponse>(response) {} + : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + try { + VfModuleRollback vmr = req.getVfModuleRollback(); + VnfRollback vrb = new VnfRollback(vmr.getVfModuleStackId(), vmr.getTenantId(), vmr.getCloudOwner(), + vmr.getCloudSiteId(), true, true, vmr.getMsoRequest(), null, null, null, null); + vnfAdapter.rollbackVnf(vrb); + response = new RollbackVfModuleResponse(Boolean.TRUE, req.getMessageId()); + } catch (VnfException e) { + logger.error("{} {} {}", MessageEnum.RA_ROLLBACK_VNF_ERR, ErrorCode.BusinessProcesssError, + "Exception" + " - " + "rollbackVfModule", e); + eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, false, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("RollbackVfModulesTask exit: code=" + getStatusCode() + RESP + getResponse()); + } + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestUtils.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestUtils.java index 8c96acc361..b53ac0f899 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestUtils.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestUtils.java @@ -23,7 +23,6 @@ package org.onap.so.adapters.vnf; import java.util.Optional; - import org.onap.so.cloud.CloudConfig; import org.onap.so.db.catalog.beans.CloudSite; import org.slf4j.Logger; @@ -32,80 +31,74 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component -public class VnfAdapterRestUtils -{ - private static Logger logger = LoggerFactory.getLogger(VnfAdapterRestUtils.class); - - private static final String HEAT_MODE = "HEAT"; - private static final String CLOUDIFY_MODE = "CLOUDIFY"; - private static final String MULTICLOUD_MODE = "MULTICLOUD"; - - @Autowired - private CloudConfig cloudConfig; - - @Autowired - private MsoVnfCloudifyAdapterImpl cloudifyImpl; - - @Autowired - private MsoVnfAdapterImpl vnfImpl; - - @Autowired - private MsoVnfPluginAdapterImpl vnfPluginImpl; - - /* - * Choose which implementation of VNF Adapter to use, based on the orchestration mode. - * Currently, the two supported orchestrators are HEAT and CLOUDIFY. - */ - public MsoVnfAdapter getVnfAdapterImpl (String mode, String cloudSiteId) - { - // First, determine the orchestration mode to use. - // If was explicitly provided as a parameter, use that. Else if specified for the - // cloudsite, use that. Otherwise, the default is the (original) HEAT-based impl. - - logger.debug("Entered GetVnfAdapterImpl: mode=" + mode + ", cloudSite=" + cloudSiteId); - - if (mode == null) { - // Didn't get an explicit mode type requested. - // Use the CloudSite to determine which Impl to use, based on whether the target cloutSite - // has a CloudifyManager assigned to it - Optional<CloudSite> cloudSite = cloudConfig.getCloudSite(cloudSiteId); - if (cloudSite.isPresent()) { - logger.debug("Got CloudSite: " + cloudSite.toString()); - if (cloudConfig.getCloudifyManager(cloudSite.get().getCloudifyId()) != null) { - mode = CLOUDIFY_MODE; - } else if (MULTICLOUD_MODE.equalsIgnoreCase(cloudSite.get().getOrchestrator())) { - mode = MULTICLOUD_MODE; - } - else { - mode = HEAT_MODE; - } - } - } - - logger.debug ("GetVnfAdapterImpl: mode=" + mode); - - MsoVnfAdapter vnfAdapter = null; - - // TODO: Make this more dynamic (e.g. Service Loader) - if (CLOUDIFY_MODE.equalsIgnoreCase(mode)) { - logger.debug("GetVnfAdapterImpl: Return Cloudify Adapter"); - vnfAdapter = cloudifyImpl; - } - else if (HEAT_MODE.equalsIgnoreCase(mode)) { - logger.debug("GetVnfAdapterImpl: Return Heat Adapter"); - vnfAdapter = vnfImpl; - } - else if (MULTICLOUD_MODE.equalsIgnoreCase(mode)) { - logger.debug("GetVnfAdapterImpl: Return Plugin (multicloud) Adapter"); - vnfAdapter = vnfPluginImpl; - } - else { - // Don't expect this, but default is the HEAT adapter - logger.debug("GetVnfAdapterImpl: Return Default (Heat) Adapter"); - vnfAdapter = vnfImpl; - } - - return vnfAdapter; - } +public class VnfAdapterRestUtils { + private static Logger logger = LoggerFactory.getLogger(VnfAdapterRestUtils.class); + + private static final String HEAT_MODE = "HEAT"; + private static final String CLOUDIFY_MODE = "CLOUDIFY"; + private static final String MULTICLOUD_MODE = "MULTICLOUD"; + + @Autowired + private CloudConfig cloudConfig; + + @Autowired + private MsoVnfCloudifyAdapterImpl cloudifyImpl; + + @Autowired + private MsoVnfAdapterImpl vnfImpl; + + @Autowired + private MsoVnfPluginAdapterImpl vnfPluginImpl; + + /* + * Choose which implementation of VNF Adapter to use, based on the orchestration mode. Currently, the two supported + * orchestrators are HEAT and CLOUDIFY. + */ + public MsoVnfAdapter getVnfAdapterImpl(String mode, String cloudSiteId) { + // First, determine the orchestration mode to use. + // If was explicitly provided as a parameter, use that. Else if specified for the + // cloudsite, use that. Otherwise, the default is the (original) HEAT-based impl. + + logger.debug("Entered GetVnfAdapterImpl: mode=" + mode + ", cloudSite=" + cloudSiteId); + + if (mode == null) { + // Didn't get an explicit mode type requested. + // Use the CloudSite to determine which Impl to use, based on whether the target cloutSite + // has a CloudifyManager assigned to it + Optional<CloudSite> cloudSite = cloudConfig.getCloudSite(cloudSiteId); + if (cloudSite.isPresent()) { + logger.debug("Got CloudSite: " + cloudSite.toString()); + if (cloudConfig.getCloudifyManager(cloudSite.get().getCloudifyId()) != null) { + mode = CLOUDIFY_MODE; + } else if (MULTICLOUD_MODE.equalsIgnoreCase(cloudSite.get().getOrchestrator())) { + mode = MULTICLOUD_MODE; + } else { + mode = HEAT_MODE; + } + } + } + + logger.debug("GetVnfAdapterImpl: mode=" + mode); + + MsoVnfAdapter vnfAdapter = null; + + // TODO: Make this more dynamic (e.g. Service Loader) + if (CLOUDIFY_MODE.equalsIgnoreCase(mode)) { + logger.debug("GetVnfAdapterImpl: Return Cloudify Adapter"); + vnfAdapter = cloudifyImpl; + } else if (HEAT_MODE.equalsIgnoreCase(mode)) { + logger.debug("GetVnfAdapterImpl: Return Heat Adapter"); + vnfAdapter = vnfImpl; + } else if (MULTICLOUD_MODE.equalsIgnoreCase(mode)) { + logger.debug("GetVnfAdapterImpl: Return Plugin (multicloud) Adapter"); + vnfAdapter = vnfPluginImpl; + } else { + // Don't expect this, but default is the HEAT adapter + logger.debug("GetVnfAdapterImpl: Return Default (Heat) Adapter"); + vnfAdapter = vnfImpl; + } + + return vnfAdapter; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestV2.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestV2.java index 4696e43d75..440b0dae0a 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestV2.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestV2.java @@ -25,7 +25,6 @@ package org.onap.so.adapters.vnf; import java.util.Map; - import javax.inject.Provider; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -40,7 +39,6 @@ import javax.ws.rs.core.GenericEntity; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.xml.ws.Holder; - import org.apache.http.HttpStatus; import org.onap.so.adapters.vnf.exceptions.VnfException; import org.onap.so.adapters.vnfrest.CreateVfModuleRequest; @@ -64,7 +62,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -72,646 +69,535 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; /** - * This class services calls to the REST interface for VF Modules (http://host:port/vnfs/rest/v2/vnfs) - * Both XML and JSON can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default. - * For testing, call with cloudSiteId = ___TESTING___ - * To test exceptions, also set tenantId = ___TESTING___ + * This class services calls to the REST interface for VF Modules (http://host:port/vnfs/rest/v2/vnfs) Both XML and JSON + * can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default. For testing, call + * with cloudSiteId = ___TESTING___ To test exceptions, also set tenantId = ___TESTING___ * - * V2 incorporates run-time selection of sub-orchestrator implementation (Heat or Cloudify) - * based on the target cloud. + * V2 incorporates run-time selection of sub-orchestrator implementation (Heat or Cloudify) based on the target cloud. */ @Path("/v2/vnfs") @Api(value = "/v2/vnfs", description = "root of vnf adapters restful web service v2") @Component public class VnfAdapterRestV2 { - private static Logger logger = LoggerFactory.getLogger(VnfAdapterRestV2.class); - private static final String TESTING_KEYWORD = "___TESTING___"; - private static final String RESP=", resp="; - - @Autowired - private VnfAdapterRestUtils vnfAdapterRestUtils; - - @Autowired - private Provider<BpelRestClient> bpelRestClientProvider; - - /* - * URL:http://localhost:8080/vnfs/rest/v2/vnfs/<aaivnfid>/vf-modules/<aaimodid> - * REQUEST: - * {"deleteVfModuleRequest": - {"cloudSiteId": "DAN", - "tenantId": "214b428a1f554c02935e66330f6a5409", - "vnfId": "somevnfid", - "vfModuleId": "somemodid", - "vfModuleStackId": "4e567676-e266-4594-a3a6-131c8a2baf73", - "messageId": "ra.1", - "notificationUrl": "http://localhost:8089/vnfmock", - "skipAAI": true, - "msoRequest": { - "requestId": "ra1", - "serviceInstanceId": "sa1" - }} - } - */ - @DELETE - @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "DeleteVfModule", - response = Response.class, - notes = "Delete an existing vnfModule, DeleteVfModuleRequest JSON is required") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfModule has been successfully deleted"), - @ApiResponse(code = 202, message = "delete vnfModule request has been accepted (async only)"), - @ApiResponse(code = 500, message = "delete vnfModule failed, examine entity object for details") }) - public Response deleteVfModule ( - @ApiParam(value = "aaiVnfId", required = true) - @PathParam("aaiVnfId") String aaiVnfId, - @ApiParam(value = "aaiVfModuleId", required = true) - @PathParam("aaiVfModuleId") String aaiVfModuleId, - @ApiParam(value = "mode", required = true) - @QueryParam("mode") String mode, - @ApiParam(value = "DeleteVfModuleRequest", required = true) - final DeleteVfModuleRequest req) - { - logger.debug("Delete VfModule enter: " + req.toJsonString()); - if (aaiVnfId == null || !aaiVnfId.equals(req.getVnfId())) { - logger.debug("Req rejected - aaiVnfId not provided or doesn't match URL"); - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity("vnfid in URL does not match content") - .build(); - } - if (aaiVfModuleId == null || !aaiVfModuleId.equals(req.getVfModuleId())) { - logger.debug("Req rejected - aaiVfModuleId not provided or doesn't match URL"); - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity("vfModuleId in URL does not match content") - .build(); - } - - DeleteVfModuleTask task = new DeleteVfModuleTask(req, mode); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling delete, send generic failure as sync resp to caller - logger.error("{} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), "deleteVfModule", - ErrorCode.BusinessProcesssError.getValue(), "Exception in deleteVfModule", e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("deleteVNFVolumes exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class DeleteVfModuleTask implements Runnable { - private final DeleteVfModuleRequest req; - private DeleteVfModuleResponse response = null; - private VfModuleExceptionResponse eresp = null; - private boolean sendxml; - private String mode; - - public DeleteVfModuleTask(DeleteVfModuleRequest req, String mode) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - this.mode = mode; - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<DeleteVfModuleResponse>(response) {} - : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - - @Override - public void run() { - try { - String cloudsite = req.getCloudSiteId(); - Holder<Map<String, String>> outputs = new Holder <Map <String, String>> (); - if (cloudsite != null && !cloudsite.equals(TESTING_KEYWORD)) { - //vnfAdapter.deleteVnf (req.getCloudSiteId(), req.getTenantId(), req.getVfModuleStackId(), req.getMsoRequest()); - // Support different Adapter Implementations - MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudsite); - adapter.deleteVfModule (req.getCloudSiteId(), req.getTenantId(), req.getVfModuleStackId(), req.getMsoRequest(), outputs); - } - response = new DeleteVfModuleResponse(req.getVnfId(), req.getVfModuleId(), Boolean.TRUE, req.getMessageId(), outputs.value); - } catch (VnfException e) { - logger.error("{} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), - ErrorCode.BusinessProcesssError.getValue(), "VnfException - " + "Delete VNF Module", e); - eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, req.getMessageId()); - } - if (!req.isSynchronous()) { - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("Delete vfModule exit: code=" + getStatusCode() + RESP + getResponse()); - } - } - - /* - * URL:http://localhost:8080/vnfs/rest/v2/vnfs/<aaiVnfId>/vf-modules/<aaiVfModuleId>?cloudSiteId=DAN&tenantId=vfModule?&skipAAI=TRUE&msoRequest.requestId=ra1&msoRequest.serviceInstanceId=si1&vfModuleName=T2N2S1 - * RESP: - * {"queryVfModuleResponse": { - "vfModuleId": "AvfmodId", - "vfModuleOutputs": {"entry": { - "key": "server_private_ip_1", - "value": "10.100.1.25" - }}, - "vfModuleStackId": "RaaVnf1/abfa8a6d-feb1-40af-aea3-109403b1cf6b", - "vnfId": "AvnfID", - "vnfStatus": "ACTIVE" - }} - */ - @GET - @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "QueryVfModule", - response = Response.class, - notes = "Query an existing vnfModule") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfModule has been successfully queried"), - @ApiResponse(code = 500, message = "query vnfModule failed, examine entity object for details") }) - public Response queryVfModule( - @ApiParam(value = "aaiVnfId", required = true) - @PathParam("aaiVnfId") String aaiVnfId, - @ApiParam(value = "aaiVfModuleId", required = true) - @PathParam("aaiVfModuleId") String aaiVfModuleId, - @ApiParam(value = "cloudSiteId", required = true) - @QueryParam("cloudSiteId") String cloudSiteId, - @ApiParam(value = "tenantId", required = true) - @QueryParam("tenantId") String tenantId, - @ApiParam(value = "vfModuleName", required = true) - @QueryParam("vfModuleName") String vfModuleName, //RAA? Id in doc - @ApiParam(value = "skipAAI", required = true) - @QueryParam("skipAAI") Boolean skipAAI, - @ApiParam(value = "msoRequest.requestId", required = true) - @QueryParam("msoRequest.requestId") String requestId, - @ApiParam(value = "msoRequest.serviceInstanceId", required = true) - @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId, - @ApiParam(value = "mode", required = true) - @QueryParam("mode") String mode) - { - //This request responds synchronously only - logger.debug("Query vfModule enter:" + vfModuleName); - MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId); - - try { - int respStatus = HttpStatus.SC_OK; - QueryVfModuleResponse qryResp = new QueryVfModuleResponse(aaiVnfId, aaiVfModuleId, null, null, null); - Holder<Boolean> vnfExists = new Holder<Boolean>(); - Holder<String> vfModuleId = new Holder<String>(); - Holder<VnfStatus> status = new Holder<VnfStatus>(); - Holder<Map<String, String>> outputs = new Holder <Map <String, String>> (); - - // Support different Adapter Implementations - MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudSiteId); - adapter.queryVnf (cloudSiteId, tenantId, vfModuleName, msoRequest, vnfExists, vfModuleId, status, outputs); - - if (!vnfExists.value) { - logger.debug("vfModule not found"); - respStatus = HttpStatus.SC_NOT_FOUND; - } else { - logger.debug("vfModule found" + vfModuleId.value + ", status=" + status.value); - qryResp.setVfModuleId(vfModuleId.value); - qryResp.setVnfStatus(status.value); - qryResp.setVfModuleOutputs(outputs.value); - } - logger.debug ("Query vfModule exit"); - return Response - .status(respStatus) - .entity(new GenericEntity<QueryVfModuleResponse>(qryResp) {}) - .build(); - } catch (VnfException e) { - logger.error("{} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, "queryVfModule", - ErrorCode.BusinessProcesssError.getValue(), "VnfException - queryVfModule", e); - VfModuleExceptionResponse excResp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.FALSE, null); - return Response - .status(HttpStatus.SC_INTERNAL_SERVER_ERROR) - .entity(new GenericEntity<VfModuleExceptionResponse>(excResp) {}) - .build(); - } - } - - /*URL: http://localhost:8080/vnfs/rest/v2/vnfs/<aaivnfid>/vf-modules - *REQUEST: - * {"createVfModuleRequest": - {"cloudSiteId": "DAN", - "tenantId": "214b428a1f554c02935e66330f6a5409", - "vnfId": "somevnfid", - "vfModuleId": "somemodid", - "vfModuleName": "RaaVnf1", - "vnfType": "ApacheVnf", - "vfModuleParams": {"entry": [ - {"key": "network_id", - "value": "59ed7b41-2983-413f-ba93-e7d437433916"}, - {"key": "subnet_id", - "value": "086c9298-5c57-49b7-bb2b-6fd5730c5d92"}, - {"key": "server_name_0", - "value": "RaaVnf1"} - ]}, - "failIfExists": true, - "messageId": "ra.1", - "notificationUrl": "http://localhost:8089/vnfmock", - "skipAAI": true, - "msoRequest": { - "requestId": "ra1", - "serviceInstanceId": "sa1" - }} - } - */ - @POST - @Path("{aaiVnfId}/vf-modules") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "CreateVfModule", - response = Response.class, - notes = "Create a vnfModule") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfModule has been successfully created"), - @ApiResponse(code = 202, message = "create vnfModule request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "create vnfModule failed, examine entity object for details") }) - public Response createVfModule( - @ApiParam(value = "aaiVnfId", required = true) - @PathParam("aaiVnfId") String aaiVnfId, - @ApiParam(value = "mode", required = true) - @QueryParam("mode") String mode, - @ApiParam(value = "CreateVfModuleRequest", required = true) - final CreateVfModuleRequest req) - { - logger.debug("Create VfModule enter inside VnfAdapterRest: " + req.toJsonString()); - if (aaiVnfId == null || !aaiVnfId.equals(req.getVnfId())) { - logger.debug("Req rejected - aaiVnfId not provided or doesn't match URL"); - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity("vnfid in URL does not match content") - .build(); - } - - CreateVfModuleTask task = new CreateVfModuleTask(req, mode); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), "createVfModule", - ErrorCode.BusinessProcesssError.getValue(), "Exception - createVfModule", e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("createVfModule exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class CreateVfModuleTask implements Runnable { - private final CreateVfModuleRequest req; - private CreateVfModuleResponse response = null; - private VfModuleExceptionResponse eresp = null; - private boolean sendxml; - private String mode; - - public CreateVfModuleTask(CreateVfModuleRequest req, String mode) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - this.mode = mode; - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<CreateVfModuleResponse>(response) {} - : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - - @Override - public void run() { - logger.debug("CreateVfModuleTask start"); - try { - // Synchronous Web Service Outputs - Holder <String> vfModuleStackId = new Holder <String> (); - Holder <Map <String, String>> outputs = new Holder <Map <String, String>> (); - Holder <VnfRollback> vnfRollback = new Holder <VnfRollback> (); - String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); - logger.debug("completeVnfVfModuleType=" + completeVnfVfModuleType); - - String cloudsiteId = req.getCloudSiteId(); - if (cloudsiteId != null && cloudsiteId.equals(TESTING_KEYWORD)) { - String tenant = req.getTenantId(); - if (tenant != null && tenant.equals(TESTING_KEYWORD)) { - throw new VnfException("testing."); - } - vnfRollback.value = new VnfRollback(req.getVnfId(), tenant, cloudsiteId, - true, false, new MsoRequest("reqid", "svcid"), - req.getVolumeGroupId(), req.getVolumeGroupId(), req.getRequestType(), req.getModelCustomizationUuid()); - vfModuleStackId.value = "479D3D8B-6360-47BC-AB75-21CC91981484"; - outputs.value = VolumeAdapterRest.testMap(); - } else { - // Support different Adapter Implementations - MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudsiteId); - adapter.createVfModule(req.getCloudSiteId(), - req.getTenantId(), - completeVnfVfModuleType, - req.getVnfVersion(), - req.getVnfId(), - req.getVfModuleName(), - req.getVfModuleId(), - req.getRequestType(), - req.getVolumeGroupStackId(), - req.getBaseVfModuleStackId(), - req.getModelCustomizationUuid(), - req.getVfModuleParams(), - req.getFailIfExists(), - req.getBackout(), - req.getEnableBridge(), - req.getMsoRequest(), - vfModuleStackId, - outputs, - vnfRollback); - } - VfModuleRollback modRollback = new VfModuleRollback(vnfRollback.value, req.getVfModuleId(), vfModuleStackId.value, req.getMessageId()); - response = new CreateVfModuleResponse(req.getVnfId(), req.getVfModuleId(), - vfModuleStackId.value, Boolean.TRUE, outputs.value, modRollback, req.getMessageId()); - } catch (VnfException e) { - eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, req.getMessageId()); - } - if (!req.isSynchronous()) { - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("CreateVfModuleTask exit: code=" + getStatusCode() + RESP + getResponse()); - } - } - - @PUT - @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "UpdateVfModule", - response = Response.class, - notes = "Update an existing vnfModule") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfModule has been successfully updated"), - @ApiResponse(code = 202, message = "update vnfModule request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "update vnfModule failed, examine entity object for details") }) - public Response updateVfModule( - @ApiParam(value = "aaiVnfId", required = true) - @PathParam("aaiVnfId") String aaiVnfId, - @ApiParam(value = "aaiVfModuleId", required = true) - @PathParam("aaiVfModuleId") String aaiVfModuleId, - @ApiParam(value = "mode", required = true) - @QueryParam("mode") String mode, - @ApiParam(value = "UpdateVfModuleRequest", required = true) - final UpdateVfModuleRequest req) - { - logger.debug("Update VfModule enter: " + req.toJsonString()); - UpdateVfModulesTask task = new UpdateVfModulesTask(req, mode); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} {} {}", MessageEnum.RA_UPDATE_VNF_ERR.toString(), "updateVfModule", - ErrorCode.BusinessProcesssError.getValue(), "Exception - updateVfModule", e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("updateVfModules exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class UpdateVfModulesTask implements Runnable { - private final UpdateVfModuleRequest req; - private UpdateVfModuleResponse response = null; - private VfModuleExceptionResponse eresp = null; - private boolean sendxml; - private String mode; - - public UpdateVfModulesTask(UpdateVfModuleRequest req, String mode) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - this.mode = mode; - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<UpdateVfModuleResponse>(response) {} - : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - try { - //MsoVnfAdapter vnfAdapter = new MsoVnfAdapterImpl (msoPropertiesFactory, cloudConfigFactory); - - // Synchronous Web Service Outputs - Holder <String> vfModuleStackId = new Holder <String> (); - Holder <Map <String, String>> outputs = new Holder <Map <String, String>> (); - Holder <VnfRollback> vnfRollback = new Holder <VnfRollback> (); - String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); - logger.debug("in updateVf - completeVnfVfModuleType=" + completeVnfVfModuleType); - - String cloudsiteId = req.getCloudSiteId(); - - // Support different Adapter Implementations - MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudsiteId); - adapter.updateVfModule (req.getCloudSiteId(), - req.getTenantId(), - completeVnfVfModuleType, - req.getVnfVersion(), - req.getVfModuleName(), - req.getRequestType(), - req.getVolumeGroupStackId(), - req.getBaseVfModuleId(), - req.getVfModuleStackId(), - req.getModelCustomizationUuid(), - req.getVfModuleParams(), - req.getMsoRequest(), - outputs, - vnfRollback); - - response = new UpdateVfModuleResponse(req.getVnfId(), req.getVfModuleId(), - vfModuleStackId.value, outputs.value, req.getMessageId()); - } catch (VnfException e) { - eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost (getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("Update VfModule exit: code=" + getStatusCode() + RESP + getResponse()); - } - } - /* - * URL:http://localhost:8080/vnfs/rest/v2/vnfs/<aaivnfid>/vf-modules/<aaimodid>/rollback - * REQUEST: - * {"deleteVfModuleRequest": - {"cloudSiteId": "DAN", - "tenantId": "214b428a1f554c02935e66330f6a5409", - "vnfId": "somevnfid", - "vfModuleId": "somemodid", - "vfModuleStackId": "4e567676-e266-4594-a3a6-131c8a2baf73", - "messageId": "ra.1", - "notificationUrl": "http://localhost:8089/vnfmock", - "skipAAI": true, - "msoRequest": { - "requestId": "ra1", - "serviceInstanceId": "sa1" - }} - } - */ - @DELETE - @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}/rollback") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "RollbackVfModule", - response = Response.class, - notes = "Rollback an existing vnfModule") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfModule has been successfully rolled back"), - @ApiResponse(code = 202, message = "rollback vnfModule request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "rollback vnfModule failed, examine entity object for details") }) - public Response rollbackVfModule ( - @ApiParam(value = "aaiVnfId", required = true) - @PathParam("aaiVnfId") String aaiVnfId, - @ApiParam(value = "aaiVfModuleId", required = true) - @PathParam("aaiVfModuleId") String aaiVfModuleId, - @ApiParam(value = "RollbackVfModuleRequest", required = true) - //@QueryParam("rollback") String rollback, - final RollbackVfModuleRequest req) - { - logger.debug("Rollback VfModule enter: " + req.toJsonString()); - RollbackVfModulesTask task = new RollbackVfModulesTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} {} {}", MessageEnum.RA_ROLLBACK_VNF_ERR.toString(), "rollbackVfModule", - ErrorCode.BusinessProcesssError.getValue(), "Exception - rollbackVfModule", e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("rollbackVfModule exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class RollbackVfModulesTask implements Runnable { - private final RollbackVfModuleRequest req; - private RollbackVfModuleResponse response = null; - private VfModuleExceptionResponse eresp = null; - private boolean sendxml; - - public RollbackVfModulesTask(RollbackVfModuleRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<RollbackVfModuleResponse>(response) {} - : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - try { - VfModuleRollback vmr = req.getVfModuleRollback(); - VnfRollback vrb = new VnfRollback( - vmr.getVfModuleStackId(), vmr.getTenantId(), vmr.getCloudSiteId(), true, vmr.isVfModuleCreated(), - vmr.getMsoRequest(), null, null, null, null); - - // Support multiple adapter implementations - MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl (vmr.getMode(), vmr.getCloudSiteId()); - adapter.rollbackVnf (vrb); - - response = new RollbackVfModuleResponse(Boolean.TRUE, req.getMessageId()); - } catch (VnfException e) { - logger.error("{} {} {}", MessageEnum.RA_ROLLBACK_VNF_ERR.toString(), - ErrorCode.BusinessProcesssError.getValue(), "Exception - rollbackVfModule", e); - eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, false, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost (getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("RollbackVfModulesTask exit: code=" + getStatusCode() + RESP + getResponse()); - } - } + private static Logger logger = LoggerFactory.getLogger(VnfAdapterRestV2.class); + private static final String TESTING_KEYWORD = "___TESTING___"; + private static final String RESP = ", resp="; + + @Autowired + private VnfAdapterRestUtils vnfAdapterRestUtils; + + @Autowired + private Provider<BpelRestClient> bpelRestClientProvider; + + /* + * URL:http://localhost:8080/vnfs/rest/v2/vnfs/<aaivnfid>/vf-modules/<aaimodid> REQUEST: {"deleteVfModuleRequest": + * {"cloudSiteId": "DAN", "tenantId": "214b428a1f554c02935e66330f6a5409", "vnfId": "somevnfid", "vfModuleId": + * "somemodid", "vfModuleStackId": "4e567676-e266-4594-a3a6-131c8a2baf73", "messageId": "ra.1", "notificationUrl": + * "http://localhost:8089/vnfmock", "skipAAI": true, "msoRequest": { "requestId": "ra1", "serviceInstanceId": "sa1" + * }} } + */ + @DELETE + @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "DeleteVfModule", response = Response.class, + notes = "Delete an existing vnfModule, DeleteVfModuleRequest JSON is required") + @ApiResponses({@ApiResponse(code = 200, message = "vnfModule has been successfully deleted"), + @ApiResponse(code = 202, message = "delete vnfModule request has been accepted (async only)"), + @ApiResponse(code = 500, message = "delete vnfModule failed, examine entity object for details")}) + public Response deleteVfModule( + @ApiParam(value = "aaiVnfId", required = true) @PathParam("aaiVnfId") String aaiVnfId, + @ApiParam(value = "aaiVfModuleId", required = true) @PathParam("aaiVfModuleId") String aaiVfModuleId, + @ApiParam(value = "mode", required = true) @QueryParam("mode") String mode, + @ApiParam(value = "DeleteVfModuleRequest", required = true) final DeleteVfModuleRequest req) { + logger.debug("Delete VfModule enter: " + req.toJsonString()); + if (aaiVnfId == null || !aaiVnfId.equals(req.getVnfId())) { + logger.debug("Req rejected - aaiVnfId not provided or doesn't match URL"); + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN) + .entity("vnfid in URL does not match content").build(); + } + if (aaiVfModuleId == null || !aaiVfModuleId.equals(req.getVfModuleId())) { + logger.debug("Req rejected - aaiVfModuleId not provided or doesn't match URL"); + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN) + .entity("vfModuleId in URL does not match content").build(); + } + + DeleteVfModuleTask task = new DeleteVfModuleTask(req, mode); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling delete, send generic failure as sync resp to caller + logger.error("{} {} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), "deleteVfModule", + ErrorCode.BusinessProcesssError.getValue(), "Exception in deleteVfModule", e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("deleteVNFVolumes exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class DeleteVfModuleTask implements Runnable { + private final DeleteVfModuleRequest req; + private DeleteVfModuleResponse response = null; + private VfModuleExceptionResponse eresp = null; + private boolean sendxml; + private String mode; + + public DeleteVfModuleTask(DeleteVfModuleRequest req, String mode) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + this.mode = mode; + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<DeleteVfModuleResponse>(response) {} + : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + try { + String cloudsite = req.getCloudSiteId(); + Holder<Map<String, String>> outputs = new Holder<Map<String, String>>(); + if (cloudsite != null && !cloudsite.equals(TESTING_KEYWORD)) { + // vnfAdapter.deleteVnf (req.getCloudSiteId(), req.getTenantId(), req.getVfModuleStackId(), + // req.getMsoRequest()); + // Support different Adapter Implementations + MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudsite); + adapter.deleteVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(), + req.getVfModuleStackId(), req.getMsoRequest(), outputs); + } + response = new DeleteVfModuleResponse(req.getVnfId(), req.getVfModuleId(), Boolean.TRUE, + req.getMessageId(), outputs.value); + } catch (VnfException e) { + logger.error("{} {} {}", MessageEnum.RA_DELETE_VNF_ERR.toString(), + ErrorCode.BusinessProcesssError.getValue(), "VnfException - " + "Delete VNF Module", e); + eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, + req.getMessageId()); + } + if (!req.isSynchronous()) { + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("Delete vfModule exit: code=" + getStatusCode() + RESP + getResponse()); + } + } + + /* + * URL:http://localhost:8080/vnfs/rest/v2/vnfs/<aaiVnfId>/vf-modules/<aaiVfModuleId>?cloudSiteId=DAN&tenantId= + * vfModule?&skipAAI=TRUE&msoRequest.requestId=ra1&msoRequest.serviceInstanceId=si1&vfModuleName=T2N2S1 RESP: + * {"queryVfModuleResponse": { "vfModuleId": "AvfmodId", "vfModuleOutputs": {"entry": { "key": + * "server_private_ip_1", "value": "10.100.1.25" }}, "vfModuleStackId": + * "RaaVnf1/abfa8a6d-feb1-40af-aea3-109403b1cf6b", "vnfId": "AvnfID", "vnfStatus": "ACTIVE" }} + */ + @GET + @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "QueryVfModule", response = Response.class, notes = "Query an existing vnfModule") + @ApiResponses({@ApiResponse(code = 200, message = "vnfModule has been successfully queried"), + @ApiResponse(code = 500, message = "query vnfModule failed, examine entity object for details")}) + public Response queryVfModule(@ApiParam(value = "aaiVnfId", required = true) @PathParam("aaiVnfId") String aaiVnfId, + @ApiParam(value = "aaiVfModuleId", required = true) @PathParam("aaiVfModuleId") String aaiVfModuleId, + @ApiParam(value = "cloudSiteId", required = true) @QueryParam("cloudSiteId") String cloudSiteId, + @ApiParam(value = "cloudOwner", required = true) @QueryParam("cloudOwner") String cloudOwner, + @ApiParam(value = "tenantId", required = true) @QueryParam("tenantId") String tenantId, + @ApiParam(value = "vfModuleName", required = true) @QueryParam("vfModuleName") String vfModuleName, // RAA? + // Id in + // doc + @ApiParam(value = "skipAAI", required = true) @QueryParam("skipAAI") Boolean skipAAI, + @ApiParam(value = "msoRequest.requestId", + required = true) @QueryParam("msoRequest.requestId") String requestId, + @ApiParam(value = "msoRequest.serviceInstanceId", + required = true) @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId, + @ApiParam(value = "mode", required = true) @QueryParam("mode") String mode) { + // This request responds synchronously only + logger.debug("Query vfModule enter:" + vfModuleName); + MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId); + + try { + int respStatus = HttpStatus.SC_OK; + QueryVfModuleResponse qryResp = new QueryVfModuleResponse(aaiVnfId, aaiVfModuleId, null, null, null); + Holder<Boolean> vnfExists = new Holder<Boolean>(); + Holder<String> vfModuleId = new Holder<String>(); + Holder<VnfStatus> status = new Holder<VnfStatus>(); + Holder<Map<String, String>> outputs = new Holder<Map<String, String>>(); + + // Support different Adapter Implementations + MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudSiteId); + adapter.queryVnf(cloudSiteId, cloudOwner, tenantId, vfModuleName, msoRequest, vnfExists, vfModuleId, status, + outputs); + + if (!vnfExists.value) { + logger.debug("vfModule not found"); + respStatus = HttpStatus.SC_NOT_FOUND; + } else { + logger.debug("vfModule found" + vfModuleId.value + ", status=" + status.value); + qryResp.setVfModuleId(vfModuleId.value); + qryResp.setVnfStatus(status.value); + qryResp.setVfModuleOutputs(outputs.value); + } + logger.debug("Query vfModule exit"); + return Response.status(respStatus).entity(new GenericEntity<QueryVfModuleResponse>(qryResp) {}).build(); + } catch (VnfException e) { + logger.error("{} {} {} {} {}", MessageEnum.RA_QUERY_VNF_ERR.toString(), vfModuleName, "queryVfModule", + ErrorCode.BusinessProcesssError.getValue(), "VnfException - queryVfModule", e); + VfModuleExceptionResponse excResp = + new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.FALSE, null); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR) + .entity(new GenericEntity<VfModuleExceptionResponse>(excResp) {}).build(); + } + } + + /* + * URL: http://localhost:8080/vnfs/rest/v2/vnfs/<aaivnfid>/vf-modules REQUEST: {"createVfModuleRequest": + * {"cloudSiteId": "DAN", "tenantId": "214b428a1f554c02935e66330f6a5409", "vnfId": "somevnfid", "vfModuleId": + * "somemodid", "vfModuleName": "RaaVnf1", "vnfType": "ApacheVnf", "vfModuleParams": {"entry": [ {"key": + * "network_id", "value": "59ed7b41-2983-413f-ba93-e7d437433916"}, {"key": "subnet_id", "value": + * "086c9298-5c57-49b7-bb2b-6fd5730c5d92"}, {"key": "server_name_0", "value": "RaaVnf1"} ]}, "failIfExists": true, + * "messageId": "ra.1", "notificationUrl": "http://localhost:8089/vnfmock", "skipAAI": true, "msoRequest": { + * "requestId": "ra1", "serviceInstanceId": "sa1" }} } + */ + @POST + @Path("{aaiVnfId}/vf-modules") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "CreateVfModule", response = Response.class, notes = "Create a vnfModule") + @ApiResponses({@ApiResponse(code = 200, message = "vnfModule has been successfully created"), + @ApiResponse(code = 202, message = "create vnfModule request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "create vnfModule failed, examine entity object for details")}) + public Response createVfModule( + @ApiParam(value = "aaiVnfId", required = true) @PathParam("aaiVnfId") String aaiVnfId, + @ApiParam(value = "mode", required = true) @QueryParam("mode") String mode, + @ApiParam(value = "CreateVfModuleRequest", required = true) final CreateVfModuleRequest req) { + logger.debug("Create VfModule enter inside VnfAdapterRest: " + req.toJsonString()); + if (aaiVnfId == null || !aaiVnfId.equals(req.getVnfId())) { + logger.debug("Req rejected - aaiVnfId not provided or doesn't match URL"); + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN) + .entity("vnfid in URL does not match content").build(); + } + + CreateVfModuleTask task = new CreateVfModuleTask(req, mode); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} {} {}", MessageEnum.RA_CREATE_VNF_ERR.toString(), "createVfModule", + ErrorCode.BusinessProcesssError.getValue(), "Exception - createVfModule", e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("createVfModule exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class CreateVfModuleTask implements Runnable { + private final CreateVfModuleRequest req; + private CreateVfModuleResponse response = null; + private VfModuleExceptionResponse eresp = null; + private boolean sendxml; + private String mode; + + public CreateVfModuleTask(CreateVfModuleRequest req, String mode) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + this.mode = mode; + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<CreateVfModuleResponse>(response) {} + : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("CreateVfModuleTask start"); + try { + // Synchronous Web Service Outputs + Holder<String> vfModuleStackId = new Holder<String>(); + Holder<Map<String, String>> outputs = new Holder<Map<String, String>>(); + Holder<VnfRollback> vnfRollback = new Holder<VnfRollback>(); + String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); + logger.debug("completeVnfVfModuleType=" + completeVnfVfModuleType); + + String cloudsiteId = req.getCloudSiteId(); + String cloudOwner = req.getCloudOwner(); + if (cloudsiteId != null && cloudsiteId.equals(TESTING_KEYWORD)) { + String tenant = req.getTenantId(); + if (tenant != null && tenant.equals(TESTING_KEYWORD)) { + throw new VnfException("testing."); + } + vnfRollback.value = new VnfRollback(req.getVnfId(), tenant, cloudOwner, cloudsiteId, true, false, + new MsoRequest("reqid", "svcid"), req.getVolumeGroupId(), req.getVolumeGroupId(), + req.getRequestType(), req.getModelCustomizationUuid()); + vfModuleStackId.value = "479D3D8B-6360-47BC-AB75-21CC91981484"; + outputs.value = VolumeAdapterRest.testMap(); + } else { + // Support different Adapter Implementations + MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudsiteId); + adapter.createVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(), + completeVnfVfModuleType, req.getVnfVersion(), req.getVnfId(), req.getVfModuleName(), + req.getVfModuleId(), req.getRequestType(), req.getVolumeGroupStackId(), + req.getBaseVfModuleStackId(), req.getModelCustomizationUuid(), req.getVfModuleParams(), + req.getFailIfExists(), req.getBackout(), req.getEnableBridge(), req.getMsoRequest(), + vfModuleStackId, outputs, vnfRollback); + } + VfModuleRollback modRollback = new VfModuleRollback(vnfRollback.value, req.getVfModuleId(), + vfModuleStackId.value, req.getMessageId()); + response = new CreateVfModuleResponse(req.getVnfId(), req.getVfModuleId(), vfModuleStackId.value, + Boolean.TRUE, outputs.value, modRollback, req.getMessageId()); + } catch (VnfException e) { + eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, + req.getMessageId()); + } + if (!req.isSynchronous()) { + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("CreateVfModuleTask exit: code=" + getStatusCode() + RESP + getResponse()); + } + } + + @PUT + @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "UpdateVfModule", response = Response.class, notes = "Update an existing vnfModule") + @ApiResponses({@ApiResponse(code = 200, message = "vnfModule has been successfully updated"), + @ApiResponse(code = 202, message = "update vnfModule request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "update vnfModule failed, examine entity object for details")}) + public Response updateVfModule( + @ApiParam(value = "aaiVnfId", required = true) @PathParam("aaiVnfId") String aaiVnfId, + @ApiParam(value = "aaiVfModuleId", required = true) @PathParam("aaiVfModuleId") String aaiVfModuleId, + @ApiParam(value = "mode", required = true) @QueryParam("mode") String mode, + @ApiParam(value = "UpdateVfModuleRequest", required = true) final UpdateVfModuleRequest req) { + logger.debug("Update VfModule enter: " + req.toJsonString()); + UpdateVfModulesTask task = new UpdateVfModulesTask(req, mode); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} {} {}", MessageEnum.RA_UPDATE_VNF_ERR.toString(), "updateVfModule", + ErrorCode.BusinessProcesssError.getValue(), "Exception - updateVfModule", e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("updateVfModules exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class UpdateVfModulesTask implements Runnable { + private final UpdateVfModuleRequest req; + private UpdateVfModuleResponse response = null; + private VfModuleExceptionResponse eresp = null; + private boolean sendxml; + private String mode; + + public UpdateVfModulesTask(UpdateVfModuleRequest req, String mode) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + this.mode = mode; + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<UpdateVfModuleResponse>(response) {} + : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + try { + // MsoVnfAdapter vnfAdapter = new MsoVnfAdapterImpl (msoPropertiesFactory, cloudConfigFactory); + + // Synchronous Web Service Outputs + Holder<String> vfModuleStackId = new Holder<String>(); + Holder<Map<String, String>> outputs = new Holder<Map<String, String>>(); + Holder<VnfRollback> vnfRollback = new Holder<VnfRollback>(); + String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); + logger.debug("in updateVf - completeVnfVfModuleType=" + completeVnfVfModuleType); + + String cloudsiteId = req.getCloudSiteId(); + + // Support different Adapter Implementations + MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudsiteId); + adapter.updateVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(), + completeVnfVfModuleType, req.getVnfVersion(), req.getVfModuleName(), req.getRequestType(), + req.getVolumeGroupStackId(), req.getBaseVfModuleId(), req.getVfModuleStackId(), + req.getModelCustomizationUuid(), req.getVfModuleParams(), req.getMsoRequest(), outputs, + vnfRollback); + + response = new UpdateVfModuleResponse(req.getVnfId(), req.getVfModuleId(), vfModuleStackId.value, + outputs.value, req.getMessageId()); + } catch (VnfException e) { + eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.TRUE, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("Update VfModule exit: code=" + getStatusCode() + RESP + getResponse()); + } + } + + /* + * URL:http://localhost:8080/vnfs/rest/v2/vnfs/<aaivnfid>/vf-modules/<aaimodid>/rollback REQUEST: + * {"deleteVfModuleRequest": {"cloudSiteId": "DAN", "tenantId": "214b428a1f554c02935e66330f6a5409", "vnfId": + * "somevnfid", "vfModuleId": "somemodid", "vfModuleStackId": "4e567676-e266-4594-a3a6-131c8a2baf73", "messageId": + * "ra.1", "notificationUrl": "http://localhost:8089/vnfmock", "skipAAI": true, "msoRequest": { "requestId": "ra1", + * "serviceInstanceId": "sa1" }} } + */ + @DELETE + @Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}/rollback") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "RollbackVfModule", response = Response.class, notes = "Rollback an existing vnfModule") + @ApiResponses({@ApiResponse(code = 200, message = "vnfModule has been successfully rolled back"), + @ApiResponse(code = 202, + message = "rollback vnfModule request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "rollback vnfModule failed, examine entity object for details")}) + public Response rollbackVfModule( + @ApiParam(value = "aaiVnfId", required = true) @PathParam("aaiVnfId") String aaiVnfId, + @ApiParam(value = "aaiVfModuleId", required = true) @PathParam("aaiVfModuleId") String aaiVfModuleId, + @ApiParam(value = "RollbackVfModuleRequest", required = true) + // @QueryParam("rollback") String rollback, + final RollbackVfModuleRequest req) { + logger.debug("Rollback VfModule enter: " + req.toJsonString()); + RollbackVfModulesTask task = new RollbackVfModulesTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} {} {}", MessageEnum.RA_ROLLBACK_VNF_ERR.toString(), "rollbackVfModule", + ErrorCode.BusinessProcesssError.getValue(), "Exception - rollbackVfModule", e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("rollbackVfModule exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class RollbackVfModulesTask implements Runnable { + private final RollbackVfModuleRequest req; + private RollbackVfModuleResponse response = null; + private VfModuleExceptionResponse eresp = null; + private boolean sendxml; + + public RollbackVfModulesTask(RollbackVfModuleRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<RollbackVfModuleResponse>(response) {} + : new GenericEntity<VfModuleExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + try { + VfModuleRollback vmr = req.getVfModuleRollback(); + VnfRollback vrb = new VnfRollback(vmr.getVfModuleStackId(), vmr.getTenantId(), vmr.getCloudOwner(), + vmr.getCloudSiteId(), true, vmr.isVfModuleCreated(), vmr.getMsoRequest(), null, null, null, + null); + + // Support multiple adapter implementations + MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl(vmr.getMode(), vmr.getCloudSiteId()); + adapter.rollbackVnf(vrb); + + response = new RollbackVfModuleResponse(Boolean.TRUE, req.getMessageId()); + } catch (VnfException e) { + logger.error("{} {} {}", MessageEnum.RA_ROLLBACK_VNF_ERR.toString(), + ErrorCode.BusinessProcesssError.getValue(), "Exception - rollbackVfModule", e); + eresp = new VfModuleExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, false, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("RollbackVfModulesTask exit: code=" + getStatusCode() + RESP + getResponse()); + } + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRest.java index bdc93f675b..c02a872a85 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRest.java @@ -71,10 +71,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** - * This class services calls to the REST interface for VNF Volumes (http://host:port/vnfs/rest/v1/volume-groups) - * Both XML and JSON can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default. - * For testing, call with cloudSiteId = ___TESTING___ - * To test exceptions, also set tenantId = ___TESTING___ + * This class services calls to the REST interface for VNF Volumes (http://host:port/vnfs/rest/v1/volume-groups) Both + * XML and JSON can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default. For + * testing, call with cloudSiteId = ___TESTING___ To test exceptions, also set tenantId = ___TESTING___ */ @Path("/v1/volume-groups") @Api(value = "/v1/volume-groups", description = "root of volume-groups adapters restful web service") @@ -82,575 +81,524 @@ import org.springframework.stereotype.Component; public class VolumeAdapterRest { private static final Logger logger = LoggerFactory.getLogger(VolumeAdapterRest.class); - private static final String TESTING_KEYWORD = "___TESTING___"; - private static final String EXCEPTION="Exception :"; - private static final String RESP=", resp="; - private static final String VOLUME_GROUPID_IN_URL_DOESNT_MATCH_CONTENT="VolumeGroupId in URL does not match content"; - @Autowired - private MsoVnfAdapterImpl vnfAdapter; - - @Autowired - private Provider<BpelRestClient> bpelRestClientProvider; - - @POST - @Path("") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "CreateVNFVolumes", - response = Response.class, - notes = "Create a new vnfVolume") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfVolume has been successfully created"), - @ApiResponse(code = 202, message = "create vnfVolume request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "create vnfVolume failed, examine entity object for details") }) - public Response createVNFVolumes( - @ApiParam(value = "CreateVolumeGroupRequest", required = true) - final CreateVolumeGroupRequest req - ) { - logger.debug("createVNFVolumes enter: {}", req.toJsonString()); - CreateVNFVolumesTask task = new CreateVNFVolumesTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception - createVNFVolumes: ", MessageEnum.RA_CREATE_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("createVNFVolumes exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class CreateVNFVolumesTask implements Runnable { - private final CreateVolumeGroupRequest req; - private CreateVolumeGroupResponse response = null; - private VolumeGroupExceptionResponse eresp = null; - private boolean sendxml; - - public CreateVNFVolumesTask(CreateVolumeGroupRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<CreateVolumeGroupResponse>(response) {} - : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("CreateVFModule VolumesTask start"); - try { - // Synchronous Web Service Outputs - Holder<String> stackId = new Holder<>(); - Holder<Map<String, String>> outputs = new Holder<>(); - Holder<VnfRollback> vnfRollback = new Holder<>(); - String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); - logger.debug("in createVfModuleVolumes - completeVnfVfModuleType={}", completeVnfVfModuleType); - - String cloudsite = req.getCloudSiteId(); - if (cloudsite != null && cloudsite.equals(TESTING_KEYWORD)) { - String tenant = req.getTenantId(); - if (tenant != null && tenant.equals(TESTING_KEYWORD)) { - throw new VnfException("testing."); - } - stackId.value = "479D3D8B-6360-47BC-AB75-21CC91981484"; - outputs.value = testMap(); - } else { -// vnfAdapter.createVnf( -// req.getCloudSiteId(), -// req.getTenantId(), -// req.getVnfType(), -// req.getVnfVersion(), -// req.getVolumeGroupName(), -// "VOLUME", // request type is VOLUME -// null, // not sure about this -// req.getVolumeGroupParams(), -// req.getFailIfExists(), -// req.getSuppressBackout(), -// req.getMsoRequest(), -// stackId, -// outputs, -// vnfRollback); - vnfAdapter.createVfModule( - req.getCloudSiteId(), //cloudSiteId, - req.getTenantId(), //tenantId, - //req.getVnfType(), //vnfType, - completeVnfVfModuleType, - req.getVnfVersion(), //vnfVersion, - "", // genericVnfId - req.getVolumeGroupName(), //vnfName, - "", // vfModuleid - "VOLUME", //requestType, - null, //volumeGroupHeatStackId, - null, //baseVfHeatStackId, - req.getModelCustomizationUuid(), - req.getVolumeGroupParams(), //inputs, - req.getFailIfExists(), //failIfExists, - req.getSuppressBackout(), //backout, - req.getEnableBridge(), - req.getMsoRequest(), // msoRequest, - stackId, - outputs, - vnfRollback); - } - VolumeGroupRollback rb = new VolumeGroupRollback( - req.getVolumeGroupId(), - stackId.value, - true, // TODO boolean volumeGroupCreated, when would it be false? - req.getTenantId(), - req.getCloudSiteId(), - req.getMsoRequest(), - req.getMessageId()); - response = new CreateVolumeGroupResponse( - req.getVolumeGroupId(), - stackId.value, - true, // TODO boolean volumeGroupCreated, when would it be false? - outputs.value, - rb, - req.getMessageId()); - } catch (VnfException e) { - logger.debug(EXCEPTION, e); - eresp = new VolumeGroupExceptionResponse( - e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("CreateVFModule VolumesTask exit: code={} {} {}", getStatusCode(), RESP, getResponse()); - } - } - - @DELETE - @Path("{aaiVolumeGroupId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "DeleteVNFVolumes", - response = Response.class, - notes = "Delete an existing vnfVolume") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfVolume has been successfully deleted"), - @ApiResponse(code = 202, message = "delete vnfVolume request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "delete vnfVolume failed, examine entity object for details") }) - public Response deleteVNFVolumes( - @ApiParam(value = "aaiVolumeGroupId", required = true) - @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, - @ApiParam(value = "DeleteVolumeGroupRequest", required = true) - final DeleteVolumeGroupRequest req - ) - { - logger.debug("deleteVNFVolumes enter: {}", req.toJsonString()); - if (aaiVolumeGroupId == null || !aaiVolumeGroupId.equals(req.getVolumeGroupId())) { - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity(VOLUME_GROUPID_IN_URL_DOESNT_MATCH_CONTENT) - .build(); - } - DeleteVNFVolumesTask task = new DeleteVNFVolumesTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception - deleteVNFVolumes: ", MessageEnum.RA_DELETE_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("deleteVNFVolumes exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class DeleteVNFVolumesTask implements Runnable { - private final DeleteVolumeGroupRequest req; - private DeleteVolumeGroupResponse response = null; - private VolumeGroupExceptionResponse eresp = null; - private boolean sendxml; - - public DeleteVNFVolumesTask(DeleteVolumeGroupRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<DeleteVolumeGroupResponse>(response) {} - : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("DeleteVNFVolumesTask start"); - try { - if (!req.getCloudSiteId().equals(TESTING_KEYWORD)) { - vnfAdapter.deleteVnf(req.getCloudSiteId(), req.getTenantId(), req.getVolumeGroupStackId(), req.getMsoRequest()); - } - response = new DeleteVolumeGroupResponse(true, req.getMessageId()); - } catch (VnfException e) { - logger.debug(EXCEPTION, e); - eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("DeleteVNFVolumesTask exit: code={} {} {}", getStatusCode(), RESP, getResponse()); - } - } - - @DELETE - @Path("{aaiVolumeGroupId}/rollback") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "RollbackVNFVolumes", - response = Response.class, - notes = "Delete an existing vnfVolume") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfVolume has been successfully rolled back"), - @ApiResponse(code = 202, message = "rollback vnfVolume request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "rollback vnfVolume failed, examine entity object for details") }) - public Response rollbackVNFVolumes( - @ApiParam(value = "aaiVolumeGroupId", required = true) - @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, - @ApiParam(value = "RollbackVolumeGroupRequest", required = true) - final RollbackVolumeGroupRequest req - ) - { - logger.debug("rollbackVNFVolumes enter: {}", req.toJsonString()); - if (aaiVolumeGroupId == null || req.getVolumeGroupRollback() == null || !aaiVolumeGroupId.equals(req.getVolumeGroupRollback().getVolumeGroupId())) { - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity(VOLUME_GROUPID_IN_URL_DOESNT_MATCH_CONTENT) - .build(); - } - RollbackVNFVolumesTask task = new RollbackVNFVolumesTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception - rollbackVNFVolumes: ", MessageEnum.RA_ROLLBACK_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("rollbackVNFVolumes exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class RollbackVNFVolumesTask implements Runnable { - private final RollbackVolumeGroupRequest req; - private RollbackVolumeGroupResponse response = null; - private VolumeGroupExceptionResponse eresp = null; - private boolean sendxml; - - public RollbackVNFVolumesTask(RollbackVolumeGroupRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<RollbackVolumeGroupResponse>(response) {} - : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("DeleteVNFVolumesTask start"); - try { - VolumeGroupRollback vgr = req.getVolumeGroupRollback(); - VnfRollback vrb = new VnfRollback( - vgr.getVolumeGroupStackId(), vgr.getTenantId(), vgr.getCloudSiteId(), true, true, - vgr.getMsoRequest(), null, null, null, null); - vnfAdapter.rollbackVnf(vrb); - response = new RollbackVolumeGroupResponse(true, req.getMessageId()); - } catch (VnfException e) { - logger.debug(EXCEPTION, e); - eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("DeleteVNFVolumesTask exit: code={} {} {}", getStatusCode(), RESP, getResponse()); - } - - } - - @PUT - @Path("{aaiVolumeGroupId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "UpdateVNFVolumes", - response = Response.class, - notes = "Update an existing vnfVolume") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfVolume has been successfully updated"), - @ApiResponse(code = 202, message = "update vnfVolume request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "update vnfVolume failed, examine entity object for details") }) - public Response updateVNFVolumes( - @ApiParam(value = "aaiVolumeGroupId", required = true) - @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, - @ApiParam(value = "UpdateVolumeGroupRequest", required = true) - final UpdateVolumeGroupRequest req - ) - { - logger.debug("updateVNFVolumes enter: {}", req.toJsonString()); - if (aaiVolumeGroupId == null || !aaiVolumeGroupId.equals(req.getVolumeGroupId())) { - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity(VOLUME_GROUPID_IN_URL_DOESNT_MATCH_CONTENT) - .build(); - } - UpdateVNFVolumesTask task = new UpdateVNFVolumesTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception - updateVNFVolumes: ", MessageEnum.RA_UPDATE_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("updateVNFVolumes exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class UpdateVNFVolumesTask implements Runnable { - private final UpdateVolumeGroupRequest req; - private UpdateVolumeGroupResponse response = null; - private VolumeGroupExceptionResponse eresp = null; - private boolean sendxml; - - public UpdateVNFVolumesTask(UpdateVolumeGroupRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<UpdateVolumeGroupResponse>(response) {} - : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("UpdateVNFVolumesTask start"); - try { - Holder<Map<String, String>> outputs = new Holder<> (); - Holder<VnfRollback> vnfRollback = new Holder<> (); - String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); - logger.debug("in updateVfModuleVolume - completeVnfVfModuleType={}", completeVnfVfModuleType); - - if (req.getCloudSiteId().equals(TESTING_KEYWORD)) { - outputs.value = testMap(); - } else { - //vnfAdapter.updateVnf( - // req.getCloudSiteId(), - // req.getTenantId(), - // req.getVnfType(), - // req.getVnfVersion(), - // req.getVfModuleType(), - // "VOLUME", // request type is VOLUME - // req.getVolumeGroupStackId(), - // req.getVolumeGroupParams(), - // req.getMsoRequest(), - // outputs, - // vnfRollback); - vnfAdapter.updateVfModule (req.getCloudSiteId(), - req.getTenantId(), - //req.getVnfType(), - completeVnfVfModuleType, - req.getVnfVersion(), - req.getVolumeGroupStackId(), - "VOLUME", - null, - null, - req.getVolumeGroupStackId(), - req.getModelCustomizationUuid(), - req.getVolumeGroupParams(), - req.getMsoRequest(), - outputs, - vnfRollback); - } - response = new UpdateVolumeGroupResponse( - req.getVolumeGroupId(), req.getVolumeGroupStackId(), - outputs.value, req.getMessageId()); - } catch (VnfException e) { - logger.debug(EXCEPTION, e); - eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("UpdateVNFVolumesTask exit: code={} {} {}", getStatusCode(), RESP, getResponse()); - } - } - - @GET - @Path("{aaiVolumeGroupId}") - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "QueryVNFVolumes", - response = Response.class, - notes = "Query an existing vnfVolume") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfVolume has been successfully queried"), - @ApiResponse(code = 500, message = "query vnfVolume failed, examine entity object for details") }) - public Response queryVNFVolumes( - @ApiParam(value = "aaiVolumeGroupId", required = true) - @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, - @ApiParam(value = "cloudSiteId", required = true) - @QueryParam("cloudSiteId") String cloudSiteId, - @ApiParam(value = "tenantId", required = true) - @QueryParam("tenantId") String tenantId, - @ApiParam(value = "volumeGroupStackId", required = true) - @QueryParam("volumeGroupStackId") String volumeGroupStackId, - @ApiParam(value = "skipAAI", required = true) - @QueryParam("skipAAI") Boolean skipAAI, - @ApiParam(value = "msoRequest.requestId", required = true) - @QueryParam("msoRequest.requestId") String requestId, - @ApiParam(value = "msoRequest.serviceInstanceId", required = true) - @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId - ) - { - //This request responds synchronously only - logger.debug("queryVNFVolumes enter: {} {}", aaiVolumeGroupId, volumeGroupStackId); - MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId); - - try { - int respStatus = HttpStatus.SC_OK; - QueryVolumeGroupResponse qryResp = new QueryVolumeGroupResponse(aaiVolumeGroupId, volumeGroupStackId, null, null); - Holder<Boolean> vnfExists = new Holder<>(); - Holder<String> vfModuleId = new Holder<>(); - Holder<VnfStatus> status = new Holder<>(); - Holder<Map<String, String>> outputs = new Holder<>(); - if (cloudSiteId != null && cloudSiteId.equals(TESTING_KEYWORD)) { - if (tenantId != null && tenantId.equals(TESTING_KEYWORD)) { - throw new VnfException("testing."); - } - vnfExists.value = true; - vfModuleId.value = TESTING_KEYWORD; - status.value = VnfStatus.ACTIVE; - outputs.value = testMap(); - } else { - vnfAdapter.queryVnf(cloudSiteId, tenantId, volumeGroupStackId, msoRequest, vnfExists, vfModuleId, status, outputs); - } - if (!vnfExists.value) { - logger.debug("VNFVolumes not found"); - qryResp.setVolumeGroupStatus(status.value); - respStatus = HttpStatus.SC_NOT_FOUND; - } else { - logger.debug("VNFVolumes found {}, status={}", vfModuleId.value, status.value); - qryResp.setVolumeGroupStatus(status.value); - qryResp.setVolumeGroupOutputs(outputs.value); - } - logger.debug("Query queryVNFVolumes exit"); - return Response - .status(respStatus) - .entity(new GenericEntity<QueryVolumeGroupResponse>(qryResp) {}) - .build(); - } catch (VnfException e) { - logger.error("{} {} AaiVolumeGroupId: {} VnfException - queryVNFVolumes", MessageEnum.RA_QUERY_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), aaiVolumeGroupId, e); - VolumeGroupExceptionResponse excResp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.FALSE, null); - logger.debug("Query queryVNFVolumes exit"); - return Response - .status(HttpStatus.SC_INTERNAL_SERVER_ERROR) - .entity(new GenericEntity<VolumeGroupExceptionResponse>(excResp) {}) - .build(); - } - } + private static final String TESTING_KEYWORD = "___TESTING___"; + private static final String EXCEPTION = "Exception :"; + private static final String RESP = ", resp="; + private static final String VOLUME_GROUPID_IN_URL_DOESNT_MATCH_CONTENT = + "VolumeGroupId in URL does not match content"; + @Autowired + private MsoVnfAdapterImpl vnfAdapter; + + @Autowired + private Provider<BpelRestClient> bpelRestClientProvider; + + @POST + @Path("") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "CreateVNFVolumes", response = Response.class, notes = "Create a new vnfVolume") + @ApiResponses({@ApiResponse(code = 200, message = "vnfVolume has been successfully created"), + @ApiResponse(code = 202, message = "create vnfVolume request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "create vnfVolume failed, examine entity object for details")}) + public Response createVNFVolumes( + @ApiParam(value = "CreateVolumeGroupRequest", required = true) final CreateVolumeGroupRequest req) { + logger.debug("createVNFVolumes enter: {}", req.toJsonString()); + CreateVNFVolumesTask task = new CreateVNFVolumesTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception - createVNFVolumes: ", MessageEnum.RA_CREATE_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("createVNFVolumes exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class CreateVNFVolumesTask implements Runnable { + private final CreateVolumeGroupRequest req; + private CreateVolumeGroupResponse response = null; + private VolumeGroupExceptionResponse eresp = null; + private boolean sendxml; + + public CreateVNFVolumesTask(CreateVolumeGroupRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<CreateVolumeGroupResponse>(response) {} + : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("CreateVFModule VolumesTask start"); + try { + // Synchronous Web Service Outputs + Holder<String> stackId = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + Holder<VnfRollback> vnfRollback = new Holder<>(); + String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); + logger.debug("in createVfModuleVolumes - completeVnfVfModuleType={}", completeVnfVfModuleType); + + String cloudsite = req.getCloudSiteId(); + if (cloudsite != null && cloudsite.equals(TESTING_KEYWORD)) { + String tenant = req.getTenantId(); + if (tenant != null && tenant.equals(TESTING_KEYWORD)) { + throw new VnfException("testing."); + } + stackId.value = "479D3D8B-6360-47BC-AB75-21CC91981484"; + outputs.value = testMap(); + } else { + // vnfAdapter.createVnf( + // req.getCloudSiteId(), + // req.getTenantId(), + // req.getVnfType(), + // req.getVnfVersion(), + // req.getVolumeGroupName(), + // "VOLUME", // request type is VOLUME + // null, // not sure about this + // req.getVolumeGroupParams(), + // req.getFailIfExists(), + // req.getSuppressBackout(), + // req.getMsoRequest(), + // stackId, + // outputs, + // vnfRollback); + vnfAdapter.createVfModule(req.getCloudSiteId(), // cloudSiteId, + req.getCloudOwner(), // cloudOwner, + req.getTenantId(), // tenantId, + // req.getVnfType(), //vnfType, + completeVnfVfModuleType, req.getVnfVersion(), // vnfVersion, + "", // genericVnfId + req.getVolumeGroupName(), // vnfName, + "", // vfModuleid + "VOLUME", // requestType, + null, // volumeGroupHeatStackId, + null, // baseVfHeatStackId, + req.getModelCustomizationUuid(), req.getVolumeGroupParams(), // inputs, + req.getFailIfExists(), // failIfExists, + req.getSuppressBackout(), // backout, + req.getEnableBridge(), req.getMsoRequest(), // msoRequest, + stackId, outputs, vnfRollback); + } + VolumeGroupRollback rb = new VolumeGroupRollback(req.getVolumeGroupId(), stackId.value, true, // TODO + // boolean + // volumeGroupCreated, + // when + // would + // it be + // false? + req.getTenantId(), req.getCloudOwner(), req.getCloudSiteId(), req.getMsoRequest(), + req.getMessageId()); + response = new CreateVolumeGroupResponse(req.getVolumeGroupId(), stackId.value, true, // TODO boolean + // volumeGroupCreated, + // when would it + // be false? + outputs.value, rb, req.getMessageId()); + } catch (VnfException e) { + logger.debug(EXCEPTION, e); + eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("CreateVFModule VolumesTask exit: code={} {} {}", getStatusCode(), RESP, getResponse()); + } + } + + @DELETE + @Path("{aaiVolumeGroupId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "DeleteVNFVolumes", response = Response.class, notes = "Delete an existing vnfVolume") + @ApiResponses({@ApiResponse(code = 200, message = "vnfVolume has been successfully deleted"), + @ApiResponse(code = 202, message = "delete vnfVolume request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "delete vnfVolume failed, examine entity object for details")}) + public Response deleteVNFVolumes( + @ApiParam(value = "aaiVolumeGroupId", + required = true) @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, + @ApiParam(value = "DeleteVolumeGroupRequest", required = true) final DeleteVolumeGroupRequest req) { + logger.debug("deleteVNFVolumes enter: {}", req.toJsonString()); + if (aaiVolumeGroupId == null || !aaiVolumeGroupId.equals(req.getVolumeGroupId())) { + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN) + .entity(VOLUME_GROUPID_IN_URL_DOESNT_MATCH_CONTENT).build(); + } + DeleteVNFVolumesTask task = new DeleteVNFVolumesTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception - deleteVNFVolumes: ", MessageEnum.RA_DELETE_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("deleteVNFVolumes exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class DeleteVNFVolumesTask implements Runnable { + private final DeleteVolumeGroupRequest req; + private DeleteVolumeGroupResponse response = null; + private VolumeGroupExceptionResponse eresp = null; + private boolean sendxml; + + public DeleteVNFVolumesTask(DeleteVolumeGroupRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<DeleteVolumeGroupResponse>(response) {} + : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("DeleteVNFVolumesTask start"); + try { + if (!req.getCloudSiteId().equals(TESTING_KEYWORD)) { + vnfAdapter.deleteVnf(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(), + req.getVolumeGroupStackId(), req.getMsoRequest()); + } + response = new DeleteVolumeGroupResponse(true, req.getMessageId()); + } catch (VnfException e) { + logger.debug(EXCEPTION, e); + eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("DeleteVNFVolumesTask exit: code={} {} {}", getStatusCode(), RESP, getResponse()); + } + } + + @DELETE + @Path("{aaiVolumeGroupId}/rollback") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "RollbackVNFVolumes", response = Response.class, notes = "Delete an existing vnfVolume") + @ApiResponses({@ApiResponse(code = 200, message = "vnfVolume has been successfully rolled back"), + @ApiResponse(code = 202, + message = "rollback vnfVolume request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "rollback vnfVolume failed, examine entity object for details")}) + public Response rollbackVNFVolumes( + @ApiParam(value = "aaiVolumeGroupId", + required = true) @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, + @ApiParam(value = "RollbackVolumeGroupRequest", required = true) final RollbackVolumeGroupRequest req) { + logger.debug("rollbackVNFVolumes enter: {}", req.toJsonString()); + if (aaiVolumeGroupId == null || req.getVolumeGroupRollback() == null + || !aaiVolumeGroupId.equals(req.getVolumeGroupRollback().getVolumeGroupId())) { + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN) + .entity(VOLUME_GROUPID_IN_URL_DOESNT_MATCH_CONTENT).build(); + } + RollbackVNFVolumesTask task = new RollbackVNFVolumesTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception - rollbackVNFVolumes: ", MessageEnum.RA_ROLLBACK_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("rollbackVNFVolumes exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class RollbackVNFVolumesTask implements Runnable { + private final RollbackVolumeGroupRequest req; + private RollbackVolumeGroupResponse response = null; + private VolumeGroupExceptionResponse eresp = null; + private boolean sendxml; + + public RollbackVNFVolumesTask(RollbackVolumeGroupRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<RollbackVolumeGroupResponse>(response) {} + : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("DeleteVNFVolumesTask start"); + try { + VolumeGroupRollback vgr = req.getVolumeGroupRollback(); + VnfRollback vrb = new VnfRollback(vgr.getVolumeGroupStackId(), vgr.getTenantId(), vgr.getCloudOwnerId(), + vgr.getCloudSiteId(), true, true, vgr.getMsoRequest(), null, null, null, null); + vnfAdapter.rollbackVnf(vrb); + response = new RollbackVolumeGroupResponse(true, req.getMessageId()); + } catch (VnfException e) { + logger.debug(EXCEPTION, e); + eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("DeleteVNFVolumesTask exit: code={} {} {}", getStatusCode(), RESP, getResponse()); + } + + } + + @PUT + @Path("{aaiVolumeGroupId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "UpdateVNFVolumes", response = Response.class, notes = "Update an existing vnfVolume") + @ApiResponses({@ApiResponse(code = 200, message = "vnfVolume has been successfully updated"), + @ApiResponse(code = 202, message = "update vnfVolume request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "update vnfVolume failed, examine entity object for details")}) + public Response updateVNFVolumes( + @ApiParam(value = "aaiVolumeGroupId", + required = true) @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, + @ApiParam(value = "UpdateVolumeGroupRequest", required = true) final UpdateVolumeGroupRequest req) { + logger.debug("updateVNFVolumes enter: {}", req.toJsonString()); + if (aaiVolumeGroupId == null || !aaiVolumeGroupId.equals(req.getVolumeGroupId())) { + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN) + .entity(VOLUME_GROUPID_IN_URL_DOESNT_MATCH_CONTENT).build(); + } + UpdateVNFVolumesTask task = new UpdateVNFVolumesTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception - updateVNFVolumes: ", MessageEnum.RA_UPDATE_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("updateVNFVolumes exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class UpdateVNFVolumesTask implements Runnable { + private final UpdateVolumeGroupRequest req; + private UpdateVolumeGroupResponse response = null; + private VolumeGroupExceptionResponse eresp = null; + private boolean sendxml; + + public UpdateVNFVolumesTask(UpdateVolumeGroupRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<UpdateVolumeGroupResponse>(response) {} + : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("UpdateVNFVolumesTask start"); + try { + Holder<Map<String, String>> outputs = new Holder<>(); + Holder<VnfRollback> vnfRollback = new Holder<>(); + String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); + logger.debug("in updateVfModuleVolume - completeVnfVfModuleType={}", completeVnfVfModuleType); + + if (req.getCloudSiteId().equals(TESTING_KEYWORD)) { + outputs.value = testMap(); + } else { + // vnfAdapter.updateVnf( + // req.getCloudSiteId(), + // req.getTenantId(), + // req.getVnfType(), + // req.getVnfVersion(), + // req.getVfModuleType(), + // "VOLUME", // request type is VOLUME + // req.getVolumeGroupStackId(), + // req.getVolumeGroupParams(), + // req.getMsoRequest(), + // outputs, + // vnfRollback); + vnfAdapter.updateVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(), + // req.getVnfType(), + completeVnfVfModuleType, req.getVnfVersion(), req.getVolumeGroupStackId(), "VOLUME", null, + null, req.getVolumeGroupStackId(), req.getModelCustomizationUuid(), + req.getVolumeGroupParams(), req.getMsoRequest(), outputs, vnfRollback); + } + response = new UpdateVolumeGroupResponse(req.getVolumeGroupId(), req.getVolumeGroupStackId(), + outputs.value, req.getMessageId()); + } catch (VnfException e) { + logger.debug(EXCEPTION, e); + eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("UpdateVNFVolumesTask exit: code={} {} {}", getStatusCode(), RESP, getResponse()); + } + } + + @GET + @Path("{aaiVolumeGroupId}") + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "QueryVNFVolumes", response = Response.class, notes = "Query an existing vnfVolume") + @ApiResponses({@ApiResponse(code = 200, message = "vnfVolume has been successfully queried"), + @ApiResponse(code = 500, message = "query vnfVolume failed, examine entity object for details")}) + public Response queryVNFVolumes( + @ApiParam(value = "aaiVolumeGroupId", + required = true) @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, + @ApiParam(value = "cloudSiteId", required = true) @QueryParam("cloudSiteId") String cloudSiteId, + @ApiParam(value = "cloudOwner", required = true) @QueryParam("cloudOwner") String cloudOwner, + @ApiParam(value = "tenantId", required = true) @QueryParam("tenantId") String tenantId, + @ApiParam(value = "volumeGroupStackId", + required = true) @QueryParam("volumeGroupStackId") String volumeGroupStackId, + @ApiParam(value = "skipAAI", required = true) @QueryParam("skipAAI") Boolean skipAAI, + @ApiParam(value = "msoRequest.requestId", + required = true) @QueryParam("msoRequest.requestId") String requestId, + @ApiParam(value = "msoRequest.serviceInstanceId", + required = true) @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId) { + // This request responds synchronously only + logger.debug("queryVNFVolumes enter: {} {}", aaiVolumeGroupId, volumeGroupStackId); + MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId); + + try { + int respStatus = HttpStatus.SC_OK; + QueryVolumeGroupResponse qryResp = + new QueryVolumeGroupResponse(aaiVolumeGroupId, volumeGroupStackId, null, null); + Holder<Boolean> vnfExists = new Holder<>(); + Holder<String> vfModuleId = new Holder<>(); + Holder<VnfStatus> status = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + if (cloudSiteId != null && cloudSiteId.equals(TESTING_KEYWORD)) { + if (tenantId != null && tenantId.equals(TESTING_KEYWORD)) { + throw new VnfException("testing."); + } + vnfExists.value = true; + vfModuleId.value = TESTING_KEYWORD; + status.value = VnfStatus.ACTIVE; + outputs.value = testMap(); + } else { + vnfAdapter.queryVnf(cloudSiteId, cloudOwner, tenantId, volumeGroupStackId, msoRequest, vnfExists, + vfModuleId, status, outputs); + } + if (!vnfExists.value) { + logger.debug("VNFVolumes not found"); + qryResp.setVolumeGroupStatus(status.value); + respStatus = HttpStatus.SC_NOT_FOUND; + } else { + logger.debug("VNFVolumes found {}, status={}", vfModuleId.value, status.value); + qryResp.setVolumeGroupStatus(status.value); + qryResp.setVolumeGroupOutputs(outputs.value); + } + logger.debug("Query queryVNFVolumes exit"); + return Response.status(respStatus).entity(new GenericEntity<QueryVolumeGroupResponse>(qryResp) {}).build(); + } catch (VnfException e) { + logger.error("{} {} AaiVolumeGroupId: {} VnfException - queryVNFVolumes", MessageEnum.RA_QUERY_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), aaiVolumeGroupId, e); + VolumeGroupExceptionResponse excResp = new VolumeGroupExceptionResponse(e.getMessage(), + MsoExceptionCategory.INTERNAL, Boolean.FALSE, null); + logger.debug("Query queryVNFVolumes exit"); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR) + .entity(new GenericEntity<VolumeGroupExceptionResponse>(excResp) {}).build(); + } + } + public static Map<String, String> testMap() { - Map<String, String> m = new HashMap<>(); - m.put("mickey", "7"); - m.put("clyde", "10"); - m.put("wayne", "99"); - return m; + Map<String, String> m = new HashMap<>(); + m.put("mickey", "7"); + m.put("clyde", "10"); + m.put("wayne", "99"); + return m; } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2.java index f38f858d7b..0ceba20051 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2.java @@ -70,13 +70,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** - * This class services calls to the REST interface for VNF Volumes (http://host:port/vnfs/rest/v1/volume-groups) - * Both XML and JSON can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default. - * For testing, call with cloudSiteId = ___TESTING___ - * To test exceptions, also set tenantId = ___TESTING___ + * This class services calls to the REST interface for VNF Volumes (http://host:port/vnfs/rest/v1/volume-groups) Both + * XML and JSON can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default. For + * testing, call with cloudSiteId = ___TESTING___ To test exceptions, also set tenantId = ___TESTING___ * - * V2 incorporates run-time selection of sub-orchestrator implementation (Heat or Cloudify) - * based on the target cloud. + * V2 incorporates run-time selection of sub-orchestrator implementation (Heat or Cloudify) based on the target cloud. */ @Path("/v2/volume-groups") @Api(value = "/v2/volume-groups", description = "root of volume-groups adapters restful web service v2") @@ -84,576 +82,511 @@ import org.springframework.stereotype.Component; public class VolumeAdapterRestV2 { private static final Logger logger = LoggerFactory.getLogger(VolumeAdapterRestV2.class); - private static final String TESTING_KEYWORD = "___TESTING___"; - private static final String RESP=", resp="; - private static final String EXCEPTION="Exception :"; - private static final String VOLUME_GROUPID_MISSING="VolumeGroupId in URL does not match content"; - - @Autowired - private VnfAdapterRestUtils vnfAdapterRestUtils; - - @Autowired - private Provider<BpelRestClient> bpelRestClientProvider; - - @POST - @Path("") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "CreateVNFVolumes", - response = Response.class, - notes = "Create a new vnfVolume") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfVolume has been successfully created"), - @ApiResponse(code = 202, message = "create vnfVolume request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "create vnfVolume failed, examine entity object for details") }) - public Response createVNFVolumes( - @ApiParam(value = "mode", required = true) - @QueryParam("mode") String mode, - @ApiParam(value = "CreateVolumeGroupRequest", required = true) - final CreateVolumeGroupRequest req) - { - logger.debug("createVNFVolumes enter: {}", req.toJsonString()); - CreateVNFVolumesTask task = new CreateVNFVolumesTask(req, mode); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception - createVNFVolumes: ", MessageEnum.RA_CREATE_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("createVNFVolumes exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class CreateVNFVolumesTask implements Runnable { - private final CreateVolumeGroupRequest req; - private CreateVolumeGroupResponse response = null; - private VolumeGroupExceptionResponse eresp = null; - private boolean sendxml; - private String mode; - - public CreateVNFVolumesTask(CreateVolumeGroupRequest req, String mode) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - this.mode = mode; - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<CreateVolumeGroupResponse>(response) {} - : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("CreateVFModule VolumesTask start"); - try { - // Synchronous Web Service Outputs - Holder<String> stackId = new Holder<>(); - Holder<Map<String, String>> outputs = new Holder<>(); - Holder<VnfRollback> vnfRollback = new Holder<>(); - String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); - logger.debug("in createVfModuleVolumes - completeVnfVfModuleType={}", completeVnfVfModuleType); - - String cloudsiteId = req.getCloudSiteId(); - if (cloudsiteId != null && cloudsiteId.equals(TESTING_KEYWORD)) { - String tenant = req.getTenantId(); - if (tenant != null && tenant.equals(TESTING_KEYWORD)) { - throw new VnfException("testing."); - } - stackId.value = "479D3D8B-6360-47BC-AB75-21CC91981484"; - outputs.value = testMap(); - } else { - // Support different Adapter Implementations - MsoVnfAdapter vnfAdapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudsiteId); - vnfAdapter.createVfModule( - req.getCloudSiteId(), //cloudSiteId, - req.getTenantId(), //tenantId, - completeVnfVfModuleType, //vnfType, - req.getVnfVersion(), //vnfVersion, - "", // genericVnfId - req.getVolumeGroupName(), //vnfName, - "", // vfModuleId - "VOLUME", //requestType, - null, //volumeGroupHeatStackId, - null, //baseVfHeatStackId, - req.getModelCustomizationUuid(), - req.getVolumeGroupParams(), //inputs, - req.getFailIfExists(), //failIfExists, - req.getSuppressBackout(), //backout, - req.getEnableBridge(), - req.getMsoRequest(), // msoRequest, - stackId, - outputs, - vnfRollback); - } - - VolumeGroupRollback rb = new VolumeGroupRollback( - req.getVolumeGroupId(), - stackId.value, - vnfRollback.value.getVnfCreated(), - req.getTenantId(), - req.getCloudSiteId(), - req.getMsoRequest(), - req.getMessageId()); - - response = new CreateVolumeGroupResponse( - req.getVolumeGroupId(), - stackId.value, - vnfRollback.value.getVnfCreated(), - outputs.value, - rb, - req.getMessageId()); - } catch (VnfException e) { - logger.debug(EXCEPTION, e); - eresp = new VolumeGroupExceptionResponse( - e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("CreateVFModule VolumesTask exit: code= {} {} {}", getStatusCode(), RESP, getResponse()); - } - } - - @DELETE - @Path("{aaiVolumeGroupId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "DeleteVNFVolumes", - response = Response.class, - notes = "Delete an existing vnfVolume") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfVolume has been successfully deleted"), - @ApiResponse(code = 202, message = "delete vnfVolume request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "delete vnfVolume failed, examine entity object for details") }) - public Response deleteVNFVolumes( - @ApiParam(value = "aaiVolumeGroupId", required = true) - @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, - @ApiParam(value = "mode", required = true) - @QueryParam("mode") String mode, - @ApiParam(value = "DeleteVolumeGroupRequest", required = true) - final DeleteVolumeGroupRequest req - ) - { - logger.debug("deleteVNFVolumes enter: {}", req.toJsonString()); - if (aaiVolumeGroupId == null || !aaiVolumeGroupId.equals(req.getVolumeGroupId())) { - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity(VOLUME_GROUPID_MISSING) - .build(); - } - DeleteVNFVolumesTask task = new DeleteVNFVolumesTask(req, mode); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception - deleteVNFVolumes: ", MessageEnum.RA_DELETE_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("deleteVNFVolumes exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class DeleteVNFVolumesTask implements Runnable { - private final DeleteVolumeGroupRequest req; - private DeleteVolumeGroupResponse response = null; - private VolumeGroupExceptionResponse eresp = null; - private boolean sendxml; - private String mode; - - public DeleteVNFVolumesTask(DeleteVolumeGroupRequest req, String mode) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - this.mode = mode; - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<DeleteVolumeGroupResponse>(response) {} - : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("DeleteVNFVolumesTask start"); - String cloudSiteId = req.getCloudSiteId(); - try { - if (! cloudSiteId.equals(TESTING_KEYWORD)) { - // Support different Adapter Implementations - MsoVnfAdapter vnfAdapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudSiteId); - vnfAdapter.deleteVnf(req.getCloudSiteId(), req.getTenantId(), req.getVolumeGroupStackId(), req.getMsoRequest()); - } - response = new DeleteVolumeGroupResponse(true, req.getMessageId()); - } catch (VnfException e) { - logger.debug(EXCEPTION, e); - eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("DeleteVNFVolumesTask exit: code= {} {} {}", getStatusCode(), RESP, getResponse()); - } - } - - @DELETE - @Path("{aaiVolumeGroupId}/rollback") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "RollbackVNFVolumes", - response = Response.class, - notes = "Delete an existing vnfVolume") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfVolume has been successfully rolled back"), - @ApiResponse(code = 202, message = "rollback vnfVolume request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "rollback vnfVolume failed, examine entity object for details") }) - public Response rollbackVNFVolumes( - @ApiParam(value = "aaiVolumeGroupId", required = true) - @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, - @ApiParam(value = "RollbackVolumeGroupRequest", required = true) - final RollbackVolumeGroupRequest req - ) - { - logger.debug("rollbackVNFVolumes enter: {}", req.toJsonString()); - if (aaiVolumeGroupId == null || req.getVolumeGroupRollback() == null || !aaiVolumeGroupId.equals(req.getVolumeGroupRollback().getVolumeGroupId())) { - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity(VOLUME_GROUPID_MISSING) - .build(); - } - RollbackVNFVolumesTask task = new RollbackVNFVolumesTask(req); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception - rollbackVNFVolumes: ", MessageEnum.RA_ROLLBACK_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("rollbackVNFVolumes exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class RollbackVNFVolumesTask implements Runnable { - private final RollbackVolumeGroupRequest req; - private RollbackVolumeGroupResponse response = null; - private VolumeGroupExceptionResponse eresp = null; - private boolean sendxml; - - public RollbackVNFVolumesTask(RollbackVolumeGroupRequest req) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<RollbackVolumeGroupResponse>(response) {} - : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("RollbackVNFVolumesTask start"); - try { - VolumeGroupRollback vgr = req.getVolumeGroupRollback(); - VnfRollback vrb = new VnfRollback( - vgr.getVolumeGroupStackId(), vgr.getTenantId(), vgr.getCloudSiteId(), true, true, - vgr.getMsoRequest(), null, null, null, null); - - // Support different Adapter Implementations - MsoVnfAdapter vnfAdapter = vnfAdapterRestUtils.getVnfAdapterImpl(vrb.getMode(), vrb.getCloudSiteId()); - vnfAdapter.rollbackVnf(vrb); - response = new RollbackVolumeGroupResponse(true, req.getMessageId()); - } catch (VnfException e) { - logger.debug(EXCEPTION, e); - eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("RollbackVNFVolumesTask exit: code= {} {} {}", getStatusCode(), RESP, getResponse()); - } - - } - - @PUT - @Path("{aaiVolumeGroupId}") - @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "UpdateVNFVolumes", - response = Response.class, - notes = "Update an existing vnfVolume") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfVolume has been successfully updated"), - @ApiResponse(code = 202, message = "update vnfVolume request has been successfully accepted (async only)"), - @ApiResponse(code = 500, message = "update vnfVolume failed, examine entity object for details") }) - public Response updateVNFVolumes( - @ApiParam(value = "aaiVolumeGroupId", required = true) - @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, - @ApiParam(value = "mode", required = true) - @QueryParam("mode") String mode, - @ApiParam(value = "UpdateVolumeGroupRequest", required = true) - final UpdateVolumeGroupRequest req - ) - { - logger.debug("updateVNFVolumes enter: {}", req.toJsonString()); - if (aaiVolumeGroupId == null || !aaiVolumeGroupId.equals(req.getVolumeGroupId())) { - return Response - .status(HttpStatus.SC_BAD_REQUEST) - .type(MediaType.TEXT_PLAIN) - .entity(VOLUME_GROUPID_MISSING) - .build(); - } - UpdateVNFVolumesTask task = new UpdateVNFVolumesTask(req, mode); - if (req.isSynchronous()) { - // This is a synchronous request - task.run(); - return Response - .status(task.getStatusCode()) - .entity(task.getGenericEntityResponse()) - .build(); - } else { - // This is an asynchronous request - try { - Thread t1 = new Thread(task); - t1.start(); - } catch (Exception e) { - // problem handling create, send generic failure as sync resp to caller - logger.error("{} {} Exception - updateVNFVolumes: ", MessageEnum.RA_UPDATE_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), e); - return Response.serverError().build(); - } - // send sync response (ACK) to caller - logger.debug("updateVNFVolumes exit"); - return Response.status(HttpStatus.SC_ACCEPTED).build(); - } - } - - public class UpdateVNFVolumesTask implements Runnable { - private final UpdateVolumeGroupRequest req; - private UpdateVolumeGroupResponse response = null; - private VolumeGroupExceptionResponse eresp = null; - private boolean sendxml; - private String mode; - - public UpdateVNFVolumesTask(UpdateVolumeGroupRequest req, String mode) { - this.req = req; - this.sendxml = true; // can be set with a field or header later - this.mode = mode; - } - public int getStatusCode() { - return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; - } - public Object getGenericEntityResponse() { - return (response != null) - ? new GenericEntity<UpdateVolumeGroupResponse>(response) {} - : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; - } - private String getResponse() { - if (response != null) { - return sendxml ? response.toXmlString() : response.toJsonString(); - } else { - return sendxml ? eresp.toXmlString() : eresp.toJsonString(); - } - } - @Override - public void run() { - logger.debug("UpdateVNFVolumesTask start"); - try { - Holder<Map<String, String>> outputs = new Holder<> (); - Holder<VnfRollback> vnfRollback = new Holder<> (); - String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); - logger.debug("in updateVfModuleVolume - completeVnfVfModuleType={}", completeVnfVfModuleType); - - if (req.getCloudSiteId().equals(TESTING_KEYWORD)) { - outputs.value = testMap(); - } else { - // Support different Adapter Implementations - MsoVnfAdapter vnfAdapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, req.getCloudSiteId()); - vnfAdapter.updateVfModule (req.getCloudSiteId(), - req.getTenantId(), - //req.getVnfType(), - completeVnfVfModuleType, - req.getVnfVersion(), - req.getVolumeGroupStackId(), - "VOLUME", - null, - null, - req.getVolumeGroupStackId(), - req.getModelCustomizationUuid(), - req.getVolumeGroupParams(), - req.getMsoRequest(), - outputs, - vnfRollback); - } - response = new UpdateVolumeGroupResponse( - req.getVolumeGroupId(), req.getVolumeGroupStackId(), - outputs.value, req.getMessageId()); - } catch (VnfException e) { - logger.debug(EXCEPTION, e); - eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId()); - } - if (!req.isSynchronous()) { - // This is asynch, so POST response back to caller - BpelRestClient bpelClient = bpelRestClientProvider.get(); - bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); - } - logger.debug("UpdateVNFVolumesTask exit: code= {} {} {}", getStatusCode(), RESP, getResponse()); - } - } - - @GET - @Path("{aaiVolumeGroupId}") - @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @ApiOperation(value = "QueryVNFVolumes", - response = Response.class, - notes = "Query an existing vnfVolume") - @ApiResponses({ - @ApiResponse(code = 200, message = "vnfVolume has been successfully queried"), - @ApiResponse(code = 500, message = "query vnfVolume failed, examine entity object for details") }) - public Response queryVNFVolumes( - @ApiParam(value = "aaiVolumeGroupId", required = true) - @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, - @ApiParam(value = "cloudSiteId", required = true) - @QueryParam("cloudSiteId") String cloudSiteId, - @ApiParam(value = "tenantId", required = true) - @QueryParam("tenantId") String tenantId, - @ApiParam(value = "volumeGroupStackId", required = true) - @QueryParam("volumeGroupStackId") String volumeGroupStackId, - @ApiParam(value = "skipAAI", required = true) - @QueryParam("skipAAI") Boolean skipAAI, - @ApiParam(value = "msoRequest.requestId", required = true) - @QueryParam("msoRequest.requestId") String requestId, - @ApiParam(value = "msoRequest.serviceInstanceId", required = true) - @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId, - @ApiParam(value = "mode", required = true) - @QueryParam("mode") String mode - ) - { - //This request responds synchronously only - logger.debug("queryVNFVolumes enter: {} {}", aaiVolumeGroupId, volumeGroupStackId); - MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId); - - try { - int respStatus = HttpStatus.SC_OK; - QueryVolumeGroupResponse qryResp = new QueryVolumeGroupResponse(aaiVolumeGroupId, volumeGroupStackId, null, null); - Holder<Boolean> vnfExists = new Holder<>(); - Holder<String> vfModuleId = new Holder<>(); - Holder<VnfStatus> status = new Holder<>(); - Holder<Map<String, String>> outputs = new Holder<>(); - if (cloudSiteId != null && cloudSiteId.equals(TESTING_KEYWORD)) { - if (tenantId != null && tenantId.equals(TESTING_KEYWORD)) { - throw new VnfException("testing."); - } - vnfExists.value = true; - vfModuleId.value = TESTING_KEYWORD; - status.value = VnfStatus.ACTIVE; - outputs.value = testMap(); - } else { - // Support different Adapter Implementations - MsoVnfAdapter vnfAdapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudSiteId); - vnfAdapter.queryVnf(cloudSiteId, tenantId, volumeGroupStackId, msoRequest, vnfExists, vfModuleId, status, outputs); - } - if (!vnfExists.value) { - logger.debug("VNFVolumes not found"); - qryResp.setVolumeGroupStatus(status.value); - respStatus = HttpStatus.SC_NOT_FOUND; - } else { - logger.debug("VNFVolumes found {}, status={}", vfModuleId.value, status.value); - qryResp.setVolumeGroupStatus(status.value); - qryResp.setVolumeGroupOutputs(outputs.value); - } - logger.debug("Query queryVNFVolumes exit"); - return Response - .status(respStatus) - .entity(new GenericEntity<QueryVolumeGroupResponse>(qryResp) {}) - .build(); - } catch (VnfException e) { - logger.error("{} {} AaiVolumeGroupId: {} VnfException - queryVNFVolumes: ", MessageEnum.RA_QUERY_VNF_ERR, - ErrorCode.BusinessProcesssError.getValue(), aaiVolumeGroupId, e); - VolumeGroupExceptionResponse excResp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, Boolean.FALSE, null); - logger.debug("Query queryVNFVolumes exit"); - return Response - .status(HttpStatus.SC_INTERNAL_SERVER_ERROR) - .entity(new GenericEntity<VolumeGroupExceptionResponse>(excResp) {}) - .build(); - } - } + private static final String TESTING_KEYWORD = "___TESTING___"; + private static final String RESP = ", resp="; + private static final String EXCEPTION = "Exception :"; + private static final String VOLUME_GROUPID_MISSING = "VolumeGroupId in URL does not match content"; + + @Autowired + private VnfAdapterRestUtils vnfAdapterRestUtils; + + @Autowired + private Provider<BpelRestClient> bpelRestClientProvider; + + @POST + @Path("") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "CreateVNFVolumes", response = Response.class, notes = "Create a new vnfVolume") + @ApiResponses({@ApiResponse(code = 200, message = "vnfVolume has been successfully created"), + @ApiResponse(code = 202, message = "create vnfVolume request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "create vnfVolume failed, examine entity object for details")}) + public Response createVNFVolumes(@ApiParam(value = "mode", required = true) @QueryParam("mode") String mode, + @ApiParam(value = "CreateVolumeGroupRequest", required = true) final CreateVolumeGroupRequest req) { + logger.debug("createVNFVolumes enter: {}", req.toJsonString()); + CreateVNFVolumesTask task = new CreateVNFVolumesTask(req, mode); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception - createVNFVolumes: ", MessageEnum.RA_CREATE_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("createVNFVolumes exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class CreateVNFVolumesTask implements Runnable { + private final CreateVolumeGroupRequest req; + private CreateVolumeGroupResponse response = null; + private VolumeGroupExceptionResponse eresp = null; + private boolean sendxml; + private String mode; + + public CreateVNFVolumesTask(CreateVolumeGroupRequest req, String mode) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + this.mode = mode; + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<CreateVolumeGroupResponse>(response) {} + : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("CreateVFModule VolumesTask start"); + try { + // Synchronous Web Service Outputs + Holder<String> stackId = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + Holder<VnfRollback> vnfRollback = new Holder<>(); + String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); + logger.debug("in createVfModuleVolumes - completeVnfVfModuleType={}", completeVnfVfModuleType); + + String cloudsiteId = req.getCloudSiteId(); + if (cloudsiteId != null && cloudsiteId.equals(TESTING_KEYWORD)) { + String tenant = req.getTenantId(); + if (tenant != null && tenant.equals(TESTING_KEYWORD)) { + throw new VnfException("testing."); + } + stackId.value = "479D3D8B-6360-47BC-AB75-21CC91981484"; + outputs.value = testMap(); + } else { + // Support different Adapter Implementations + MsoVnfAdapter vnfAdapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudsiteId); + vnfAdapter.createVfModule(req.getCloudSiteId(), // cloudSiteId, + req.getCloudOwner(), // cloudOwner, + req.getTenantId(), // tenantId, + completeVnfVfModuleType, // vnfType, + req.getVnfVersion(), // vnfVersion, + "", // genericVnfId + req.getVolumeGroupName(), // vnfName, + "", // vfModuleId + "VOLUME", // requestType, + null, // volumeGroupHeatStackId, + null, // baseVfHeatStackId, + req.getModelCustomizationUuid(), req.getVolumeGroupParams(), // inputs, + req.getFailIfExists(), // failIfExists, + req.getSuppressBackout(), // backout, + req.getEnableBridge(), req.getMsoRequest(), // msoRequest, + stackId, outputs, vnfRollback); + } + + VolumeGroupRollback rb = new VolumeGroupRollback(req.getVolumeGroupId(), stackId.value, + vnfRollback.value.getVnfCreated(), req.getTenantId(), req.getCloudOwner(), req.getCloudSiteId(), + req.getMsoRequest(), req.getMessageId()); + + response = new CreateVolumeGroupResponse(req.getVolumeGroupId(), stackId.value, + vnfRollback.value.getVnfCreated(), outputs.value, rb, req.getMessageId()); + } catch (VnfException e) { + logger.debug(EXCEPTION, e); + eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("CreateVFModule VolumesTask exit: code= {} {} {}", getStatusCode(), RESP, getResponse()); + } + } + + @DELETE + @Path("{aaiVolumeGroupId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "DeleteVNFVolumes", response = Response.class, notes = "Delete an existing vnfVolume") + @ApiResponses({@ApiResponse(code = 200, message = "vnfVolume has been successfully deleted"), + @ApiResponse(code = 202, message = "delete vnfVolume request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "delete vnfVolume failed, examine entity object for details")}) + public Response deleteVNFVolumes( + @ApiParam(value = "aaiVolumeGroupId", + required = true) @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, + @ApiParam(value = "mode", required = true) @QueryParam("mode") String mode, + @ApiParam(value = "DeleteVolumeGroupRequest", required = true) final DeleteVolumeGroupRequest req) { + logger.debug("deleteVNFVolumes enter: {}", req.toJsonString()); + if (aaiVolumeGroupId == null || !aaiVolumeGroupId.equals(req.getVolumeGroupId())) { + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN).entity(VOLUME_GROUPID_MISSING) + .build(); + } + DeleteVNFVolumesTask task = new DeleteVNFVolumesTask(req, mode); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception - deleteVNFVolumes: ", MessageEnum.RA_DELETE_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("deleteVNFVolumes exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class DeleteVNFVolumesTask implements Runnable { + private final DeleteVolumeGroupRequest req; + private DeleteVolumeGroupResponse response = null; + private VolumeGroupExceptionResponse eresp = null; + private boolean sendxml; + private String mode; + + public DeleteVNFVolumesTask(DeleteVolumeGroupRequest req, String mode) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + this.mode = mode; + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<DeleteVolumeGroupResponse>(response) {} + : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("DeleteVNFVolumesTask start"); + String cloudSiteId = req.getCloudSiteId(); + try { + if (!cloudSiteId.equals(TESTING_KEYWORD)) { + // Support different Adapter Implementations + MsoVnfAdapter vnfAdapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudSiteId); + vnfAdapter.deleteVnf(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(), + req.getVolumeGroupStackId(), req.getMsoRequest()); + } + response = new DeleteVolumeGroupResponse(true, req.getMessageId()); + } catch (VnfException e) { + logger.debug(EXCEPTION, e); + eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("DeleteVNFVolumesTask exit: code= {} {} {}", getStatusCode(), RESP, getResponse()); + } + } + + @DELETE + @Path("{aaiVolumeGroupId}/rollback") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "RollbackVNFVolumes", response = Response.class, notes = "Delete an existing vnfVolume") + @ApiResponses({@ApiResponse(code = 200, message = "vnfVolume has been successfully rolled back"), + @ApiResponse(code = 202, + message = "rollback vnfVolume request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "rollback vnfVolume failed, examine entity object for details")}) + public Response rollbackVNFVolumes( + @ApiParam(value = "aaiVolumeGroupId", + required = true) @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, + @ApiParam(value = "RollbackVolumeGroupRequest", required = true) final RollbackVolumeGroupRequest req) { + logger.debug("rollbackVNFVolumes enter: {}", req.toJsonString()); + if (aaiVolumeGroupId == null || req.getVolumeGroupRollback() == null + || !aaiVolumeGroupId.equals(req.getVolumeGroupRollback().getVolumeGroupId())) { + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN).entity(VOLUME_GROUPID_MISSING) + .build(); + } + RollbackVNFVolumesTask task = new RollbackVNFVolumesTask(req); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception - rollbackVNFVolumes: ", MessageEnum.RA_ROLLBACK_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("rollbackVNFVolumes exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class RollbackVNFVolumesTask implements Runnable { + private final RollbackVolumeGroupRequest req; + private RollbackVolumeGroupResponse response = null; + private VolumeGroupExceptionResponse eresp = null; + private boolean sendxml; + + public RollbackVNFVolumesTask(RollbackVolumeGroupRequest req) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<RollbackVolumeGroupResponse>(response) {} + : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("RollbackVNFVolumesTask start"); + try { + VolumeGroupRollback vgr = req.getVolumeGroupRollback(); + VnfRollback vrb = new VnfRollback(vgr.getVolumeGroupStackId(), vgr.getTenantId(), vgr.getCloudOwnerId(), + vgr.getCloudSiteId(), true, true, vgr.getMsoRequest(), null, null, null, null); + + // Support different Adapter Implementations + MsoVnfAdapter vnfAdapter = vnfAdapterRestUtils.getVnfAdapterImpl(vrb.getMode(), vrb.getCloudSiteId()); + vnfAdapter.rollbackVnf(vrb); + response = new RollbackVolumeGroupResponse(true, req.getMessageId()); + } catch (VnfException e) { + logger.debug(EXCEPTION, e); + eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("RollbackVNFVolumesTask exit: code= {} {} {}", getStatusCode(), RESP, getResponse()); + } + + } + + @PUT + @Path("{aaiVolumeGroupId}") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "UpdateVNFVolumes", response = Response.class, notes = "Update an existing vnfVolume") + @ApiResponses({@ApiResponse(code = 200, message = "vnfVolume has been successfully updated"), + @ApiResponse(code = 202, message = "update vnfVolume request has been successfully accepted (async only)"), + @ApiResponse(code = 500, message = "update vnfVolume failed, examine entity object for details")}) + public Response updateVNFVolumes( + @ApiParam(value = "aaiVolumeGroupId", + required = true) @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, + @ApiParam(value = "mode", required = true) @QueryParam("mode") String mode, + @ApiParam(value = "UpdateVolumeGroupRequest", required = true) final UpdateVolumeGroupRequest req) { + logger.debug("updateVNFVolumes enter: {}", req.toJsonString()); + if (aaiVolumeGroupId == null || !aaiVolumeGroupId.equals(req.getVolumeGroupId())) { + return Response.status(HttpStatus.SC_BAD_REQUEST).type(MediaType.TEXT_PLAIN).entity(VOLUME_GROUPID_MISSING) + .build(); + } + UpdateVNFVolumesTask task = new UpdateVNFVolumesTask(req, mode); + if (req.isSynchronous()) { + // This is a synchronous request + task.run(); + return Response.status(task.getStatusCode()).entity(task.getGenericEntityResponse()).build(); + } else { + // This is an asynchronous request + try { + Thread t1 = new Thread(task); + t1.start(); + } catch (Exception e) { + // problem handling create, send generic failure as sync resp to caller + logger.error("{} {} Exception - updateVNFVolumes: ", MessageEnum.RA_UPDATE_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), e); + return Response.serverError().build(); + } + // send sync response (ACK) to caller + logger.debug("updateVNFVolumes exit"); + return Response.status(HttpStatus.SC_ACCEPTED).build(); + } + } + + public class UpdateVNFVolumesTask implements Runnable { + private final UpdateVolumeGroupRequest req; + private UpdateVolumeGroupResponse response = null; + private VolumeGroupExceptionResponse eresp = null; + private boolean sendxml; + private String mode; + + public UpdateVNFVolumesTask(UpdateVolumeGroupRequest req, String mode) { + this.req = req; + this.sendxml = true; // can be set with a field or header later + this.mode = mode; + } + + public int getStatusCode() { + return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST; + } + + public Object getGenericEntityResponse() { + return (response != null) ? new GenericEntity<UpdateVolumeGroupResponse>(response) {} + : new GenericEntity<VolumeGroupExceptionResponse>(eresp) {}; + } + + private String getResponse() { + if (response != null) { + return sendxml ? response.toXmlString() : response.toJsonString(); + } else { + return sendxml ? eresp.toXmlString() : eresp.toJsonString(); + } + } + + @Override + public void run() { + logger.debug("UpdateVNFVolumesTask start"); + try { + Holder<Map<String, String>> outputs = new Holder<>(); + Holder<VnfRollback> vnfRollback = new Holder<>(); + String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType(); + logger.debug("in updateVfModuleVolume - completeVnfVfModuleType={}", completeVnfVfModuleType); + + if (req.getCloudSiteId().equals(TESTING_KEYWORD)) { + outputs.value = testMap(); + } else { + // Support different Adapter Implementations + MsoVnfAdapter vnfAdapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, req.getCloudSiteId()); + vnfAdapter.updateVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(), + // req.getVnfType(), + completeVnfVfModuleType, req.getVnfVersion(), req.getVolumeGroupStackId(), "VOLUME", null, + null, req.getVolumeGroupStackId(), req.getModelCustomizationUuid(), + req.getVolumeGroupParams(), req.getMsoRequest(), outputs, vnfRollback); + } + response = new UpdateVolumeGroupResponse(req.getVolumeGroupId(), req.getVolumeGroupStackId(), + outputs.value, req.getMessageId()); + } catch (VnfException e) { + logger.debug(EXCEPTION, e); + eresp = new VolumeGroupExceptionResponse(e.getMessage(), MsoExceptionCategory.INTERNAL, true, + req.getMessageId()); + } + if (!req.isSynchronous()) { + // This is asynch, so POST response back to caller + BpelRestClient bpelClient = bpelRestClientProvider.get(); + bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml); + } + logger.debug("UpdateVNFVolumesTask exit: code= {} {} {}", getStatusCode(), RESP, getResponse()); + } + } + + @GET + @Path("{aaiVolumeGroupId}") + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @ApiOperation(value = "QueryVNFVolumes", response = Response.class, notes = "Query an existing vnfVolume") + @ApiResponses({@ApiResponse(code = 200, message = "vnfVolume has been successfully queried"), + @ApiResponse(code = 500, message = "query vnfVolume failed, examine entity object for details")}) + public Response queryVNFVolumes( + @ApiParam(value = "aaiVolumeGroupId", + required = true) @PathParam("aaiVolumeGroupId") String aaiVolumeGroupId, + @ApiParam(value = "cloudSiteId", required = true) @QueryParam("cloudSiteId") String cloudSiteId, + @ApiParam(value = "cloudOwner", required = true) @QueryParam("cloudOwner") String cloudOwner, + @ApiParam(value = "tenantId", required = true) @QueryParam("tenantId") String tenantId, + @ApiParam(value = "volumeGroupStackId", + required = true) @QueryParam("volumeGroupStackId") String volumeGroupStackId, + @ApiParam(value = "skipAAI", required = true) @QueryParam("skipAAI") Boolean skipAAI, + @ApiParam(value = "msoRequest.requestId", + required = true) @QueryParam("msoRequest.requestId") String requestId, + @ApiParam(value = "msoRequest.serviceInstanceId", + required = true) @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId, + @ApiParam(value = "mode", required = true) @QueryParam("mode") String mode) { + // This request responds synchronously only + logger.debug("queryVNFVolumes enter: {} {}", aaiVolumeGroupId, volumeGroupStackId); + MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId); + + try { + int respStatus = HttpStatus.SC_OK; + QueryVolumeGroupResponse qryResp = + new QueryVolumeGroupResponse(aaiVolumeGroupId, volumeGroupStackId, null, null); + Holder<Boolean> vnfExists = new Holder<>(); + Holder<String> vfModuleId = new Holder<>(); + Holder<VnfStatus> status = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + if (cloudSiteId != null && cloudSiteId.equals(TESTING_KEYWORD)) { + if (tenantId != null && tenantId.equals(TESTING_KEYWORD)) { + throw new VnfException("testing."); + } + vnfExists.value = true; + vfModuleId.value = TESTING_KEYWORD; + status.value = VnfStatus.ACTIVE; + outputs.value = testMap(); + } else { + // Support different Adapter Implementations + MsoVnfAdapter vnfAdapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudSiteId); + vnfAdapter.queryVnf(cloudSiteId, cloudOwner, tenantId, volumeGroupStackId, msoRequest, vnfExists, + vfModuleId, status, outputs); + } + if (!vnfExists.value) { + logger.debug("VNFVolumes not found"); + qryResp.setVolumeGroupStatus(status.value); + respStatus = HttpStatus.SC_NOT_FOUND; + } else { + logger.debug("VNFVolumes found {}, status={}", vfModuleId.value, status.value); + qryResp.setVolumeGroupStatus(status.value); + qryResp.setVolumeGroupOutputs(outputs.value); + } + logger.debug("Query queryVNFVolumes exit"); + return Response.status(respStatus).entity(new GenericEntity<QueryVolumeGroupResponse>(qryResp) {}).build(); + } catch (VnfException e) { + logger.error("{} {} AaiVolumeGroupId: {} VnfException - queryVNFVolumes: ", MessageEnum.RA_QUERY_VNF_ERR, + ErrorCode.BusinessProcesssError.getValue(), aaiVolumeGroupId, e); + VolumeGroupExceptionResponse excResp = new VolumeGroupExceptionResponse(e.getMessage(), + MsoExceptionCategory.INTERNAL, Boolean.FALSE, null); + logger.debug("Query queryVNFVolumes exit"); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR) + .entity(new GenericEntity<VolumeGroupExceptionResponse>(excResp) {}).build(); + } + } + public static Map<String, String> testMap() { - Map<String, String> m = new HashMap<>(); - m.put("mickey", "7"); - m.put("clyde", "10"); - m.put("wayne", "99"); - return m; + Map<String, String> m = new HashMap<>(); + m.put("mickey", "7"); + m.put("clyde", "10"); + m.put("wayne", "99"); + return m; } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/CreateVnfNotification.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/CreateVnfNotification.java index ba301b10fe..e3c59fd93d 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/CreateVnfNotification.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/CreateVnfNotification.java @@ -22,7 +22,6 @@ package org.onap.so.adapters.vnf.async.client; import java.util.ArrayList; import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -30,9 +29,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for createVnfNotification complex type. + * <p> + * Java class for createVnfNotification complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="createVnfNotification"> @@ -76,15 +77,8 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "createVnfNotification", propOrder = { - "messageId", - "completed", - "exception", - "errorMessage", - "vnfId", - "outputs", - "rollback" -}) +@XmlType(name = "createVnfNotification", + propOrder = {"messageId", "completed", "exception", "errorMessage", "vnfId", "outputs", "rollback"}) public class CreateVnfNotification { @XmlElement(required = true) @@ -99,10 +93,8 @@ public class CreateVnfNotification { /** * Gets the value of the messageId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getMessageId() { return messageId; @@ -111,10 +103,8 @@ public class CreateVnfNotification { /** * Sets the value of the messageId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setMessageId(String value) { this.messageId = value; @@ -139,10 +129,8 @@ public class CreateVnfNotification { /** * Gets the value of the exception property. * - * @return - * possible object is - * {@link MsoExceptionCategory } - * + * @return possible object is {@link MsoExceptionCategory } + * */ public MsoExceptionCategory getException() { return exception; @@ -151,10 +139,8 @@ public class CreateVnfNotification { /** * Sets the value of the exception property. * - * @param value - * allowed object is - * {@link MsoExceptionCategory } - * + * @param value allowed object is {@link MsoExceptionCategory } + * */ public void setException(MsoExceptionCategory value) { this.exception = value; @@ -163,10 +149,8 @@ public class CreateVnfNotification { /** * Gets the value of the errorMessage property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getErrorMessage() { return errorMessage; @@ -175,10 +159,8 @@ public class CreateVnfNotification { /** * Sets the value of the errorMessage property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setErrorMessage(String value) { this.errorMessage = value; @@ -187,10 +169,8 @@ public class CreateVnfNotification { /** * Gets the value of the vnfId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getVnfId() { return vnfId; @@ -199,10 +179,8 @@ public class CreateVnfNotification { /** * Sets the value of the vnfId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setVnfId(String value) { this.vnfId = value; @@ -211,10 +189,8 @@ public class CreateVnfNotification { /** * Gets the value of the outputs property. * - * @return - * possible object is - * {@link CreateVnfNotification.Outputs } - * + * @return possible object is {@link CreateVnfNotification.Outputs } + * */ public CreateVnfNotification.Outputs getOutputs() { return outputs; @@ -223,10 +199,8 @@ public class CreateVnfNotification { /** * Sets the value of the outputs property. * - * @param value - * allowed object is - * {@link CreateVnfNotification.Outputs } - * + * @param value allowed object is {@link CreateVnfNotification.Outputs } + * */ public void setOutputs(CreateVnfNotification.Outputs value) { this.outputs = value; @@ -235,10 +209,8 @@ public class CreateVnfNotification { /** * Gets the value of the rollback property. * - * @return - * possible object is - * {@link VnfRollback } - * + * @return possible object is {@link VnfRollback } + * */ public VnfRollback getRollback() { return rollback; @@ -247,10 +219,8 @@ public class CreateVnfNotification { /** * Sets the value of the rollback property. * - * @param value - * allowed object is - * {@link VnfRollback } - * + * @param value allowed object is {@link VnfRollback } + * */ public void setRollback(VnfRollback value) { this.rollback = value; @@ -258,9 +228,11 @@ public class CreateVnfNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -288,9 +260,7 @@ public class CreateVnfNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "entry" - }) + @XmlType(name = "", propOrder = {"entry"}) public static class Outputs { protected List<CreateVnfNotification.Outputs.Entry> entry; @@ -299,21 +269,20 @@ public class CreateVnfNotification { * Gets the value of the entry property. * * <p> - * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a <CODE>set</CODE> method for the entry property. + * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you + * make to the returned list will be present inside the JAXB object. This is why there is not a <CODE>set</CODE> + * method for the entry property. * * <p> * For example, to add a new item, do as follows: + * * <pre> - * getEntry().add(newItem); + * getEntry().add(newItem); * </pre> * * * <p> - * Objects of the following type(s) are allowed in the list - * {@link CreateVnfNotification.Outputs.Entry } + * Objects of the following type(s) are allowed in the list {@link CreateVnfNotification.Outputs.Entry } * * */ @@ -326,9 +295,11 @@ public class CreateVnfNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -346,10 +317,7 @@ public class CreateVnfNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "key", - "value" - }) + @XmlType(name = "", propOrder = {"key", "value"}) public static class Entry { protected String key; @@ -358,10 +326,8 @@ public class CreateVnfNotification { /** * Gets the value of the key property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getKey() { return key; @@ -370,10 +336,8 @@ public class CreateVnfNotification { /** * Sets the value of the key property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setKey(String value) { this.key = value; @@ -382,10 +346,8 @@ public class CreateVnfNotification { /** * Gets the value of the value property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getValue() { return value; @@ -394,10 +356,8 @@ public class CreateVnfNotification { /** * Sets the value of the value property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setValue(String value) { this.value = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/DeleteVnfNotification.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/DeleteVnfNotification.java index d8c533b041..434cf7f772 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/DeleteVnfNotification.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/DeleteVnfNotification.java @@ -27,9 +27,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for deleteVnfNotification complex type. + * <p> + * Java class for deleteVnfNotification complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="deleteVnfNotification"> @@ -49,12 +51,7 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "deleteVnfNotification", propOrder = { - "messageId", - "completed", - "exception", - "errorMessage" -}) +@XmlType(name = "deleteVnfNotification", propOrder = {"messageId", "completed", "exception", "errorMessage"}) public class DeleteVnfNotification { @XmlElement(required = true) @@ -66,10 +63,8 @@ public class DeleteVnfNotification { /** * Gets the value of the messageId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getMessageId() { return messageId; @@ -78,10 +73,8 @@ public class DeleteVnfNotification { /** * Sets the value of the messageId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setMessageId(String value) { this.messageId = value; @@ -106,10 +99,8 @@ public class DeleteVnfNotification { /** * Gets the value of the exception property. * - * @return - * possible object is - * {@link MsoExceptionCategory } - * + * @return possible object is {@link MsoExceptionCategory } + * */ public MsoExceptionCategory getException() { return exception; @@ -118,10 +109,8 @@ public class DeleteVnfNotification { /** * Sets the value of the exception property. * - * @param value - * allowed object is - * {@link MsoExceptionCategory } - * + * @param value allowed object is {@link MsoExceptionCategory } + * */ public void setException(MsoExceptionCategory value) { this.exception = value; @@ -130,10 +119,8 @@ public class DeleteVnfNotification { /** * Gets the value of the errorMessage property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getErrorMessage() { return errorMessage; @@ -142,10 +129,8 @@ public class DeleteVnfNotification { /** * Sets the value of the errorMessage property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setErrorMessage(String value) { this.errorMessage = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/MsoExceptionCategory.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/MsoExceptionCategory.java index 73642a7f44..de389d354b 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/MsoExceptionCategory.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/MsoExceptionCategory.java @@ -25,10 +25,13 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for msoExceptionCategory. + * <p> + * Java class for msoExceptionCategory. * - * <p>The following schema fragment specifies the expected content contained within this class. * <p> + * The following schema fragment specifies the expected content contained within this class. + * <p> + * * <pre> * <simpleType name="msoExceptionCategory"> * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> @@ -45,10 +48,7 @@ import javax.xml.bind.annotation.XmlType; @XmlEnum public enum MsoExceptionCategory { - OPENSTACK, - IO, - INTERNAL, - USERDATA; + OPENSTACK, IO, INTERNAL, USERDATA; public String value() { return name(); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/MsoRequest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/MsoRequest.java index a4253b0cef..b1159f1de7 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/MsoRequest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/MsoRequest.java @@ -26,9 +26,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for msoRequest complex type. + * <p> + * Java class for msoRequest complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="msoRequest"> @@ -46,10 +48,7 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "msoRequest", propOrder = { - "requestId", - "serviceInstanceId" -}) +@XmlType(name = "msoRequest", propOrder = {"requestId", "serviceInstanceId"}) public class MsoRequest { protected String requestId; @@ -58,10 +57,8 @@ public class MsoRequest { /** * Gets the value of the requestId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getRequestId() { return requestId; @@ -70,10 +67,8 @@ public class MsoRequest { /** * Sets the value of the requestId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setRequestId(String value) { this.requestId = value; @@ -82,10 +77,8 @@ public class MsoRequest { /** * Gets the value of the serviceInstanceId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getServiceInstanceId() { return serviceInstanceId; @@ -94,10 +87,8 @@ public class MsoRequest { /** * Sets the value of the serviceInstanceId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setServiceInstanceId(String value) { this.serviceInstanceId = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/ObjectFactory.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/ObjectFactory.java index 1e1a80e74c..ced49e2313 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/ObjectFactory.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/ObjectFactory.java @@ -29,23 +29,19 @@ import javax.xml.namespace.QName; /** - * This object contains factory methods for each - * Java content interface and Java element interface - * generated in the org.onap.so.adapters.vnf.async.client package. - * <p>An ObjectFactory allows you to programatically - * construct new instances of the Java representation - * for XML content. The Java representation of XML - * content can consist of schema derived interfaces - * and classes representing the binding of schema - * type definitions, element declarations and model - * groups. Factory methods for each of these are - * provided in this class. + * This object contains factory methods for each Java content interface and Java element interface generated in the + * org.onap.so.adapters.vnf.async.client package. + * <p> + * An ObjectFactory allows you to programatically construct new instances of the Java representation for XML content. + * The Java representation of XML content can consist of schema derived interfaces and classes representing the binding + * of schema type definitions, element declarations and model groups. Factory methods for each of these are provided in + * this class. * */ @XmlRegistry public class ObjectFactory { - private static final String URL= "http://org.onap.so/vnfNotify"; + private static final String URL = "http://org.onap.so/vnfNotify"; private final static QName _QueryVnfNotification_QNAME = new QName(URL, "queryVnfNotification"); private final static QName _RollbackVnfNotification_QNAME = new QName(URL, "rollbackVnfNotification"); private final static QName _CreateVnfNotification_QNAME = new QName(URL, "createVnfNotification"); @@ -53,11 +49,11 @@ public class ObjectFactory { private final static QName _UpdateVnfNotification_QNAME = new QName(URL, "updateVnfNotification"); /** - * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.onap.so.adapters.vnf.async.client + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: + * org.onap.so.adapters.vnf.async.client * */ - public ObjectFactory() { - } + public ObjectFactory() {} /** * Create an instance of {@link UpdateVnfNotification } @@ -169,7 +165,8 @@ public class ObjectFactory { */ @XmlElementDecl(namespace = URL, name = "queryVnfNotification") public JAXBElement<QueryVnfNotification> createQueryVnfNotification(QueryVnfNotification value) { - return new JAXBElement<QueryVnfNotification>(_QueryVnfNotification_QNAME, QueryVnfNotification.class, null, value); + return new JAXBElement<QueryVnfNotification>(_QueryVnfNotification_QNAME, QueryVnfNotification.class, null, + value); } /** @@ -178,7 +175,8 @@ public class ObjectFactory { */ @XmlElementDecl(namespace = URL, name = "rollbackVnfNotification") public JAXBElement<RollbackVnfNotification> createRollbackVnfNotification(RollbackVnfNotification value) { - return new JAXBElement<RollbackVnfNotification>(_RollbackVnfNotification_QNAME, RollbackVnfNotification.class, null, value); + return new JAXBElement<RollbackVnfNotification>(_RollbackVnfNotification_QNAME, RollbackVnfNotification.class, + null, value); } /** @@ -187,7 +185,8 @@ public class ObjectFactory { */ @XmlElementDecl(namespace = URL, name = "createVnfNotification") public JAXBElement<CreateVnfNotification> createCreateVnfNotification(CreateVnfNotification value) { - return new JAXBElement<CreateVnfNotification>(_CreateVnfNotification_QNAME, CreateVnfNotification.class, null, value); + return new JAXBElement<CreateVnfNotification>(_CreateVnfNotification_QNAME, CreateVnfNotification.class, null, + value); } /** @@ -196,7 +195,8 @@ public class ObjectFactory { */ @XmlElementDecl(namespace = URL, name = "deleteVnfNotification") public JAXBElement<DeleteVnfNotification> createDeleteVnfNotification(DeleteVnfNotification value) { - return new JAXBElement<DeleteVnfNotification>(_DeleteVnfNotification_QNAME, DeleteVnfNotification.class, null, value); + return new JAXBElement<DeleteVnfNotification>(_DeleteVnfNotification_QNAME, DeleteVnfNotification.class, null, + value); } /** @@ -205,7 +205,8 @@ public class ObjectFactory { */ @XmlElementDecl(namespace = URL, name = "updateVnfNotification") public JAXBElement<UpdateVnfNotification> createUpdateVnfNotification(UpdateVnfNotification value) { - return new JAXBElement<UpdateVnfNotification>(_UpdateVnfNotification_QNAME, UpdateVnfNotification.class, null, value); + return new JAXBElement<UpdateVnfNotification>(_UpdateVnfNotification_QNAME, UpdateVnfNotification.class, null, + value); } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/QueryVnfNotification.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/QueryVnfNotification.java index 0fd701d4f6..8968851fe1 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/QueryVnfNotification.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/QueryVnfNotification.java @@ -22,7 +22,6 @@ package org.onap.so.adapters.vnf.async.client; import java.util.ArrayList; import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -30,9 +29,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for queryVnfNotification complex type. + * <p> + * Java class for queryVnfNotification complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="queryVnfNotification"> @@ -77,16 +78,8 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "queryVnfNotification", propOrder = { - "messageId", - "completed", - "exception", - "errorMessage", - "vnfExists", - "vnfId", - "status", - "outputs" -}) +@XmlType(name = "queryVnfNotification", + propOrder = {"messageId", "completed", "exception", "errorMessage", "vnfExists", "vnfId", "status", "outputs"}) public class QueryVnfNotification { @XmlElement(required = true) @@ -102,10 +95,8 @@ public class QueryVnfNotification { /** * Gets the value of the messageId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getMessageId() { return messageId; @@ -114,10 +105,8 @@ public class QueryVnfNotification { /** * Sets the value of the messageId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setMessageId(String value) { this.messageId = value; @@ -142,10 +131,8 @@ public class QueryVnfNotification { /** * Gets the value of the exception property. * - * @return - * possible object is - * {@link MsoExceptionCategory } - * + * @return possible object is {@link MsoExceptionCategory } + * */ public MsoExceptionCategory getException() { return exception; @@ -154,10 +141,8 @@ public class QueryVnfNotification { /** * Sets the value of the exception property. * - * @param value - * allowed object is - * {@link MsoExceptionCategory } - * + * @param value allowed object is {@link MsoExceptionCategory } + * */ public void setException(MsoExceptionCategory value) { this.exception = value; @@ -166,10 +151,8 @@ public class QueryVnfNotification { /** * Gets the value of the errorMessage property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getErrorMessage() { return errorMessage; @@ -178,10 +161,8 @@ public class QueryVnfNotification { /** * Sets the value of the errorMessage property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setErrorMessage(String value) { this.errorMessage = value; @@ -190,10 +171,8 @@ public class QueryVnfNotification { /** * Gets the value of the vnfExists property. * - * @return - * possible object is - * {@link Boolean } - * + * @return possible object is {@link Boolean } + * */ public Boolean isVnfExists() { return vnfExists; @@ -202,10 +181,8 @@ public class QueryVnfNotification { /** * Sets the value of the vnfExists property. * - * @param value - * allowed object is - * {@link Boolean } - * + * @param value allowed object is {@link Boolean } + * */ public void setVnfExists(Boolean value) { this.vnfExists = value; @@ -214,10 +191,8 @@ public class QueryVnfNotification { /** * Gets the value of the vnfId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getVnfId() { return vnfId; @@ -226,10 +201,8 @@ public class QueryVnfNotification { /** * Sets the value of the vnfId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setVnfId(String value) { this.vnfId = value; @@ -238,10 +211,8 @@ public class QueryVnfNotification { /** * Gets the value of the status property. * - * @return - * possible object is - * {@link VnfStatus } - * + * @return possible object is {@link VnfStatus } + * */ public VnfStatus getStatus() { return status; @@ -250,10 +221,8 @@ public class QueryVnfNotification { /** * Sets the value of the status property. * - * @param value - * allowed object is - * {@link VnfStatus } - * + * @param value allowed object is {@link VnfStatus } + * */ public void setStatus(VnfStatus value) { this.status = value; @@ -262,10 +231,8 @@ public class QueryVnfNotification { /** * Gets the value of the outputs property. * - * @return - * possible object is - * {@link QueryVnfNotification.Outputs } - * + * @return possible object is {@link QueryVnfNotification.Outputs } + * */ public QueryVnfNotification.Outputs getOutputs() { return outputs; @@ -274,10 +241,8 @@ public class QueryVnfNotification { /** * Sets the value of the outputs property. * - * @param value - * allowed object is - * {@link QueryVnfNotification.Outputs } - * + * @param value allowed object is {@link QueryVnfNotification.Outputs } + * */ public void setOutputs(QueryVnfNotification.Outputs value) { this.outputs = value; @@ -285,9 +250,11 @@ public class QueryVnfNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -315,9 +282,7 @@ public class QueryVnfNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "entry" - }) + @XmlType(name = "", propOrder = {"entry"}) public static class Outputs { protected List<QueryVnfNotification.Outputs.Entry> entry; @@ -326,21 +291,20 @@ public class QueryVnfNotification { * Gets the value of the entry property. * * <p> - * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a <CODE>set</CODE> method for the entry property. + * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you + * make to the returned list will be present inside the JAXB object. This is why there is not a <CODE>set</CODE> + * method for the entry property. * * <p> * For example, to add a new item, do as follows: + * * <pre> - * getEntry().add(newItem); + * getEntry().add(newItem); * </pre> * * * <p> - * Objects of the following type(s) are allowed in the list - * {@link QueryVnfNotification.Outputs.Entry } + * Objects of the following type(s) are allowed in the list {@link QueryVnfNotification.Outputs.Entry } * * */ @@ -353,9 +317,11 @@ public class QueryVnfNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -373,10 +339,7 @@ public class QueryVnfNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "key", - "value" - }) + @XmlType(name = "", propOrder = {"key", "value"}) public static class Entry { protected String key; @@ -385,10 +348,8 @@ public class QueryVnfNotification { /** * Gets the value of the key property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getKey() { return key; @@ -397,10 +358,8 @@ public class QueryVnfNotification { /** * Sets the value of the key property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setKey(String value) { this.key = value; @@ -409,10 +368,8 @@ public class QueryVnfNotification { /** * Gets the value of the value property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getValue() { return value; @@ -421,10 +378,8 @@ public class QueryVnfNotification { /** * Sets the value of the value property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setValue(String value) { this.value = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/RollbackVnfNotification.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/RollbackVnfNotification.java index 05947f5e62..e5f8878e84 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/RollbackVnfNotification.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/RollbackVnfNotification.java @@ -27,9 +27,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for rollbackVnfNotification complex type. + * <p> + * Java class for rollbackVnfNotification complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="rollbackVnfNotification"> @@ -49,12 +51,7 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "rollbackVnfNotification", propOrder = { - "messageId", - "completed", - "exception", - "errorMessage" -}) +@XmlType(name = "rollbackVnfNotification", propOrder = {"messageId", "completed", "exception", "errorMessage"}) public class RollbackVnfNotification { @XmlElement(required = true) @@ -66,10 +63,8 @@ public class RollbackVnfNotification { /** * Gets the value of the messageId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getMessageId() { return messageId; @@ -78,10 +73,8 @@ public class RollbackVnfNotification { /** * Sets the value of the messageId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setMessageId(String value) { this.messageId = value; @@ -106,10 +99,8 @@ public class RollbackVnfNotification { /** * Gets the value of the exception property. * - * @return - * possible object is - * {@link MsoExceptionCategory } - * + * @return possible object is {@link MsoExceptionCategory } + * */ public MsoExceptionCategory getException() { return exception; @@ -118,10 +109,8 @@ public class RollbackVnfNotification { /** * Sets the value of the exception property. * - * @param value - * allowed object is - * {@link MsoExceptionCategory } - * + * @param value allowed object is {@link MsoExceptionCategory } + * */ public void setException(MsoExceptionCategory value) { this.exception = value; @@ -130,10 +119,8 @@ public class RollbackVnfNotification { /** * Gets the value of the errorMessage property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getErrorMessage() { return errorMessage; @@ -142,10 +129,8 @@ public class RollbackVnfNotification { /** * Sets the value of the errorMessage property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setErrorMessage(String value) { this.errorMessage = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/UpdateVnfNotification.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/UpdateVnfNotification.java index 13fa8cb0ef..b738d6dc64 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/UpdateVnfNotification.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/UpdateVnfNotification.java @@ -22,7 +22,6 @@ package org.onap.so.adapters.vnf.async.client; import java.util.ArrayList; import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -30,9 +29,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for updateVnfNotification complex type. + * <p> + * Java class for updateVnfNotification complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="updateVnfNotification"> @@ -75,14 +76,8 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "updateVnfNotification", propOrder = { - "messageId", - "completed", - "exception", - "errorMessage", - "outputs", - "rollback" -}) +@XmlType(name = "updateVnfNotification", + propOrder = {"messageId", "completed", "exception", "errorMessage", "outputs", "rollback"}) public class UpdateVnfNotification { @XmlElement(required = true) @@ -96,10 +91,8 @@ public class UpdateVnfNotification { /** * Gets the value of the messageId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getMessageId() { return messageId; @@ -108,10 +101,8 @@ public class UpdateVnfNotification { /** * Sets the value of the messageId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setMessageId(String value) { this.messageId = value; @@ -136,10 +127,8 @@ public class UpdateVnfNotification { /** * Gets the value of the exception property. * - * @return - * possible object is - * {@link MsoExceptionCategory } - * + * @return possible object is {@link MsoExceptionCategory } + * */ public MsoExceptionCategory getException() { return exception; @@ -148,10 +137,8 @@ public class UpdateVnfNotification { /** * Sets the value of the exception property. * - * @param value - * allowed object is - * {@link MsoExceptionCategory } - * + * @param value allowed object is {@link MsoExceptionCategory } + * */ public void setException(MsoExceptionCategory value) { this.exception = value; @@ -160,10 +147,8 @@ public class UpdateVnfNotification { /** * Gets the value of the errorMessage property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getErrorMessage() { return errorMessage; @@ -172,10 +157,8 @@ public class UpdateVnfNotification { /** * Sets the value of the errorMessage property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setErrorMessage(String value) { this.errorMessage = value; @@ -184,10 +167,8 @@ public class UpdateVnfNotification { /** * Gets the value of the outputs property. * - * @return - * possible object is - * {@link UpdateVnfNotification.Outputs } - * + * @return possible object is {@link UpdateVnfNotification.Outputs } + * */ public UpdateVnfNotification.Outputs getOutputs() { return outputs; @@ -196,10 +177,8 @@ public class UpdateVnfNotification { /** * Sets the value of the outputs property. * - * @param value - * allowed object is - * {@link UpdateVnfNotification.Outputs } - * + * @param value allowed object is {@link UpdateVnfNotification.Outputs } + * */ public void setOutputs(UpdateVnfNotification.Outputs value) { this.outputs = value; @@ -208,10 +187,8 @@ public class UpdateVnfNotification { /** * Gets the value of the rollback property. * - * @return - * possible object is - * {@link VnfRollback } - * + * @return possible object is {@link VnfRollback } + * */ public VnfRollback getRollback() { return rollback; @@ -220,10 +197,8 @@ public class UpdateVnfNotification { /** * Sets the value of the rollback property. * - * @param value - * allowed object is - * {@link VnfRollback } - * + * @param value allowed object is {@link VnfRollback } + * */ public void setRollback(VnfRollback value) { this.rollback = value; @@ -231,9 +206,11 @@ public class UpdateVnfNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -261,9 +238,7 @@ public class UpdateVnfNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "entry" - }) + @XmlType(name = "", propOrder = {"entry"}) public static class Outputs { protected List<UpdateVnfNotification.Outputs.Entry> entry; @@ -272,21 +247,20 @@ public class UpdateVnfNotification { * Gets the value of the entry property. * * <p> - * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a <CODE>set</CODE> method for the entry property. + * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you + * make to the returned list will be present inside the JAXB object. This is why there is not a <CODE>set</CODE> + * method for the entry property. * * <p> * For example, to add a new item, do as follows: + * * <pre> - * getEntry().add(newItem); + * getEntry().add(newItem); * </pre> * * * <p> - * Objects of the following type(s) are allowed in the list - * {@link UpdateVnfNotification.Outputs.Entry } + * Objects of the following type(s) are allowed in the list {@link UpdateVnfNotification.Outputs.Entry } * * */ @@ -299,9 +273,11 @@ public class UpdateVnfNotification { /** - * <p>Java class for anonymous complex type. + * <p> + * Java class for anonymous complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> @@ -319,10 +295,7 @@ public class UpdateVnfNotification { * */ @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "key", - "value" - }) + @XmlType(name = "", propOrder = {"key", "value"}) public static class Entry { protected String key; @@ -331,10 +304,8 @@ public class UpdateVnfNotification { /** * Gets the value of the key property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getKey() { return key; @@ -343,10 +314,8 @@ public class UpdateVnfNotification { /** * Sets the value of the key property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setKey(String value) { this.key = value; @@ -355,10 +324,8 @@ public class UpdateVnfNotification { /** * Gets the value of the value property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getValue() { return value; @@ -367,10 +334,8 @@ public class UpdateVnfNotification { /** * Sets the value of the value property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setValue(String value) { this.value = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfAdapterNotify.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfAdapterNotify.java index 24370b4d79..d4bdaa3d34 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfAdapterNotify.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfAdapterNotify.java @@ -30,15 +30,11 @@ import javax.xml.ws.RequestWrapper; /** - * This class was generated by the JAX-WS RI. - * JAX-WS RI 2.2.9-b14002 - * Generated source version: 2.2 + * This class was generated by the JAX-WS RI. JAX-WS RI 2.2.9-b14002 Generated source version: 2.2 * */ @WebService(name = "vnfAdapterNotify", targetNamespace = "http://org.onap.so/vnfNotify") -@XmlSeeAlso({ - ObjectFactory.class -}) +@XmlSeeAlso({ObjectFactory.class}) public interface VnfAdapterNotify { @@ -51,17 +47,13 @@ public interface VnfAdapterNotify { */ @WebMethod @Oneway - @RequestWrapper(localName = "rollbackVnfNotification", targetNamespace = "http://org.onap.so/vnfNotify", className = "org.onap.so.adapters.vnf.async.client.RollbackVnfNotification") + @RequestWrapper(localName = "rollbackVnfNotification", targetNamespace = "http://org.onap.so/vnfNotify", + className = "org.onap.so.adapters.vnf.async.client.RollbackVnfNotification") @Action(input = "http://org.onap.so/notify/adapterNotify/rollbackVnfNotificationRequest") - public void rollbackVnfNotification( - @WebParam(name = "messageId", targetNamespace = "") - String messageId, - @WebParam(name = "completed", targetNamespace = "") - boolean completed, - @WebParam(name = "exception", targetNamespace = "") - MsoExceptionCategory exception, - @WebParam(name = "errorMessage", targetNamespace = "") - String errorMessage); + public void rollbackVnfNotification(@WebParam(name = "messageId", targetNamespace = "") String messageId, + @WebParam(name = "completed", targetNamespace = "") boolean completed, + @WebParam(name = "exception", targetNamespace = "") MsoExceptionCategory exception, + @WebParam(name = "errorMessage", targetNamespace = "") String errorMessage); /** * @@ -76,25 +68,17 @@ public interface VnfAdapterNotify { */ @WebMethod @Oneway - @RequestWrapper(localName = "queryVnfNotification", targetNamespace = "http://org.onap.so/vnfNotify", className = "org.onap.so.adapters.vnf.async.client.QueryVnfNotification") + @RequestWrapper(localName = "queryVnfNotification", targetNamespace = "http://org.onap.so/vnfNotify", + className = "org.onap.so.adapters.vnf.async.client.QueryVnfNotification") @Action(input = "http://org.onap.so/notify/adapterNotify/queryVnfNotificationRequest") - public void queryVnfNotification( - @WebParam(name = "messageId", targetNamespace = "") - String messageId, - @WebParam(name = "completed", targetNamespace = "") - boolean completed, - @WebParam(name = "exception", targetNamespace = "") - MsoExceptionCategory exception, - @WebParam(name = "errorMessage", targetNamespace = "") - String errorMessage, - @WebParam(name = "vnfExists", targetNamespace = "") - Boolean vnfExists, - @WebParam(name = "vnfId", targetNamespace = "") - String vnfId, - @WebParam(name = "status", targetNamespace = "") - VnfStatus status, - @WebParam(name = "outputs", targetNamespace = "") - org.onap.so.adapters.vnf.async.client.QueryVnfNotification.Outputs outputs); + public void queryVnfNotification(@WebParam(name = "messageId", targetNamespace = "") String messageId, + @WebParam(name = "completed", targetNamespace = "") boolean completed, + @WebParam(name = "exception", targetNamespace = "") MsoExceptionCategory exception, + @WebParam(name = "errorMessage", targetNamespace = "") String errorMessage, + @WebParam(name = "vnfExists", targetNamespace = "") Boolean vnfExists, + @WebParam(name = "vnfId", targetNamespace = "") String vnfId, + @WebParam(name = "status", targetNamespace = "") VnfStatus status, @WebParam(name = "outputs", + targetNamespace = "") org.onap.so.adapters.vnf.async.client.QueryVnfNotification.Outputs outputs); /** * @@ -108,23 +92,17 @@ public interface VnfAdapterNotify { */ @WebMethod @Oneway - @RequestWrapper(localName = "createVnfNotification", targetNamespace = "http://org.onap.so/vnfNotify", className = "org.onap.so.adapters.vnf.async.client.CreateVnfNotification") + @RequestWrapper(localName = "createVnfNotification", targetNamespace = "http://org.onap.so/vnfNotify", + className = "org.onap.so.adapters.vnf.async.client.CreateVnfNotification") @Action(input = "http://org.onap.so/notify/adapterNotify/createVnfNotificationRequest") - public void createVnfNotification( - @WebParam(name = "messageId", targetNamespace = "") - String messageId, - @WebParam(name = "completed", targetNamespace = "") - boolean completed, - @WebParam(name = "exception", targetNamespace = "") - MsoExceptionCategory exception, - @WebParam(name = "errorMessage", targetNamespace = "") - String errorMessage, - @WebParam(name = "vnfId", targetNamespace = "") - String vnfId, - @WebParam(name = "outputs", targetNamespace = "") - org.onap.so.adapters.vnf.async.client.CreateVnfNotification.Outputs outputs, - @WebParam(name = "rollback", targetNamespace = "") - VnfRollback rollback); + public void createVnfNotification(@WebParam(name = "messageId", targetNamespace = "") String messageId, + @WebParam(name = "completed", targetNamespace = "") boolean completed, + @WebParam(name = "exception", targetNamespace = "") MsoExceptionCategory exception, + @WebParam(name = "errorMessage", targetNamespace = "") String errorMessage, + @WebParam(name = "vnfId", targetNamespace = "") String vnfId, + @WebParam(name = "outputs", + targetNamespace = "") org.onap.so.adapters.vnf.async.client.CreateVnfNotification.Outputs outputs, + @WebParam(name = "rollback", targetNamespace = "") VnfRollback rollback); /** * @@ -137,21 +115,16 @@ public interface VnfAdapterNotify { */ @WebMethod @Oneway - @RequestWrapper(localName = "updateVnfNotification", targetNamespace = "http://org.onap.so/vnfNotify", className = "org.onap.so.adapters.vnf.async.client.UpdateVnfNotification") + @RequestWrapper(localName = "updateVnfNotification", targetNamespace = "http://org.onap.so/vnfNotify", + className = "org.onap.so.adapters.vnf.async.client.UpdateVnfNotification") @Action(input = "http://org.onap.so/notify/adapterNotify/updateVnfNotificationRequest") - public void updateVnfNotification( - @WebParam(name = "messageId", targetNamespace = "") - String messageId, - @WebParam(name = "completed", targetNamespace = "") - boolean completed, - @WebParam(name = "exception", targetNamespace = "") - MsoExceptionCategory exception, - @WebParam(name = "errorMessage", targetNamespace = "") - String errorMessage, - @WebParam(name = "outputs", targetNamespace = "") - org.onap.so.adapters.vnf.async.client.UpdateVnfNotification.Outputs outputs, - @WebParam(name = "rollback", targetNamespace = "") - VnfRollback rollback); + public void updateVnfNotification(@WebParam(name = "messageId", targetNamespace = "") String messageId, + @WebParam(name = "completed", targetNamespace = "") boolean completed, + @WebParam(name = "exception", targetNamespace = "") MsoExceptionCategory exception, + @WebParam(name = "errorMessage", targetNamespace = "") String errorMessage, + @WebParam(name = "outputs", + targetNamespace = "") org.onap.so.adapters.vnf.async.client.UpdateVnfNotification.Outputs outputs, + @WebParam(name = "rollback", targetNamespace = "") VnfRollback rollback); /** * @@ -162,16 +135,12 @@ public interface VnfAdapterNotify { */ @WebMethod @Oneway - @RequestWrapper(localName = "deleteVnfNotification", targetNamespace = "http://org.onap.so/vnfNotify", className = "org.onap.so.adapters.vnf.async.client.DeleteVnfNotification") + @RequestWrapper(localName = "deleteVnfNotification", targetNamespace = "http://org.onap.so/vnfNotify", + className = "org.onap.so.adapters.vnf.async.client.DeleteVnfNotification") @Action(input = "http://org.onap.so/notify/adapterNotify/deleteVnfNotificationRequest") - public void deleteVnfNotification( - @WebParam(name = "messageId", targetNamespace = "") - String messageId, - @WebParam(name = "completed", targetNamespace = "") - boolean completed, - @WebParam(name = "exception", targetNamespace = "") - MsoExceptionCategory exception, - @WebParam(name = "errorMessage", targetNamespace = "") - String errorMessage); + public void deleteVnfNotification(@WebParam(name = "messageId", targetNamespace = "") String messageId, + @WebParam(name = "completed", targetNamespace = "") boolean completed, + @WebParam(name = "exception", targetNamespace = "") MsoExceptionCategory exception, + @WebParam(name = "errorMessage", targetNamespace = "") String errorMessage); } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfAdapterNotify_Service.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfAdapterNotify_Service.java index 4b140b1b30..e1a42706a9 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfAdapterNotify_Service.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfAdapterNotify_Service.java @@ -21,7 +21,6 @@ package org.onap.so.adapters.vnf.async.client; import java.net.URL; - import javax.xml.namespace.QName; import javax.xml.ws.Service; import javax.xml.ws.WebEndpoint; @@ -31,25 +30,24 @@ import javax.xml.ws.WebServiceFeature; /** - * This class was generated by the JAX-WS RI. - * JAX-WS RI 2.2.9-b14002 - * Generated source version: 2.2 + * This class was generated by the JAX-WS RI. JAX-WS RI 2.2.9-b14002 Generated source version: 2.2 * */ -@WebServiceClient(name = "vnfAdapterNotify", targetNamespace = "http://org.onap.so/vnfNotify", wsdlLocation = "/VnfAdapterNotify.wsdl") -public class VnfAdapterNotify_Service - extends Service -{ +@WebServiceClient(name = "vnfAdapterNotify", targetNamespace = "http://org.onap.so/vnfNotify", + wsdlLocation = "/VnfAdapterNotify.wsdl") +public class VnfAdapterNotify_Service extends Service { private final static URL VNFADAPTERNOTIFY_WSDL_LOCATION; private final static WebServiceException VNFADAPTERNOTIFY_EXCEPTION; private final static QName VNFADAPTERNOTIFY_QNAME = new QName("http://org.onap.so/vnfNotify", "vnfAdapterNotify"); static { - VNFADAPTERNOTIFY_WSDL_LOCATION = org.onap.so.adapters.vnf.async.client.VnfAdapterNotify_Service.class.getResource("/VnfAdapterNotify.wsdl"); + VNFADAPTERNOTIFY_WSDL_LOCATION = org.onap.so.adapters.vnf.async.client.VnfAdapterNotify_Service.class + .getResource("/VnfAdapterNotify.wsdl"); WebServiceException e = null; if (VNFADAPTERNOTIFY_WSDL_LOCATION == null) { - e = new WebServiceException("Cannot find '/VnfAdapterNotify.wsdl' wsdl. Place the resource correctly in the classpath."); + e = new WebServiceException( + "Cannot find '/VnfAdapterNotify.wsdl' wsdl. Place the resource correctly in the classpath."); } VNFADAPTERNOTIFY_EXCEPTION = e; } @@ -80,28 +78,28 @@ public class VnfAdapterNotify_Service /** * - * @return - * returns VnfAdapterNotify + * @return returns VnfAdapterNotify */ @WebEndpoint(name = "MsoVnfAdapterAsyncImplPort") public VnfAdapterNotify getMsoVnfAdapterAsyncImplPort() { - return super.getPort(new QName("http://org.onap.so/vnfNotify", "MsoVnfAdapterAsyncImplPort"), VnfAdapterNotify.class); + return super.getPort(new QName("http://org.onap.so/vnfNotify", "MsoVnfAdapterAsyncImplPort"), + VnfAdapterNotify.class); } /** * - * @param features - * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values. - * @return - * returns VnfAdapterNotify + * @param features A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features + * not in the <code>features</code> parameter will have their default values. + * @return returns VnfAdapterNotify */ @WebEndpoint(name = "MsoVnfAdapterAsyncImplPort") public VnfAdapterNotify getMsoVnfAdapterAsyncImplPort(WebServiceFeature... features) { - return super.getPort(new QName("http://org.onap.so/vnfNotify", "MsoVnfAdapterAsyncImplPort"), VnfAdapterNotify.class, features); + return super.getPort(new QName("http://org.onap.so/vnfNotify", "MsoVnfAdapterAsyncImplPort"), + VnfAdapterNotify.class, features); } private static URL __getWsdlLocation() { - if (VNFADAPTERNOTIFY_EXCEPTION!= null) { + if (VNFADAPTERNOTIFY_EXCEPTION != null) { throw VNFADAPTERNOTIFY_EXCEPTION; } return VNFADAPTERNOTIFY_WSDL_LOCATION; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfRollback.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfRollback.java index 9ad20738d0..7d8b4d1b41 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfRollback.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfRollback.java @@ -26,9 +26,11 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for vnfRollback complex type. + * <p> + * Java class for vnfRollback complex type. * - * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="vnfRollback"> @@ -50,14 +52,8 @@ import javax.xml.bind.annotation.XmlType; * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "vnfRollback", propOrder = { - "cloudSiteId", - "msoRequest", - "tenantCreated", - "tenantId", - "vnfCreated", - "vnfId" -}) +@XmlType(name = "vnfRollback", + propOrder = {"cloudSiteId", "msoRequest", "tenantCreated", "tenantId", "vnfCreated", "vnfId"}) public class VnfRollback { protected String cloudSiteId; @@ -70,10 +66,8 @@ public class VnfRollback { /** * Gets the value of the cloudSiteId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getCloudSiteId() { return cloudSiteId; @@ -82,10 +76,8 @@ public class VnfRollback { /** * Sets the value of the cloudSiteId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setCloudSiteId(String value) { this.cloudSiteId = value; @@ -94,10 +86,8 @@ public class VnfRollback { /** * Gets the value of the msoRequest property. * - * @return - * possible object is - * {@link MsoRequest } - * + * @return possible object is {@link MsoRequest } + * */ public MsoRequest getMsoRequest() { return msoRequest; @@ -106,10 +96,8 @@ public class VnfRollback { /** * Sets the value of the msoRequest property. * - * @param value - * allowed object is - * {@link MsoRequest } - * + * @param value allowed object is {@link MsoRequest } + * */ public void setMsoRequest(MsoRequest value) { this.msoRequest = value; @@ -134,10 +122,8 @@ public class VnfRollback { /** * Gets the value of the tenantId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getTenantId() { return tenantId; @@ -146,10 +132,8 @@ public class VnfRollback { /** * Sets the value of the tenantId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setTenantId(String value) { this.tenantId = value; @@ -174,10 +158,8 @@ public class VnfRollback { /** * Gets the value of the vnfId property. * - * @return - * possible object is - * {@link String } - * + * @return possible object is {@link String } + * */ public String getVnfId() { return vnfId; @@ -186,10 +168,8 @@ public class VnfRollback { /** * Sets the value of the vnfId property. * - * @param value - * allowed object is - * {@link String } - * + * @param value allowed object is {@link String } + * */ public void setVnfId(String value) { this.vnfId = value; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfStatus.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfStatus.java index 1998ae0ce9..767777767c 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfStatus.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/async/client/VnfStatus.java @@ -25,10 +25,13 @@ import javax.xml.bind.annotation.XmlType; /** - * <p>Java class for vnfStatus. + * <p> + * Java class for vnfStatus. * - * <p>The following schema fragment specifies the expected content contained within this class. * <p> + * The following schema fragment specifies the expected content contained within this class. + * <p> + * * <pre> * <simpleType name="vnfStatus"> * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> @@ -45,10 +48,7 @@ import javax.xml.bind.annotation.XmlType; @XmlEnum public enum VnfStatus { - ACTIVE, - FAILED, - NOTFOUND, - UNKNOWN; + ACTIVE, FAILED, NOTFOUND, UNKNOWN; public String value() { return name(); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfAlreadyExists.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfAlreadyExists.java index 2a7f33a682..31ad3f4fc3 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfAlreadyExists.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfAlreadyExists.java @@ -25,18 +25,19 @@ package org.onap.so.adapters.vnf.exceptions; import javax.xml.ws.WebFault; /** - * This class reports an exception when trying to create a VNF when another - * VNF of the same name already exists in the target cloud/tenant. Note that - * the createVnf method suppresses this exception by default. + * This class reports an exception when trying to create a VNF when another VNF of the same name already exists in the + * target cloud/tenant. Note that the createVnf method suppresses this exception by default. * * */ -@WebFault (name="VnfAlreadyExists", faultBean="org.onap.so.adapters.vnf.exceptions.VnfExceptionBean", targetNamespace="http://org.onap.so/vnf") +@WebFault(name = "VnfAlreadyExists", faultBean = "org.onap.so.adapters.vnf.exceptions.VnfExceptionBean", + targetNamespace = "http://org.onap.so/vnf") public class VnfAlreadyExists extends VnfException { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - public VnfAlreadyExists (String name, String cloudId, String tenantId, String vnfId) { - super("Resource " + name + " already exists in cloud/tenant " + cloudId + "/" + tenantId + " with ID " + vnfId); - } + public VnfAlreadyExists(String name, String cloudId, String cloudOwner, String tenantId, String vnfId) { + super("Resource " + name + " already exists in owner/cloud/tenant " + cloudOwner + "/" + cloudId + "/" + + tenantId + " with ID " + vnfId); + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfException.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfException.java index 39f48e64dd..c5dd92eda9 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfException.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfException.java @@ -23,58 +23,58 @@ package org.onap.so.adapters.vnf.exceptions; import javax.xml.ws.WebFault; - import org.onap.so.openstack.exceptions.MsoException; import org.onap.so.openstack.exceptions.MsoExceptionCategory; /** - * This class simply extends Exception (without addition additional functionality) - * to provide an identifier for VNF related exceptions on create, delete, query. + * This class simply extends Exception (without addition additional functionality) to provide an identifier for VNF + * related exceptions on create, delete, query. * * */ -@WebFault (name="VnfException", faultBean="org.onap.so.adapters.vnf.exceptions.VnfExceptionBean", targetNamespace="http://org.onap.so/vnf") +@WebFault(name = "VnfException", faultBean = "org.onap.so.adapters.vnf.exceptions.VnfExceptionBean", + targetNamespace = "http://org.onap.so/vnf") public class VnfException extends Exception { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + private VnfExceptionBean faultInfo; + + public VnfException(String msg) { + super(msg); + faultInfo = new VnfExceptionBean(msg); + } + + public VnfException(Throwable e) { + super(e); + faultInfo = new VnfExceptionBean(e.getMessage()); + } + + public VnfException(String msg, Throwable e) { + super(msg, e); + faultInfo = new VnfExceptionBean(msg); + } + + public VnfException(String msg, MsoExceptionCategory category) { + super(msg); + faultInfo = new VnfExceptionBean(msg, category); + } + + public VnfException(String msg, MsoExceptionCategory category, Throwable e) { + super(msg, e); + faultInfo = new VnfExceptionBean(msg, category); + } - private VnfExceptionBean faultInfo; - - public VnfException (String msg) { - super(msg); - faultInfo = new VnfExceptionBean (msg); - } - - public VnfException (Throwable e) { - super(e); - faultInfo = new VnfExceptionBean (e.getMessage()); - } - - public VnfException (String msg, Throwable e) { - super (msg, e); - faultInfo = new VnfExceptionBean (msg); - } + public VnfException(MsoException e) { + super(e); + faultInfo = new VnfExceptionBean(e.getContextMessage(), e.getCategory()); + } - public VnfException (String msg, MsoExceptionCategory category) { - super(msg); - faultInfo = new VnfExceptionBean (msg, category); - } - - public VnfException (String msg, MsoExceptionCategory category, Throwable e) { - super (msg, e); - faultInfo = new VnfExceptionBean (msg, category); - } - - public VnfException (MsoException e) { - super (e); - faultInfo = new VnfExceptionBean (e.getContextMessage(), e.getCategory()); - } - - public VnfExceptionBean getFaultInfo() { - return faultInfo; - } + public VnfExceptionBean getFaultInfo() { + return faultInfo; + } - public void setFaultInfo(VnfExceptionBean faultInfo) { - this.faultInfo = faultInfo; - } + public void setFaultInfo(VnfExceptionBean faultInfo) { + this.faultInfo = faultInfo; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfExceptionBean.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfExceptionBean.java index 011afa72ee..30e9fa590c 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfExceptionBean.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfExceptionBean.java @@ -22,7 +22,6 @@ package org.onap.so.adapters.vnf.exceptions; import java.io.Serializable; - import org.onap.so.openstack.exceptions.MsoExceptionCategory; /** @@ -33,42 +32,42 @@ public class VnfExceptionBean implements Serializable { private static final long serialVersionUID = -5699310749783790095L; private String message; - private MsoExceptionCategory category; - private Boolean rolledBack; + private MsoExceptionCategory category; + private Boolean rolledBack; - public VnfExceptionBean () {} + public VnfExceptionBean() {} - public VnfExceptionBean (String message) { - // Create a default category to prevent null pointer exceptions - this(message, MsoExceptionCategory.INTERNAL); - } + public VnfExceptionBean(String message) { + // Create a default category to prevent null pointer exceptions + this(message, MsoExceptionCategory.INTERNAL); + } - public VnfExceptionBean (String message, MsoExceptionCategory category) { - this.message = message; - this.category = category; - } + public VnfExceptionBean(String message, MsoExceptionCategory category) { + this.message = message; + this.category = category; + } - public String getMessage() { - return message; - } + public String getMessage() { + return message; + } - public void setMessage(String message) { - this.message = message; - } + public void setMessage(String message) { + this.message = message; + } - public MsoExceptionCategory getCategory () { - return category; - } + public MsoExceptionCategory getCategory() { + return category; + } - public void setCategory (MsoExceptionCategory category) { - this.category = category; - } + public void setCategory(MsoExceptionCategory category) { + this.category = category; + } - public Boolean isRolledBack() { - return rolledBack; - } + public Boolean isRolledBack() { + return rolledBack; + } - public void setRolledBack(Boolean rolledBack) { - this.rolledBack = rolledBack; - } + public void setRolledBack(Boolean rolledBack) { + this.rolledBack = rolledBack; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfNotFound.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfNotFound.java index f3fa39cc2d..4220d389c5 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfNotFound.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/exceptions/VnfNotFound.java @@ -24,18 +24,19 @@ package org.onap.so.adapters.vnf.exceptions; import javax.xml.ws.WebFault; /** - * This class reports an exception when trying to update a Network that does - * not exist in the target cloud/tenant. Note that deleteNetwork suppresses - * this exception (deletion of non-existent network is considered a success). + * This class reports an exception when trying to update a Network that does not exist in the target cloud/tenant. Note + * that deleteNetwork suppresses this exception (deletion of non-existent network is considered a success). * * */ -@WebFault (name="VnfNotFound", faultBean="org.onap.so.adapters.vnf.exceptions.VnfExceptionBean", targetNamespace="http://org.onap.so/vnf") +@WebFault(name = "VnfNotFound", faultBean = "org.onap.so.adapters.vnf.exceptions.VnfExceptionBean", + targetNamespace = "http://org.onap.so/vnf") public class VnfNotFound extends VnfException { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - public VnfNotFound (String cloudId, String tenantId, String vnfName) { - super("Resource " + vnfName + " not found in cloud/tenant " + cloudId + "/" + tenantId); - } + public VnfNotFound(String cloudId, String cloudOwner, String tenantId, String vnfName) { + super("Resource " + vnfName + " not found in owner/cloud/tenant " + cloudOwner + "/" + cloudId + "/" + + tenantId); + } } 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 new file mode 100644 index 0000000000..c6fd73d9cb --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeApi.java @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.onap.so.heatbridge; + +import java.util.List; +import org.onap.so.heatbridge.openstack.api.OpenstackClient; +import org.openstack4j.model.compute.Flavor; +import org.openstack4j.model.compute.Image; +import org.openstack4j.model.compute.Server; +import org.openstack4j.model.heat.Resource; + +/** + * Defines the contract to extract Heat Stack Resources from Openstack and inventory it to AAI. This API is used only to + * "create" objects in AAI. + */ +public interface HeatBridgeApi { + + /** + * Authenticate with Openstack Keystone. The auth information is read from SO cloud configuration file. + * + * @return Openstack client object with keystone token + * @throws HeatBridgeException upon failure to authenticate with keystone + */ + OpenstackClient authenticate() throws HeatBridgeException; + + /** + * Query all the stack based resources from Openstack Heat service + * + * @param heatStackId Heat stack UUID + * @return A list of stack based resources + */ + List<Resource> queryNestedHeatStackResources(String heatStackId); + + /** + * Get a filtered list of resource IDs by resource type + * + * @param stackResources A list of stack based resources + * @param resourceType Resource type to filter by + * @return A list of stack resources matching the specified resource-type + */ + List<String> extractStackResourceIdsByResourceType(List<Resource> stackResources, String resourceType); + + /** + * Get network IDs for a given list of network names. It is assumed that there is a one to one mapping between the + * name and ID. + * + * @param networkNameList List of network names + * @return List of matching network IDs + */ + List<String> extractNetworkIds(List<String> networkNameList); + + /** + * Query the Openstack server objects from the list of stack resources + * + * @param stackResources A list of stack based resources + * @return A list of Openstack Server objects + */ + List<Server> getAllOpenstackServers(List<Resource> stackResources); + + /** + * Extract Openstack Image objects from a a list of Server objects + * + * @param servers A list of Openstack Server objects + * @return A list of Openstack Image objects + */ + List<Image> extractOpenstackImagesFromServers(List<Server> servers); + + /** + * Extract Openstack Flavor objects from a a list of Server objects + * + * @param servers A list of Openstack Server objects + * @return A list of Openstack Flavor objects + */ + List<Flavor> extractOpenstackFlavorsFromServers(List<Server> servers); + + /** + * Query and build AAI actions for Openstack Image resources to AAI's image objects + * + * @param images List of Openstack Image objects + * @throws HeatBridgeException when failing to add images to AAI + */ + void buildAddImagesToAaiAction(List<Image> images) throws HeatBridgeException; + + /** + * Query and build AAI actions for Openstack Flavor resources to AAI's flavor objects + * + * @param flavors List of Openstack Flavor objects + * @throws HeatBridgeException when failing to add flavors to AAI + */ + void buildAddFlavorsToAaiAction(List<Flavor> flavors) throws HeatBridgeException; + + /** + * Query and build AAI actions for Openstack Compute resources to AAI's vserver objects + * + * @param genericVnfId AAI generic-vnf-id + * @param vfModuleId AAI vf-module-id + * @param servers Openstack Server list + */ + void buildAddVserversToAaiAction(String genericVnfId, String vfModuleId, List<Server> servers); + + /** + * Query and build AAI actions for Openstack Neutron resources associated with a Compute resource to AAI's + * l-interface objects + * + * @param stackResources Openstack Heat stack resource list + * @param oobMgtNetIds List of OOB network IDs list + */ + void buildAddVserverLInterfacesToAaiAction(List<Resource> stackResources, List<String> oobMgtNetIds); + + /** + * Execute AAI restful API to update the Openstack resources + * + * @throws HeatBridgeException when failing to add openstack resource PoJos to AAI + */ + void submitToAai() throws HeatBridgeException; +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeException.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeException.java new file mode 100644 index 0000000000..9bf2ec73f4 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeException.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.onap.so.heatbridge; + +public class HeatBridgeException extends Exception { + + private static final long serialVersionUID = -1472047930391718894L; + + public HeatBridgeException(final String message) { + super(message); + } + + public HeatBridgeException(final String message, final Throwable cause) { + super(message, cause); + } +} 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 new file mode 100644 index 0000000000..a5e6a4558f --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java @@ -0,0 +1,363 @@ +/* + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.onap.so.heatbridge; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import javax.annotation.Nonnull; +import javax.ws.rs.WebApplicationException; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.validator.routines.InetAddressValidator; +import org.onap.aai.domain.yang.Flavor; +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.SriovPf; +import org.onap.aai.domain.yang.SriovPfs; +import org.onap.aai.domain.yang.SriovVf; +import org.onap.aai.domain.yang.SriovVfs; +import org.onap.aai.domain.yang.Vlan; +import org.onap.aai.domain.yang.Vlans; +import org.onap.aai.domain.yang.Vserver; +import org.onap.so.client.aai.AAIObjectType; +import org.onap.so.client.aai.AAIResourcesClient; +import org.onap.so.client.aai.AAISingleTransactionClient; +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.db.catalog.beans.CloudIdentity; +import org.onap.so.heatbridge.constants.HeatBridgeConstants; +import org.onap.so.heatbridge.factory.MsoCloudClientFactoryImpl; +import org.onap.so.heatbridge.helpers.AaiHelper; +import org.onap.so.heatbridge.openstack.api.OpenstackClient; +import org.onap.so.heatbridge.openstack.factory.OpenstackClientFactoryImpl; +import org.onap.so.heatbridge.utils.HeatBridgeUtils; +import org.onap.so.logger.MessageEnum; +import org.onap.so.logger.ErrorCode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.openstack4j.model.compute.Server; +import org.openstack4j.model.heat.Resource; +import org.openstack4j.model.network.IP; +import org.openstack4j.model.network.Network; +import org.openstack4j.model.network.NetworkType; +import org.openstack4j.model.network.Port; +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableMap; + +/** + * This class provides an implementation of {@link HeatBridgeApi} + */ +public class HeatBridgeImpl implements HeatBridgeApi { + + private static final Logger logger = LoggerFactory.getLogger(HeatBridgeImpl.class); + private static final String ERR_MSG_NULL_OS_CLIENT = + "Initialization error: Null openstack client. Authenticate with Keystone first."; + private static final String OOB_MGT_NETWORK_IDENTIFIER = "Management"; + private OpenstackClient osClient; + private AAIResourcesClient resourcesClient; + private AAISingleTransactionClient transaction; + private String cloudOwner; + private String cloudRegionId; + private String tenantId; + private AaiHelper aaiHelper = new AaiHelper(); + private CloudIdentity cloudIdentity; + + + public HeatBridgeImpl(AAIResourcesClient resourcesClient, final CloudIdentity cloudIdentity, + @Nonnull final String cloudOwner, @Nonnull final String cloudRegionId, @Nonnull final String tenantId) { + Objects.requireNonNull(cloudOwner, "Null cloud-owner value!"); + Objects.requireNonNull(cloudRegionId, "Null cloud-region identifier!"); + Objects.requireNonNull(tenantId, "Null tenant identifier!"); + Objects.requireNonNull(tenantId, "Null AAI actions list!"); + + this.cloudIdentity = cloudIdentity; + this.cloudOwner = cloudOwner; + this.cloudRegionId = cloudRegionId; + this.tenantId = tenantId; + this.resourcesClient = resourcesClient; + this.transaction = resourcesClient.beginSingleTransaction(); + } + + @Override + public OpenstackClient authenticate() throws HeatBridgeException { + this.osClient = new MsoCloudClientFactoryImpl(new OpenstackClientFactoryImpl()).getOpenstackClient( + cloudIdentity.getIdentityUrl(), cloudIdentity.getMsoId(), cloudIdentity.getMsoPass(), cloudRegionId, + tenantId); + logger.debug("Successfully authenticated with keystone for tenant: " + tenantId + " and cloud " + "region: " + + cloudRegionId); + return osClient; + } + + @Override + public List<Resource> queryNestedHeatStackResources(final String heatStackId) { + Objects.requireNonNull(osClient, ERR_MSG_NULL_OS_CLIENT); + Preconditions.checkState(!Strings.isNullOrEmpty(heatStackId), "Invalid heatStackId!"); + List<Resource> stackBasedResources = + osClient.getStackBasedResources(heatStackId, HeatBridgeConstants.OS_DEFAULT_HEAT_NESTING); + logger.debug(stackBasedResources.size() + " heat stack resources are extracted for stack: " + heatStackId); + return stackBasedResources; + } + + @Override + public List<String> extractStackResourceIdsByResourceType(final List<Resource> stackResources, + final String resourceType) { + return stackResources.stream().filter(stackResource -> stackResource.getType().equals(resourceType)) + .map(Resource::getPhysicalResourceId).collect(Collectors.toList()); + } + + @Override + public List<String> extractNetworkIds(final List<String> networkNameList) { + Objects.requireNonNull(osClient, ERR_MSG_NULL_OS_CLIENT); + return networkNameList.stream() + .map(netName -> osClient + .listNetworksByFilter(ImmutableMap.of(HeatBridgeConstants.OS_NAME_KEY, netName))) + .filter(nets -> nets != null && nets.size() == 1) // extract network-id only if network-name is unique + .map(nets -> nets.get(0).getId()).collect(Collectors.toList()); + } + + @Override + public List<Server> getAllOpenstackServers(final List<Resource> stackResources) { + Objects.requireNonNull(osClient, ERR_MSG_NULL_OS_CLIENT); + + // Filter Openstack Compute resources + List<String> serverIds = + extractStackResourceIdsByResourceType(stackResources, HeatBridgeConstants.OS_SERVER_RESOURCE_TYPE); + return serverIds.stream().map(serverId -> osClient.getServerById(serverId)).collect(Collectors.toList()); + } + + @Override + public List<org.openstack4j.model.compute.Image> extractOpenstackImagesFromServers(final List<Server> servers) { + Objects.requireNonNull(osClient, ERR_MSG_NULL_OS_CLIENT); + return servers.stream().map(Server::getImage) + .filter(distinctByProperty(org.openstack4j.model.compute.Image::getId)).collect(Collectors.toList()); + } + + @Override + public List<org.openstack4j.model.compute.Flavor> extractOpenstackFlavorsFromServers(final List<Server> servers) { + Objects.requireNonNull(osClient, ERR_MSG_NULL_OS_CLIENT); + return servers.stream().map(Server::getFlavor) + .filter(distinctByProperty(org.openstack4j.model.compute.Flavor::getId)).collect(Collectors.toList()); + } + + @Override + public void buildAddImagesToAaiAction(final List<org.openstack4j.model.compute.Image> images) + throws HeatBridgeException { + for (org.openstack4j.model.compute.Image image : images) { + Image aaiImage = aaiHelper.buildImage(image); + try { + AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.IMAGE, cloudOwner, cloudRegionId, + aaiImage.getImageId()); + if (!resourcesClient.exists(uri)) { + transaction.create(uri, aaiImage); + logger.debug("Queuing AAI command to add image: " + aaiImage.getImageId()); + } else { + logger.debug("Nothing to add since image: " + aaiImage.getImageId() + "already exists in AAI."); + } + } catch (WebApplicationException e) { + throw new HeatBridgeException( + "Failed to update image to AAI: " + aaiImage.getImageId() + ". Error" + " cause: " + e, e); + } + } + } + + @Override + public void buildAddFlavorsToAaiAction(final List<org.openstack4j.model.compute.Flavor> flavors) + throws HeatBridgeException { + for (org.openstack4j.model.compute.Flavor flavor : flavors) { + Flavor aaiFlavor = aaiHelper.buildFlavor(flavor); + try { + AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.FLAVOR, cloudOwner, cloudRegionId, + aaiFlavor.getFlavorId()); + if (!resourcesClient.exists(uri)) { + transaction.create(uri, aaiFlavor); + logger.debug("Queuing AAI command to add flavor: " + aaiFlavor.getFlavorId()); + } else { + logger.debug("Nothing to add since flavor: " + aaiFlavor.getFlavorId() + "already exists in AAI."); + } + } catch (WebApplicationException e) { + throw new HeatBridgeException( + "Failed to update flavor to AAI: " + aaiFlavor.getFlavorId() + ". Error" + " cause: " + e, e); + } + } + } + + @Override + public void buildAddVserversToAaiAction(final String genericVnfId, final String vfModuleId, + final List<Server> servers) { + servers.forEach(server -> { + Vserver vserver = aaiHelper.buildVserver(server.getId(), server); + + // Build vserver relationships to: image, flavor, pserver, vf-module + vserver.setRelationshipList( + aaiHelper.getVserverRelationshipList(cloudOwner, cloudRegionId, genericVnfId, vfModuleId, server)); + transaction.create(AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegionId, + tenantId, vserver.getVserverId()), vserver); + }); + } + + @Override + public void buildAddVserverLInterfacesToAaiAction(final List<Resource> stackResources, + final List<String> oobMgtNetIds) { + Objects.requireNonNull(osClient, ERR_MSG_NULL_OS_CLIENT); + List<String> portIds = + extractStackResourceIdsByResourceType(stackResources, HeatBridgeConstants.OS_PORT_RESOURCE_TYPE); + for (String portId : portIds) { + Port port = osClient.getPortById(portId); + LInterface lIf = new LInterface(); + lIf.setInterfaceId(port.getId()); + lIf.setInterfaceName(port.getName()); + lIf.setMacaddr(port.getMacAddress()); + if (oobMgtNetIds != null && oobMgtNetIds.contains(port.getNetworkId())) { + lIf.setInterfaceRole(OOB_MGT_NETWORK_IDENTIFIER); + } else { + lIf.setInterfaceRole(port.getvNicType()); + } + + updateLInterfaceIps(port, lIf); + updateLInterfaceVlan(port, lIf); + + // Update l-interface to the vserver + transaction.create(AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, cloudOwner, cloudRegionId, + tenantId, port.getDeviceId(), lIf.getInterfaceName()), lIf); + } + } + + private void updateLInterfaceVlan(final Port port, final LInterface lIf) { + Vlan vlan = new Vlan(); + Network network = osClient.getNetworkById(port.getNetworkId()); + lIf.setNetworkName(network.getName()); + if (network.getNetworkType().equals(NetworkType.VLAN)) { + vlan.setVlanInterface(network.getProviderSegID()); + Vlans vlans = new Vlans(); + List<Vlan> vlanList = vlans.getVlan(); + vlanList.add(vlan); + lIf.setVlans(vlans); + } + // Build sriov-vf to the l-interface + if (port.getvNicType().equalsIgnoreCase(HeatBridgeConstants.OS_SRIOV_PORT_TYPE)) { + SriovVfs sriovVfs = new SriovVfs(); + // JAXB does not generate setters for list, however getter ensures its creation. + // Thus, all list manipulations must be made on live list. + List<SriovVf> sriovVfList = sriovVfs.getSriovVf(); + SriovVf sriovVf = new SriovVf(); + sriovVf.setPciId(port.getProfile().get(HeatBridgeConstants.OS_PCI_SLOT_KEY).toString()); + sriovVf.setNeutronNetworkId(port.getNetworkId()); + if (port.getVifDetails() != null) { + sriovVf.setVfVlanFilter((String) port.getVifDetails().get(HeatBridgeConstants.OS_VLAN_NETWORK_KEY)); + } + sriovVfList.add(sriovVf); + + lIf.setSriovVfs(sriovVfs); + + // For the given port create sriov-pf for host pserver/p-interface if absent + updateSriovPfToPserver(port, lIf); + } + } + + /** + * Needs to be corrected according to the specification that is in draft If pserver/p-interface does not have a + * SRIOV-PF object matching the PCI-ID of the Openstack port object, then create it in AAI. Openstack SRIOV Port + * object has pci-id (to match sriov-pf on pserver/p-interface), physical-network ID (that matches the p-interface + * name). + * + * @param port Openstack port object + * @param lIf AAI l-interface object + */ + private void updateSriovPfToPserver(final Port port, final LInterface lIf) { + if (port.getProfile() == null || Strings + .isNullOrEmpty(port.getProfile().get(HeatBridgeConstants.OS_PHYSICAL_NETWORK_KEY).toString())) { + logger.debug("The SRIOV port:" + port.getName() + " is missing physical-network-id, cannot update " + + "sriov-pf object for host pserver: " + port.getHostId()); + return; + } + Optional<String> matchingPifName = HeatBridgeUtils.getMatchingPserverPifName( + port.getProfile().get(HeatBridgeConstants.OS_PHYSICAL_NETWORK_KEY).toString()); + if (matchingPifName.isPresent()) { + // Update l-interface description + String pserverHostName = port.getHostId(); + lIf.setInterfaceDescription("Attached to SR-IOV port: " + pserverHostName + "::" + matchingPifName.get()); + try { + Optional<PInterface> matchingPIf = resourcesClient.get(PInterface.class, + AAIUriFactory + .createResourceUri(AAIObjectType.P_INTERFACE, pserverHostName, matchingPifName.get()) + .depth(Depth.ONE)); + if (matchingPIf.isPresent()) { + SriovPfs pIfSriovPfs = matchingPIf.get().getSriovPfs(); + if (pIfSriovPfs == null) { + pIfSriovPfs = new SriovPfs(); + } + // Extract PCI-ID from OS port object + String pfPciId = port.getProfile().get(HeatBridgeConstants.OS_PCI_SLOT_KEY).toString(); + + List<SriovPf> existingSriovPfs = pIfSriovPfs.getSriovPf(); + if (CollectionUtils.isEmpty(existingSriovPfs) || existingSriovPfs.stream() + .noneMatch(existingSriovPf -> existingSriovPf.getPfPciId().equals(pfPciId))) { + // Add sriov-pf object with PCI-ID to AAI + SriovPf sriovPf = new SriovPf(); + sriovPf.setPfPciId(pfPciId); + logger.debug("Queuing AAI command to update sriov-pf object to pserver: " + pserverHostName + + "/" + matchingPifName.get()); + transaction.create(AAIUriFactory.createResourceUri(AAIObjectType.SRIOV_PF, pserverHostName, + matchingPifName.get(), sriovPf.getPfPciId()), sriovPf); + } + } + } catch (WebApplicationException e) { + // Silently log that we failed to update the Pserver p-interface with PCI-ID + logger.error("{} {} {} {} {} {} {} {} {}", MessageEnum.GENERAL_EXCEPTION, pserverHostName, + matchingPifName.get(), cloudOwner, tenantId, "OpenStack", "Heatbridge", + ErrorCode.DataError.getValue(), "Exception - Failed to add sriov-pf object to pserver", e); + } + } + } + + private void updateLInterfaceIps(final Port port, final LInterface lIf) { + List<L3InterfaceIpv4AddressList> lInterfaceIps = lIf.getL3InterfaceIpv4AddressList(); + for (IP ip : port.getFixedIps()) { + String ipAddress = ip.getIpAddress(); + if (InetAddressValidator.getInstance().isValidInet4Address(ipAddress)) { + L3InterfaceIpv4AddressList lInterfaceIp = new L3InterfaceIpv4AddressList(); + lInterfaceIp.setL3InterfaceIpv4Address(ipAddress); + lInterfaceIp.setNeutronNetworkId(port.getNetworkId()); + lInterfaceIp.setNeutronSubnetId(ip.getSubnetId()); + lInterfaceIp.setL3InterfaceIpv4PrefixLength(32L); + lInterfaceIps.add(lInterfaceIp); + } + } + } + + @Override + public void submitToAai() throws HeatBridgeException { + try { + transaction.execute(); + } catch (BulkProcessFailed e) { + String msg = "Failed to commit transaction"; + logger.debug(msg + " with error: " + e); + throw new HeatBridgeException(msg, e); + } + } + + private <T> Predicate<T> distinctByProperty(Function<? super T, Object> keyExtractor) { + Map<Object, Boolean> map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } +} 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 new file mode 100644 index 0000000000..dd64d53732 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/constants/HeatBridgeConstants.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.onap.so.heatbridge.constants; + +public class HeatBridgeConstants { + + private HeatBridgeConstants() { + throw new IllegalStateException("Trying to instantiate a constants class."); + } + + /** + * Openstack related constants + */ + public static final Integer OS_DEFAULT_HEAT_NESTING = 5; + public static final String OS_SERVER_RESOURCE_TYPE = "OS::Nova::Server"; + public static final String OS_PORT_RESOURCE_TYPE = "OS::Neutron::Port"; + 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_VLAN_NETWORK_KEY = "vlan"; + public static final String OS_UNKNOWN_KEY = "unknown"; + public static final String OS_RESOURCES_SELF_LINK_KEY = "self"; + public static final String OS_DEFAULT_DOMAIN_NAME = "default"; + public static final String OS_KEYSTONE_V2_KEY = "v2.0"; + public static final String OS_KEYSTONE_V3_KEY = "v3"; + public static final String OS_NAME_KEY = "name"; + + /** + * AAI related constants + */ + public static final String AAI_GENERIC_VNF = "generic-vnf"; + public static final String AAI_GENERIC_VNF_ID = "generic-vnf.vnf-id"; + public static final String AAI_PSERVER = "pserver"; + public static final String AAI_VSERVER = "vserver"; + public static final String AAI_PSERVER_HOSTNAME = "pserver.hostname"; + public static final String AAI_VF_MODULE = "vf-module"; + public static final String AAI_VF_MODULE_ID = "vf-module.vf-module-id"; + public static final String AAI_IMAGE = "image"; + public static final String AAI_IMAGE_ID = "image.image-id"; + public static final String AAI_CLOUD_OWNER = "cloud-region.cloud-owner"; + public static final String AAI_CLOUD_REGION_ID = "cloud-region.cloud-region-id"; + public static final String AAI_FLAVOR = "flavor"; + public static final String AAI_FLAVOR_ID = "flavor.flavor-id"; + public static final String AAI_RESOURCE_DEPTH_ALL = "all"; + public static final String AAI_SRIOV_PF = "sriov-pf"; + public static final String AAI_P_INTERFACE_NAME = "p-interface.interface-name"; + public static final String AAI_SRIOV_PF_PCI_ID = "sriov-pf.pf-pci-id"; + + /** + * Keys for internal usage + */ + public static final String KEY_FLAVORS = "flavors"; + public static final String KEY_IMAGES = "images"; + public static final String KEY_VSERVERS = "vservers"; + public static final String KEY_SRIOV_PFS = "pserverSriovPfs"; + public static final String KEY_GLOBAL_SUBSCRIBER_ID = "globalSubscriberId"; + public static final String KEY_SERVICE_TYPE = "subscriptionServiceType"; + public static final String KEY_SERVICE_INSTANCE_ID = "serviceInstanceId"; + public static final String KEY_VNF_INSTANCE_ID = "genericVnfId"; + public static final String KEY_MSO_REQUEST_ID = "msoRequestId"; + public static final String KEY_SO_WORKFLOW_EXCEPTION = "WorkflowException"; + public static final String KEY_PROCESS_STATUS_MSG = "processStatusMsg"; +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/factory/MsoCloudClientFactory.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/factory/MsoCloudClientFactory.java new file mode 100644 index 0000000000..edf5e2d339 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/factory/MsoCloudClientFactory.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.onap.so.heatbridge.factory; + +import org.onap.so.heatbridge.HeatBridgeException; +import org.onap.so.heatbridge.openstack.api.OpenstackClient; + +/** + * Defines contract to load the cloud configuration from SO, authenticate with keystone for a given cloud-region and + * tenant. + */ +public interface MsoCloudClientFactory { + + /** + * Get the Openstack Client for keystone version specified in cloud configuration. + * + * @param url openstack url + * @param msoId openstack user for mso + * @param msoPass openstack password for mso user + * @param cloudRegionId cloud-region identifier + * @param tenantId tenant identifier + * @return Openstack Client for the keystone version requested + * @throws HeatBridgeException if any errors when reading cloud configuration or getting openstack client + */ + + + OpenstackClient getOpenstackClient(String url, String msoId, String msoPass, String cloudRegionId, String tenantId) + throws HeatBridgeException; +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/factory/MsoCloudClientFactoryImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/factory/MsoCloudClientFactoryImpl.java new file mode 100644 index 0000000000..bd74bf6aa0 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/factory/MsoCloudClientFactoryImpl.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.onap.so.heatbridge.factory; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Objects; +import javax.annotation.Nonnull; +import org.onap.so.heatbridge.HeatBridgeException; +import org.onap.so.heatbridge.constants.HeatBridgeConstants; +import org.onap.so.heatbridge.openstack.api.OpenstackAccess; +import org.onap.so.heatbridge.openstack.api.OpenstackAccess.OpenstackAccessBuilder; +import org.onap.so.heatbridge.openstack.api.OpenstackClient; +import org.onap.so.heatbridge.openstack.api.OpenstackClientException; +import org.onap.so.heatbridge.openstack.factory.OpenstackClientFactory; +import org.onap.so.utils.CryptoUtils; + +/** + * This class implements {@link MsoCloudClientFactory} It loads the cloud configuration from SO and uses it to + * authenticate with keystone. As a result of authentication with keystone, it returns the Openstack client with the + * auth token so that subsequent API calls to Openstack can be made. + */ +public class MsoCloudClientFactoryImpl implements MsoCloudClientFactory { + + private OpenstackClientFactory openstackClientFactory; + + public MsoCloudClientFactoryImpl(@Nonnull OpenstackClientFactory openstackClientFactory) { + Objects.requireNonNull(openstackClientFactory, "Null OpenstackClientFactory object"); + this.openstackClientFactory = openstackClientFactory; + } + + @Override + public OpenstackClient getOpenstackClient(@Nonnull String url, @Nonnull String msoId, @Nonnull String msoPass, + @Nonnull String cloudRegionId, @Nonnull String tenantId) throws HeatBridgeException { + Objects.requireNonNull(url, "Null openstack url!"); + Objects.requireNonNull(msoId, "Null openstack user id!"); + Objects.requireNonNull(msoPass, "Null openstack password!"); + Objects.requireNonNull(cloudRegionId, "Null cloud-region ID!"); + Objects.requireNonNull(tenantId, "Null tenant ID!"); + try { + final OpenstackAccess osAccess = new OpenstackAccessBuilder().setBaseUrl(url) // keystone URL + .setUser(msoId) // keystone username + .setPassword(CryptoUtils.decryptCloudConfigPassword(msoPass)) // keystone decrypted password + .setRegion(cloudRegionId) // openstack region + .setDomainName(HeatBridgeConstants.OS_DEFAULT_DOMAIN_NAME) // hardcode to "default" + .setTenantId(tenantId) // tenantId + .build(); + + // Identify the Keystone version + String version = new URL(url).getPath().replace("/", ""); + if (version.equals(HeatBridgeConstants.OS_KEYSTONE_V2_KEY)) { + return openstackClientFactory.createOpenstackV2Client(osAccess); + } else if (version.equals(HeatBridgeConstants.OS_KEYSTONE_V3_KEY)) { + return openstackClientFactory.createOpenstackV3Client(osAccess); + } + throw new OpenstackClientException("Unsupported keystone version!"); + } catch (MalformedURLException e) { + throw new HeatBridgeException("Malformed Keystone Endpoint in SO configuration.", e); + } catch (OpenstackClientException osClientEx) { + throw new HeatBridgeException("Client error when authenticating with the Openstack V3.", osClientEx); + } + } +} 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 new file mode 100644 index 0000000000..515f2dc0e5 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/helpers/AaiHelper.java @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2018 Bell Canada. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.onap.so.heatbridge.helpers; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +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.Relationship; +import org.onap.aai.domain.yang.RelationshipData; +import org.onap.aai.domain.yang.RelationshipList; +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; + +/** + * This class provides wrapper methods to manage creation of AAI objects and extracting objects from AAI and + * transforming into required objects. + */ +public class AaiHelper { + + /** + * Build vserver relationship object to entities: pserver, vf-module, image, flavor + * + * @param cloudOwner AAI cloudOwner value + * @param cloudRegionId AAI cloud-region identifier + * @param genericVnfId AAI generic-vnf identifier + * @param vfModuleId AAI vf-module identifier + * @param server Openstack Server object + */ + public RelationshipList getVserverRelationshipList(final String cloudOwner, final String cloudRegionId, + final String genericVnfId, final String vfModuleId, final Server server) { + RelationshipList relationshipList = new RelationshipList(); + List<Relationship> relationships = relationshipList.getRelationship(); + + // vserver to pserver relationship + Relationship pserverRelationship = + buildRelationship(HeatBridgeConstants.AAI_PSERVER, ImmutableMap.<String, String>builder() + .put(HeatBridgeConstants.AAI_PSERVER_HOSTNAME, server.getHypervisorHostname()).build()); + relationships.add(pserverRelationship); + + // vserver to vf-module relationship + Relationship vfModuleRelationship = buildRelationship(HeatBridgeConstants.AAI_VF_MODULE, + ImmutableMap.<String, String>builder().put(HeatBridgeConstants.AAI_GENERIC_VNF_ID, genericVnfId) + .put(HeatBridgeConstants.AAI_VF_MODULE_ID, vfModuleId).build()); + relationships.add(vfModuleRelationship); + + // vserver to image relationship + Relationship imageRel = buildRelationship(HeatBridgeConstants.AAI_IMAGE, + ImmutableMap.<String, String>builder().put(HeatBridgeConstants.AAI_CLOUD_OWNER, cloudOwner) + .put(HeatBridgeConstants.AAI_CLOUD_REGION_ID, cloudRegionId) + .put(HeatBridgeConstants.AAI_IMAGE_ID, server.getImage().getId()).build()); + relationships.add(imageRel); + + // vserver to flavor relationship + Relationship flavorRel = buildRelationship(HeatBridgeConstants.AAI_FLAVOR, + ImmutableMap.<String, String>builder().put(HeatBridgeConstants.AAI_CLOUD_OWNER, cloudOwner) + .put(HeatBridgeConstants.AAI_CLOUD_REGION_ID, cloudRegionId) + .put(HeatBridgeConstants.AAI_FLAVOR_ID, server.getFlavor().getId()).build()); + relationships.add(flavorRel); + return relationshipList; + } + + public RelationshipList getLInterfaceRelationshipList(final String pserverName, final String pIfName, + final String pfPciId) { + RelationshipList relationshipList = new RelationshipList(); + List<Relationship> relationships = relationshipList.getRelationship(); + + // sriov-vf to sriov-pf relationship + Relationship sriovPfRelationship = buildRelationship(HeatBridgeConstants.AAI_SRIOV_PF, + ImmutableMap.<String, String>builder().put(HeatBridgeConstants.AAI_PSERVER_HOSTNAME, pserverName) + .put(HeatBridgeConstants.AAI_P_INTERFACE_NAME, pIfName) + .put(HeatBridgeConstants.AAI_SRIOV_PF_PCI_ID, pfPciId).build()); + relationships.add(sriovPfRelationship); + + return relationshipList; + } + + /** + * Transform Openstack Server object to AAI Vserver object + * + * @param serverId Openstack server identifier + * @param server Openstack server object + * @return AAI Vserver object + */ + public Vserver buildVserver(final String serverId, final Server server) { + Vserver vserver = new Vserver(); + vserver.setInMaint(false); + vserver.setIsClosedLoopDisabled(false); + vserver.setVserverId(serverId); + vserver.setVserverName(server.getName()); + vserver.setVserverName2(server.getName()); + vserver.setProvStatus(server.getStatus().value()); + server.getLinks().stream().filter(link -> link.getRel().equals(HeatBridgeConstants.OS_RESOURCES_SELF_LINK_KEY)) + .findFirst().ifPresent(link -> vserver.setVserverSelflink(link.getHref())); + return vserver; + } + + /** + * Transform Openstack Image object to AAI Image object + * + * @param image Openstack Image object + * @return AAI Image object + */ + public Image buildImage(final org.openstack4j.model.compute.Image image) { + Image aaiImage = new Image(); + aaiImage.setImageId(image.getId()); + aaiImage.setImageName(image.getName()); + aaiImage.setImageOsDistro(HeatBridgeConstants.OS_UNKNOWN_KEY); + aaiImage.setImageOsVersion(HeatBridgeConstants.OS_UNKNOWN_KEY); + image.getLinks().stream().filter(link -> link.getRel().equals(HeatBridgeConstants.OS_RESOURCES_SELF_LINK_KEY)) + .findFirst().ifPresent(link -> aaiImage.setImageSelflink(link.getHref())); + return aaiImage; + } + + /** + * Transform Openstack Flavor object to AAI Flavor object + * + * @param flavor Openstack Flavor object + * @return AAI Flavor object + */ + public Flavor buildFlavor(final org.openstack4j.model.compute.Flavor flavor) { + Flavor aaiFlavor = new Flavor(); + aaiFlavor.setFlavorId(flavor.getId()); + aaiFlavor.setFlavorName(flavor.getName()); + flavor.getLinks().stream().filter(link -> link.getRel().equals(HeatBridgeConstants.OS_RESOURCES_SELF_LINK_KEY)) + .findFirst().ifPresent(link -> aaiFlavor.setFlavorSelflink(link.getHref())); + return aaiFlavor; + } + + /** + * Extract a list of flavors URI associated with the list of vservers + * + * @param vservers List of vserver AAI objects + * @return a list of related flavor related-links + */ + public List<String> getFlavorsUriFromVserver(final List<Vserver> vservers) { + List<String> flavorUris = new ArrayList<>(); + vservers.forEach(vserver -> flavorUris.addAll( + filterRelatedLinksByRelatedToProperty(vserver.getRelationshipList(), HeatBridgeConstants.AAI_FLAVOR))); + return flavorUris; + } + + /** + * Extract a list of images URI associated with the list of vservers + * + * @param vservers List of vserver AAI objects + * @return a list of related image related-links + */ + public List<String> getImagesUriFromVserver(final List<Vserver> vservers) { + List<String> imageUris = new ArrayList<>(); + vservers.forEach(vserver -> imageUris.addAll( + filterRelatedLinksByRelatedToProperty(vserver.getRelationshipList(), HeatBridgeConstants.AAI_IMAGE))); + return imageUris; + } + + /** + * From the list vserver objects build a map of compute hosts's name and the PCI IDs linked to it. + * + * @param vservers List of vserver AAI objects + * @return a map of compute names to the PCI ids associated with the compute + */ + public Map<String, List<String>> getPserverToPciIdMap(final List<Vserver> vservers) { + Map<String, List<String>> pserverToPciIdMap = new HashMap<>(); + for (Vserver vserver : vservers) { + if (vserver.getLInterfaces() != null) { + List<String> pciIds = vserver.getLInterfaces().getLInterface().stream() + .filter(lInterface -> lInterface.getSriovVfs() != null + && CollectionUtils.isNotEmpty(lInterface.getSriovVfs().getSriovVf())) + .flatMap(lInterface -> lInterface.getSriovVfs().getSriovVf().stream()).map(SriovVf::getPciId) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(pciIds)) { + List<String> matchingPservers = extractRelationshipDataValue(vserver.getRelationshipList(), + HeatBridgeConstants.AAI_PSERVER, HeatBridgeConstants.AAI_PSERVER_HOSTNAME); + Preconditions.checkState(matchingPservers != null && matchingPservers.size() == 1, + "Invalid pserver relationships for vserver: " + vserver.getVserverName()); + pserverToPciIdMap.put(matchingPservers.get(0), pciIds); + } + } + } + return pserverToPciIdMap; + } + + /** + * Extract from relationship-list object all the relationship-value that match the related-to and relationship-key + * fields. + * + * @param relationshipListObj AAI relationship-list object + * @param relatedToProperty related-to value + * @param relationshipKey relationship-key value + * @return relationship-value matching the key requested for the relationship object of type related-to property + */ + private List<String> extractRelationshipDataValue(final RelationshipList relationshipListObj, + final String relatedToProperty, final String relationshipKey) { + if (relationshipListObj != null && relationshipListObj.getRelationship() != null) { + return relationshipListObj.getRelationship().stream() + .filter(relationship -> relationship.getRelatedTo().equals(relatedToProperty)) + .map(Relationship::getRelationshipData).flatMap(Collection::stream) + .filter(data -> data.getRelationshipKey() != null + && relationshipKey.equals(data.getRelationshipKey())) + .map(RelationshipData::getRelationshipValue).collect(Collectors.toList()); + } + return new ArrayList<>(); + } + + /** + * Extract and filter the related-links to all objects that match the type specified by the filter property + * + * @param relationshipListObj AAI object representing relationship object + * @param relatedToProperty Value identifying the type of AAI object for related-to field + * @return a list of related-links filtered by the specified related-to property + */ + private List<String> filterRelatedLinksByRelatedToProperty(final RelationshipList relationshipListObj, + final String relatedToProperty) { + if (relationshipListObj != null && relationshipListObj.getRelationship() != null) { + return relationshipListObj.getRelationship().stream() + .filter(relationship -> relationship.getRelatedTo().equals(relatedToProperty)) + .map(Relationship::getRelatedLink).collect(Collectors.toList()); + } + return new ArrayList<>(); + } + + /** + * Build the relationship object + * + * @param relatedTo Related to entity value + * @param relationshipKeyValues Key value pairs of relationship data + * @return AAI Relationship object + */ + private Relationship buildRelationship(final String relatedTo, final Map<String, String> relationshipKeyValues) { + Relationship relationship = new Relationship(); + relationship.setRelatedTo(relatedTo); + relationshipKeyValues.keySet().forEach(k -> { + RelationshipData relationshipData = new RelationshipData(); + relationshipData.setRelationshipKey(k); + relationshipData.setRelationshipValue(relationshipKeyValues.get(k)); + relationship.getRelationshipData().add(relationshipData); + }); + return relationship; + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackAccess.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackAccess.java new file mode 100644 index 0000000000..fd5dabc784 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackAccess.java @@ -0,0 +1,120 @@ +/*- + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.so.heatbridge.openstack.api; + +import org.openstack4j.model.common.Identifier; + +/** + * Object handling OpenStack API access information. + */ +public class OpenstackAccess { + private final String baseUrl; + private final String tenantId; + private final String user; + private final String password; + private final String region; + private String domainName; + private String projectName; + + public OpenstackAccess(OpenstackAccessBuilder builder) { + this.baseUrl = builder.baseUrl; + this.tenantId = builder.tenantId; + this.user = builder.user; + this.password = builder.password; + this.region = builder.region; + this.domainName = builder.domainName; + this.projectName = builder.projectName; + } + + public String getUrl() { + return baseUrl; + } + + public String getTenantId() { + return tenantId; + } + + public String getUser() { + return user; + } + + public String getPassword() { + return password; + } + + public String getRegion() { + return region; + } + + public Identifier getDomainNameIdentifier() { + return Identifier.byName(domainName); + } + + public String getProjectName() { + return projectName; + } + + public static class OpenstackAccessBuilder { + + private String baseUrl; + private String tenantId; + private String user; + private String password; + private String region; + private String domainName; + private String projectName; + + public OpenstackAccessBuilder setBaseUrl(final String baseUrl) { + this.baseUrl = baseUrl; + return this; + } + + public OpenstackAccessBuilder setTenantId(final String tenantId) { + this.tenantId = tenantId; + return this; + } + + public OpenstackAccessBuilder setUser(final String user) { + this.user = user; + return this; + } + + public OpenstackAccessBuilder setPassword(final String password) { + this.password = password; + return this; + } + + public OpenstackAccessBuilder setRegion(final String region) { + this.region = region; + return this; + } + + public OpenstackAccessBuilder setDomainName(final String domainName) { + this.domainName = domainName; + return this; + } + + public OpenstackAccessBuilder setProjectName(final String projectName) { + this.projectName = projectName; + return this; + } + + public OpenstackAccess build() { + return new OpenstackAccess(this); + } + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackClient.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackClient.java new file mode 100644 index 0000000000..1fa41ee2a0 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackClient.java @@ -0,0 +1,75 @@ +/*- + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.so.heatbridge.openstack.api; + +import java.util.List; +import java.util.Map; +import org.openstack4j.model.compute.Server; +import org.openstack4j.model.heat.Resource; +import org.openstack4j.model.network.Network; +import org.openstack4j.model.network.Port; + +public interface OpenstackClient { + + /** + * Get a server object by server ID + * + * @param serverId Unique server-name (simple name) or server-id (UUID) + * @return Server object + */ + Server getServerById(String serverId); + + /** + * Get a port object by port ID + * + * @param portId Unique UUID of the port. + * @return Port object. + */ + Port getPortById(String portId); + + /** + * Returns a list of all ports we have the right to see + * + * @return List of all Openstack ports + */ + List<Port> getAllPorts(); + + /** + * Returns a list of all the resources for the stack + * + * @param stackId Stack name or unique UUID + * @param nestingDepth The recursion level for which resources will be listed. + * @return List of Openstack Stack resources + */ + List<Resource> getStackBasedResources(String stackId, int nestingDepth); + + /** + * Get a network instance by network ID + * + * @param networkId Unique UUID of the network. + * @return Network object. + */ + Network getNetworkById(String networkId); + + /** + * List networks by filtering parameters + * + * @param filterParams key-value pairs for filtering params + * @return List of filtered Network objects + */ + List<Network> listNetworksByFilter(Map<String, String> filterParams); +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackClientException.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackClientException.java new file mode 100644 index 0000000000..a062ca826d --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackClientException.java @@ -0,0 +1,29 @@ +/*- + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.so.heatbridge.openstack.api; + +public class OpenstackClientException extends Exception { + private static final long serialVersionUID = -5514207977226960180L; + + public OpenstackClientException(final String message) { + super(message); + } + + public OpenstackClientException(final String message, final Throwable cause) { + super(message, cause); + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackClientImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackClientImpl.java new file mode 100644 index 0000000000..2843eb226e --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackClientImpl.java @@ -0,0 +1,68 @@ +/*- + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.so.heatbridge.openstack.api; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; +import org.openstack4j.api.OSClient; +import org.openstack4j.model.compute.Server; +import org.openstack4j.model.heat.Resource; +import org.openstack4j.model.network.Network; +import org.openstack4j.model.network.Port; + +abstract class OpenstackClientImpl implements OpenstackClient { + @Override + public Server getServerById(String serverId) { + return getClient().compute().servers().get(serverId); + } + + @Override + public Port getPortById(String portId) { + return getClient().networking().port().get(portId); + } + + @Override + public List<Port> getAllPorts() { + return (List<Port>) getClient().networking().port().list(); + } + + @Override + public List<Resource> getStackBasedResources(String stackId, int nestingDepth) { + return getClient().heat().resources().list(stackId, nestingDepth).stream().filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + @Override + public Network getNetworkById(String networkId) { + return getClient().networking().network().get(networkId); + } + + @Override + public List<Network> listNetworksByFilter(Map<String, String> filterParams) { + return (List<Network>) getClient().networking().network().list(filterParams); + } + + /** + * Retrieves the specific client to utilize. + * + * @return The specific client to utilize + */ + protected abstract OSClient getClient(); + +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackV2ClientImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackV2ClientImpl.java new file mode 100644 index 0000000000..760be72b3f --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackV2ClientImpl.java @@ -0,0 +1,37 @@ +/*- + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.so.heatbridge.openstack.api; + +import org.openstack4j.api.OSClient; +import org.openstack4j.api.OSClient.OSClientV2; + +public class OpenstackV2ClientImpl extends OpenstackClientImpl { + + private OSClientV2 client; + + public OpenstackV2ClientImpl(OSClientV2 client) { + this.client = client; + } + + /** + * {@inheritDoc} + */ + protected OSClient getClient() { + return client; + } + +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackV3ClientImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackV3ClientImpl.java new file mode 100644 index 0000000000..dddd82ce6a --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackV3ClientImpl.java @@ -0,0 +1,37 @@ +/*- + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.so.heatbridge.openstack.api; + +import org.openstack4j.api.OSClient; +import org.openstack4j.api.OSClient.OSClientV3; + +public class OpenstackV3ClientImpl extends OpenstackClientImpl { + + private OSClientV3 client; + + public OpenstackV3ClientImpl(OSClientV3 client) { + this.client = client; + } + + /** + * {@inheritDoc} + */ + protected OSClient getClient() { + return client; + } + +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/factory/OpenstackClientFactory.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/factory/OpenstackClientFactory.java new file mode 100644 index 0000000000..5019eec09b --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/factory/OpenstackClientFactory.java @@ -0,0 +1,27 @@ +/*- + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.so.heatbridge.openstack.factory; + +import org.onap.so.heatbridge.openstack.api.OpenstackAccess; +import org.onap.so.heatbridge.openstack.api.OpenstackClient; +import org.onap.so.heatbridge.openstack.api.OpenstackClientException; + +public interface OpenstackClientFactory { + + OpenstackClient createOpenstackV3Client(OpenstackAccess osAccess) throws OpenstackClientException; + + OpenstackClient createOpenstackV2Client(OpenstackAccess osAccess) throws OpenstackClientException; +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/factory/OpenstackClientFactoryImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/factory/OpenstackClientFactoryImpl.java new file mode 100644 index 0000000000..25b3f1dbeb --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/factory/OpenstackClientFactoryImpl.java @@ -0,0 +1,73 @@ +/*- + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.so.heatbridge.openstack.factory; + +import com.google.common.base.Preconditions; +import org.onap.so.heatbridge.openstack.api.OpenstackAccess; +import org.onap.so.heatbridge.openstack.api.OpenstackClient; +import org.onap.so.heatbridge.openstack.api.OpenstackClientException; +import org.onap.so.heatbridge.openstack.api.OpenstackV2ClientImpl; +import org.onap.so.heatbridge.openstack.api.OpenstackV3ClientImpl; +import org.openstack4j.api.OSClient.OSClientV2; +import org.openstack4j.api.OSClient.OSClientV3; +import org.openstack4j.api.exceptions.AuthenticationException; +import org.openstack4j.openstack.OSFactory; +import org.openstack4j.model.common.Identifier; + +public class OpenstackClientFactoryImpl implements OpenstackClientFactory { + + @Override + public OpenstackClient createOpenstackV3Client(OpenstackAccess osAccess) throws OpenstackClientException { + Preconditions.checkNotNull(osAccess.getUrl(), "Keystone-v3 Auth: endpoint not set."); + Preconditions.checkNotNull(osAccess.getUser(), "Keystone-v3 Auth: username not set."); + Preconditions.checkNotNull(osAccess.getPassword(), "Keystone-v3 Auth: password not set."); + Preconditions.checkNotNull(osAccess.getDomainNameIdentifier(), "Keystone-v3 Auth: domain not set."); + Preconditions.checkNotNull(osAccess.getRegion(), "Keystone-v3 Auth: region not set."); + Preconditions.checkNotNull(osAccess.getTenantId(), "Keystone-v3 Auth: tenant-id not set."); + + OSClientV3 client; + try { + client = OSFactory.builderV3().endpoint(osAccess.getUrl()) + .credentials(osAccess.getUser(), osAccess.getPassword(), osAccess.getDomainNameIdentifier()) + .scopeToProject(Identifier.byId(osAccess.getTenantId())).authenticate() + .useRegion(osAccess.getRegion()); + return new OpenstackV3ClientImpl(client); + } catch (AuthenticationException exception) { + throw new OpenstackClientException("Failed to authenticate with Keystone-v3: " + osAccess.getUrl(), + exception); + } + } + + @Override + public OpenstackClient createOpenstackV2Client(OpenstackAccess osAccess) throws OpenstackClientException { + Preconditions.checkNotNull(osAccess.getUrl(), "Keystone-v2 Auth: endpoint not set."); + Preconditions.checkNotNull(osAccess.getUser(), "Keystone-v2 Auth: username not set."); + Preconditions.checkNotNull(osAccess.getPassword(), "Keystone-v2 Auth: password not set."); + Preconditions.checkNotNull(osAccess.getTenantId(), "Keystone-v2 Auth: tenant-id not set."); + Preconditions.checkNotNull(osAccess.getRegion(), "Keystone-v2 Auth: region not set."); + + OSClientV2 client; + try { + client = OSFactory.builderV2().endpoint(osAccess.getUrl()) + .credentials(osAccess.getUser(), osAccess.getPassword()).tenantId(osAccess.getTenantId()) + .authenticate().useRegion(osAccess.getRegion()); + return new OpenstackV2ClientImpl(client); + } catch (AuthenticationException exception) { + throw new OpenstackClientException("Failed to authenticate with Keystone-v2.0: " + osAccess.getUrl(), + exception); + } + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/utils/HeatBridgeUtils.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/utils/HeatBridgeUtils.java new file mode 100644 index 0000000000..d3faf1d7bf --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/utils/HeatBridgeUtils.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.onap.so.heatbridge.utils; + +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; +import java.util.Optional; +import javax.annotation.Nonnull; + +public class HeatBridgeUtils { + + private HeatBridgeUtils() { + throw new IllegalStateException("Trying to instantiate a utility class."); + } + + /** + * IaaS naming convention for compute/p-interface to openstack/physical-network name mapping + */ + private static final String OS_SIDE_SHARED_SRIOV_PREFIX = "shared-"; + private static final String OS_SIDE_DEDICATED_SRIOV_PREFIX = "dedicated-"; + private static final String COMPUTE_SIDE_SHARED_SRIOV_PREFIX = "sriov-s-"; + private static final String COMPUTE_SIDE_DEDICATED_SRIOV_PREFIX = "sriov-d-"; + + public static Optional<String> getMatchingPserverPifName(@Nonnull final String physicalNetworkName) { + Preconditions.checkState(!Strings.isNullOrEmpty(physicalNetworkName), + "Physical network name is null or " + "empty!"); + if (physicalNetworkName.contains(OS_SIDE_DEDICATED_SRIOV_PREFIX)) { + return Optional.of( + physicalNetworkName.replace(OS_SIDE_DEDICATED_SRIOV_PREFIX, COMPUTE_SIDE_DEDICATED_SRIOV_PREFIX)); + } else if (physicalNetworkName.contains(OS_SIDE_SHARED_SRIOV_PREFIX)) { + return Optional + .of(physicalNetworkName.replace(OS_SIDE_SHARED_SRIOV_PREFIX, COMPUTE_SIDE_SHARED_SRIOV_PREFIX)); + } + return Optional.empty(); + } + + public static Optional<String> getMatchingPhysicalNetworkName(final String pserverPinterfaceName) { + if (pserverPinterfaceName.contains(COMPUTE_SIDE_DEDICATED_SRIOV_PREFIX)) { + return Optional.of( + pserverPinterfaceName.replace(COMPUTE_SIDE_DEDICATED_SRIOV_PREFIX, OS_SIDE_DEDICATED_SRIOV_PREFIX)); + } else if (pserverPinterfaceName.contains(COMPUTE_SIDE_SHARED_SRIOV_PREFIX)) { + return Optional + .of(pserverPinterfaceName.replace(COMPUTE_SIDE_SHARED_SRIOV_PREFIX, OS_SIDE_SHARED_SRIOV_PREFIX)); + } + return Optional.empty(); + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduBlueprint.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduBlueprint.java index cef0371789..df714803e8 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduBlueprint.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduBlueprint.java @@ -23,67 +23,62 @@ package org.onap.so.vdu.utils; import java.util.Map; /* - * This Java bean class describes the template model of a VDU as distributed - * by SDC to SO. It is composed of one or more templates, one of which must be - * the main template, + * This Java bean class describes the template model of a VDU as distributed by SDC to SO. It is composed of one or more + * templates, one of which must be the main template, * - * The structure of this class corresponds to the format in which the templates - * and associated artifacts are represented in the SO Catalog. + * The structure of this class corresponds to the format in which the templates and associated artifacts are represented + * in the SO Catalog. * - * The map keys will be the "path" that is used to reference these artifacts within - * the other templates. This may be relevant to how different VDU plugins package - * the files for delivery to the sub-orchestrator. + * The map keys will be the "path" that is used to reference these artifacts within the other templates. This may be + * relevant to how different VDU plugins package the files for delivery to the sub-orchestrator. * - * In the future, it is possible that pre-packaged blueprints (e.g. complete TOSCA CSARs) - * could be stored in the catalog (and added to this structure). + * In the future, it is possible that pre-packaged blueprints (e.g. complete TOSCA CSARs) could be stored in the catalog + * (and added to this structure). * * This bean is passed as an input to instantiateVdu and updateVdu. */ public class VduBlueprint { - String vduModelId; - String mainTemplateName; - Map<String,byte[]> templateFiles; - Map<String,byte[]> attachedFiles; + String vduModelId; + String mainTemplateName; + Map<String, byte[]> templateFiles; + Map<String, byte[]> attachedFiles; - public String getVduModelId() { - return vduModelId; - } + public String getVduModelId() { + return vduModelId; + } - public void setVduModelId(String vduModelId) { - this.vduModelId = vduModelId; - } + public void setVduModelId(String vduModelId) { + this.vduModelId = vduModelId; + } - public String getMainTemplateName() { - return mainTemplateName; - } + public String getMainTemplateName() { + return mainTemplateName; + } - public void setMainTemplateName(String mainTemplateName) { - this.mainTemplateName = mainTemplateName; - } + public void setMainTemplateName(String mainTemplateName) { + this.mainTemplateName = mainTemplateName; + } - public Map<String, byte[]> getTemplateFiles() { - return templateFiles; - } + public Map<String, byte[]> getTemplateFiles() { + return templateFiles; + } - public void setTemplateFiles(Map<String, byte[]> templateFiles) { - this.templateFiles = templateFiles; - } + public void setTemplateFiles(Map<String, byte[]> templateFiles) { + this.templateFiles = templateFiles; + } - public Map<String, byte[]> getAttachedFiles() { - return attachedFiles; - } + public Map<String, byte[]> getAttachedFiles() { + return attachedFiles; + } - public void setAttachedFiles(Map<String, byte[]> attachedFiles) { - this.attachedFiles = attachedFiles; - } + public void setAttachedFiles(Map<String, byte[]> attachedFiles) { + this.attachedFiles = attachedFiles; + } - @Override + @Override public String toString() { - return "VduInfo {" + - "id='" + vduModelId + '\'' + - "mainTemplateName='" + mainTemplateName + '\'' + - '}'; + return "VduInfo {" + "id='" + vduModelId + '\'' + "mainTemplateName='" + mainTemplateName + '\'' + '}'; } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduInfo.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduInfo.java index 227d513a0b..22e3e1f5e9 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduInfo.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduInfo.java @@ -26,104 +26,97 @@ import java.util.HashMap; /* * This Java bean class relays VDU status information in a cloud-agnostic format. * - * This bean is returned by all implementors of the MsoVduUtils interface operations - * (instantiate, query, delete). + * This bean is returned by all implementors of the MsoVduUtils interface operations (instantiate, query, delete). */ public class VduInfo { - // Set defaults for everything - private String vduInstanceId = ""; - private String vduInstanceName = ""; - private VduStatus status = VduStatus.NOTFOUND; - private Map<String,Object> outputs = new HashMap<>(); - private Map<String,Object> inputs = new HashMap<>(); - private String lastAction; - private String actionStatus; - private String errorMessage; - - public VduInfo () { - } - - // Add more constructors as appropriate - // - - public VduInfo (String id, Map<String,Object> outputs) { - this.vduInstanceId = id; - if (outputs != null) this.outputs = outputs; - } - - public VduInfo (String id) { - this.vduInstanceId = id; - } - - public VduInfo (String id, VduStatus status) { - this.vduInstanceId = id; - this.status = status; - } - - public String getVnfInstanceId() { - return vduInstanceId; - } - - public void setVnfInstanceId (String id) { - this.vduInstanceId = id; - } - - public String getVnfInstanceName() { - return vduInstanceName; - } - - public void setVnfInstanceName (String name) { - this.vduInstanceName = name; - } - - public VduStatus getStatus() { - return status; - } - - public void setStatus (VduStatus status) { - this.status = status; - } - - public Map<String,Object> getOutputs () { - return outputs; - } - - public void setOutputs (Map<String,Object> outputs) { - this.outputs = outputs; - } - - public Map<String,Object> getInputs () { - return inputs; - } - - public void setInputs (Map<String,Object> inputs) { - this.inputs = inputs; - } - - public String getLastAction() { - return lastAction; - } - - public String getActionStatus() { - return actionStatus; - } - - public String getErrorMessage() { - return errorMessage; - } - - @Override + // Set defaults for everything + private String vduInstanceId = ""; + private String vduInstanceName = ""; + private VduStatus status = VduStatus.NOTFOUND; + private Map<String, Object> outputs = new HashMap<>(); + private Map<String, Object> inputs = new HashMap<>(); + private String lastAction; + private String actionStatus; + private String errorMessage; + + public VduInfo() {} + + // Add more constructors as appropriate + // + + public VduInfo(String id, Map<String, Object> outputs) { + this.vduInstanceId = id; + if (outputs != null) + this.outputs = outputs; + } + + public VduInfo(String id) { + this.vduInstanceId = id; + } + + public VduInfo(String id, VduStatus status) { + this.vduInstanceId = id; + this.status = status; + } + + public String getVnfInstanceId() { + return vduInstanceId; + } + + public void setVnfInstanceId(String id) { + this.vduInstanceId = id; + } + + public String getVnfInstanceName() { + return vduInstanceName; + } + + public void setVnfInstanceName(String name) { + this.vduInstanceName = name; + } + + public VduStatus getStatus() { + return status; + } + + public void setStatus(VduStatus status) { + this.status = status; + } + + public Map<String, Object> getOutputs() { + return outputs; + } + + public void setOutputs(Map<String, Object> outputs) { + this.outputs = outputs; + } + + public Map<String, Object> getInputs() { + return inputs; + } + + public void setInputs(Map<String, Object> inputs) { + this.inputs = inputs; + } + + public String getLastAction() { + return lastAction; + } + + public String getActionStatus() { + return actionStatus; + } + + public String getErrorMessage() { + return errorMessage; + } + + @Override public String toString() { - return "VduInfo {" + - "id='" + vduInstanceId + '\'' + - "name='" + vduInstanceName + '\'' + - ", inputs='" + inputs + '\'' + - ", outputs='" + outputs + '\'' + - ", lastAction='" + lastAction + '\'' + - ", status='" + status + '\'' + - ", errorMessage='" + errorMessage + '\'' + - '}'; + return "VduInfo {" + "id='" + vduInstanceId + '\'' + "name='" + vduInstanceName + '\'' + ", inputs='" + inputs + + '\'' + ", outputs='" + outputs + '\'' + ", lastAction='" + lastAction + '\'' + ", status='" + status + + '\'' + ", errorMessage='" + errorMessage + '\'' + '}'; } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduPlugin.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduPlugin.java index 871260a86d..1350694c0e 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduPlugin.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduPlugin.java @@ -20,126 +20,103 @@ package org.onap.so.vdu.utils; /** - * This interface defines a common API for template-based cloud deployments. - * The methods here should be adaptable for Openstack (Heat), Cloudify (TOSCA), - * Aria (TOSCA), Multi-VIM (TBD), and others (e.g. Azure Resource Manager). + * This interface defines a common API for template-based cloud deployments. The methods here should be adaptable for + * Openstack (Heat), Cloudify (TOSCA), Aria (TOSCA), Multi-VIM (TBD), and others (e.g. Azure Resource Manager). * - * The deployed instances are referred to here as Virtual Deployment Units (VDUs). - * The package of templates that define a give VDU is referred to as its blueprint. + * The deployed instances are referred to here as Virtual Deployment Units (VDUs). The package of templates that define + * a give VDU is referred to as its blueprint. * - * Template-based orchestrators all follow a similar template/blueprint model. - * - One main template that is the top level definition - * - Optional nested templates referenced/included by the main template - * - Optional files attached to the template package, typically containing - * configuration files, install scripts, orchestration scripts, etc. - * - * The main template also defines the required inputs for creating a new instance, - * and output values exposed by successfully deployed instances. Inputs and outputs - * may include simple or complex (JSON) data types. - * - * Each implementation of this interface is expected to understand the MSO CloudConfig - * to obtain the credentials for its sub-orchestrator and the targeted cloud. - * The sub-orchestrator may have different credentials from the cloud (e.g. an Aria - * instance in front of an Openstack cloud) or they may be the same (e.g. Heat) + * Template-based orchestrators all follow a similar template/blueprint model. - One main template that is the top level + * definition - Optional nested templates referenced/included by the main template - Optional files attached to the + * template package, typically containing configuration files, install scripts, orchestration scripts, etc. + * + * The main template also defines the required inputs for creating a new instance, and output values exposed by + * successfully deployed instances. Inputs and outputs may include simple or complex (JSON) data types. + * + * Each implementation of this interface is expected to understand the MSO CloudConfig to obtain the credentials for its + * sub-orchestrator and the targeted cloud. The sub-orchestrator may have different credentials from the cloud (e.g. an + * Aria instance in front of an Openstack cloud) or they may be the same (e.g. Heat) */ import java.util.Map; - import org.onap.so.openstack.exceptions.MsoException; public interface VduPlugin { /** - * The instantiateVdu interface deploys a new VDU instance from a blueprint package. - * The templates and files in the blueprint may be pre-installed where supported - * (e.g. in Cloudify or Aria), or may be passed in directly (e.g. for Heat). These - * files are expressed as byte arrays, though only text files are expected from ASDC. - * - * For some VIMs, this may be a single command (e.g. Heat -> create stack) or may - * require a series of API calls (e.g. Cloudify -> upload blueprint, create deployment, - * execute install workflow). These details are hidden within the implementation. - * The instantiation should be fully completed before returning. On failures, this - * method is expected to back out the attempt, leaving the cloud in its previous state. - * - * It is expected that parameters have been validated and contain at minimum the - * required parameters for the given template with no extra parameters. + * The instantiateVdu interface deploys a new VDU instance from a blueprint package. The templates and files in the + * blueprint may be pre-installed where supported (e.g. in Cloudify or Aria), or may be passed in directly (e.g. for + * Heat). These files are expressed as byte arrays, though only text files are expected from ASDC. + * + * For some VIMs, this may be a single command (e.g. Heat -> create stack) or may require a series of API calls + * (e.g. Cloudify -> upload blueprint, create deployment, execute install workflow). These details are hidden within + * the implementation. The instantiation should be fully completed before returning. On failures, this method is + * expected to back out the attempt, leaving the cloud in its previous state. + * + * It is expected that parameters have been validated and contain at minimum the required parameters for the given + * template with no extra parameters. * - * The VDU name supplied by the caller will be globally unique, and identify the artifact - * in A&AI. Inventory is managed by the higher levels invoking this function. + * The VDU name supplied by the caller will be globally unique, and identify the artifact in A&AI. Inventory is + * managed by the higher levels invoking this function. * - * @param cloudSiteId The target cloud for the VDU. Maps to a CloudConfig entry. - * @param tenantId The cloud tenant in which to deploy the VDU. The meaning may differ by - * cloud provider, but every cloud supports some sort of tenant partitioning. + * @param cloudSiteId The target cloud for the VDU. Maps to a CloudConfig entry. + * @param tenantId The cloud tenant in which to deploy the VDU. The meaning may differ by cloud provider, but every + * cloud supports some sort of tenant partitioning. * @param vduInstanceName A unique name for the VDU instance to create - * @param vduBlueprint Object containing the collection of templates and files that comprise - * the blueprint for this VDU. - * @param inputs A map of key/value inputs. Values may be strings, numbers, or JSON objects. - * @param environmentFile A file containing default parameter name/value pairs. This is - * primarily for Heat, though ASDC may create a similar file for other orchestrators. + * @param vduBlueprint Object containing the collection of templates and files that comprise the blueprint for this + * VDU. + * @param inputs A map of key/value inputs. Values may be strings, numbers, or JSON objects. + * @param environmentFile A file containing default parameter name/value pairs. This is primarily for Heat, though + * ASDC may create a similar file for other orchestrators. * @param timeoutMinutes Timeout after which the instantiation attempt will be cancelled - * @param suppressBackout Flag to preserve the deployment on install Failure. Should normally - * be False except in troubleshooting/debug cases + * @param suppressBackout Flag to preserve the deployment on install Failure. Should normally be False except in + * troubleshooting/debug cases * * @return A VduInfo object - * @throws MsoException Thrown if the sub-orchestrator API calls fail or if a timeout occurs. - * Various subclasses of MsoException may be thrown. + * @throws MsoException Thrown if the sub-orchestrator API calls fail or if a timeout occurs. Various subclasses of + * MsoException may be thrown. */ - public VduInfo instantiateVdu ( - String cloudSiteId, - String tenantId, - String vduInstanceName, - VduBlueprint vduBlueprint, - Map <String, ?> inputs, - String environmentFile, - int timeoutMinutes, - boolean suppressBackout) - throws MsoException; + public VduInfo instantiateVdu(String cloudSiteId, String tenantId, String vduInstanceName, + VduBlueprint vduBlueprint, Map<String, ?> inputs, String environmentFile, int timeoutMinutes, + boolean suppressBackout) throws MsoException; + - /** - * Query a deployed VDU instance. This call will return a VduInfo object, or null - * if the deployment does not exist. + * Query a deployed VDU instance. This call will return a VduInfo object, or null if the deployment does not exist. * - * Some VIM orchestrators identify deployment instances by string UUIDs, and others - * by integers. In the latter case, the ID will be passed in as a numeric string. + * Some VIM orchestrators identify deployment instances by string UUIDs, and others by integers. In the latter case, + * the ID will be passed in as a numeric string. * - * The returned VduInfo object contains the input and output parameter maps, - * as well as other properties of the deployment (name, status, last action, etc.). + * The returned VduInfo object contains the input and output parameter maps, as well as other properties of the + * deployment (name, status, last action, etc.). * * @param cloudSiteId The target cloud to query for the VDU. * @param tenantId The cloud tenant in which to query * @param vduInstanceId The ID of the deployment to query * * @return A VduInfo object - * @throws MsoException Thrown if the VIM/sub-orchestrator API calls fail. - * Various subclasses of MsoException may be thrown. + * @throws MsoException Thrown if the VIM/sub-orchestrator API calls fail. Various subclasses of MsoException may be + * thrown. */ - public VduInfo queryVdu ( - String cloudSiteId, - String tenantId, - String vduInstanceId) - throws MsoException; + public VduInfo queryVdu(String cloudSiteId, String tenantId, String vduInstanceId) throws MsoException; + - /** - * Delete a VDU instance by ID. If the VIM sub-orchestrator supports pre-installation - * of blueprints, the blueprint itself may remain installed. This is recommended, since - * other VDU instances may be using it. - * - * Some VIM orchestrators identify deployment instances by string UUIDs, and others - * by integers. In the latter case, the ID will be passed in as a numeric string. - * - * For some VIMs, deletion may be a single command (e.g. Heat -> delete stack) or a - * series of API calls (e.g. Cloudify -> execute uninstall workflow, delete deployment). - * These details are hidden within the implementation. The deletion should be fully - * completed before returning. - * - * The successful return is a VduInfo object which contains the state of the object just prior - * to deletion, with a status of DELETED. If the deployment was not found, the VduInfo object - * should be empty (with a status of NOTFOUND). There is no rollback from a successful deletion. - * - * A deletion failure will result in an undefined deployment state - the components may - * or may not have been all or partially uninstalled, so the resulting deployment must - * be considered invalid. + * Delete a VDU instance by ID. If the VIM sub-orchestrator supports pre-installation of blueprints, the blueprint + * itself may remain installed. This is recommended, since other VDU instances may be using it. + * + * Some VIM orchestrators identify deployment instances by string UUIDs, and others by integers. In the latter case, + * the ID will be passed in as a numeric string. + * + * For some VIMs, deletion may be a single command (e.g. Heat -> delete stack) or a series of API calls (e.g. + * Cloudify -> execute uninstall workflow, delete deployment). These details are hidden within the implementation. + * The deletion should be fully completed before returning. + * + * The successful return is a VduInfo object which contains the state of the object just prior to deletion, with a + * status of DELETED. If the deployment was not found, the VduInfo object should be empty (with a status of + * NOTFOUND). There is no rollback from a successful deletion. + * + * A deletion failure will result in an undefined deployment state - the components may or may not have been all or + * partially uninstalled, so the resulting deployment must be considered invalid. * * @param cloudSiteId The target cloud from which to delete the VDU. * @param tenantId The cloud tenant in which to delete the VDU. @@ -149,100 +126,81 @@ public interface VduPlugin { * * @return A VduInfo object, representing the state of the instance just prior to deletion. * - * @throws MsoException Thrown if the API calls fail or if a timeout occurs. - * Various subclasses of MsoException may be thrown. + * @throws MsoException Thrown if the API calls fail or if a timeout occurs. Various subclasses of MsoException may + * be thrown. */ - public VduInfo deleteVdu ( - String cloudSiteId, - String tenantId, - String vduInstanceId, - int timeoutMinutes, - boolean keepBlueprintLoaded) - throws MsoException; + public VduInfo deleteVdu(String cloudSiteId, String tenantId, String vduInstanceId, int timeoutMinutes, + boolean keepBlueprintLoaded) throws MsoException; + - /** - * The updateVdu interface attempts to update a VDU in-place, using either new inputs or - * a new model definition (i.e. updated templates/blueprints). This depends on the - * capabilities of the targeted sub-orchestrator, as not all implementations are expected - * to support this ability. It is primary included initially only for Heat. - * - * It is expected that parameters have been validated and contain at minimum the required - * parameters for the given template with no extra parameters. The VDU instance name cannot - * be updated. - * - * The update should be fully completed before returning. The successful return is a - * VduInfo object containing the updated VDU state. - * - * An update failure will result in an undefined deployment state - the components may - * or may not have been all or partially modified, deleted, recreated, etc. So the resulting - * VDU must be considered invalid. - * - * @param cloudSiteId The target cloud for the VDU. Maps to a CloudConfig entry. - * @param tenantId The cloud tenant in which to deploy the VDU. The meaning may differ by - * cloud provider, but every cloud supports some sort of tenant partitioning. + * The updateVdu interface attempts to update a VDU in-place, using either new inputs or a new model definition + * (i.e. updated templates/blueprints). This depends on the capabilities of the targeted sub-orchestrator, as not + * all implementations are expected to support this ability. It is primary included initially only for Heat. + * + * It is expected that parameters have been validated and contain at minimum the required parameters for the given + * template with no extra parameters. The VDU instance name cannot be updated. + * + * The update should be fully completed before returning. The successful return is a VduInfo object containing the + * updated VDU state. + * + * An update failure will result in an undefined deployment state - the components may or may not have been all or + * partially modified, deleted, recreated, etc. So the resulting VDU must be considered invalid. + * + * @param cloudSiteId The target cloud for the VDU. Maps to a CloudConfig entry. + * @param tenantId The cloud tenant in which to deploy the VDU. The meaning may differ by cloud provider, but every + * cloud supports some sort of tenant partitioning. * @param vduInstanceId The unique ID for the VDU instance to update. - * @param vduBlueprint Object containing the collection of templates and files that comprise - * the blueprint for this VDU. - * @param inputs A map of key/value inputs. Values may be strings, numbers, or JSON objects. - * @param environmentFile A file containing default parameter name/value pairs. This is - * primarily for Heat, though ASDC may create a similar file for other orchestrators. + * @param vduBlueprint Object containing the collection of templates and files that comprise the blueprint for this + * VDU. + * @param inputs A map of key/value inputs. Values may be strings, numbers, or JSON objects. + * @param environmentFile A file containing default parameter name/value pairs. This is primarily for Heat, though + * ASDC may create a similar file for other orchestrators. * @param timeoutMinutes Timeout after which the instantiation attempt will be cancelled * * @return A VduInfo object - * @throws MsoException Thrown if the sub-orchestrator API calls fail or if a timeout occurs. - * Various subclasses of MsoException may be thrown. + * @throws MsoException Thrown if the sub-orchestrator API calls fail or if a timeout occurs. Various subclasses of + * MsoException may be thrown. */ - public VduInfo updateVdu ( - String cloudSiteId, - String tenantId, - String vduInstanceId, - VduBlueprint vduBlueprint, - Map <String, ?> inputs, - String environmentFile, - int timeoutMinutes) - throws MsoException; + public VduInfo updateVdu(String cloudSiteId, String tenantId, String vduInstanceId, VduBlueprint vduBlueprint, + Map<String, ?> inputs, String environmentFile, int timeoutMinutes) throws MsoException; + - /** - * Check if a blueprint package has been installed in the sub-orchestrator and available - * for use at a targeted cloud site. If the specific sub-orchestrator does not support - * pre-installation, then those implementations should always return False. + * Check if a blueprint package has been installed in the sub-orchestrator and available for use at a targeted cloud + * site. If the specific sub-orchestrator does not support pre-installation, then those implementations should + * always return False. * * @param cloudSiteId The cloud site where the blueprint is needed * @param vduModelId Unique ID of the VDU model to query * * @throws MsoException Thrown if the API call fails. */ - public boolean isBlueprintLoaded (String cloudSiteId, String vduModelId) - throws MsoException; + public boolean isBlueprintLoaded(String cloudSiteId, String vduModelId) throws MsoException; + - /** - * Install a blueprint package to the target sub-orchestrator for a cloud site. - * The blueprints currently must be structured as a single directory with all of the - * required files. One of those files is designated the "main file" for the blueprint. - * Files are provided as byte arrays, though expect only text files will be distributed - * from ASDC and stored by MSO. + * Install a blueprint package to the target sub-orchestrator for a cloud site. The blueprints currently must be + * structured as a single directory with all of the required files. One of those files is designated the "main file" + * for the blueprint. Files are provided as byte arrays, though expect only text files will be distributed from ASDC + * and stored by MSO. * * @param cloudSiteId The cloud site where the blueprint is needed - * @param vduBlueprint Object containing the collection of templates and files that comprise - * the blueprint for this VDU. + * @param vduBlueprint Object containing the collection of templates and files that comprise the blueprint for this + * VDU. * @param failIfExists Flag to return an error if blueprint already exists * * @throws MsoException Thrown if the API call fails. */ - public void uploadBlueprint (String cloudSiteId, - VduBlueprint vduBlueprint, - boolean failIfExists) - throws MsoException; + public void uploadBlueprint(String cloudSiteId, VduBlueprint vduBlueprint, boolean failIfExists) + throws MsoException; /** - * Indicator that this VIM sub-orchestrator implementation supports independent upload - * of blueprint packages. Each implementation should return a constant value. + * Indicator that this VIM sub-orchestrator implementation supports independent upload of blueprint packages. Each + * implementation should return a constant value. * * @returns True if the sub-orchestrator supports blueprint pre-installation (upload). */ - public boolean blueprintUploadSupported (); + public boolean blueprintUploadSupported(); } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduStatus.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduStatus.java index 1412b02da0..0c4b9e01b9 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduStatus.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/vdu/utils/VduStatus.java @@ -25,13 +25,8 @@ package org.onap.so.vdu.utils; * Enum status values to capture the state of a generic (cloud-agnostic) VDU. */ public enum VduStatus { - NOTFOUND, - INSTANTIATING, - INSTANTIATED, - DELETING, - DELETED, // Note - only returned in success response to deleteVdu call. - UPDATING, - FAILED, - UNKNOWN + NOTFOUND, INSTANTIATING, INSTANTIATED, DELETING, DELETED, // Note - only returned in success response to deleteVdu + // call. + UPDATING, FAILED, UNKNOWN } diff --git a/adapters/mso-openstack-adapters/src/main/resources/application-local.yaml b/adapters/mso-openstack-adapters/src/main/resources/application-local.yaml index 936bde125a..2ec5be7448 100644 --- a/adapters/mso-openstack-adapters/src/main/resources/application-local.yaml +++ b/adapters/mso-openstack-adapters/src/main/resources/application-local.yaml @@ -52,6 +52,8 @@ mso: msoKey: 07a7159d3bf51a0e53be7a8f89699be7 auth: 6B466C603A260F3655DBF91E53CE54667041C01406D10E8CAF9CC24D8FA5388D06F90BFE4C852052B436 logPath: logs + msb-ip: localhost + msb-port: ${wiremock.server.port} workflow: endpoint: http://bpmn-infra:8081/sobpmnengine topics: diff --git a/adapters/mso-openstack-adapters/src/main/resources/application.yaml b/adapters/mso-openstack-adapters/src/main/resources/application.yaml index cdd04b8c21..f66d77db48 100644 --- a/adapters/mso-openstack-adapters/src/main/resources/application.yaml +++ b/adapters/mso-openstack-adapters/src/main/resources/application.yaml @@ -16,6 +16,7 @@ mso: workflow: topics: retryMultiplier: 60000 + retrySequence: 1, 1, 2, 3, 5, 8, 13, 20 spring: datasource: url: jdbc:mariadb://${DB_HOST}:${DB_PORT}/catalogdb diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/BeansTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/BeansTest.java index 7aa86da237..ea9512bfa7 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/BeansTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/BeansTest.java @@ -36,55 +36,53 @@ import org.springframework.stereotype.Component; public class BeansTest { - private final PojoClassFilter filterTestClasses = new FilterTestClasses(); - - private final PojoClassFilter enumFilter = new FilterEnum(); - - private final PojoClassFilter noNestedClasses = new FilterTestNestedClasses(); - - - - @Test - public void pojoStructure() { - test("org.onap.so.adapters.network.async.client"); - test("org.onap.so.adapters.vnf.async.client"); - test("org.onap.so.adapters.network"); - test("org.onap.so.adapters.vnf"); - test("org.onap.so.adapters.valet"); - test("org.onap.so.adapters.valet.beans"); - test("org.onap.so.vdu.utils"); - } - - private void test(String pojoPackage) { - Validator validator = ValidatorBuilder.create() - .with(new NoStaticExceptFinalRule()) - .with(new SerializableMustHaveSerialVersionUIDRule()) - .with(new NoPublicFieldsExceptStaticFinalRule()) - .with(new SetterTester()) - .with(new GetterTester()) - .with(new ToStringTester()) - - .build(); - - - validator.validate(pojoPackage, new FilterPackageInfo(), filterTestClasses,enumFilter,new FilterNonConcrete(), noNestedClasses, new FilterBeans()); - } - private static class FilterTestClasses implements PojoClassFilter { - public boolean include(PojoClass pojoClass) { - return !pojoClass.getSourcePath().contains("/test-classes/"); - } - } - - private static class FilterTestNestedClasses implements PojoClassFilter { - public boolean include(PojoClass pojoClass) { - return !pojoClass.isNestedClass(); - } - } - - private static class FilterBeans implements PojoClassFilter { - public boolean include(PojoClass pojoClass) { - return pojoClass.getAnnotations().stream().filter(o -> o instanceof Component).count() <= 0; - } - } + private final PojoClassFilter filterTestClasses = new FilterTestClasses(); + + private final PojoClassFilter enumFilter = new FilterEnum(); + + private final PojoClassFilter noNestedClasses = new FilterTestNestedClasses(); + + + + @Test + public void pojoStructure() { + test("org.onap.so.adapters.network.async.client"); + test("org.onap.so.adapters.vnf.async.client"); + test("org.onap.so.adapters.network"); + test("org.onap.so.adapters.vnf"); + test("org.onap.so.adapters.valet"); + test("org.onap.so.adapters.valet.beans"); + test("org.onap.so.vdu.utils"); + } + + private void test(String pojoPackage) { + Validator validator = ValidatorBuilder.create().with(new NoStaticExceptFinalRule()) + .with(new SerializableMustHaveSerialVersionUIDRule()).with(new NoPublicFieldsExceptStaticFinalRule()) + .with(new SetterTester()).with(new GetterTester()).with(new ToStringTester()) + + .build(); + + + validator.validate(pojoPackage, new FilterPackageInfo(), filterTestClasses, enumFilter, new FilterNonConcrete(), + noNestedClasses, new FilterBeans()); + } + + private static class FilterTestClasses implements PojoClassFilter { + public boolean include(PojoClass pojoClass) { + return !pojoClass.getSourcePath().contains("/test-classes/"); + } + } + + private static class FilterTestNestedClasses implements PojoClassFilter { + public boolean include(PojoClass pojoClass) { + return !pojoClass.isNestedClass(); + } + } + + private static class FilterBeans implements PojoClassFilter { + public boolean include(PojoClass pojoClass) { + return pojoClass.getAnnotations().stream().filter(o -> o instanceof Component).count() <= 0; + } + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditCreateStackServiceTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditCreateStackServiceTest.java deleted file mode 100644 index bcf126d887..0000000000 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditCreateStackServiceTest.java +++ /dev/null @@ -1,150 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.audit; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.doReturn; - -import java.io.IOException; -import java.util.Optional; - -import org.camunda.bpm.client.task.ExternalTask; -import org.camunda.bpm.client.task.ExternalTaskService; -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.onap.aai.domain.yang.LInterface; -import org.onap.so.audit.beans.AuditInventory; -import org.springframework.core.env.Environment; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; - -public class AuditCreateStackServiceTest extends AuditCreateStackService { - - @InjectMocks - AuditCreateStackService auditStackService = new AuditCreateStackService(); - - @Mock - HeatStackAudit heatStackAuditMock; - - @Mock - Environment mockEnv; - - @Mock - ExternalTask mockExternalTask; - - @Mock - ExternalTaskService mockExternalTaskService; - - AuditInventory auditInventory = new AuditInventory(); - - @Before - public void setup() { - auditInventory.setCloudOwner("cloudOwner"); - auditInventory.setCloudRegion("cloudRegion"); - auditInventory.setTenantId("tenantId"); - auditInventory.setHeatStackName("stackName"); - MockitoAnnotations.initMocks(this); - doReturn(auditInventory).when(mockExternalTask).getVariable("auditInventory"); - doReturn("6000").when(mockEnv).getProperty("mso.workflow.topics.retryMultiplier","6000"); - doReturn("aasdfasdf").when(mockExternalTask).getId(); - } - - @Test - public void execute_external_task_audit_success_Test() { - doReturn(true).when(heatStackAuditMock).auditHeatStackCreate("cloudRegion", "cloudOwner", "tenantId", "stackName"); - auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); - Mockito.verify(mockExternalTaskService).complete(mockExternalTask); - } - - @Test - public void execute_external_task_audit_first_failure_Test() { - doReturn(false).when(heatStackAuditMock).auditHeatStackCreate("cloudRegion", "cloudOwner", "tenantId", "stackName"); - doReturn(null).when(mockExternalTask).getRetries(); - auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); - Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask, - "Unable to find all VServers and L-Interaces in A&AI", - "Unable to find all VServers and L-Interaces in A&AI", 8, 10000L); - } - - @Test - public void execute_external_task_audit_intermediate_failure_Test() { - doReturn(false).when(heatStackAuditMock).auditHeatStackCreate("cloudRegion", "cloudOwner", "tenantId", "stackName"); - doReturn(6).when(mockExternalTask).getRetries(); - auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); - Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask, - "Unable to find all VServers and L-Interaces in A&AI", - "Unable to find all VServers and L-Interaces in A&AI", 5, 12000L); - - } - - @Test - public void execute_external_task_audit_final_failure_Test() { - doReturn(false).when(heatStackAuditMock).auditHeatStackCreate("cloudRegion", "cloudOwner", "tenantId", "stackName"); - doReturn(1).when(mockExternalTask).getRetries(); - auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); - Mockito.verify(mockExternalTaskService).handleBpmnError(mockExternalTask, - "AuditAAIInventoryFailure", "Number of Retries Exceeded auditing inventory"); - } - - @Test - public void retry_sequence_calculation_Test() { - long firstRetry = auditStackService.calculateRetryDelay(8); - assertEquals(6000L, firstRetry); - long secondRetry = auditStackService.calculateRetryDelay(7); - assertEquals(6000L, secondRetry); - long thirdRetry = auditStackService.calculateRetryDelay(6); - assertEquals(12000L, thirdRetry); - long fourthRetry = auditStackService.calculateRetryDelay(5); - assertEquals(18000L, fourthRetry); - long fifthRetry = auditStackService.calculateRetryDelay(4); - assertEquals(30000L, fifthRetry); - long sixRetry = auditStackService.calculateRetryDelay(3); - assertEquals(48000L, sixRetry); - long seventhRetry = auditStackService.calculateRetryDelay(2); - assertEquals(78000L, seventhRetry); - long eigthRetry = auditStackService.calculateRetryDelay(1); - assertEquals(120000L, eigthRetry); - } - - @Test - public void retry_sequence_Test() { - long firstRetry = auditStackService.calculateRetryDelay(8); - assertEquals(6000L, firstRetry); - long secondRetry = auditStackService.calculateRetryDelay(7); - assertEquals(6000L, secondRetry); - long thirdRetry = auditStackService.calculateRetryDelay(6); - assertEquals(12000L, thirdRetry); - long fourthRetry = auditStackService.calculateRetryDelay(5); - assertEquals(18000L, fourthRetry); - long fifthRetry = auditStackService.calculateRetryDelay(4); - assertEquals(30000L, fifthRetry); - long sixRetry = auditStackService.calculateRetryDelay(3); - assertEquals(48000L, sixRetry); - long seventhRetry = auditStackService.calculateRetryDelay(2); - assertEquals(78000L, seventhRetry); - long eigthRetry = auditStackService.calculateRetryDelay(1); - assertEquals(120000L, eigthRetry); - } -} diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java new file mode 100644 index 0000000000..80b2a21419 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java @@ -0,0 +1,202 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.audit; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.doReturn; +import java.io.File; +import java.io.IOException; +import java.util.Map; +import java.util.Optional; +import org.camunda.bpm.client.task.ExternalTask; +import org.camunda.bpm.client.task.ExternalTaskService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.onap.so.audit.beans.AuditInventory; +import org.springframework.core.env.Environment; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class AuditStackServiceDataTest extends AuditCreateStackService { + + @InjectMocks + private AuditCreateStackService auditStackService = new AuditCreateStackService(); + + @Mock + private HeatStackAudit heatStackAuditMock; + + @Mock + private Environment mockEnv; + + @Mock + private ExternalTask mockExternalTask; + + @Mock + private ExternalTaskService mockExternalTaskService; + + private ObjectMapper objectMapper = new ObjectMapper(); + + private AuditInventory auditInventory = new AuditInventory(); + + Optional<AAIObjectAuditList> auditListOptSuccess; + + Optional<AAIObjectAuditList> auditListOptFailure; + + @Before + public void setup() throws JsonParseException, JsonMappingException, IOException { + auditInventory.setCloudOwner("cloudOwner"); + auditInventory.setCloudRegion("cloudRegion"); + auditInventory.setTenantId("tenantId"); + auditInventory.setHeatStackName("stackName"); + MockitoAnnotations.initMocks(this); + + AAIObjectAuditList auditListSuccess = objectMapper + .readValue(new File("src/test/resources/ExpectedVServerFound.json"), AAIObjectAuditList.class); + auditListOptSuccess = Optional.of(auditListSuccess); + + AAIObjectAuditList auditListFailure = objectMapper.readValue( + new File("src/test/resources/Vserver2_Found_VServer1_Not_Found.json"), AAIObjectAuditList.class); + auditListOptFailure = Optional.of(auditListFailure); + String[] retrySequence = new String[8]; + retrySequence[0] = "1"; + retrySequence[1] = "1"; + retrySequence[2] = "2"; + retrySequence[3] = "3"; + retrySequence[4] = "5"; + retrySequence[5] = "8"; + retrySequence[6] = "13"; + retrySequence[7] = "20"; + doReturn(auditInventory).when(mockExternalTask).getVariable("auditInventory"); + doReturn("6000").when(mockEnv).getProperty("mso.workflow.topics.retryMultiplier", "6000"); + doReturn(retrySequence).when(mockEnv).getProperty("mso.workflow.topics.retrySequence", String[].class); + doReturn("aasdfasdf").when(mockExternalTask).getId(); + } + + @Test + public void execute_external_task_audit_success_Test() { + doReturn(auditListOptSuccess).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", + "stackName"); + auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); + ArgumentCaptor<Map> captor = ArgumentCaptor.forClass(Map.class); + ArgumentCaptor<ExternalTask> taskCaptor = ArgumentCaptor.forClass(ExternalTask.class); + Mockito.verify(mockExternalTaskService).complete(taskCaptor.capture(), captor.capture()); + Map actualMap = captor.getValue(); + assertEquals(true, actualMap.get("auditIsSuccessful")); + assertNotNull(actualMap.get("auditInventoryResult")); + } + + @Test + public void execute_external_task_audit_first_failure_Test() { + doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", + "stackName"); + doReturn(null).when(mockExternalTask).getRetries(); + auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); + Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask, + "Unable to find all VServers and L-Interaces in A&AI", + "Unable to find all VServers and L-Interaces in A&AI", 8, 10000L); + } + + @Test + public void execute_external_task_audit_intermediate_failure_Test() { + doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", + "stackName"); + doReturn(6).when(mockExternalTask).getRetries(); + auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); + Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask, + "Unable to find all VServers and L-Interaces in A&AI", + "Unable to find all VServers and L-Interaces in A&AI", 5, 12000L); + + } + + @Test + public void execute_external_task_audit_final_failure_Test() { + doReturn(auditListOptFailure).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", + "stackName"); + doReturn(1).when(mockExternalTask).getRetries(); + auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); + ArgumentCaptor<Map> captor = ArgumentCaptor.forClass(Map.class); + ArgumentCaptor<ExternalTask> taskCaptor = ArgumentCaptor.forClass(ExternalTask.class); + Mockito.verify(mockExternalTaskService).complete(taskCaptor.capture(), captor.capture()); + Map actualMap = captor.getValue(); + assertEquals(false, actualMap.get("auditIsSuccessful")); + assertNotNull(actualMap.get("auditInventoryResult")); + } + + @Test + public void retry_sequence_calculation_Test() { + long firstRetry = auditStackService.calculateRetryDelay(8); + assertEquals(6000L, firstRetry); + long secondRetry = auditStackService.calculateRetryDelay(7); + assertEquals(6000L, secondRetry); + long thirdRetry = auditStackService.calculateRetryDelay(6); + assertEquals(12000L, thirdRetry); + long fourthRetry = auditStackService.calculateRetryDelay(5); + assertEquals(18000L, fourthRetry); + long fifthRetry = auditStackService.calculateRetryDelay(4); + assertEquals(30000L, fifthRetry); + long sixRetry = auditStackService.calculateRetryDelay(3); + assertEquals(48000L, sixRetry); + long seventhRetry = auditStackService.calculateRetryDelay(2); + assertEquals(78000L, seventhRetry); + long eigthRetry = auditStackService.calculateRetryDelay(1); + assertEquals(120000L, eigthRetry); + } + + @Test + public void retry_sequence_Test() { + long firstRetry = auditStackService.calculateRetryDelay(8); + assertEquals(6000L, firstRetry); + long secondRetry = auditStackService.calculateRetryDelay(7); + assertEquals(6000L, secondRetry); + long thirdRetry = auditStackService.calculateRetryDelay(6); + assertEquals(12000L, thirdRetry); + long fourthRetry = auditStackService.calculateRetryDelay(5); + assertEquals(18000L, fourthRetry); + long fifthRetry = auditStackService.calculateRetryDelay(4); + assertEquals(30000L, fifthRetry); + long sixRetry = auditStackService.calculateRetryDelay(3); + assertEquals(48000L, sixRetry); + long seventhRetry = auditStackService.calculateRetryDelay(2); + assertEquals(78000L, seventhRetry); + long eigthRetry = auditStackService.calculateRetryDelay(1); + assertEquals(120000L, eigthRetry); + } + + + @Test + public void determineAuditResult_Test() throws Exception { + boolean actual = auditStackService.didCreateAuditFail(auditListOptSuccess); + assertEquals(false, actual); + } + + @Test + public void determineAuditResult_Failure_Test() throws Exception { + boolean actual = auditStackService.didCreateAuditFail(auditListOptFailure); + assertEquals(true, actual); + } +} diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java index 9176b58de8..d43dbd99f9 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java @@ -13,7 +13,7 @@ * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * See the License for the specific language governing perservice2sions and * limitations under the License. * ============LICENSE_END========================================================= */ @@ -24,15 +24,15 @@ import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; - import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Stream; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -48,7 +48,8 @@ import org.onap.so.client.aai.AAIResourcesClient; import org.onap.so.client.aai.entities.AAIResultWrapper; import org.onap.so.client.aai.entities.uri.AAIResourceUri; import org.onap.so.client.aai.entities.uri.AAIUriFactory; - +import org.skyscreamer.jsonassert.JSONAssert; +import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -58,297 +59,312 @@ import com.woorea.openstack.heat.model.Resources; @RunWith(MockitoJUnitRunner.Silent.class) public class AuditVServerTest extends AuditVServer { - @InjectMocks - private AuditVServer auditNova = new AuditVServer(); - - @Mock - private AAIResourcesClient aaiResourcesMock; - - private String cloudOwner = "cloudOwner"; - private String cloudRegion = "cloudRegion"; - private String tenantId = "tenantId"; - - private AAIResourceUri vserverURI = AAIUriFactory.createResourceUri(AAIObjectType.VSERVER,cloudOwner, cloudRegion, - tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db"); - - private AAIResourceUri vserverURI2 = AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegion, - tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz"); - - private AAIResourceUri ssc_1_trusted_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "dec8bdc7-5718-41dc-bfbb-561ff6eeb81c"); - - private AAIResourceUri ssc_1_service1_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "1c56a24b-5f03-435a-850d-31cd4252de56"); - - private AAIResourceUri ssc_1_mgmt_port_1_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "12afcd28-929f-4d80-8a5a-0833bfd5e20b"); - - private AAIResourceUri ssc_1_mgmt_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "80baec42-ffae-425f-ad8c-3f7b2c24bfff"); - - private AAIResourceUri ssc_1_service2_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "13eddf95-4cf3-45f2-823a-2d890a6549b4"); - - private AAIResourceUri ssc_1_int_ha_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "9cab2903-70f7-44fd-b681-491d6ae2adb8"); - - private AAIResourceUri test_port_1_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz").queryParam("interface-id", "9cab2903-70f7-44fd-b681-491d6ae2adz1"); - - - private AAIResourceUri test_port_2_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz").queryParam("interface-id", "9cab2903-70f7-44fd-b681-491d6ae2adz2"); - - - - private AAIResourceUri service2_sub_1_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.SUB_L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db","interface-name").queryParam("interface-id", "f711be16-2654-4a09-b89d-0511fda20e81"); - - private AAIResourceUri service1_sub_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.SUB_L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db","interface-name").queryParam("interface-id", "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb"); - - private AAIResourceUri service1_sub_1_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.SUB_L_INTERFACE, - cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db","interface-name").queryParam("interface-id", "b7019dd0-2ee9-4447-bdef-ac25676b205a"); - - - - private Set<Vserver> vserversToAudit = new HashSet<>(); - - - LInterface test_port_1 = new LInterface(); - LInterface test_port_2 = new LInterface(); - LInterface ssc_1_int_ha_port_0 = new LInterface(); - LInterface service2_sub_interface_1 = new LInterface(); - LInterface ssc_1_service2_port_0 = new LInterface(); - LInterface ssc_1_mgmt_port_0 = new LInterface(); - LInterface ssc_1_mgmt_port_1 = new LInterface(); - LInterface service1_sub_interface_2 = new LInterface(); - LInterface service1_sub_interface_1 = new LInterface(); - LInterface ssc_1_service1_port_0 = new LInterface(); - LInterface ssc_1_trusted_port_0 = new LInterface(); - - LInterfaces test_port_1_plural = new LInterfaces(); - LInterfaces test_port_2_plural = new LInterfaces(); - LInterfaces ssc_1_int_ha_port_0_plural = new LInterfaces(); - LInterfaces service2_sub_interface_1_plural = new LInterfaces(); - LInterfaces ssc_1_service2_port_0_plural = new LInterfaces(); - LInterfaces ssc_1_mgmt_port_0_plural = new LInterfaces(); - LInterfaces ssc_1_mgmt_port_1_plural = new LInterfaces(); - LInterfaces service1_sub_interface_2_plural = new LInterfaces(); - LInterfaces service1_sub_interface_1_plural = new LInterfaces(); - LInterfaces ssc_1_service1_port_0_plural = new LInterfaces(); - LInterfaces ssc_1_trusted_port_0_plural = new LInterfaces(); - - - @Before - public void setup() { - auditNova.setAaiClient(aaiResourcesMock); - - Vserver vServer1= new Vserver(); - vServer1.setVserverId("3a4c2ca5-27b3-4ecc-98c5-06804867c4db"); - LInterfaces vServer1Linterfaces = new LInterfaces(); - vServer1.setLInterfaces(vServer1Linterfaces); - - ssc_1_trusted_port_0.setInterfaceId("dec8bdc7-5718-41dc-bfbb-561ff6eeb81c"); - ssc_1_trusted_port_0.setInterfaceName("interface-name"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_trusted_port_0); - - - ssc_1_service1_port_0.setInterfaceId("1c56a24b-5f03-435a-850d-31cd4252de56"); - ssc_1_service1_port_0.setInterfaceName("interface-name"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_service1_port_0); - ssc_1_service1_port_0.setLInterfaces(new LInterfaces()); - - - service1_sub_interface_1.setInterfaceId("0d9cd813-2ae1-46c0-9ebb-48081f6cffbb"); - ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_1); - - - service1_sub_interface_2.setInterfaceId("b7019dd0-2ee9-4447-bdef-ac25676b205a"); - ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_2); - - - ssc_1_mgmt_port_1.setInterfaceId("12afcd28-929f-4d80-8a5a-0833bfd5e20b"); - ssc_1_mgmt_port_1.setInterfaceName("interface-name"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_1); - - ssc_1_mgmt_port_0.setInterfaceId("80baec42-ffae-425f-ad8c-3f7b2c24bfff"); - ssc_1_mgmt_port_0.setInterfaceName("interface-name"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_0); - - - ssc_1_service2_port_0.setLInterfaces(new LInterfaces()); - ssc_1_service2_port_0.setInterfaceId("13eddf95-4cf3-45f2-823a-2d890a6549b4"); - ssc_1_service2_port_0.setInterfaceName("interface-name"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_service2_port_0); - - - service2_sub_interface_1.setInterfaceId("f711be16-2654-4a09-b89d-0511fda20e81"); - ssc_1_service2_port_0.getLInterfaces().getLInterface().add(service2_sub_interface_1); - - - ssc_1_int_ha_port_0.setInterfaceId("9cab2903-70f7-44fd-b681-491d6ae2adb8"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_int_ha_port_0); - - - Vserver vServer2= new Vserver(); - vServer2.setVserverId("3a4c2ca5-27b3-4ecc-98c5-06804867c4dz"); - LInterfaces vServer2Linterfaces = new LInterfaces(); - vServer2.setLInterfaces(vServer2Linterfaces); - - test_port_1.setInterfaceId("9cab2903-70f7-44fd-b681-491d6ae2adz1"); - test_port_1.setInterfaceName("interface-name"); - - - test_port_2.setInterfaceId("9cab2903-70f7-44fd-b681-491d6ae2adz2"); - test_port_2.setInterfaceName("interface-name"); - - vServer2.getLInterfaces().getLInterface().add(test_port_1); - vServer2.getLInterfaces().getLInterface().add(test_port_2); - - vserversToAudit.add(vServer1); - vserversToAudit.add(vServer2); - - - test_port_1_plural.getLInterface().add(test_port_1); - test_port_2_plural.getLInterface().add(test_port_2); - ssc_1_int_ha_port_0_plural.getLInterface().add(ssc_1_int_ha_port_0); - ssc_1_service2_port_0_plural.getLInterface().add(ssc_1_service2_port_0); - ssc_1_mgmt_port_0_plural.getLInterface().add(ssc_1_mgmt_port_0); - ssc_1_mgmt_port_1_plural.getLInterface().add(ssc_1_mgmt_port_1); - ssc_1_service1_port_0_plural.getLInterface().add(ssc_1_service1_port_0); - ssc_1_trusted_port_0_plural.getLInterface().add(ssc_1_trusted_port_0); - - } - - @Test - public void audit_Vserver_Empty_HashSet() throws JsonParseException, JsonMappingException, IOException { - boolean exists = auditNova.auditAllVserversDoExist(new HashSet<Vserver>(), tenantId, cloudOwner, cloudRegion); - assertEquals(false, exists); - - boolean doNotExist = auditNova.auditAllVserversDoNotExist(new HashSet<Vserver>(), tenantId, cloudOwner, cloudRegion); - assertEquals(true, doNotExist); - } - - - @Test - public void audit_Vserver_Found_Test() throws JsonParseException, JsonMappingException, IOException { - doReturn(true).when(aaiResourcesMock).exists(vserverURI); - doReturn(true).when(aaiResourcesMock).exists(vserverURI2); - doReturn(Optional.of(ssc_1_trusted_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_trusted_port_0_uri); - doReturn(Optional.of(ssc_1_service1_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_service1_port_0_uri); - doReturn(Optional.of(ssc_1_mgmt_port_1_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_mgmt_port_1_uri); - doReturn(Optional.of(ssc_1_mgmt_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_mgmt_port_0_uri); - doReturn(Optional.of(ssc_1_service2_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_service2_port_0_uri); - doReturn(Optional.of(ssc_1_int_ha_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_int_ha_port_0_uri); - doReturn(Optional.of(test_port_1_plural)).when(aaiResourcesMock).get(LInterfaces.class,test_port_1_uri); - doReturn(Optional.of(test_port_2_plural)).when(aaiResourcesMock).get(LInterfaces.class,test_port_2_uri); - - doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); - doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); - doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); - - boolean exists = auditNova.auditAllVserversDoExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(true, exists); - - boolean doNotExist = auditNova.auditAllVserversDoNotExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(false, doNotExist); - } - - @Test - public void audit_Vserver_Found_Test_Network_Not_Found() - throws JsonParseException, JsonMappingException, IOException { - doReturn(true).when(aaiResourcesMock).exists(vserverURI); - doReturn(true).when(aaiResourcesMock).exists(vserverURI2); - doReturn(Optional.of(ssc_1_trusted_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_trusted_port_0_uri); - doReturn(Optional.of(ssc_1_service1_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_service1_port_0_uri); - doReturn(Optional.of(ssc_1_mgmt_port_1_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_mgmt_port_1_uri); - doReturn(Optional.empty()).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_mgmt_port_0_uri); - doReturn(Optional.of(ssc_1_service2_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_service2_port_0_uri); - doReturn(Optional.of(ssc_1_int_ha_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_int_ha_port_0_uri); - doReturn(Optional.of(test_port_1_plural)).when(aaiResourcesMock).get(LInterfaces.class,test_port_1_uri); - doReturn(Optional.of(test_port_2_plural)).when(aaiResourcesMock).get(LInterfaces.class,test_port_2_uri); - - doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); - doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); - doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); - - boolean exists = auditNova.auditAllVserversDoExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(false, exists); - - boolean doNotExist = auditNova.auditAllVserversDoNotExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(false, doNotExist); - } - - @Test - public void audit_Vserver_Found_Test_Network_Not_Found_Second_Server() - throws JsonParseException, JsonMappingException, IOException { - doReturn(true).when(aaiResourcesMock).exists(vserverURI); - doReturn(true).when(aaiResourcesMock).exists(vserverURI2); - doReturn(Optional.of(ssc_1_trusted_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_trusted_port_0_uri); - doReturn(Optional.of(ssc_1_service1_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_service1_port_0_uri); - doReturn(Optional.of(ssc_1_mgmt_port_1_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_mgmt_port_1_uri); - doReturn(Optional.of(ssc_1_mgmt_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_mgmt_port_0_uri); - doReturn(Optional.of(ssc_1_service2_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_service2_port_0_uri); - doReturn(Optional.of(ssc_1_int_ha_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_int_ha_port_0_uri); - doReturn(Optional.of(test_port_1_plural)).when(aaiResourcesMock).get(LInterface.class,test_port_1_uri); - doReturn(Optional.empty()).when(aaiResourcesMock).get(LInterface.class,test_port_2_uri); - doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); - doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); - doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); - boolean exists = auditNova.auditAllVserversDoExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(false, exists); - - boolean doNotExist = auditNova.auditAllVserversDoNotExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(false, doNotExist); - } - - @Test - public void audit_Vservers_Not_Found_Test() throws JsonParseException, JsonMappingException, IOException { - doReturn(false).when(aaiResourcesMock).exists(vserverURI); - doReturn(false).when(aaiResourcesMock).exists(vserverURI2); - - boolean exists = auditNova.auditAllVserversDoExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(false, exists); - - boolean doNotExist = auditNova.auditAllVserversDoNotExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(true, doNotExist); - } - - @Test - public void audit_Vserver_first_Not_Found_Test() throws JsonParseException, JsonMappingException, IOException { - doReturn(false).when(aaiResourcesMock).exists(vserverURI); - doReturn(true).when(aaiResourcesMock).exists(vserverURI2); - doReturn(Optional.of(test_port_1_plural)).when(aaiResourcesMock).get(LInterface.class,test_port_1_uri); - doReturn(Optional.of(test_port_2_plural)).when(aaiResourcesMock).get(LInterface.class,test_port_2_uri); - boolean exists = auditNova.auditAllVserversDoExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(false, exists); - - boolean doNotExist = auditNova.auditAllVserversDoNotExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(false, doNotExist); - } - - @Test - public void audit_Vserver_Second_Not_Found_Test() throws JsonParseException, JsonMappingException, IOException { - doReturn(true).when(aaiResourcesMock).exists(vserverURI); - doReturn(Optional.of(ssc_1_trusted_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_trusted_port_0_uri); - doReturn(Optional.of(ssc_1_service1_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_service1_port_0_uri); - doReturn(Optional.of(ssc_1_mgmt_port_1_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_mgmt_port_1_uri); - doReturn(Optional.of(ssc_1_mgmt_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_mgmt_port_0_uri); - doReturn(Optional.of(ssc_1_service2_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_service2_port_0_uri); - doReturn(Optional.of(ssc_1_int_ha_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_int_ha_port_0_uri); - doReturn(Optional.of(test_port_1_plural)).when(aaiResourcesMock).get(LInterface.class,test_port_1_uri); - doReturn(Optional.of(test_port_2_plural)).when(aaiResourcesMock).get(LInterface.class,test_port_2_uri); - doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); - doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); - doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); - doReturn(false).when(aaiResourcesMock).exists(vserverURI2); - - boolean exists = auditNova.auditAllVserversDoExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(false, exists); - - boolean doNotExist = auditNova.auditAllVserversDoNotExist(vserversToAudit, tenantId, cloudOwner, cloudRegion); - assertEquals(false, doNotExist); - } + private ObjectMapper objectMapper = new ObjectMapper(); + + @InjectMocks + private AuditVServer auditNova = new AuditVServer(); + + @Mock + private AAIResourcesClient aaiResourcesMock; + + private String cloudOwner = "cloudOwner"; + private String cloudRegion = "cloudRegion"; + private String tenantId = "tenantId"; + + private AAIResourceUri vserverURI = AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegion, + tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db"); + + private AAIResourceUri vserverURI2 = AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegion, + tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz"); + + private AAIResourceUri ssc_1_trusted_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db", "ssc_1_trusted_port_0"); + + private AAIResourceUri ssc_1_service1_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db", "ssc_1_service1_port_0"); + + private AAIResourceUri ssc_1_mgmt_port_1_uri = AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db", "ssc_1_mgmt_port_1"); + + private AAIResourceUri ssc_1_mgmt_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db", "ssc_1_mgmt_port_0"); + + private AAIResourceUri ssc_1_service2_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db", "ssc_1_service2_port_0"); + + private AAIResourceUri ssc_1_int_ha_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db", "ssc_1_int_ha_port_0"); + + private AAIResourceUri test_port_1_uri = AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, cloudOwner, + cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz", "test_port_1"); + + private AAIResourceUri test_port_2_uri = AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, cloudOwner, + cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz", "test_port_2"); + + private AAIResourceUri service2_sub_1_uri = + AAIUriFactory.createResourceUri(AAIObjectType.SUB_L_INTERFACE, cloudOwner, cloudRegion, tenantId, + "3a4c2ca5-27b3-4ecc-98c5-06804867c4db", "ssc_1_service2_port_0", "service2_sub_interface_1"); + + private AAIResourceUri service1_sub_0_uri = + AAIUriFactory.createResourceUri(AAIObjectType.SUB_L_INTERFACE, cloudOwner, cloudRegion, tenantId, + "3a4c2ca5-27b3-4ecc-98c5-06804867c4db", "ssc_1_service1_port_0", "service1_sub_interface_1"); + + private AAIResourceUri service1_sub_1_uri = + AAIUriFactory.createResourceUri(AAIObjectType.SUB_L_INTERFACE, cloudOwner, cloudRegion, tenantId, + "3a4c2ca5-27b3-4ecc-98c5-06804867c4db", "ssc_1_service1_port_0", "service1_sub_interface_2"); + + + + private Set<Vserver> vserversToAudit = new HashSet<>(); + + LInterface test_port_1 = new LInterface(); + LInterface test_port_2 = new LInterface(); + LInterface ssc_1_int_ha_port_0 = new LInterface(); + LInterface service2_sub_interface_1 = new LInterface(); + LInterface ssc_1_service2_port_0 = new LInterface(); + LInterface ssc_1_mgmt_port_0 = new LInterface(); + LInterface ssc_1_mgmt_port_1 = new LInterface(); + LInterface service1_sub_interface_2 = new LInterface(); + LInterface service1_sub_interface_1 = new LInterface(); + LInterface ssc_1_service1_port_0 = new LInterface(); + LInterface ssc_1_trusted_port_0 = new LInterface(); + + + + @Before + public void setup() { + objectMapper.setSerializationInclusion(Include.NON_NULL); + auditNova.setAaiClient(aaiResourcesMock); + + Vserver vServer1 = new Vserver(); + vServer1.setVserverId("3a4c2ca5-27b3-4ecc-98c5-06804867c4db"); + LInterfaces vServer1Linterfaces = new LInterfaces(); + vServer1.setLInterfaces(vServer1Linterfaces); + + ssc_1_trusted_port_0.setInterfaceId("dec8bdc7-5718-41dc-bfbb-561ff6eeb81c"); + ssc_1_trusted_port_0.setInterfaceName("ssc_1_trusted_port_0"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_trusted_port_0); + + + ssc_1_service1_port_0.setInterfaceId("1c56a24b-5f03-435a-850d-31cd4252de56"); + ssc_1_service1_port_0.setInterfaceName("ssc_1_service1_port_0"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_service1_port_0); + ssc_1_service1_port_0.setLInterfaces(new LInterfaces()); + + + service1_sub_interface_1.setInterfaceId("0d9cd813-2ae1-46c0-9ebb-48081f6cffbb"); + service1_sub_interface_1.setInterfaceName("service1_sub_interface_1"); + ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_1); + + + service1_sub_interface_2.setInterfaceId("b7019dd0-2ee9-4447-bdef-ac25676b205a"); + service1_sub_interface_2.setInterfaceName("service1_sub_interface_2"); + ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_2); + + + ssc_1_mgmt_port_1.setInterfaceId("12afcd28-929f-4d80-8a5a-0833bfd5e20b"); + ssc_1_mgmt_port_1.setInterfaceName("ssc_1_mgmt_port_1"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_1); + + ssc_1_mgmt_port_0.setInterfaceId("80baec42-ffae-425f-ad8c-3f7b2c24bfff"); + ssc_1_mgmt_port_0.setInterfaceName("ssc_1_mgmt_port_0"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_0); + + + ssc_1_service2_port_0.setLInterfaces(new LInterfaces()); + ssc_1_service2_port_0.setInterfaceId("13eddf95-4cf3-45f2-823a-2d890a6549b4"); + ssc_1_service2_port_0.setInterfaceName("ssc_1_service2_port_0"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_service2_port_0); + + + service2_sub_interface_1.setInterfaceId("f711be16-2654-4a09-b89d-0511fda20e81"); + service2_sub_interface_1.setInterfaceName("service2_sub_interface_1"); + ssc_1_service2_port_0.getLInterfaces().getLInterface().add(service2_sub_interface_1); + + + ssc_1_int_ha_port_0.setInterfaceId("9cab2903-70f7-44fd-b681-491d6ae2adb8"); + ssc_1_int_ha_port_0.setInterfaceName("ssc_1_int_ha_port_0"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_int_ha_port_0); + + Vserver vServer2 = new Vserver(); + vServer2.setVserverId("3a4c2ca5-27b3-4ecc-98c5-06804867c4dz"); + LInterfaces vServer2Linterfaces = new LInterfaces(); + vServer2.setLInterfaces(vServer2Linterfaces); + + test_port_1.setInterfaceId("9cab2903-70f7-44fd-b681-491d6ae2adz1"); + test_port_1.setInterfaceName("test_port_1"); + + + test_port_2.setInterfaceId("9cab2903-70f7-44fd-b681-491d6ae2adz2"); + test_port_2.setInterfaceName("test_port_2"); + + vServer2.getLInterfaces().getLInterface().add(test_port_1); + vServer2.getLInterfaces().getLInterface().add(test_port_2); + + vserversToAudit.add(vServer1); + vserversToAudit.add(vServer2); + } + + @Test + public void audit_Vserver_Empty_HashSet() throws JsonParseException, JsonMappingException, IOException { + Optional<AAIObjectAuditList> actual = + auditNova.auditVservers(new HashSet<Vserver>(), tenantId, cloudOwner, cloudRegion); + assertEquals(Optional.empty(), actual); + } + + @Test + public void audit_Vserver_Found_Test() throws JsonParseException, JsonMappingException, IOException { + doReturn(true).when(aaiResourcesMock).exists(vserverURI); + doReturn(true).when(aaiResourcesMock).exists(vserverURI2); + doReturn(Optional.of(ssc_1_trusted_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_trusted_port_0_uri); + doReturn(Optional.of(ssc_1_service1_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_service1_port_0_uri); + doReturn(Optional.of(ssc_1_mgmt_port_1)).when(aaiResourcesMock).get(LInterface.class, ssc_1_mgmt_port_1_uri); + doReturn(Optional.of(ssc_1_mgmt_port_0)).when(aaiResourcesMock).get(LInterface.class, ssc_1_mgmt_port_0_uri); + doReturn(Optional.of(ssc_1_service2_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_service2_port_0_uri); + doReturn(Optional.of(service2_sub_interface_1)).when(aaiResourcesMock).get(LInterface.class, + service1_sub_1_uri); + doReturn(Optional.of(ssc_1_int_ha_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_int_ha_port_0_uri); + doReturn(Optional.of(test_port_1)).when(aaiResourcesMock).get(LInterface.class, test_port_1_uri); + doReturn(Optional.of(test_port_2)).when(aaiResourcesMock).get(LInterface.class, test_port_2_uri); + + doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); + + Optional<AAIObjectAuditList> actual = + auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + String actualString = objectMapper.writeValueAsString(actual.get()); + String expected = getJson("ExpectedVServerFound.json"); + JSONAssert.assertEquals(expected, actualString, false); + } + + @Test + public void audit_Vserver_Found_Test_Network_Not_Found() + throws JsonParseException, JsonMappingException, IOException { + doReturn(true).when(aaiResourcesMock).exists(vserverURI); + doReturn(true).when(aaiResourcesMock).exists(vserverURI2); + doReturn(Optional.of(ssc_1_trusted_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_trusted_port_0_uri); + doReturn(Optional.of(ssc_1_service1_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_service1_port_0_uri); + doReturn(Optional.of(ssc_1_mgmt_port_1)).when(aaiResourcesMock).get(LInterface.class, ssc_1_mgmt_port_1_uri); + doReturn(Optional.empty()).when(aaiResourcesMock).get(LInterface.class, ssc_1_mgmt_port_0_uri); + doReturn(Optional.of(ssc_1_service2_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_service2_port_0_uri); + doReturn(Optional.of(ssc_1_int_ha_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_int_ha_port_0_uri); + doReturn(Optional.of(test_port_1)).when(aaiResourcesMock).get(LInterface.class, test_port_1_uri); + doReturn(Optional.of(test_port_2)).when(aaiResourcesMock).get(LInterface.class, test_port_2_uri); + + doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); + + Optional<AAIObjectAuditList> actual = + auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + String actualString = objectMapper.writeValueAsString(actual.get()); + String expected = getJson("VServer_Found_network_Not_Found.json"); + JSONAssert.assertEquals(expected, actualString, false); + } + + @Test + public void audit_Vserver_Found_Test_Network_Not_Found_Second_Server() + throws JsonParseException, JsonMappingException, IOException { + doReturn(true).when(aaiResourcesMock).exists(vserverURI); + doReturn(true).when(aaiResourcesMock).exists(vserverURI2); + doReturn(Optional.of(ssc_1_trusted_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_trusted_port_0_uri); + doReturn(Optional.of(ssc_1_service1_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_service1_port_0_uri); + doReturn(Optional.of(ssc_1_mgmt_port_1)).when(aaiResourcesMock).get(LInterface.class, ssc_1_mgmt_port_1_uri); + doReturn(Optional.of(ssc_1_mgmt_port_0)).when(aaiResourcesMock).get(LInterface.class, ssc_1_mgmt_port_0_uri); + doReturn(Optional.of(ssc_1_service2_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_service2_port_0_uri); + doReturn(Optional.of(ssc_1_int_ha_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_int_ha_port_0_uri); + doReturn(Optional.of(test_port_1)).when(aaiResourcesMock).get(LInterface.class, test_port_1_uri); + doReturn(Optional.empty()).when(aaiResourcesMock).get(LInterface.class, test_port_2_uri); + doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); + Optional<AAIObjectAuditList> actual = + auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + String actualString = objectMapper.writeValueAsString(actual.get()); + String expected = getJson("VServer_Found_Network_Sec_Server_Not_Found.json"); + JSONAssert.assertEquals(expected, actualString, false); + } + + @Test + public void audit_Vserver_Not_Found_Test() throws JsonParseException, JsonMappingException, IOException { + doReturn(false).when(aaiResourcesMock).exists(vserverURI); + doReturn(false).when(aaiResourcesMock).exists(vserverURI2); + Optional<AAIObjectAuditList> actual = + auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + String actualString = objectMapper.writeValueAsString(actual.get()); + String expected = getJson("Vservers_Not_Found.json"); + JSONAssert.assertEquals(expected, actualString, false); + } + + @Test + public void audit_Vserver_first_Not_Found_Test() throws JsonParseException, JsonMappingException, IOException { + doReturn(false).when(aaiResourcesMock).exists(vserverURI); + doReturn(true).when(aaiResourcesMock).exists(vserverURI2); + doReturn(Optional.of(test_port_1)).when(aaiResourcesMock).get(LInterface.class, test_port_1_uri); + doReturn(Optional.of(test_port_2)).when(aaiResourcesMock).get(LInterface.class, test_port_2_uri); + Optional<AAIObjectAuditList> actual = + auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + String actualString = objectMapper.writeValueAsString(actual.get()); + String expected = getJson("Vserver2_Found_VServer1_Not_Found.json"); + JSONAssert.assertEquals(expected, actualString, false); + } + + + @Test + public void doesSubInterfaceExistinAAI_Test() { + AAIResourceUri subInterfaceURI = AAIUriFactory.createResourceUri(AAIObjectType.SUB_L_INTERFACE, cloudOwner, + cloudRegion, tenantId, "vserverId", "l-interface", "sub-interface"); + + assertEquals( + "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/vserverId/l-interfaces/l-interface/l-interface/l-interfaces/l-interface/sub-interface", + subInterfaceURI.build().toString()); + } + + @Test + public void audit_Vserver_Second_Not_Found_Test() throws JsonParseException, JsonMappingException, IOException { + doReturn(true).when(aaiResourcesMock).exists(vserverURI); + doReturn(Optional.of(ssc_1_trusted_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_trusted_port_0_uri); + doReturn(Optional.of(ssc_1_service1_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_service1_port_0_uri); + doReturn(Optional.of(ssc_1_mgmt_port_1)).when(aaiResourcesMock).get(LInterface.class, ssc_1_mgmt_port_1_uri); + doReturn(Optional.of(ssc_1_mgmt_port_0)).when(aaiResourcesMock).get(LInterface.class, ssc_1_mgmt_port_0_uri); + doReturn(Optional.of(ssc_1_service2_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_service2_port_0_uri); + doReturn(Optional.of(ssc_1_int_ha_port_0)).when(aaiResourcesMock).get(LInterface.class, + ssc_1_int_ha_port_0_uri); + doReturn(Optional.empty()).when(aaiResourcesMock).get(LInterface.class, test_port_1_uri); + doReturn(Optional.empty()).when(aaiResourcesMock).get(LInterface.class, test_port_2_uri); + doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); + + doReturn(false).when(aaiResourcesMock).exists(vserverURI2); + Optional<AAIObjectAuditList> actual = + auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + String actualString = objectMapper.writeValueAsString(actual.get()); + String expected = getJson("VServer_Found_Sec_Server_Not_Found2.json"); + + JSONAssert.assertEquals(expected, actualString, false); + } + + private String getJson(String filename) throws IOException { + return new String(Files.readAllBytes(Paths.get("src/test/resources/" + filename))); + } + + } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/HeatStackAuditTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/HeatStackAuditTest.java index 5eea46d09f..bc7ce53b8d 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/HeatStackAuditTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/HeatStackAuditTest.java @@ -24,14 +24,16 @@ import static com.shazam.shazamcrest.MatcherAssert.assertThat; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; - import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -42,212 +44,252 @@ import org.onap.aai.domain.yang.LInterface; import org.onap.aai.domain.yang.LInterfaces; import org.onap.aai.domain.yang.Vserver; import org.onap.so.openstack.utils.MsoHeatUtils; +import org.onap.so.openstack.utils.MsoNeutronUtils; import org.skyscreamer.jsonassert.JSONAssert; - +import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.woorea.openstack.heat.model.Resource; import com.woorea.openstack.heat.model.Resources; import com.woorea.openstack.heat.model.Stack; +import com.woorea.openstack.quantum.model.Port; @RunWith(MockitoJUnitRunner.Silent.class) public class HeatStackAuditTest extends HeatStackAudit { - @InjectMocks - private HeatStackAudit heatStackAudit = new HeatStackAudit(); - - @Mock - private MsoHeatUtils msoHeatUtilsMock; - - @Mock - private AuditVServer auditVserver; - - private static final String cloudRegion = "cloudRegion"; - private static final String tenantId = "tenantId"; - - private Resources resources = new Resources(); - - private ObjectMapper objectMapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - - private ObjectMapper stackObjectMapper = new ObjectMapper().configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - - @Before - public void setup() throws Exception{ - resources= objectMapper.readValue(new File("src/test/resources/GetResources.json"), Resources.class); - - } - - @Test - public void extract_proper_path_Test(){ - Optional<String> actualResult = extractStackPathFromHref("https://orchestration.com:8004/v1/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81"); - assertEquals("/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81", actualResult.get()); - } - - @Test - public void extract_proper_resources_path_Test(){ - Optional<String> actualResult = extractResourcePathFromHref("https://orchestration.com:8004/v1/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81"); - assertEquals("/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81/resources", actualResult.get()); - } - - @Test - public void extract_invalid_uri_Test(){ - Optional<String> actualResult = extractStackPathFromHref("orchestrn.com:8004/v18b44d60a6f94bdcb2738f9e//stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81"); - assertEquals(false, actualResult.isPresent()); - } - - @Test - public void createVserverSet_Test() throws Exception{ - List<Resource> novaResources = resources.getList().stream() - .filter(p -> "OS::Nova::Server".equals(p.getType())).collect(Collectors.toList()); - - List<Resource> resourceGroups = resources.getList().stream() - .filter(p -> "OS::Heat::ResourceGroup".equals(p.getType())).collect(Collectors.toList()); - - Set<Vserver> expectedVservers = new HashSet<>(); - Vserver vServer1= new Vserver(); - vServer1.setVserverId("92272b67-d23f-42ca-87fa-7b06a9ec81f3"); - LInterfaces vServer1Linterfaces = new LInterfaces(); - vServer1.setLInterfaces(vServer1Linterfaces); - - LInterface ssc_1_trusted_port_0 = new LInterface(); - ssc_1_trusted_port_0.setInterfaceId("d2f51f82-0ec2-4581-bd1a-d2a82073e52b"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_trusted_port_0); - - - - LInterface ssc_1_mgmt_port_1 = new LInterface(); - ssc_1_mgmt_port_1.setInterfaceId("07f5b14c-147a-4d14-8c94-a9e94dbc097b"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_1); - - LInterface ssc_1_mgmt_port_0 = new LInterface(); - ssc_1_mgmt_port_0.setInterfaceId("8d93f63e-e972-48c7-ad98-b2122da47315"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_0); - - LInterface ssc_1_service2_port_0 = new LInterface(); - ssc_1_service2_port_0.setLInterfaces(new LInterfaces()); - ssc_1_service2_port_0.setInterfaceId("0594a2f2-7ea4-42eb-abc2-48ea49677fca"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_service2_port_0); - - LInterface service2_sub_interface_1 = new LInterface(); - service2_sub_interface_1.setInterfaceId("2bbfa345-33bb-495a-94b2-fb514ee1cffc"); - ssc_1_service2_port_0.getLInterfaces().getLInterface().add(service2_sub_interface_1); - - LInterface ssc_1_int_ha_port_0 = new LInterface(); - ssc_1_int_ha_port_0.setInterfaceId("00bb8407-650e-48b5-b919-33b88d6f8fe3"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_int_ha_port_0); - - - LInterface ssc_1_service1_port_0 = new LInterface(); - ssc_1_service1_port_0.setInterfaceId("27391d94-33af-474a-927d-d409249e8fd3"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_service1_port_0); - ssc_1_service1_port_0.setLInterfaces(new LInterfaces()); - - LInterface service1_sub_interface_0 = new LInterface(); - service1_sub_interface_0.setInterfaceId("d54dfd09-75c6-4e04-b204-909455b8f933"); - ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_0); - - LInterface service1_sub_interface_1 = new LInterface(); - service1_sub_interface_1.setInterfaceId("f7a998c0-8939-4b07-bf4a-0862e9c325e1"); - ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_1); - - LInterface service1_sub_interface_2 = new LInterface(); - service1_sub_interface_2.setInterfaceId("621c1fea-60b8-44ee-aede-c01b8b1aaa70"); - ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_2); - - - expectedVservers.add(vServer1); - - - Resources service1QueryResponse = objectMapper.readValue(new File("src/test/resources/Service1ResourceGroupResponse.json"), Resources.class); - doReturn(service1QueryResponse).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources", cloudRegion, tenantId, Resources.class); - - Resources service2QueryResponse =objectMapper.readValue(new File("src/test/resources/Service2ResourceGroupResponse.json"), Resources.class); - doReturn(service2QueryResponse).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c/resources", cloudRegion, tenantId, Resources.class); - - - Stack service2StackQuerySubInt = stackObjectMapper.readValue(new File("src/test/resources/Service2SubInterface0.json"), Stack.class); - doReturn(service2StackQuerySubInt).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", cloudRegion,tenantId, Stack.class); - Resources service2ResourceQuerySubInt = objectMapper.readValue(new File("src/test/resources/Service2SubInterface1Resources.json"), Resources.class); - doReturn(service2ResourceQuerySubInt).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources", cloudRegion,tenantId, Resources.class); - - Stack service1StackQuerySubInt1 =stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface0.json"), Stack.class); - doReturn(service1StackQuerySubInt1).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", cloudRegion,tenantId, Stack.class); - Resources service1ResourceQuerySubInt1 = objectMapper.readValue(new File("src/test/resources/Service1SubInterface0Resources.json"), Resources.class); - doReturn(service1ResourceQuerySubInt1).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb/resources", cloudRegion,tenantId, Resources.class); - - - Stack service1StackQuerySubInt2 =stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface1.json"), Stack.class); - doReturn(service1StackQuerySubInt2).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a", cloudRegion,tenantId, Stack.class); - Resources service1ResourceQuerySubInt2 = objectMapper.readValue(new File("src/test/resources/Service1SubInterface1Resources.json"), Resources.class); - doReturn(service1ResourceQuerySubInt2).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a/resources", cloudRegion,tenantId, Resources.class); - - Stack service1StackQuerySubInt3 =stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface2.json"), Stack.class); - doReturn(service1StackQuerySubInt3).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c", cloudRegion,tenantId, Stack.class); - Resources service1ResourceQuerySubInt3 = objectMapper.readValue(new File("src/test/resources/Service1SubInterface2Resources.json"), Resources.class); - doReturn(service1ResourceQuerySubInt3).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c/resources", cloudRegion,tenantId, Resources.class); - - Set<Vserver> vServersToAudit = heatStackAudit.createVserverSet(resources, novaResources); - Set<Vserver> vserversWithSubInterfaces = heatStackAudit.processSubInterfaces(cloudRegion,tenantId,resourceGroups, vServersToAudit); - - String actualValue = objectMapper.writeValueAsString(vserversWithSubInterfaces); - String expectedValue = objectMapper.writeValueAsString(expectedVservers); - - JSONAssert.assertEquals(expectedValue, actualValue, false); - } - - @Test - public void auditHeatStackNoServers_Test() throws Exception{ - - - Resources getResource = objectMapper.readValue(new File("src/test/resources/Service1ResourceGroupResponse.json"), Resources.class); - doReturn(getResource).when(msoHeatUtilsMock).queryStackResources(cloudRegion, tenantId, "heatStackName"); - - boolean actual = heatStackAudit.auditHeatStackCreate(cloudRegion, "cloudOwner", tenantId, "heatStackName"); - assertEquals(true, actual); - } - - - @Test - public void findInterfaceInformation_Test(){ - List<Resource> novaResources = resources.getList().stream() - .filter(p -> "OS::Nova::Server".equals(p.getType())).collect(Collectors.toList()); - Set<Vserver> expectedVservers = new HashSet<>(); - Vserver vServer1= new Vserver(); - vServer1.setVserverId("92272b67-d23f-42ca-87fa-7b06a9ec81f3"); - LInterfaces vServer1Linterfaces = new LInterfaces(); - vServer1.setLInterfaces(vServer1Linterfaces); - - LInterface ssc_1_trusted_port_0 = new LInterface(); - ssc_1_trusted_port_0.setInterfaceId("d2f51f82-0ec2-4581-bd1a-d2a82073e52b"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_trusted_port_0); - - LInterface ssc_1_service1_port_0 = new LInterface(); - ssc_1_service1_port_0.setInterfaceId("27391d94-33af-474a-927d-d409249e8fd3"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_service1_port_0); - - LInterface ssc_1_mgmt_port_1 = new LInterface(); - ssc_1_mgmt_port_1.setInterfaceId("07f5b14c-147a-4d14-8c94-a9e94dbc097b"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_1); - - LInterface ssc_1_mgmt_port_0 = new LInterface(); - ssc_1_mgmt_port_0.setInterfaceId("8d93f63e-e972-48c7-ad98-b2122da47315"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_0); - - LInterface ssc_1_service2_port_0 = new LInterface(); - ssc_1_service2_port_0.setInterfaceId("0594a2f2-7ea4-42eb-abc2-48ea49677fca"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_service2_port_0); - - LInterface ssc_1_int_ha_port_0 = new LInterface(); - ssc_1_int_ha_port_0.setInterfaceId("00bb8407-650e-48b5-b919-33b88d6f8fe3"); - vServer1.getLInterfaces().getLInterface().add(ssc_1_int_ha_port_0); - - expectedVservers.add(vServer1); - - Set<Vserver> actualVservers = heatStackAudit.createVserverSet(resources, novaResources); - - assertThat(actualVservers, sameBeanAs(expectedVservers)); - } + @InjectMocks + private HeatStackAudit heatStackAudit = new HeatStackAudit(); + + @Mock + private MsoHeatUtils msoHeatUtilsMock; + + @Mock + private MsoNeutronUtils neutronUtilsMock; + + @Mock + private AuditVServer auditVserver; + + private static final String cloudRegion = "cloudRegion"; + private static final String tenantId = "tenantId"; + + private Resources resources = new Resources(); + + private ObjectMapper objectMapper = + new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .setSerializationInclusion(Include.NON_NULL); + + private ObjectMapper stackObjectMapper = new ObjectMapper() + .configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true).setSerializationInclusion(Include.NON_NULL); + + private List<Optional<Port>> portList = new ArrayList<>(); + + @Before + public void setup() throws Exception { + resources = objectMapper.readValue(new File("src/test/resources/GetResources.json"), Resources.class); + Port neutronPort1 = stackObjectMapper.readValue(new File("src/test/resources/NeutronPort1.json"), Port.class); + doReturn(Optional.of(neutronPort1)).when(neutronUtilsMock) + .getNeutronPort("7ee06d9d-3d18-411c-9d3e-aec930f70413", cloudRegion, tenantId); + Port neutronPort2 = stackObjectMapper.readValue(new File("src/test/resources/NeutronPort2.json"), Port.class); + doReturn(Optional.of(neutronPort2)).when(neutronUtilsMock) + .getNeutronPort("27391d94-33af-474a-927d-d409249e8fd3", cloudRegion, tenantId); + Port neutronPort3 = stackObjectMapper.readValue(new File("src/test/resources/NeutronPort3.json"), Port.class); + doReturn(Optional.of(neutronPort3)).when(neutronUtilsMock) + .getNeutronPort("fdeedf37-c01e-4ab0-bdd6-8d5fc4913943", cloudRegion, tenantId); + Port neutronPort4 = stackObjectMapper.readValue(new File("src/test/resources/NeutronPort4.json"), Port.class); + doReturn(Optional.of(neutronPort4)).when(neutronUtilsMock) + .getNeutronPort("8d93f63e-e972-48c7-ad98-b2122da47315", cloudRegion, tenantId); + Port neutronPort5 = stackObjectMapper.readValue(new File("src/test/resources/NeutronPort5.json"), Port.class); + doReturn(Optional.of(neutronPort5)).when(neutronUtilsMock) + .getNeutronPort("0594a2f2-7ea4-42eb-abc2-48ea49677fca", cloudRegion, tenantId); + Port neutronPort6 = stackObjectMapper.readValue(new File("src/test/resources/NeutronPort6.json"), Port.class); + doReturn(Optional.of(neutronPort6)).when(neutronUtilsMock) + .getNeutronPort("00bb8407-650e-48b5-b919-33b88d6f8fe3", cloudRegion, tenantId); + + + portList.add(Optional.empty()); + portList.add(Optional.of(neutronPort1)); + portList.add(Optional.of(neutronPort2)); + portList.add(Optional.of(neutronPort3)); + portList.add(Optional.of(neutronPort4)); + portList.add(Optional.of(neutronPort5)); + portList.add(Optional.of(neutronPort6)); + } + + @Test + public void extract_proper_path_Test() { + Optional<String> actualResult = extractStackPathFromHref( + "https://orchestration.com:8004/v1/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81"); + assertEquals("/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81", actualResult.get()); + } + + @Test + public void extract_proper_resources_path_Test() { + Optional<String> actualResult = extractResourcePathFromHref( + "https://orchestration.com:8004/v1/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81"); + assertEquals("/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81/resources", actualResult.get()); + } + + @Test + public void extract_invalid_uri_Test() { + Optional<String> actualResult = extractStackPathFromHref( + "orchestrn.com:8004/v18b44d60a6f94bdcb2738f9e//stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81"); + assertEquals(false, actualResult.isPresent()); + } + + @Test + public void createVserverSet_Test() throws Exception { + List<Resource> novaResources = resources.getList().stream().filter(p -> "OS::Nova::Server".equals(p.getType())) + .collect(Collectors.toList()); + + List<Resource> resourceGroups = resources.getList().stream() + .filter(p -> "OS::Heat::ResourceGroup".equals(p.getType())).collect(Collectors.toList()); + + Resources service1QueryResponse = objectMapper + .readValue(new File("src/test/resources/Service1ResourceGroupResponse.json"), Resources.class); + doReturn(service1QueryResponse).when(msoHeatUtilsMock).executeHeatClientRequest( + "/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources", + cloudRegion, tenantId, Resources.class); + + Resources service2QueryResponse = objectMapper + .readValue(new File("src/test/resources/Service2ResourceGroupResponse.json"), Resources.class); + doReturn(service2QueryResponse).when(msoHeatUtilsMock).executeHeatClientRequest( + "/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c/resources", + cloudRegion, tenantId, Resources.class); + + + Stack service2StackQuerySubInt = + stackObjectMapper.readValue(new File("src/test/resources/Service2SubInterface0.json"), Stack.class); + doReturn(service2StackQuerySubInt).when(msoHeatUtilsMock).executeHeatClientRequest( + "/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + cloudRegion, tenantId, Stack.class); + Resources service2ResourceQuerySubInt = objectMapper + .readValue(new File("src/test/resources/Service2SubInterface1Resources.json"), Resources.class); + doReturn(service2ResourceQuerySubInt).when(msoHeatUtilsMock).executeHeatClientRequest( + "/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources", + cloudRegion, tenantId, Resources.class); + + Stack service1StackQuerySubInt1 = + stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface0.json"), Stack.class); + doReturn(service1StackQuerySubInt1).when(msoHeatUtilsMock).executeHeatClientRequest( + "/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + cloudRegion, tenantId, Stack.class); + Resources service1ResourceQuerySubInt1 = objectMapper + .readValue(new File("src/test/resources/Service1SubInterface0Resources.json"), Resources.class); + doReturn(service1ResourceQuerySubInt1).when(msoHeatUtilsMock).executeHeatClientRequest( + "/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb/resources", + cloudRegion, tenantId, Resources.class); + + + Stack service1StackQuerySubInt2 = + stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface1.json"), Stack.class); + doReturn(service1StackQuerySubInt2).when(msoHeatUtilsMock).executeHeatClientRequest( + "/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a", + cloudRegion, tenantId, Stack.class); + Resources service1ResourceQuerySubInt2 = objectMapper + .readValue(new File("src/test/resources/Service1SubInterface1Resources.json"), Resources.class); + doReturn(service1ResourceQuerySubInt2).when(msoHeatUtilsMock).executeHeatClientRequest( + "/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a/resources", + cloudRegion, tenantId, Resources.class); + + Stack service1StackQuerySubInt3 = + stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface2.json"), Stack.class); + doReturn(service1StackQuerySubInt3).when(msoHeatUtilsMock).executeHeatClientRequest( + "/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c", + cloudRegion, tenantId, Stack.class); + Resources service1ResourceQuerySubInt3 = objectMapper + .readValue(new File("src/test/resources/Service1SubInterface2Resources.json"), Resources.class); + doReturn(service1ResourceQuerySubInt3).when(msoHeatUtilsMock).executeHeatClientRequest( + "/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c/resources", + cloudRegion, tenantId, Resources.class); + + Set<Vserver> vServersToAudit = heatStackAudit.createVserverSet(resources, novaResources, portList); + Set<Vserver> vserversWithSubInterfaces = + heatStackAudit.processSubInterfaces(cloudRegion, tenantId, resourceGroups, vServersToAudit); + + String actualValue = objectMapper.writeValueAsString(vserversWithSubInterfaces); + String expectedValue = getJson("ExpectedVserversToAudit.json"); + JSONAssert.assertEquals(expectedValue, actualValue, false); + } + + @Test + public void auditHeatStackNoServers_Test() throws Exception { + Resources getResource = objectMapper + .readValue(new File("src/test/resources/Service1ResourceGroupResponse.json"), Resources.class); + doReturn(getResource).when(msoHeatUtilsMock).queryStackResources(cloudRegion, tenantId, "heatStackName", 3); + + Optional<AAIObjectAuditList> actual = + heatStackAudit.auditHeatStack(cloudRegion, "cloudOwner", tenantId, "heatStackName"); + assertEquals(true, actual.get().getAuditList().isEmpty()); + } + + @Test + public void auditHeatStackNestedServers_Test() throws Exception { + Resources getResource = + objectMapper.readValue(new File("src/test/resources/GetNestedResources.json"), Resources.class); + List<Resource> novaResources = getResource.getList().stream() + .filter(p -> "OS::Nova::Server".equals(p.getType())).collect(Collectors.toList()); + List<Resource> resourceGroups = getResource.getList().stream() + .filter(p -> "OS::Heat::ResourceGroup".equals(p.getType())).collect(Collectors.toList()); + + doReturn(getResource).when(msoHeatUtilsMock).queryStackResources(cloudRegion, tenantId, "heatStackName", 3); + Set<Vserver> vServersToAudit = heatStackAudit.createVserverSet(resources, novaResources, portList); + Set<Vserver> vserversWithSubInterfaces = + heatStackAudit.processSubInterfaces(cloudRegion, tenantId, resourceGroups, vServersToAudit); + String actualValue = objectMapper.writeValueAsString(vserversWithSubInterfaces); + String expectedValue = getJson("NestedExpectedValue.json"); + JSONAssert.assertEquals(expectedValue, actualValue, false); + } + + + @Test + public void findInterfaceInformation_Test() { + List<Resource> novaResources = resources.getList().stream().filter(p -> "OS::Nova::Server".equals(p.getType())) + .collect(Collectors.toList()); + Set<Vserver> expectedVservers = new HashSet<>(); + Vserver vServer1 = new Vserver(); + vServer1.setVserverId("92272b67-d23f-42ca-87fa-7b06a9ec81f3"); + LInterfaces vServer1Linterfaces = new LInterfaces(); + vServer1.setLInterfaces(vServer1Linterfaces); + + LInterface ssc_1_trusted_port_0 = new LInterface(); + ssc_1_trusted_port_0.setInterfaceId("7ee06d9d-3d18-411c-9d3e-aec930f70413"); + ssc_1_trusted_port_0.setInterfaceName("ibcx0026v_ibcx0026vm003_untrusted_port"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_trusted_port_0); + + LInterface ssc_1_svc2_port_0 = new LInterface(); + ssc_1_svc2_port_0.setInterfaceId("27391d94-33af-474a-927d-d409249e8fd3"); + ssc_1_svc2_port_0.setInterfaceName("ibcx0026v_ibcx0026vm003_untrusted_port"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_svc2_port_0); + + LInterface ssc_1_mgmt_port_1 = new LInterface(); + ssc_1_mgmt_port_1.setInterfaceId("fdeedf37-c01e-4ab0-bdd6-8d5fc4913943"); + ssc_1_mgmt_port_1.setInterfaceName("ibcx0026v_ibcx0026vm003_untrusted_port"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_1); + + LInterface ssc_1_mgmt_port_0 = new LInterface(); + ssc_1_mgmt_port_0.setInterfaceId("8d93f63e-e972-48c7-ad98-b2122da47315"); + ssc_1_mgmt_port_0.setInterfaceName("ibcx0026v_ibcx0026vm003_untrusted_port"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_0); + + LInterface ssc_1_svc1_port_0 = new LInterface(); + ssc_1_svc1_port_0.setInterfaceId("0594a2f2-7ea4-42eb-abc2-48ea49677fca"); + ssc_1_svc1_port_0.setInterfaceName("ibcx0026v_ibcx0026vm003_untrusted_port"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_svc1_port_0); + + LInterface ssc_1_int_ha_port_0 = new LInterface(); + ssc_1_int_ha_port_0.setInterfaceId("00bb8407-650e-48b5-b919-33b88d6f8fe3"); + ssc_1_int_ha_port_0.setInterfaceName("ibcx0026v_ibcx0026vm003_untrusted_port"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_int_ha_port_0); + + expectedVservers.add(vServer1); + + Set<Vserver> actualVservers = heatStackAudit.createVserverSet(resources, novaResources, portList); + assertThat(actualVservers, sameBeanAs(expectedVservers)); + } + private String getJson(String filename) throws IOException { + return new String(Files.readAllBytes(Paths.get("src/test/resources/" + filename))); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/inventory/create/CreateAAIInventoryTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/inventory/create/CreateAAIInventoryTest.java new file mode 100644 index 0000000000..0fd2bd4b7f --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/inventory/create/CreateAAIInventoryTest.java @@ -0,0 +1,122 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.inventory.create; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.camunda.bpm.client.task.ExternalTask; +import org.hamcrest.Matchers; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.onap.so.adapters.audit.AAIObjectAuditList; +import org.onap.so.audit.beans.AuditInventory; +import org.onap.so.client.aai.AAIObjectType; +import org.onap.so.client.aai.AAIResourcesClient; +import org.onap.so.client.aai.entities.uri.AAIResourceUri; +import org.onap.so.client.aai.entities.uri.AAIUriFactory; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class CreateAAIInventoryTest extends CreateAAIInventory { + + @InjectMocks + private CreateAAIInventory createAAIInventory = new CreateAAIInventory(); + + @Mock + private ExternalTask mockExternalTask; + + @Mock + private AAIResourcesClient mockClient; + + private ObjectMapper objectMapper = new ObjectMapper(); + + private AuditInventory auditInventory = new AuditInventory(); + + AAIObjectAuditList auditListSuccess; + + AAIObjectAuditList auditListFailure; + + AAIObjectAuditList missingSubInterfaces; + + @Before + public void setup() throws JsonParseException, JsonMappingException, IOException { + auditInventory.setCloudOwner("cloudOwner"); + auditInventory.setCloudRegion("cloudRegion"); + auditInventory.setTenantId("tenantId"); + auditInventory.setHeatStackName("stackName"); + MockitoAnnotations.initMocks(this); + auditListSuccess = objectMapper.readValue(new File("src/test/resources/ExpectedVServerFound.json"), + AAIObjectAuditList.class); + auditListFailure = objectMapper.readValue(new File("src/test/resources/Vserver2_Found_VServer1_Not_Found.json"), + AAIObjectAuditList.class); + missingSubInterfaces = objectMapper.readValue(new File("src/test/resources/AuditResultsMissSub.json"), + AAIObjectAuditList.class); + doReturn(auditInventory).when(mockExternalTask).getVariable("auditInventory"); + } + + @Test + public void determineAuditResult_Test() throws Exception { + boolean actual = createAAIInventory.didAuditFailVserverLInterfaces(auditListSuccess); + assertEquals(false, actual); + } + + @Test + public void determineAuditResult_Failure_Test() throws Exception { + boolean actual = createAAIInventory.didAuditFailVserverLInterfaces(auditListFailure); + assertEquals(true, actual); + } + + @Test + public void missing_Sub_Interfaces_Test() throws Exception { + AAIResourceUri aaiURI2 = AAIUriFactory.createResourceUri(AAIObjectType.SUB_L_INTERFACE, "cloudOwner", + "regionOne", "0422ffb57ba042c0800a29dc85ca70f8", "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "tsbc0005v_tsbc0005vm002_svc1_port_0", "tsbc0005v_tsbc0005vm002_subint_untrusted_svc1_81"); + AAIResourceUri aaiURI1 = AAIUriFactory.createResourceUri(AAIObjectType.SUB_L_INTERFACE, "cloudOwner", + "regionOne", "0422ffb57ba042c0800a29dc85ca70f8", "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "tsbc0005v_tsbc0005vm002_svc2_port_0", "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_103"); + ArgumentCaptor<Optional> captor = ArgumentCaptor.forClass(Optional.class); + ArgumentCaptor<AAIResourceUri> uriCaptor = ArgumentCaptor.forClass(AAIResourceUri.class); + + createAAIInventory.setAaiClient(mockClient); + createAAIInventory.createInventory(missingSubInterfaces); + Mockito.verify(mockClient, times(2)).createIfNotExists(uriCaptor.capture(), captor.capture()); + + List<AAIResourceUri> capturedURI = uriCaptor.getAllValues(); + assertTrue(capturedURI.stream().anyMatch(item -> aaiURI1.build().toString().equals(item.build().toString()))); + assertTrue(capturedURI.stream().anyMatch(item -> aaiURI2.build().toString().equals(item.build().toString()))); + + + + } +} diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/EmbeddedMariaDbConfig.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/EmbeddedMariaDbConfig.java index d552f8d893..66cee2d804 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/EmbeddedMariaDbConfig.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/EmbeddedMariaDbConfig.java @@ -19,6 +19,7 @@ */ package org.onap.so.adapters.msoopenstackadapters; + import ch.vorburger.exec.ManagedProcessException; import ch.vorburger.mariadb4j.DBConfigurationBuilder; import ch.vorburger.mariadb4j.springframework.MariaDB4jSpringService; @@ -40,21 +41,16 @@ public class EmbeddedMariaDbConfig { @Bean DataSource dataSource(MariaDB4jSpringService mariaDB4jSpringService, - @Value("${mariaDB4j.databaseName}") String databaseName, - @Value("${spring.datasource.username}") String datasourceUsername, - @Value("${spring.datasource.password}") String datasourcePassword, - @Value("${spring.datasource.driver-class-name}") String datasourceDriver) throws ManagedProcessException { - //Create our database with default root user and no password + @Value("${mariaDB4j.databaseName}") String databaseName, + @Value("${spring.datasource.username}") String datasourceUsername, + @Value("${spring.datasource.password}") String datasourcePassword, + @Value("${spring.datasource.driver-class-name}") String datasourceDriver) throws ManagedProcessException { + // Create our database with default root user and no password mariaDB4jSpringService.getDB().createDB(databaseName); DBConfigurationBuilder config = mariaDB4jSpringService.getConfiguration(); - return DataSourceBuilder - .create() - .username(datasourceUsername) - .password(datasourcePassword) - .url(config.getURL(databaseName)) - .driverClassName(datasourceDriver) - .build(); + return DataSourceBuilder.create().username(datasourceUsername).password(datasourcePassword) + .url(config.getURL(databaseName)).driverClassName(datasourceDriver).build(); } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/HealthCheckHandlerTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/HealthCheckHandlerTest.java index 4df9a7af6d..61a8f627a6 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/HealthCheckHandlerTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/HealthCheckHandlerTest.java @@ -21,9 +21,7 @@ package org.onap.so.adapters.msoopenstackadapters; import static org.junit.Assert.assertEquals; - import javax.ws.rs.core.Response; - import org.json.JSONException; import org.junit.Test; import org.onap.so.adapters.vnf.BaseRestTestUtils; @@ -33,15 +31,15 @@ import org.springframework.http.ResponseEntity; public class HealthCheckHandlerTest extends BaseRestTestUtils { - @Test - public void testHealthcheckVnf() throws JSONException { + @Test + public void testHealthcheckVnf() throws JSONException { + + HttpEntity<String> entity = new HttpEntity<String>(null, headers); - HttpEntity<String> entity = new HttpEntity<String>(null, headers); + ResponseEntity<String> response = + restTemplate.exchange(createURLWithPort("/manage/health"), HttpMethod.GET, entity, String.class); - ResponseEntity<String> response = restTemplate.exchange(createURLWithPort("/manage/health"), - HttpMethod.GET, entity, String.class); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } - } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/TestRestTemplateFactory.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/TestRestTemplateFactory.java index be76a9e365..8d1dd8b69a 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/TestRestTemplateFactory.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/msoopenstackadapters/TestRestTemplateFactory.java @@ -22,7 +22,6 @@ package org.onap.so.adapters.msoopenstackadapters; import java.util.ArrayList; import java.util.List; - import org.onap.so.client.policy.JettisonStyleMapperProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.web.client.TestRestTemplate; @@ -34,17 +33,18 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert @Configuration public class TestRestTemplateFactory { - @Autowired - private JettisonStyleMapperProvider objectMapper; + @Autowired + private JettisonStyleMapperProvider objectMapper; - @Bean("JettisonStyle") - public TestRestTemplate createRestTemplate() { - TestRestTemplate restTemplate = new TestRestTemplate("test", "test"); - List<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); - MappingJackson2HttpMessageConverter jsonMessageConverter = new MappingJackson2HttpMessageConverter(); - jsonMessageConverter.setObjectMapper(objectMapper.getMapper()); - restTemplate.getRestTemplate().getMessageConverters().removeIf(m -> m.getClass().getName().equals(MappingJackson2HttpMessageConverter.class.getName())); - restTemplate.getRestTemplate().getMessageConverters().add(jsonMessageConverter); - return restTemplate; - } + @Bean("JettisonStyle") + public TestRestTemplate createRestTemplate() { + TestRestTemplate restTemplate = new TestRestTemplate("test", "test"); + List<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); + MappingJackson2HttpMessageConverter jsonMessageConverter = new MappingJackson2HttpMessageConverter(); + jsonMessageConverter.setObjectMapper(objectMapper.getMapper()); + restTemplate.getRestTemplate().getMessageConverters() + .removeIf(m -> m.getClass().getName().equals(MappingJackson2HttpMessageConverter.class.getName())); + restTemplate.getRestTemplate().getMessageConverters().add(jsonMessageConverter); + return restTemplate; + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailPolicyRefSeqTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailPolicyRefSeqTest.java index 46bf21722c..dd59121a39 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailPolicyRefSeqTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailPolicyRefSeqTest.java @@ -21,16 +21,14 @@ package org.onap.so.adapters.network; import static org.junit.Assert.assertTrue; - import org.junit.Test; public class ContrailPolicyRefSeqTest { - @Test - public void ContrailPolicyRefSeqJson_Test() - { - ContrailPolicyRefSeq cprs = new ContrailPolicyRefSeq("majorVersion 1","minorVersion 0.02"); - assertTrue(cprs.toString().contains("majorVersion 1")); - assertTrue(cprs.toString().contains("minorVersion 0.02")); - } - + @Test + public void ContrailPolicyRefSeqJson_Test() { + ContrailPolicyRefSeq cprs = new ContrailPolicyRefSeq("majorVersion 1", "minorVersion 0.02"); + assertTrue(cprs.toString().contains("majorVersion 1")); + assertTrue(cprs.toString().contains("minorVersion 0.02")); + } + } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailPolicyRefTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailPolicyRefTest.java index 7a0f3d0551..e8e14417c0 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailPolicyRefTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailPolicyRefTest.java @@ -21,19 +21,17 @@ package org.onap.so.adapters.network; import static org.junit.Assert.assertTrue; - import org.junit.Test; public class ContrailPolicyRefTest { - @Test - public void ContrailPolicyRef_Test() - { - ContrailPolicyRef ref = new ContrailPolicyRef(); - ref.populate("majorVersion 1", "minorVersion 0.02"); - String strJson = ref.toJsonString(); - assertTrue(strJson.contains("majorVersion 1")); - assertTrue(strJson.contains("minorVersion 0.02")); - } - -}
\ No newline at end of file + @Test + public void ContrailPolicyRef_Test() { + ContrailPolicyRef ref = new ContrailPolicyRef(); + ref.populate("majorVersion 1", "minorVersion 0.02"); + String strJson = ref.toJsonString(); + assertTrue(strJson.contains("majorVersion 1")); + assertTrue(strJson.contains("minorVersion 0.02")); + } + +} diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailSubnetHostRouteTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailSubnetHostRouteTest.java index ca8a45e8dc..eb8395cd9b 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailSubnetHostRouteTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailSubnetHostRouteTest.java @@ -1,26 +1,20 @@ /* -* ============LICENSE_START======================================================= - * ONAP : SO - * ================================================================================ - * Copyright (C) 2018 TechMahindra - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * ============LICENSE_START======================================================= ONAP : SO + * ================================================================================ Copyright (C) 2018 TechMahindra + * ================================================================================ Licensed under the Apache License, + * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy + * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. * ============LICENSE_END========================================================= -*/ + */ package org.onap.so.adapters.network; import static org.junit.Assert.assertEquals; - import org.junit.Test; import org.onap.so.openstack.beans.HostRoute; @@ -28,6 +22,7 @@ public class ContrailSubnetHostRouteTest { private ContrailSubnetHostRoute cshr = new ContrailSubnetHostRoute(); HostRoute hr = new HostRoute(); + @Test public void testContrailSubnetHostRoute() { diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailSubnetHostRoutesTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailSubnetHostRoutesTest.java index fd17c37e6d..eb8912f56d 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailSubnetHostRoutesTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/ContrailSubnetHostRoutesTest.java @@ -1,29 +1,22 @@ /* -* ============LICENSE_START======================================================= - * ONAP : SO - * ================================================================================ - * Copyright (C) 2018 TechMahindra - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * ============LICENSE_START======================================================= ONAP : SO + * ================================================================================ Copyright (C) 2018 TechMahindra + * ================================================================================ Licensed under the Apache License, + * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy + * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. * ============LICENSE_END========================================================= -*/ + */ package org.onap.so.adapters.network; import static org.junit.Assert.*; - import java.util.List; - import org.junit.Test; public class ContrailSubnetHostRoutesTest { @@ -31,6 +24,7 @@ public class ContrailSubnetHostRoutesTest { ContrailSubnetHostRoutes cshr = new ContrailSubnetHostRoutes(); List<ContrailSubnetHostRoute> host_routes; StringBuilder buf = new StringBuilder(); + @Test public void testContrailSubnetHostRoutes() { cshr.setHost_routes(host_routes); diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MSONetworkAdapterImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MSONetworkAdapterImplTest.java index 707af7b6be..4dcb7c8710 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MSONetworkAdapterImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MSONetworkAdapterImplTest.java @@ -27,13 +27,11 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.util.UriComponentsBuilder; - import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; - import static org.junit.Assert.assertEquals; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackDeleteNeutronNetwork; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackDeleteStack_200; @@ -57,419 +55,455 @@ import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenstackPost; public class MSONetworkAdapterImplTest extends BaseRestTestUtils { - public static final String NETWORK_ID = "43173f6a-d699-414b-888f-ab243dda6dfe"; - public static final String NETWORK_NAME = "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0"; + public static final String NETWORK_ID = "43173f6a-d699-414b-888f-ab243dda6dfe"; + public static final String NETWORK_NAME = "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0"; + + @Test + public void createNetworkByModelNameNeutronModeGetNetworkException() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - @Test - public void createNetworkByModelNameNeutronModeGetNetworkException() throws IOException{ - mockOpenStackResponseAccess(wireMockPort); + mockOpenstackGet(wireMockServer, "/mockPublicUrl/v2.0/networks", HttpStatus.SC_INTERNAL_SERVER_ERROR); - mockOpenstackGet("/mockPublicUrl/v2.0/networks",HttpStatus.SC_INTERNAL_SERVER_ERROR); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/CreateNetwork_NEUTRON_Mode.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork_NEUTRON_Mode.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void createNetworkByModelNameNeutronModeCreateNetworkException() throws IOException { - @Test - public void createNetworkByModelNameNeutronModeCreateNetworkException() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetNeutronNetwork_404(wireMockServer, "dvspg-VCE_VPE-mtjnj40avbc"); - mockOpenStackGetNeutronNetwork_404("dvspg-VCE_VPE-mtjnj40avbc"); + mockOpenStackGetAllNeutronNetworks_404(wireMockServer); - mockOpenStackGetAllNeutronNetworks_404(); + mockOpenstackPost(wireMockServer, "/mockPublicUrl/v2.0/networks", HttpStatus.SC_INTERNAL_SERVER_ERROR); - mockOpenstackPost("/mockPublicUrl/v2.0/networks", HttpStatus.SC_INTERNAL_SERVER_ERROR); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/CreateNetwork_NEUTRON_Mode.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork_NEUTRON_Mode.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void createNetworkByModelNameNeutronMode() throws IOException { - @Test - public void createNetworkByModelNameNeutronMode() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetNeutronNetwork_404(wireMockServer, "dvspg-VCE_VPE-mtjnj40avbc"); - mockOpenStackGetNeutronNetwork_404("dvspg-VCE_VPE-mtjnj40avbc"); + mockOpenStackGetAllNeutronNetworks_404(wireMockServer); - mockOpenStackGetAllNeutronNetworks_404(); + mockOpenStackPostNeutronNetwork_200(wireMockServer, "OpenstackCreateNeutronNetworkResponse.json"); - mockOpenStackPostNeutronNetwork_200("OpenstackCreateNeutronNetworkResponse.json"); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/CreateNetwork_NEUTRON_Mode.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork_NEUTRON_Mode.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void createNetworkByModelNameAlreadyExistNeutronMode() throws IOException { - @Test - public void createNetworkByModelNameAlreadyExistNeutronMode() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetAllNeutronNetworks_200(wireMockServer, "OpenstackGetNeutronNetworks.json"); - mockOpenStackGetAllNeutronNetworks_200("OpenstackGetNeutronNetworks.json"); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/CreateNetwork_NEUTRON_Mode.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork_NEUTRON_Mode.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void createNetworkByModelNameAlreadyExistNeutronModeFailIfExistTrue() throws IOException { - @Test - public void createNetworkByModelNameAlreadyExistNeutronModeFailIfExistTrue() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetAllNeutronNetworks_200(wireMockServer, "OpenstackGetNeutronNetworks.json"); - mockOpenStackGetAllNeutronNetworks_200("OpenstackGetNeutronNetworks.json"); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/CreateNetwork_NEUTRON_Mode_Fail_If_Exist_True.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork_NEUTRON_Mode_Fail_If_Exist_True.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void createNetworkByModelNameHeatMode() throws IOException { - @Test - public void createNetworkByModelNameHeatMode() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetStack_404(wireMockServer, "dvspg-VCE_VPE-mtjnj40avbc"); - mockOpenStackGetStack_404("dvspg-VCE_VPE-mtjnj40avbc"); + mockOpenStackPostStack_200(wireMockServer, "OpenstackResponse_Stack.json"); - mockOpenStackPostStack_200("OpenstackResponse_Stack.json"); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", + "dvspg-VCE_VPE-mtjnj40avbc/stackId"); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "dvspg-VCE_VPE-mtjnj40avbc/stackId"); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void createNetworkByModelNameAlreadyExistHeatMode() throws IOException { - @Test - public void createNetworkByModelNameAlreadyExistHeatMode() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackPostStack_200(wireMockServer, "OpenstackResponse_Stack.json"); - mockOpenStackPostStack_200("OpenstackResponse_Stack.json"); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", + "dvspg-VCE_VPE-mtjnj40avbc"); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "dvspg-VCE_VPE-mtjnj40avbc"); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void createNetworkByModelNameAlreadyExistHeatModeFailIfExistTrue() throws IOException { - @Test - public void createNetworkByModelNameAlreadyExistHeatModeFailIfExistTrue() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", + "dvspg-VCE_VPE-mtjnj40avbc"); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "dvspg-VCE_VPE-mtjnj40avbc"); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/CreateNetwork_Fail_If_Exist_True.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork_Fail_If_Exist_True.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void createNetworkByModelNameHeatModeQueryNetworkException() throws IOException { - @Test - public void createNetworkByModelNameHeatModeQueryNetworkException() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenstackGet(wireMockServer, "/mockPublicUrl/stacks/dvspg-VCE_VPE-mtjnj40avbc", + HttpStatus.SC_INTERNAL_SERVER_ERROR); - mockOpenstackGet("/mockPublicUrl/stacks/dvspg-VCE_VPE-mtjnj40avbc",HttpStatus.SC_INTERNAL_SERVER_ERROR); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void createNetworkByModelNameHeatModeCreateNetworkException() throws IOException { - @Test - public void createNetworkByModelNameHeatModeCreateNetworkException() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetStack_404(wireMockServer, "dvspg-VCE_VPE-mtjnj40avbc"); - mockOpenStackGetStack_404("dvspg-VCE_VPE-mtjnj40avbc"); + mockOpenstackPost(wireMockServer, "/mockPublicUrl/stacks", HttpStatus.SC_INTERNAL_SERVER_ERROR); - mockOpenstackPost("/mockPublicUrl/stacks",HttpStatus.SC_INTERNAL_SERVER_ERROR); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void createNetworkByModelNameCloudSiteNotPresentError() throws IOException { - @Test - public void createNetworkByModelNameCloudSiteNotPresentError() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackPostStack_200(wireMockServer, "OpenstackResponse_Stack.json"); - mockOpenStackPostStack_200("OpenstackResponse_Stack.json"); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", + "dvspg-VCE_VPE-mtjnj40avbc"); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "dvspg-VCE_VPE-mtjnj40avbc"); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/CreateNetwork_InvalidCloudSiteId.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/CreateNetwork_InvalidCloudSiteId.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void deleteNetworkHeatModeSuccess() throws IOException { - @Test - public void deleteNetworkHeatModeSuccess() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetStackDeleteOrUpdateComplete_200(wireMockServer, "OpenstackResponse_Stack_DeleteComplete.json"); - mockOpenStackGetStackDeleteOrUpdateComplete_200("OpenstackResponse_Stack_DeleteComplete.json"); + mockOpenStackDeleteStack_200(wireMockServer); - mockOpenStackDeleteStack_200(); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", + "43173f6a-d699-414b-888f-ab243dda6dfe"); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "43173f6a-d699-414b-888f-ab243dda6dfe"); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = sendXMLRequest(inputStream("/DeleteNetwork.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/DeleteNetwork.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void deleteNetworkDeleteStackException() throws IOException { - @Test - public void deleteNetworkDeleteStackException() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetStackDeleteOrUpdateComplete_200(wireMockServer, "OpenstackResponse_Stack_DeleteComplete.json"); - mockOpenStackGetStackDeleteOrUpdateComplete_200("OpenstackResponse_Stack_DeleteComplete.json"); + mockOpenStackDeleteStack_500(wireMockServer); - mockOpenStackDeleteStack_500(); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", + "43173f6a-d699-414b-888f-ab243dda6dfe"); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "43173f6a-d699-414b-888f-ab243dda6dfe"); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = sendXMLRequest(inputStream("/DeleteNetwork.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/DeleteNetwork.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void deleteNetworkError() throws IOException { - @Test - public void deleteNetworkError() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetStackDeleteOrUpdateComplete_200(wireMockServer, "OpenstackResponse_Stack_DeleteComplete.json"); - mockOpenStackGetStackDeleteOrUpdateComplete_200("OpenstackResponse_Stack_DeleteComplete.json"); + mockOpenStackDeleteStack_200(wireMockServer); - mockOpenStackDeleteStack_200(); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", + "43173f6a-d699-414b-888f-ab243dda6dfe"); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "43173f6a-d699-414b-888f-ab243dda6dfe"); + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/DeleteNetwork.xml").replace("mtn13", ""), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/DeleteNetwork.xml").replace("mtn13",""), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + @Test + public void deleteNetworkNeureonMode() throws IOException { - @Test - public void deleteNetworkNeureonMode() throws IOException{ + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackGetNeutronNetwork(wireMockServer, "GetNeutronNetwork.json", NETWORK_ID, HttpStatus.SC_OK); - mockOpenStackGetNeutronNetwork("GetNeutronNetwork.json",NETWORK_ID,HttpStatus.SC_OK); + mockOpenStackDeleteNeutronNetwork(wireMockServer, NETWORK_ID, HttpStatus.SC_OK); - mockOpenStackDeleteNeutronNetwork(NETWORK_ID,HttpStatus.SC_OK); - - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/DeleteNetwork.xml").replace("CONTRAIL30_BASIC","CONTRAIL31_GNDIRECT"), uri, HttpMethod.POST); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/DeleteNetwork.xml").replace("CONTRAIL30_BASIC", "CONTRAIL31_GNDIRECT"), + uri, HttpMethod.POST); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void deleteNetworkNeutronModeDeleteStackException() throws IOException{ + @Test + public void deleteNetworkNeutronModeDeleteStackException() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetNeutronNetwork("GetNeutronNetwork.json",NETWORK_ID,HttpStatus.SC_OK); + mockOpenStackGetNeutronNetwork(wireMockServer, "GetNeutronNetwork.json", NETWORK_ID, HttpStatus.SC_OK); - mockOpenStackDeleteNeutronNetwork(NETWORK_ID,HttpStatus.SC_INTERNAL_SERVER_ERROR); + mockOpenStackDeleteNeutronNetwork(wireMockServer, NETWORK_ID, HttpStatus.SC_INTERNAL_SERVER_ERROR); - //mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", NETWORK_ID); + // mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", NETWORK_ID); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/DeleteNetwork.xml").replace("CONTRAIL30_BASIC","CONTRAIL31_GNDIRECT"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/DeleteNetwork.xml").replace("CONTRAIL30_BASIC", "CONTRAIL31_GNDIRECT"), + uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void updateNetworkNeutronModeSuccess() throws IOException{ + @Test + public void updateNetworkNeutronModeSuccess() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetNeutronNetwork("GetNeutronNetwork.json",NETWORK_ID,HttpStatus.SC_OK); - mockOpenStackPutNeutronNetwork_200("OpenstackCreateNeutronNetworkResponse.json",NETWORK_ID); + mockOpenStackGetNeutronNetwork(wireMockServer, "GetNeutronNetwork.json", NETWORK_ID, HttpStatus.SC_OK); + mockOpenStackPutNeutronNetwork_200(wireMockServer, "OpenstackCreateNeutronNetworkResponse.json", NETWORK_ID); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/UpdateNetwork.xml").replace("CONTRAIL30_BASIC","CONTRAIL31_GNDIRECT"), uri, HttpMethod.POST); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/UpdateNetwork.xml").replace("CONTRAIL30_BASIC", "CONTRAIL31_GNDIRECT"), + uri, HttpMethod.POST); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void updateNetworkNeutronUpdateException() throws IOException{ + @Test + public void updateNetworkNeutronUpdateException() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetNeutronNetwork("GetNeutronNetwork.json",NETWORK_ID,HttpStatus.SC_OK); - mockOpenStackPutNeutronNetwork(NETWORK_ID,HttpStatus.SC_INTERNAL_SERVER_ERROR); + mockOpenStackGetNeutronNetwork(wireMockServer, "GetNeutronNetwork.json", NETWORK_ID, HttpStatus.SC_OK); + mockOpenStackPutNeutronNetwork(wireMockServer, NETWORK_ID, HttpStatus.SC_INTERNAL_SERVER_ERROR); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/UpdateNetwork.xml").replace("CONTRAIL30_BASIC","CONTRAIL31_GNDIRECT"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/UpdateNetwork.xml").replace("CONTRAIL30_BASIC", "CONTRAIL31_GNDIRECT"), + uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void updateNetworkHeatUpdateException() throws IOException{ + @Test + public void updateNetworkHeatUpdateException() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", NETWORK_NAME); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", NETWORK_NAME); - mockOpenStackPutStack(NETWORK_ID,HttpStatus.SC_INTERNAL_SERVER_ERROR); + mockOpenStackPutStack(wireMockServer, NETWORK_ID, HttpStatus.SC_INTERNAL_SERVER_ERROR); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/UpdateNetwork.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = sendXMLRequest(inputStream("/UpdateNetwork.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void updateNetworkHeatQueryException() throws IOException{ + @Test + public void updateNetworkHeatQueryException() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetStack_500(NETWORK_NAME); + mockOpenStackGetStack_500(wireMockServer, NETWORK_NAME); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/UpdateNetwork.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = sendXMLRequest(inputStream("/UpdateNetwork.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void updateNetworkHeatStackNotFound() throws IOException{ + @Test + public void updateNetworkHeatStackNotFound() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetStack_404(NETWORK_NAME); + mockOpenStackGetStack_404(wireMockServer, NETWORK_NAME); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/UpdateNetwork.xml"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = sendXMLRequest(inputStream("/UpdateNetwork.xml"), uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void updateNetworkNeutronQueryException() throws IOException{ + @Test + public void updateNetworkNeutronQueryException() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetNeutronNetwork(NETWORK_ID,HttpStatus.SC_INTERNAL_SERVER_ERROR); + mockOpenStackGetNeutronNetwork(wireMockServer, NETWORK_ID, HttpStatus.SC_INTERNAL_SERVER_ERROR); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/UpdateNetwork.xml").replace("CONTRAIL30_BASIC","CONTRAIL31_GNDIRECT"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/UpdateNetwork.xml").replace("CONTRAIL30_BASIC", "CONTRAIL31_GNDIRECT"), + uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void updateNetworkNeutronStackNotFound() throws IOException{ + @Test + public void updateNetworkNeutronStackNotFound() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetNeutronNetwork(NETWORK_ID,HttpStatus.SC_NOT_FOUND); + mockOpenStackGetNeutronNetwork(wireMockServer, NETWORK_ID, HttpStatus.SC_NOT_FOUND); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/UpdateNetwork.xml").replace("CONTRAIL30_BASIC","CONTRAIL31_GNDIRECT"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/UpdateNetwork.xml").replace("CONTRAIL30_BASIC", "CONTRAIL31_GNDIRECT"), + uri, HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void queryNetworkHeatModesuccess() throws IOException{ + @Test + public void queryNetworkHeatModesuccess() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", NETWORK_ID); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", NETWORK_ID); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/QueryNetwork.xml").replace("CONTRAIL30_BASIC","CONTRAIL31_GNDIRECT"), uri, HttpMethod.POST); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/QueryNetwork.xml").replace("CONTRAIL30_BASIC", "CONTRAIL31_GNDIRECT"), uri, + HttpMethod.POST); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void queryNetworkHeatModeQueryException() throws IOException{ + @Test + public void queryNetworkHeatModeQueryException() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetStack_500(NETWORK_ID); + mockOpenStackGetStack_500(wireMockServer, NETWORK_ID); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/QueryNetwork.xml").replace("CONTRAIL30_BASIC","CONTRAIL31_GNDIRECT"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/QueryNetwork.xml").replace("CONTRAIL30_BASIC", "CONTRAIL31_GNDIRECT"), uri, + HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void queryNetworkNeutronModeSuccess() throws IOException{ + @Test + public void queryNetworkNeutronModeSuccess() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetNeutronNetwork("GetNeutronNetwork.json",NETWORK_ID,HttpStatus.SC_OK); + mockOpenStackGetNeutronNetwork(wireMockServer, "GetNeutronNetwork.json", NETWORK_ID, HttpStatus.SC_OK); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/QueryNetwork.xml").replace("CONTRAIL30_BASIC","CONTRAIL31_GNDIRECT"), uri, HttpMethod.POST); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/QueryNetwork.xml").replace("CONTRAIL30_BASIC", "CONTRAIL31_GNDIRECT"), uri, + HttpMethod.POST); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } - @Test - public void queryNetworkNeutronModeException() throws IOException{ + @Test + public void queryNetworkNeutronModeException() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); - mockOpenStackGetNeutronNetwork(NETWORK_ID,HttpStatus.SC_INTERNAL_SERVER_ERROR); + mockOpenStackGetNeutronNetwork(wireMockServer, NETWORK_ID, HttpStatus.SC_INTERNAL_SERVER_ERROR); - String uri = "/services/NetworkAdapter"; - headers.set("X-ECOMP-RequestID", "123456789456127"); - ResponseEntity<String> response = sendXMLRequest(inputStream("/QueryNetwork.xml").replace("CONTRAIL30_BASIC","CONTRAIL31_GNDIRECT"), uri, HttpMethod.POST); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - } + String uri = "/services/NetworkAdapter"; + headers.set("X-ECOMP-RequestID", "123456789456127"); + ResponseEntity<String> response = + sendXMLRequest(inputStream("/QueryNetwork.xml").replace("CONTRAIL30_BASIC", "CONTRAIL31_GNDIRECT"), uri, + HttpMethod.POST); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + } - public ResponseEntity<String> sendXMLRequest(String requestJson, String uriPath, HttpMethod reqMethod){ - headers.set("Accept", MediaType.APPLICATION_XML); - headers.set("Content-Type", MediaType.APPLICATION_XML); + public ResponseEntity<String> sendXMLRequest(String requestJson, String uriPath, HttpMethod reqMethod) { + headers.set("Accept", MediaType.APPLICATION_XML); + headers.set("Content-Type", MediaType.APPLICATION_XML); - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(uriPath)); + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(uriPath)); - HttpEntity<String> request = new HttpEntity<String>(requestJson, headers); - ResponseEntity<String> response = restTemplate.exchange(builder.toUriString(), - reqMethod, request, String.class); + HttpEntity<String> request = new HttpEntity<String>(requestJson, headers); + ResponseEntity<String> response = + restTemplate.exchange(builder.toUriString(), reqMethod, request, String.class); - return response; - } + return response; + } - public String inputStream(String JsonInput)throws IOException{ - JsonInput = "src/test/resources/" + JsonInput; - String input = new String(Files.readAllBytes(Paths.get(JsonInput))); - return input; - } + public String inputStream(String JsonInput) throws IOException { + JsonInput = "src/test/resources/" + JsonInput; + String input = new String(Files.readAllBytes(Paths.get(JsonInput))); + return input; + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImplTest.java index f8dcddde04..727f18902a 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImplTest.java @@ -20,22 +20,9 @@ package org.onap.so.adapters.network; -import org.apache.http.HttpStatus; -import org.junit.Test; -import org.onap.so.adapters.vnf.BaseRestTestUtils; -import org.onap.so.entity.MsoRequest; -import org.onap.so.openstack.beans.NetworkRollback; -import org.onap.so.openstack.beans.Subnet; -import org.springframework.beans.factory.annotation.Autowired; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; - import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.containing; import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static org.onap.so.bpmn.mock.StubOpenStack.getBodyFromFile; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackCreatedVUSP_200; @@ -44,235 +31,236 @@ import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackDeleteOrU import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPostStacks_200; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutPublicUrlStackByNameAndID_NETWORK2_200; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccessQueryNetwork; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import org.apache.http.HttpStatus; +import org.junit.Test; +import org.onap.so.adapters.vnf.BaseRestTestUtils; +import org.onap.so.entity.MsoRequest; +import org.onap.so.openstack.beans.NetworkRollback; +import org.onap.so.openstack.beans.Subnet; +import org.springframework.beans.factory.annotation.Autowired; public class MsoNetworkAdapterAsyncImplTest extends BaseRestTestUtils { - @Autowired - MsoNetworkAdapterAsyncImpl impl; + @Autowired + MsoNetworkAdapterAsyncImpl impl; - @Test - public void healthCheckATest() { - MsoNetworkAdapterAsyncImpl mNAAimpl = new MsoNetworkAdapterAsyncImpl(); - mNAAimpl.healthCheckA(); - } + @Test + public void healthCheckATest() { + MsoNetworkAdapterAsyncImpl mNAAimpl = new MsoNetworkAdapterAsyncImpl(); + mNAAimpl.healthCheckA(); + } - @Test - public void rollbackNetworkATest() throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")) - .withRequestBody(containing("tenantId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - stubFor(post(urlPathEqualTo("/notificationUrl")) - .withRequestBody(containing("<completed>true</completed>")) - .willReturn(aResponse() - .withBody("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:net=\"http://org.onap.so/networkNotify\">\n" + - " <soapenv:Header/>\n" + - " <soapenv:Body>\n" + - " <net:rollbackNetworkNotificationResponse>\n" + - " </net:rollbackNetworkNotificationResponse>\n" + - " </soapenv:Body>\n" + - "</soapenv:Envelope>") - .withStatus(HttpStatus.SC_OK))); - NetworkRollback nrb = getNetworkRollback("mtn13"); - impl.rollbackNetworkA(nrb, "messageId", "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void rollbackNetworkATest() throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")).withRequestBody(containing("tenantId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(post(urlPathEqualTo("/notificationUrl")) + .withRequestBody(containing("<completed>true</completed>")) + .willReturn(aResponse().withBody( + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:net=\"http://org.onap.so/networkNotify\">\n" + + " <soapenv:Header/>\n" + " <soapenv:Body>\n" + + " <net:rollbackNetworkNotificationResponse>\n" + + " </net:rollbackNetworkNotificationResponse>\n" + " </soapenv:Body>\n" + + "</soapenv:Envelope>") + .withStatus(HttpStatus.SC_OK))); + NetworkRollback nrb = getNetworkRollback("mtn13"); + impl.rollbackNetworkA(nrb, "messageId", "http://localhost:" + wireMockPort + "/notificationUrl"); + } - @Test - public void rollbackNetworkATest_NotifyException() throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")) - .withRequestBody(containing("tenantId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - stubFor(post(urlPathEqualTo("/notificationUrl")) - .withRequestBody(containing("<completed>true</completed>")) - .willReturn(aResponse() - .withStatus(HttpStatus.SC_NOT_FOUND))); - NetworkRollback nrb = getNetworkRollback("mtn13"); - impl.rollbackNetworkA(nrb, "messageId", "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void rollbackNetworkATest_NotifyException() throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")).withRequestBody(containing("tenantId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor( + post(urlPathEqualTo("/notificationUrl")).withRequestBody(containing("<completed>true</completed>")) + .willReturn(aResponse().withStatus(HttpStatus.SC_NOT_FOUND))); + NetworkRollback nrb = getNetworkRollback("mtn13"); + impl.rollbackNetworkA(nrb, "messageId", "http://localhost:" + wireMockPort + "/notificationUrl"); + } - private NetworkRollback getNetworkRollback(String cloudId) { - NetworkRollback nrb = new NetworkRollback(); - nrb.setCloudId(cloudId); - nrb.setMsoRequest(new MsoRequest()); - nrb.setModelCustomizationUuid("3bdbb104-476c-483e-9f8b-c095b3d3068c"); - nrb.setNetworkCreated(true); - nrb.setNetworkId("networkId"); - nrb.setNetworkName("networkName"); - nrb.setNetworkStackId("networkStackId"); - nrb.setNetworkType("networkType"); - nrb.setNeutronNetworkId("neutronNetworkId"); - nrb.setPhysicalNetwork("physicalNetwork"); - nrb.setTenantId("tenantId"); - nrb.setVlans(new ArrayList<>()); - return nrb; - } + private NetworkRollback getNetworkRollback(String cloudId) { + NetworkRollback nrb = new NetworkRollback(); + nrb.setCloudId(cloudId); + nrb.setMsoRequest(new MsoRequest()); + nrb.setModelCustomizationUuid("3bdbb104-476c-483e-9f8b-c095b3d3068c"); + nrb.setNetworkCreated(true); + nrb.setNetworkId("networkId"); + nrb.setNetworkName("networkName"); + nrb.setNetworkStackId("networkStackId"); + nrb.setNetworkType("networkType"); + nrb.setNeutronNetworkId("neutronNetworkId"); + nrb.setPhysicalNetwork("physicalNetwork"); + nrb.setTenantId("tenantId"); + nrb.setVlans(new ArrayList<>()); + return nrb; + } - @Test - public void rollbackNetworkATestNetworkException() { - NetworkRollback nrb = getNetworkRollback("cloudId"); + @Test + public void rollbackNetworkATestNetworkException() { + NetworkRollback nrb = getNetworkRollback("cloudId"); - impl.rollbackNetworkA(nrb, "messageId", "http://localhost"); - } + impl.rollbackNetworkA(nrb, "messageId", "http://localhost"); + } - @Test - public void noRollbackNetworkATest() { - impl.rollbackNetworkA(null, "messageId", "http://localhost"); - } + @Test + public void noRollbackNetworkATest() { + impl.rollbackNetworkA(null, "messageId", "http://localhost"); + } - @Test - public void deleteNetworkATest() throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")) - .withRequestBody(containing("tenantId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - stubFor(post(urlPathEqualTo("/notificationUrl")) - .withRequestBody(containing("<completed>true</completed>")) - .willReturn(aResponse() - .withBody("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:net=\"http://org.onap.so/networkNotify\">\n" + - " <soapenv:Header/>\n" + - " <soapenv:Body>\n" + - " <net:deleteNetworkNotificationResponse>\n" + - " </net:deleteNetworkNotificationResponse>\n" + - " </soapenv:Body>\n" + - "</soapenv:Envelope>") - .withStatus(HttpStatus.SC_OK))); - impl.deleteNetworkA("mtn13", "tenantId", "networkType", "modelCustomizationUuid", "networkId", - "messageId", new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void deleteNetworkATest() throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")).withRequestBody(containing("tenantId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(post(urlPathEqualTo("/notificationUrl")) + .withRequestBody(containing("<completed>true</completed>")) + .willReturn(aResponse().withBody( + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:net=\"http://org.onap.so/networkNotify\">\n" + + " <soapenv:Header/>\n" + " <soapenv:Body>\n" + + " <net:deleteNetworkNotificationResponse>\n" + + " </net:deleteNetworkNotificationResponse>\n" + " </soapenv:Body>\n" + + "</soapenv:Envelope>") + .withStatus(HttpStatus.SC_OK))); + impl.deleteNetworkA("mtn13", "tenantId", "networkType", "modelCustomizationUuid", "networkId", "messageId", + new MsoRequest(), "http://localhost:" + wireMockPort + "/notificationUrl"); + } - @Test - public void deleteNetworkATest_NotifyException() throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")) - .withRequestBody(containing("tenantId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - stubFor(post(urlPathEqualTo("/notificationUrl")) - .withRequestBody(containing("<completed>true</completed>")) - .willReturn(aResponse() - .withStatus(HttpStatus.SC_NOT_FOUND))); - impl.deleteNetworkA("mtn13", "tenantId", "networkType", "modelCustomizationUuid", "networkId", - "messageId", new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void deleteNetworkATest_NotifyException() throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")).withRequestBody(containing("tenantId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor( + post(urlPathEqualTo("/notificationUrl")).withRequestBody(containing("<completed>true</completed>")) + .willReturn(aResponse().withStatus(HttpStatus.SC_NOT_FOUND))); + impl.deleteNetworkA("mtn13", "tenantId", "networkType", "modelCustomizationUuid", "networkId", "messageId", + new MsoRequest(), "http://localhost:" + wireMockPort + "/notificationUrl"); + } - @Test - public void deleteNetworkATest_NetworkException() { - impl.deleteNetworkA("cloudSiteId", "tenantId", "networkType", "modelCustomizationUuid", "networkId", - "messageId", new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void deleteNetworkATest_NetworkException() { + impl.deleteNetworkA("cloudSiteId", "tenantId", "networkType", "modelCustomizationUuid", "networkId", + "messageId", new MsoRequest(), "http://localhost:" + wireMockPort + "/notificationUrl"); + } - @Test - public void updateNetworkATest() throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")) - .withRequestBody(containing("tenantId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "dvspg-VCE_VPE-mtjnj40avbc"); - mockOpenStackGetStackDeleteOrUpdateComplete_200("OpenstackResponse_Stack_UpdateComplete.json"); - mockOpenStackPutPublicUrlStackByNameAndID_NETWORK2_200(); - stubFor(post(urlPathEqualTo("/notificationUrl")) - .withRequestBody(containing("updateNetworkNotification")) - .willReturn(aResponse() - .withBody("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:net=\"http://org.onap.so/networkNotify\">\n" + - " <soapenv:Header/>\n" + - " <soapenv:Body>\n" + - " <net:updateNetworkNotificationResponse>\n" + - " </net:updateNetworkNotificationResponse>\n" + - " </soapenv:Body>\n" + - "</soapenv:Envelope>") - .withStatus(HttpStatus.SC_OK))); - HashMap<String,String> networkParams = new HashMap<String,String>(); - networkParams.put("shared", "true"); - networkParams.put("external", "false"); - impl.updateNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "dvspg-VCE_VPE-mtjnj40avbc", - "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<Subnet>(), networkParams, "messageId", - new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void updateNetworkATest() throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")).withRequestBody(containing("tenantId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", + "dvspg-VCE_VPE-mtjnj40avbc"); + mockOpenStackGetStackDeleteOrUpdateComplete_200(wireMockServer, "OpenstackResponse_Stack_UpdateComplete.json"); + mockOpenStackPutPublicUrlStackByNameAndID_NETWORK2_200(wireMockServer); + wireMockServer.stubFor(post(urlPathEqualTo("/notificationUrl")) + .withRequestBody(containing("updateNetworkNotification")) + .willReturn(aResponse().withBody( + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:net=\"http://org.onap.so/networkNotify\">\n" + + " <soapenv:Header/>\n" + " <soapenv:Body>\n" + + " <net:updateNetworkNotificationResponse>\n" + + " </net:updateNetworkNotificationResponse>\n" + " </soapenv:Body>\n" + + "</soapenv:Envelope>") + .withStatus(HttpStatus.SC_OK))); + HashMap<String, String> networkParams = new HashMap<String, String>(); + networkParams.put("shared", "true"); + networkParams.put("external", "false"); + impl.updateNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", + "dvspg-VCE_VPE-mtjnj40avbc", "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), + new ArrayList<Subnet>(), networkParams, "messageId", new MsoRequest(), + "http://localhost:" + wireMockPort + "/notificationUrl"); + } - @Test - public void updateNetworkATest_NotifyExcpetion() throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")) - .withRequestBody(containing("tenantId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "dvspg-VCE_VPE-mtjnj40avbc"); - mockOpenStackGetStackDeleteOrUpdateComplete_200("OpenstackResponse_Stack_UpdateComplete.json"); - mockOpenStackPutPublicUrlStackByNameAndID_NETWORK2_200(); - HashMap<String,String> networkParams = new HashMap<String,String>(); - networkParams.put("shared", "true"); - networkParams.put("external", "false"); - impl.updateNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "dvspg-VCE_VPE-mtjnj40avbc", - "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), networkParams, "messageId", - new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); } + @Test + public void updateNetworkATest_NotifyExcpetion() throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")).withRequestBody(containing("tenantId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + mockOpenStackGetStackCreated_200(wireMockServer, "OpenstackResponse_Stack_Created.json", + "dvspg-VCE_VPE-mtjnj40avbc"); + mockOpenStackGetStackDeleteOrUpdateComplete_200(wireMockServer, "OpenstackResponse_Stack_UpdateComplete.json"); + mockOpenStackPutPublicUrlStackByNameAndID_NETWORK2_200(wireMockServer); + HashMap<String, String> networkParams = new HashMap<String, String>(); + networkParams.put("shared", "true"); + networkParams.put("external", "false"); + impl.updateNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", + "dvspg-VCE_VPE-mtjnj40avbc", "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), + new ArrayList<>(), networkParams, "messageId", new MsoRequest(), + "http://localhost:" + wireMockPort + "/notificationUrl"); + } - @Test - public void updateNetworkATest_NetworkException() { - impl.updateNetworkA("cloudSiteId", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "networkId", - "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), new HashMap<String,String>(), "messageId", - new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void updateNetworkATest_NetworkException() { + impl.updateNetworkA("cloudSiteId", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", + "networkId", "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), + new HashMap<String, String>(), "messageId", new MsoRequest(), + "http://localhost:" + wireMockPort + "/notificationUrl"); + } - @Test - public void queryNetworkATest() throws IOException { - mockOpenStackResponseAccessQueryNetwork(wireMockPort); - impl.queryNetworkA("mtn13", "tenantId", "networkId", "messageId", new MsoRequest(), - "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void queryNetworkATest() throws IOException { + mockOpenStackResponseAccessQueryNetwork(wireMockServer, wireMockPort); + impl.queryNetworkA("mtn13", "tenantId", "networkId", "messageId", new MsoRequest(), + "http://localhost:" + wireMockPort + "/notificationUrl"); + } - @Test - public void createNetworkATest() throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")) - .withRequestBody(containing("tenantId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - stubFor(post(urlPathEqualTo("/notificationUrl")) - .withRequestBody(containing("createNetworkNotification")) - .willReturn(aResponse() - .withBody("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:net=\"http://org.onap.so/networkNotify\">\n" + - " <soapenv:Header/>\n" + - " <soapenv:Body>\n" + - " <net:createNetworkNotificationResponse>\n" + - " </net:createNetworkNotificationResponse>\n" + - " </soapenv:Body>\n" + - "</soapenv:Envelope>") - .withStatus(HttpStatus.SC_OK))); - mockOpenStackGetStackCreatedVUSP_200(); - mockOpenStackPostStacks_200(); - mockOpenStackPostStacks_200(); - HashMap<String,String> networkParams = new HashMap<String,String>(); - impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0", - "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), networkParams, "messageId", - new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void createNetworkATest() throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")).withRequestBody(containing("tenantId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(post(urlPathEqualTo("/notificationUrl")) + .withRequestBody(containing("createNetworkNotification")) + .willReturn(aResponse().withBody( + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:net=\"http://org.onap.so/networkNotify\">\n" + + " <soapenv:Header/>\n" + " <soapenv:Body>\n" + + " <net:createNetworkNotificationResponse>\n" + + " </net:createNetworkNotificationResponse>\n" + " </soapenv:Body>\n" + + "</soapenv:Envelope>") + .withStatus(HttpStatus.SC_OK))); + mockOpenStackGetStackCreatedVUSP_200(wireMockServer); + mockOpenStackPostStacks_200(wireMockServer); + mockOpenStackPostStacks_200(wireMockServer); + HashMap<String, String> networkParams = new HashMap<String, String>(); + impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", + "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0", "physicalNetworkName", new ArrayList<>(), false, + false, new ArrayList<>(), networkParams, "messageId", new MsoRequest(), + "http://localhost:" + wireMockPort + "/notificationUrl"); + } - @Test - public void createNetworkATest_NotifyException() throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")) - .withRequestBody(containing("tenantId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - mockOpenStackGetStackCreatedVUSP_200(); - mockOpenStackPostStacks_200(); - HashMap<String,String> networkParams = new HashMap<String,String>(); - networkParams.put("shared", "true"); - networkParams.put("external", "false"); - impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0", - "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), networkParams, "messageId", - new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void createNetworkATest_NotifyException() throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")).withRequestBody(containing("tenantId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFile("OpenstackResponse_Access.json", wireMockPort, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + mockOpenStackGetStackCreatedVUSP_200(wireMockServer); + mockOpenStackPostStacks_200(wireMockServer); + HashMap<String, String> networkParams = new HashMap<String, String>(); + networkParams.put("shared", "true"); + networkParams.put("external", "false"); + impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", + "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0", "physicalNetworkName", new ArrayList<>(), false, + false, new ArrayList<>(), networkParams, "messageId", new MsoRequest(), + "http://localhost:" + wireMockPort + "/notificationUrl"); + } - @Test - public void createNetworkATest_NetworkException() { - impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0", - "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), new HashMap<String,String>(), "messageId", - new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); - } + @Test + public void createNetworkATest_NetworkException() { + impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", + "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0", "physicalNetworkName", new ArrayList<>(), false, + false, new ArrayList<>(), new HashMap<String, String>(), "messageId", new MsoRequest(), + "http://localhost:" + wireMockPort + "/notificationUrl"); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/NetworkAdapterRestTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/NetworkAdapterRestTest.java index 3910d9ec44..1f4c205e7a 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/NetworkAdapterRestTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/NetworkAdapterRestTest.java @@ -36,24 +36,22 @@ import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPublicUrlStackByI import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPublicUrlStackByName_200; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutPublicUrlStackByNameAndID_200; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess; - import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; - import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; - import org.json.JSONException; import org.junit.Test; import org.onap.so.adapters.nwrest.CreateNetworkRequest; import org.onap.so.adapters.nwrest.CreateNetworkResponse; import org.onap.so.adapters.nwrest.DeleteNetworkRequest; import org.onap.so.adapters.nwrest.DeleteNetworkResponse; -import org.onap.so.adapters.nwrest.NetworkTechnology; import org.onap.so.adapters.nwrest.QueryNetworkError; import org.onap.so.adapters.nwrest.QueryNetworkResponse; +import org.onap.so.adapters.nwrest.RollbackNetworkRequest; +import org.onap.so.adapters.nwrest.RollbackNetworkResponse; import org.onap.so.adapters.nwrest.UpdateNetworkRequest; import org.onap.so.adapters.nwrest.UpdateNetworkResponse; import org.onap.so.adapters.vnf.BaseRestTestUtils; @@ -63,268 +61,306 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; - import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; public class NetworkAdapterRestTest extends BaseRestTestUtils { - @Autowired - private JettisonStyleMapperProvider jettisonTypeObjectMapper; - private static final String CLOUDSITE_ID = "mtn13"; - private static final String TENANT_ID = "ba38bc24a2ef4fb2ad2810c894f1938f"; - private static final String NETWORK_ID = "da886914-efb2-4917-b335-c8381528d90b"; - private static final String NETWORK_TYPE = "CONTRAIL30_BASIC"; - private static final String MODEL_CUSTOMIZATION_UUID = "3bdbb104-476c-483e-9f8b-c095b3d308ac"; - private static final String MSO_SERVICE_INSTANCE_ID = "05869d5f-47df-4b45-bbfc-4f03ce0a50bf"; - private static final String MSO_REQUEST_ID = "requestId"; - private static final String NETWORK_NAME = "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0"; - - @Test - public void testCreateNetwork() throws JSONException, JsonParseException, JsonMappingException, IOException { - - CreateNetworkRequest request = new CreateNetworkRequest(); - request.setBackout(true); - request.setSkipAAI(true); - request.setFailIfExists(false); - MsoRequest msoReq = new MsoRequest(); - String networkTechnology = "CONTRAIL"; - - msoReq.setRequestId(MSO_REQUEST_ID); - msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); - request.setMsoRequest(msoReq); - request.setCloudSiteId(CLOUDSITE_ID); - request.setTenantId(TENANT_ID); - request.setNetworkId(NETWORK_ID); - request.setNetworkName(NETWORK_NAME); - request.setNetworkType(NETWORK_TYPE); - request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID); - request.setNetworkTechnology(networkTechnology); - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackPostPublicUrlWithBodyFile_200(); - - mockOpenStackGetStackCreatedVUSP_200(); - - mockOpenStackGetStackVUSP_404(); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<CreateNetworkRequest> entity = new HttpEntity<CreateNetworkRequest>(request, headers); - ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class); - - CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/CreateNetworkResponse.json"), CreateNetworkResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - } - - @Test - public void testCreateNetwork_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException { - - - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackPostPublicUrlWithBodyFile_200(); - - mockOpenStackGetStackCreatedAppC_200(); - - mockOpenStackGetStackAppC_404(); - - headers.add("Content-Type", MediaType.APPLICATION_JSON); - headers.add("Accept", MediaType.APPLICATION_JSON); - - String request = readJsonFileAsString("src/test/resources/CreateNetwork.json"); - HttpEntity<String> entity = new HttpEntity<String>(request, headers); - - ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class); - - CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/CreateNetworkResponse2.json"), CreateNetworkResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - } - - - - @Test - public void testDeleteNetwork() throws IOException{ - - DeleteNetworkRequest request = new DeleteNetworkRequest(); - - MsoRequest msoReq = new MsoRequest(); - - msoReq.setRequestId(MSO_REQUEST_ID); - msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); - request.setMsoRequest(msoReq); - request.setCloudSiteId(CLOUDSITE_ID); - request.setTenantId(TENANT_ID); - request.setNetworkId(NETWORK_ID); - request.setNetworkType(NETWORK_TYPE); - request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID); - request.setNetworkStackId(NETWORK_ID); - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackPublicUrlStackByID_200(wireMockPort); - - mockOpenStackGetPublicUrlStackByNameAndID_204(wireMockPort); - - mockOpenStackDeletePublicUrlStackByNameAndID_204(); - - headers.add("Accept", MediaType.APPLICATION_JSON); - - HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(request, headers); - - ResponseEntity<DeleteNetworkResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.DELETE, entity, DeleteNetworkResponse.class); - - DeleteNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/DeleteNetworkResponse.json"), DeleteNetworkResponse.class); - - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - - } - - @Test - public void testQueryNetwork_Exception() throws IOException{ - MsoRequest msoReq = new MsoRequest(); - msoReq.setRequestId(MSO_REQUEST_ID); - msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); - headers.add("Accept", MediaType.APPLICATION_JSON); - - HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(headers); - - ResponseEntity<QueryNetworkError> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.GET, - entity, QueryNetworkError.class); - - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - - } - - @Test - public void testQueryNetwork() throws IOException{ - - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(headers); - - ResponseEntity<QueryNetworkResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"+"?cloudSiteId=" + CLOUDSITE_ID + "&tenantId=" + TENANT_ID - + "&aaiNetworkId=aaiNetworkId"), HttpMethod.GET, - entity, QueryNetworkResponse.class); - - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode().value()); - - } - - @Test - public void testUpdateNetwork() throws IOException{ - - UpdateNetworkRequest request = new UpdateNetworkRequest(); - - MsoRequest msoReq = new MsoRequest(); - - msoReq.setRequestId(MSO_REQUEST_ID); - msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); - request.setMsoRequest(msoReq); - request.setCloudSiteId(CLOUDSITE_ID); - request.setTenantId(TENANT_ID); - request.setNetworkId(NETWORK_ID); - request.setNetworkName(NETWORK_NAME); - request.setNetworkType(NETWORK_TYPE); - request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID); - request.setNetworkStackId(NETWORK_ID); - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackPublicUrlStackByName_200(wireMockPort); - - mockOpenStackPublicUrlStackByID_200(wireMockPort); - - mockOpenStackGetPublicUrlStackByNameAndID_200(wireMockPort); - - mockOpenStackPutPublicUrlStackByNameAndID_200(); - - headers.add("Accept", MediaType.APPLICATION_JSON); - - HttpEntity<UpdateNetworkRequest> entity = new HttpEntity<UpdateNetworkRequest>(request, headers); - - ResponseEntity<UpdateNetworkResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.PUT, entity, UpdateNetworkResponse.class); - - UpdateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/UpdateNetworkResponse.json"), UpdateNetworkResponse.class); - - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - } - - @Test - public void testCreateNetworkCNRC_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException { - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackPostPublicUrlWithBodyFile_200(); - - mockOpenStackGetStackCreatedAppC_200(); - - mockOpenStackGetStackAppC_404(); - - headers.add("Content-Type", MediaType.APPLICATION_JSON); - headers.add("Accept", MediaType.APPLICATION_JSON); - - String request = readJsonFileAsString("src/test/resources/CreateNetwork3.json"); - HttpEntity<String> entity = new HttpEntity<String>(request, headers); - - ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class); - - CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/CreateNetworkResponse3.json"), CreateNetworkResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - } - - @Test - public void testCreateNetworkNC_Shared_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException { - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackPostPublicUrlWithBodyFile_200(); - - mockOpenStackGetStackCreatedAppC_200(); - - mockOpenStackGetStackAppC_404(); - - headers.add("Content-Type", MediaType.APPLICATION_JSON); - headers.add("Accept", MediaType.APPLICATION_JSON); - - String request = readJsonFileAsString("src/test/resources/CreateNetwork4.json"); - HttpEntity<String> entity = new HttpEntity<String>(request, headers); - - ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class); - - CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/CreateNetworkResponse4.json"), CreateNetworkResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - } - - @Override - protected String readJsonFileAsString(String fileLocation) throws JsonParseException, JsonMappingException, IOException{ - return new String(Files.readAllBytes(Paths.get(fileLocation))); - } + @Autowired + private JettisonStyleMapperProvider jettisonTypeObjectMapper; + private static final String CLOUDSITE_ID = "mtn13"; + private static final String TENANT_ID = "ba38bc24a2ef4fb2ad2810c894f1938f"; + private static final String NETWORK_ID = "da886914-efb2-4917-b335-c8381528d90b"; + private static final String NETWORK_TYPE = "CONTRAIL30_BASIC"; + private static final String MODEL_CUSTOMIZATION_UUID = "3bdbb104-476c-483e-9f8b-c095b3d308ac"; + private static final String MSO_SERVICE_INSTANCE_ID = "05869d5f-47df-4b45-bbfc-4f03ce0a50bf"; + private static final String MSO_REQUEST_ID = "requestId"; + private static final String NETWORK_NAME = "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0"; + + @Test + public void testCreateNetwork() throws JSONException, JsonParseException, JsonMappingException, IOException { + + CreateNetworkRequest request = new CreateNetworkRequest(); + request.setBackout(true); + request.setSkipAAI(true); + request.setFailIfExists(false); + MsoRequest msoReq = new MsoRequest(); + String networkTechnology = "CONTRAIL"; + + msoReq.setRequestId(MSO_REQUEST_ID); + msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); + request.setMsoRequest(msoReq); + request.setCloudSiteId(CLOUDSITE_ID); + request.setTenantId(TENANT_ID); + request.setNetworkId(NETWORK_ID); + request.setNetworkName(NETWORK_NAME); + request.setNetworkType(NETWORK_TYPE); + request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID); + request.setNetworkTechnology(networkTechnology); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer); + + mockOpenStackGetStackCreatedVUSP_200(wireMockServer); + + mockOpenStackGetStackVUSP_404(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<CreateNetworkRequest> entity = new HttpEntity<CreateNetworkRequest>(request, headers); + ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class); + + CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/CreateNetworkResponse.json"), CreateNetworkResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + + @Test + public void testCreateNetwork_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException { + + + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer); + + mockOpenStackGetStackCreatedAppC_200(wireMockServer); + + mockOpenStackGetStackAppC_404(wireMockServer); + + headers.add("Content-Type", MediaType.APPLICATION_JSON); + headers.add("Accept", MediaType.APPLICATION_JSON); + + String request = readJsonFileAsString("src/test/resources/CreateNetwork.json"); + HttpEntity<String> entity = new HttpEntity<String>(request, headers); + + ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class); + + CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/CreateNetworkResponse2.json"), CreateNetworkResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + + + + @Test + public void testDeleteNetwork() throws IOException { + + DeleteNetworkRequest request = new DeleteNetworkRequest(); + + MsoRequest msoReq = new MsoRequest(); + + msoReq.setRequestId(MSO_REQUEST_ID); + msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); + request.setMsoRequest(msoReq); + request.setCloudSiteId(CLOUDSITE_ID); + request.setTenantId(TENANT_ID); + request.setNetworkId(NETWORK_ID); + request.setNetworkType(NETWORK_TYPE); + request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID); + request.setNetworkStackId(NETWORK_ID); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackPublicUrlStackByID_200(wireMockServer, wireMockPort); + + mockOpenStackGetPublicUrlStackByNameAndID_204(wireMockServer, wireMockPort); + + mockOpenStackDeletePublicUrlStackByNameAndID_204(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + + HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(request, headers); + + ResponseEntity<DeleteNetworkResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.DELETE, + entity, DeleteNetworkResponse.class); + + DeleteNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/DeleteNetworkResponse.json"), DeleteNetworkResponse.class); + + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + + } + + @Test + public void testRollbackNetwork() throws IOException { + + RollbackNetworkRequest request = new RollbackNetworkRequest(); + + MsoRequest msoReq = new MsoRequest(); + + msoReq.setRequestId(MSO_REQUEST_ID); + msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackPublicUrlStackByID_200(wireMockServer, wireMockPort); + + mockOpenStackGetPublicUrlStackByNameAndID_204(wireMockServer, wireMockPort); + + mockOpenStackDeletePublicUrlStackByNameAndID_204(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + + HttpEntity<RollbackNetworkRequest> entity = new HttpEntity<>(request, headers); + + ResponseEntity<RollbackNetworkResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b/rollback"), + HttpMethod.DELETE, entity, RollbackNetworkResponse.class); + + RollbackNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/RollbackNetworkResponse.json"), RollbackNetworkResponse.class); + + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + + } + + @Test + public void testQueryNetwork_Exception() throws IOException { + MsoRequest msoReq = new MsoRequest(); + msoReq.setRequestId(MSO_REQUEST_ID); + msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); + headers.add("Accept", MediaType.APPLICATION_JSON); + + HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(headers); + + ResponseEntity<QueryNetworkError> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.GET, + entity, QueryNetworkError.class); + + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + + } + + @Test + public void testQueryNetwork() throws IOException { + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(headers); + + ResponseEntity<QueryNetworkResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b" + "?cloudSiteId=" + + CLOUDSITE_ID + "&tenantId=" + TENANT_ID + "&aaiNetworkId=aaiNetworkId"), + HttpMethod.GET, entity, QueryNetworkResponse.class); + + assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode().value()); + + } + + @Test + public void testUpdateNetwork() throws IOException { + + UpdateNetworkRequest request = new UpdateNetworkRequest(); + + MsoRequest msoReq = new MsoRequest(); + + msoReq.setRequestId(MSO_REQUEST_ID); + msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); + request.setMsoRequest(msoReq); + request.setCloudSiteId(CLOUDSITE_ID); + request.setTenantId(TENANT_ID); + request.setNetworkId(NETWORK_ID); + request.setNetworkName(NETWORK_NAME); + request.setNetworkType(NETWORK_TYPE); + request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID); + request.setNetworkStackId(NETWORK_ID); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackPublicUrlStackByName_200(wireMockServer, wireMockPort); + + mockOpenStackPublicUrlStackByID_200(wireMockServer, wireMockPort); + + mockOpenStackGetPublicUrlStackByNameAndID_200(wireMockServer, wireMockPort); + + mockOpenStackPutPublicUrlStackByNameAndID_200(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + + HttpEntity<UpdateNetworkRequest> entity = new HttpEntity<UpdateNetworkRequest>(request, headers); + + ResponseEntity<UpdateNetworkResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.PUT, + entity, UpdateNetworkResponse.class); + + UpdateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/UpdateNetworkResponse.json"), UpdateNetworkResponse.class); + + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } + + @Test + public void testCreateNetworkCNRC_JSON() + throws JSONException, JsonParseException, JsonMappingException, IOException { + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer); + + mockOpenStackGetStackCreatedAppC_200(wireMockServer); + + mockOpenStackGetStackAppC_404(wireMockServer); + + headers.add("Content-Type", MediaType.APPLICATION_JSON); + headers.add("Accept", MediaType.APPLICATION_JSON); + + String request = readJsonFileAsString("src/test/resources/CreateNetwork3.json"); + HttpEntity<String> entity = new HttpEntity<String>(request, headers); + + ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class); + + CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/CreateNetworkResponse3.json"), CreateNetworkResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + + @Test + public void testCreateNetworkNC_Shared_JSON() + throws JSONException, JsonParseException, JsonMappingException, IOException { + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer); + + mockOpenStackGetStackCreatedAppC_200(wireMockServer); + + mockOpenStackGetStackAppC_404(wireMockServer); + + headers.add("Content-Type", MediaType.APPLICATION_JSON); + headers.add("Accept", MediaType.APPLICATION_JSON); + + String request = readJsonFileAsString("src/test/resources/CreateNetwork4.json"); + HttpEntity<String> entity = new HttpEntity<String>(request, headers); + + ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class); + + CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/CreateNetworkResponse4.json"), CreateNetworkResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + + @Override + protected String readJsonFileAsString(String fileLocation) + throws JsonParseException, JsonMappingException, IOException { + return new String(Files.readAllBytes(Paths.get(fileLocation))); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/exceptions/NetworkExceptionBeanTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/exceptions/NetworkExceptionBeanTest.java index a1e0a16819..01fbc308b9 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/exceptions/NetworkExceptionBeanTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/exceptions/NetworkExceptionBeanTest.java @@ -1,41 +1,35 @@ /* -* ============LICENSE_START======================================================= - * ONAP : SO - * ================================================================================ - * Copyright (C) 2018 TechMahindra - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * ============LICENSE_START======================================================= ONAP : SO + * ================================================================================ Copyright (C) 2018 TechMahindra + * ================================================================================ Licensed under the Apache License, + * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy + * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. * ============LICENSE_END========================================================= -*/ + */ package org.onap.so.adapters.network.exceptions; import static org.junit.Assert.assertEquals; - import org.junit.Test; import org.onap.so.openstack.exceptions.MsoExceptionCategory; public class NetworkExceptionBeanTest { - - NetworkExceptionBean neb=new NetworkExceptionBean(); - MsoExceptionCategory msc=MsoExceptionCategory.INTERNAL; - - @Test - public void test() { - neb.setRolledBack(true); - neb.setMessage("message"); - neb.setCategory(msc); - assertEquals("message", neb.getMessage()); - assertEquals(msc, neb.getCategory()); - assertEquals(true, neb.isRolledBack()); - } + + NetworkExceptionBean neb = new NetworkExceptionBean(); + MsoExceptionCategory msc = MsoExceptionCategory.INTERNAL; + + @Test + public void test() { + neb.setRolledBack(true); + neb.setMessage("message"); + neb.setCategory(msc); + assertEquals("message", neb.getMessage()); + assertEquals(msc, neb.getCategory()); + assertEquals(true, neb.isRolledBack()); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/exceptions/NetworkExceptionTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/exceptions/NetworkExceptionTest.java index bd5b07de1f..268d6b4c51 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/exceptions/NetworkExceptionTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/exceptions/NetworkExceptionTest.java @@ -1,50 +1,44 @@ /* -* ============LICENSE_START======================================================= - * ONAP : SO - * ================================================================================ - * Copyright (C) 2018 TechMahindra - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * ============LICENSE_START======================================================= ONAP : SO + * ================================================================================ Copyright (C) 2018 TechMahindra + * ================================================================================ Licensed under the Apache License, + * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy + * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. * ============LICENSE_END========================================================= -*/ + */ package org.onap.so.adapters.network.exceptions; import static org.junit.Assert.assertEquals; - import org.junit.Test; import org.onap.so.openstack.exceptions.MsoException; import org.onap.so.openstack.exceptions.MsoExceptionCategory; -public class NetworkExceptionTest{ - - NetworkException ne=new NetworkException("msg"); - NetworkExceptionBean neb =new NetworkExceptionBean(); - MsoException msoException= new MsoException("msoException") { - private static final long serialVersionUID = 1L; - }; - MsoExceptionCategory msc=MsoExceptionCategory.INTERNAL; - NetworkException ne1=new NetworkException(msoException); - NetworkException ne2=new NetworkException(ne); - NetworkException ne3=new NetworkException("msg", ne); - NetworkException ne4=new NetworkException("msg", msoException); - NetworkException ne5=new NetworkException("msg", msc); - NetworkException ne6=new NetworkException("msg", msc, ne); - - @Test - public void test() { - ne.setFaultInfo(neb); - assertEquals(ne.getFaultInfo(), neb); - } +public class NetworkExceptionTest { + + NetworkException ne = new NetworkException("msg"); + NetworkExceptionBean neb = new NetworkExceptionBean(); + MsoException msoException = new MsoException("msoException") { + private static final long serialVersionUID = 1L; + }; + MsoExceptionCategory msc = MsoExceptionCategory.INTERNAL; + NetworkException ne1 = new NetworkException(msoException); + NetworkException ne2 = new NetworkException(ne); + NetworkException ne3 = new NetworkException("msg", ne); + NetworkException ne4 = new NetworkException("msg", msoException); + NetworkException ne5 = new NetworkException("msg", msc); + NetworkException ne6 = new NetworkException("msg", msc, ne); + + @Test + public void test() { + ne.setFaultInfo(neb); + assertEquals(ne.getFaultInfo(), neb); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/MsoTenantAdapterImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/MsoTenantAdapterImplTest.java index df7e415724..b695a538bb 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/MsoTenantAdapterImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/MsoTenantAdapterImplTest.java @@ -20,9 +20,7 @@ package org.onap.so.adapters.tenant; import java.util.HashMap; - import javax.xml.ws.Holder; - import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; @@ -35,10 +33,10 @@ import org.onap.so.entity.MsoRequest; @RunWith(MockitoJUnitRunner.class) public class MsoTenantAdapterImplTest { - + @Mock - private CloudConfig cloudConfig; - + private CloudConfig cloudConfig; + @Spy @InjectMocks private MsoTenantAdapterImpl msoTenantAdapter; @@ -50,14 +48,14 @@ public class MsoTenantAdapterImplTest { @Test(expected = NullPointerException.class) public void createTenant() throws Exception { - msoTenantAdapter.createTenant("site", "tenant", new HashMap<>(), - true, true, new MsoRequest(), new Holder<String>(), new Holder<TenantRollback>()); + msoTenantAdapter.createTenant("site", "tenant", new HashMap<>(), true, true, new MsoRequest(), + new Holder<String>(), new Holder<TenantRollback>()); } @Test(expected = NullPointerException.class) public void queryTenant() throws Exception { - msoTenantAdapter.queryTenant("site", "tenant", new MsoRequest(), - new Holder<>(), new Holder<>(), new Holder<>()); + msoTenantAdapter.queryTenant("site", "tenant", new MsoRequest(), new Holder<>(), new Holder<>(), + new Holder<>()); } @Test(expected = NullPointerException.class) @@ -70,4 +68,4 @@ public class MsoTenantAdapterImplTest { msoTenantAdapter.rollbackTenant(new TenantRollback()); } -}
\ No newline at end of file +} diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/TenantAdapterRestTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/TenantAdapterRestTest.java index 405118cb30..e481f0d03f 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/TenantAdapterRestTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/TenantAdapterRestTest.java @@ -36,15 +36,12 @@ import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPostTenantWithBod import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPostTenant_200; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutRolesAdmin_200; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccessAdmin; - import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; - import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; - import org.junit.Ignore; import org.junit.Test; import org.onap.so.adapters.tenantrest.CreateTenantRequest; @@ -58,189 +55,186 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; - import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; public class TenantAdapterRestTest extends BaseRestTestUtils { - @Autowired - private JettisonStyleMapperProvider jettisonTypeObjectMapper; - - @Test - public void testCreateTenantCreated() throws JsonParseException, JsonMappingException, IOException { - - CreateTenantRequest request = new CreateTenantRequest(); - String cloudSiteId = "MTN13"; - String requestId = "62265093-277d-4388-9ba6-449838ade586"; - String serviceInstanceId = "4147e06f-1b89-49c5-b21f-4faf8dc9805a"; - String tenantName = "testingTenantName"; - boolean failIfExists = true; - boolean backout = true; - Map<String, String> metaData = new HashMap<>(); - metaData.put("key1", "value2"); - MsoRequest msoReq = new MsoRequest(); - msoReq.setRequestId(requestId); - msoReq.setServiceInstanceId(serviceInstanceId); - - request.setCloudSiteId(cloudSiteId); - request.setMsoRequest(msoReq); - request.setTenantName(tenantName); - request.setMetadata(metaData); - request.setBackout(backout); - request.setFailIfExists(failIfExists); - - mockOpenStackResponseAccessAdmin(wireMockPort); - - mockOpenStackGetTenantByName_404(tenantName); - - mockOpenStackPostTenantWithBodyFile_200(); - - mockOpenStackGetUser_200("m93945"); - - mockOpenStackGetRoles_200("OS-KSADM"); - - mockOpenStackPutRolesAdmin_200("OS-KSADM"); - - mockOpenStackPostMetadata_200(); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<CreateTenantRequest> entity = new HttpEntity<CreateTenantRequest>(request, headers); - - ResponseEntity<CreateTenantResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/tenants"), HttpMethod.POST, - entity, CreateTenantResponse.class); - - CreateTenantResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/CreateTenantResponse_Created.json"), CreateTenantResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - } - - @Test - public void testCreateTenantExists() throws JsonParseException, JsonMappingException, IOException { - - CreateTenantRequest request = new CreateTenantRequest(); - String cloudSiteId = "MTN13"; - String requestId = "62265093-277d-4388-9ba6-449838ade586"; - String serviceInstanceId = "4147e06f-1b89-49c5-b21f-4faf8dc9805a"; - String tenantName = "testingTenantName"; - boolean failIfExists = false; - boolean backout = true; - Map<String, String> metadata = new HashMap<>(); - - MsoRequest msoReq = new MsoRequest(); - msoReq.setRequestId(requestId); - msoReq.setServiceInstanceId(serviceInstanceId); - - request.setCloudSiteId(cloudSiteId); - request.setMsoRequest(msoReq); - request.setTenantName(tenantName); - request.setMetadata(metadata); - request.setBackout(backout); - request.setFailIfExists(failIfExists); - - mockOpenStackResponseAccessAdmin(wireMockPort); - - mockOpenStackGetTenantByName_200(tenantName); - - mockOpenStackPostTenant_200(); - - mockOpenStackGetMetadata_200(); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<CreateTenantRequest> entity = new HttpEntity<CreateTenantRequest>(request, headers); - - ResponseEntity<CreateTenantResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/tenants"), HttpMethod.POST, - entity, CreateTenantResponse.class); - - CreateTenantResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/CreateTenantResponse_Exists.json"), CreateTenantResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - } - - @Test - public void testDeleteTenant() throws IOException { - - DeleteTenantRequest request = new DeleteTenantRequest(); - String cloudSiteId = "mtn13"; - String tenantId = "tenantId"; - String requestId = "ra1"; - String serviceInstanceId = "sa1"; - - MsoRequest msoReq = new MsoRequest(); - msoReq.setRequestId(requestId); - msoReq.setServiceInstanceId(serviceInstanceId); - - request.setCloudSiteId(cloudSiteId); - request.setTenantId(tenantId); - request.setMsoRequest(msoReq); - - mockOpenStackResponseAccessAdmin(wireMockPort); - - mockOpenStackGetTenantById_200(tenantId); - - mockOpenStackDeleteTenantById_200(tenantId); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<DeleteTenantRequest> entity = new HttpEntity<DeleteTenantRequest>(request, headers); - - ResponseEntity<DeleteTenantResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/tenants/tenantId"), HttpMethod.DELETE, - entity, DeleteTenantResponse.class); - - DeleteTenantResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/DeleteTenantResponse_Success.json"), DeleteTenantResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - } - - //@Ignore - @Test - public void testDeleteTenantFails() throws IOException { - - DeleteTenantRequest request = new DeleteTenantRequest(); - String cloudSiteId = "mtn13"; - String tenantId = "tenantId"; - String requestId = "ra1"; - String serviceInstanceId = "sa1"; - - MsoRequest msoReq = new MsoRequest(); - msoReq.setRequestId(requestId); - msoReq.setServiceInstanceId(serviceInstanceId); - - request.setCloudSiteId(cloudSiteId); - request.setTenantId(tenantId); - request.setMsoRequest(msoReq); - - mockOpenStackResponseAccessAdmin(wireMockPort); - - mockOpenStackGetTenantById_404(tenantId); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<DeleteTenantRequest> entity = new HttpEntity<DeleteTenantRequest>(request, headers); - - ResponseEntity<DeleteTenantResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/tenants/tenantId"), HttpMethod.DELETE, - entity, DeleteTenantResponse.class); - - DeleteTenantResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/DeleteTenantResponse_Failed.json"), DeleteTenantResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - } - - @Ignore - @Test - public void testQuaryTenant() { - - - - } + @Autowired + private JettisonStyleMapperProvider jettisonTypeObjectMapper; + + @Test + public void testCreateTenantCreated() throws JsonParseException, JsonMappingException, IOException { + + CreateTenantRequest request = new CreateTenantRequest(); + String cloudSiteId = "MTN13"; + String requestId = "62265093-277d-4388-9ba6-449838ade586"; + String serviceInstanceId = "4147e06f-1b89-49c5-b21f-4faf8dc9805a"; + String tenantName = "testingTenantName"; + boolean failIfExists = true; + boolean backout = true; + Map<String, String> metaData = new HashMap<>(); + metaData.put("key1", "value2"); + MsoRequest msoReq = new MsoRequest(); + msoReq.setRequestId(requestId); + msoReq.setServiceInstanceId(serviceInstanceId); + + request.setCloudSiteId(cloudSiteId); + request.setMsoRequest(msoReq); + request.setTenantName(tenantName); + request.setMetadata(metaData); + request.setBackout(backout); + request.setFailIfExists(failIfExists); + + mockOpenStackResponseAccessAdmin(wireMockServer, wireMockPort); + + mockOpenStackGetTenantByName_404(wireMockServer, tenantName); + + mockOpenStackPostTenantWithBodyFile_200(wireMockServer); + + mockOpenStackGetUser_200(wireMockServer, "m93945"); + + mockOpenStackGetRoles_200(wireMockServer, "OS-KSADM"); + + mockOpenStackPutRolesAdmin_200(wireMockServer, "OS-KSADM"); + + mockOpenStackPostMetadata_200(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<CreateTenantRequest> entity = new HttpEntity<CreateTenantRequest>(request, headers); + + ResponseEntity<CreateTenantResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/tenants"), HttpMethod.POST, entity, CreateTenantResponse.class); + + CreateTenantResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/CreateTenantResponse_Created.json"), CreateTenantResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + + @Test + public void testCreateTenantExists() throws JsonParseException, JsonMappingException, IOException { + + CreateTenantRequest request = new CreateTenantRequest(); + String cloudSiteId = "MTN13"; + String requestId = "62265093-277d-4388-9ba6-449838ade586"; + String serviceInstanceId = "4147e06f-1b89-49c5-b21f-4faf8dc9805a"; + String tenantName = "testingTenantName"; + boolean failIfExists = false; + boolean backout = true; + Map<String, String> metadata = new HashMap<>(); + + MsoRequest msoReq = new MsoRequest(); + msoReq.setRequestId(requestId); + msoReq.setServiceInstanceId(serviceInstanceId); + + request.setCloudSiteId(cloudSiteId); + request.setMsoRequest(msoReq); + request.setTenantName(tenantName); + request.setMetadata(metadata); + request.setBackout(backout); + request.setFailIfExists(failIfExists); + + mockOpenStackResponseAccessAdmin(wireMockServer, wireMockPort); + + mockOpenStackGetTenantByName_200(wireMockServer, tenantName); + + mockOpenStackPostTenant_200(wireMockServer); + + mockOpenStackGetMetadata_200(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<CreateTenantRequest> entity = new HttpEntity<CreateTenantRequest>(request, headers); + + ResponseEntity<CreateTenantResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/tenants"), HttpMethod.POST, entity, CreateTenantResponse.class); + + CreateTenantResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/CreateTenantResponse_Exists.json"), CreateTenantResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + + @Test + public void testDeleteTenant() throws IOException { + + DeleteTenantRequest request = new DeleteTenantRequest(); + String cloudSiteId = "mtn13"; + String tenantId = "tenantId"; + String requestId = "ra1"; + String serviceInstanceId = "sa1"; + + MsoRequest msoReq = new MsoRequest(); + msoReq.setRequestId(requestId); + msoReq.setServiceInstanceId(serviceInstanceId); + + request.setCloudSiteId(cloudSiteId); + request.setTenantId(tenantId); + request.setMsoRequest(msoReq); + + mockOpenStackResponseAccessAdmin(wireMockServer, wireMockPort); + + mockOpenStackGetTenantById_200(wireMockServer, tenantId); + + mockOpenStackDeleteTenantById_200(wireMockServer, tenantId); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<DeleteTenantRequest> entity = new HttpEntity<DeleteTenantRequest>(request, headers); + + ResponseEntity<DeleteTenantResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/tenants/tenantId"), HttpMethod.DELETE, + entity, DeleteTenantResponse.class); + + DeleteTenantResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/DeleteTenantResponse_Success.json"), DeleteTenantResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + + // @Ignore + @Test + public void testDeleteTenantFails() throws IOException { + + DeleteTenantRequest request = new DeleteTenantRequest(); + String cloudSiteId = "mtn13"; + String tenantId = "tenantId"; + String requestId = "ra1"; + String serviceInstanceId = "sa1"; + + MsoRequest msoReq = new MsoRequest(); + msoReq.setRequestId(requestId); + msoReq.setServiceInstanceId(serviceInstanceId); + + request.setCloudSiteId(cloudSiteId); + request.setTenantId(tenantId); + request.setMsoRequest(msoReq); + + mockOpenStackResponseAccessAdmin(wireMockServer, wireMockPort); + + mockOpenStackGetTenantById_404(wireMockServer, tenantId); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<DeleteTenantRequest> entity = new HttpEntity<DeleteTenantRequest>(request, headers); + + ResponseEntity<DeleteTenantResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/tenants/tenantId"), HttpMethod.DELETE, + entity, DeleteTenantResponse.class); + + DeleteTenantResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/DeleteTenantResponse_Failed.json"), DeleteTenantResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + + @Ignore + @Test + public void testQuaryTenant() { + + + + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantAlreadyExistsTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantAlreadyExistsTest.java index 6288dc9573..6e3312b1d3 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantAlreadyExistsTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantAlreadyExistsTest.java @@ -1,22 +1,17 @@ /* -* ============LICENSE_START======================================================= - * ONAP : SO - * ================================================================================ - * Copyright (C) 2018 TechMahindra - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * ============LICENSE_START======================================================= ONAP : SO + * ================================================================================ Copyright (C) 2018 TechMahindra + * ================================================================================ Licensed under the Apache License, + * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy + * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. * ============LICENSE_END========================================================= -*/ + */ package org.onap.so.adapters.tenant.exceptions; @@ -24,9 +19,9 @@ import org.junit.Test; public class TenantAlreadyExistsTest { - @Test - public void test() { - TenantAlreadyExists tar= new TenantAlreadyExists("name", "cloudId", "tenantId"); - assert(tar!=null); - } + @Test + public void test() { + TenantAlreadyExists tar = new TenantAlreadyExists("name", "cloudId", "tenantId"); + assert (tar != null); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionBeanTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionBeanTest.java index 178495105b..7314a9f1e2 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionBeanTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionBeanTest.java @@ -1,22 +1,17 @@ /* -* ============LICENSE_START======================================================= - * ONAP : SO - * ================================================================================ - * Copyright (C) 2018 TechMahindra - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * ============LICENSE_START======================================================= ONAP : SO + * ================================================================================ Copyright (C) 2018 TechMahindra + * ================================================================================ Licensed under the Apache License, + * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy + * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. * ============LICENSE_END========================================================= -*/ + */ package org.onap.so.adapters.tenant.exceptions; @@ -27,21 +22,21 @@ import org.onap.so.openstack.exceptions.MsoExceptionCategory; public class TenantExceptionBeanTest { -@Mock -private MsoExceptionCategory mec; + @Mock + private MsoExceptionCategory mec; -@InjectMocks -private TenantExceptionBean teb; + @InjectMocks + private TenantExceptionBean teb; -@Test - public void test() { - teb =new TenantExceptionBean("message",mec); + @Test + public void test() { + teb = new TenantExceptionBean("message", mec); teb.setMessage("message"); teb.setCategory(MsoExceptionCategory.INTERNAL); teb.setCategory(MsoExceptionCategory.IO); teb.setCategory(MsoExceptionCategory.OPENSTACK); teb.setCategory(MsoExceptionCategory.USERDATA); - assert(teb.getMessage().equals("message")); - assert(teb.getCategory()!=null); - } + assert (teb.getMessage().equals("message")); + assert (teb.getCategory() != null); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionTest.java index 73614a3628..83eb1f1bdc 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/exceptions/TenantExceptionTest.java @@ -1,22 +1,17 @@ /* -* ============LICENSE_START======================================================= - * ONAP : SO - * ================================================================================ - * Copyright (C) 2018 TechMahindra - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * ============LICENSE_START======================================================= ONAP : SO + * ================================================================================ Copyright (C) 2018 TechMahindra + * ================================================================================ Licensed under the Apache License, + * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy + * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. * ============LICENSE_END========================================================= -*/ + */ package org.onap.so.adapters.tenant.exceptions; @@ -26,24 +21,24 @@ import org.mockito.Mock; import org.onap.so.openstack.exceptions.MsoExceptionCategory; public class TenantExceptionTest { - - @Mock - private TenantExceptionBean teb; - - @Mock - private MsoExceptionCategory mec; - - @InjectMocks - private TenantException te; - - @Test - public void test() { - teb=new TenantExceptionBean("message"); - teb.setMessage("message"); - teb.setCategory(MsoExceptionCategory.INTERNAL); - te = new TenantException("message", mec); - te.setFaultInfo(teb); - assert(te.getFaultInfo()!=null); - assert(te.getFaultInfo().equals(teb)); - } + + @Mock + private TenantExceptionBean teb; + + @Mock + private MsoExceptionCategory mec; + + @InjectMocks + private TenantException te; + + @Test + public void test() { + teb = new TenantExceptionBean("message"); + teb.setMessage("message"); + teb.setCategory(MsoExceptionCategory.INTERNAL); + te = new TenantException("message", mec); + te.setFaultInfo(teb); + assert (te.getFaultInfo() != null); + assert (te.getFaultInfo().equals(teb)); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/valet/ValetClientTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/valet/ValetClientTest.java index 141be6bd7c..61d2d08590 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/valet/ValetClientTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/valet/ValetClientTest.java @@ -27,9 +27,7 @@ import static org.onap.so.bpmn.mock.StubOpenStack.mockValetCreatePostResponse_20 import static org.onap.so.bpmn.mock.StubOpenStack.mockValetCreatePutResponse_200; import static org.onap.so.bpmn.mock.StubOpenStack.mockValetDeleteDeleteResponse_200; import static org.onap.so.bpmn.mock.StubOpenStack.mockValetRollbackPutRequest_200; - import java.io.File; - import org.apache.http.HttpStatus; import org.junit.Before; import org.junit.Test; @@ -40,77 +38,90 @@ import org.onap.so.adapters.valet.beans.ValetRollbackResponse; import org.onap.so.adapters.valet.beans.ValetUpdateResponse; import org.onap.so.adapters.vnf.BaseRestTestUtils; import org.springframework.beans.factory.annotation.Autowired; - import com.fasterxml.jackson.databind.ObjectMapper; public class ValetClientTest extends BaseRestTestUtils { - @Autowired - protected ValetClient client; - - private ObjectMapper mapper = new ObjectMapper(); - - @Before - public void init() { - client.baseUrl = "http://localhost:" + wireMockPort; - } - - @Test - public void testCallValetCreateRequest() throws Exception { - ValetCreateResponse vcr = mapper.readValue(new File("src/test/resources/__files/ValetCreateRequest.json"), ValetCreateResponse.class); - GenericValetResponse<ValetCreateResponse> expected = new GenericValetResponse<ValetCreateResponse>(HttpStatus.SC_OK, ValetClient.NO_STATUS_RETURNED, vcr); - - mockValetCreatePostResponse_200("requestId", mapper.writeValueAsString(vcr)); - - GenericValetResponse<ValetCreateResponse> actual = client.callValetCreateRequest("requestId", "regionId", "tenantId", "serviceInstanceId", "vnfId", "vnfName", "vfModuleId", "vfModuleName", "keystoneUrl", null); - - assertThat(actual, sameBeanAs(expected)); - } - - @Test - public void testCallValetUpdateRequest() throws Exception { - ValetUpdateResponse vur = mapper.readValue(new File("src/test/resources/__files/ValetCreateRequest.json"), ValetUpdateResponse.class); - GenericValetResponse<ValetUpdateResponse> expected = new GenericValetResponse<ValetUpdateResponse>(HttpStatus.SC_OK, ValetClient.NO_STATUS_RETURNED, vur); - - mockValetCreatePutResponse_200("requestId", mapper.writeValueAsString(vur)); - - GenericValetResponse<ValetUpdateResponse> actual = client.callValetUpdateRequest("requestId", "regionId", "tenantId", "serviceInstanceId", "vnfId", "vnfName", "vfModuleId", "vfModuleName", "keystoneUrl", null); - - assertThat(actual, sameBeanAs(expected)); - } - - @Test - public void testCallValetDeleteRequest() throws Exception { - ValetDeleteResponse vdr = mapper.readValue(new File("src/test/resources/__files/ValetDeleteRequest.json"), ValetDeleteResponse.class); - GenericValetResponse<ValetDeleteResponse> expected = new GenericValetResponse<ValetDeleteResponse>(HttpStatus.SC_OK, ValetClient.NO_STATUS_RETURNED, vdr); - - mockValetDeleteDeleteResponse_200("requestId", mapper.writeValueAsString(vdr)); - - GenericValetResponse<ValetDeleteResponse> actual = client.callValetDeleteRequest("requestId", "regionId", "tenantId", "vfModuleId", "vfModuleName"); - - assertThat(actual, sameBeanAs(expected)); - } - - @Test - public void testCallValetConfirmRequest() throws Exception { - ValetConfirmResponse vcr = new ValetConfirmResponse(); - GenericValetResponse<ValetConfirmResponse> expected = new GenericValetResponse<ValetConfirmResponse>(HttpStatus.SC_OK, ValetClient.NO_STATUS_RETURNED, vcr); - - mockValetConfirmPutRequest_200("requestId", "{}"); - - GenericValetResponse<ValetConfirmResponse> actual = client.callValetConfirmRequest("requestId", "stackId"); - - assertThat(actual, sameBeanAs(expected)); - } - - @Test - public void testCallValetRollbackRequest() throws Exception { - ValetRollbackResponse vrr = new ValetRollbackResponse(); - GenericValetResponse<ValetRollbackResponse> expected = new GenericValetResponse<ValetRollbackResponse>(HttpStatus.SC_OK, ValetClient.NO_STATUS_RETURNED, vrr); - - mockValetRollbackPutRequest_200("requestId", "{}"); - - GenericValetResponse<ValetRollbackResponse> actual = client.callValetRollbackRequest("requestId", "stackId", true, "error"); - - assertThat(actual, sameBeanAs(expected)); - } + @Autowired + protected ValetClient client; + + private ObjectMapper mapper = new ObjectMapper(); + + @Before + public void init() { + client.baseUrl = "http://localhost:" + wireMockPort; + } + + @Test + public void testCallValetCreateRequest() throws Exception { + ValetCreateResponse vcr = mapper.readValue(new File("src/test/resources/__files/ValetCreateRequest.json"), + ValetCreateResponse.class); + GenericValetResponse<ValetCreateResponse> expected = + new GenericValetResponse<ValetCreateResponse>(HttpStatus.SC_OK, ValetClient.NO_STATUS_RETURNED, vcr); + + mockValetCreatePostResponse_200(wireMockServer, "requestId", mapper.writeValueAsString(vcr)); + + GenericValetResponse<ValetCreateResponse> actual = + client.callValetCreateRequest("requestId", "regionId", "ownerId", "tenantId", "serviceInstanceId", + "vnfId", "vnfName", "vfModuleId", "vfModuleName", "keystoneUrl", null); + + assertThat(actual, sameBeanAs(expected)); + } + + @Test + public void testCallValetUpdateRequest() throws Exception { + ValetUpdateResponse vur = mapper.readValue(new File("src/test/resources/__files/ValetCreateRequest.json"), + ValetUpdateResponse.class); + GenericValetResponse<ValetUpdateResponse> expected = + new GenericValetResponse<ValetUpdateResponse>(HttpStatus.SC_OK, ValetClient.NO_STATUS_RETURNED, vur); + + mockValetCreatePutResponse_200(wireMockServer, "requestId", mapper.writeValueAsString(vur)); + + GenericValetResponse<ValetUpdateResponse> actual = + client.callValetUpdateRequest("requestId", "regionId", "ownerId", "tenantId", "serviceInstanceId", + "vnfId", "vnfName", "vfModuleId", "vfModuleName", "keystoneUrl", null); + + assertThat(actual, sameBeanAs(expected)); + } + + @Test + public void testCallValetDeleteRequest() throws Exception { + ValetDeleteResponse vdr = mapper.readValue(new File("src/test/resources/__files/ValetDeleteRequest.json"), + ValetDeleteResponse.class); + GenericValetResponse<ValetDeleteResponse> expected = + new GenericValetResponse<ValetDeleteResponse>(HttpStatus.SC_OK, ValetClient.NO_STATUS_RETURNED, vdr); + + mockValetDeleteDeleteResponse_200(wireMockServer, "requestId", mapper.writeValueAsString(vdr)); + + GenericValetResponse<ValetDeleteResponse> actual = client.callValetDeleteRequest("requestId", "regionId", + "ownerId", "tenantId", "vfModuleId", "vfModuleName"); + + assertThat(actual, sameBeanAs(expected)); + } + + @Test + public void testCallValetConfirmRequest() throws Exception { + ValetConfirmResponse vcr = new ValetConfirmResponse(); + GenericValetResponse<ValetConfirmResponse> expected = + new GenericValetResponse<ValetConfirmResponse>(HttpStatus.SC_OK, ValetClient.NO_STATUS_RETURNED, vcr); + + mockValetConfirmPutRequest_200(wireMockServer, "requestId", "{}"); + + GenericValetResponse<ValetConfirmResponse> actual = client.callValetConfirmRequest("requestId", "stackId"); + + assertThat(actual, sameBeanAs(expected)); + } + + @Test + public void testCallValetRollbackRequest() throws Exception { + ValetRollbackResponse vrr = new ValetRollbackResponse(); + GenericValetResponse<ValetRollbackResponse> expected = + new GenericValetResponse<ValetRollbackResponse>(HttpStatus.SC_OK, ValetClient.NO_STATUS_RETURNED, vrr); + + mockValetRollbackPutRequest_200(wireMockServer, "requestId", "{}"); + + GenericValetResponse<ValetRollbackResponse> actual = + client.callValetRollbackRequest("requestId", "stackId", true, "error"); + + assertThat(actual, sameBeanAs(expected)); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vdu/mapper/VfModuleCustomizationToVduMapperTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vdu/mapper/VfModuleCustomizationToVduMapperTest.java index c982f8beb1..a9c57598b0 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vdu/mapper/VfModuleCustomizationToVduMapperTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vdu/mapper/VfModuleCustomizationToVduMapperTest.java @@ -21,7 +21,6 @@ package org.onap.so.adapters.vdu.mapper; import static org.assertj.core.api.Assertions.assertThat; - import com.google.common.collect.Lists; import java.util.List; import org.junit.Test; @@ -55,14 +54,13 @@ public class VfModuleCustomizationToVduMapperTest { VfModuleCustomization vfModuleCustomization = createVfModuleCustomization(); vfModuleCustomization.setHeatEnvironment(createHeatEnvironment(HEAT_ENV_NAME, HEAT_ENV_CONTENT)); VfModule vfModule = createVfModule(); - vfModule.setModuleHeatTemplate(createHeatTemplate( - MODULE_HEAT_TEMPLATE_NAME, MODULE_HEAT_TEMPLATE_BODY, - NESTED_TEMPLATE_NAME, NESTED_TEMPLATE_BODY)); + vfModule.setModuleHeatTemplate(createHeatTemplate(MODULE_HEAT_TEMPLATE_NAME, MODULE_HEAT_TEMPLATE_BODY, + NESTED_TEMPLATE_NAME, NESTED_TEMPLATE_BODY)); vfModuleCustomization.setVfModule(vfModule); // WHEN - VduModelInfo vduModelInfo = new VfModuleCustomizationToVduMapper() - .mapVfModuleCustomizationToVdu(vfModuleCustomization); + VduModelInfo vduModelInfo = + new VfModuleCustomizationToVduMapper().mapVfModuleCustomizationToVdu(vfModuleCustomization); // THEN assertThat(vduModelInfo.getModelCustomizationUUID()).isEqualTo(MODEL_CUSTOMIZATION_UUID); @@ -76,14 +74,13 @@ public class VfModuleCustomizationToVduMapperTest { VfModuleCustomization vfModuleCustomization = createVfModuleCustomization(); vfModuleCustomization.setVolumeHeatEnv(createHeatEnvironment(HEAT_ENV_NAME, HEAT_ENV_CONTENT)); VfModule vfModule = createVfModule(); - vfModule.setVolumeHeatTemplate(createHeatTemplate( - MODULE_HEAT_TEMPLATE_NAME, MODULE_HEAT_TEMPLATE_BODY, - NESTED_TEMPLATE_NAME, NESTED_TEMPLATE_BODY)); + vfModule.setVolumeHeatTemplate(createHeatTemplate(MODULE_HEAT_TEMPLATE_NAME, MODULE_HEAT_TEMPLATE_BODY, + NESTED_TEMPLATE_NAME, NESTED_TEMPLATE_BODY)); vfModuleCustomization.setVfModule(vfModule); // WHEN - VduModelInfo vduModelInfo = new VfModuleCustomizationToVduMapper() - .mapVfModuleCustVolumeToVdu(vfModuleCustomization); + VduModelInfo vduModelInfo = + new VfModuleCustomizationToVduMapper().mapVfModuleCustVolumeToVdu(vfModuleCustomization); // THEN assertThat(vduModelInfo.getModelCustomizationUUID()).isEqualTo(MODEL_CUSTOMIZATION_UUID); @@ -119,7 +116,7 @@ public class VfModuleCustomizationToVduMapperTest { } private HeatTemplate createHeatTemplate(String moduleHeatTemplateName, String moduleHeatTemplateBody, - String childTemplateName, String childTemplateBody) { + String childTemplateName, String childTemplateBody) { HeatTemplate heatTemplate = new HeatTemplate(); heatTemplate.setTemplateName(moduleHeatTemplateName); heatTemplate.setTemplateBody(moduleHeatTemplateBody); @@ -137,10 +134,10 @@ public class VfModuleCustomizationToVduMapperTest { private List<VduArtifact> createExpectedVduArtifacts() { return Lists.newArrayList( - new VduArtifact(MODULE_HEAT_TEMPLATE_NAME, MODULE_HEAT_TEMPLATE_BODY.getBytes(), - ArtifactType.MAIN_TEMPLATE), - new VduArtifact(NESTED_TEMPLATE_NAME, NESTED_TEMPLATE_BODY.getBytes(), ArtifactType.NESTED_TEMPLATE), - new VduArtifact(CLOUD_FILE_NAME, CLOUD_FILE_BODY.getBytes(), ArtifactType.TEXT_FILE), - new VduArtifact(HEAT_ENV_NAME, HEAT_ENV_CONTENT.getBytes(), ArtifactType.ENVIRONMENT)); + new VduArtifact(MODULE_HEAT_TEMPLATE_NAME, MODULE_HEAT_TEMPLATE_BODY.getBytes(), + ArtifactType.MAIN_TEMPLATE), + new VduArtifact(NESTED_TEMPLATE_NAME, NESTED_TEMPLATE_BODY.getBytes(), ArtifactType.NESTED_TEMPLATE), + new VduArtifact(CLOUD_FILE_NAME, CLOUD_FILE_BODY.getBytes(), ArtifactType.TEXT_FILE), + new VduArtifact(HEAT_ENV_NAME, HEAT_ENV_CONTENT.getBytes(), ArtifactType.ENVIRONMENT)); } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/AllTestsTestSuite.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/AllTestsTestSuite.java new file mode 100644 index 0000000000..a7bddd3ada --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/AllTestsTestSuite.java @@ -0,0 +1,32 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.vnf; + +import org.junit.runner.RunWith; +import com.googlecode.junittoolbox.SuiteClasses; +import com.googlecode.junittoolbox.WildcardPatternSuite; + +@RunWith(WildcardPatternSuite.class) +@SuiteClasses("**/*Test.class") +public class AllTestsTestSuite { + // the class remains empty, + // used only as a holder for the above annotations +} diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BaseRestTestUtils.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BaseRestTestUtils.java index 017aa26758..102d748d56 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BaseRestTestUtils.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BaseRestTestUtils.java @@ -20,10 +20,14 @@ package org.onap.so.adapters.vnf; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import javax.ws.rs.core.MediaType; import org.apache.http.HttpStatus; import org.junit.Before; import org.junit.Test; @@ -37,125 +41,125 @@ import org.onap.so.db.catalog.beans.ServerType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.web.server.LocalServerPort; import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock; import org.springframework.http.HttpHeaders; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; - -import javax.ws.rs.core.MediaType; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.reset; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.tomakehurst.wiremock.WireMockServer; @RunWith(SpringRunner.class) -@SpringBootTest(classes = MsoOpenstackAdaptersApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@SpringBootTest(classes = MsoOpenstackAdaptersApplication.class, + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @ActiveProfiles("test") @AutoConfigureWireMock(port = 0) public abstract class BaseRestTestUtils { - @Value("${wiremock.server.port}") + @Value("${wiremock.server.port}") protected int wireMockPort; - @Autowired - CloudConfig cloudConfig; - - @Autowired - @Qualifier("JettisonStyle") - protected TestRestTemplate restTemplate; - - protected HttpHeaders headers = new HttpHeaders(); - - @LocalServerPort - private int port; - - public ObjectMapper mapper; - - public String orchestrator = "orchestrator"; - public String cloudEndpoint = "/v2.0"; - - - protected String readJsonFileAsString(String fileLocation) throws JsonParseException, JsonMappingException, IOException{ - ObjectMapper mapper = new ObjectMapper(); - JsonNode jsonNode = mapper.readTree(new File(fileLocation)); - return jsonNode.asText(); - } - - protected String createURLWithPort(String uri) { - return "http://localhost:" + port + uri; - } - - protected String readFile(String fileName) throws IOException { - try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - - while (line != null) { - sb.append(line); - sb.append("\n"); - line = br.readLine(); - } - return sb.toString(); - } - } - - /*** - * Before each test execution, updating IdentityUrl port value to the ramdom wireMockPort - * Since URL will be used as a rest call and required to be mocked in unit tests - */ - @Before - public void setUp() throws Exception { - reset(); - mapper = new ObjectMapper(); - CloudIdentity identity = new CloudIdentity(); - identity.setId("MTN13"); - identity.setMsoId("m93945"); - identity.setMsoPass("93937EA01B94A10A49279D4572B48369"); - identity.setAdminTenant("admin"); - identity.setMemberRole("admin"); - identity.setTenantMetadata(new Boolean(true)); - identity.setIdentityUrl("http://localhost:" + wireMockPort + cloudEndpoint); - - identity.setIdentityAuthenticationType(AuthenticationType.USERNAME_PASSWORD); - - CloudSite cloudSite = new CloudSite(); - cloudSite.setId("MTN13"); - cloudSite.setCloudVersion("3.0"); - cloudSite.setClli("MDT13"); - cloudSite.setRegionId("mtn13"); - cloudSite.setOrchestrator(orchestrator); - identity.setIdentityServerType(ServerType.KEYSTONE); - cloudSite.setIdentityService(identity); - - stubFor(get(urlPathEqualTo("/cloudSite/MTN13")).willReturn(aResponse() - .withBody(getBody(mapper.writeValueAsString(cloudSite),wireMockPort, "")) - .withHeader(org.apache.http.HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) - .withStatus(HttpStatus.SC_OK))); - stubFor(get(urlPathEqualTo("/cloudSite/DEFAULT")).willReturn(aResponse() - .withBody(getBody(mapper.writeValueAsString(cloudSite),wireMockPort, "")) - .withHeader(org.apache.http.HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON) - .withStatus(HttpStatus.SC_OK))); - stubFor(get(urlPathEqualTo("/cloudIdentity/MTN13")).willReturn(aResponse() - .withBody(getBody(mapper.writeValueAsString(identity),wireMockPort, "")) - .withHeader(org.apache.http.HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON) - .withStatus(HttpStatus.SC_OK))); - cloudConfig.getCloudSite("MTN13").get().getIdentityService().setIdentityUrl("http://localhost:" + wireMockPort + cloudEndpoint); - } - - protected static String getBody(String body, int port, String urlPath) throws IOException { - return body.replaceAll("port", "http://localhost:" + port + urlPath); - } - - @Test - public void testNothing(){ - - } + + @Autowired + protected WireMockServer wireMockServer; + + @Autowired + CloudConfig cloudConfig; + + @Autowired + @Qualifier("JettisonStyle") + protected TestRestTemplate restTemplate; + + protected HttpHeaders headers = new HttpHeaders(); + + @LocalServerPort + private int port; + + public ObjectMapper mapper; + + public String orchestrator = "orchestrator"; + public String cloudEndpoint = "/v2.0"; + + + protected String readJsonFileAsString(String fileLocation) + throws JsonParseException, JsonMappingException, IOException { + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonNode = mapper.readTree(new File(fileLocation)); + return jsonNode.asText(); + } + + protected String createURLWithPort(String uri) { + return "http://localhost:" + port + uri; + } + + protected String readFile(String fileName) throws IOException { + try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { + StringBuilder sb = new StringBuilder(); + String line = br.readLine(); + + while (line != null) { + sb.append(line); + sb.append("\n"); + line = br.readLine(); + } + return sb.toString(); + } + } + + /*** + * Before each test execution, updating IdentityUrl port value to the ramdom wireMockPort Since URL will be used as + * a rest call and required to be mocked in unit tests + */ + @Before + public void setUp() throws Exception { + wireMockServer.resetAll(); + mapper = new ObjectMapper(); + CloudIdentity identity = new CloudIdentity(); + identity.setId("MTN13"); + identity.setMsoId("m93945"); + identity.setMsoPass("93937EA01B94A10A49279D4572B48369"); + identity.setAdminTenant("admin"); + identity.setMemberRole("admin"); + identity.setTenantMetadata(new Boolean(true)); + identity.setIdentityUrl("http://localhost:" + wireMockPort + cloudEndpoint); + + identity.setIdentityAuthenticationType(AuthenticationType.USERNAME_PASSWORD); + + CloudSite cloudSite = new CloudSite(); + cloudSite.setId("MTN13"); + cloudSite.setCloudVersion("3.0"); + cloudSite.setClli("MDT13"); + cloudSite.setRegionId("mtn13"); + cloudSite.setOrchestrator(orchestrator); + identity.setIdentityServerType(ServerType.KEYSTONE); + cloudSite.setIdentityService(identity); + + wireMockServer.stubFor(get(urlPathEqualTo("/cloudSite/MTN13")) + .willReturn(aResponse().withBody(getBody(mapper.writeValueAsString(cloudSite), wireMockPort, "")) + .withHeader(org.apache.http.HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(get(urlPathEqualTo("/cloudSite/DEFAULT")) + .willReturn(aResponse().withBody(getBody(mapper.writeValueAsString(cloudSite), wireMockPort, "")) + .withHeader(org.apache.http.HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(get(urlPathEqualTo("/cloudIdentity/MTN13")) + .willReturn(aResponse().withBody(getBody(mapper.writeValueAsString(identity), wireMockPort, "")) + .withHeader(org.apache.http.HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withStatus(HttpStatus.SC_OK))); + cloudConfig.getCloudSite("MTN13").get().getIdentityService() + .setIdentityUrl("http://localhost:" + wireMockPort + cloudEndpoint); + } + + protected static String getBody(String body, int port, String urlPath) throws IOException { + return body.replaceAll("port", "http://localhost:" + port + urlPath); + } + + @Test + public void testNothing() { + + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BpelRestClientTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BpelRestClientTest.java index 4b2fa8138a..883009216f 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BpelRestClientTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BpelRestClientTest.java @@ -21,33 +21,31 @@ package org.onap.so.adapters.vnf; import static org.junit.Assert.assertEquals; - import javax.inject.Provider; - import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.web.server.LocalServerPort; -public class BpelRestClientTest extends BaseRestTestUtils{ - - - @LocalServerPort - private int port; - @Autowired - private Provider<BpelRestClient> clientProvider; - - @Test - public void verifyPropertiesRead() { - BpelRestClient client = clientProvider.get(); - - assertEquals(5, client.getRetryCount()); - assertEquals(30, client.getConnectTimeout()); - assertEquals("test:test", client.getCredentials()); - assertEquals(30, client.getSocketTimeout()); - assertEquals("408, 429, 500, 502, 503, 504, 900", client.getRetryList()); - assertEquals(-15, client.getRetryInterval()); - - } +public class BpelRestClientTest extends BaseRestTestUtils { + + + @LocalServerPort + private int port; + @Autowired + private Provider<BpelRestClient> clientProvider; + + @Test + public void verifyPropertiesRead() { + BpelRestClient client = clientProvider.get(); + + assertEquals(5, client.getRetryCount()); + assertEquals(30, client.getConnectTimeout()); + assertEquals("test:test", client.getCredentials()); + assertEquals(30, client.getSocketTimeout()); + assertEquals("408, 429, 500, 502, 503, 504, 900", client.getRetryList()); + assertEquals(-15, client.getRetryInterval()); + + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsyncImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsyncImplTest.java index 3ebaea9c2c..46d9f89303 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsyncImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterAsyncImplTest.java @@ -21,138 +21,129 @@ package org.onap.so.adapters.vnf; -import org.apache.http.HttpStatus; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.onap.so.adapters.vnf.exceptions.VnfException; -import org.onap.so.entity.MsoRequest; -import org.onap.so.openstack.beans.VnfRollback; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; - -import java.util.HashMap; -import java.util.Map; - import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.containing; import static com.github.tomakehurst.wiremock.client.WireMock.post; import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; -import static com.github.tomakehurst.wiremock.client.WireMock.verify; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doThrow; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_200; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess; +import java.util.HashMap; +import java.util.Map; +import org.apache.http.HttpStatus; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.so.entity.MsoRequest; +import org.onap.so.openstack.beans.VnfRollback; +import org.springframework.beans.factory.annotation.Autowired; public class MsoVnfAdapterAsyncImplTest extends BaseRestTestUtils { - @Autowired - MsoVnfAdapterAsyncImpl instance; - - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - @Test - public void healthCheckVNFTest() { - instance.healthCheckA(); - } - - @Test - public void createVNFTest() throws Exception { - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); - stubFor(post(urlPathEqualTo("/notify/adapterNotify/updateVnfNotificationRequest")).withRequestBody - (containing("messageId")) - .willReturn(aResponse().withStatus(HttpStatus.SC_OK))); - - String vnfName = "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId"; - String notificationUrl = "http://localhost:"+wireMockPort+"/notify/adapterNotify/updateVnfNotificationRequest"; - instance.createVnfA("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", - "volumeGroupHeatStackId|1", new HashMap<String, Object>(), Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, "messageId", - msoRequest, notificationUrl); - - verify(1,postRequestedFor(urlEqualTo("/notify/adapterNotify/updateVnfNotificationRequest"))); - } - - @Test - public void createVNFTest_Exception() throws Exception { - String notificationUrl = "http://localhost:"+wireMockPort+"/notify/adapterNotify/updateVnfNotificationRequest"; - instance.createVnfA("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", - "volumeGroupHeatStackId|1", new HashMap<String, Object>(), Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, "messageId", - null, notificationUrl); - - verify(1,postRequestedFor(urlEqualTo("/notify/adapterNotify/updateVnfNotificationRequest"))); - - } - - @Test - public void updateVnfTest() throws Exception{ - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - stubFor(post(urlPathEqualTo("/notify/adapterNotify/updateVnfNotificationRequest")).withRequestBody - (containing("messageId")) - .willReturn(aResponse().withStatus(HttpStatus.SC_OK))); - String notificationUrl = "http://localhost:"+wireMockPort+"/notify/adapterNotify/updateVnfNotificationRequest"; - instance.updateVnfA("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", - "volumeGroupHeatStackId|1", map, "messageId", msoRequest, - notificationUrl); - } - - @Test - public void updateVnfTest_Exception() throws Exception{ - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - stubFor(post(urlPathEqualTo("/notify/adapterNotify/updateVnfNotificationRequest")).withRequestBody - (containing("messageId")) - .willReturn(aResponse().withStatus(HttpStatus.SC_OK))); - String notificationUrl = "http://localhost:"+wireMockPort+"/notify/adapterNotify/updateVnfNotificationRequest"; - instance.updateVnfA("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", - "volumeGroupHeatStackId|1", map, "messageId", msoRequest, - notificationUrl); - verify(1,postRequestedFor(urlEqualTo("/notify/adapterNotify/updateVnfNotificationRequest"))); - } - - @Test - public void queryVnfTest() { - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - instance.queryVnfA("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", "messageId", msoRequest, - "http://org.onap.so/notify/adapterNotify/updateVnfNotificationRequest"); - } - - @Test - public void deleteVnfTest() { - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - instance.deleteVnfA("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", "messageId", msoRequest, - "http://org.onap.so/notify/adapterNotify/updateVnfNotificationRequest"); - } - - @Test - public void rollbackVnfTest() { - VnfRollback vnfRollBack = new VnfRollback(); - vnfRollBack.setCloudSiteId("mdt1"); - vnfRollBack.setTenantId("88a6ca3ee0394ade9403f075db23167e"); - vnfRollBack.setVnfId("ff5256d1-5a33-55df-13ab-12abad84e7ff"); - instance.rollbackVnfA(vnfRollBack, "messageId", - "http://org.onap.so/notify/adapterNotify/updateVnfNotificationRequest"); - } + @Autowired + MsoVnfAdapterAsyncImpl instance; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Test + public void healthCheckVNFTest() { + instance.healthCheckA(); + } + + @Test + public void createVNFTest() throws Exception { + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); + wireMockServer.stubFor(post(urlPathEqualTo("/notify/adapterNotify/updateVnfNotificationRequest")) + .withRequestBody(containing("messageId")).willReturn(aResponse().withStatus(HttpStatus.SC_OK))); + + String vnfName = "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId"; + String notificationUrl = + "http://localhost:" + wireMockPort + "/notify/adapterNotify/updateVnfNotificationRequest"; + instance.createVnfA("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", + "volumeGroupHeatStackId|1", new HashMap<String, Object>(), Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, + "messageId", msoRequest, notificationUrl); + + wireMockServer.verify(1, postRequestedFor(urlEqualTo("/notify/adapterNotify/updateVnfNotificationRequest"))); + } + + @Test + public void createVNFTest_Exception() throws Exception { + String notificationUrl = + "http://localhost:" + wireMockPort + "/notify/adapterNotify/updateVnfNotificationRequest"; + instance.createVnfA("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", + "volumeGroupHeatStackId|1", new HashMap<String, Object>(), Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, + "messageId", null, notificationUrl); + + wireMockServer.verify(1, postRequestedFor(urlEqualTo("/notify/adapterNotify/updateVnfNotificationRequest"))); + + } + + @Test + public void updateVnfTest() throws Exception { + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + wireMockServer.stubFor(post(urlPathEqualTo("/notify/adapterNotify/updateVnfNotificationRequest")) + .withRequestBody(containing("messageId")).willReturn(aResponse().withStatus(HttpStatus.SC_OK))); + String notificationUrl = + "http://localhost:" + wireMockPort + "/notify/adapterNotify/updateVnfNotificationRequest"; + instance.updateVnfA("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", + "volumeGroupHeatStackId|1", map, "messageId", msoRequest, notificationUrl); + } + + @Test + public void updateVnfTest_Exception() throws Exception { + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + wireMockServer.stubFor(post(urlPathEqualTo("/notify/adapterNotify/updateVnfNotificationRequest")) + .withRequestBody(containing("messageId")).willReturn(aResponse().withStatus(HttpStatus.SC_OK))); + String notificationUrl = + "http://localhost:" + wireMockPort + "/notify/adapterNotify/updateVnfNotificationRequest"; + instance.updateVnfA("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", + "volumeGroupHeatStackId|1", map, "messageId", msoRequest, notificationUrl); + wireMockServer.verify(1, postRequestedFor(urlEqualTo("/notify/adapterNotify/updateVnfNotificationRequest"))); + } + + @Test + public void queryVnfTest() { + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + instance.queryVnfA("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", "messageId", msoRequest, + "http://org.onap.so/notify/adapterNotify/updateVnfNotificationRequest"); + } + + @Test + public void deleteVnfTest() { + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + instance.deleteVnfA("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", "messageId", + msoRequest, "http://org.onap.so/notify/adapterNotify/updateVnfNotificationRequest"); + } + + @Test + public void rollbackVnfTest() { + VnfRollback vnfRollBack = new VnfRollback(); + vnfRollBack.setCloudSiteId("mdt1"); + vnfRollBack.setCloudOwner("CloudOwner"); + vnfRollBack.setTenantId("88a6ca3ee0394ade9403f075db23167e"); + vnfRollBack.setVnfId("ff5256d1-5a33-55df-13ab-12abad84e7ff"); + instance.rollbackVnfA(vnfRollBack, "messageId", + "http://org.onap.so/notify/adapterNotify/updateVnfNotificationRequest"); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterImplTest.java index be3b54e23f..0c56222558 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterImplTest.java @@ -21,7 +21,20 @@ package org.onap.so.adapters.vnf; -import com.github.tomakehurst.wiremock.client.WireMock; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static org.mockito.Mockito.when; +import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_200; +import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_404; +import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutStack; +import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess; +import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenstackGetWithResponse; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import javax.xml.ws.Holder; import org.apache.http.HttpStatus; import org.junit.Before; import org.junit.Ignore; @@ -38,8 +51,6 @@ import org.onap.so.db.catalog.beans.HeatTemplateParam; import org.onap.so.db.catalog.beans.VfModule; import org.onap.so.db.catalog.beans.VfModuleCustomization; import org.onap.so.db.catalog.beans.VnfResource; -import org.onap.so.db.catalog.data.repository.VFModuleCustomizationRepository; -import org.onap.so.db.catalog.data.repository.VnfResourceRepository; import org.onap.so.entity.MsoRequest; import org.onap.so.openstack.beans.HeatStatus; import org.onap.so.openstack.beans.StackInfo; @@ -47,517 +58,510 @@ import org.onap.so.openstack.beans.VnfRollback; import org.onap.so.openstack.exceptions.MsoException; import org.onap.so.openstack.utils.MsoHeatUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.xml.ws.Holder; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.when; -import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_200; -import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_404; -import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutStack; -import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess; -import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenstackGetWithResponse; +import com.github.tomakehurst.wiremock.client.WireMock; public class MsoVnfAdapterImplTest extends BaseRestTestUtils { - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - @Autowired - private MsoHeatUtils heatUtils; - - @Autowired - MsoVnfAdapterImpl instance; - - String vnfName = "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId"; - - @Before - public void before() throws Exception { - MockitoAnnotations.initMocks(this); - WireMock.reset(); - setUp(); - } - - @Test - @Ignore - public void healthCheckVNFTest() { - MsoVnfAdapterImpl instance = new MsoVnfAdapterImpl(); - instance.healthCheck(); - } - - @Test - public void createVnfTest() throws Exception { - StackInfo info = new StackInfo(); - info.setStatus(HeatStatus.CREATED); - - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("MTN13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_HeatStatusUpdating() throws Exception { - expectedException.expect(VnfAlreadyExists.class); - mockOpenStackResponseAccess(wireMockPort); - - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Stack_Updating_VfModule.json") - .withStatus(HttpStatus.SC_OK))); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_HeatStatusUpdated() throws Exception { - expectedException.expect(VnfAlreadyExists.class); - mockOpenStackResponseAccess(wireMockPort); - - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_StackId.json") - .withStatus(HttpStatus.SC_OK))); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_HeatStatusFailed() throws Exception { - expectedException.expect(VnfAlreadyExists.class); - mockOpenStackResponseAccess(wireMockPort); - - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Stack_Failed_VfModule.json") - .withStatus(HttpStatus.SC_OK))); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_HeatStatusCreated() throws Exception { - expectedException.expect(VnfAlreadyExists.class); - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackGetStackVfModule_200(); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.TRUE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - - @Test - public void createVnfTest_ExceptionInGettingHeat() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_NestedHeatStatusNotFound() throws Exception { - expectedException.expect(VnfException.class); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_404(); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_ExceptionInGettingNestedHeat() throws Exception { - expectedException.expect(VnfException.class); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_404(); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_NestedBaseHeatStatus_NotFound() throws Exception { - expectedException.expect(VnfException.class); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_404(); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json") - .withStatus(HttpStatus.SC_OK))); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_ExceptionInGettingBaseNestedHeat() throws Exception { - expectedException.expect(VnfException.class); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_404(); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")).willReturn(aResponse().withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/baseVfHeatStackId")).willReturn(aResponse().withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_ExceptionInCreateStack() throws Exception { - expectedException.expect(VnfException.class); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_404(); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")).willReturn(aResponse().withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/baseVfHeatStackId")).willReturn(aResponse().withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); - - VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); - VfModule vfModule = new VfModule(); - vfModule.setIsBase(false); - - HeatTemplate heatTemplate = new HeatTemplate(); - heatTemplate.setTemplateBody(""); - heatTemplate.setTimeoutMinutes(200); - vfModule.setModuleHeatTemplate(heatTemplate); - vfModuleCustomization.setVfModule(vfModule); - - HeatEnvironment heatEnvironment = new HeatEnvironment(); - heatEnvironment.setEnvironment("ist"); - vfModuleCustomization.setHeatEnvironment(heatEnvironment); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_ModelCustUuidIsNull() throws Exception { - expectedException.expect(VnfException.class); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_404(); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")).willReturn(aResponse().withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/baseVfHeatStackId")).willReturn(aResponse().withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); - - VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); - VfModule vfModule = new VfModule(); - vfModule.setIsBase(false); - - HeatTemplate heatTemplate = new HeatTemplate(); - heatTemplate.setTemplateBody(""); - heatTemplate.setTimeoutMinutes(200); - vfModule.setModuleHeatTemplate(heatTemplate); - vfModuleCustomization.setVfModule(vfModule); - - HeatEnvironment heatEnvironment = new HeatEnvironment(); - heatEnvironment.setEnvironment("ist"); - vfModuleCustomization.setHeatEnvironment(heatEnvironment); - - VnfResource vnfResource = new VnfResource(); - vnfResource.setAicVersionMin("1"); - vnfResource.setAicVersionMin("3"); - - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "XVFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", null, map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void createVnfTest_HeatEnvironment_ContainsParameters() throws Exception { - expectedException.expect(VnfException.class); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_404(); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")).willReturn(aResponse().withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/baseVfHeatStackId")).willReturn(aResponse().withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); - - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - private MsoRequest getMsoRequest() { - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - return msoRequest; - } - - @Test - public void updateVnfTest_CloudSiteIdNotFound() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = getMsoRequest(); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.updateVfModule("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", "vfModuleStackId", - "88a6ca3ee0394ade9403f075db23167e", map, msoRequest, new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void updateVnfTest_HeatStackNotFound() throws Exception { - expectedException.expect(VnfNotFound.class); - MsoRequest msoRequest = getMsoRequest(); - mockOpenStackResponseAccess(wireMockPort); - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.updateVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", - "88a6ca3ee0394ade9403f075db23167e", map, msoRequest, new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void updateVnfTest_ExceptionInGettingNestedHeatStack() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = getMsoRequest(); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.updateVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", - "88a6ca3ee0394ade9403f075db23167e", map, msoRequest, new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void updateVnfTest_NestedHeatStackNotFound() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = getMsoRequest(); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withStatus(HttpStatus.SC_NOT_FOUND))); - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.updateVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", - "88a6ca3ee0394ade9403f075db23167e", map, msoRequest, new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void updateVnfTest_ExceptionInGettingNestedBaseHeatStack() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = getMsoRequest(); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/volumeGroupHeatStackId",HttpStatus.SC_OK,"OpenstackResponse_Stack_Created_VfModule.json"); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/baseVfHeatStackId",HttpStatus.SC_INTERNAL_SERVER_ERROR,"OpenstackResponse_Stack_Created_VfModule.json"); - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.updateVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", - "88a6ca3ee0394ade9403f075db23167e", map, msoRequest, new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void updateVnfTest_NestedBaseHeatStackNotFound() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = getMsoRequest(); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/volumeGroupHeatStackId",HttpStatus.SC_OK,"OpenstackResponse_Stack_Created_VfModule.json"); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/baseVfHeatStackId",HttpStatus.SC_NOT_FOUND,"OpenstackResponse_Stack_Created_VfModule.json"); - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.updateVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", - "88a6ca3ee0394ade9403f075db23167e", map, msoRequest, new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void updateVnfTest_MissingParams() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = getMsoRequest(); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/volumeGroupHeatStackId",HttpStatus.SC_OK,"OpenstackResponse_Stack_Created_VfModule.json"); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/baseVfHeatStackId",HttpStatus.SC_OK,"OpenstackResponse_Stack_Created_VfModule.json"); - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.updateVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", - "88a6ca3ee0394ade9403f075db23167e", map, msoRequest, new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void updateVnfTest_UpdateStackException() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = getMsoRequest(); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/volumeGroupHeatStackId",HttpStatus.SC_OK,"OpenstackResponse_Stack_Created_VfModule.json"); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/baseVfHeatStackId",HttpStatus.SC_OK,"OpenstackResponse_Stack_Created_VfModule.json"); - - VfModuleCustomization vfModuleCustomization = getVfModuleCustomization(); - vfModuleCustomization.getVfModule().getModuleHeatTemplate().setParameters(new HashSet<>()); - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.updateVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", - "88a6ca3ee0394ade9403f075db23167e", map, msoRequest, new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - public void updateVnfTest() throws Exception { - MsoRequest msoRequest = getMsoRequest(); - mockOpenStackResponseAccess(wireMockPort); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/"+vnfName,HttpStatus.SC_OK,"OpenstackResponse_Stack_UpdateComplete.json"); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/volumeGroupHeatStackId",HttpStatus.SC_OK,"OpenstackResponse_Stack_Created_VfModule.json"); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/baseVfHeatStackId",HttpStatus.SC_OK,"OpenstackResponse_Stack_Created_VfModule.json"); - mockOpenStackPutStack("null/stackId", HttpStatus.SC_OK); - mockOpenstackGetWithResponse("/mockPublicUrl/stacks/null/stackId",HttpStatus.SC_OK,"OpenstackResponse_Stack_UpdateComplete.json"); - - VfModuleCustomization vfModuleCustomization = getVfModuleCustomization(); - vfModuleCustomization.getVfModule().getModuleHeatTemplate().setParameters(new HashSet<>()); - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - instance.updateVfModule("MTN13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", - "b4ea86b4-253f-11e7-93ae-92361f002671", map, msoRequest, new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); - } - - @Test - @Ignore - public void deleteVnfTest() throws MsoException { - - Map<String, Object> outputs = new HashMap<>(); - outputs.put("Key1", "value1"); - when(heatUtils.queryStackForOutputs("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12")).thenReturn(outputs); - - MsoVnfAdapterImpl instance = new MsoVnfAdapterImpl(); - MsoRequest msoRequest = getMsoRequest(); - try { - instance.deleteVfModule("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", msoRequest, - new Holder<Map<String, String>>()); - } catch (Exception e) { - - } - } - - private VfModuleCustomization getVfModuleCustomization() { - VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); - VfModule vfModule = new VfModule(); - vfModule.setIsBase(false); - - HeatTemplate heatTemplate = new HeatTemplate(); - heatTemplate.setTemplateBody(""); - heatTemplate.setTimeoutMinutes(200); - HeatTemplateParam heatTemplateParam = new HeatTemplateParam(); - heatTemplateParam.setParamAlias("ParamAlias"); - heatTemplateParam.setRequired(true); - heatTemplateParam.setParamName("test"); - Set set = new HashSet(); - set.add(heatTemplateParam); - heatTemplate.setParameters(set); - vfModule.setModuleHeatTemplate(heatTemplate); - vfModuleCustomization.setVfModule(vfModule); - - HeatEnvironment heatEnvironment = new HeatEnvironment(); - heatEnvironment.setEnvironment("parameters:ist"); - vfModuleCustomization.setHeatEnvironment(heatEnvironment); - return vfModuleCustomization; - } + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Autowired + private MsoHeatUtils heatUtils; + + @Autowired + MsoVnfAdapterImpl instance; + + String vnfName = "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId"; + + @Test + @Ignore + public void healthCheckVNFTest() { + MsoVnfAdapterImpl instance = new MsoVnfAdapterImpl(); + instance.healthCheck(); + } + + @Test + public void createVnfTest() throws Exception { + StackInfo info = new StackInfo(); + info.setStatus(HeatStatus.CREATED); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("MTN13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_HeatStatusUpdating() throws Exception { + expectedException.expect(VnfAlreadyExists.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + wireMockServer.stubFor(get( + urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Stack_Updating_VfModule.json") + .withStatus(HttpStatus.SC_OK))); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_HeatStatusUpdated() throws Exception { + expectedException.expect(VnfAlreadyExists.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + wireMockServer.stubFor(get( + urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_StackId.json").withStatus(HttpStatus.SC_OK))); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_HeatStatusFailed() throws Exception { + expectedException.expect(VnfAlreadyExists.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + wireMockServer.stubFor(get( + urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Stack_Failed_VfModule.json") + .withStatus(HttpStatus.SC_OK))); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_HeatStatusCreated() throws Exception { + expectedException.expect(VnfAlreadyExists.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackGetStackVfModule_200(wireMockServer); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.TRUE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + + @Test + public void createVnfTest_ExceptionInGettingHeat() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_NestedHeatStatusNotFound() throws Exception { + expectedException.expect(VnfException.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_404(wireMockServer); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_ExceptionInGettingNestedHeat() throws Exception { + expectedException.expect(VnfException.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_404(wireMockServer); + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_NestedBaseHeatStatus_NotFound() throws Exception { + expectedException.expect(VnfException.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_404(wireMockServer); + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_ExceptionInGettingBaseNestedHeat() throws Exception { + expectedException.expect(VnfException.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_404(wireMockServer); + wireMockServer + .stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")).willReturn(aResponse() + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/baseVfHeatStackId")) + .willReturn(aResponse().withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_ExceptionInCreateStack() throws Exception { + expectedException.expect(VnfException.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_404(wireMockServer); + wireMockServer + .stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")).willReturn(aResponse() + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/baseVfHeatStackId")).willReturn(aResponse() + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); + + VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); + VfModule vfModule = new VfModule(); + vfModule.setIsBase(false); + + HeatTemplate heatTemplate = new HeatTemplate(); + heatTemplate.setTemplateBody(""); + heatTemplate.setTimeoutMinutes(200); + vfModule.setModuleHeatTemplate(heatTemplate); + vfModuleCustomization.setVfModule(vfModule); + + HeatEnvironment heatEnvironment = new HeatEnvironment(); + heatEnvironment.setEnvironment("ist"); + vfModuleCustomization.setHeatEnvironment(heatEnvironment); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId", "baseVfHeatStackId", "9b339a61-69ca-465f-86b8-1c72c582b8e8", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_ModelCustUuidIsNull() throws Exception { + expectedException.expect(VnfException.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_404(wireMockServer); + wireMockServer + .stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")).willReturn(aResponse() + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/baseVfHeatStackId")).willReturn(aResponse() + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); + + VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); + VfModule vfModule = new VfModule(); + vfModule.setIsBase(false); + + HeatTemplate heatTemplate = new HeatTemplate(); + heatTemplate.setTemplateBody(""); + heatTemplate.setTimeoutMinutes(200); + vfModule.setModuleHeatTemplate(heatTemplate); + vfModuleCustomization.setVfModule(vfModule); + + HeatEnvironment heatEnvironment = new HeatEnvironment(); + heatEnvironment.setEnvironment("ist"); + vfModuleCustomization.setHeatEnvironment(heatEnvironment); + + VnfResource vnfResource = new VnfResource(); + vnfResource.setAicVersionMin("1"); + vnfResource.setAicVersionMin("3"); + + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "XVFMOD", "volumeGroupHeatStackId", "baseVfHeatStackId", null, map, Boolean.FALSE, Boolean.TRUE, + Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), + new Holder<VnfRollback>()); + } + + @Test + public void createVnfTest_HeatEnvironment_ContainsParameters() throws Exception { + expectedException.expect(VnfException.class); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_404(wireMockServer); + wireMockServer + .stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")).willReturn(aResponse() + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/baseVfHeatStackId")).willReturn(aResponse() + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); + + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", + "VFMOD", "volumeGroupHeatStackId", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + private MsoRequest getMsoRequest() { + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + return msoRequest; + } + + @Test + public void updateVnfTest_CloudSiteIdNotFound() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = getMsoRequest(); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.updateVfModule("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", + "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", "vfModuleStackId", + "88a6ca3ee0394ade9403f075db23167e", map, msoRequest, new Holder<Map<String, String>>(), + new Holder<VnfRollback>()); + } + + @Test + public void updateVnfTest_HeatStackNotFound() throws Exception { + expectedException.expect(VnfNotFound.class); + MsoRequest msoRequest = getMsoRequest(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.updateVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", + "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", "88a6ca3ee0394ade9403f075db23167e", + map, msoRequest, new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void updateVnfTest_ExceptionInGettingNestedHeatStack() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = getMsoRequest(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.updateVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", + "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", "88a6ca3ee0394ade9403f075db23167e", + map, msoRequest, new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void updateVnfTest_NestedHeatStackNotFound() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = getMsoRequest(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")).willReturn( + aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_NOT_FOUND))); + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.updateVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", + "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", "88a6ca3ee0394ade9403f075db23167e", + map, msoRequest, new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void updateVnfTest_ExceptionInGettingNestedBaseHeatStack() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = getMsoRequest(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/volumeGroupHeatStackId", HttpStatus.SC_OK, + "OpenstackResponse_Stack_Created_VfModule.json"); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/baseVfHeatStackId", + HttpStatus.SC_INTERNAL_SERVER_ERROR, "OpenstackResponse_Stack_Created_VfModule.json"); + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.updateVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", + "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", "88a6ca3ee0394ade9403f075db23167e", + map, msoRequest, new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void updateVnfTest_NestedBaseHeatStackNotFound() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = getMsoRequest(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/volumeGroupHeatStackId", HttpStatus.SC_OK, + "OpenstackResponse_Stack_Created_VfModule.json"); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/baseVfHeatStackId", HttpStatus.SC_NOT_FOUND, + "OpenstackResponse_Stack_Created_VfModule.json"); + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.updateVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", + "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", "88a6ca3ee0394ade9403f075db23167e", + map, msoRequest, new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void updateVnfTest_MissingParams() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = getMsoRequest(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/volumeGroupHeatStackId", HttpStatus.SC_OK, + "OpenstackResponse_Stack_Created_VfModule.json"); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/baseVfHeatStackId", HttpStatus.SC_OK, + "OpenstackResponse_Stack_Created_VfModule.json"); + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.updateVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", + "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", "88a6ca3ee0394ade9403f075db23167e", + map, msoRequest, new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void updateVnfTest_UpdateStackException() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = getMsoRequest(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/volumeGroupHeatStackId", HttpStatus.SC_OK, + "OpenstackResponse_Stack_Created_VfModule.json"); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/baseVfHeatStackId", HttpStatus.SC_OK, + "OpenstackResponse_Stack_Created_VfModule.json"); + + VfModuleCustomization vfModuleCustomization = getVfModuleCustomization(); + vfModuleCustomization.getVfModule().getModuleHeatTemplate().setParameters(new HashSet<>()); + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.updateVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", + "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", "88a6ca3ee0394ade9403f075db23167e", + map, msoRequest, new Holder<Map<String, String>>(), new Holder<VnfRollback>()); + } + + @Test + public void updateVnfTest() throws Exception { + MsoRequest msoRequest = getMsoRequest(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/" + vnfName, HttpStatus.SC_OK, + "OpenstackResponse_Stack_UpdateComplete.json"); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/volumeGroupHeatStackId", HttpStatus.SC_OK, + "OpenstackResponse_Stack_Created_VfModule.json"); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/baseVfHeatStackId", HttpStatus.SC_OK, + "OpenstackResponse_Stack_Created_VfModule.json"); + mockOpenStackPutStack(wireMockServer, "null/stackId", HttpStatus.SC_OK); + mockOpenstackGetWithResponse(wireMockServer, "/mockPublicUrl/stacks/null/stackId", HttpStatus.SC_OK, + "OpenstackResponse_Stack_UpdateComplete.json"); + + VfModuleCustomization vfModuleCustomization = getVfModuleCustomization(); + vfModuleCustomization.getVfModule().getModuleHeatTemplate().setParameters(new HashSet<>()); + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + instance.updateVfModule("MTN13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD", + "volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId", + "b4ea86b4-253f-11e7-93ae-92361f002671", map, msoRequest, new Holder<Map<String, String>>(), + new Holder<VnfRollback>()); + } + + @Test + @Ignore + public void deleteVnfTest() throws MsoException { + + Map<String, Object> outputs = new HashMap<>(); + outputs.put("Key1", "value1"); + when(heatUtils.queryStackForOutputs("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12")) + .thenReturn(outputs); + + MsoVnfAdapterImpl instance = new MsoVnfAdapterImpl(); + MsoRequest msoRequest = getMsoRequest(); + try { + instance.deleteVfModule("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", msoRequest, + new Holder<Map<String, String>>()); + } catch (Exception e) { + + } + } + + private VfModuleCustomization getVfModuleCustomization() { + VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); + VfModule vfModule = new VfModule(); + vfModule.setIsBase(false); + + HeatTemplate heatTemplate = new HeatTemplate(); + heatTemplate.setTemplateBody(""); + heatTemplate.setTimeoutMinutes(200); + HeatTemplateParam heatTemplateParam = new HeatTemplateParam(); + heatTemplateParam.setParamAlias("ParamAlias"); + heatTemplateParam.setRequired(true); + heatTemplateParam.setParamName("test"); + Set set = new HashSet(); + set.add(heatTemplateParam); + heatTemplate.setParameters(set); + vfModule.setModuleHeatTemplate(heatTemplate); + vfModuleCustomization.setVfModule(vfModule); + + HeatEnvironment heatEnvironment = new HeatEnvironment(); + heatEnvironment.setEnvironment("parameters:ist"); + vfModuleCustomization.setHeatEnvironment(heatEnvironment); + return vfModuleCustomization; + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java index 44843900fc..3e5d4ad29a 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java @@ -21,6 +21,14 @@ package org.onap.so.adapters.vnf; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static org.junit.Assert.assertTrue; +import java.util.HashMap; +import java.util.Map; +import javax.xml.ws.Holder; import org.apache.http.HttpStatus; import org.junit.Before; import org.junit.Rule; @@ -33,277 +41,269 @@ import org.onap.so.entity.MsoRequest; import org.onap.so.openstack.beans.VnfRollback; import org.springframework.beans.factory.annotation.Autowired; -import javax.xml.ws.Holder; -import java.util.HashMap; -import java.util.Map; +public class MsoVnfCloudifyAdapterImplTest extends BaseRestTestUtils { -import static com.github.tomakehurst.wiremock.client.WireMock.*; + @Rule + public ExpectedException expectedException = ExpectedException.none(); -public class MsoVnfCloudifyAdapterImplTest extends BaseRestTestUtils { + @Autowired + private MsoVnfCloudifyAdapterImpl instance; - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - @Autowired - private MsoVnfCloudifyAdapterImpl instance; - - @Autowired - private CloudConfig cloudConfig; - - @Before - public void before() throws Exception { - super.setUp(); - CloudifyManager cloudifyManager = new CloudifyManager(); - cloudifyManager.setId("mtn13"); - cloudifyManager.setCloudifyUrl("http://localhost:"+wireMockPort+"/v2.0"); - cloudifyManager.setUsername("m93945"); - cloudifyManager.setPassword("93937EA01B94A10A49279D4572B48369"); - } - - @Test + @Autowired + private CloudConfig cloudConfig; + + @Before + public void before() throws Exception { + super.setUp(); + CloudifyManager cloudifyManager = new CloudifyManager(); + cloudifyManager.setId("mtn13"); + cloudifyManager.setCloudifyUrl("http://localhost:" + wireMockPort + "/v2.0"); + cloudifyManager.setUsername("m93945"); + cloudifyManager.setPassword("93937EA01B94A10A49279D4572B48369"); + } + + @Test public void queryVnfExceptionTest() throws Exception { - reset(); - expectedException.expect(VnfException.class); MsoRequest msoRequest = new MsoRequest(); msoRequest.setRequestId("12345"); msoRequest.setServiceInstanceId("12345"); + Holder<Map<String, String>> outputs = new Holder<>(); + instance.queryVnf("siteid", "CloudOwner", "1234", "vfname", msoRequest, new Holder<>(), new Holder<>(), + new Holder<>(), outputs); - instance.queryVnf("siteid", "1234", "vfname", - msoRequest, new Holder<>(), new Holder<>(), new Holder<>(), - new Holder<>()); + assertTrue(outputs.value.isEmpty()); } - @Test - public void queryVnfTest() throws Exception { - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname")).willReturn(aResponse() - .withBody("{ \"id\": \"123\" }") - .withStatus(HttpStatus.SC_OK))); - - stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname/outputs")).willReturn(aResponse() - .withBody("{ \"deployment_id\": \"123\",\"outputs\":{\"abc\":\"abc\"} }") - .withStatus(HttpStatus.SC_OK))); - - stubFor(get(urlMatching("/v2.0/api/v3/executions?.*")).willReturn(aResponse() - .withBody("{ \"items\": {\"id\": \"123\",\"workflow_id\":\"install\",\"status\":\"terminated\" } } ") - .withStatus(HttpStatus.SC_OK))); - - stubFor(get(urlPathEqualTo("/v2.0/api/v3/tokens")).willReturn(aResponse() - .withBodyFile("OpenstackResponse_Access.json") - .withStatus(HttpStatus.SC_OK))); - - instance.queryVnf("mtn13", "1234", "vfname", - msoRequest, new Holder<>(), new Holder<>(), new Holder<>(), - new Holder<>()); - } - - @Test - public void deleteVfModuleTest_ExceptionWhileQueryDeployment() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - instance.deleteVfModule("mtn13", "1234", "vfname", msoRequest, new Holder<>()); - } - - @Test - public void deleteVfModuleTest_ExceptionWhileDeleteDeployment() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname")).willReturn(aResponse() - .withBody("{ \"id\": \"123\" }") - .withStatus(HttpStatus.SC_OK))); - - stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname/outputs")).willReturn(aResponse() - .withBody("{ \"deployment_id\": \"123\",\"outputs\":{\"abc\":\"abc\"} }") - .withStatus(HttpStatus.SC_OK))); - - stubFor(get(urlMatching("/v2.0/api/v3/executions?.*")).willReturn(aResponse() - .withBody("{ \"items\": {\"id\": \"123\",\"workflow_id\":\"install\",\"status\":\"terminated\" } } ") - .withStatus(HttpStatus.SC_OK))); - - stubFor(get(urlPathEqualTo("/v2.0/api/v3/tokens")).willReturn(aResponse() - .withBodyFile("OpenstackResponse_Access.json") - .withStatus(HttpStatus.SC_OK))); - - instance.deleteVfModule("mtn13", "1234", "vfname", msoRequest, new Holder<>()); - } - - @Test + @Test + public void queryVnfTest() throws Exception { + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname")) + .willReturn(aResponse().withBody("{ \"id\": \"123\" }").withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname/outputs")) + .willReturn(aResponse().withBody("{ \"deployment_id\": \"123\",\"outputs\":{\"abc\":\"abc\"} }") + .withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(get(urlMatching("/v2.0/api/v3/executions?.*")).willReturn(aResponse() + .withBody("{ \"items\": {\"id\": \"123\",\"workflow_id\":\"install\",\"status\":\"terminated\" } } ") + .withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/tokens")) + .willReturn(aResponse().withBodyFile("OpenstackResponse_Access.json").withStatus(HttpStatus.SC_OK))); + + instance.queryVnf("mtn13", "CloudOwner", "1234", "vfname", msoRequest, new Holder<>(), new Holder<>(), + new Holder<>(), new Holder<>()); + } + + @Test + public void deleteVfModuleTest_ExceptionWhileQueryDeployment() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + instance.deleteVfModule("mtn13", "CloudOwner", "1234", "vfname", msoRequest, new Holder<>()); + } + + @Test + public void deleteVfModuleTest_ExceptionWhileDeleteDeployment() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname")) + .willReturn(aResponse().withBody("{ \"id\": \"123\" }").withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname/outputs")) + .willReturn(aResponse().withBody("{ \"deployment_id\": \"123\",\"outputs\":{\"abc\":\"abc\"} }") + .withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(get(urlMatching("/v2.0/api/v3/executions?.*")).willReturn(aResponse() + .withBody("{ \"items\": {\"id\": \"123\",\"workflow_id\":\"install\",\"status\":\"terminated\" } } ") + .withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/tokens")) + .willReturn(aResponse().withBodyFile("OpenstackResponse_Access.json").withStatus(HttpStatus.SC_OK))); + + instance.deleteVfModule("mtn13", "CloudOwner", "1234", "vfname", msoRequest, new Holder<>()); + } + + @Test public void deleteVnfVnfExceptionTest() throws Exception { - expectedException.expect(VnfException.class); + expectedException.expect(VnfException.class); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + instance.deleteVnf("12344", "CloudOwner", "234", "vnfname", msoRequest); + + } + + @Test + public void rollbackVnf() throws Exception { MsoRequest msoRequest = new MsoRequest(); msoRequest.setRequestId("12345"); msoRequest.setServiceInstanceId("12345"); - instance.deleteVnf("12344", "234", "vnfname", msoRequest); + VnfRollback vnfRollback = new VnfRollback(); + vnfRollback.setModelCustomizationUuid("1234"); + vnfRollback.setVfModuleStackId("2134"); + vnfRollback.setVnfId("123"); + vnfRollback.setModelCustomizationUuid("1234"); + instance.rollbackVnf(vnfRollback); } - @Test - public void rollbackVnf() throws Exception { - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); + @Test + public void rollbackVnf_Created() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); VnfRollback vnfRollback = new VnfRollback(); vnfRollback.setModelCustomizationUuid("1234"); vnfRollback.setVfModuleStackId("2134"); vnfRollback.setVnfId("123"); vnfRollback.setModelCustomizationUuid("1234"); + vnfRollback.setVnfCreated(true); instance.rollbackVnf(vnfRollback); - } - - @Test - public void rollbackVnf_Created() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - VnfRollback vnfRollback = new VnfRollback(); - vnfRollback.setModelCustomizationUuid("1234"); - vnfRollback.setVfModuleStackId("2134"); - vnfRollback.setVnfId("123"); - vnfRollback.setModelCustomizationUuid("1234"); - vnfRollback.setVnfCreated(true); - - instance.rollbackVnf(vnfRollback); - } - - @Test - public void createVfModuleVnfException() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - instance.createVfModule("123", "123", "vf", "v1", "", "module-005", "", "create", "3245", "234", "123", new HashMap<>(), true, true, true, msoRequest, new Holder<>(), new Holder<>(), new Holder<>()); - } - - @Test - public void createVfModule_ModelCustUuidIsNull() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - instance.createVfModule("123", "123", "vf", "v1", "", "module-005", "", "create", "3245", "234", null, new - HashMap<>(), true, true, true, msoRequest, new Holder<>(), new Holder<>(), new Holder<>()); - } - - @Test - public void createVfModule_CloudSiteIdNotFound() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - instance.createVfModule("123", "123", "vf", "v1", "", "module-005", "", "create", "3245", "234", "9b339a61-69ca-465f-86b8-1c72c582b8e8", new HashMap<>(), true, true, true, msoRequest, new Holder<>(), new Holder<>(), new Holder<>()); - } - - @Test - public void createVfModule_MsoCloudifyManagerNotFound() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - instance.createVfModule("mtn13", "123", "vf", "v1", "", "module-005", "", "create", "3245", "234", "9b339a61-69ca-465f-86b8-1c72c582b8e8", new HashMap<>(), true, true, true, msoRequest, new Holder<>(), new Holder<>(), new Holder<>()); - } - - @Test - public void createVfModule() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname")).willReturn(aResponse() - .withBody("{ \"id\": \"123\" }") - .withStatus(HttpStatus.SC_OK))); - - stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname/outputs")).willReturn(aResponse() - .withBody("{ \"deployment_id\": \"123\",\"outputs\":{\"abc\":\"abc\"} }") - .withStatus(HttpStatus.SC_OK))); - - stubFor(get(urlMatching("/v2.0/api/v3/executions?.*")).willReturn(aResponse() - .withBody("{ \"items\": {\"id\": \"123\",\"workflow_id\":\"install\",\"status\":\"terminated\" } } ") - .withStatus(HttpStatus.SC_OK))); - - stubFor(get(urlPathEqualTo("/v2.0/api/v3/tokens")).willReturn(aResponse() - .withBodyFile("OpenstackResponse_Access.json") - .withStatus(HttpStatus.SC_OK))); - - instance.createVfModule("mtn13", "123", "vf", "v1", "", "vfname", "", "create", "3245", "234", "9b339a61-69ca-465f-86b8-1c72c582b8e8", new HashMap<>(), true, true, true, msoRequest, new Holder<>(), new Holder<>(), new Holder<>()); - } - - @Test - public void updateVfModuleVnfException() throws Exception { - expectedException.expect(VnfException.class); - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - instance.updateVfModule("123", "1234", "fw", "v2", "vnf1", "create", "123", "12", "233", "234", new HashMap<>(), msoRequest, new Holder<>(), new Holder<>()); - } - - @Test - public void healthCheckVNFTest() { - instance.healthCheck(); - } - - @Test - public void createVnfTest() { - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - Map<String, Object> map = new HashMap<>(); - map.put("key1", "value1"); - try { - instance.createVnf("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", - "volumeGroupHeatStackId|1", map, - Boolean.FALSE, Boolean.TRUE, Boolean.TRUE, msoRequest, new Holder<>(), new Holder<>(), - new Holder<>()); - } catch (Exception e) { - } - } - - @Test - public void updateVnfTest() { - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - - Map<String, Object> map = new HashMap<>(); - - map.put("key1", "value1"); - try { - instance.updateVnf("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", - "volumeGroupHeatStackId|1", map, msoRequest, new Holder<>(), - new Holder<>()); - } catch (Exception e) { - - } - } - - @Test - public void deleteVnfTest() { - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId("12345"); - msoRequest.setServiceInstanceId("12345"); - try { - instance.deleteVnf("mdt1", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", msoRequest); - } catch (Exception e) { - - } - } + } + + @Test + public void createVfModuleVnfException() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + instance.createVfModule("123", "CloudOwner", "123", "vf", "v1", "", "module-005", "", "create", "3245", "234", + "123", new HashMap<>(), true, true, true, msoRequest, new Holder<>(), new Holder<>(), new Holder<>()); + } + + @Test + public void createVfModule_ModelCustUuidIsNull() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + instance.createVfModule("123", "CloudOwner", "123", "vf", "v1", "", "module-005", "", "create", "3245", "234", + null, new HashMap<>(), true, true, true, msoRequest, new Holder<>(), new Holder<>(), new Holder<>()); + } + + @Test + public void createVfModule_CloudSiteIdNotFound() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + instance.createVfModule("123", "CloudOwner", "123", "vf", "v1", "", "module-005", "", "create", "3245", "234", + "9b339a61-69ca-465f-86b8-1c72c582b8e8", new HashMap<>(), true, true, true, msoRequest, new Holder<>(), + new Holder<>(), new Holder<>()); + } + + @Test + public void createVfModule_MsoCloudifyManagerNotFound() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + instance.createVfModule("mtn13", "CloudOwner", "123", "vf", "v1", "", "module-005", "", "create", "3245", "234", + "9b339a61-69ca-465f-86b8-1c72c582b8e8", new HashMap<>(), true, true, true, msoRequest, new Holder<>(), + new Holder<>(), new Holder<>()); + } + + @Test + public void createVfModule() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname")) + .willReturn(aResponse().withBody("{ \"id\": \"123\" }").withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname/outputs")) + .willReturn(aResponse().withBody("{ \"deployment_id\": \"123\",\"outputs\":{\"abc\":\"abc\"} }") + .withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(get(urlMatching("/v2.0/api/v3/executions?.*")).willReturn(aResponse() + .withBody("{ \"items\": {\"id\": \"123\",\"workflow_id\":\"install\",\"status\":\"terminated\" } } ") + .withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/tokens")) + .willReturn(aResponse().withBodyFile("OpenstackResponse_Access.json").withStatus(HttpStatus.SC_OK))); + + instance.createVfModule("mtn13", "CloudOwner", "123", "vf", "v1", "", "vfname", "", "create", "3245", "234", + "9b339a61-69ca-465f-86b8-1c72c582b8e8", new HashMap<>(), true, true, true, msoRequest, new Holder<>(), + new Holder<>(), new Holder<>()); + } + + @Test + public void updateVfModuleVnfException() throws Exception { + expectedException.expect(VnfException.class); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + instance.updateVfModule("123", "CloudOwner", "1234", "fw", "v2", "vnf1", "create", "123", "12", "233", "234", + new HashMap<>(), msoRequest, new Holder<>(), new Holder<>()); + } + + @Test + public void healthCheckVNFTest() { + instance.healthCheck(); + } + + @Test + public void createVnfTest() { + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + Map<String, Object> map = new HashMap<>(); + map.put("key1", "value1"); + try { + instance.createVnf("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", + "volumeGroupHeatStackId|1", map, Boolean.FALSE, Boolean.TRUE, Boolean.TRUE, msoRequest, + new Holder<>(), new Holder<>(), new Holder<>()); + } catch (Exception e) { + } + } + + @Test + public void updateVnfTest() { + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + + Map<String, Object> map = new HashMap<>(); + + map.put("key1", "value1"); + try { + instance.updateVnf("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "vSAMP12", "VFMOD", + "volumeGroupHeatStackId|1", map, msoRequest, new Holder<>(), new Holder<>()); + } catch (Exception e) { + + } + } + + @Test + public void deleteVnfTest() { + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); + try { + instance.deleteVnf("mdt1", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", msoRequest); + } catch (Exception e) { + + } + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfMulticloudAdapterImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfMulticloudAdapterImplTest.java index 376076a0a0..9d13cc10a3 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfMulticloudAdapterImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfMulticloudAdapterImplTest.java @@ -20,33 +20,31 @@ package org.onap.so.adapters.vnf; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.delete; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import java.util.HashMap; +import java.util.Map; +import javax.xml.ws.Holder; import org.apache.http.HttpStatus; -import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.onap.so.adapters.openstack.MsoOpenstackAdaptersApplication; +import org.onap.so.adapters.vdu.VduModelInfo; import org.onap.so.adapters.vnf.exceptions.VnfException; import org.onap.so.cloud.CloudConfig; -import org.onap.so.db.catalog.beans.CloudSite; import org.onap.so.entity.MsoRequest; +import org.onap.so.openstack.beans.StackInfo; +import org.onap.so.openstack.exceptions.MsoException; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.server.LocalServerPort; - -import javax.xml.ws.Holder; -import java.util.HashMap; -import java.util.Map; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.delete; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching; -import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; -public class MsoVnfMulticloudAdapterImplTest extends BaseRestTestUtils{ +public class MsoVnfMulticloudAdapterImplTest extends BaseRestTestUtils { @Rule public ExpectedException expectedException = ExpectedException.none(); @@ -56,19 +54,37 @@ public class MsoVnfMulticloudAdapterImplTest extends BaseRestTestUtils{ @Autowired private CloudConfig cloudConfig; + private static final String CREATE_STACK_RESPONSE = "{\"template_type\": \"TEST-template\", \"workload_id\": " + + "\"workload-id\", \"template_response\": {\"stack\": {\"id\": \"TEST-stack\", \"links\": []}}}"; + private static final String UPDATE_STACK_RESPONSE = + "{\"template_type\": \"heat\", \"workload_id\": " + "\"workload-id\"}"; + private static final String GET_CREATE_STACK_RESPONSE = "{\"template_type\": \"heat\", \"workload_id\": " + + "\"workload-id\", \"workload_status\": \"CREATE_COMPLETE\"}"; + private static final String GET_UPDATE_STACK_RESPONSE = "{\"template_type\": \"heat\", \"workload_id\": " + + "\"workload-id\", \"workload_status\": \"UPDATE_COMPLETE\"}"; + + private static final String MULTICLOUD_CREATE_PATH = "/api/multicloud/v1/CloudOwner/MTN13/infra_workload"; + private static final String MULTICLOUD_UPDATE_PATH = + "/api/multicloud/v1/CloudOwner/MTN13/infra_workload/workload-id"; + private static final String MULTICLOUD_GET_PATH_BY_NAME = + "/api/multicloud/v1/CloudOwner/MTN13/infra_workload/vfname"; + private static final String MULTICLOUD_GET_PATH_BY_ID = + "/api/multicloud/v1/CloudOwner/MTN13/infra_workload/workload-id"; + @Before public void before() throws Exception { super.orchestrator = "multicloud"; - super.cloudEndpoint = "/api/multicloud/v1/cloud_owner/cloud_region_id/infra_workload"; + super.cloudEndpoint = "/api/multicloud/v1/CloudOwner/MTN13/infra_workload"; super.setUp(); } @Test public void createVfModule() throws Exception { - + Map<String, Object> stackInputs = new HashMap<>(); stackInputs.put("oof_directives", "{}"); stackInputs.put("sdnc_directives", "{}"); + stackInputs.put("user_directives", "{}"); stackInputs.put("generic_vnf_id", "genVNFID"); stackInputs.put("vf_module_id", "vfMODULEID"); @@ -76,23 +92,66 @@ public class MsoVnfMulticloudAdapterImplTest extends BaseRestTestUtils{ msoRequest.setRequestId("12345"); msoRequest.setServiceInstanceId("12345"); - stubFor(get(urlPathEqualTo("/api/multicloud/v1/cloud_owner/cloud_region_id/infra_workload/vfname")).willReturn(aResponse() - //.withHeader() - .withStatus(HttpStatus.SC_NOT_FOUND))); + wireMockServer.stubFor(get(urlPathEqualTo(MULTICLOUD_GET_PATH_BY_NAME)).willReturn( + aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_NOT_FOUND))); + + wireMockServer.stubFor(get(urlPathEqualTo(MULTICLOUD_GET_PATH_BY_ID)).inScenario("CREATE") + .whenScenarioStateIs("CREATING").willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(GET_CREATE_STACK_RESPONSE).withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(get(urlPathEqualTo(MULTICLOUD_GET_PATH_BY_ID)).inScenario("CREATE") + .whenScenarioStateIs("UPDATING").willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(GET_UPDATE_STACK_RESPONSE).withStatus(HttpStatus.SC_OK))); + + wireMockServer.stubFor(post(urlPathEqualTo(MULTICLOUD_CREATE_PATH)).inScenario("CREATE") + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("MulticloudResponse_Stack_Create.json").withStatus(HttpStatus.SC_CREATED)) + .willSetStateTo("CREATING")); + + wireMockServer.stubFor(post(urlPathEqualTo(MULTICLOUD_UPDATE_PATH)) + .inScenario("CREATE").willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(UPDATE_STACK_RESPONSE).withStatus(HttpStatus.SC_ACCEPTED)) + .willSetStateTo("UPDATING")); + + try { + instance.createVfModule("MTN13", "CloudOwner", "123", "vf", "v1", "genericVnfId", "vfname", "vfModuleId", + "create", null, "234", "9b339a61-69ca-465f-86b8-1c72c582b8e8", stackInputs, true, true, true, + msoRequest, new Holder<>(), new Holder<>(), new Holder<>()); + } catch (VnfException e) { + fail("createVfModule success expected, failed with exception: " + e.toString()); + } + wireMockServer.resetScenarios(); + } - stubFor(get(urlPathEqualTo("/api/multicloud/v1/cloud_owner/cloud_region_id/infra_workload/workload-id")).willReturn(aResponse() - //.withHeader() - .withBodyFile("MulticloudResponse_Stack.json") - .withStatus(HttpStatus.SC_OK))); + @Test + public void createVfModuleAlreadyExists() throws Exception { - stubFor(get(urlPathEqualTo("/api/multicloud/v1/cloud_owner/cloud_region_id/infra_workload/vfname/outputs")).willReturn(aResponse() - .withStatus(HttpStatus.SC_NOT_FOUND))); + Map<String, Object> stackInputs = new HashMap<>(); + stackInputs.put("oof_directives", "{}"); + stackInputs.put("sdnc_directives", "{}"); + stackInputs.put("user_directives", "{}"); + stackInputs.put("generic_vnf_id", "genVNFID"); + stackInputs.put("vf_module_id", "vfMODULEID"); - stubFor(post(urlPathEqualTo("/api/multicloud/v1/cloud_owner/cloud_region_id/infra_workload")).willReturn(aResponse() - .withBodyFile("MulticloudResponse_Stack_Create.json") - .withStatus(HttpStatus.SC_CREATED))); + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId("12345"); + msoRequest.setServiceInstanceId("12345"); - instance.createVfModule("MTN13", "123", "vf", "v1", "genericVnfId", "vfname", "vfModuleId", "create", null, "234", "9b339a61-69ca-465f-86b8-1c72c582b8e8", stackInputs, true, true, true, msoRequest, new Holder<>(), new Holder<>(), new Holder<>()); + wireMockServer.stubFor( + get(urlPathEqualTo("/api/multicloud/v1/CloudOwner/MTN13/infra_workload/vfname")).willReturn(aResponse() + // .withHeader() + .withBodyFile("MulticloudResponse_Stack.json").withStatus(HttpStatus.SC_OK))); + + try { + instance.createVfModule("MTN13", "CloudOwner", "123", "vf", "v1", "genericVnfId", "vfname", "vfModuleId", + "create", null, "234", "9b339a61-69ca-465f-86b8-1c72c582b8e8", stackInputs, true, true, true, + msoRequest, new Holder<>(), new Holder<>(), new Holder<>()); + } catch (VnfException e) { + assertTrue(e.toString().contains( + "Resource vfname already exists in owner/cloud/tenant CloudOwner/MTN13/123 with ID vfname/vfname")); + return; + } + fail("VnfAlreadyExists Exception expected!"); } @Test @@ -101,14 +160,13 @@ public class MsoVnfMulticloudAdapterImplTest extends BaseRestTestUtils{ msoRequest.setRequestId("12345"); msoRequest.setServiceInstanceId("12345"); - stubFor(get(urlPathEqualTo("/api/multicloud/v1/cloud_owner/cloud_region_id/infra_workload/workload-id")).willReturn(aResponse() - .withBodyFile("MulticloudResponse_Stack.json") - .withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(get(urlPathEqualTo("/api/multicloud/v1/CloudOwner/MTN13/infra_workload/workload-id")) + .willReturn(aResponse().withBodyFile("MulticloudResponse_Stack.json").withStatus(HttpStatus.SC_OK))); - stubFor(delete(urlPathEqualTo("/api/multicloud/v1/cloud_owner/cloud_region_id/infra_workload/workload-id")).willReturn(aResponse() - .withStatus(HttpStatus.SC_NO_CONTENT))); + wireMockServer.stubFor(delete(urlPathEqualTo("/api/multicloud/v1/CloudOwner/MTN13/infra_workload/workload-id")) + .willReturn(aResponse().withStatus(HttpStatus.SC_NO_CONTENT))); - instance.deleteVfModule("MTN13", "123", "workload-id", msoRequest, new Holder<>()); + instance.deleteVfModule("MTN13", "CloudOwner", "123", "workload-id", msoRequest, new Holder<>()); } @Test @@ -117,11 +175,11 @@ public class MsoVnfMulticloudAdapterImplTest extends BaseRestTestUtils{ msoRequest.setRequestId("12345"); msoRequest.setServiceInstanceId("12345"); - stubFor(get(urlPathEqualTo("/api/multicloud/v1/cloud_owner/cloud_region_id/infra_workload/workload-id")).willReturn(aResponse() - .withBodyFile("MulticloudResponse_Stack.json") - .withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(get(urlPathEqualTo("/api/multicloud/v1/CloudOwner/MTN13/infra_workload/workload-id")) + .willReturn(aResponse().withBodyFile("MulticloudResponse_Stack.json").withStatus(HttpStatus.SC_OK))); - instance.queryVnf("MTN13", "123", "workload-id", msoRequest, new Holder<>(), new Holder<>(), new Holder<>(), new Holder<>()); + instance.queryVnf("MTN13", "CloudOwner", "123", "workload-id", msoRequest, new Holder<>(), new Holder<>(), + new Holder<>(), new Holder<>()); } // TODO Error Tests diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImplTest.java index 0cd3d1a61d..be565deb9e 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImplTest.java @@ -20,6 +20,16 @@ package org.onap.so.adapters.vnf; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.delete; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_200; +import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_404; +import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess; +import java.util.HashMap; +import java.util.Map; +import javax.xml.ws.Holder; import org.apache.http.HttpStatus; import org.junit.Rule; import org.junit.Test; @@ -29,19 +39,6 @@ import org.onap.so.entity.MsoRequest; import org.onap.so.openstack.beans.VnfRollback; import org.springframework.beans.factory.annotation.Autowired; -import javax.xml.ws.Holder; -import java.util.HashMap; -import java.util.Map; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.delete; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; -import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_200; -import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_404; -import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess; - public class MsoVnfPluginAdapterImplTest extends BaseRestTestUtils { @Rule @@ -58,9 +55,9 @@ public class MsoVnfPluginAdapterImplTest extends BaseRestTestUtils { MsoRequest msoRequest = getMsoRequest(); Map<String, Object> map = new HashMap<>(); map.put("key1", "value1"); - msoVnfPluginAdapter.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", null, map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), + msoVnfPluginAdapter.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", + vnfName, "", "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", null, map, Boolean.FALSE, + Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), new Holder<VnfRollback>()); } @@ -70,10 +67,10 @@ public class MsoVnfPluginAdapterImplTest extends BaseRestTestUtils { MsoRequest msoRequest = getMsoRequest(); Map<String, Object> map = new HashMap<>(); map.put("key1", "value1"); - msoVnfPluginAdapter.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); + msoVnfPluginAdapter.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", + vnfName, "", "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", + "88a6ca3ee0394ade9403f075db23167e", map, Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, + new Holder<>(), new Holder<Map<String, String>>(), new Holder<VnfRollback>()); } @Test @@ -82,80 +79,79 @@ public class MsoVnfPluginAdapterImplTest extends BaseRestTestUtils { MsoRequest msoRequest = getMsoRequest(); Map<String, Object> map = new HashMap<>(); map.put("key1", "value1"); - msoVnfPluginAdapter.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", "9b339a61-69ca-465f-86b8-1c72c582b8e8", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); + msoVnfPluginAdapter.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", + vnfName, "", "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", + "9b339a61-69ca-465f-86b8-1c72c582b8e8", map, Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, + new Holder<>(), new Holder<Map<String, String>>(), new Holder<VnfRollback>()); } @Test public void createVfModule_INSTANTIATED() throws Exception { - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); MsoRequest msoRequest = getMsoRequest(); Map<String, Object> map = new HashMap<>(); map.put("key1", "value1"); - msoVnfPluginAdapter.createVfModule("MTN13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - null, "baseVfHeatStackId", "9b339a61-69ca-465f-86b8-1c72c582b8e8", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); + msoVnfPluginAdapter.createVfModule("MTN13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", + vnfName, "", "VFMOD", null, "baseVfHeatStackId", "9b339a61-69ca-465f-86b8-1c72c582b8e8", map, + Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), + new Holder<Map<String, String>>(), new Holder<VnfRollback>()); } @Test public void createVfModule_queryVduNotFoundWithVolumeGroupId() throws Exception { expectedException.expect(VnfException.class); - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); MsoRequest msoRequest = getMsoRequest(); Map<String, Object> map = new HashMap<>(); map.put("key1", "value1"); - msoVnfPluginAdapter.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId|1", "baseVfHeatStackId", "9b339a61-69ca-465f-86b8-1c72c582b8e8", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); + msoVnfPluginAdapter.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", + vnfName, "", "VFMOD", "volumeGroupHeatStackId|1", "baseVfHeatStackId", + "9b339a61-69ca-465f-86b8-1c72c582b8e8", map, Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, + new Holder<>(), new Holder<Map<String, String>>(), new Holder<VnfRollback>()); } @Test public void createVfModule_CreateVduException() throws Exception { expectedException.expect(VnfException.class); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_404(); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")) + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_404(wireMockServer); + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/volumeGroupHeatStackId")) .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json") - .withStatus(HttpStatus.SC_OK))); + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); MsoRequest msoRequest = getMsoRequest(); Map<String, Object> map = new HashMap<>(); map.put("key1", "value1"); - msoVnfPluginAdapter.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", vnfName, "", "VFMOD", - "volumeGroupHeatStackId", "baseVfHeatStackId", "9b339a61-69ca-465f-86b8-1c72c582b8e8", map, - Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(), - new Holder<VnfRollback>()); + msoVnfPluginAdapter.createVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", "", + vnfName, "", "VFMOD", "volumeGroupHeatStackId", "baseVfHeatStackId", + "9b339a61-69ca-465f-86b8-1c72c582b8e8", map, Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, + new Holder<>(), new Holder<Map<String, String>>(), new Holder<VnfRollback>()); } @Test public void deleteVfModule_QueryVduException() throws Exception { expectedException.expect(VnfException.class); MsoRequest msoRequest = getMsoRequest(); - msoVnfPluginAdapter.deleteVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", msoRequest, - new Holder<Map<String, String>>()); + msoVnfPluginAdapter.deleteVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", + msoRequest, new Holder<Map<String, String>>()); } @Test public void deleteVfModule_DeleteVduException() throws Exception { expectedException.expect(VnfException.class); - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_200(); - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/vSAMP12")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json") - .withStatus(HttpStatus.SC_OK))); - stubFor(delete(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_200(wireMockServer); + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/vSAMP12")) .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json").withStatus(HttpStatus.SC_OK))); + wireMockServer.stubFor(delete( + urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); MsoRequest msoRequest = getMsoRequest(); - msoVnfPluginAdapter.deleteVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", msoRequest, - new Holder<Map<String, String>>()); + msoVnfPluginAdapter.deleteVfModule("mtn13", "CloudOwner", "88a6ca3ee0394ade9403f075db23167e", "vSAMP12", + msoRequest, new Holder<Map<String, String>>()); } private MsoRequest getMsoRequest() { diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/QueryTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/QueryTest.java index 2740e254e1..7e7c130e33 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/QueryTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/QueryTest.java @@ -25,11 +25,8 @@ import static org.hamcrest.Matchers.hasProperty; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; - import java.util.Map; - import javax.xml.ws.Holder; - import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -48,61 +45,66 @@ import org.onap.so.openstack.utils.MsoHeatUtils; @RunWith(MockitoJUnitRunner.class) public class QueryTest { - - @Mock - private MsoHeatUtils heat; - @InjectMocks - private MsoVnfAdapterImpl vnfAdapter = new MsoVnfAdapterImpl(); - - @Rule - public ExpectedException thrown = ExpectedException.none(); - @Test - public void testQueryCreatedVnf() throws VnfException, MsoException { - StackInfo info = new StackInfo("stackName", HeatStatus.CREATED); - when(heat.queryStack(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(info); - String cloudId = "MT"; - String tenantId = "MSO_Test"; - String vnfName = "VNF_TEST1"; - Holder<Boolean> vnfExists = new Holder<>(); - Holder<String> vnfId = new Holder<>(); - Holder<VnfStatus> status = new Holder<>(); - Holder<Map<String, String>> outputs = new Holder<>(); - vnfAdapter.queryVnf(cloudId, tenantId, vnfName, null, vnfExists, vnfId, status, outputs); + @Mock + private MsoHeatUtils heat; + @InjectMocks + private MsoVnfAdapterImpl vnfAdapter = new MsoVnfAdapterImpl(); + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void testQueryCreatedVnf() throws VnfException, MsoException { + StackInfo info = new StackInfo("stackName", HeatStatus.CREATED); + when(heat.queryStack(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(info); + String cloudId = "MT"; + String cloudOwner = "CloudOwner"; + String tenantId = "MSO_Test"; + String vnfName = "VNF_TEST1"; + Holder<Boolean> vnfExists = new Holder<>(); + Holder<String> vnfId = new Holder<>(); + Holder<VnfStatus> status = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + + vnfAdapter.queryVnf(cloudId, cloudOwner, tenantId, vnfName, null, vnfExists, vnfId, status, outputs); - assertTrue(vnfExists.value); - } + assertTrue(vnfExists.value); + } - @Test - public void testQueryNotFoundVnf() throws VnfException, MsoException { - StackInfo info = new StackInfo("stackName", HeatStatus.NOTFOUND); - when(heat.queryStack(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(info); - String cloudId = "MT"; - String tenantId = "MSO_Test"; - String vnfName = "VNF_TEST1"; - Holder<Boolean> vnfExists = new Holder<>(); - Holder<String> vnfId = new Holder<>(); - Holder<VnfStatus> status = new Holder<>(); - Holder<Map<String, String>> outputs = new Holder<>(); + @Test + public void testQueryNotFoundVnf() throws VnfException, MsoException { + StackInfo info = new StackInfo("stackName", HeatStatus.NOTFOUND); + when(heat.queryStack(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(info); + String cloudId = "MT"; + String cloudOwner = "CloudOwner"; + String tenantId = "MSO_Test"; + String vnfName = "VNF_TEST1"; + Holder<Boolean> vnfExists = new Holder<>(); + Holder<String> vnfId = new Holder<>(); + Holder<VnfStatus> status = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); - vnfAdapter.queryVnf(cloudId, tenantId, vnfName, null, vnfExists, vnfId, status, outputs); + vnfAdapter.queryVnf(cloudId, cloudOwner, tenantId, vnfName, null, vnfExists, vnfId, status, outputs); - assertFalse(vnfExists.value); - } + assertFalse(vnfExists.value); + } - @Test() - // @Ignore // 1802 merge - public void testQueryVnfWithException() throws VnfException, MsoException { - String cloudId = "MT"; - String tenantId = "MSO_Test"; - String vnfName = "VNF_TEST1"; - Holder<Boolean> vnfExists = new Holder<>(); - Holder<String> vnfId = new Holder<>(); - Holder<VnfStatus> status = new Holder<>(); - Holder<Map<String, String>> outputs = new Holder<>(); - thrown.expect(VnfException.class); - thrown.expectCause(hasProperty("context", is("QueryVNF"))); - when(heat.queryStack(Mockito.any(), Mockito.any(), Mockito.any())).thenThrow(new MsoOpenstackException(1, "test messsage", "test detail")); - vnfAdapter.queryVnf(cloudId, tenantId, vnfName, null, vnfExists, vnfId, status, outputs); - } + @Test() + // @Ignore // 1802 merge + public void testQueryVnfWithException() throws VnfException, MsoException { + String cloudId = "MT"; + String cloudOwner = "CloudOwner"; + String tenantId = "MSO_Test"; + String vnfName = "VNF_TEST1"; + Holder<Boolean> vnfExists = new Holder<>(); + Holder<String> vnfId = new Holder<>(); + Holder<VnfStatus> status = new Holder<>(); + Holder<Map<String, String>> outputs = new Holder<>(); + thrown.expect(VnfException.class); + thrown.expectCause(hasProperty("context", is("QueryVNF"))); + when(heat.queryStack(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())) + .thenThrow(new MsoOpenstackException(1, "test messsage", "test detail")); + vnfAdapter.queryVnf(cloudId, cloudOwner, tenantId, vnfName, null, vnfExists, vnfId, status, outputs); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VfRollbackTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VfRollbackTest.java index a59de7695c..df2d798cda 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VfRollbackTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VfRollbackTest.java @@ -1,70 +1,66 @@ /* -* ============LICENSE_START======================================================= - * ONAP : SO - * ================================================================================ - * Copyright (C) 2018 TechMahindra - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * ============LICENSE_START======================================================= ONAP : SO + * ================================================================================ Copyright (C) 2018 TechMahindra + * ================================================================================ Licensed under the Apache License, + * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy + * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. * ============LICENSE_END========================================================= -*/ + */ package org.onap.so.adapters.vnf; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertEquals; import org.junit.Test; + public class VfRollbackTest { - private VfRollback vfRollback = new VfRollback(); + private VfRollback vfRollback = new VfRollback(); + + @Test + public void test() { + vfRollback.setVnfId("vnfId"); + vfRollback.setTenantId("tenantId"); + vfRollback.setCloudSiteId("cloudId"); + vfRollback.setTenantCreated(true); + vfRollback.setVnfCreated(true); + vfRollback.setMsoRequest(null); + vfRollback.setVolumeGroupName("volumeGroupName"); + vfRollback.setVolumeGroupId("volumeGroupId"); + vfRollback.setRequestType("requestType"); + vfRollback.setVolumeGroupHeatStackId("volumeGroupHeatStackId"); + vfRollback.setBaseGroupHeatStackId("baseGroupHeatStackId"); + vfRollback.setIsBase(true); + vfRollback.setVfModuleStackId("vfModuleStackId"); + assert (vfRollback.getVnfId() != null); + assert (vfRollback.getTenantId() != null); + assert (vfRollback.getCloudSiteId() != null); + assert (vfRollback.getVolumeGroupName() != null); + assert (vfRollback.getVolumeGroupId() != null); + assert (vfRollback.getRequestType() != null); + assert (vfRollback.getVolumeGroupHeatStackId() != null); + assert (vfRollback.getBaseGroupHeatStackId() != null); + assert (vfRollback.getVfModuleStackId() != null); + assertEquals("vnfId", vfRollback.getVnfId()); + assertEquals("tenantId", vfRollback.getTenantId()); + assertEquals("cloudId", vfRollback.getCloudSiteId()); + assertEquals(true, vfRollback.getTenantCreated()); + assertEquals(true, vfRollback.getVnfCreated()); + assertEquals(null, vfRollback.getMsoRequest()); + assertEquals("volumeGroupName", vfRollback.getVolumeGroupName()); + assertEquals("volumeGroupId", vfRollback.getVolumeGroupId()); + assertEquals("requestType", vfRollback.getRequestType()); + assertEquals("volumeGroupHeatStackId", vfRollback.getVolumeGroupHeatStackId()); + assertEquals("baseGroupHeatStackId", vfRollback.getBaseGroupHeatStackId()); + assertEquals(true, vfRollback.isBase()); + assertEquals("vfModuleStackId", vfRollback.getVfModuleStackId()); + } - @Test - public void test() { - vfRollback.setVnfId("vnfId"); - vfRollback.setTenantId("tenantId"); - vfRollback.setCloudSiteId("cloudId"); - vfRollback.setTenantCreated(true); - vfRollback.setVnfCreated(true); - vfRollback.setMsoRequest(null); - vfRollback.setVolumeGroupName("volumeGroupName"); - vfRollback.setVolumeGroupId("volumeGroupId"); - vfRollback.setRequestType("requestType"); - vfRollback.setVolumeGroupHeatStackId("volumeGroupHeatStackId"); - vfRollback.setBaseGroupHeatStackId("baseGroupHeatStackId"); - vfRollback.setIsBase(true); - vfRollback.setVfModuleStackId("vfModuleStackId"); - assert(vfRollback.getVnfId() != null); - assert(vfRollback.getTenantId() != null); - assert(vfRollback.getCloudSiteId() != null); - assert(vfRollback.getVolumeGroupName() != null); - assert(vfRollback.getVolumeGroupId() != null); - assert(vfRollback.getRequestType() != null); - assert(vfRollback.getVolumeGroupHeatStackId() != null); - assert(vfRollback.getBaseGroupHeatStackId() != null); - assert(vfRollback.getVfModuleStackId() != null); - assertEquals("vnfId", vfRollback.getVnfId()); - assertEquals("tenantId", vfRollback.getTenantId()); - assertEquals("cloudId", vfRollback.getCloudSiteId()); - assertEquals(true, vfRollback.getTenantCreated()); - assertEquals(true, vfRollback.getVnfCreated()); - assertEquals(null, vfRollback.getMsoRequest()); - assertEquals("volumeGroupName", vfRollback.getVolumeGroupName()); - assertEquals("volumeGroupId", vfRollback.getVolumeGroupId()); - assertEquals("requestType", vfRollback.getRequestType()); - assertEquals("volumeGroupHeatStackId", vfRollback.getVolumeGroupHeatStackId()); - assertEquals("baseGroupHeatStackId", vfRollback.getBaseGroupHeatStackId()); - assertEquals(true, vfRollback.isBase()); - assertEquals("vfModuleStackId", vfRollback.getVfModuleStackId()); - } - - @Test - public void testtoString() { - assert(vfRollback.toString() != null); - } + @Test + public void testtoString() { + assert (vfRollback.toString() != null); + } } 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 343b6245e6..89adafd280 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 @@ -42,7 +42,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; - import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; @@ -50,7 +49,6 @@ import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; - import static com.shazam.shazamcrest.MatcherAssert.assertThat; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.junit.Assert.assertEquals; @@ -73,479 +71,477 @@ import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutStacks_200; import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess; public class VnfAdapterRestTest extends BaseRestTestUtils { - - - @Autowired - private JettisonStyleMapperProvider jettisonTypeObjectMapper; - private static final String MESSAGE_ID = "62265093-277d-4388-9ba6-449838ade586-1517252396874"; - private static final String AAI_VNF_ID = "c93e0d34-5b63-45de-bbae-b0fe49dd3bd9"; - private static final String MSO_REQUEST_ID = "62265093-277d-4388-9ba6-449838ade586"; - private static final String MSO_SERVICE_INSTANCE_ID = "4147e06f-1b89-49c5-b21f-4faf8dc9805a"; - private static final String CLOUDSITE_ID = "mtn13"; - private static final String TENANT_ID = "0422ffb57ba042c0800a29dc85ca70f8"; - private static final String VNF_TYPE = "MSOTADevInfra_vSAMP10a_Service/vSAMP10a 1"; - private static final String VNF_NAME = "MSO-DEV-VNF-1802-it3-pwt3-vSAMP10a-1XXX-Replace"; - private static final String VNF_VERSION = "1.0"; - private static final String VF_MODULE_ID = "1d48aaec-b7f3-4c24-ba4a-4e798ed3223c"; - private static final String VF_MODULE_NAME = "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001"; - private static final String VF_MODULE_TYPE = "vSAMP10aDEV::PCM::module-2"; - private static final String MODEL_CUSTOMIZATION_UUID = "cb82ffd8-252a-11e7-93ae-92361f002671"; - private static final String BASE_VF_MODULE_ID = "3d7ff7b4-720b-4604-be0a-1974fc58ed96"; - // vfModuleParams specific variables - private static final String NETWORK_NAME = "Dev-vSAMP10a-ntwk-1802-pwt3-v6-Replace-1001"; - private static final String SERVER_NAME = "Dev-vSAMP10a-addon2-1802-pwt3-v6-Replace-1001"; - private static final String IMAGE = "ubuntu_14.04_IPv6"; - private static final String EXN_DIRECT_NET_FQDN = "direct"; - 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 { - - CreateVfModuleRequest request = populateCreateVfModuleRequest(); - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackGetStackVfModule_404(); - - mockOpenStackPostStacks_200(); - - mockOpenStackGetStackVfModule_200(); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers); - - ResponseEntity<CreateVfModuleResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), HttpMethod.POST, - entity, CreateVfModuleResponse.class); - - ResponseEntity<CreateVfModuleResponse> responseV2 = restTemplate.exchange( - createURLWithPort("/services/rest/v2/vnfs/" + AAI_VNF_ID + "/vf-modules"), HttpMethod.POST, - entity, CreateVfModuleResponse.class); - - CreateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/CreateVfModuleResponse.json"), CreateVfModuleResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - - assertEquals(Response.Status.OK.getStatusCode(), responseV2.getStatusCode().value()); - assertThat(responseV2.getBody(), sameBeanAs(expectedResponse)); - } - - @Test - public void testCreateVfModuleAsyncCall() throws Exception { - CreateVfModuleRequest request = populateCreateVfModuleRequest(); - request.setNotificationUrl( createURLWithPort("/mso/WorkflowMesssage")); - - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStackVfModule_404(); - mockOpenStackPostStacks_200(); - mockOpenStackGetStackVfModule_200(); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers); - - ResponseEntity<CreateVfModuleResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), HttpMethod.POST, - entity, CreateVfModuleResponse.class); - - CreateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/CreateVfModuleResponse.json"), CreateVfModuleResponse.class); - - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); - } - - @Test - public void testCreateVfModuleWithEnableBridgeNull() - throws JSONException, JsonParseException, JsonMappingException, IOException { - - CreateVfModuleRequest request = new CreateVfModuleRequest(); - request.setBackout(true); - request.setSkipAAI(true); - request.setFailIfExists(false); - MsoRequest msoReq = new MsoRequest(); - boolean failIfExists = true; - Boolean enableBridge = null; - Map<String, Object> vfModuleParams = new HashMap<>(); - - - vfModuleParams.put("vf_module_id", VF_MODULE_ID); - vfModuleParams.put("vnf_id", AAI_VNF_ID); - vfModuleParams.put("network_name", NETWORK_NAME); - vfModuleParams.put("vnf_name", VNF_NAME); - vfModuleParams.put("environment_context", ""); - vfModuleParams.put("server_name", SERVER_NAME); - vfModuleParams.put("image", IMAGE); - vfModuleParams.put("workload_context", ""); - vfModuleParams.put("vf_module_index", VF_MODULE_INDEX); - vfModuleParams.put("vf_module_name", VF_MODULE_NAME); - vfModuleParams.put("availability_zone_0", AVAILABILITY_ZONE_0); - vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN); - vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN); - - 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); - request.setVnfId(AAI_VNF_ID); - request.setVnfVersion(VNF_VERSION); - request.setVfModuleId(VF_MODULE_ID); - request.setVfModuleName(VF_MODULE_NAME); - request.setBaseVfModuleId(BASE_VF_MODULE_ID); - request.setFailIfExists(failIfExists); - request.setEnableBridge(enableBridge); - request.setVfModuleParams(vfModuleParams); - request.setMessageId(MESSAGE_ID); - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackGetStackVfModule_404(); - - mockOpenStackPostStacks_200(); - - mockOpenStackGetStackVfModule_200(); - - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers); - - ResponseEntity<CreateVfModuleResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), HttpMethod.POST, - entity, CreateVfModuleResponse.class); - - CreateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/CreateVfModuleResponse.json"), CreateVfModuleResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - } - - @Test - public void testCreateVfModuleFail() throws IOException{ - - CreateVfModuleRequest request = new CreateVfModuleRequest(); - request.setBackout(true); - request.setSkipAAI(true); - request.setFailIfExists(false); - MsoRequest msoReq = new MsoRequest(); - boolean failIfExists = true; - boolean enableBridge = false; - Map<String, Object> vfModuleParams = new HashMap<>(); - - vfModuleParams.put("vf_module_id", VF_MODULE_ID); - vfModuleParams.put("vnf_id", AAI_VNF_ID); - vfModuleParams.put("network_name", NETWORK_NAME); - vfModuleParams.put("vnf_name", VNF_NAME); - vfModuleParams.put("environment_context", ""); - vfModuleParams.put("server_name", SERVER_NAME); - vfModuleParams.put("image", IMAGE); - vfModuleParams.put("workload_context", ""); - vfModuleParams.put("vf_module_index", VF_MODULE_INDEX); - vfModuleParams.put("vf_module_name", VF_MODULE_NAME); - vfModuleParams.put("availability_zone_0", AVAILABILITY_ZONE_0); - vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN); - vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN); - - 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); - request.setVnfId(AAI_VNF_ID); - request.setVnfType(VNF_TYPE); - request.setVnfVersion(VNF_VERSION); - request.setVfModuleId(VF_MODULE_ID); - request.setVfModuleName(VF_MODULE_NAME); - request.setVfModuleType(VF_MODULE_TYPE); - request.setBaseVfModuleStackId(BASE_VF_MODULE_ID); - request.setFailIfExists(failIfExists); - request.setEnableBridge(enableBridge); - request.setVfModuleParams(vfModuleParams); - request.setMessageId(MESSAGE_ID); - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackGetStackVfModule_404(); - - mockOpenStackGetStacks_404(); - - mockOpenStackPostStacks_200(); - - mockOpenStackGetStackVfModule_200(); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers); - - ResponseEntity<VfModuleExceptionResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), HttpMethod.POST, - entity, VfModuleExceptionResponse.class); - - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); - - mockOpenStackGetStacksWithBody_200("DELETE_IN_PROGRESS"); - - response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), HttpMethod.POST, - entity, VfModuleExceptionResponse.class); - - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); - - mockOpenStackGetStacksWithBody_200("DELETE_FAILED"); - - response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), HttpMethod.POST, - entity, VfModuleExceptionResponse.class); - - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); - - mockOpenStackGetStacksWithBody_200("UPDATE_COMPLETE"); - - response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), HttpMethod.POST, - entity, VfModuleExceptionResponse.class); - - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); - - mockOpenStackGetStacksWithBody_404(); - - response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), HttpMethod.POST, - entity, VfModuleExceptionResponse.class); - - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); - - } - - @Test - public void testDeleteVfModule() throws IOException{ - - DeleteVfModuleRequest request = new DeleteVfModuleRequest(); - MsoRequest msoRequest = new MsoRequest(); - String vfModuleStackId = "stackId"; - - msoRequest.setRequestId(MSO_REQUEST_ID); - msoRequest.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); - request.setCloudSiteId(CLOUDSITE_ID); - request.setTenantId(TENANT_ID); - request.setVfModuleId(VF_MODULE_ID); - request.setVfModuleStackId(vfModuleStackId); - request.setVnfId(AAI_VNF_ID); - request.setMsoRequest(msoRequest); - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackPostStacks_200(); - - mockOpenStackGetStacksStackId_404(); - - mockOpenStackGetPublicUrlStackByNameAndID_200(wireMockPort); - - mockOpenStackDeletePublicUrlStackByNameAndID_204(); - - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<DeleteVfModuleRequest> entity = new HttpEntity<DeleteVfModuleRequest>(request, headers); - - ResponseEntity<DeleteVfModuleResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID), HttpMethod.DELETE, - entity, DeleteVfModuleResponse.class); - - ResponseEntity<DeleteVfModuleResponse> responseV2 = restTemplate.exchange( - createURLWithPort("/services/rest/v2/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID), HttpMethod.DELETE, - entity, DeleteVfModuleResponse.class); - - - DeleteVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/DeleteVfModuleResponse.json"), DeleteVfModuleResponse.class); - - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - - assertEquals(Response.Status.OK.getStatusCode(), responseV2.getStatusCode().value()); - assertThat(responseV2.getBody(), sameBeanAs(expectedResponse)); - } - - @Test - public void testUpdateVfModule() throws IOException{ - - UpdateVfModuleRequest request = new UpdateVfModuleRequest(); - MsoRequest msoRequest = new MsoRequest(); - String vfModuleStackId = "vfModuleStackId"; - Boolean failIfExists = false; - Boolean backout = false; - msoRequest.setRequestId(MSO_REQUEST_ID); - msoRequest.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); - - Map<String, Object> vfModuleParams = new HashMap<>(); - - vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN); - vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN); - - Map<String, String> vfModuleOutputs = new HashMap<String, String>(); - - vfModuleOutputs.put("output name", "output value"); - - request.setBackout(backout); - request.setCloudSiteId(CLOUDSITE_ID); - 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); - request.setVfModuleStackId(vfModuleStackId); - request.setBackout(backout); - request.setVfModuleParams(vfModuleParams); - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackGetStacksVfModuleWithLocationHeader_200(wireMockPort); - - mockOpenStackGetStacksVfModule_200(wireMockPort); - - mockOpenStackGetStacksBaseStack_200(wireMockPort); - - mockOpenStackPutStacks_200(); - - UpdateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/UpdateVfModuleResponse.json"), UpdateVfModuleResponse.class); - expectedResponse.setVfModuleOutputs(vfModuleOutputs); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<UpdateVfModuleRequest> entity = new HttpEntity<UpdateVfModuleRequest>(request, headers); - - ResponseEntity<UpdateVfModuleResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_TYPE), HttpMethod.PUT, - entity, UpdateVfModuleResponse.class); - - ResponseEntity<UpdateVfModuleResponse> responseV2 = restTemplate.exchange( - createURLWithPort("/services/rest/v2/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_TYPE), HttpMethod.PUT, - entity, UpdateVfModuleResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - - assertEquals(Response.Status.OK.getStatusCode(), responseV2.getStatusCode().value()); - assertThat(responseV2.getBody(), sameBeanAs(expectedResponse)); - - } - - @Test - public void testRollbackVfModule() throws IOException { - - - MsoRequest msoRequest = new MsoRequest(); - msoRequest.setRequestId(MSO_REQUEST_ID); - msoRequest.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); - - VfModuleRollback vfModuleRollback = new VfModuleRollback(AAI_VNF_ID, VF_MODULE_ID, - "StackId", false, TENANT_ID, CLOUDSITE_ID, msoRequest, "messageId"); - - RollbackVfModuleRequest request = new RollbackVfModuleRequest(); - request.setVfModuleRollback(vfModuleRollback); - - mockOpenStackResponseAccess(wireMockPort); - - mockOpenStackGetStacksStackId_200(wireMockPort); - - mockOpenStackDeleteStacks(); - - mockOpenStackGetStacksVUSP_404(); - - headers.add("Accept", MediaType.APPLICATION_JSON); - HttpEntity<RollbackVfModuleRequest> entity = new HttpEntity<RollbackVfModuleRequest>(request, headers); - - ResponseEntity<RollbackVfModuleResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID + "/rollback"), HttpMethod.DELETE, - entity, RollbackVfModuleResponse.class); - - RollbackVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/RollbackVfModuleResponse.json"),RollbackVfModuleResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - - } - - @Ignore - @Test - public void testQueryVfModule() throws IOException{ - - String testUrl = createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID); - String testUri = UriBuilder.fromPath("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID ) - .host("localhost").port(wireMockPort).scheme("http") - //.queryParam("cloudSiteId", CLOUDSITE_ID).queryParam("tenantId", TENANT_ID) - .build().toString(); - System.out.println(testUri); - - mockOpenStackResponseAccess(wireMockPort); - - - headers.add("Accept", MediaType.APPLICATION_JSON); - //HttpEntity entity = new HttpEntity(null, headers); - ResponseEntity<QueryVfModuleResponse> response = restTemplate.getForEntity(testUri, QueryVfModuleResponse.class); - //System.out.println(response); - - QueryVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( - new File("src/test/resources/__files/QueryVfModuleResponse.json"),QueryVfModuleResponse.class); - - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); - assertThat(response.getBody(), sameBeanAs(expectedResponse)); - } - - private CreateVfModuleRequest populateCreateVfModuleRequest(){ - CreateVfModuleRequest request = new CreateVfModuleRequest(); - request.setBackout(true); - request.setSkipAAI(true); - request.setFailIfExists(false); - MsoRequest msoReq = new MsoRequest(); - boolean failIfExists = true; - boolean enableBridge = false; - Map<String, Object> vfModuleParams = new HashMap<>(); - - vfModuleParams.put("vf_module_id", VF_MODULE_ID); - vfModuleParams.put("vnf_id", AAI_VNF_ID); - vfModuleParams.put("network_name", NETWORK_NAME); - vfModuleParams.put("vnf_name", VNF_NAME); - vfModuleParams.put("environment_context", ""); - vfModuleParams.put("server_name", SERVER_NAME); - vfModuleParams.put("image", IMAGE); - vfModuleParams.put("workload_context", ""); - vfModuleParams.put("vf_module_index", VF_MODULE_INDEX); - vfModuleParams.put("vf_module_name", VF_MODULE_NAME); - vfModuleParams.put("availability_zone_0", AVAILABILITY_ZONE_0); - vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN); - vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN); - - 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); - request.setVnfId(AAI_VNF_ID); - request.setVnfType(VNF_TYPE); - request.setVnfVersion(VNF_VERSION); - request.setVfModuleId(VF_MODULE_ID); - request.setVfModuleName(VF_MODULE_NAME); - request.setVfModuleType(VF_MODULE_TYPE); - request.setBaseVfModuleId(BASE_VF_MODULE_ID); - request.setFailIfExists(failIfExists); - request.setEnableBridge(enableBridge); - request.setVfModuleParams(vfModuleParams); - request.setMessageId(MESSAGE_ID); - - return request; - } + + + @Autowired + private JettisonStyleMapperProvider jettisonTypeObjectMapper; + private static final String MESSAGE_ID = "62265093-277d-4388-9ba6-449838ade586-1517252396874"; + private static final String AAI_VNF_ID = "c93e0d34-5b63-45de-bbae-b0fe49dd3bd9"; + private static final String MSO_REQUEST_ID = "62265093-277d-4388-9ba6-449838ade586"; + private static final String MSO_SERVICE_INSTANCE_ID = "4147e06f-1b89-49c5-b21f-4faf8dc9805a"; + private static final String CLOUDSITE_ID = "mtn13"; + private static final String CLOUD_OWNER = "CloudOwner"; + private static final String TENANT_ID = "0422ffb57ba042c0800a29dc85ca70f8"; + private static final String VNF_TYPE = "MSOTADevInfra_vSAMP10a_Service/vSAMP10a 1"; + private static final String VNF_NAME = "MSO-DEV-VNF-1802-it3-pwt3-vSAMP10a-1XXX-Replace"; + private static final String VNF_VERSION = "1.0"; + private static final String VF_MODULE_ID = "1d48aaec-b7f3-4c24-ba4a-4e798ed3223c"; + private static final String VF_MODULE_NAME = "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001"; + private static final String VF_MODULE_TYPE = "vSAMP10aDEV::PCM::module-2"; + private static final String MODEL_CUSTOMIZATION_UUID = "cb82ffd8-252a-11e7-93ae-92361f002671"; + private static final String BASE_VF_MODULE_ID = "3d7ff7b4-720b-4604-be0a-1974fc58ed96"; + // vfModuleParams specific variables + private static final String NETWORK_NAME = "Dev-vSAMP10a-ntwk-1802-pwt3-v6-Replace-1001"; + private static final String SERVER_NAME = "Dev-vSAMP10a-addon2-1802-pwt3-v6-Replace-1001"; + private static final String IMAGE = "ubuntu_14.04_IPv6"; + private static final String EXN_DIRECT_NET_FQDN = "direct"; + 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 { + + CreateVfModuleRequest request = populateCreateVfModuleRequest(); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackGetStackVfModule_404(wireMockServer); + + mockOpenStackPostStacks_200(wireMockServer); + + mockOpenStackGetStackVfModule_200(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers); + + ResponseEntity<CreateVfModuleResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), + HttpMethod.POST, entity, CreateVfModuleResponse.class); + + ResponseEntity<CreateVfModuleResponse> responseV2 = + restTemplate.exchange(createURLWithPort("/services/rest/v2/vnfs/" + AAI_VNF_ID + "/vf-modules"), + HttpMethod.POST, entity, CreateVfModuleResponse.class); + + CreateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/CreateVfModuleResponse.json"), CreateVfModuleResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + + assertEquals(Response.Status.OK.getStatusCode(), responseV2.getStatusCode().value()); + assertThat(responseV2.getBody(), sameBeanAs(expectedResponse)); + } + + @Test + public void testCreateVfModuleAsyncCall() throws Exception { + CreateVfModuleRequest request = populateCreateVfModuleRequest(); + request.setNotificationUrl(createURLWithPort("/mso/WorkflowMesssage")); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStackVfModule_404(wireMockServer); + mockOpenStackPostStacks_200(wireMockServer); + mockOpenStackGetStackVfModule_200(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers); + + ResponseEntity<CreateVfModuleResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), + HttpMethod.POST, entity, CreateVfModuleResponse.class); + + CreateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/CreateVfModuleResponse.json"), CreateVfModuleResponse.class); + + assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); + } + + @Test + public void testCreateVfModuleWithEnableBridgeNull() + throws JSONException, JsonParseException, JsonMappingException, IOException { + + CreateVfModuleRequest request = new CreateVfModuleRequest(); + request.setBackout(true); + request.setSkipAAI(true); + request.setFailIfExists(false); + MsoRequest msoReq = new MsoRequest(); + boolean failIfExists = true; + Boolean enableBridge = null; + Map<String, Object> vfModuleParams = new HashMap<>(); + + + vfModuleParams.put("vf_module_id", VF_MODULE_ID); + vfModuleParams.put("vnf_id", AAI_VNF_ID); + vfModuleParams.put("network_name", NETWORK_NAME); + vfModuleParams.put("vnf_name", VNF_NAME); + vfModuleParams.put("environment_context", ""); + vfModuleParams.put("server_name", SERVER_NAME); + vfModuleParams.put("image", IMAGE); + vfModuleParams.put("workload_context", ""); + vfModuleParams.put("vf_module_index", VF_MODULE_INDEX); + vfModuleParams.put("vf_module_name", VF_MODULE_NAME); + vfModuleParams.put("availability_zone_0", AVAILABILITY_ZONE_0); + vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN); + vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN); + + 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); + request.setVnfId(AAI_VNF_ID); + request.setVnfVersion(VNF_VERSION); + request.setVfModuleId(VF_MODULE_ID); + request.setVfModuleName(VF_MODULE_NAME); + request.setBaseVfModuleId(BASE_VF_MODULE_ID); + request.setFailIfExists(failIfExists); + request.setEnableBridge(enableBridge); + request.setVfModuleParams(vfModuleParams); + request.setMessageId(MESSAGE_ID); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackGetStackVfModule_404(wireMockServer); + + mockOpenStackPostStacks_200(wireMockServer); + + mockOpenStackGetStackVfModule_200(wireMockServer); + + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers); + + ResponseEntity<CreateVfModuleResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), + HttpMethod.POST, entity, CreateVfModuleResponse.class); + + CreateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/CreateVfModuleResponse.json"), CreateVfModuleResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + + @Test + public void testCreateVfModuleFail() throws IOException { + + CreateVfModuleRequest request = new CreateVfModuleRequest(); + request.setBackout(true); + request.setSkipAAI(true); + request.setFailIfExists(false); + MsoRequest msoReq = new MsoRequest(); + boolean failIfExists = true; + boolean enableBridge = false; + Map<String, Object> vfModuleParams = new HashMap<>(); + + vfModuleParams.put("vf_module_id", VF_MODULE_ID); + vfModuleParams.put("vnf_id", AAI_VNF_ID); + vfModuleParams.put("network_name", NETWORK_NAME); + vfModuleParams.put("vnf_name", VNF_NAME); + vfModuleParams.put("environment_context", ""); + vfModuleParams.put("server_name", SERVER_NAME); + vfModuleParams.put("image", IMAGE); + vfModuleParams.put("workload_context", ""); + vfModuleParams.put("vf_module_index", VF_MODULE_INDEX); + vfModuleParams.put("vf_module_name", VF_MODULE_NAME); + vfModuleParams.put("availability_zone_0", AVAILABILITY_ZONE_0); + vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN); + vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN); + + 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); + request.setVnfId(AAI_VNF_ID); + request.setVnfType(VNF_TYPE); + request.setVnfVersion(VNF_VERSION); + request.setVfModuleId(VF_MODULE_ID); + request.setVfModuleName(VF_MODULE_NAME); + request.setVfModuleType(VF_MODULE_TYPE); + request.setBaseVfModuleStackId(BASE_VF_MODULE_ID); + request.setFailIfExists(failIfExists); + request.setEnableBridge(enableBridge); + request.setVfModuleParams(vfModuleParams); + request.setMessageId(MESSAGE_ID); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackGetStackVfModule_404(wireMockServer); + + mockOpenStackGetStacks_404(wireMockServer); + + mockOpenStackPostStacks_200(wireMockServer); + + mockOpenStackGetStackVfModule_200(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers); + + ResponseEntity<VfModuleExceptionResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), + HttpMethod.POST, entity, VfModuleExceptionResponse.class); + + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); + + mockOpenStackGetStacksWithBody_200(wireMockServer, "DELETE_IN_PROGRESS"); + + response = restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), + HttpMethod.POST, entity, VfModuleExceptionResponse.class); + + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); + + mockOpenStackGetStacksWithBody_200(wireMockServer, "DELETE_FAILED"); + + response = restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), + HttpMethod.POST, entity, VfModuleExceptionResponse.class); + + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); + + mockOpenStackGetStacksWithBody_200(wireMockServer, "UPDATE_COMPLETE"); + + response = restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), + HttpMethod.POST, entity, VfModuleExceptionResponse.class); + + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); + + mockOpenStackGetStacksWithBody_404(wireMockServer); + + response = restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"), + HttpMethod.POST, entity, VfModuleExceptionResponse.class); + + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); + + } + + @Test + public void testDeleteVfModule() throws IOException { + + DeleteVfModuleRequest request = new DeleteVfModuleRequest(); + MsoRequest msoRequest = new MsoRequest(); + String vfModuleStackId = "stackId"; + + msoRequest.setRequestId(MSO_REQUEST_ID); + msoRequest.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); + request.setCloudSiteId(CLOUDSITE_ID); + request.setTenantId(TENANT_ID); + request.setVfModuleId(VF_MODULE_ID); + request.setVfModuleStackId(vfModuleStackId); + request.setVnfId(AAI_VNF_ID); + request.setMsoRequest(msoRequest); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackPostStacks_200(wireMockServer); + + mockOpenStackGetStacksStackId_404(wireMockServer); + + mockOpenStackGetPublicUrlStackByNameAndID_200(wireMockServer, wireMockPort); + + mockOpenStackDeletePublicUrlStackByNameAndID_204(wireMockServer); + + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<DeleteVfModuleRequest> entity = new HttpEntity<DeleteVfModuleRequest>(request, headers); + + ResponseEntity<DeleteVfModuleResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID), + HttpMethod.DELETE, entity, DeleteVfModuleResponse.class); + + ResponseEntity<DeleteVfModuleResponse> responseV2 = restTemplate.exchange( + createURLWithPort("/services/rest/v2/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID), + HttpMethod.DELETE, entity, DeleteVfModuleResponse.class); + + + DeleteVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/DeleteVfModuleResponse.json"), DeleteVfModuleResponse.class); + + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + + assertEquals(Response.Status.OK.getStatusCode(), responseV2.getStatusCode().value()); + assertThat(responseV2.getBody(), sameBeanAs(expectedResponse)); + } + + @Test + public void testUpdateVfModule() throws IOException { + + UpdateVfModuleRequest request = new UpdateVfModuleRequest(); + MsoRequest msoRequest = new MsoRequest(); + String vfModuleStackId = "vfModuleStackId"; + Boolean failIfExists = false; + Boolean backout = false; + msoRequest.setRequestId(MSO_REQUEST_ID); + msoRequest.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); + + Map<String, Object> vfModuleParams = new HashMap<>(); + + vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN); + vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN); + + Map<String, String> vfModuleOutputs = new HashMap<String, String>(); + + vfModuleOutputs.put("output name", "output value"); + + request.setBackout(backout); + request.setCloudSiteId(CLOUDSITE_ID); + 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); + request.setVfModuleStackId(vfModuleStackId); + request.setBackout(backout); + request.setVfModuleParams(vfModuleParams); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackGetStacksVfModuleWithLocationHeader_200(wireMockServer, wireMockPort); + + mockOpenStackGetStacksVfModule_200(wireMockServer, wireMockPort); + + mockOpenStackGetStacksBaseStack_200(wireMockServer, wireMockPort); + + mockOpenStackPutStacks_200(wireMockServer); + + UpdateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/UpdateVfModuleResponse.json"), UpdateVfModuleResponse.class); + expectedResponse.setVfModuleOutputs(vfModuleOutputs); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<UpdateVfModuleRequest> entity = new HttpEntity<UpdateVfModuleRequest>(request, headers); + + ResponseEntity<UpdateVfModuleResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_TYPE), + HttpMethod.PUT, entity, UpdateVfModuleResponse.class); + + ResponseEntity<UpdateVfModuleResponse> responseV2 = restTemplate.exchange( + createURLWithPort("/services/rest/v2/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_TYPE), + HttpMethod.PUT, entity, UpdateVfModuleResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + + assertEquals(Response.Status.OK.getStatusCode(), responseV2.getStatusCode().value()); + assertThat(responseV2.getBody(), sameBeanAs(expectedResponse)); + + } + + @Test + public void testRollbackVfModule() throws IOException { + + + MsoRequest msoRequest = new MsoRequest(); + msoRequest.setRequestId(MSO_REQUEST_ID); + msoRequest.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); + + VfModuleRollback vfModuleRollback = new VfModuleRollback(AAI_VNF_ID, VF_MODULE_ID, "StackId", false, TENANT_ID, + CLOUD_OWNER, CLOUDSITE_ID, msoRequest, "messageId"); + + RollbackVfModuleRequest request = new RollbackVfModuleRequest(); + request.setVfModuleRollback(vfModuleRollback); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + mockOpenStackGetStacksStackId_200(wireMockServer, wireMockPort); + + mockOpenStackDeleteStacks(wireMockServer); + + mockOpenStackGetStacksVUSP_404(wireMockServer); + + headers.add("Accept", MediaType.APPLICATION_JSON); + HttpEntity<RollbackVfModuleRequest> entity = new HttpEntity<RollbackVfModuleRequest>(request, headers); + + ResponseEntity<RollbackVfModuleResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID + "/rollback"), + HttpMethod.DELETE, entity, RollbackVfModuleResponse.class); + + RollbackVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/RollbackVfModuleResponse.json"), RollbackVfModuleResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + + } + + @Ignore + @Test + public void testQueryVfModule() throws IOException { + + String testUrl = createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID); + String testUri = UriBuilder.fromPath("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID) + .host("localhost").port(wireMockPort).scheme("http") + // .queryParam("cloudSiteId", CLOUDSITE_ID).queryParam("tenantId", TENANT_ID) + .build().toString(); + System.out.println(testUri); + + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + + + headers.add("Accept", MediaType.APPLICATION_JSON); + // HttpEntity entity = new HttpEntity(null, headers); + ResponseEntity<QueryVfModuleResponse> response = + restTemplate.getForEntity(testUri, QueryVfModuleResponse.class); + // System.out.println(response); + + QueryVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/QueryVfModuleResponse.json"), QueryVfModuleResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + + private CreateVfModuleRequest populateCreateVfModuleRequest() { + CreateVfModuleRequest request = new CreateVfModuleRequest(); + request.setBackout(true); + request.setSkipAAI(true); + request.setFailIfExists(false); + MsoRequest msoReq = new MsoRequest(); + boolean failIfExists = true; + boolean enableBridge = false; + Map<String, Object> vfModuleParams = new HashMap<>(); + + vfModuleParams.put("vf_module_id", VF_MODULE_ID); + vfModuleParams.put("vnf_id", AAI_VNF_ID); + vfModuleParams.put("network_name", NETWORK_NAME); + vfModuleParams.put("vnf_name", VNF_NAME); + vfModuleParams.put("environment_context", ""); + vfModuleParams.put("server_name", SERVER_NAME); + vfModuleParams.put("image", IMAGE); + vfModuleParams.put("workload_context", ""); + vfModuleParams.put("vf_module_index", VF_MODULE_INDEX); + vfModuleParams.put("vf_module_name", VF_MODULE_NAME); + vfModuleParams.put("availability_zone_0", AVAILABILITY_ZONE_0); + vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN); + vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN); + + 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); + request.setVnfId(AAI_VNF_ID); + request.setVnfType(VNF_TYPE); + request.setVnfVersion(VNF_VERSION); + request.setVfModuleId(VF_MODULE_ID); + request.setVfModuleName(VF_MODULE_NAME); + request.setVfModuleType(VF_MODULE_TYPE); + request.setBaseVfModuleId(BASE_VF_MODULE_ID); + request.setFailIfExists(failIfExists); + request.setEnableBridge(enableBridge); + request.setVfModuleParams(vfModuleParams); + request.setMessageId(MESSAGE_ID); + + return request; + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeAdapterRestTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeAdapterRestTest.java index f602690a10..523a6903cc 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeAdapterRestTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeAdapterRestTest.java @@ -50,84 +50,84 @@ public class VolumeAdapterRestTest extends VolumeGroupAdapterCommon { @Test public void testCreateVNFVolumes() throws IOException { - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackPostStacks_200(); - mockOpenStackGetStackVfModule_200(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackPostStacks_200(wireMockServer); + mockOpenStackGetStackVfModule_200(wireMockServer); CreateVolumeGroupRequest request = buildCreateVfModuleRequest(); HttpEntity<CreateVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<CreateVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/volume-groups"), HttpMethod.POST, - entity, CreateVolumeGroupResponse.class); + ResponseEntity<CreateVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/volume-groups"), HttpMethod.POST, entity, + CreateVolumeGroupResponse.class); assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); } @Test public void testCreateVNFVolumesAsync() throws IOException { - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackPostStacks_200(); - mockOpenStackGetStackVfModule_200(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackPostStacks_200(wireMockServer); + mockOpenStackGetStackVfModule_200(wireMockServer); CreateVolumeGroupRequest request = buildCreateVfModuleRequest(); request.setNotificationUrl("http://localhost:8080"); HttpEntity<CreateVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<CreateVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/volume-groups"), HttpMethod.POST, - entity, CreateVolumeGroupResponse.class); + ResponseEntity<CreateVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/volume-groups"), HttpMethod.POST, entity, + CreateVolumeGroupResponse.class); assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); } @Test - public void testDeleteVNFVolumes() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + public void testDeleteVNFVolumes() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); DeleteVolumeGroupRequest request = buildDeleteVolumeGroupRequest(); HttpEntity<DeleteVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<DeleteVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/volume-groups/"+VOLUME_GROUP_ID), HttpMethod.DELETE, - entity, DeleteVolumeGroupResponse.class); + ResponseEntity<DeleteVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/volume-groups/" + VOLUME_GROUP_ID), + HttpMethod.DELETE, entity, DeleteVolumeGroupResponse.class); assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); } @Test - public void testDeleteVNFVolumesAsync() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + public void testDeleteVNFVolumesAsync() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); DeleteVolumeGroupRequest request = buildDeleteVolumeGroupRequest(); request.setNotificationUrl("http://localhost:8080"); HttpEntity<DeleteVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<DeleteVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/volume-groups/"+VOLUME_GROUP_ID), HttpMethod.DELETE, - entity, DeleteVolumeGroupResponse.class); + ResponseEntity<DeleteVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/volume-groups/" + VOLUME_GROUP_ID), + HttpMethod.DELETE, entity, DeleteVolumeGroupResponse.class); assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); } @Test - public void testRollbackVNFVolumes() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + public void testRollbackVNFVolumes() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); RollbackVolumeGroupRequest request = buildRollbackVolumeGroupRequest(); HttpEntity<RollbackVolumeGroupRequest> entity = new HttpEntity<>(request, headers); ResponseEntity<RollbackVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/volume-groups/"+VOLUME_GROUP_ID+"/rollback"), HttpMethod.DELETE, - entity, RollbackVolumeGroupResponse.class); + createURLWithPort("/services/rest/v1/volume-groups/" + VOLUME_GROUP_ID + "/rollback"), + HttpMethod.DELETE, entity, RollbackVolumeGroupResponse.class); assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); } @Test public void testRollbackVNFVolumesAsync() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); RollbackVolumeGroupRequest request = buildRollbackVolumeGroupRequest(); request.setNotificationUrl("http://localhost:8080"); HttpEntity<RollbackVolumeGroupRequest> entity = new HttpEntity<>(request, headers); ResponseEntity<RollbackVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/volume-groups/"+VOLUME_GROUP_ID+"/rollback"), HttpMethod.DELETE, - entity, RollbackVolumeGroupResponse.class); + createURLWithPort("/services/rest/v1/volume-groups/" + VOLUME_GROUP_ID + "/rollback"), + HttpMethod.DELETE, entity, RollbackVolumeGroupResponse.class); assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); } @Test - public void testQueryVNFVolumes() throws IOException{ - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStacksWithBody_200("UPDATE_COMPLETE"); + public void testQueryVNFVolumes() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStacksWithBody_200(wireMockServer, "UPDATE_COMPLETE"); javax.ws.rs.core.UriBuilder builder = UriBuilder.fromPath("/services/rest/v1/volume-groups/" + VOLUME_GROUP_ID); builder.queryParam("cloudSiteId", CLOUDSITE_ID).queryParam("tenantId", TENANT_ID) .queryParam("volumeGroupStackId", VOUME_GROUP_NAME).queryParam("skipAAI", true) @@ -135,53 +135,51 @@ public class VolumeAdapterRestTest extends VolumeGroupAdapterCommon { .queryParam("msoRequest.serviceInstanceId", MSO_SERVICE_INSTANCE_ID); ResponseEntity<QueryVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort(builder.build().toString()), HttpMethod.GET, - null,QueryVolumeGroupResponse.class); + createURLWithPort(builder.build().toString()), HttpMethod.GET, null, QueryVolumeGroupResponse.class); assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); } @Test - public void testQueryVNFVolumesError() throws IOException{ - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStacksWithBody_200("UPDATE_COMPLETE"); + public void testQueryVNFVolumesError() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStacksWithBody_200(wireMockServer, "UPDATE_COMPLETE"); javax.ws.rs.core.UriBuilder builder = UriBuilder.fromPath("/services/rest/v1/volume-groups/" + VOLUME_GROUP_ID); - builder.queryParam("tenantId", TENANT_ID) - .queryParam("volumeGroupStackId", VOUME_GROUP_NAME).queryParam("skipAAI", true) - .queryParam("msoRequest.requestId", MSO_REQUEST_ID) + builder.queryParam("tenantId", TENANT_ID).queryParam("volumeGroupStackId", VOUME_GROUP_NAME) + .queryParam("skipAAI", true).queryParam("msoRequest.requestId", MSO_REQUEST_ID) .queryParam("msoRequest.serviceInstanceId", MSO_SERVICE_INSTANCE_ID); - ResponseEntity<VolumeGroupExceptionResponse> response = restTemplate.exchange( - createURLWithPort(builder.build().toString()), HttpMethod.GET, - null,VolumeGroupExceptionResponse.class); + ResponseEntity<VolumeGroupExceptionResponse> response = + restTemplate.exchange(createURLWithPort(builder.build().toString()), HttpMethod.GET, null, + VolumeGroupExceptionResponse.class); assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); } @Test public void testUpdateVNFVolumes() throws IOException { - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStacksWithBody_200("CREATE_COMPLETE"); - mockOpenStackPutStack(VOUME_GROUP_NAME+"/stackId",200); - mockOpenStackGetStackWithBody_200("UPDATE_COMPLETE"); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStacksWithBody_200(wireMockServer, "CREATE_COMPLETE"); + mockOpenStackPutStack(wireMockServer, VOUME_GROUP_NAME + "/stackId", 200); + mockOpenStackGetStackWithBody_200(wireMockServer, "UPDATE_COMPLETE"); UpdateVolumeGroupRequest request = buildUpdateVolumeGroupRequest(); HttpEntity<UpdateVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<UpdateVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/volume-groups/"+VOLUME_GROUP_ID), HttpMethod.PUT, - entity,UpdateVolumeGroupResponse.class); + ResponseEntity<UpdateVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/volume-groups/" + VOLUME_GROUP_ID), + HttpMethod.PUT, entity, UpdateVolumeGroupResponse.class); assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); } @Test public void testUpdateVNFVolumesAsync() throws IOException { - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStacksWithBody_200("CREATE_COMPLETE"); - mockOpenStackPutStack(VOUME_GROUP_NAME+"/stackId",200); - mockOpenStackGetStackWithBody_200("UPDATE_COMPLETE"); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStacksWithBody_200(wireMockServer, "CREATE_COMPLETE"); + mockOpenStackPutStack(wireMockServer, VOUME_GROUP_NAME + "/stackId", 200); + mockOpenStackGetStackWithBody_200(wireMockServer, "UPDATE_COMPLETE"); UpdateVolumeGroupRequest request = buildUpdateVolumeGroupRequest(); request.setNotificationUrl("http://localhost:8080"); HttpEntity<UpdateVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<UpdateVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v1/volume-groups/"+VOLUME_GROUP_ID), HttpMethod.PUT, - entity,UpdateVolumeGroupResponse.class); + ResponseEntity<UpdateVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v1/volume-groups/" + VOLUME_GROUP_ID), + HttpMethod.PUT, entity, UpdateVolumeGroupResponse.class); assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2Test.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2Test.java index dba169c311..fb4bec69ed 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2Test.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2Test.java @@ -49,83 +49,83 @@ public class VolumeAdapterRestV2Test extends VolumeGroupAdapterCommon { @Test public void testCreateVNFVolumes() throws IOException { - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackPostStacks_200(); - mockOpenStackGetStackVfModule_200(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackPostStacks_200(wireMockServer); + mockOpenStackGetStackVfModule_200(wireMockServer); CreateVolumeGroupRequest request = buildCreateVfModuleRequest(); HttpEntity<CreateVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<CreateVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v2/volume-groups"), HttpMethod.POST, - entity, CreateVolumeGroupResponse.class); + ResponseEntity<CreateVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v2/volume-groups"), HttpMethod.POST, entity, + CreateVolumeGroupResponse.class); assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); } @Test public void testCreateVNFVolumesAsync() throws IOException { - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackPostStacks_200(); - mockOpenStackGetStackVfModule_200(); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackPostStacks_200(wireMockServer); + mockOpenStackGetStackVfModule_200(wireMockServer); CreateVolumeGroupRequest request = buildCreateVfModuleRequest(); request.setNotificationUrl("http://localhost:8080"); HttpEntity<CreateVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<CreateVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v2/volume-groups"), HttpMethod.POST, - entity, CreateVolumeGroupResponse.class); + ResponseEntity<CreateVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v2/volume-groups"), HttpMethod.POST, entity, + CreateVolumeGroupResponse.class); assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); } @Test - public void testDeleteVNFVolumes() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + public void testDeleteVNFVolumes() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); DeleteVolumeGroupRequest request = buildDeleteVolumeGroupRequest(); HttpEntity<DeleteVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<DeleteVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v2/volume-groups/"+VOLUME_GROUP_ID), HttpMethod.DELETE, - entity, DeleteVolumeGroupResponse.class); + ResponseEntity<DeleteVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v2/volume-groups/" + VOLUME_GROUP_ID), + HttpMethod.DELETE, entity, DeleteVolumeGroupResponse.class); assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); } @Test - public void testDeleteVNFVolumesAsync() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + public void testDeleteVNFVolumesAsync() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); DeleteVolumeGroupRequest request = buildDeleteVolumeGroupRequest(); request.setNotificationUrl("http://localhost:8080"); HttpEntity<DeleteVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<DeleteVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v2/volume-groups/"+VOLUME_GROUP_ID), HttpMethod.DELETE, - entity, DeleteVolumeGroupResponse.class); + ResponseEntity<DeleteVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v2/volume-groups/" + VOLUME_GROUP_ID), + HttpMethod.DELETE, entity, DeleteVolumeGroupResponse.class); assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); } @Test - public void testRollbackVNFVolumes() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + public void testRollbackVNFVolumes() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); RollbackVolumeGroupRequest request = buildRollbackVolumeGroupRequest(); HttpEntity<RollbackVolumeGroupRequest> entity = new HttpEntity<>(request, headers); ResponseEntity<RollbackVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v2/volume-groups/"+VOLUME_GROUP_ID+"/rollback"), HttpMethod.DELETE, - entity, RollbackVolumeGroupResponse.class); + createURLWithPort("/services/rest/v2/volume-groups/" + VOLUME_GROUP_ID + "/rollback"), + HttpMethod.DELETE, entity, RollbackVolumeGroupResponse.class); assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); } @Test - public void testRollbackVNFVolumesAsync() throws IOException { - mockOpenStackResponseAccess(wireMockPort); + public void testRollbackVNFVolumesAsync() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); RollbackVolumeGroupRequest request = buildRollbackVolumeGroupRequest(); request.setNotificationUrl("http://localhost:8080"); HttpEntity<RollbackVolumeGroupRequest> entity = new HttpEntity<>(request, headers); ResponseEntity<RollbackVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v2/volume-groups/"+VOLUME_GROUP_ID+"/rollback"), HttpMethod.DELETE, - entity, RollbackVolumeGroupResponse.class); + createURLWithPort("/services/rest/v2/volume-groups/" + VOLUME_GROUP_ID + "/rollback"), + HttpMethod.DELETE, entity, RollbackVolumeGroupResponse.class); assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); } @Test - public void testQueryVNFVolumes() throws IOException{ - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStacksWithBody_200("UPDATE_COMPLETE"); + public void testQueryVNFVolumes() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStacksWithBody_200(wireMockServer, "UPDATE_COMPLETE"); javax.ws.rs.core.UriBuilder builder = UriBuilder.fromPath("/services/rest/v2/volume-groups/" + VOLUME_GROUP_ID); builder.queryParam("cloudSiteId", CLOUDSITE_ID).queryParam("tenantId", TENANT_ID) .queryParam("volumeGroupStackId", VOUME_GROUP_NAME).queryParam("skipAAI", true) @@ -133,52 +133,51 @@ public class VolumeAdapterRestV2Test extends VolumeGroupAdapterCommon { .queryParam("msoRequest.serviceInstanceId", MSO_SERVICE_INSTANCE_ID); ResponseEntity<QueryVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort(builder.build().toString()), HttpMethod.GET, - null,QueryVolumeGroupResponse.class); + createURLWithPort(builder.build().toString()), HttpMethod.GET, null, QueryVolumeGroupResponse.class); assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); } @Test - public void testQueryVNFVolumesError() throws IOException{ - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStacksWithBody_200("UPDATE_COMPLETE"); + public void testQueryVNFVolumesError() throws IOException { + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStacksWithBody_200(wireMockServer, "UPDATE_COMPLETE"); javax.ws.rs.core.UriBuilder builder = UriBuilder.fromPath("/services/rest/v2/volume-groups/" + VOLUME_GROUP_ID); - builder.queryParam("tenantId", TENANT_ID) - .queryParam("volumeGroupStackId", VOUME_GROUP_NAME).queryParam("skipAAI", true) - .queryParam("msoRequest.requestId", MSO_REQUEST_ID) + builder.queryParam("tenantId", TENANT_ID).queryParam("volumeGroupStackId", VOUME_GROUP_NAME) + .queryParam("skipAAI", true).queryParam("msoRequest.requestId", MSO_REQUEST_ID) .queryParam("msoRequest.serviceInstanceId", MSO_SERVICE_INSTANCE_ID); - ResponseEntity<VolumeGroupExceptionResponse> response = restTemplate.exchange( - createURLWithPort(builder.build().toString()), HttpMethod.GET, - null,VolumeGroupExceptionResponse.class); + ResponseEntity<VolumeGroupExceptionResponse> response = + restTemplate.exchange(createURLWithPort(builder.build().toString()), HttpMethod.GET, null, + VolumeGroupExceptionResponse.class); assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); } + @Test public void testUpdateVNFVolumes() throws IOException { - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStacksWithBody_200("CREATE_COMPLETE"); - mockOpenStackPutStack(VOUME_GROUP_NAME+"/stackId",200); - mockOpenStackGetStackWithBody_200("UPDATE_COMPLETE"); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStacksWithBody_200(wireMockServer, "CREATE_COMPLETE"); + mockOpenStackPutStack(wireMockServer, VOUME_GROUP_NAME + "/stackId", 200); + mockOpenStackGetStackWithBody_200(wireMockServer, "UPDATE_COMPLETE"); UpdateVolumeGroupRequest request = buildUpdateVolumeGroupRequest(); HttpEntity<UpdateVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<UpdateVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v2/volume-groups/"+VOLUME_GROUP_ID), HttpMethod.PUT, - entity,UpdateVolumeGroupResponse.class); + ResponseEntity<UpdateVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v2/volume-groups/" + VOLUME_GROUP_ID), + HttpMethod.PUT, entity, UpdateVolumeGroupResponse.class); assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); } @Test public void testUpdateVNFVolumesAsync() throws IOException { - mockOpenStackResponseAccess(wireMockPort); - mockOpenStackGetStacksWithBody_200("CREATE_COMPLETE"); - mockOpenStackPutStack(VOUME_GROUP_NAME+"/stackId",200); - mockOpenStackGetStackWithBody_200("UPDATE_COMPLETE"); + mockOpenStackResponseAccess(wireMockServer, wireMockPort); + mockOpenStackGetStacksWithBody_200(wireMockServer, "CREATE_COMPLETE"); + mockOpenStackPutStack(wireMockServer, VOUME_GROUP_NAME + "/stackId", 200); + mockOpenStackGetStackWithBody_200(wireMockServer, "UPDATE_COMPLETE"); UpdateVolumeGroupRequest request = buildUpdateVolumeGroupRequest(); request.setNotificationUrl("http://localhost:8080"); HttpEntity<UpdateVolumeGroupRequest> entity = new HttpEntity<>(request, headers); - ResponseEntity<UpdateVolumeGroupResponse> response = restTemplate.exchange( - createURLWithPort("/services/rest/v2/volume-groups/"+VOLUME_GROUP_ID), HttpMethod.PUT, - entity,UpdateVolumeGroupResponse.class); + ResponseEntity<UpdateVolumeGroupResponse> response = + restTemplate.exchange(createURLWithPort("/services/rest/v2/volume-groups/" + VOLUME_GROUP_ID), + HttpMethod.PUT, entity, UpdateVolumeGroupResponse.class); assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeGroupAdapterCommon.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeGroupAdapterCommon.java index d0d06aed6c..14fa1df6c9 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeGroupAdapterCommon.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/VolumeGroupAdapterCommon.java @@ -26,7 +26,6 @@ import org.onap.so.adapters.vnfrest.RollbackVolumeGroupRequest; import org.onap.so.adapters.vnfrest.UpdateVolumeGroupRequest; import org.onap.so.adapters.vnfrest.VolumeGroupRollback; import org.onap.so.entity.MsoRequest; - import java.util.HashMap; import java.util.Map; @@ -113,11 +112,11 @@ public class VolumeGroupAdapterCommon extends BaseRestTestUtils { } private Map<String, Object> getVolumeGroupParamsMap() { - Map<String, Object> volumeGroupParams = new HashMap<>(); - volumeGroupParams.put("fsb_volume_type_0","volume_type"); - volumeGroupParams.put("fsb_volume_image_name_1","vol_img_1"); - volumeGroupParams.put("fsb_volume_image_name_0","vol_img_0"); - volumeGroupParams.put("fsb_volume_size_0","100"); + Map<String, Object> volumeGroupParams = new HashMap<>(); + volumeGroupParams.put("fsb_volume_type_0", "volume_type"); + volumeGroupParams.put("fsb_volume_image_name_1", "vol_img_1"); + volumeGroupParams.put("fsb_volume_image_name_0", "vol_img_0"); + volumeGroupParams.put("fsb_volume_size_0", "100"); return volumeGroupParams; } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/bpmn/mock/StubOpenStack.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/bpmn/mock/StubOpenStack.java index 569a845caa..bb00700b60 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/bpmn/mock/StubOpenStack.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/bpmn/mock/StubOpenStack.java @@ -27,465 +27,486 @@ import static com.github.tomakehurst.wiremock.client.WireMock.equalToJson; import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.post; import static com.github.tomakehurst.wiremock.client.WireMock.put; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; - import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; - import org.apache.http.HttpStatus; +import com.github.tomakehurst.wiremock.WireMockServer; public class StubOpenStack { - private static final String NETWORK_NAME = "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0"; - private static final String NETWORK_ID = "da886914-efb2-4917-b335-c8381528d90b"; - private static final String NETWORK_NAME_2 = "stackname"; - private static final String NETWORK_ID_2 = "stackId"; - - public static void mockOpenStackResponseAccess(int port) throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")).willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access.json", port, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackResponseAccessMulticloud(int port) throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")).willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_AccessMulticloud.json", port, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackResponseAccessQueryNetwork(int port) throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")) - .withRequestBody(containing("tenantId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access_queryNetwork.json", port, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackResponseAccessAdmin(int port) throws IOException { - stubFor(post(urlPathEqualTo("/v2.0/tokens")).willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFile("OpenstackResponse_Access_Admin.json", port, "/mockPublicUrl")) - .withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPublicUrlStackByName_200(int port) throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/"+NETWORK_NAME)).willReturn(aResponse() - .withHeader("X-Openstack-Request-Id", "openstackRquest") - .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/"+NETWORK_NAME) - .withBody(getBodyFromFile("OpenstackResponse_StackId.json", port, "/mockPublicUrl/stacks/" + NETWORK_NAME)) - .withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPublicUrlStackByID_200(int port) throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/"+NETWORK_ID)).willReturn(aResponse() - .withHeader("X-Openstack-Request-Id", "openstackRquest") - .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/"+NETWORK_NAME) - .withBody(getBodyFromFile("OpenstackResponse_StackId.json", port, "/mockPublicUrl/stacks/" + NETWORK_NAME)) - .withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetPublicUrlStackByNameAndID_200(int port) throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/"+NETWORK_NAME+"/"+NETWORK_ID)).willReturn(aResponse() - .withHeader("X-Openstack-Request-Id", "openstackRquest") - .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/"+NETWORK_NAME) - .withBody(getBodyFromFile("OpenstackResponse_StackId.json", port, "/mockPublicUrl/stacks/" + NETWORK_NAME)) - .withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetPublicUrlStackByNameAndID_204(int port) throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/"+NETWORK_NAME+"/"+NETWORK_ID)).willReturn(aResponse() - .withHeader("X-Openstack-Request-Id", "openstackRquest") - .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/"+NETWORK_NAME+"/"+NETWORK_ID) - .withBody(getBodyFromFile("OpenstackResponse_StackId.json", port, "/mockPublicUrl/stacks/" + NETWORK_NAME)) - .withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackPutPublicUrlStackByNameAndID_200() { - stubFor(put(urlPathEqualTo("/mockPublicUrl/stacks/"+NETWORK_NAME+"/"+NETWORK_ID)).willReturn(aResponse() - .withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPutPublicUrlStackByNameAndID_NETWORK2_200() { - stubFor(put(urlPathEqualTo("/mockPublicUrl/stacks/"+NETWORK_NAME_2+"/"+NETWORK_ID_2)).willReturn(aResponse() - .withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackDeletePublicUrlStackByNameAndID_204() { - stubFor(delete(urlPathEqualTo("/mockPublicUrl/stacks/"+NETWORK_NAME+"/"+NETWORK_ID)).willReturn(aResponse() - .withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_NO_CONTENT))); - } - - public static void mockOpenStackPostPublicUrlWithBodyFile_200() { - stubFor(post(urlPathEqualTo("/mockPublicUrl/stacks")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Stack.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetStackCreatedAppC_200() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/APP-C-24595-T-IST-04AShared_untrusted_vDBE_net_3/stackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Stack_Created.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetStackAppC_404() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/APP-C-24595-T-IST-04AShared_untrusted_vDBE_net_3")) - .willReturn(aResponse().withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackGetStackCreatedVUSP_200() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0/stackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Stack_Created.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetStackVUSP_404() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0")) - .willReturn(aResponse().withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackPostStack_200(String filename) { - stubFor(post(urlPathEqualTo("/mockPublicUrl/stacks")).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile(filename).withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPostNeutronNetwork_200(String filename) { - stubFor(post(urlPathEqualTo("/mockPublicUrl/v2.0/networks")).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile(filename).withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPutNeutronNetwork_200(String filename,String networkId) { - stubFor(put(urlPathEqualTo("/mockPublicUrl/v2.0/networks/"+networkId)).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile(filename).withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPutNeutronNetwork(String networkId, int responseCode) { - stubFor(put(urlPathEqualTo("/mockPublicUrl/v2.0/networks/"+networkId)).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withStatus(responseCode))); - } - - public static void mockOpenStackGetAllNeutronNetworks_200(String filename){ - stubFor(get(urlPathEqualTo("/mockPublicUrl/v2.0/networks")).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile(filename).withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetNeutronNetwork_404(String networkName) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/v2.0/networks/"+networkName)).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackGetAllNeutronNetworks_404() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/v2.0/networks")).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenstackGetWithResponse(String url,int responseCode, String responseFile) { - stubFor(get(urlPathEqualTo(url)).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile(responseFile) - .withStatus(responseCode))); - } - - public static void mockOpenstackPostWithResponse(String url,int responseCode, String responseFile) { - stubFor(post(urlPathEqualTo(url)).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile(responseFile) - .withStatus(responseCode))); - } - - public static void mockOpenstackGet(String url,int responseCode) { - stubFor(get(urlPathEqualTo(url)).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withStatus(responseCode))); - } - - public static void mockOpenstackPost(String url,int responseCode) { - stubFor(post(urlPathEqualTo(url)).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withStatus(responseCode))); - } - - public static void mockOpenStackGetStackVfModule_200() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json") - .withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetStackVfModule_404() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackPostStacks_200() { - stubFor(post(urlPathEqualTo("/mockPublicUrl/stacks")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Stack.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetStacks_404() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/3d7ff7b4-720b-4604-be0a-1974fc58ed96")) - .willReturn(aResponse().withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackGetStacksWithBody_200(String replaceWith) throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFileVnfAdapter(replaceWith)) - .withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetStackWithBody_200(String replaceWith) throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFileVnfAdapter(replaceWith)) - .withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetStacksWithBody_404() throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(getBodyFromFileVnfAdapter(null)) - .withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackGetStacksStackId_404() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/stackId")) - .willReturn(aResponse().withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackGetStacksVfModule_200(int port) throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")).willReturn(aResponse() - .withHeader("X-Openstack-Request-Id", "openstackRquest") - .withBody(getBodyFromFile("OpenstackResponse_VnfStackId.json", port, "/mockPublicUrl/stacks/stackId")).withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetStacksVfModuleWithLocationHeader_200(int port) throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")).willReturn(aResponse() - .withHeader("X-Openstack-Request-Id", "openstackRquest") - .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001") - .withBody(getBodyFromFile("OpenstackResponse_VnfStackId.json", port, "/mockPublicUrl/stacks/stackId")).withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetStacksBaseStack_200(int port) throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/baseVfModuleStackId")).willReturn(aResponse() - .withHeader("X-Openstack-Request-Id", "openstackRquest") - .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/baseVfModuleStackId") - .withBody(getBodyFromFile("OpenstackResponse_VnfBaseStackId.json", port, "/mockPublicUrl/stacks/stackId")).withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPutStacks_200() { - stubFor(put(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")).willReturn(aResponse() - .withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPutStack(String networkId,int responseCode) { - stubFor(put(urlPathEqualTo("/mockPublicUrl/stacks/"+networkId)) - .willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withStatus(responseCode))); - } - - public static void mockOpenStackGetStacksStackId_200(int port) throws IOException { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/StackId")).willReturn(aResponse() - .withHeader("X-Openstack-Request-Id", "openstackRquest") - .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/stackId") - .withBody(getBodyFromFile("OpenstackResponse_StackId.json", port, "/mockPublicUrl/stacks/stackId")).withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackDeleteStacks() { - stubFor(delete(urlPathEqualTo("/mockPublicUrl/stacks/vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0/da886914-efb2-4917-b335-c8381528d90b")) - .willReturn(aResponse().withHeader("X-Openstack-Request-Id", "openstackRquest"))); - } - - public static void mockOpenStackGetStacksVUSP_404() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0/da886914-efb2-4917-b335-c8381528d90b")) - .willReturn(aResponse() - .withHeader("X-Openstack-Request-Id", "openstackRquest") - .withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackGetStackCreated_200(String filename, String networkName) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + networkName)) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile(filename).withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetStack_404(String networkName) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + networkName)) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackGetStack_500(String networkName) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + networkName)) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); - } - - public static void mockOpenStackGetStackDeleteOrUpdateComplete_200(String filename) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME_2 + "/" + NETWORK_ID_2)) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile(filename).withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetNeutronNetwork(String filename,String networkId,int status) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/v2.0/networks/"+ networkId)) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBodyFile(filename).withStatus(status))); - } - - public static void mockOpenStackGetNeutronNetwork(String networkId,int status) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/v2.0/networks/"+ networkId)) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withStatus(status))); - } - - public static void mockOpenStackDeleteStack_200() { - stubFor(delete(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME_2 + "/" + NETWORK_ID_2)) - .willReturn(aResponse().withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackDeleteStack_500() { - stubFor(delete(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME_2 + "/" + NETWORK_ID_2)) - .willReturn(aResponse().withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); - } - - public static void mockOpenStackDeleteNeutronNetwork(String networkId,int responseCode) { - stubFor(delete(urlPathEqualTo("/mockPublicUrl/v2.0/networks/" + networkId)) - .willReturn(aResponse().withStatus(responseCode))); - } - - public static void mockOpenStackPostMetadata_200() { - stubFor(post(urlPathEqualTo("/mockPublicUrl/tenants/tenantId/metadata")).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Metadata.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetMetadata_200() { - stubFor(get(urlPathEqualTo("/mockPublicUrl/tenants/tenantId/metadata")).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Metadata.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPostTenantWithBodyFile_200() throws IOException { - stubFor(post(urlPathEqualTo("/mockPublicUrl/tenants")) - .withRequestBody(equalToJson(readFile("src/test/resources/__files/OpenstackRequest_Tenant.json"))).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Tenant.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPostTenant_200() throws IOException { - stubFor(post(urlPathEqualTo("/mockPublicUrl/tenants")).willReturn(aResponse() - .withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetTenantByName_200(String tenantName) { - stubFor(get(urlEqualTo("/mockPublicUrl/tenants/?name=" + tenantName)).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Tenant.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetTenantByName_404(String tenantName) { - stubFor(get(urlEqualTo("/mockPublicUrl/tenants/?name=" + tenantName)).willReturn(aResponse() - .withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackGetTenantById_200(String tenantId) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/tenants/" + tenantId)).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Tenant.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetTenantById_404(String tenantId) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/tenants/" + tenantId)).willReturn(aResponse() - .withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_NOT_FOUND))); - } - - public static void mockOpenStackDeleteTenantById_200(String tenantId) { - stubFor(delete(urlPathEqualTo("/mockPublicUrl/tenants/" + tenantId)).willReturn(aResponse() - .withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetUser_200(String user) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/users/" + user)).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_User.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackGetRoles_200(String roleFor) { - stubFor(get(urlPathEqualTo("/mockPublicUrl/" + roleFor + "/roles")).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBodyFile("OpenstackResponse_Roles.json").withStatus(HttpStatus.SC_OK))); - } - - public static void mockOpenStackPutRolesAdmin_200(String roleFor) { - stubFor(put(urlPathEqualTo("/mockPublicUrl/tenants/tenantId/users/msoId/roles/" + roleFor + "/admin")).willReturn(aResponse() - .withHeader("Content-Type", "application/json") - .withBody("").withStatus(HttpStatus.SC_OK))); - } - - public static void mockValetCreatePostResponse_200(String requestId, String body) { - stubFor(post(urlEqualTo("/api/valet/placement/v1/?requestId=" + requestId)) + private static final String NETWORK_NAME = "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0"; + private static final String NETWORK_ID = "da886914-efb2-4917-b335-c8381528d90b"; + private static final String NETWORK_NAME_2 = "stackname"; + private static final String NETWORK_ID_2 = "stackId"; + + public static void mockOpenStackResponseAccess(WireMockServer wireMockServer, int port) throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")) .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(body).withStatus(HttpStatus.SC_OK))); - } - - public static void mockValetCreatePutResponse_200(String requestId, String body) { - stubFor(put(urlEqualTo("/api/valet/placement/v1/?requestId=" + requestId)) - .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(body).withStatus(HttpStatus.SC_OK))); - } - - public static void mockValetDeleteDeleteResponse_200(String requestId, String body) { - stubFor(delete(urlEqualTo("/api/valet/placement/v1/?requestId=" + requestId)) + .withBody(getBodyFromFile("OpenstackResponse_Access.json", port, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackResponseAccessMulticloud(WireMockServer wireMockServer, int port) + throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFile("OpenstackResponse_AccessMulticloud.json", port, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackResponseAccessQueryNetwork(WireMockServer wireMockServer, int port) + throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")).withRequestBody(containing("tenantId")) .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(body).withStatus(HttpStatus.SC_OK))); - } - - public static void mockValetConfirmPutRequest_200(String requestId, String body) { - stubFor(put(urlPathEqualTo("/api/valet/placement/v1/" + requestId + "/confirm/")) + .withBody(getBodyFromFile("OpenstackResponse_Access_queryNetwork.json", port, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackResponseAccessAdmin(WireMockServer wireMockServer, int port) throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/v2.0/tokens")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFile("OpenstackResponse_Access_Admin.json", port, "/mockPublicUrl")) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPublicUrlStackByName_200(WireMockServer wireMockServer, int port) + throws IOException { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME)) + .willReturn(aResponse().withHeader("X-Openstack-Request-Id", "openstackRquest") + .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/" + NETWORK_NAME) + .withBody(getBodyFromFile("OpenstackResponse_StackId.json", port, + "/mockPublicUrl/stacks/" + NETWORK_NAME)) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPublicUrlStackByID_200(WireMockServer wireMockServer, int port) throws IOException { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_ID)) + .willReturn(aResponse().withHeader("X-Openstack-Request-Id", "openstackRquest") + .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/" + NETWORK_NAME) + .withBody(getBodyFromFile("OpenstackResponse_StackId.json", port, + "/mockPublicUrl/stacks/" + NETWORK_NAME)) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetPublicUrlStackByNameAndID_200(WireMockServer wireMockServer, int port) + throws IOException { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME + "/" + NETWORK_ID)) + .willReturn(aResponse().withHeader("X-Openstack-Request-Id", "openstackRquest") + .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/" + NETWORK_NAME) + .withBody(getBodyFromFile("OpenstackResponse_StackId.json", port, + "/mockPublicUrl/stacks/" + NETWORK_NAME)) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetPublicUrlStackByNameAndID_204(WireMockServer wireMockServer, int port) + throws IOException { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME + "/" + NETWORK_ID)) + .willReturn(aResponse().withHeader("X-Openstack-Request-Id", "openstackRquest") + .withHeader("location", + "http://localhost:" + port + "/mockPublicUrl/stacks/" + NETWORK_NAME + "/" + NETWORK_ID) + .withBody(getBodyFromFile("OpenstackResponse_StackId.json", port, + "/mockPublicUrl/stacks/" + NETWORK_NAME)) + .withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackPutPublicUrlStackByNameAndID_200(WireMockServer wireMockServer) { + wireMockServer.stubFor(put(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME + "/" + NETWORK_ID)) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPutPublicUrlStackByNameAndID_NETWORK2_200(WireMockServer wireMockServer) { + wireMockServer.stubFor(put(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME_2 + "/" + NETWORK_ID_2)) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackDeletePublicUrlStackByNameAndID_204(WireMockServer wireMockServer) { + wireMockServer.stubFor(delete(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME + "/" + NETWORK_ID)) .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(body).withStatus(HttpStatus.SC_OK))); - } - - public static void mockValetRollbackPutRequest_200(String requestId, String body) { - stubFor(put(urlPathEqualTo("/api/valet/placement/v1/" + requestId + "/rollback/")) + .withStatus(HttpStatus.SC_NO_CONTENT))); + } + + public static void mockOpenStackPostPublicUrlWithBodyFile_200(WireMockServer wireMockServer) { + wireMockServer.stubFor(post(urlPathEqualTo("/mockPublicUrl/stacks")) .willReturn(aResponse().withHeader("Content-Type", "application/json") - .withBody(body).withStatus(HttpStatus.SC_OK))); - } - - private static String getBodyFromFileVnfAdapter(String replaceWith) throws IOException { - String temp = readFile("src/test/resources/__files/OpenstackResponse_Stack_Created_VfModule.json"); - if (replaceWith == null) { - return temp; - } - return temp.replaceAll("CREATE_COMPLETE", replaceWith); - } - - private static String readFile(String fileName) throws IOException { - try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - - while (line != null) { - sb.append(line); - sb.append("\n"); - line = br.readLine(); - } - return sb.toString(); - } - } - - public static String getBodyFromFile(String fileName, int port, String urlPath) throws IOException { - return readFile("src/test/resources/__files/" + fileName).replaceAll("port", "http://localhost:" + port + urlPath); - } + .withBodyFile("OpenstackResponse_Stack.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetStackCreatedAppC_200(WireMockServer wireMockServer) { + wireMockServer.stubFor( + get(urlPathEqualTo("/mockPublicUrl/stacks/APP-C-24595-T-IST-04AShared_untrusted_vDBE_net_3/stackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Stack_Created.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetStackAppC_404(WireMockServer wireMockServer) { + wireMockServer + .stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/APP-C-24595-T-IST-04AShared_untrusted_vDBE_net_3")) + .willReturn(aResponse().withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackGetStackCreatedVUSP_200(WireMockServer wireMockServer) { + wireMockServer.stubFor( + get(urlPathEqualTo("/mockPublicUrl/stacks/vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0/stackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Stack_Created.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetStackVUSP_404(WireMockServer wireMockServer) { + wireMockServer + .stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0")) + .willReturn(aResponse().withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackPostStack_200(WireMockServer wireMockServer, String filename) { + wireMockServer.stubFor(post(urlPathEqualTo("/mockPublicUrl/stacks")).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBodyFile(filename).withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPostNeutronNetwork_200(WireMockServer wireMockServer, String filename) { + wireMockServer.stubFor(post(urlPathEqualTo("/mockPublicUrl/v2.0/networks")).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBodyFile(filename).withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPutNeutronNetwork_200(WireMockServer wireMockServer, String filename, + String networkId) { + wireMockServer.stubFor(put(urlPathEqualTo("/mockPublicUrl/v2.0/networks/" + networkId)).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBodyFile(filename).withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPutNeutronNetwork(WireMockServer wireMockServer, String networkId, + int responseCode) { + wireMockServer.stubFor(put(urlPathEqualTo("/mockPublicUrl/v2.0/networks/" + networkId)) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(responseCode))); + } + + public static void mockOpenStackGetAllNeutronNetworks_200(WireMockServer wireMockServer, String filename) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/v2.0/networks")).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBodyFile(filename).withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetNeutronNetwork_404(WireMockServer wireMockServer, String networkName) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/v2.0/networks/" + networkName)).willReturn( + aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackGetAllNeutronNetworks_404(WireMockServer wireMockServer) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/v2.0/networks")).willReturn( + aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenstackGetWithResponse(WireMockServer wireMockServer, String url, int responseCode, + String responseFile) { + wireMockServer.stubFor(get(urlPathEqualTo(url)).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBodyFile(responseFile).withStatus(responseCode))); + } + + public static void mockOpenstackPostWithResponse(WireMockServer wireMockServer, String url, int responseCode, + String responseFile) { + wireMockServer.stubFor(post(urlPathEqualTo(url)).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBodyFile(responseFile).withStatus(responseCode))); + } + + public static void mockOpenstackGet(WireMockServer wireMockServer, String url, int responseCode) { + wireMockServer.stubFor(get(urlPathEqualTo(url)) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(responseCode))); + } + + public static void mockOpenstackPost(WireMockServer wireMockServer, String url, int responseCode) { + wireMockServer.stubFor(post(urlPathEqualTo(url)) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(responseCode))); + } + + public static void mockOpenStackGetStackVfModule_200(WireMockServer wireMockServer) { + wireMockServer.stubFor(get( + urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Stack_Created_VfModule.json") + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetStackVfModule_404(WireMockServer wireMockServer) { + wireMockServer.stubFor( + get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackPostStacks_200(WireMockServer wireMockServer) { + wireMockServer.stubFor(post(urlPathEqualTo("/mockPublicUrl/stacks")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Stack.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetStacks_404(WireMockServer wireMockServer) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/3d7ff7b4-720b-4604-be0a-1974fc58ed96")) + .willReturn(aResponse().withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackGetStacksWithBody_200(WireMockServer wireMockServer, String replaceWith) + throws IOException { + wireMockServer.stubFor( + get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFileVnfAdapter(replaceWith)).withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetStackWithBody_200(WireMockServer wireMockServer, String replaceWith) + throws IOException { + wireMockServer.stubFor(get( + urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFileVnfAdapter(replaceWith)).withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetStacksWithBody_404(WireMockServer wireMockServer) throws IOException { + wireMockServer.stubFor( + get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBody(getBodyFromFileVnfAdapter(null)).withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackGetStacksStackId_404(WireMockServer wireMockServer) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/stackId")) + .willReturn(aResponse().withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackGetStacksVfModule_200(WireMockServer wireMockServer, int port) throws IOException { + wireMockServer.stubFor(get(urlPathEqualTo( + "/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")) + .willReturn(aResponse().withHeader("X-Openstack-Request-Id", "openstackRquest") + .withBody(getBodyFromFile("OpenstackResponse_VnfStackId.json", port, + "/mockPublicUrl/stacks/stackId")) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetStacksVfModuleWithLocationHeader_200(WireMockServer wireMockServer, int port) + throws IOException { + wireMockServer.stubFor( + get(urlPathEqualTo("/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")) + .willReturn(aResponse().withHeader("X-Openstack-Request-Id", "openstackRquest") + .withHeader("location", "http://localhost:" + port + + "/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001") + .withBody(getBodyFromFile("OpenstackResponse_VnfStackId.json", port, + "/mockPublicUrl/stacks/stackId")) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetStacksBaseStack_200(WireMockServer wireMockServer, int port) throws IOException { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/baseVfModuleStackId")).willReturn(aResponse() + .withHeader("X-Openstack-Request-Id", "openstackRquest") + .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/baseVfModuleStackId") + .withBody( + getBodyFromFile("OpenstackResponse_VnfBaseStackId.json", port, "/mockPublicUrl/stacks/stackId")) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPutStacks_200(WireMockServer wireMockServer) { + wireMockServer.stubFor(put(urlPathEqualTo( + "/mockPublicUrl/stacks/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPutStack(WireMockServer wireMockServer, String networkId, int responseCode) { + wireMockServer.stubFor(put(urlPathEqualTo("/mockPublicUrl/stacks/" + networkId)) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(responseCode))); + } + + public static void mockOpenStackGetStacksStackId_200(WireMockServer wireMockServer, int port) throws IOException { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/StackId")).willReturn(aResponse() + .withHeader("X-Openstack-Request-Id", "openstackRquest") + .withHeader("location", "http://localhost:" + port + "/mockPublicUrl/stacks/stackId") + .withBody(getBodyFromFile("OpenstackResponse_StackId.json", port, "/mockPublicUrl/stacks/stackId")) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackDeleteStacks(WireMockServer wireMockServer) { + wireMockServer.stubFor(delete(urlPathEqualTo( + "/mockPublicUrl/stacks/vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0/da886914-efb2-4917-b335-c8381528d90b")) + .willReturn(aResponse().withHeader("X-Openstack-Request-Id", "openstackRquest"))); + } + + public static void mockOpenStackGetStacksVUSP_404(WireMockServer wireMockServer) { + wireMockServer.stubFor(get(urlPathEqualTo( + "/mockPublicUrl/stacks/vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0/da886914-efb2-4917-b335-c8381528d90b")) + .willReturn(aResponse().withHeader("X-Openstack-Request-Id", "openstackRquest") + .withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackGetStackCreated_200(WireMockServer wireMockServer, String filename, + String networkName) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + networkName)).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBodyFile(filename).withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetStack_404(WireMockServer wireMockServer, String networkName) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + networkName)).willReturn( + aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackGetStack_500(WireMockServer wireMockServer, String networkName) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + networkName)).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); + } + + public static void mockOpenStackGetStackDeleteOrUpdateComplete_200(WireMockServer wireMockServer, String filename) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME_2 + "/" + NETWORK_ID_2)) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withBodyFile(filename) + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetNeutronNetwork(WireMockServer wireMockServer, String filename, String networkId, + int status) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/v2.0/networks/" + networkId)).willReturn( + aResponse().withHeader("Content-Type", "application/json").withBodyFile(filename).withStatus(status))); + } + + public static void mockOpenStackGetNeutronNetwork(WireMockServer wireMockServer, String networkId, int status) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/v2.0/networks/" + networkId)) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(status))); + } + + public static void mockOpenStackDeleteStack_200(WireMockServer wireMockServer) { + wireMockServer.stubFor(delete(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME_2 + "/" + NETWORK_ID_2)) + .willReturn(aResponse().withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackDeleteStack_500(WireMockServer wireMockServer) { + wireMockServer.stubFor(delete(urlPathEqualTo("/mockPublicUrl/stacks/" + NETWORK_NAME_2 + "/" + NETWORK_ID_2)) + .willReturn(aResponse().withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); + } + + public static void mockOpenStackDeleteNeutronNetwork(WireMockServer wireMockServer, String networkId, + int responseCode) { + wireMockServer.stubFor(delete(urlPathEqualTo("/mockPublicUrl/v2.0/networks/" + networkId)) + .willReturn(aResponse().withStatus(responseCode))); + } + + public static void mockOpenStackPostMetadata_200(WireMockServer wireMockServer) { + wireMockServer.stubFor(post(urlPathEqualTo("/mockPublicUrl/tenants/tenantId/metadata")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Metadata.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetMetadata_200(WireMockServer wireMockServer) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/tenants/tenantId/metadata")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Metadata.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPostTenantWithBodyFile_200(WireMockServer wireMockServer) throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/mockPublicUrl/tenants")) + .withRequestBody(equalToJson(readFile("src/test/resources/__files/OpenstackRequest_Tenant.json"))) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Tenant.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPostTenant_200(WireMockServer wireMockServer) throws IOException { + wireMockServer.stubFor(post(urlPathEqualTo("/mockPublicUrl/tenants")) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetTenantByName_200(WireMockServer wireMockServer, String tenantName) { + wireMockServer.stubFor(get(urlEqualTo("/mockPublicUrl/tenants/?name=" + tenantName)) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Tenant.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetTenantByName_404(WireMockServer wireMockServer, String tenantName) { + wireMockServer.stubFor(get(urlEqualTo("/mockPublicUrl/tenants/?name=" + tenantName)).willReturn( + aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackGetTenantById_200(WireMockServer wireMockServer, String tenantId) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/tenants/" + tenantId)) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Tenant.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetTenantById_404(WireMockServer wireMockServer, String tenantId) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/tenants/" + tenantId)).willReturn( + aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_NOT_FOUND))); + } + + public static void mockOpenStackDeleteTenantById_200(WireMockServer wireMockServer, String tenantId) { + wireMockServer.stubFor(delete(urlPathEqualTo("/mockPublicUrl/tenants/" + tenantId)) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetUser_200(WireMockServer wireMockServer, String user) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/users/" + user)) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_User.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackGetRoles_200(WireMockServer wireMockServer, String roleFor) { + wireMockServer.stubFor(get(urlPathEqualTo("/mockPublicUrl/" + roleFor + "/roles")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withBodyFile("OpenstackResponse_Roles.json").withStatus(HttpStatus.SC_OK))); + } + + public static void mockOpenStackPutRolesAdmin_200(WireMockServer wireMockServer, String roleFor) { + wireMockServer + .stubFor(put(urlPathEqualTo("/mockPublicUrl/tenants/tenantId/users/msoId/roles/" + roleFor + "/admin")) + .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody("") + .withStatus(HttpStatus.SC_OK))); + } + + public static void mockValetCreatePostResponse_200(WireMockServer wireMockServer, String requestId, String body) { + wireMockServer + .stubFor(post(urlEqualTo("/api/valet/placement/v1/?requestId=" + requestId)).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBody(body).withStatus(HttpStatus.SC_OK))); + } + + public static void mockValetCreatePutResponse_200(WireMockServer wireMockServer, String requestId, String body) { + wireMockServer.stubFor(put(urlEqualTo("/api/valet/placement/v1/?requestId=" + requestId)).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBody(body).withStatus(HttpStatus.SC_OK))); + } + + public static void mockValetDeleteDeleteResponse_200(WireMockServer wireMockServer, String requestId, String body) { + wireMockServer + .stubFor(delete(urlEqualTo("/api/valet/placement/v1/?requestId=" + requestId)).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBody(body).withStatus(HttpStatus.SC_OK))); + } + + public static void mockValetConfirmPutRequest_200(WireMockServer wireMockServer, String requestId, String body) { + wireMockServer.stubFor( + put(urlPathEqualTo("/api/valet/placement/v1/" + requestId + "/confirm/")).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBody(body).withStatus(HttpStatus.SC_OK))); + } + + public static void mockValetRollbackPutRequest_200(WireMockServer wireMockServer, String requestId, String body) { + wireMockServer.stubFor( + put(urlPathEqualTo("/api/valet/placement/v1/" + requestId + "/rollback/")).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBody(body).withStatus(HttpStatus.SC_OK))); + } + + private static String getBodyFromFileVnfAdapter(String replaceWith) throws IOException { + String temp = readFile("src/test/resources/__files/OpenstackResponse_Stack_Created_VfModule.json"); + if (replaceWith == null) { + return temp; + } + return temp.replaceAll("CREATE_COMPLETE", replaceWith); + } + + private static String readFile(String fileName) throws IOException { + try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { + StringBuilder sb = new StringBuilder(); + String line = br.readLine(); + + while (line != null) { + sb.append(line); + sb.append("\n"); + line = br.readLine(); + } + return sb.toString(); + } + } + + public static String getBodyFromFile(String fileName, int port, String urlPath) throws IOException { + return readFile("src/test/resources/__files/" + fileName).replaceAll("port", + "http://localhost:" + port + urlPath); + } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/HeatBridgeImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/HeatBridgeImplTest.java new file mode 100644 index 0000000000..0787cef75d --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/HeatBridgeImplTest.java @@ -0,0 +1,367 @@ +/* + * Copyright (C) 2018 Bell Canada. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.onap.so.heatbridge; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import org.apache.commons.io.FileUtils; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.onap.aai.domain.yang.LInterface; +import org.onap.aai.domain.yang.PInterface; +import org.onap.aai.domain.yang.SriovPf; +import org.onap.aai.domain.yang.Vserver; +import org.onap.so.client.aai.AAIObjectType; +import org.onap.so.client.aai.AAIResourcesClient; +import org.onap.so.client.aai.AAISingleTransactionClient; +import org.onap.so.client.aai.entities.uri.AAIResourceUri; +import org.onap.so.client.aai.entities.uri.AAIUriFactory; +import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed; +import org.onap.so.db.catalog.beans.CloudIdentity; +import org.onap.so.heatbridge.constants.HeatBridgeConstants; +import org.onap.so.heatbridge.openstack.api.OpenstackClient; +import org.onap.so.heatbridge.openstack.api.OpenstackClientException; +import org.openstack4j.model.compute.Flavor; +import org.openstack4j.model.compute.Image; +import org.openstack4j.model.compute.Server; +import org.openstack4j.model.compute.Server.Status; +import org.openstack4j.model.heat.Resource; +import org.openstack4j.model.network.Network; +import org.openstack4j.model.network.NetworkType; +import org.openstack4j.model.network.Port; +import org.openstack4j.openstack.heat.domain.HeatResource; +import org.openstack4j.openstack.heat.domain.HeatResource.Resources; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.ImmutableMap; + + +@RunWith(MockitoJUnitRunner.class) +public class HeatBridgeImplTest { + + private static final String CLOUD_OWNER = "CloudOwner"; + private static final String REGION_ID = "RegionOne"; + private static final String TENANT_ID = "7320ec4a5b9d4589ba7c4412ccfd290f"; + private static final ObjectMapper MAPPER = new ObjectMapper(); + + @Mock + private OpenstackClient osClient; + + private CloudIdentity cloudIdentity = new CloudIdentity(); + + @Mock + private AAIResourcesClient resourcesClient; + @Mock + private AAISingleTransactionClient transaction; + + private HeatBridgeImpl heatbridge; + + @Before + public void setUp() throws HeatBridgeException, OpenstackClientException, BulkProcessFailed { + + when(resourcesClient.beginSingleTransaction()).thenReturn(transaction); + heatbridge = new HeatBridgeImpl(resourcesClient, cloudIdentity, CLOUD_OWNER, REGION_ID, TENANT_ID); + } + + @Ignore + @Test + public void testQueryNestedHeatStackResources() throws HeatBridgeException { + // Arrange + String heatStackId = "1234567"; + List<Resource> expectedResourceList = (List<Resource>) extractTestStackResources(); + when(osClient.getStackBasedResources(heatStackId, HeatBridgeConstants.OS_DEFAULT_HEAT_NESTING)) + .thenReturn(expectedResourceList); + + // Act + List<Resource> resourceList = heatbridge.queryNestedHeatStackResources(heatStackId); + + // Assert + verify(osClient).getStackBasedResources(heatStackId, HeatBridgeConstants.OS_DEFAULT_HEAT_NESTING); + assertEquals(resourceList, expectedResourceList); + } + + @Test + public void testExtractStackResourceIdsByResourceType() throws HeatBridgeException { + // Arrange + List<Resource> expectedResourceList = (List<Resource>) extractTestStackResources(); + List<String> expectedServerIds = + Arrays.asList("43c2159b-2c04-46ac-bda5-594110cae2d3", "7cff109a-b2b7-4933-97b4-ec44a8365568"); + + // Act + List<String> serverIds = heatbridge.extractStackResourceIdsByResourceType(expectedResourceList, + HeatBridgeConstants.OS_SERVER_RESOURCE_TYPE); + + // Assert + assertEquals(expectedServerIds, serverIds); + } + + @Ignore + @Test + public void testGetAllOpenstackServers() { + // Arrange + List<Resource> stackResources = (List<Resource>) extractTestStackResources(); + + Server server1 = mock(Server.class); + Server server2 = mock(Server.class); + List<Server> expectedServers = Arrays.asList(server1, server2); + + when(osClient.getServerById("43c2159b-2c04-46ac-bda5-594110cae2d3")).thenReturn(server1); + when(osClient.getServerById("7cff109a-b2b7-4933-97b4-ec44a8365568")).thenReturn(server2); + + // Act + List<Server> servers = heatbridge.getAllOpenstackServers(stackResources); + + // Assert + assertEquals(expectedServers, servers); + } + + @Ignore + @Test + public void testExtractOpenstackImagesFromServers() { + // Arrange + Server server1 = mock(Server.class); + Server server2 = mock(Server.class); + List<Server> servers = Arrays.asList(server1, server2); + + Image image1 = mock(Image.class); + Image image2 = mock(Image.class); + when(image1.getId()).thenReturn("1"); + when(image2.getId()).thenReturn("1"); + List<Image> expectedDistinctImages = Collections.singletonList(image1); + + when(server1.getImage()).thenReturn(image1); + when(server2.getImage()).thenReturn(image2); + + // Act + List<Image> images = heatbridge.extractOpenstackImagesFromServers(servers); + + // Assert + assertEquals(expectedDistinctImages, images); + } + + @Ignore + @Test + public void testExtractOpenstackFlavorsFromServers() { + // Arrange + Server server1 = mock(Server.class); + Server server2 = mock(Server.class); + List<Server> servers = Arrays.asList(server1, server2); + + Flavor flavor1 = mock(Flavor.class); + Flavor flavor2 = mock(Flavor.class); + when(flavor1.getId()).thenReturn("1"); + when(flavor2.getId()).thenReturn("2"); + List<Flavor> expectedFlavors = Arrays.asList(flavor1, flavor2); + + when(server1.getFlavor()).thenReturn(flavor1); + when(server2.getFlavor()).thenReturn(flavor2); + + // Act + List<Flavor> flavors = heatbridge.extractOpenstackFlavorsFromServers(servers); + + // Assert + assertEquals(expectedFlavors, flavors); + } + + @Test + public void testUpdateVserversToAai() throws HeatBridgeException { + // Arrange + Server server1 = mock(Server.class); + + when(server1.getId()).thenReturn("test-server1-id"); + when(server1.getHypervisorHostname()).thenReturn("test-hypervisor"); + when(server1.getName()).thenReturn("test-server1-name"); + when(server1.getStatus()).thenReturn(Status.ACTIVE); + when(server1.getLinks()).thenReturn(new ArrayList<>()); + + Server server2 = mock(Server.class); + when(server2.getId()).thenReturn("test-server2-id"); + when(server2.getHypervisorHostname()).thenReturn("test-hypervisor"); + when(server2.getName()).thenReturn("test-server2-name"); + when(server2.getStatus()).thenReturn(Status.ACTIVE); + when(server2.getLinks()).thenReturn(new ArrayList<>()); + + List<Server> servers = Arrays.asList(server1, server2); + + Image image = mock(Image.class); + when(server1.getImage()).thenReturn(image); + when(server2.getImage()).thenReturn(image); + when(image.getId()).thenReturn("test-image-id"); + + Flavor flavor = mock(Flavor.class); + when(server1.getFlavor()).thenReturn(flavor); + when(server2.getFlavor()).thenReturn(flavor); + when(flavor.getId()).thenReturn("test-flavor-id"); + + + // Act + heatbridge.buildAddVserversToAaiAction("test-genericVnf-id", "test-vfModule-id", servers); + + // Assert + ArgumentCaptor<AAIResourceUri> captor = ArgumentCaptor.forClass(AAIResourceUri.class); + verify(transaction, times(2)).create(captor.capture(), any(Vserver.class)); + + List<AAIResourceUri> uris = captor.getAllValues(); + assertEquals(AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, CLOUD_OWNER, REGION_ID, TENANT_ID, + server1.getId()), uris.get(0)); + assertEquals(AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, CLOUD_OWNER, REGION_ID, TENANT_ID, + server2.getId()), uris.get(1)); + + } + + @Test + public void testUpdateImagesToAai() throws HeatBridgeException { + // Arrange + Image image1 = mock(Image.class); + when(image1.getId()).thenReturn("test-image1-id"); + when(image1.getName()).thenReturn("test-image1-name"); + when(image1.getLinks()).thenReturn(new ArrayList<>()); + + Image image2 = mock(Image.class); + when(image2.getId()).thenReturn("test-image2-id"); + when(image2.getName()).thenReturn("test-image2-name"); + when(image2.getLinks()).thenReturn(new ArrayList<>()); + + List<Image> images = Arrays.asList(image1, image2); + + // Act #1 + heatbridge.buildAddImagesToAaiAction(images); + + // Assert #1 + verify(transaction, times(2)).create(any(AAIResourceUri.class), any(org.onap.aai.domain.yang.Image.class)); + + // Act #2 + heatbridge.buildAddImagesToAaiAction(images); + + // Assert #2 + verify(transaction, times(4)).create(any(AAIResourceUri.class), any(org.onap.aai.domain.yang.Image.class)); + } + + @Test + public void testUpdateFlavorsToAai() throws HeatBridgeException { + // Arrange + Flavor flavor1 = mock(Flavor.class); + when(flavor1.getId()).thenReturn("test-flavor1-id"); + when(flavor1.getName()).thenReturn("test-flavor1-name"); + when(flavor1.getLinks()).thenReturn(new ArrayList<>()); + + Flavor flavor2 = mock(Flavor.class); + when(flavor2.getId()).thenReturn("test-flavor2-id"); + when(flavor2.getName()).thenReturn("test-flavor2-name"); + when(flavor2.getLinks()).thenReturn(new ArrayList<>()); + + List<Flavor> flavors = Arrays.asList(flavor1, flavor2); + + // Act #1 + heatbridge.buildAddFlavorsToAaiAction(flavors); + + // Assert #1 + verify(transaction, times(2)).create(any(AAIResourceUri.class), any(org.onap.aai.domain.yang.Flavor.class)); + + // Act #2 + heatbridge.buildAddFlavorsToAaiAction(flavors); + + // Assert #2 + verify(transaction, times(4)).create(any(AAIResourceUri.class), any(org.onap.aai.domain.yang.Flavor.class)); + } + + @Ignore + @Test + public void testUpdateVserverLInterfacesToAai() throws HeatBridgeException { + // Arrange + List<Resource> stackResources = (List<Resource>) extractTestStackResources(); + Port port = mock(Port.class); + when(port.getId()).thenReturn("test-port-id"); + when(port.getName()).thenReturn("test-port-name"); + when(port.getvNicType()).thenReturn(HeatBridgeConstants.OS_SRIOV_PORT_TYPE); + when(port.getMacAddress()).thenReturn("78:4f:43:68:e2:78"); + when(port.getNetworkId()).thenReturn("890a203a-23gg-56jh-df67-731656a8f13a"); + when(port.getDeviceId()).thenReturn("test-device-id"); + when(port.getVifDetails()).thenReturn(ImmutableMap.of(HeatBridgeConstants.OS_VLAN_NETWORK_KEY, "2345")); + String pfPciId = "0000:08:00.0"; + when(port.getProfile()).thenReturn(ImmutableMap.of(HeatBridgeConstants.OS_PCI_SLOT_KEY, pfPciId, + HeatBridgeConstants.OS_PHYSICAL_NETWORK_KEY, "physical_network_id")); + + Network network = mock(Network.class); + when(network.getId()).thenReturn("test-network-id"); + when(network.getNetworkType()).thenReturn(NetworkType.VLAN); + when(network.getProviderSegID()).thenReturn("2345"); + + when(osClient.getPortById("212a203a-9764-4f42-84ea-731536a8f13a")).thenReturn(port); + when(osClient.getPortById("387e3904-8948-43d1-8635-b6c2042b54da")).thenReturn(port); + when(osClient.getPortById("70a09dfd-f1c5-4bc8-bd8f-dc539b8d662a")).thenReturn(port); + when(osClient.getPortById("12f88b4d-c8a4-4fbd-bcb4-7e36af02430b")).thenReturn(port); + when(osClient.getPortById("c54b9f45-b413-4937-bbe4-3c8a5689cfc9")).thenReturn(port); + when(osClient.getNetworkById(anyString())).thenReturn(network); + + SriovPf sriovPf = new SriovPf(); + sriovPf.setPfPciId(pfPciId); + PInterface pIf = mock(PInterface.class); + when(pIf.getInterfaceName()).thenReturn("test-port-id"); + when(resourcesClient.get(eq(PInterface.class), any(AAIResourceUri.class))).thenReturn(Optional.of(pIf)); + + // Act + heatbridge.buildAddVserverLInterfacesToAaiAction(stackResources, Arrays.asList("1", "2")); + + // Assert + verify(transaction, times(5)).create(any(AAIResourceUri.class), any(LInterface.class)); + verify(osClient, times(5)).getPortById(anyString()); + verify(osClient, times(5)).getNetworkById(anyString()); + } + + private List<? extends Resource> extractTestStackResources() { + List<HeatResource> stackResources = null; + try { + stackResources = MAPPER.readValue(readTestResourceFile("stack-resources.json"), Resources.class).getList(); + assertNotNull(stackResources); + assertFalse(stackResources.isEmpty()); + } catch (IOException e) { + Assert.fail("Failed to extract test stack resources."); + } + return stackResources; + } + + private String readTestResourceFile(String filePath) { + String content = null; + String pathname = Objects.requireNonNull(getClass().getClassLoader().getResource(filePath)).getFile(); + File file = new File(pathname); + try { + content = Objects.requireNonNull(FileUtils.readFileToString(file, Charset.defaultCharset())); + } catch (IOException e) { + Assert.fail(String.format("Failed to read test resource file (%s)", filePath)); + } + return content; + } +} diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/vdu/utils/VduBlueprintTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/vdu/utils/VduBlueprintTest.java index b382b6bcf8..796d122505 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/vdu/utils/VduBlueprintTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/vdu/utils/VduBlueprintTest.java @@ -22,7 +22,6 @@ package org.onap.so.vdu.utils; import java.util.HashMap; import java.util.Map; - import org.junit.Assert; import org.junit.Before; import org.junit.Test; diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/vdu/utils/VduInfoTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/vdu/utils/VduInfoTest.java index 6331563362..7041c7e949 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/vdu/utils/VduInfoTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/vdu/utils/VduInfoTest.java @@ -22,7 +22,6 @@ package org.onap.so.vdu.utils; import java.util.HashMap; import java.util.Map; - import org.junit.Assert; import org.junit.Before; import org.junit.Test; diff --git a/adapters/mso-openstack-adapters/src/test/resources/AuditResultsMissSub.json b/adapters/mso-openstack-adapters/src/test/resources/AuditResultsMissSub.json new file mode 100644 index 0000000000..13b0d6ae43 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/AuditResultsMissSub.json @@ -0,0 +1,604 @@ +{ + "auditList": [ + { + "aaiObject": { + "inMaint": null, + "isClosedLoopDisabled": null, + "linterfaces": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "volumes": null, + "vserverId": "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "vserverName": null, + "vserverName2": null, + "vserverSelflink": null + }, + "aaiObjectType": "vserver", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3" + }, + { + "aaiObject": { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": null, + "interfaceDescription": null, + "interfaceId": "d2f51f82-0ec2-4581-bd1a-d2a82073e52b", + "interfaceName": "tsbc0005v_tsbc0005vm002_trusted_port", + "interfaceRole": null, + "isIpUnnumbered": null, + "isPortMirrored": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": null, + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": null + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_trusted_port" + }, + { + "aaiObject": { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": null, + "interfaceDescription": null, + "interfaceId": "27391d94-33af-474a-927d-d409249e8fd3", + "interfaceName": "tsbc0005v_tsbc0005vm002_svc2_port_0", + "interfaceRole": null, + "isIpUnnumbered": null, + "isPortMirrored": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": false, + "interfaceDescription": null, + "interfaceId": "d54dfd09-75c6-4e04-b204-909455b8f933", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_101", + "interfaceRole": null, + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": "02:27:39:1d:94:33", + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": { + "vlan": [ + { + "backdoorConnection": null, + "inMaint": false, + "isIpUnnumbered": false, + "isPrivate": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "orchestrationStatus": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "speedUnits": null, + "speedValue": null, + "vlanDescription": null, + "vlanIdInner": 101, + "vlanIdOuter": null, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_101", + "vpnKey": null + } + ] + } + }, + { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": false, + "interfaceDescription": null, + "interfaceId": "f7a998c0-8939-4b07-bf4a-0862e9c325e1", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_101", + "interfaceRole": null, + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": "02:27:39:1d:94:33", + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": { + "vlan": [ + { + "backdoorConnection": null, + "inMaint": false, + "isIpUnnumbered": false, + "isPrivate": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "orchestrationStatus": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "speedUnits": null, + "speedValue": null, + "vlanDescription": null, + "vlanIdInner": 101, + "vlanIdOuter": null, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_101", + "vpnKey": null + } + ] + } + }, + { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": false, + "interfaceDescription": null, + "interfaceId": "621c1fea-60b8-44ee-aede-c01b8b1aaa70", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_103", + "interfaceRole": null, + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": "02:27:39:1d:94:33", + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": { + "vlan": [ + { + "backdoorConnection": null, + "inMaint": false, + "isIpUnnumbered": false, + "isPrivate": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "orchestrationStatus": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "speedUnits": null, + "speedValue": null, + "vlanDescription": null, + "vlanIdInner": 103, + "vlanIdOuter": null, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_103", + "vpnKey": null + } + ] + } + } + ] + }, + "macaddr": null, + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": null + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_svc2_port_0" + }, + { + "aaiObject": { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": false, + "interfaceDescription": null, + "interfaceId": "d54dfd09-75c6-4e04-b204-909455b8f933", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_101", + "interfaceRole": null, + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": "02:27:39:1d:94:33", + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": { + "vlan": [ + { + "backdoorConnection": null, + "inMaint": false, + "isIpUnnumbered": false, + "isPrivate": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "orchestrationStatus": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "speedUnits": null, + "speedValue": null, + "vlanDescription": null, + "vlanIdInner": 101, + "vlanIdOuter": null, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_101", + "vpnKey": null + } + ] + } + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_svc2_port_0/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_101" + }, + { + "aaiObject": { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": false, + "interfaceDescription": null, + "interfaceId": "f7a998c0-8939-4b07-bf4a-0862e9c325e1", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_101", + "interfaceRole": null, + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": "02:27:39:1d:94:33", + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": { + "vlan": [ + { + "backdoorConnection": null, + "inMaint": false, + "isIpUnnumbered": false, + "isPrivate": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "orchestrationStatus": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "speedUnits": null, + "speedValue": null, + "vlanDescription": null, + "vlanIdInner": 101, + "vlanIdOuter": null, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_101", + "vpnKey": null + } + ] + } + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_svc2_port_0/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_101" + }, + { + "aaiObject": { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": false, + "interfaceDescription": null, + "interfaceId": "621c1fea-60b8-44ee-aede-c01b8b1aaa70", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_103", + "interfaceRole": null, + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": "02:27:39:1d:94:33", + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": { + "vlan": [ + { + "backdoorConnection": null, + "inMaint": false, + "isIpUnnumbered": false, + "isPrivate": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "orchestrationStatus": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "speedUnits": null, + "speedValue": null, + "vlanDescription": null, + "vlanIdInner": 103, + "vlanIdOuter": null, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_103", + "vpnKey": null + } + ] + } + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_svc2_port_0/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_103" + }, + { + "aaiObject": { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": null, + "interfaceDescription": null, + "interfaceId": "07f5b14c-147a-4d14-8c94-a9e94dbc097b", + "interfaceName": "tsbc0005v_tsbc0005vm002_mgmt_port_1", + "interfaceRole": null, + "isIpUnnumbered": null, + "isPortMirrored": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": null, + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": null + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_mgmt_port_1" + }, + { + "aaiObject": { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": null, + "interfaceDescription": null, + "interfaceId": "8d93f63e-e972-48c7-ad98-b2122da47315", + "interfaceName": "tsbc0005v_tsbc0005vm002_mgmt_port_0", + "interfaceRole": null, + "isIpUnnumbered": null, + "isPortMirrored": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": null, + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": null + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_mgmt_port_0" + }, + { + "aaiObject": { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": null, + "interfaceDescription": null, + "interfaceId": "0594a2f2-7ea4-42eb-abc2-48ea49677fca", + "interfaceName": "tsbc0005v_tsbc0005vm002_svc1_port_0", + "interfaceRole": null, + "isIpUnnumbered": null, + "isPortMirrored": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": false, + "interfaceDescription": null, + "interfaceId": "2bbfa345-33bb-495a-94b2-fb514ee1cffc", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc1_81", + "interfaceRole": null, + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": "02:05:94:a2:f2:7e", + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": { + "vlan": [ + { + "backdoorConnection": null, + "inMaint": false, + "isIpUnnumbered": false, + "isPrivate": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "orchestrationStatus": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "speedUnits": null, + "speedValue": null, + "vlanDescription": null, + "vlanIdInner": 81, + "vlanIdOuter": null, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc1_81", + "vpnKey": null + } + ] + } + } + ] + }, + "macaddr": null, + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": null + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_svc1_port_0" + }, + { + "aaiObject": { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": false, + "interfaceDescription": null, + "interfaceId": "2bbfa345-33bb-495a-94b2-fb514ee1cffc", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc1_81", + "interfaceRole": null, + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": "02:05:94:a2:f2:7e", + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": { + "vlan": [ + { + "backdoorConnection": null, + "inMaint": false, + "isIpUnnumbered": false, + "isPrivate": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "orchestrationStatus": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "speedUnits": null, + "speedValue": null, + "vlanDescription": null, + "vlanIdInner": 81, + "vlanIdOuter": null, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_svc1_81", + "vpnKey": null + } + ] + } + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_svc1_port_0/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_subint_untrusted_svc1_81" + }, + { + "aaiObject": { + "adminStatus": null, + "allowedAddressPairs": null, + "inMaint": null, + "interfaceDescription": null, + "interfaceId": "00bb8407-650e-48b5-b919-33b88d6f8fe3", + "interfaceName": "tsbc0005v_tsbc0005vm002_int_ha_port_0", + "interfaceRole": null, + "isIpUnnumbered": null, + "isPortMirrored": null, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": null, + "macaddr": null, + "managementOption": null, + "networkName": null, + "priority": null, + "provStatus": null, + "relationshipList": null, + "resourceVersion": null, + "selflink": null, + "sriovVfs": null, + "v6WanLinkIp": null, + "vlans": null + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/regionOne/tenants/tenant/0422ffb57ba042c0800a29dc85ca70f8/vservers/vserver/92272b67-d23f-42ca-87fa-7b06a9ec81f3/l-interfaces/l-interface/tsbc0005v_tsbc0005vm002_int_ha_port_0" + } + ] +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/ExpectedVServerFound.json b/adapters/mso-openstack-adapters/src/test/resources/ExpectedVServerFound.json new file mode 100644 index 0000000000..1f8e58ab5b --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/ExpectedVServerFound.json @@ -0,0 +1,167 @@ +{ + "auditList": [ + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + "aaiObjectType": "vserver", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz1", + "interfaceName": "test_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz2", + "interfaceName": "test_port_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_2" + }, + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + "aaiObjectType": "vserver", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + { + "aaiObject": { + "interfaceId": "dec8bdc7-5718-41dc-bfbb-561ff6eeb81c", + "interfaceName": "ssc_1_trusted_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_trusted_port_0" + }, + { + "aaiObject": { + "interfaceId": "1c56a24b-5f03-435a-850d-31cd4252de56", + "interfaceName": "ssc_1_service1_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0" + }, + { + "aaiObject": { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_2" + }, + { + "aaiObject": { + "interfaceId": "12afcd28-929f-4d80-8a5a-0833bfd5e20b", + "interfaceName": "ssc_1_mgmt_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_1" + }, + { + "aaiObject": { + "interfaceId": "80baec42-ffae-425f-ad8c-3f7b2c24bfff", + "interfaceName": "ssc_1_mgmt_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_0" + }, + { + "aaiObject": { + "interfaceId": "13eddf95-4cf3-45f2-823a-2d890a6549b4", + "interfaceName": "ssc_1_service2_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0" + }, + { + "aaiObject": { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0/l-interfaces/l-interface/service2_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adb8", + "interfaceName": "ssc_1_int_ha_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_int_ha_port_0" + } + ] +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/ExpectedVserversToAudit.json b/adapters/mso-openstack-adapters/src/test/resources/ExpectedVserversToAudit.json new file mode 100644 index 0000000000..96fe500cc2 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/ExpectedVserversToAudit.json @@ -0,0 +1,135 @@ +[ + { + "linterfaces": { + "linterface": [ + { + "interfaceId": "7ee06d9d-3d18-411c-9d3e-aec930f70413", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + { + "interfaceId": "27391d94-33af-474a-927d-d409249e8fd3", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "inMaint": false, + "interfaceId": "d54dfd09-75c6-4e04-b204-909455b8f933", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_service1_101", + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "macaddr": "02:27:39:1d:94:33", + "vlans": { + "vlan": [ + { + "inMaint": false, + "isIpUnnumbered": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "vlanIdInner": 101, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_service1_101" + } + ] + } + }, + { + "inMaint": false, + "interfaceId": "f7a998c0-8939-4b07-bf4a-0862e9c325e1", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_service1_101", + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "macaddr": "02:27:39:1d:94:33", + "vlans": { + "vlan": [ + { + "inMaint": false, + "isIpUnnumbered": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "vlanIdInner": 101, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_service1_101" + } + ] + } + }, + { + "inMaint": false, + "interfaceId": "621c1fea-60b8-44ee-aede-c01b8b1aaa70", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_service1_103", + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "macaddr": "02:27:39:1d:94:33", + "vlans": { + "vlan": [ + { + "inMaint": false, + "isIpUnnumbered": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "vlanIdInner": 103, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_service1_103" + } + ] + } + } + ] + } + }, + { + "interfaceId": "fdeedf37-c01e-4ab0-bdd6-8d5fc4913943", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + { + "interfaceId": "8d93f63e-e972-48c7-ad98-b2122da47315", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + { + "interfaceId": "0594a2f2-7ea4-42eb-abc2-48ea49677fca", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "inMaint": false, + "interfaceId": "2bbfa345-33bb-495a-94b2-fb514ee1cffc", + "interfaceName": "tsbc0005v_tsbc0005vm002_subint_untrusted_service2_81", + "isIpUnnumbered": false, + "isPortMirrored": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "macaddr": "02:05:94:a2:f2:7e", + "vlans": { + "vlan": [ + { + "inMaint": false, + "isIpUnnumbered": false, + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "vlanIdInner": 81, + "vlanInterface": "tsbc0005v_tsbc0005vm002_subint_untrusted_service2_81" + } + ] + } + } + ] + } + }, + { + "interfaceId": "00bb8407-650e-48b5-b919-33b88d6f8fe3", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + }, + "vserverId": "92272b67-d23f-42ca-87fa-7b06a9ec81f3" + } +] diff --git a/adapters/mso-openstack-adapters/src/test/resources/GetNestedResources.json b/adapters/mso-openstack-adapters/src/test/resources/GetNestedResources.json new file mode 100644 index 0000000000..73769d745d --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/GetNestedResources.json @@ -0,0 +1,277 @@ +{ + "resources": [ + { + "resource_name": "rar_keypair", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module/9b93aecf-fe05-4047-ba36-d5eb7bc7354e/resources/rar_keypair", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module/9b93aecf-fe05-4047-ba36-d5eb7bc7354e", + "rel": "stack" + } + ], + "logical_resource_id": "rar_keypair", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:49Z", + "required_by": [ + "rar_node_0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "rdm6ararf8001v-key_pair", + "resource_type": "OS::Nova::KeyPair" + }, + { + "resource_name": "rar_node_0", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module/9b93aecf-fe05-4047-ba36-d5eb7bc7354e/resources/rar_node_0", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module/9b93aecf-fe05-4047-ba36-d5eb7bc7354e", + "rel": "stack" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5", + "rel": "nested" + } + ], + "logical_resource_id": "rar_node_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:49Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "c4876377-22bb-45d2-9fc3-f36a32207fa5", + "resource_type": "nest_rareport_server.yaml" + }, + { + "parent_resource": "rar_node_0", + "resource_name": "rar_volumeattachment_0", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5/resources/rar_volumeattachment_0", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5", + "rel": "stack" + } + ], + "logical_resource_id": "rar_volumeattachment_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "a27b9151-f439-437e-b7b0-94068cc856fa", + "resource_type": "OS::Cinder::VolumeAttachment" + }, + { + "parent_resource": "rar_node_0", + "resource_name": "rar_volume_0", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5/resources/rar_volume_0", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5", + "rel": "stack" + } + ], + "logical_resource_id": "rar_volume_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:56Z", + "required_by": [ + "rar_volumeattachment_0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "a27b9151-f439-437e-b7b0-94068cc856fa", + "resource_type": "OS::Cinder::Volume" + }, + { + "parent_resource": "rar_node_0", + "resource_name": "rar_RMM", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5/resources/rar_RMM", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5", + "rel": "stack" + } + ], + "logical_resource_id": "rar_RMM", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:56Z", + "required_by": [ + "rar_server_0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "dd23e047-d169-4cc3-a90a-6bc81b1ea17a", + "resource_type": "OS::Heat::MultipartMime" + }, + { + "parent_resource": "rar_node_0", + "resource_name": "rar_server_0", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5/resources/rar_server_0", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5", + "rel": "stack" + } + ], + "logical_resource_id": "rar_server_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:56Z", + "required_by": [ + "rar_volumeattachment_0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "03a31a65-91ed-4563-9d5d-4f7223df9767", + "resource_type": "OS::Nova::Server" + }, + { + "parent_resource": "rar_node_0", + "resource_name": "rar_RSC", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5/resources/rar_RSC", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5", + "rel": "stack" + } + ], + "logical_resource_id": "rar_RSC", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:56Z", + "required_by": [ + "rar_RMM" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "7cea5faf-f5a8-4182-a686-05964f51ad95", + "resource_type": "OS::Heat::SoftwareConfig" + }, + { + "parent_resource": "rar_node_0", + "resource_name": "rar_0_oam_port_0", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5/resources/rar_0_oam_port_0", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5", + "rel": "stack" + } + ], + "logical_resource_id": "rar_0_oam_port_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:56Z", + "required_by": [ + "rar_server_0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "d2bc253c-96a5-47df-a00f-5b9f3eebe684", + "resource_type": "OS::Neutron::Port" + }, + { + "parent_resource": "rar_node_0", + "resource_name": "rar_RCC_2", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5/resources/rar_RCC_2", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5", + "rel": "stack" + } + ], + "logical_resource_id": "rar_RCC_2", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:56Z", + "required_by": [ + "rar_RMM" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "15d092ab-4702-4635-8da9-24fff85c175b", + "resource_type": "OS::Heat::CloudConfig" + }, + { + "parent_resource": "rar_node_0", + "resource_name": "rar_RCC_0", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5/resources/rar_RCC_0", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5", + "rel": "stack" + } + ], + "logical_resource_id": "rar_RCC_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:56Z", + "required_by": [ + "rar_RMM" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "9420ad4c-49da-4f23-89fc-109f9d5a4505", + "resource_type": "OS::Heat::CloudConfig" + }, + { + "parent_resource": "rar_node_0", + "resource_name": "rar_RCC_1", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5/resources/rar_RCC_1", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module-rar_node_0-4pkqvamx52u6/c4876377-22bb-45d2-9fc3-f36a32207fa5", + "rel": "stack" + } + ], + "logical_resource_id": "rar_RCC_1", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:56Z", + "required_by": [ + "rar_RMM" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "321b91fb-f265-4e56-8025-3c3e88da320a", + "resource_type": "OS::Heat::CloudConfig" + }, + { + "resource_name": "rar_Sec_Grp", + "links": [ + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module/9b93aecf-fe05-4047-ba36-d5eb7bc7354e/resources/rar_Sec_Grp", + "rel": "self" + }, + { + "href": "https://test.com:8004/v1/326799122bd4451c801153f5db7f8509/stacks/rdm6ararf8001v_base_module/9b93aecf-fe05-4047-ba36-d5eb7bc7354e", + "rel": "stack" + } + ], + "logical_resource_id": "rar_Sec_Grp", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-04-02T20:13:49Z", + "required_by": [ + "rar_node_0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "99fc77c6-019b-441c-ad99-b48dd1059f71", + "resource_type": "OS::Neutron::SecurityGroup" + } + ] +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/GetResources.json b/adapters/mso-openstack-adapters/src/test/resources/GetResources.json index 22e66d41bb..0d403a62b5 100644 --- a/adapters/mso-openstack-adapters/src/test/resources/GetResources.json +++ b/adapters/mso-openstack-adapters/src/test/resources/GetResources.json @@ -1,6 +1,6 @@ { - "resources": [ - { + "resources": [ + { "links": [ { "href": "https://orchestration.com:8004/v1/99cecb7b19dc4690960761abd0fe2413/stacks/zdyh3brlba05_addon/03840be2-7ce6-4e38-a748-dbd59a798732/resources/vlbagent_eph_aff_id", @@ -22,207 +22,576 @@ "resource_type": "OS::Heat::RandomString", "updated_time": "2019-02-07T22:56:12Z" }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_trusted_port_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_trusted_port_0", + "physical_resource_id": "7ee06d9d-3d18-411c-9d3e-aec930f70413", + "required_by": [ + "ssc_server_1" + ], + "resource_name": "ssc_1_trusted_port_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::Neutron::Port", + "updated_time": "2019-01-23T19:34:15Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_service1_port_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_service1_port_0", + "physical_resource_id": "36551a08-592c-4329-ab75-6c594420754c", + "required_by": [ + "ssc_1_subint_service1_port_0_subinterfaces", + "ssc_server_1" + ], + "resource_name": "ssc_1_service1_port_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::Neutron::Port", + "updated_time": "2019-01-23T19:34:15Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_subint_service2_port_0_subinterfaces", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c", + "rel": "nested" + } + ], + "logical_resource_id": "ssc_1_subint_service2_port_0_subinterfaces", + "physical_resource_id": "447a9b41-714e-434b-b1d0-6cce8d9f0f0c", + "required_by": [], + "resource_name": "ssc_1_subint_service2_port_0_subinterfaces", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::Heat::ResourceGroup", + "updated_time": "2019-01-23T19:34:15Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_mgmt_port_1", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_mgmt_port_1", + "physical_resource_id": "fdeedf37-c01e-4ab0-bdd6-8d5fc4913943", + "required_by": [ + "ssc_server_1" + ], + "resource_name": "ssc_1_mgmt_port_1", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::Neutron::Port", + "updated_time": "2019-01-23T19:34:15Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_mgmt_port_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_mgmt_port_0", + "physical_resource_id": "8d93f63e-e972-48c7-ad98-b2122da47315", + "required_by": [ + "ssc_server_1" + ], + "resource_name": "ssc_1_mgmt_port_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::Neutron::Port", + "updated_time": "2019-01-23T19:34:15Z" + }, + { + "links": [ { - "resource_name": "ssc_1_trusted_port_0", - "links": [ - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_trusted_port_0", - "rel": "self" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", - "rel": "stack" - } - ], - "logical_resource_id": "ssc_1_trusted_port_0", - "resource_status": "CREATE_COMPLETE", - "updated_time": "2019-01-23T19:34:15Z", - "required_by": [ - "ssc_server_1" - ], - "resource_status_reason": "state changed", - "physical_resource_id": "d2f51f82-0ec2-4581-bd1a-d2a82073e52b", - "resource_type": "OS::Neutron::Port" - }, - { - "resource_name": "ssc_1_service1_port_0", - "links": [ - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_service1_port_0", - "rel": "self" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", - "rel": "stack" - } - ], - "logical_resource_id": "ssc_1_service1_port_0", - "resource_status": "CREATE_COMPLETE", - "updated_time": "2019-01-23T19:34:15Z", - "required_by": [ - "ssc_1_subint_service1_port_0_subinterfaces", - "ssc_server_1" - ], - "resource_status_reason": "state changed", - "physical_resource_id": "27391d94-33af-474a-927d-d409249e8fd3", - "resource_type": "OS::Neutron::Port" - }, - { - "resource_name": "ssc_1_subint_service2_port_0_subinterfaces", - "links": [ - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_subint_service2_port_0_subinterfaces", - "rel": "self" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", - "rel": "stack" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c", - "rel": "nested" - } - ], - "logical_resource_id": "ssc_1_subint_service2_port_0_subinterfaces", - "resource_status": "CREATE_COMPLETE", - "updated_time": "2019-01-23T19:34:15Z", - "required_by": [], - "resource_status_reason": "state changed", - "physical_resource_id": "447a9b41-714e-434b-b1d0-6cce8d9f0f0c", - "resource_type": "OS::Heat::ResourceGroup" - }, - { - "resource_name": "ssc_1_mgmt_port_1", - "links": [ - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_mgmt_port_1", - "rel": "self" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", - "rel": "stack" - } - ], - "logical_resource_id": "ssc_1_mgmt_port_1", - "resource_status": "CREATE_COMPLETE", - "updated_time": "2019-01-23T19:34:15Z", - "required_by": [ - "ssc_server_1" - ], - "resource_status_reason": "state changed", - "physical_resource_id": "07f5b14c-147a-4d14-8c94-a9e94dbc097b", - "resource_type": "OS::Neutron::Port" - }, - { - "resource_name": "ssc_1_mgmt_port_0", - "links": [ - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_mgmt_port_0", - "rel": "self" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", - "rel": "stack" - } - ], - "logical_resource_id": "ssc_1_mgmt_port_0", - "resource_status": "CREATE_COMPLETE", - "updated_time": "2019-01-23T19:34:15Z", - "required_by": [ - "ssc_server_1" - ], - "resource_status_reason": "state changed", - "physical_resource_id": "8d93f63e-e972-48c7-ad98-b2122da47315", - "resource_type": "OS::Neutron::Port" - }, - { - "resource_name": "ssc_1_service2_port_0", - "links": [ - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_service2_port_0", - "rel": "self" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", - "rel": "stack" - } - ], - "logical_resource_id": "ssc_1_service2_port_0", - "resource_status": "CREATE_COMPLETE", - "updated_time": "2019-01-23T19:34:15Z", - "required_by": [ - "ssc_1_subint_service2_port_0_subinterfaces", - "ssc_server_1" - ], - "resource_status_reason": "state changed", - "physical_resource_id": "0594a2f2-7ea4-42eb-abc2-48ea49677fca", - "resource_type": "OS::Neutron::Port" - }, - { - "resource_name": "ssc_1_int_ha_port_0", - "links": [ - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_int_ha_port_0", - "rel": "self" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", - "rel": "stack" - } - ], - "logical_resource_id": "ssc_1_int_ha_port_0", - "resource_status": "CREATE_COMPLETE", - "updated_time": "2019-01-23T19:34:15Z", - "required_by": [ - "ssc_server_1" - ], - "resource_status_reason": "state changed", - "physical_resource_id": "00bb8407-650e-48b5-b919-33b88d6f8fe3", - "resource_type": "OS::Neutron::Port" - }, - { - "resource_name": "ssc_server_1", - "links": [ - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_server_1", - "rel": "self" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", - "rel": "stack" - } - ], - "logical_resource_id": "ssc_server_1", - "resource_status": "CREATE_COMPLETE", - "updated_time": "2019-01-23T19:34:15Z", - "required_by": [], - "resource_status_reason": "state changed", - "physical_resource_id": "92272b67-d23f-42ca-87fa-7b06a9ec81f3", - "resource_type": "OS::Nova::Server" - }, - { - "resource_name": "ssc_1_subint_service1_port_0_subinterfaces", - "links": [ - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_subint_service1_port_0_subinterfaces", - "rel": "self" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", - "rel": "stack" - }, - { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672", - "rel": "nested" - } - ], - "logical_resource_id": "ssc_1_subint_service1_port_0_subinterfaces", - "resource_status": "CREATE_COMPLETE", - "updated_time": "2019-01-23T19:34:15Z", - "required_by": [], - "resource_status_reason": "state changed", - "physical_resource_id": "31d0647a-6043-49a4-81b6-ccab29380672", - "resource_type": "OS::Heat::ResourceGroup" - } - ] + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_service2_port_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_service2_port_0", + "physical_resource_id": "0594a2f2-7ea4-42eb-abc2-48ea49677fca", + "required_by": [ + "ssc_1_subint_service2_port_0_subinterfaces", + "ssc_server_1" + ], + "resource_name": "ssc_1_service2_port_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::Neutron::Port", + "updated_time": "2019-01-23T19:34:15Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_int_ha_port_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_int_ha_port_0", + "physical_resource_id": "00bb8407-650e-48b5-b919-33b88d6f8fe3", + "required_by": [ + "ssc_server_1" + ], + "resource_name": "ssc_1_int_ha_port_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::Neutron::Port", + "updated_time": "2019-01-23T19:34:15Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_server_1", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_server_1", + "physical_resource_id": "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "required_by": [], + "resource_name": "ssc_server_1", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::Nova::Server", + "updated_time": "2019-01-23T19:34:15Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_subint_service1_port_0_subinterfaces", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672", + "rel": "nested" + } + ], + "logical_resource_id": "ssc_1_subint_service1_port_0_subinterfaces", + "physical_resource_id": "31d0647a-6043-49a4-81b6-ccab29380672", + "required_by": [], + "resource_name": "ssc_1_subint_service1_port_0_subinterfaces", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::Heat::ResourceGroup", + "updated_time": "2019-01-23T19:34:15Z" + }, + { + "resources": [ + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources/1", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "rel": "nested" + } + ], + "logical_resource_id": "1", + "parent_resource": "ssc_1_subint_service1_port_0_subinterfaces", + "physical_resource_id": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "required_by": [], + "resource_name": "1", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "vlan_subinterface_ssc_service1.yaml", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources/0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a", + "rel": "nested" + } + ], + "logical_resource_id": "0", + "parent_resource": "ssc_1_subint_service1_port_0_subinterfaces", + "physical_resource_id": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "required_by": [], + "resource_name": "0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "vlan_subinterface_ssc_service1.yaml", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources/2", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c", + "rel": "nested" + } + ], + "logical_resource_id": "2", + "parent_resource": "ssc_1_subint_service1_port_0_subinterfaces", + "physical_resource_id": "bd0fc728-cbde-4301-a581-db56f494675c", + "required_by": [], + "resource_name": "2", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "vlan_subinterface_ssc_service1.yaml", + "updated_time": "2019-01-23T19:34:56Z" + } + ] + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service_1_vmi_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service_1_vmi_0", + "parent_resource": "0", + "physical_resource_id": "d54dfd09-75c6-4e04-b204-909455b8f933", + "required_by": [ + "ssc_subint_service_1_vmi_0_v6_ip_0", + "ssc_subint_service_1_vmi_0_ip_0" + ], + "resource_name": "ssc_subint_service_1_vmi_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::VirtualMachineInterface", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service_1_vmi_0_v6_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service_1_vmi_0_v6_ip_0", + "parent_resource": "0", + "physical_resource_id": "e7f25707-12fd-454f-95ac-6a05cd70806f", + "required_by": [], + "resource_name": "ssc_subint_service_1_vmi_0_v6_ip_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::InstanceIp", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service_1_vmi_0_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service_1_vmi_0_ip_0", + "parent_resource": "0", + "physical_resource_id": "6d23f4d3-8f7b-42c5-bb9e-4aee5797d506", + "required_by": [], + "resource_name": "ssc_subint_service_1_vmi_0_ip_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::InstanceIp", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service_1_vmi_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service_1_vmi_0", + "parent_resource": "0", + "physical_resource_id": "f7a998c0-8939-4b07-bf4a-0862e9c325e1", + "required_by": [ + "ssc_subint_service_1_vmi_0_v6_ip_0", + "ssc_subint_service_1_vmi_0_ip_0" + ], + "resource_name": "ssc_subint_service_1_vmi_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::VirtualMachineInterface", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service_1_vmi_0_v6_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service_1_vmi_0_v6_ip_0", + "parent_resource": "0", + "physical_resource_id": "e7f25707-12fd-454f-95ac-6a05cd70806f", + "required_by": [], + "resource_name": "ssc_subint_service_1_vmi_0_v6_ip_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::InstanceIp", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service_1_vmi_0_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service_1_vmi_0_ip_0", + "parent_resource": "0", + "physical_resource_id": "6d23f4d3-8f7b-42c5-bb9e-4aee5797d506", + "required_by": [], + "resource_name": "ssc_subint_service_1_vmi_0_ip_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::InstanceIp", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service_1_vmi_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service_1_vmi_0", + "parent_resource": "0", + "physical_resource_id": "621c1fea-60b8-44ee-aede-c01b8b1aaa70", + "required_by": [ + "ssc_subint_service_1_vmi_0_v6_ip_0", + "ssc_subint_service_1_vmi_0_ip_0" + ], + "resource_name": "ssc_subint_service_1_vmi_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::VirtualMachineInterface", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service_1_vmi_0_v6_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service_1_vmi_0_v6_ip_0", + "parent_resource": "0", + "physical_resource_id": "e7f25707-12fd-454f-95ac-6a05cd70806f", + "required_by": [], + "resource_name": "ssc_subint_service_1_vmi_0_v6_ip_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::InstanceIp", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service_1_vmi_0_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service_1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service_1_vmi_0_ip_0", + "parent_resource": "0", + "physical_resource_id": "6d23f4d3-8f7b-42c5-bb9e-4aee5797d506", + "required_by": [], + "resource_name": "ssc_subint_service_1_vmi_0_ip_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::InstanceIp", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c/resources/0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "nested" + } + ], + "logical_resource_id": "0", + "parent_resource": "ssc_1_subint_service2_port_0_subinterfaces", + "physical_resource_id": "f711be16-2654-4a09-b89d-0511fda20e81", + "required_by": [], + "resource_name": "0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "vlan_subinterface_ssc_service2.yaml", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service2_vmi_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service2_vmi_0", + "parent_resource": "0", + "physical_resource_id": "2bbfa345-33bb-495a-94b2-fb514ee1cffc", + "required_by": [ + "ssc_subint_service2_vmi_0_v6_ip_0", + "ssc_subint_service2_vmi_0_ip_0" + ], + "resource_name": "ssc_subint_service2_vmi_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::VirtualMachineInterface", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service2_vmi_0_v6_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service2_vmi_0_v6_ip_0", + "parent_resource": "0", + "physical_resource_id": "e7f25707-12fd-454f-95ac-6a05cd70806f", + "required_by": [], + "resource_name": "ssc_subint_service2_vmi_0_v6_ip_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::InstanceIp", + "updated_time": "2019-01-23T19:34:56Z" + }, + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service2_vmi_0_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service2_vmi_0_ip_0", + "parent_resource": "0", + "physical_resource_id": "6d23f4d3-8f7b-42c5-bb9e-4aee5797d506", + "required_by": [], + "resource_name": "ssc_subint_service2_vmi_0_ip_0", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::ContrailV2::InstanceIp", + "updated_time": "2019-01-23T19:34:56Z" + } + ] } + diff --git a/adapters/mso-openstack-adapters/src/test/resources/NestedExpectedValue.json b/adapters/mso-openstack-adapters/src/test/resources/NestedExpectedValue.json new file mode 100644 index 0000000000..337f3ce853 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/NestedExpectedValue.json @@ -0,0 +1 @@ +[{"vserverId":"03a31a65-91ed-4563-9d5d-4f7223df9767","linterfaces":{"linterface":[]}}]
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/NeutronPort1.json b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort1.json new file mode 100644 index 0000000000..e4bd83c21d --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort1.json @@ -0,0 +1,41 @@ +{ + "port": { + "admin_state_up": true, + "allowed_address_pairs": [ + { + "ip_address": "192.168.1.1", + "mac_address": "" + } + ], + "binding:host_id": "cool.host.com", + "binding:vif_details": { + "vhostuser_mode": "client", + "vhostuser_socket": "/var/run/asdfasdf/asdfasfd-3d", + "vhostuser_vrouter_plug": true + }, + "binding:vif_type": "vhostuser", + "binding:vnic_type": "normal", + "device_id": "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "device_owner": "compute:ddd-daa-ddd", + "fixed_ips": [ + { + "ip_address": "2001:1890:1001:264d::2d:2b", + "subnet_id": "1327b4d5-e0f7-4e95-b019-60caaac751d1" + }, + { + "ip_address": "192.168.1.1", + "subnet_id": "05f0a2e9-e9d9-4cc0-8635-b82d3de2d700" + } + ], + "id": "7ee06d9d-3d18-411c-9d3e-aec930f70413", + "mac_address": "02:7e:e0:6d:9d:3d", + "name": "ibcx0026v_ibcx0026vm003_untrusted_port", + "network_id": "cee81fae-28b9-40a0-985f-181796ae0df6", + "port_security_enabled": true, + "security_groups": [ + "ee45e4fd-b00c-4396-85ee-18d82bd03ef6" + ], + "status": "ACTIVE", + "tenant_id": "a9442388264e4a198e68484e676404e9" + } +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/NeutronPort2.json b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort2.json new file mode 100644 index 0000000000..376a526133 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort2.json @@ -0,0 +1,41 @@ +{ + "port": { + "admin_state_up": true, + "allowed_address_pairs": [ + { + "ip_address": "192.168.1.1", + "mac_address": "" + } + ], + "binding:host_id": "cool.host.com", + "binding:vif_details": { + "vhostuser_mode": "client", + "vhostuser_socket": "/var/run/asdfasdf/asdfasfd-3d", + "vhostuser_vrouter_plug": true + }, + "binding:vif_type": "vhostuser", + "binding:vnic_type": "normal", + "device_id": "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "device_owner": "compute:ddd-daa-ddd", + "fixed_ips": [ + { + "ip_address": "2001:1890:1001:264d::2d:2b", + "subnet_id": "1327b4d5-e0f7-4e95-b019-60caaac751d1" + }, + { + "ip_address": "192.168.1.1", + "subnet_id": "05f0a2e9-e9d9-4cc0-8635-b82d3de2d700" + } + ], + "id": "27391d94-33af-474a-927d-d409249e8fd3", + "mac_address": "02:7e:e0:6d:9d:3d", + "name": "ibcx0026v_ibcx0026vm003_untrusted_port", + "network_id": "cee81fae-28b9-40a0-985f-181796ae0df6", + "port_security_enabled": true, + "security_groups": [ + "ee45e4fd-b00c-4396-85ee-18d82bd03ef6" + ], + "status": "ACTIVE", + "tenant_id": "a9442388264e4a198e68484e676404e9" + } +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/NeutronPort3.json b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort3.json new file mode 100644 index 0000000000..f0549216be --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort3.json @@ -0,0 +1,41 @@ +{ + "port": { + "admin_state_up": true, + "allowed_address_pairs": [ + { + "ip_address": "192.168.1.1", + "mac_address": "" + } + ], + "binding:host_id": "cool.host.com", + "binding:vif_details": { + "vhostuser_mode": "client", + "vhostuser_socket": "/var/run/asdfasdf/asdfasfd-3d", + "vhostuser_vrouter_plug": true + }, + "binding:vif_type": "vhostuser", + "binding:vnic_type": "normal", + "device_id": "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "device_owner": "compute:ddd-daa-ddd", + "fixed_ips": [ + { + "ip_address": "2001:1890:1001:264d::2d:2b", + "subnet_id": "1327b4d5-e0f7-4e95-b019-60caaac751d1" + }, + { + "ip_address": "192.168.1.1", + "subnet_id": "05f0a2e9-e9d9-4cc0-8635-b82d3de2d700" + } + ], + "id": "fdeedf37-c01e-4ab0-bdd6-8d5fc4913943", + "mac_address": "02:7e:e0:6d:9d:3d", + "name": "ibcx0026v_ibcx0026vm003_untrusted_port", + "network_id": "cee81fae-28b9-40a0-985f-181796ae0df6", + "port_security_enabled": true, + "security_groups": [ + "ee45e4fd-b00c-4396-85ee-18d82bd03ef6" + ], + "status": "ACTIVE", + "tenant_id": "a9442388264e4a198e68484e676404e9" + } +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/NeutronPort4.json b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort4.json new file mode 100644 index 0000000000..fa10b0c864 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort4.json @@ -0,0 +1,41 @@ +{ + "port": { + "admin_state_up": true, + "allowed_address_pairs": [ + { + "ip_address": "192.168.1.1", + "mac_address": "" + } + ], + "binding:host_id": "cool.host.com", + "binding:vif_details": { + "vhostuser_mode": "client", + "vhostuser_socket": "/var/run/asdfasdf/asdfasfd-3d", + "vhostuser_vrouter_plug": true + }, + "binding:vif_type": "vhostuser", + "binding:vnic_type": "normal", + "device_id": "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "device_owner": "compute:ddd-daa-ddd", + "fixed_ips": [ + { + "ip_address": "2001:1890:1001:264d::2d:2b", + "subnet_id": "1327b4d5-e0f7-4e95-b019-60caaac751d1" + }, + { + "ip_address": "192.168.1.1", + "subnet_id": "05f0a2e9-e9d9-4cc0-8635-b82d3de2d700" + } + ], + "id": "8d93f63e-e972-48c7-ad98-b2122da47315", + "mac_address": "02:7e:e0:6d:9d:3d", + "name": "ibcx0026v_ibcx0026vm003_untrusted_port", + "network_id": "cee81fae-28b9-40a0-985f-181796ae0df6", + "port_security_enabled": true, + "security_groups": [ + "ee45e4fd-b00c-4396-85ee-18d82bd03ef6" + ], + "status": "ACTIVE", + "tenant_id": "a9442388264e4a198e68484e676404e9" + } +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/NeutronPort5.json b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort5.json new file mode 100644 index 0000000000..54a9ee8404 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort5.json @@ -0,0 +1,41 @@ +{ + "port": { + "admin_state_up": true, + "allowed_address_pairs": [ + { + "ip_address": "192.168.1.1", + "mac_address": "" + } + ], + "binding:host_id": "cool.host.com", + "binding:vif_details": { + "vhostuser_mode": "client", + "vhostuser_socket": "/var/run/asdfasdf/asdfasfd-3d", + "vhostuser_vrouter_plug": true + }, + "binding:vif_type": "vhostuser", + "binding:vnic_type": "normal", + "device_id": "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "device_owner": "compute:ddd-daa-ddd", + "fixed_ips": [ + { + "ip_address": "2001:1890:1001:264d::2d:2b", + "subnet_id": "1327b4d5-e0f7-4e95-b019-60caaac751d1" + }, + { + "ip_address": "192.168.1.1", + "subnet_id": "05f0a2e9-e9d9-4cc0-8635-b82d3de2d700" + } + ], + "id": "0594a2f2-7ea4-42eb-abc2-48ea49677fca", + "mac_address": "02:7e:e0:6d:9d:3d", + "name": "ibcx0026v_ibcx0026vm003_untrusted_port", + "network_id": "cee81fae-28b9-40a0-985f-181796ae0df6", + "port_security_enabled": true, + "security_groups": [ + "ee45e4fd-b00c-4396-85ee-18d82bd03ef6" + ], + "status": "ACTIVE", + "tenant_id": "a9442388264e4a198e68484e676404e9" + } +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/NeutronPort6.json b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort6.json new file mode 100644 index 0000000000..c47dfd755b --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/NeutronPort6.json @@ -0,0 +1,41 @@ +{ + "port": { + "admin_state_up": true, + "allowed_address_pairs": [ + { + "ip_address": "192.168.1.1", + "mac_address": "" + } + ], + "binding:host_id": "cool.host.com", + "binding:vif_details": { + "vhostuser_mode": "client", + "vhostuser_socket": "/var/run/asdfasdf/asdfasfd-3d", + "vhostuser_vrouter_plug": true + }, + "binding:vif_type": "vhostuser", + "binding:vnic_type": "normal", + "device_id": "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "device_owner": "compute:ddd-daa-ddd", + "fixed_ips": [ + { + "ip_address": "2001:1890:1001:264d::2d:2b", + "subnet_id": "1327b4d5-e0f7-4e95-b019-60caaac751d1" + }, + { + "ip_address": "192.168.1.1", + "subnet_id": "05f0a2e9-e9d9-4cc0-8635-b82d3de2d700" + } + ], + "id": "00bb8407-650e-48b5-b919-33b88d6f8fe3", + "mac_address": "02:7e:e0:6d:9d:3d", + "name": "ibcx0026v_ibcx0026vm003_untrusted_port", + "network_id": "cee81fae-28b9-40a0-985f-181796ae0df6", + "port_security_enabled": true, + "security_groups": [ + "ee45e4fd-b00c-4396-85ee-18d82bd03ef6" + ], + "status": "ACTIVE", + "tenant_id": "a9442388264e4a198e68484e676404e9" + } +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface0Resources.json b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface0Resources.json index 0f3f35418e..d4745bec9f 100644 --- a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface0Resources.json +++ b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface0Resources.json @@ -4,23 +4,23 @@ "resources": [ { "parent_resource": "0", - "resource_name": "ssc_subint_mis_vmi_0", + "resource_name": "ssc_subint_svc1_vmi_0", "links": [ { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_svc1_vmi_0", "rel": "self" }, { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", "rel": "stack" } ], - "logical_resource_id": "ssc_subint_mis_vmi_0", + "logical_resource_id": "ssc_subint_svc1_vmi_0", "resource_status": "CREATE_COMPLETE", "updated_time": "2019-01-23T19:34:56Z", "required_by": [ - "ssc_subint_mis_vmi_0_v6_ip_0", - "ssc_subint_mis_vmi_0_ip_0" + "ssc_subint_svc1_vmi_0_v6_ip_0", + "ssc_subint_svc1_vmi_0_ip_0" ], "resource_status_reason": "state changed", "physical_resource_id": "d54dfd09-75c6-4e04-b204-909455b8f933", @@ -28,18 +28,18 @@ }, { "parent_resource": "0", - "resource_name": "ssc_subint_mis_vmi_0_v6_ip_0", + "resource_name": "ssc_subint_svc1_vmi_0_v6_ip_0", "links": [ { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_v6_ip_0", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_svc1_vmi_0_v6_ip_0", "rel": "self" }, { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", "rel": "stack" } ], - "logical_resource_id": "ssc_subint_mis_vmi_0_v6_ip_0", + "logical_resource_id": "ssc_subint_svc1_vmi_0_v6_ip_0", "resource_status": "CREATE_COMPLETE", "updated_time": "2019-01-23T19:34:56Z", "required_by": [], @@ -49,18 +49,18 @@ }, { "parent_resource": "0", - "resource_name": "ssc_subint_mis_vmi_0_ip_0", + "resource_name": "ssc_subint_svc1_vmi_0_ip_0", "links": [ { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_ip_0", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_svc1_vmi_0_ip_0", "rel": "self" }, { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", "rel": "stack" } ], - "logical_resource_id": "ssc_subint_mis_vmi_0_ip_0", + "logical_resource_id": "ssc_subint_svc1_vmi_0_ip_0", "resource_status": "CREATE_COMPLETE", "updated_time": "2019-01-23T19:34:56Z", "required_by": [], diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface1Resources.json b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface1Resources.json index cfc4d7fed6..68d3e0f880 100644 --- a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface1Resources.json +++ b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface1Resources.json @@ -4,23 +4,23 @@ "resources": [ { "parent_resource": "0", - "resource_name": "ssc_subint_mis_vmi_0", + "resource_name": "ssc_subint_svc1_vmi_0", "links": [ { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_svc1_vmi_0", "rel": "self" }, { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", "rel": "stack" } ], - "logical_resource_id": "ssc_subint_mis_vmi_0", + "logical_resource_id": "ssc_subint_svc1_vmi_0", "resource_status": "CREATE_COMPLETE", "updated_time": "2019-01-23T19:34:56Z", "required_by": [ - "ssc_subint_mis_vmi_0_v6_ip_0", - "ssc_subint_mis_vmi_0_ip_0" + "ssc_subint_svc1_vmi_0_v6_ip_0", + "ssc_subint_svc1_vmi_0_ip_0" ], "resource_status_reason": "state changed", "physical_resource_id": "f7a998c0-8939-4b07-bf4a-0862e9c325e1", @@ -28,18 +28,18 @@ }, { "parent_resource": "0", - "resource_name": "ssc_subint_mis_vmi_0_v6_ip_0", + "resource_name": "ssc_subint_svc1_vmi_0_v6_ip_0", "links": [ { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_v6_ip_0", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_svc1_vmi_0_v6_ip_0", "rel": "self" }, { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", "rel": "stack" } ], - "logical_resource_id": "ssc_subint_mis_vmi_0_v6_ip_0", + "logical_resource_id": "ssc_subint_svc1_vmi_0_v6_ip_0", "resource_status": "CREATE_COMPLETE", "updated_time": "2019-01-23T19:34:56Z", "required_by": [], @@ -49,18 +49,18 @@ }, { "parent_resource": "0", - "resource_name": "ssc_subint_mis_vmi_0_ip_0", + "resource_name": "ssc_subint_svc1_vmi_0_ip_0", "links": [ { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_ip_0", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_svc1_vmi_0_ip_0", "rel": "self" }, { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", "rel": "stack" } ], - "logical_resource_id": "ssc_subint_mis_vmi_0_ip_0", + "logical_resource_id": "ssc_subint_svc1_vmi_0_ip_0", "resource_status": "CREATE_COMPLETE", "updated_time": "2019-01-23T19:34:56Z", "required_by": [], diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface2Resources.json b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface2Resources.json index e8aa80eb6f..4f4d25d96b 100644 --- a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface2Resources.json +++ b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface2Resources.json @@ -4,23 +4,23 @@ "resources": [ { "parent_resource": "0", - "resource_name": "ssc_subint_mis_vmi_0", + "resource_name": "ssc_subint_svc1_vmi_0", "links": [ { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_svc1_vmi_0", "rel": "self" }, { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", "rel": "stack" } ], - "logical_resource_id": "ssc_subint_mis_vmi_0", + "logical_resource_id": "ssc_subint_svc1_vmi_0", "resource_status": "CREATE_COMPLETE", "updated_time": "2019-01-23T19:34:56Z", "required_by": [ - "ssc_subint_mis_vmi_0_v6_ip_0", - "ssc_subint_mis_vmi_0_ip_0" + "ssc_subint_svc1_vmi_0_v6_ip_0", + "ssc_subint_svc1_vmi_0_ip_0" ], "resource_status_reason": "state changed", "physical_resource_id": "621c1fea-60b8-44ee-aede-c01b8b1aaa70", @@ -28,18 +28,18 @@ }, { "parent_resource": "0", - "resource_name": "ssc_subint_mis_vmi_0_v6_ip_0", + "resource_name": "ssc_subint_svc1_vmi_0_v6_ip_0", "links": [ { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_v6_ip_0", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_svc1_vmi_0_v6_ip_0", "rel": "self" }, { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", "rel": "stack" } ], - "logical_resource_id": "ssc_subint_mis_vmi_0_v6_ip_0", + "logical_resource_id": "ssc_subint_svc1_vmi_0_v6_ip_0", "resource_status": "CREATE_COMPLETE", "updated_time": "2019-01-23T19:34:56Z", "required_by": [], @@ -49,18 +49,18 @@ }, { "parent_resource": "0", - "resource_name": "ssc_subint_mis_vmi_0_ip_0", + "resource_name": "ssc_subint_svc1_vmi_0_ip_0", "links": [ { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_ip_0", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_svc1_vmi_0_ip_0", "rel": "self" }, { - "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_svc1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", "rel": "stack" } ], - "logical_resource_id": "ssc_subint_mis_vmi_0_ip_0", + "logical_resource_id": "ssc_subint_svc1_vmi_0_ip_0", "resource_status": "CREATE_COMPLETE", "updated_time": "2019-01-23T19:34:56Z", "required_by": [], diff --git a/adapters/mso-openstack-adapters/src/test/resources/VServer_Found_Network_Sec_Server_Not_Found.json b/adapters/mso-openstack-adapters/src/test/resources/VServer_Found_Network_Sec_Server_Not_Found.json new file mode 100644 index 0000000000..d13b4b7672 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/VServer_Found_Network_Sec_Server_Not_Found.json @@ -0,0 +1,167 @@ +{ + "auditList": [ + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + "aaiObjectType": "vserver", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + { + "aaiObject": { + "interfaceId": "dec8bdc7-5718-41dc-bfbb-561ff6eeb81c", + "interfaceName": "ssc_1_trusted_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_trusted_port_0" + }, + { + "aaiObject": { + "interfaceId": "1c56a24b-5f03-435a-850d-31cd4252de56", + "interfaceName": "ssc_1_service1_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0" + }, + { + "aaiObject": { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_2" + }, + { + "aaiObject": { + "interfaceId": "12afcd28-929f-4d80-8a5a-0833bfd5e20b", + "interfaceName": "ssc_1_mgmt_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_1" + }, + { + "aaiObject": { + "interfaceId": "80baec42-ffae-425f-ad8c-3f7b2c24bfff", + "interfaceName": "ssc_1_mgmt_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_0" + }, + { + "aaiObject": { + "interfaceId": "13eddf95-4cf3-45f2-823a-2d890a6549b4", + "interfaceName": "ssc_1_service2_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0" + }, + { + "aaiObject": { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0/l-interfaces/l-interface/service2_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adb8", + "interfaceName": "ssc_1_int_ha_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_int_ha_port_0" + }, + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + "aaiObjectType": "vserver", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz1", + "interfaceName": "test_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz2", + "interfaceName": "test_port_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_2" + } + ] +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/VServer_Found_Sec_Server_Not_Found2.json b/adapters/mso-openstack-adapters/src/test/resources/VServer_Found_Sec_Server_Not_Found2.json new file mode 100644 index 0000000000..eb0fb7ca76 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/VServer_Found_Sec_Server_Not_Found2.json @@ -0,0 +1,167 @@ +{ + "auditList": [ + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + "aaiObjectType": "vserver", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + { + "aaiObject": { + "interfaceId": "dec8bdc7-5718-41dc-bfbb-561ff6eeb81c", + "interfaceName": "ssc_1_trusted_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_trusted_port_0" + }, + { + "aaiObject": { + "interfaceId": "1c56a24b-5f03-435a-850d-31cd4252de56", + "interfaceName": "ssc_1_service1_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0" + }, + { + "aaiObject": { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_2" + }, + { + "aaiObject": { + "interfaceId": "12afcd28-929f-4d80-8a5a-0833bfd5e20b", + "interfaceName": "ssc_1_mgmt_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_1" + }, + { + "aaiObject": { + "interfaceId": "80baec42-ffae-425f-ad8c-3f7b2c24bfff", + "interfaceName": "ssc_1_mgmt_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_0" + }, + { + "aaiObject": { + "interfaceId": "13eddf95-4cf3-45f2-823a-2d890a6549b4", + "interfaceName": "ssc_1_service2_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0" + }, + { + "aaiObject": { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0/l-interfaces/l-interface/service2_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adb8", + "interfaceName": "ssc_1_int_ha_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_int_ha_port_0" + }, + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + "aaiObjectType": "vserver", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz1", + "interfaceName": "test_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz2", + "interfaceName": "test_port_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_2" + } + ] +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/VServer_Found_network_Not_Found.json b/adapters/mso-openstack-adapters/src/test/resources/VServer_Found_network_Not_Found.json new file mode 100644 index 0000000000..0cb47dcb5e --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/VServer_Found_network_Not_Found.json @@ -0,0 +1,167 @@ +{ + "auditList": [ + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + "aaiObjectType": "vserver", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz1", + "interfaceName": "test_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz2", + "interfaceName": "test_port_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_2" + }, + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + "aaiObjectType": "vserver", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + { + "aaiObject": { + "interfaceId": "dec8bdc7-5718-41dc-bfbb-561ff6eeb81c", + "interfaceName": "ssc_1_trusted_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_trusted_port_0" + }, + { + "aaiObject": { + "interfaceId": "1c56a24b-5f03-435a-850d-31cd4252de56", + "interfaceName": "ssc_1_service1_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0" + }, + { + "aaiObject": { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_2" + }, + { + "aaiObject": { + "interfaceId": "12afcd28-929f-4d80-8a5a-0833bfd5e20b", + "interfaceName": "ssc_1_mgmt_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_1" + }, + { + "aaiObject": { + "interfaceId": "80baec42-ffae-425f-ad8c-3f7b2c24bfff", + "interfaceName": "ssc_1_mgmt_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_0" + }, + { + "aaiObject": { + "interfaceId": "13eddf95-4cf3-45f2-823a-2d890a6549b4", + "interfaceName": "ssc_1_service2_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0" + }, + { + "aaiObject": { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0/l-interfaces/l-interface/service2_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adb8", + "interfaceName": "ssc_1_int_ha_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_int_ha_port_0" + } + ] +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/Vserver2_Found_VServer1_Not_Found.json b/adapters/mso-openstack-adapters/src/test/resources/Vserver2_Found_VServer1_Not_Found.json new file mode 100644 index 0000000000..f3dc38d51b --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Vserver2_Found_VServer1_Not_Found.json @@ -0,0 +1,167 @@ +{ + "auditList": [ + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + "aaiObjectType": "vserver", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz1", + "interfaceName": "test_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz2", + "interfaceName": "test_port_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": true, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_2" + }, + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + "aaiObjectType": "vserver", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + { + "aaiObject": { + "interfaceId": "dec8bdc7-5718-41dc-bfbb-561ff6eeb81c", + "interfaceName": "ssc_1_trusted_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_trusted_port_0" + }, + { + "aaiObject": { + "interfaceId": "1c56a24b-5f03-435a-850d-31cd4252de56", + "interfaceName": "ssc_1_service1_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0" + }, + { + "aaiObject": { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_2" + }, + { + "aaiObject": { + "interfaceId": "12afcd28-929f-4d80-8a5a-0833bfd5e20b", + "interfaceName": "ssc_1_mgmt_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_1" + }, + { + "aaiObject": { + "interfaceId": "80baec42-ffae-425f-ad8c-3f7b2c24bfff", + "interfaceName": "ssc_1_mgmt_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_0" + }, + { + "aaiObject": { + "interfaceId": "13eddf95-4cf3-45f2-823a-2d890a6549b4", + "interfaceName": "ssc_1_service2_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0" + }, + { + "aaiObject": { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0/l-interfaces/l-interface/service2_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adb8", + "interfaceName": "ssc_1_int_ha_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_int_ha_port_0" + } + ] +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/Vservers_Not_Found.json b/adapters/mso-openstack-adapters/src/test/resources/Vservers_Not_Found.json new file mode 100644 index 0000000000..d9089dc099 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Vservers_Not_Found.json @@ -0,0 +1,167 @@ +{ + "auditList": [ + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + "aaiObjectType": "vserver", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz1", + "interfaceName": "test_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adz2", + "interfaceName": "test_port_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4dz/l-interfaces/l-interface/test_port_2" + }, + { + "aaiObject": { + "vserverId": "3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + "aaiObjectType": "vserver", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db" + }, + { + "aaiObject": { + "interfaceId": "dec8bdc7-5718-41dc-bfbb-561ff6eeb81c", + "interfaceName": "ssc_1_trusted_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_trusted_port_0" + }, + { + "aaiObject": { + "interfaceId": "1c56a24b-5f03-435a-850d-31cd4252de56", + "interfaceName": "ssc_1_service1_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0" + }, + { + "aaiObject": { + "interfaceId": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "interfaceName": "service1_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "interfaceName": "service1_sub_interface_2", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service1_port_0/l-interfaces/l-interface/service1_sub_interface_2" + }, + { + "aaiObject": { + "interfaceId": "12afcd28-929f-4d80-8a5a-0833bfd5e20b", + "interfaceName": "ssc_1_mgmt_port_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_1" + }, + { + "aaiObject": { + "interfaceId": "80baec42-ffae-425f-ad8c-3f7b2c24bfff", + "interfaceName": "ssc_1_mgmt_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_mgmt_port_0" + }, + { + "aaiObject": { + "interfaceId": "13eddf95-4cf3-45f2-823a-2d890a6549b4", + "interfaceName": "ssc_1_service2_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [], + "linterfaces": { + "linterface": [ + { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + } + ] + } + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0" + }, + { + "aaiObject": { + "interfaceId": "f711be16-2654-4a09-b89d-0511fda20e81", + "interfaceName": "service2_sub_interface_1", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "sub-l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_service2_port_0/l-interfaces/l-interface/service2_sub_interface_1" + }, + { + "aaiObject": { + "interfaceId": "9cab2903-70f7-44fd-b681-491d6ae2adb8", + "interfaceName": "ssc_1_int_ha_port_0", + "l3InterfaceIpv4AddressList": [], + "l3InterfaceIpv6AddressList": [] + }, + "aaiObjectType": "l-interface", + "doesObjectExist": false, + "resourceURI": "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner/cloudRegion/tenants/tenant/tenantId/vservers/vserver/3a4c2ca5-27b3-4ecc-98c5-06804867c4db/l-interfaces/l-interface/ssc_1_int_ha_port_0" + } + ] +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/__files/RollbackNetworkResponse.json b/adapters/mso-openstack-adapters/src/test/resources/__files/RollbackNetworkResponse.json new file mode 100644 index 0000000000..d319fedecd --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/__files/RollbackNetworkResponse.json @@ -0,0 +1,5 @@ +{ + "rollbackNetworkResponse" : { + "networkRolledBack" : true + } +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/application-test.yaml b/adapters/mso-openstack-adapters/src/test/resources/application-test.yaml index 398885cd08..694aedae10 100644 --- a/adapters/mso-openstack-adapters/src/test/resources/application-test.yaml +++ b/adapters/mso-openstack-adapters/src/test/resources/application-test.yaml @@ -64,6 +64,8 @@ tomcat: max-threads: 50 mso: logPath: logs + msb-ip: localhost + msb-port: ${wiremock.server.port} catalog: db: spring: @@ -75,6 +77,10 @@ mso: core-pool-size: 50 max-pool-size: 50 queue-capacity: 500 + workflow: + topics: + retryMultiplier: 60000 + retrySequence: 1, 1, 2, 3, 5, 8, 13, 20 spring: datasource: url: jdbc:mariadb://localhost:3307/catalogdb diff --git a/adapters/mso-openstack-adapters/src/test/resources/data.sql b/adapters/mso-openstack-adapters/src/test/resources/data.sql index 77df06bb92..3f6abc4f63 100644 --- a/adapters/mso-openstack-adapters/src/test/resources/data.sql +++ b/adapters/mso-openstack-adapters/src/test/resources/data.sql @@ -1,4 +1,4 @@ - +set foreign_key_checks=0; insert into heat_files(artifact_uuid, name, version, description, body, artifact_checksum, creation_timestamp) values ('00535bdd-0878-4478-b95a-c575c742bfb0', 'nimbus-ethernet-gw', '1', 'created from csar', 'DEVICE=$dev\nBOOTPROTO=none\nNM_CONTROLLED=no\nIPADDR=$ip\nNETMASK=$netmask\nGATEWAY=$gateway\n', 'MANUAL RECORD', '2017-01-21 23:56:43'); @@ -29,24 +29,19 @@ insert into heat_environment(artifact_uuid, name, version, description, body, ar insert into vnf_resource(orchestration_mode, description, creation_timestamp, model_uuid, aic_version_min, aic_version_max, model_invariant_uuid, model_version, model_name, tosca_node_type, heat_template_artifact_uuid) values ('HEAT', '1607 vSAMP10a - inherent network', '2017-04-14 21:46:28', 'ff2ae348-214a-11e7-93ae-92361f002671', '', '', '2fff5b20-214b-11e7-93ae-92361f002671', '1.0', 'vSAMP10a', 'VF', null); -insert into vnf_resource_customization(model_customization_uuid, model_instance_name, min_instances, max_instances, availability_zone_max_count, nf_type, nf_role, nf_function, nf_naming_code, creation_timestamp, vnf_resource_model_uuid, multi_stage_design) values -('68dc9a92-214c-11e7-93ae-92361f002671', 'vSAMP10a 1', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002671', null); +insert into vnf_resource_customization(model_customization_uuid, model_instance_name, min_instances, max_instances, availability_zone_max_count, nf_type, nf_role, nf_function, nf_naming_code, creation_timestamp, vnf_resource_model_uuid, multi_stage_design,service_model_uuid) values +('68dc9a92-214c-11e7-93ae-92361f002671', 'vSAMP10a 1', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002671', null,'5df8b6de-2083-11e7-93ae-92361f002671'); insert into vf_module(model_uuid, model_invariant_uuid, model_version, model_name, description, is_base, heat_template_artifact_uuid, vol_heat_template_artifact_uuid, creation_timestamp, vnf_resource_model_uuid) values - ('20c4431c-246d-11e7-93ae-92361f002671', '78ca26d0-246d-11e7-93ae-92361f002671', '2', 'vSAMP10aDEV::base::module-0', 'vSAMP10a DEV Base', '1', 'ff874603-4222-11e7-9252-005056850d2e', null, '2016-09-14 18:19:56', 'ff2ae348-214a-11e7-93ae-92361f002671'), ('066de97e-253e-11e7-93ae-92361f002671', '64efd51a-2544-11e7-93ae-92361f002671', '2', 'vSAMP10aDEV::PCM::module-1', 'vSAMP10a DEV PCM', '0', 'ff87482f-4222-11e7-9252-005056850d2e', null, '2016-09-14 18:19:56', 'ff2ae348-214a-11e7-93ae-92361f002671'); -insert into vf_module_customization(model_customization_uuid, label, initial_count, min_instances, max_instances, availability_zone_count, heat_environment_artifact_uuid, vol_environment_artifact_uuid, creation_timestamp, vf_module_model_uuid) values -('cb82ffd8-252a-11e7-93ae-92361f002671', 'base', '1', '0', '0', '0', 'fefb1601-4222-11e7-9252-005056850d2e', null, '2017-05-26 15:08:23', '20c4431c-246d-11e7-93ae-92361f002671'), -('b4ea86b4-253f-11e7-93ae-92361f002671', 'PCM', '0', '0', '0', '0', 'fefb1751-4333-11e7-9252-005056850d2e', null, '2017-05-26 15:08:23', '066de97e-253e-11e7-93ae-92361f002671'); +insert into vf_module_customization(model_customization_uuid, label, initial_count, min_instances, max_instances, availability_zone_count, heat_environment_artifact_uuid, vol_environment_artifact_uuid, creation_timestamp, vf_module_model_uuid,VNF_RESOURCE_CUSTOMIZATION_ID) values +('cb82ffd8-252a-11e7-93ae-92361f002671', 'base', '1', '0', '0', '0', 'fefb1601-4222-11e7-9252-005056850d2e', null, '2017-05-26 15:08:23', '20c4431c-246d-11e7-93ae-92361f002671',2), +('b4ea86b4-253f-11e7-93ae-92361f002671', 'PCM', '0', '0', '0', '0', 'fefb1751-4333-11e7-9252-005056850d2e', null, '2017-05-26 15:08:23', '066de97e-253e-11e7-93ae-92361f002671',2); -insert into vnf_res_custom_to_vf_module_custom(vnf_resource_cust_model_customization_uuid, vf_module_cust_model_customization_uuid, creation_timestamp) values -('68dc9a92-214c-11e7-93ae-92361f002671', 'cb82ffd8-252a-11e7-93ae-92361f002671', '2017-05-26 15:08:24'), -('68dc9a92-214c-11e7-93ae-92361f002671', 'b4ea86b4-253f-11e7-93ae-92361f002671', '2017-05-26 15:08:24'); - insert into allotted_resource(model_uuid, model_invariant_uuid, model_version, model_name, tosca_node_type, subcategory, description, creation_timestamp) values ('f6b7d4c6-e8a4-46e2-81bc-31cad5072842', 'b7a1b78e-6b6b-4b36-9698-8c9530da14af', '1.0', 'Tunnel_Xconn', '', '', '', '2017-05-26 15:08:24'); @@ -88,22 +83,15 @@ insert into collection_network_resource_customization(model_customization_uuid, insert into vnf_resource(orchestration_mode, description, creation_timestamp, model_uuid, aic_version_min, aic_version_max, model_invariant_uuid, model_version, model_name, tosca_node_type, heat_template_artifact_uuid) values ('HEAT', '1607 vSAMP10a - inherent network', '2017-04-14 21:46:28', 'ff2ae348-214a-11e7-93ae-92361f002672', '', '', '2fff5b20-214b-11e7-93ae-92361f002671', '2.0', 'vSAMP10a', 'VF', null); -insert into vnf_resource_customization(model_customization_uuid, model_instance_name, min_instances, max_instances, availability_zone_max_count, nf_type, nf_role, nf_function, nf_naming_code, creation_timestamp, vnf_resource_model_uuid, multi_stage_design) values -('68dc9a92-214c-11e7-93ae-92361f002672', 'vSAMP10a 2', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002672', null); insert into vf_module(model_uuid, model_invariant_uuid, model_version, model_name, description, is_base, heat_template_artifact_uuid, vol_heat_template_artifact_uuid, creation_timestamp, vnf_resource_model_uuid) values ('20c4431c-246d-11e7-93ae-92361f002672', '78ca26d0-246d-11e7-93ae-92361f002671', '2', 'vSAMP10aDEV::base::module-0', 'vSAMP10a DEV Base', '1', 'ff874603-4222-11e7-9252-005056850d2e', null, '2016-09-14 18:19:56', 'ff2ae348-214a-11e7-93ae-92361f002671'), ('066de97e-253e-11e7-93ae-92361f002672', '64efd51a-2544-11e7-93ae-92361f002671', '2', 'vSAMP10aDEV::PCM::module-1', 'vSAMP10a DEV PCM', '0', 'ff87482f-4222-11e7-9252-005056850d2e', null, '2016-09-14 18:19:56', 'ff2ae348-214a-11e7-93ae-92361f002671'); -insert into vf_module_customization(model_customization_uuid, label, initial_count, min_instances, max_instances, availability_zone_count, heat_environment_artifact_uuid, vol_environment_artifact_uuid, creation_timestamp, vf_module_model_uuid) values -('cb82ffd8-252a-11e7-93ae-92361f002672', 'base', '1', '0', '0', '0', 'fefb1601-4222-11e7-9252-005056850d2e', null, '2017-05-26 15:08:23', '20c4431c-246d-11e7-93ae-92361f002672'), -('b4ea86b4-253f-11e7-93ae-92361f002672', 'PCM', '0', '0', '0', '0', 'fefb1751-4333-11e7-9252-005056850d2e', null, '2017-05-26 15:08:23', '066de97e-253e-11e7-93ae-92361f002672'); - - -insert into vnf_res_custom_to_vf_module_custom(vnf_resource_cust_model_customization_uuid, vf_module_cust_model_customization_uuid, creation_timestamp) values -('68dc9a92-214c-11e7-93ae-92361f002672', 'cb82ffd8-252a-11e7-93ae-92361f002672', '2017-05-26 15:08:24'), -('68dc9a92-214c-11e7-93ae-92361f002672', 'b4ea86b4-253f-11e7-93ae-92361f002672', '2017-05-26 15:08:24'); +insert into vf_module_customization(model_customization_uuid, label, initial_count, min_instances, max_instances, availability_zone_count, heat_environment_artifact_uuid, vol_environment_artifact_uuid, creation_timestamp, vf_module_model_uuid,VNF_RESOURCE_CUSTOMIZATION_ID) values +('cb82ffd8-252a-11e7-93ae-92361f002672', 'base', '1', '0', '0', '0', 'fefb1601-4222-11e7-9252-005056850d2e', null, '2017-05-26 15:08:23', '20c4431c-246d-11e7-93ae-92361f002672',2), +('b4ea86b4-253f-11e7-93ae-92361f002672', 'PCM', '0', '0', '0', '0', 'fefb1751-4333-11e7-9252-005056850d2e', null, '2017-05-26 15:08:23', '066de97e-253e-11e7-93ae-92361f002672',2); insert into vf_module_to_heat_files(vf_module_model_uuid, heat_files_artifact_uuid) values @@ -116,12 +104,8 @@ insert into network_resource_customization_to_service(service_model_uuid, resour ('5df8b6de-2083-11e7-93ae-92361f002672', '3bdbb104-476c-483e-9f8b-c095b3d308ac'); -insert into vnf_resource_customization_to_service(service_model_uuid, resource_model_customization_uuid) values -('5df8b6de-2083-11e7-93ae-92361f002671', '68dc9a92-214c-11e7-93ae-92361f002671'), -('5df8b6de-2083-11e7-93ae-92361f002672', '68dc9a92-214c-11e7-93ae-92361f002672'); - insert into allotted_resource_customization_to_service(service_model_uuid, resource_model_customization_uuid) values -('5df8b6de-2083-11e7-93ae-92361f002671', '367a8ba9-057a-4506-b106-fbae818597c6' ), +('5df8b6de-2083-11e7-93ae-92361f002671', '367a8ba9-057a-4506-b106-fbae818597c6'), ('5df8b6de-2083-11e7-93ae-92361f002672', '367a8ba9-057a-4506-b106-fbae818597c6'); @@ -140,7 +124,7 @@ VALUES ('97b73b0f-2860-49e5-b9c5-b6f91e4ee4a8', 'fsb_volume_image_name_0', b'1', ('97b73b0f-2860-49e5-b9c5-b6f91e4ee4a8', 'fsb_volume_size_0', b'1', 'number', NULL), ('97b73b0f-2860-49e5-b9c5-b6f91e4ee4a8', 'fsb_volume_type_0', b'1', 'string', NULL); - INSERT INTO `vf_module` (`MODEL_UUID`, `MODEL_INVARIANT_UUID`, `MODEL_VERSION`, `MODEL_NAME`, `DESCRIPTION`, `IS_BASE`, `HEAT_TEMPLATE_ARTIFACT_UUID`, `VOL_HEAT_TEMPLATE_ARTIFACT_UUID`, `CREATION_TIMESTAMP`, `VNF_RESOURCE_MODEL_UUID`) +INSERT INTO `vf_module` (`MODEL_UUID`, `MODEL_INVARIANT_UUID`, `MODEL_VERSION`, `MODEL_NAME`, `DESCRIPTION`, `IS_BASE`, `HEAT_TEMPLATE_ARTIFACT_UUID`, `VOL_HEAT_TEMPLATE_ARTIFACT_UUID`, `CREATION_TIMESTAMP`, `VNF_RESOURCE_MODEL_UUID`) VALUES ('207fe0dc-4c89-4e5d-9a78-345e99ef7fbe', '547e9ac6-0489-41b6-8289-a7705f6e5c9d', '1', 'TestVnfType::TestModule-0', NULL, 1, 'd187c228-71c6-4c6d-8f33-cd1243442d0a', '97b73b0f-2860-49e5-b9c5-b6f91e4ee4a8', '2018-05-13 12:12:09', 'c5efeb55-4ade-49b8-815c-6a6391f6c46b'); INSERT INTO `heat_environment` (`ARTIFACT_UUID`, `NAME`, `VERSION`, `DESCRIPTION`, `BODY`, `ARTIFACT_CHECKSUM`, `CREATION_TIMESTAMP`) VALUES ('f4a21b58-5654-4cf6-9c50-de42004fe2b4', 'base_vmme.env', '2', 'Auto-generated HEAT Environment deployment artifact', 'parameters:\n Internal1_allow_transit: "True"\n Internal1_dhcp: "False"\n Internal1_forwarding_mode: "l2"\n Internal1_net_cidr: "169.253.0.0"\n Internal1_net_cidr_len: "17"\n Internal1_net_gateway: "169.253.0.3"\n Internal1_rpf: "disable"\n Internal1_shared: "False"\n Internal2_allow_transit: "True"\n Internal2_dhcp: "False"\n Internal2_forwarding_mode: "l2"\n Internal2_net_cidr: "169.255.0.0"\n Internal2_net_cidr_len: "17"\n Internal2_net_gateway: "169.255.0.3"\n Internal2_rpf: "disable"\n Internal2_shared: "False"\n domain_name: "default-domain"\n fsb1_Internal1_mac: "00:80:37:0E:0B:12"\n fsb1_Internal2_mac: "00:80:37:0E:0B:12"\n fsb2_Internal1_mac: "00:80:37:0E:0D:12"\n fsb2_Internal2_mac: "00:80:37:0E:0D:12"\n fsb_flavor_name: "nv.c20r64d1"\n gtp_sec_group_name: "gtp-sec-group"\n int1_sec_group_name: "int1-sec-group"\n int2_sec_group_name: "int2-sec-group"\n ncb1_Internal1_mac: "00:80:37:0E:09:12"\n ncb1_Internal2_mac: "00:80:37:0E:09:12"\n ncb2_Internal1_mac: "00:80:37:0E:0F:12"\n ncb2_Internal2_mac: "00:80:37:0E:0F:12"\n ncb_flavor_name: "nv.c20r64d1"\n oam_sec_group_name: "oam-sec-group"\n pxe_image_name: "MME_PXE-Boot_16ACP04_GA.qcow2"\n sctp-a-IPv6_ethertype: "IPv6"\n sctp-a-display_name: "epc-sctp-a-ipv4v6-sec-group"\n sctp-a-dst_subnet_prefix_v6: "::"\n sctp-a-egress-dst_end_port: 65535\n sctp-a-egress-dst_start_port: 0\n sctp-a-egress-src_end_port: 65535\n sctp-a-egress-src_start_port: 0\n sctp-a-egress_action: "pass"\n sctp-a-egress_dst_subnet_prefix: "0.0.0.0"\n sctp-a-egress_dst_subnet_prefix_len: 0\n sctp-a-egress_ethertype: "IPv4"\n sctp-a-egress_rule_application: "any"\n sctp-a-egress_rule_protocol: "icmp"\n sctp-a-egress_src_addresses: "local"\n sctp-a-ingress-dst_end_port: 65535\n sctp-a-ingress-dst_start_port: 0\n sctp-a-ingress-src_end_port: 65535\n sctp-a-ingress-src_start_port: 0\n sctp-a-ingress-src_subnet_prefix: "0.0.0.0"\n sctp-a-ingress-src_subnet_prefix_len: 0\n sctp-a-ingress_action: "pass"\n sctp-a-ingress_dst_addresses: "local"\n sctp-a-ingress_ethertype: "IPv4"\n sctp-a-ingress_rule_application: "any"\n sctp-a-ingress_rule_protocol: "icmp"\n sctp-a-ipv6-egress-dst_start_port: "0"\n sctp-a-ipv6-egress_action: "pass"\n sctp-a-ipv6-egress_dst_end_port: "65535"\n sctp-a-ipv6-egress_dst_subnet_prefix: "0.0.0.0"\n sctp-a-ipv6-egress_dst_subnet_prefix_len: "0"\n sctp-a-ipv6-egress_ethertype: "IPv4"\n sctp-a-ipv6-egress_rule_application: "any"\n sctp-a-ipv6-egress_rule_protocol: "any"\n sctp-a-ipv6-egress_src_addresses: "local"\n sctp-a-ipv6-egress_src_end_port: "65535"\n sctp-a-ipv6-egress_src_start_port: "0"\n sctp-a-ipv6-ingress-dst_end_port: "65535"\n sctp-a-ipv6-ingress-dst_start_port: "0"\n sctp-a-ipv6-ingress-src_end_port: 65535\n sctp-a-ipv6-ingress-src_start_port: 0\n sctp-a-ipv6-ingress_action: "pass"\n sctp-a-ipv6-ingress_dst_addresses: "local"\n sctp-a-ipv6-ingress_ethertype: "IPv4"\n sctp-a-ipv6-ingress_rule_application: "any"\n sctp-a-ipv6-ingress_rule_protocol: "any"\n sctp-a-ipv6-ingress_src_subnet_prefix: "0.0.0.0"\n sctp-a-ipv6-ingress_src_subnet_prefix_len: "0"\n sctp-a-name: "epc-sctp-a-ipv4v6-sec-group"\n sctp-a-src_subnet_prefix_v6: "::"\n sctp-b-IPv6_ethertype: "IPv6"\n sctp-b-display_name: "epc-sctp-b-ipv4v6-sec-group"\n sctp-b-dst_subnet_prefix_v6: "::"\n sctp-b-egress-dst_end_port: 65535\n sctp-b-egress-dst_start_port: 0\n sctp-b-egress-src_end_port: 65535\n sctp-b-egress-src_start_port: 0\n sctp-b-egress_action: "pass"\n sctp-b-egress_dst_subnet_prefix: "0.0.0.0"\n sctp-b-egress_dst_subnet_prefix_len: 0\n sctp-b-egress_ethertype: "IPv4"\n sctp-b-egress_rule_application: "any"\n sctp-b-egress_rule_protocol: "icmp"\n sctp-b-egress_src_addresses: "local"\n sctp-b-ingress-dst_end_port: 65535\n sctp-b-ingress-dst_start_port: 0\n sctp-b-ingress-src_end_port: 65535\n sctp-b-ingress-src_start_port: 0\n sctp-b-ingress-src_subnet_prefix: "0.0.0.0"\n sctp-b-ingress-src_subnet_prefix_len: 0\n sctp-b-ingress_action: "pass"\n sctp-b-ingress_dst_addresses: "local"\n sctp-b-ingress_ethertype: "IPv4"\n sctp-b-ingress_rule_application: "any"\n sctp-b-ingress_rule_protocol: "icmp"\n sctp-b-ipv6-egress-dst_start_port: "0"\n sctp-b-ipv6-egress_action: "pass"\n sctp-b-ipv6-egress_dst_end_port: "65535"\n sctp-b-ipv6-egress_dst_subnet_prefix: "0.0.0.0"\n sctp-b-ipv6-egress_dst_subnet_prefix_len: "0"\n sctp-b-ipv6-egress_ethertype: "IPv4"\n sctp-b-ipv6-egress_rule_application: "any"\n sctp-b-ipv6-egress_rule_protocol: "any"\n sctp-b-ipv6-egress_src_addresses: "local"\n sctp-b-ipv6-egress_src_end_port: "65535"\n sctp-b-ipv6-egress_src_start_port: "0"\n sctp-b-ipv6-ingress-dst_end_port: "65535"\n sctp-b-ipv6-ingress-dst_start_port: "0"\n sctp-b-ipv6-ingress-src_end_port: 65535\n sctp-b-ipv6-ingress-src_start_port: 0\n sctp-b-ipv6-ingress_action: "pass"\n sctp-b-ipv6-ingress_dst_addresses: "local"\n sctp-b-ipv6-ingress_ethertype: "IPv4"\n sctp-b-ipv6-ingress_rule_application: "any"\n sctp-b-ipv6-ingress_rule_protocol: "any"\n sctp-b-ipv6-ingress_src_subnet_prefix: "0.0.0.0"\n sctp-b-ipv6-ingress_src_subnet_prefix_len: "0"\n sctp-b-name: "epc-sctp-b-ipv4v6-sec-group"\n sctp-b-src_subnet_prefix_v6: "::"\n sctp_rule_protocol: "132"\n vlc_st_availability_zone: "True"\n vlc_st_interface_type_gtp: "other0"\n vlc_st_interface_type_int1: "other1"\n vlc_st_interface_type_int2: "other2"\n vlc_st_interface_type_oam: "management"\n vlc_st_interface_type_sctp_a: "left"\n vlc_st_interface_type_sctp_b: "right"\n vlc_st_service_mode: "in-network-nat"\n vlc_st_service_type: "firewall"\n vlc_st_version: "2"\n vlc_st_virtualization_type: "virtual-machine"\n availability_zone_0: \n availability_zone_1: \n availability_zone_2: \n availability_zone_3: \n fsb_name_0: \n fsb_name_1: \n fsb_oam_ip_0: \n fsb_oam_ip_1: \n fsb_volume_id_0: \n fsb_volume_id_1: \n gtp_net_fqdn: \n gtp_net_name: \n ncb_name_0: \n ncb_name_1: \n oam_net_fqdn: \n oam_net_name: \n sctp_a_net_fqdn: \n sctp_a_net_name: \n sctp_b_net_fqdn: \n sctp_b_net_name: \n vf_module_id: \n vlc_gtp_route_prefixes: \n vlc_oam_route_prefixes: \n vlc_sctp_a_route_prefixes: \n vlc_sctp_b_route_prefixes: \n vnf_id: \n vnf_name: \n', 'MGJjYzM2ZWY1ODBjYzc1MzBiMGQxZmI4N2MyZmFkY2E=', '2018-05-13 12:12:09'); @@ -148,7 +132,8 @@ INSERT INTO `heat_environment` (`ARTIFACT_UUID`, `NAME`, `VERSION`, `DESCRIPTION - INSERT INTO `vf_module_customization` (`MODEL_CUSTOMIZATION_UUID`, `LABEL`, `INITIAL_COUNT`, `MIN_INSTANCES`, `MAX_INSTANCES`, `AVAILABILITY_ZONE_COUNT`, `HEAT_ENVIRONMENT_ARTIFACT_UUID`, `VOL_ENVIRONMENT_ARTIFACT_UUID`, `CREATION_TIMESTAMP`, `VF_MODULE_MODEL_UUID`) VALUES ('9b339a61-69ca-465f-86b8-1c72c582b8e8', 'base_vmme', 1, 1, 1, NULL, 'f4a21b58-5654-4cf6-9c50-de42004fe2b4', '3375f64b-4709-4802-8713-7a164763f9cd', '2018-05-13 12:12:09', '207fe0dc-4c89-4e5d-9a78-345e99ef7fbe'); +INSERT INTO `vf_module_customization` (`MODEL_CUSTOMIZATION_UUID`, `LABEL`, `INITIAL_COUNT`, `MIN_INSTANCES`, `MAX_INSTANCES`, `AVAILABILITY_ZONE_COUNT`, `HEAT_ENVIRONMENT_ARTIFACT_UUID`, `VOL_ENVIRONMENT_ARTIFACT_UUID`, `CREATION_TIMESTAMP`, `VF_MODULE_MODEL_UUID`,VNF_RESOURCE_CUSTOMIZATION_ID) +VALUES ('9b339a61-69ca-465f-86b8-1c72c582b8e8', 'base_vmme', 1, 1, 1, NULL, 'f4a21b58-5654-4cf6-9c50-de42004fe2b4', '3375f64b-4709-4802-8713-7a164763f9cd', '2018-05-13 12:12:09', '207fe0dc-4c89-4e5d-9a78-345e99ef7fbe',2); INSERT INTO `cloudify_managers` (`ID`, `CLOUDIFY_URL`, `USERNAME`, `PASSWORD`, `VERSION`, `LAST_UPDATED_BY`, `CREATION_TIMESTAMP`, `UPDATE_TIMESTAMP`) VALUES ('mtn13', 'http://localhost:28090/v2.0', 'm93945', '93937EA01B94A10A49279D4572B48369', NULL, 'MSO_USER', '2018-07-17 14:05:08', '2018-07-17 14:05:08'); @@ -157,7 +142,7 @@ INSERT INTO `identity_services` (`ID`, `IDENTITY_URL`, `MSO_ID`, `MSO_PASS`, `PR INSERT INTO `cloud_sites` (`ID`, `region_id`, `identity_service_id`, `cloud_version`, `clli`, `cloudify_id`, `platform`, `orchestrator`, `CREATION_TIMESTAMP`, `UPDATE_TIMESTAMP`) VALUES ('MTN13', 'mtn13', 'MTN13', '3.0', 'MDT13', 'mtn13', null, 'orchestrator', '2018-07-17 14:06:28', '2018-07-17 14:06:28'); - +set foreign_key_checks=1; diff --git a/adapters/mso-openstack-adapters/src/test/resources/schema.sql b/adapters/mso-openstack-adapters/src/test/resources/schema.sql index ac08f8b645..29a81e8fdf 100644 --- a/adapters/mso-openstack-adapters/src/test/resources/schema.sql +++ b/adapters/mso-openstack-adapters/src/test/resources/schema.sql @@ -1,834 +1,1237 @@ - -create table `allotted_resource` ( - `model_uuid` varchar(200) not null, - `model_invariant_uuid` varchar(200) not null, - `model_version` varchar(20) not null, - `model_name` varchar(200) not null, - `tosca_node_type` varchar(200) default null, - `subcategory` varchar(200) default null, - `description` varchar(1200) default null, - `creation_timestamp` datetime not null default current_timestamp, - primary key (`model_uuid`) -) engine=innodb default charset=latin1; - - - - -create table `allotted_resource_customization` ( - `model_customization_uuid` varchar(200) not null, - `model_instance_name` varchar(200) not null, - `providing_service_model_uuid` varchar(200) default null, - `providing_service_model_invariant_uuid` varchar(200) default null, - `providing_service_model_name` varchar(200) default null, - `target_network_role` varchar(200) default null, - `nf_type` varchar(200) default null, - `nf_role` varchar(200) default null, - `nf_function` varchar(200) default null, - `nf_naming_code` varchar(200) default null, - `min_instances` int(11) default null, - `max_instances` int(11) default null, - `ar_model_uuid` varchar(200) not null, - `resource_input` varchar(20000) default null, - `creation_timestamp` datetime not null default current_timestamp, - primary key (`model_customization_uuid`), - key `fk_allotted_resource_customization__allotted_resource1_idx` (`ar_model_uuid`), - constraint `fk_allotted_resource_customization__allotted_resource1` foreign key (`ar_model_uuid`) references `allotted_resource` (`model_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1; - - - - -create table `heat_environment` ( - `artifact_uuid` varchar(200) not null, - `name` varchar(100) not null, - `version` varchar(20) not null, - `description` varchar(1200) default null, - `body` longtext not null, - `artifact_checksum` varchar(200) not null default 'manual record', - `creation_timestamp` datetime not null default current_timestamp, - primary key (`artifact_uuid`) -) engine=innodb default charset=latin1; - - - -create table `heat_files` ( - `artifact_uuid` varchar(200) not null, - `name` varchar(200) not null, - `version` varchar(20) not null, - `description` varchar(1200) default null, - `body` longtext not null, - `artifact_checksum` varchar(200) not null default 'manual record', - `creation_timestamp` datetime not null default current_timestamp, - primary key (`artifact_uuid`) -) engine=innodb default charset=latin1; - - - - -create table `heat_template` ( - `artifact_uuid` varchar(200) not null, - `name` varchar(200) not null, - `version` varchar(20) not null, - `description` varchar(1200) default null, - `body` longtext not null, - `timeout_minutes` int(11) default null, - `artifact_checksum` varchar(200) not null default 'manual record', - `creation_timestamp` datetime not null default current_timestamp, - primary key (`artifact_uuid`) -) engine=innodb default charset=latin1; - - - -create table `heat_nested_template` ( - `parent_heat_template_uuid` varchar(200) not null, - `child_heat_template_uuid` varchar(200) not null, - `provider_resource_file` varchar(100) default null, - primary key (`parent_heat_template_uuid`,`child_heat_template_uuid`), - key `fk_heat_nested_template__heat_template2_idx` (`child_heat_template_uuid`), - constraint `fk_heat_nested_template__child_heat_temp_uuid__heat_template1` foreign key (`child_heat_template_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade, - constraint `fk_heat_nested_template__parent_heat_temp_uuid__heat_template1` foreign key (`parent_heat_template_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1; - - - - -create table `heat_template_params` ( - `heat_template_artifact_uuid` varchar(200) not null, - `param_name` varchar(100) not null, - `is_required` bit(1) not null, - `param_type` varchar(20) default null, - `param_alias` varchar(45) default null, - primary key (`heat_template_artifact_uuid`,`param_name`), - constraint `fk_heat_template_params__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1; - - - -create table `network_recipe` ( - `id` int(11) not null auto_increment, - `model_name` varchar(20) not null, - `action` varchar(50) not null, - `description` varchar(1200) default null, - `orchestration_uri` varchar(256) not null, - `network_param_xsd` varchar(2048) default null, - `recipe_timeout` int(11) default null, - `service_type` varchar(45) default null, - `creation_timestamp` datetime not null default current_timestamp, - `version_str` varchar(20) not null, - primary key (`id`), - unique key `uk_rl4f296i0p8lyokxveaiwkayi` (`model_name`,`action`,`version_str`) -) engine=innodb auto_increment=178 default charset=latin1; - - - - -create table `temp_network_heat_template_lookup` ( - `network_resource_model_name` varchar(200) not null, - `heat_template_artifact_uuid` varchar(200) not null, - `aic_version_min` varchar(20) not null, - `aic_version_max` varchar(20) default null, - primary key (`network_resource_model_name`), - key `fk_temp_network_heat_template_lookup__heat_template1_idx` (`heat_template_artifact_uuid`), - constraint `fk_temp_network_heat_template_lookup__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade -) engine=innodb default charset=latin1; - - - -create table `network_resource` ( - `model_uuid` varchar(200) not null, - `model_name` varchar(200) not null, - `model_invariant_uuid` varchar(200) default null, - `description` varchar(1200) default null, - `heat_template_artifact_uuid` varchar(200) null, - `neutron_network_type` varchar(20) default null, - `model_version` varchar(20) default null, - `tosca_node_type` varchar(200) default null, - `aic_version_min` varchar(20) null, - `aic_version_max` varchar(20) default null, - `orchestration_mode` varchar(20) default 'heat', - `resource_category` varchar(20) default null, - `resource_sub_category` varchar(20) default null, - `creation_timestamp` datetime not null default current_timestamp, - primary key (`model_uuid`), - key `fk_network_resource__temp_network_heat_template_lookup1_idx` (`model_name`), - key `fk_network_resource__heat_template1_idx` (`heat_template_artifact_uuid`), - constraint `fk_network_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade -) engine=innodb default charset=latin1; - - - - - -create table `network_resource_customization` ( - `model_customization_uuid` varchar(200) not null, - `model_instance_name` varchar(200) not null, - `network_technology` varchar(45) default null, - `network_type` varchar(45) default null, - `network_role` varchar(200) default null, - `network_scope` varchar(45) default null, - `creation_timestamp` datetime not null default current_timestamp, - `network_resource_model_uuid` varchar(200) not null, - `resource_input` varchar(20000) default null, - primary key (`model_customization_uuid`), - key `fk_network_resource_customization__network_resource1_idx` (`network_resource_model_uuid`), - constraint `fk_network_resource_customization__network_resource1` foreign key (`network_resource_model_uuid`) references `network_resource` (`model_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1; - - - - - -create table `tosca_csar` ( - `artifact_uuid` varchar(200) not null, - `name` varchar(200) not null, - `version` varchar(20) not null, - `description` varchar(1200) default null, - `artifact_checksum` varchar(200) not null, - `url` varchar(200) not null, - `creation_timestamp` datetime not null default current_timestamp, - primary key (`artifact_uuid`) -) engine=innodb default charset=latin1; - - - - -create table `service` ( - `model_uuid` varchar(200) not null, - `model_name` varchar(200) not null, - `model_invariant_uuid` varchar(200) not null, - `model_version` varchar(20) not null, - `description` varchar(1200) default null, - `creation_timestamp` datetime not null default current_timestamp, - `tosca_csar_artifact_uuid` varchar(200) default null, - `service_type` varchar(200) default null, - `service_role` varchar(200) default null, - `environment_context` varchar(200) default null, - `workload_context` varchar(200) default null, - `resource_order` varchar(200) default null, - primary key (`model_uuid`), - key `fk_service__tosca_csar1_idx` (`tosca_csar_artifact_uuid`), - constraint `fk_service__tosca_csar1` foreign key (`tosca_csar_artifact_uuid`) references `tosca_csar` (`artifact_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1; - - - -create table `service_recipe` ( - `id` int(11) not null auto_increment, - `action` varchar(50) not null, - `version_str` varchar(20) default null, - `description` varchar(1200) default null, - `orchestration_uri` varchar(256) not null, - `service_param_xsd` varchar(2048) default null, - `recipe_timeout` int(11) default null, - `service_timeout_interim` int(11) default null, - `creation_timestamp` datetime not null default current_timestamp, - `service_model_uuid` varchar(200) not null, - primary key (`id`), - unique key `uk_7fav5dkux2v8g9d2i5ymudlgc` (`service_model_uuid`,`action`), - key `fk_service_recipe__service1_idx` (`service_model_uuid`), - constraint `fk_service_recipe__service1` foreign key (`service_model_uuid`) references `service` (`model_uuid`) on delete cascade on update cascade -) engine=innodb auto_increment=86 default charset=latin1; - - - -create table `vnf_resource` ( - `orchestration_mode` varchar(20) not null default 'heat', - `description` varchar(1200) default null, - `creation_timestamp` datetime not null default current_timestamp, - `model_uuid` varchar(200) not null, - `aic_version_min` varchar(20) default null, - `aic_version_max` varchar(20) default null, - `model_invariant_uuid` varchar(200) default null, - `model_version` varchar(20) not null, - `model_name` varchar(200) default null, - `tosca_node_type` varchar(200) default null, - `resource_category` varchar(200) default null, - `resource_sub_category` varchar(200) default null, - `heat_template_artifact_uuid` varchar(200) default null, - primary key (`model_uuid`), - key `fk_vnf_resource__heat_template1` (`heat_template_artifact_uuid`), - constraint `fk_vnf_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1; - - - - -create table `vf_module` ( - `model_uuid` varchar(200) not null, - `model_invariant_uuid` varchar(200) default null, - `model_version` varchar(20) not null, - `model_name` varchar(200) not null, - `description` varchar(1200) default null, - `is_base` int(11) not null, - `heat_template_artifact_uuid` varchar(200) default null, - `vol_heat_template_artifact_uuid` varchar(200) default null, - `creation_timestamp` datetime not null default current_timestamp, - `vnf_resource_model_uuid` varchar(200) not null, - primary key (`model_uuid`,`vnf_resource_model_uuid`), - key `fk_vf_module__vnf_resource1_idx` (`vnf_resource_model_uuid`), - key `fk_vf_module__heat_template_art_uuid__heat_template1_idx` (`heat_template_artifact_uuid`), - key `fk_vf_module__vol_heat_template_art_uuid__heat_template2_idx` (`vol_heat_template_artifact_uuid`), - constraint `fk_vf_module__heat_template_art_uuid__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade, - constraint `fk_vf_module__vnf_resource1` foreign key (`vnf_resource_model_uuid`) references `vnf_resource` (`model_uuid`) on delete cascade on update cascade, - constraint `fk_vf_module__vol_heat_template_art_uuid__heat_template2` foreign key (`vol_heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1; - - - -/*!40101 set @saved_cs_client = @@character_set_client */; -/*!40101 set character_set_client = utf8 */; -create table `vf_module_customization` ( - `model_customization_uuid` varchar(200) not null, - `label` varchar(200) default null, - `initial_count` int(11) default '0', - `min_instances` int(11) default '0', - `max_instances` int(11) default null, - `availability_zone_count` int(11) default null, - `heat_environment_artifact_uuid` varchar(200) default null, - `vol_environment_artifact_uuid` varchar(200) default null, - `creation_timestamp` datetime not null default current_timestamp, - `vf_module_model_uuid` varchar(200) not null, - primary key (`model_customization_uuid`), - key `fk_vf_module_customization__vf_module1_idx` (`vf_module_model_uuid`), - key `fk_vf_module_customization__heat_env__heat_environment1_idx` (`heat_environment_artifact_uuid`), - key `fk_vf_module_customization__vol_env__heat_environment2_idx` (`vol_environment_artifact_uuid`), - constraint `fk_vf_module_customization__heat_env__heat_environment1` foreign key (`heat_environment_artifact_uuid`) references `heat_environment` (`artifact_uuid`) on delete cascade on update cascade, - constraint `fk_vf_module_customization__vf_module1` foreign key (`vf_module_model_uuid`) references `vf_module` (`model_uuid`) on delete cascade on update cascade, - constraint `fk_vf_module_customization__vol_env__heat_environment2` foreign key (`vol_environment_artifact_uuid`) references `heat_environment` (`artifact_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1; -/*!40101 set character_set_client = @saved_cs_client */; - - - - - -create table `vf_module_to_heat_files` ( - `vf_module_model_uuid` varchar(200) not null, - `heat_files_artifact_uuid` varchar(200) not null, - primary key (`vf_module_model_uuid`,`heat_files_artifact_uuid`), - key `fk_vf_module_to_heat_files__heat_files__artifact_uuid1_idx` (`heat_files_artifact_uuid`), - constraint `fk_vf_module_to_heat_files__heat_files__artifact_uuid1` foreign key (`heat_files_artifact_uuid`) references `heat_files` (`artifact_uuid`) on delete cascade on update cascade, - constraint `fk_vf_module_to_heat_files__vf_module__model_uuid1` foreign key (`vf_module_model_uuid`) references `vf_module` (`model_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1 comment='il fait ce qu''il dit'; - - - - -create table `vnf_components` ( - `vnf_id` int(11) not null, - `component_type` varchar(20) not null, - `heat_template_id` int(11) default null, - `heat_environment_id` int(11) default null, - `creation_timestamp` datetime not null default current_timestamp, - primary key (`vnf_id`,`component_type`) -) engine=innodb default charset=latin1; - - - - -create table `vnf_components_recipe` ( - `id` int(11) not null auto_increment, - `vnf_type` varchar(200) default null, - `vnf_component_type` varchar(45) not null, - `action` varchar(50) not null, - `service_type` varchar(45) default null, - `version` varchar(20) not null, - `description` varchar(1200) default null, - `orchestration_uri` varchar(256) not null, - `vnf_component_param_xsd` varchar(2048) default null, - `recipe_timeout` int(11) default null, - `creation_timestamp` datetime default current_timestamp, - `vf_module_model_uuid` varchar(200) default null, - primary key (`id`), - unique key `uk_4dpdwddaaclhc11wxsb7h59ma` (`vf_module_model_uuid`,`vnf_component_type`,`action`,`version`) -) engine=innodb auto_increment=26 default charset=latin1; - - - - -create table `vnf_recipe` ( - `id` int(11) not null auto_increment, - `vnf_type` varchar(200) default null, - `action` varchar(50) not null, - `service_type` varchar(45) default null, - `version_str` varchar(20) not null, - `description` varchar(1200) default null, - `orchestration_uri` varchar(256) not null, - `vnf_param_xsd` varchar(2048) default null, - `recipe_timeout` int(11) default null, - `creation_timestamp` datetime default current_timestamp, - `vf_module_id` varchar(100) default null, - primary key (`id`), - unique key `uk_f3tvqau498vrifq3cr8qnigkr` (`vf_module_id`,`action`,`version_str`) -) engine=innodb auto_increment=10006 default charset=latin1; - - -ALTER TABLE `catalogdb`.`vnf_recipe` -CHANGE COLUMN `VNF_TYPE` `NF_ROLE` VARCHAR(200) NULL DEFAULT NULL ; - - - - - -create table `vnf_resource_customization` ( - `model_customization_uuid` varchar(200) not null, - `model_instance_name` varchar(200) not null, - `min_instances` int(11) default null, - `max_instances` int(11) default null, - `availability_zone_max_count` int(11) default null, - `nf_type` varchar(200) default null, - `nf_role` varchar(200) default null, - `nf_function` varchar(200) default null, - `nf_naming_code` varchar(200) default null, - `creation_timestamp` datetime not null default current_timestamp, - `vnf_resource_model_uuid` varchar(200) not null, - `multi_stage_design` varchar(20) default null, - `resource_input` varchar(20000) default null, - `cds_blueprint_name` varchar(200), - `cds_blueprint_version` varchar(200), - primary key (`model_customization_uuid`), - key `fk_vnf_resource_customization__vnf_resource1_idx` (`vnf_resource_model_uuid`), - constraint `fk_vnf_resource_customization__vnf_resource1` foreign key (`vnf_resource_model_uuid`) references `vnf_resource` (`model_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1; - - - - -create table `vnf_res_custom_to_vf_module_custom` ( - `vnf_resource_cust_model_customization_uuid` varchar(200) not null, - `vf_module_cust_model_customization_uuid` varchar(200) not null, - `creation_timestamp` datetime not null default current_timestamp, - primary key (`vnf_resource_cust_model_customization_uuid`,`vf_module_cust_model_customization_uuid`), - key `fk_vnf_res_custom_to_vf_module_custom__vf_module_customizat_idx` (`vf_module_cust_model_customization_uuid`), - constraint `fk_vnf_res_custom_to_vf_module_custom__vf_module_customization1` foreign key (`vf_module_cust_model_customization_uuid`) references `vf_module_customization` (`model_customization_uuid`) on delete cascade on update cascade, - constraint `fk_vnf_res_custom_to_vf_module_custom__vnf_resource_customiza1` foreign key (`vnf_resource_cust_model_customization_uuid`) references `vnf_resource_customization` (`model_customization_uuid`) on delete cascade on update cascade -) engine=innodb default charset=latin1; - - -create table if not exists external_service_to_internal_model_mapping ( -id int(11) not null, -service_name varchar(200) not null, -product_flavor varchar(200) null, -subscription_service_type varchar(200) not null, -service_model_uuid varchar(200) not null, -primary key (id), -unique index uk_external_service_to_internal_model_mapping -(service_name asc, product_flavor asc, service_model_uuid asc)); - -create table if not exists `collection_resource` ( - model_uuid varchar(200) not null, - model_name varchar(200) not null, - model_invariant_uuid varchar(200) not null, - model_version varchar(20) not null, - tosca_node_type varchar(200) not null, - description varchar(200), - creation_timestamp datetime not null default current_timestamp, - primary key (`model_uuid`) -)engine=innodb default charset=latin1; - -create table if not exists `collection_resource_customization` ( - model_customization_uuid varchar(200) not null, - model_instance_name varchar(200) not null, - role varchar(200) NULL, - object_type varchar(200) not null, - function varchar(200) NULL, - collection_resource_type varchar(200) NULL, - creation_timestamp datetime not null default current_timestamp, - cr_model_uuid varchar(200) not null, - primary key (`model_customization_uuid`) -)engine=innodb default charset=latin1; - -create table if not exists `instance_group` ( - model_uuid varchar(200) not null, - model_name varchar(200) not null, - model_invariant_uuid varchar(200) not null, - model_version varchar(20) not null, - tosca_node_type varchar(200) NULL, - role varchar(200) not null, - object_type varchar(200) not null, - creation_timestamp datetime not null default current_timestamp, - cr_model_uuid varchar(200) not null, - instance_group_type varchar(200) not null, - primary key (`model_uuid`) -)engine=innodb default charset=latin1; - -create table if not exists `collection_resource_instance_group_customization` ( - `collection_resource_customization_model_uuid` varchar(200) not null, - `instance_group_model_uuid` varchar(200) not null, - `function` varchar(200) null, - `description` varchar(1200) null, - `subinterface_network_quantity` int(11) null, - `creation_timestamp` datetime not null default current_timestamp, - primary key (`collection_resource_customization_model_uuid`, `instance_group_model_uuid`), - index `fk_collection_resource_instance_group_customization__instan_idx` (`instance_group_model_uuid` asc), - constraint `fk_collection_resource_instance_group_customization__collecti1` - foreign key (`collection_resource_customization_model_uuid`) - references `collection_resource_customization` (`model_customization_uuid`) - on delete cascade - on update cascade, - constraint `fk_collection_resource_instance_group_customization__instance1` - foreign key (`instance_group_model_uuid`) - references `instance_group` (`model_uuid`) - on delete cascade - on update cascade) -engine = innodb -default character set = latin1; - -create table if not exists `vnfc_instance_group_customization` ( - `vnf_resource_customization_model_uuid` varchar(200) not null, - `instance_group_model_uuid` varchar(200) not null, - `function` varchar(200) null, - `description` varchar(1200) null, - `creation_timestamp` datetime not null default current_timestamp, - primary key (`vnf_resource_customization_model_uuid`, `instance_group_model_uuid`), - index `fk_vnfc_instance_group_customization__instance_group1_idx` (`instance_group_model_uuid` asc), - constraint `fk_vnfc_instance_group_customization__vnf_resource_customizat1` - foreign key (`vnf_resource_customization_model_uuid`) - references `vnf_resource_customization` (`model_customization_uuid`) - on delete cascade - on update cascade, - constraint `fk_vnfc_instance_group_customization__instance_group1` - foreign key (`instance_group_model_uuid`) - references `instance_group` (`model_uuid`) - on delete cascade - on update cascade) -engine = innodb -default character set = latin1; - - create table if not exists `configuration` - ( `model_uuid` varchar(200) not null, - `model_invariant_uuid` varchar(200) not null, - `model_version` varchar(20) not null, - `model_name` varchar(200) not null, - `tosca_node_type` varchar(200) not null, - `description` varchar(1200) null, - `creation_timestamp` datetime not null default current_timestamp, - primary key (`model_uuid`)) - engine = innodb auto_increment = 20654 - default character set = latin1; - - CREATE TABLE IF NOT EXISTS `service_proxy_customization` ( - `MODEL_CUSTOMIZATION_UUID` VARCHAR(200) NOT NULL, - `MODEL_INSTANCE_NAME` VARCHAR(200) NOT NULL, - `MODEL_UUID` VARCHAR(200) NOT NULL, - `MODEL_INVARIANT_UUID` VARCHAR(200) NOT NULL, - `MODEL_VERSION` VARCHAR(20) NOT NULL, - `MODEL_NAME` VARCHAR(200) NOT NULL, - `TOSCA_NODE_TYPE` VARCHAR(200) NOT NULL, - `DESCRIPTION` VARCHAR(1200) NULL, - `SOURCE_SERVICE_MODEL_UUID` VARCHAR(200) NOT NULL, - `CREATION_TIMESTAMP` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, +set foreign_key_checks=0; +DROP TABLE IF EXISTS `allotted_resource`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `allotted_resource` ( + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) NOT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `MODEL_NAME` varchar(200) NOT NULL, + `TOSCA_NODE_TYPE` varchar(200) DEFAULT NULL, + `SUBCATEGORY` varchar(200) DEFAULT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`MODEL_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `allotted_resource_customization` +-- + +DROP TABLE IF EXISTS `allotted_resource_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `allotted_resource_customization` ( + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `PROVIDING_SERVICE_MODEL_UUID` varchar(200) DEFAULT NULL, + `PROVIDING_SERVICE_MODEL_INVARIANT_UUID` varchar(200) DEFAULT NULL, + `PROVIDING_SERVICE_MODEL_NAME` varchar(200) DEFAULT NULL, + `TARGET_NETWORK_ROLE` varchar(200) DEFAULT NULL, + `NF_TYPE` varchar(200) DEFAULT NULL, + `NF_ROLE` varchar(200) DEFAULT NULL, + `NF_FUNCTION` varchar(200) DEFAULT NULL, + `NF_NAMING_CODE` varchar(200) DEFAULT NULL, + `MIN_INSTANCES` int(11) DEFAULT NULL, + `MAX_INSTANCES` int(11) DEFAULT NULL, + `RESOURCE_INPUT` varchar(20000) DEFAULT NULL, + `AR_MODEL_UUID` varchar(200) NOT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`), - INDEX `fk_service_proxy_customization__service1_idx` (`SOURCE_SERVICE_MODEL_UUID` ASC), - UNIQUE INDEX `UK_service_proxy_customization` (`MODEL_CUSTOMIZATION_UUID` ASC), - INDEX `fk_service_proxy_customization__serv_prox_to_serv` (`MODEL_CUSTOMIZATION_UUID` ASC), - CONSTRAINT `fk_service_proxy_resource_customization__service1` - FOREIGN KEY (`SOURCE_SERVICE_MODEL_UUID`) - REFERENCES `service` (`MODEL_UUID`) - ON DELETE CASCADE - ON UPDATE CASCADE) -ENGINE = InnoDB -AUTO_INCREMENT = 20654 -DEFAULT CHARACTER SET = latin1; - - -create table if not exists `configuration_customization` ( -`model_customization_uuid` varchar(200) not null, -`model_instance_name` varchar(200) not null, -`configuration_type` varchar(200) null, -`configuration_role` varchar(200) null, -`configuration_function` varchar(200) null, -`creation_timestamp` datetime not null default current_timestamp, -`configuration_model_uuid` varchar(200) not null, -`service_proxy_customization_model_customization_uuid` varchar(200) null, -`configuration_customization_model_customization_uuid` varchar(200) null, -primary key (`model_customization_uuid`), -index `fk_configuration_customization__configuration_idx` (`configuration_model_uuid` asc), -index `fk_configuration_customization__service_proxy_customization_idx` -(`service_proxy_customization_model_customization_uuid` asc), -index `fk_configuration_customization__configuration_customization_idx` -(`configuration_customization_model_customization_uuid` asc), -constraint `fk_configuration_resource_customization__configuration_resour1` -foreign key (`configuration_model_uuid`) references `configuration` (`model_uuid`) -on delete cascade on update cascade, -constraint `fk_configuration_customization__service_proxy_customization1` foreign -key (`service_proxy_customization_model_customization_uuid`) references -`service_proxy_customization` (`model_customization_uuid`) -on delete cascade on update cascade, constraint -`fk_configuration_customization__configuration_customization1` foreign -key (`configuration_customization_model_customization_uuid`) references -`configuration_customization` (`model_customization_uuid`) -on delete cascade on update cascade) -engine = innodb -auto_increment =20654 -default character set = latin1; - - -create table `service_proxy_customization_to_service` ( - `service_model_uuid` varchar(200) not null, - `resource_model_customization_uuid` varchar(200) not null, - primary key (`service_model_uuid`,`resource_model_customization_uuid`) -)engine=innodb default charset=latin1; - - -create table `configuration_customization_to_service` ( - `service_model_uuid` varchar(200) not null, - `resource_model_customization_uuid` varchar(200) not null, - primary key (`service_model_uuid`,`resource_model_customization_uuid`) -)engine=innodb default charset=latin1; - - -create table if not exists `collection_resource_customization_to_service` ( - `service_model_uuid` varchar(200) not null, - `resource_model_customization_uuid` varchar(200) not null, - primary key (`service_model_uuid`,`resource_model_customization_uuid`) -)engine=innodb default charset=latin1; - - -create table `network_resource_customization_to_service` ( - `service_model_uuid` varchar(200) not null, - `resource_model_customization_uuid` varchar(200) not null, - primary key (`service_model_uuid`,`resource_model_customization_uuid`) -)engine=innodb default charset=latin1; - -create table `vnf_resource_customization_to_service` ( - `service_model_uuid` varchar(200) not null, - `resource_model_customization_uuid` varchar(200) not null, - primary key (`service_model_uuid`,`resource_model_customization_uuid`) -)engine=innodb default charset=latin1; - -create table `allotted_resource_customization_to_service` ( - `service_model_uuid` varchar(200) not null, - `resource_model_customization_uuid` varchar(200) not null, - primary key (`service_model_uuid`,`resource_model_customization_uuid`) -)engine=innodb default charset=latin1; - - -alter table collection_resource_customization -add foreign key ( cr_model_uuid) -references collection_resource(model_uuid) -on delete cascade; - -alter table vnf_resource_customization -add column -instance_group_model_uuid varchar(200); - -alter table network_resource_customization -add column -instance_group_model_uuid varchar(200); - - -alter table network_resource_customization -add foreign key ( instance_group_model_uuid) -references instance_group(model_uuid) -on delete cascade; - -alter table collection_resource_customization_to_service -add foreign key (service_model_uuid) -references service(model_uuid) -on delete cascade; - -alter table allotted_resource_customization_to_service -add foreign key (service_model_uuid) -references service(model_uuid) -on delete cascade; - - -alter table vnf_resource_customization_to_service -add foreign key (service_model_uuid) -references service(model_uuid) -on delete cascade; - - -alter table network_resource_customization_to_service -add foreign key (service_model_uuid) -references service(model_uuid) -on delete cascade; - - -alter table network_resource_customization_to_service -add foreign key (resource_model_customization_uuid) -references network_resource_customization(model_customization_uuid) -on delete cascade; - -alter table vnf_resource_customization_to_service -add foreign key (resource_model_customization_uuid) -references vnf_resource_customization(model_customization_uuid) -on delete cascade; - -alter table allotted_resource_customization_to_service -add foreign key (resource_model_customization_uuid) -references allotted_resource_customization(model_customization_uuid) -on delete cascade; - -alter table collection_resource_customization_to_service -add foreign key (resource_model_customization_uuid) -references collection_resource_customization(model_customization_uuid) -on delete cascade; - -create table ar_recipe ( - ID INT(11) not null auto_increment, - MODEL_NAME VARCHAR(200) NOT NULL, - `ACTION` VARCHAR(200) NOT NULL, - VERSION_STR VARCHAR(200) NOT NULL, - SERVICE_TYPE VARCHAR(200), - DESCRIPTION VARCHAR(200), - ORCHESTRATION_URI VARCHAR(200) NOT NULL, - AR_PARAM_XSD VARCHAR(200), - RECIPE_TIMEOUT INT(10), - CREATION_TIMESTAMP DATETIME NOT NULL default current_timestamp, - primary key (ID), - unique key `uk_ar_recipe` (`model_name`,`action`,`version_str`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -create table if not exists `collection_network_resource_customization` ( -`model_customization_uuid` varchar(200) not null, -`model_instance_name` varchar(200) not null, -`network_technology` varchar(45) null, -`network_type` varchar(45) null, -`network_role` varchar(200) null, -`network_scope` varchar(45) null, -`creation_timestamp` datetime not null default current_timestamp, -`network_resource_model_uuid` varchar(200) not null, `instance_group_model_uuid` varchar(200) null, -`crc_model_customization_uuid` varchar(200) not null, primary key -(`model_customization_uuid`, `crc_model_customization_uuid`), -index `fk_collection_net_resource_customization__network_resource1_idx` -(`network_resource_model_uuid` asc), index -`fk_collection_net_resource_customization__instance_group1_idx` -(`instance_group_model_uuid` asc), index -`fk_col_net_res_customization__collection_res_customization_idx` -(`crc_model_customization_uuid` asc), constraint -`fk_collection_net_resource_customization__network_resource10` foreign -key (`network_resource_model_uuid`) references -`network_resource` (`model_uuid`) on delete cascade on -update cascade, constraint -`fk_collection_net_resource_customization__instance_group10` foreign key -(`instance_group_model_uuid`) references `instance_group` -(`model_uuid`) on delete cascade on update cascade, constraint -`fk_collection_network_resource_customization__collection_reso1` foreign -key (`crc_model_customization_uuid`) references -`collection_resource_customization` -(`model_customization_uuid`) on delete cascade on update cascade) engine -= innodb default character set = latin1; - -CREATE TABLE IF NOT EXISTS `northbound_request_ref_lookup` ( -`id` INT(11) NOT NULL AUTO_INCREMENT, -`REQUEST_SCOPE` VARCHAR(200) NOT NULL, -`ACTION` VARCHAR(200) NOT NULL, -`MACRO_ACTION` VARCHAR(200) NOT NULL, -`IS_ALACARTE` TINYINT(1) NOT NULL DEFAULT 0, -`IS_TOPLEVELFLOW` TINYINT(1) NOT NULL DEFAULT 0, -`MIN_API_VERSION` DOUBLE NOT NULL, -`MAX_API_VERSION` DOUBLE NULL, -PRIMARY KEY (`id`), -UNIQUE INDEX `UK_northbound_request_ref_lookup` (`MIN_API_VERSION` ASC, `REQUEST_SCOPE` ASC, `ACTION` ASC, `IS_ALACARTE` ASC)) -ENGINE = InnoDB -DEFAULT CHARACTER SET = latin1; - -CREATE TABLE IF NOT EXISTS `orchestration_flow_reference` ( -`id` INT(11) NOT NULL AUTO_INCREMENT, -`COMPOSITE_ACTION` VARCHAR(200) NOT NULL, -`SEQ_NO` INT(11) NOT NULL, -`FLOW_NAME` VARCHAR(200) NOT NULL, -`FLOW_VERSION` DOUBLE NOT NULL, -`NB_REQ_REF_LOOKUP_ID` INT(11) NOT NULL, -PRIMARY KEY (`id`), -INDEX `fk_orchestration_flow_reference__northbound_req_ref_look_idx` (`NB_REQ_REF_LOOKUP_ID` ASC), -UNIQUE INDEX `UK_orchestration_flow_reference` (`COMPOSITE_ACTION` ASC, `FLOW_NAME` ASC, `SEQ_NO` ASC, `NB_REQ_REF_LOOKUP_ID` ASC), -CONSTRAINT `fk_orchestration_flow_reference__northbound_request_ref_look1` -FOREIGN KEY (`NB_REQ_REF_LOOKUP_ID`) REFERENCES `northbound_request_ref_lookup` (`id`) -ON DELETE CASCADE ON UPDATE CASCADE) -ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; - -CREATE TABLE IF NOT EXISTS `rainy_day_handler_macro` ( -`id` INT(11) NOT NULL AUTO_INCREMENT, -`FLOW_NAME` VARCHAR(200) NOT NULL, -`SERVICE_TYPE` VARCHAR(200) NOT NULL, -`VNF_TYPE` VARCHAR(200) NOT NULL, -`ERROR_CODE` VARCHAR(200) NOT NULL, -`WORK_STEP` VARCHAR(200) NOT NULL, -`POLICY` VARCHAR(200) NOT NULL, -PRIMARY KEY (`id`)) -ENGINE = InnoDB -DEFAULT CHARACTER SET = latin1; - -create table if not exists model_recipe ( - `ID` INT(11) NOT NULL AUTO_INCREMENT, - `MODEL_ID` INT(11), - `ACTION` VARCHAR(40), - `SCHEMA_VERSION` VARCHAR(40), - `DESCRIPTION` VARCHAR(40), - `ORCHESTRATION_URI` VARCHAR(20), - `MODEL_PARAM_XSD` VARCHAR(20), - `RECIPE_TIMEOUT` INT(11), - `CREATION_TIMESTAMP` datetime not null default current_timestamp, - PRIMARY KEY (`ID`), - CONSTRAINT uk1_model_recipe UNIQUE (`MODEL_ID`, `ACTION`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -create table if not exists model ( - `ID` INT(11) NOT NULL AUTO_INCREMENT, - `MODEL_CUSTOMIZATION_ID` VARCHAR(40), - `MODEL_CUSTOMIZATION_NAME` VARCHAR(40), - `MODEL_INVARIANT_ID` VARCHAR(40), - `MODEL_NAME` VARCHAR(40), - `MODEL_TYPE` VARCHAR(20), - `MODEL_VERSION` VARCHAR(20), - `MODEL_VERSION_ID` VARCHAR(40), - `CREATION_TIMESTAMP` datetime not null default current_timestamp, - `RECIPE` INT(11), - PRIMARY KEY (`ID`), - CONSTRAINT uk1_model UNIQUE (`MODEL_TYPE`, `MODEL_VERSION_ID`), - FOREIGN KEY (`RECIPE`) REFERENCES `model_recipe` (`MODEL_ID`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -CREATE TABLE IF NOT EXISTS `identity_services` ( + KEY `fk_allotted_resource_customization__allotted_resource1_idx` (`AR_MODEL_UUID`), + CONSTRAINT `fk_allotted_resource_customization__allotted_resource1` FOREIGN KEY (`AR_MODEL_UUID`) REFERENCES `allotted_resource` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `allotted_resource_customization_to_service` +-- + +DROP TABLE IF EXISTS `allotted_resource_customization_to_service`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `allotted_resource_customization_to_service` ( + `SERVICE_MODEL_UUID` varchar(200) NOT NULL, + `RESOURCE_MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`SERVICE_MODEL_UUID`,`RESOURCE_MODEL_CUSTOMIZATION_UUID`), + KEY `RESOURCE_MODEL_CUSTOMIZATION_UUID` (`RESOURCE_MODEL_CUSTOMIZATION_UUID`), + CONSTRAINT `allotted_resource_customization_to_service_ibfk_1` FOREIGN KEY (`SERVICE_MODEL_UUID`) REFERENCES `service` (`MODEL_UUID`) ON DELETE CASCADE, + CONSTRAINT `allotted_resource_customization_to_service_ibfk_2` FOREIGN KEY (`RESOURCE_MODEL_CUSTOMIZATION_UUID`) REFERENCES `allotted_resource_customization` (`MODEL_CUSTOMIZATION_UUID`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `ar_recipe` +-- + +DROP TABLE IF EXISTS `ar_recipe`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ar_recipe` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `MODEL_NAME` varchar(200) NOT NULL, + `ACTION` varchar(200) NOT NULL, + `VERSION_STR` varchar(200) NOT NULL, + `SERVICE_TYPE` varchar(200) DEFAULT NULL, + `DESCRIPTION` varchar(200) DEFAULT NULL, + `ORCHESTRATION_URI` varchar(200) NOT NULL, + `AR_PARAM_XSD` varchar(200) DEFAULT NULL, + `RECIPE_TIMEOUT` int(11) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`ID`), + UNIQUE KEY `uk_ar_recipe` (`MODEL_NAME`,`ACTION`,`VERSION_STR`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `building_block_detail` +-- + +DROP TABLE IF EXISTS `building_block_detail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `building_block_detail` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `BUILDING_BLOCK_NAME` varchar(200) NOT NULL, + `RESOURCE_TYPE` varchar(25) NOT NULL, + `TARGET_ACTION` varchar(25) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_building_block_name` (`BUILDING_BLOCK_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=104 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `cloud_sites` +-- + +DROP TABLE IF EXISTS `cloud_sites`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `cloud_sites` ( `ID` varchar(50) NOT NULL, - `IDENTITY_URL` varchar(200) DEFAULT NULL, - `MSO_ID` varchar(255) DEFAULT NULL, - `MSO_PASS` varchar(255) DEFAULT NULL, - `PROJECT_DOMAIN_NAME` varchar(255) DEFAULT NULL, - `USER_DOMAIN_NAME` varchar(255) DEFAULT NULL, - `ADMIN_TENANT` varchar(50) DEFAULT NULL, - `MEMBER_ROLE` varchar(50) DEFAULT NULL, - `TENANT_METADATA` tinyint(1) DEFAULT 0, - `IDENTITY_SERVER_TYPE` varchar(50) DEFAULT NULL, - `IDENTITY_AUTHENTICATION_TYPE` varchar(50) DEFAULT NULL, + `REGION_ID` varchar(11) DEFAULT NULL, + `IDENTITY_SERVICE_ID` varchar(50) DEFAULT NULL, + `CLOUD_VERSION` varchar(20) DEFAULT NULL, + `CLLI` varchar(11) DEFAULT NULL, + `CLOUDIFY_ID` varchar(50) DEFAULT NULL, + `PLATFORM` varchar(50) DEFAULT NULL, + `ORCHESTRATOR` varchar(50) DEFAULT NULL, `LAST_UPDATED_BY` varchar(120) DEFAULT NULL, - `CREATION_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(), - `UPDATE_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(), - PRIMARY KEY (`ID`) -) ; - + `CREATION_TIMESTAMP` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `UPDATE_TIMESTAMP` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`ID`), + KEY `FK_cloud_sites_identity_services` (`IDENTITY_SERVICE_ID`), + CONSTRAINT `FK_cloud_sites_identity_services` FOREIGN KEY (`IDENTITY_SERVICE_ID`) REFERENCES `identity_services` (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `cloudify_managers` +-- -CREATE TABLE IF NOT EXISTS `cloudify_managers` ( +DROP TABLE IF EXISTS `cloudify_managers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `cloudify_managers` ( `ID` varchar(50) NOT NULL, `CLOUDIFY_URL` varchar(200) DEFAULT NULL, `USERNAME` varchar(255) DEFAULT NULL, `PASSWORD` varchar(255) DEFAULT NULL, `VERSION` varchar(20) DEFAULT NULL, `LAST_UPDATED_BY` varchar(120) DEFAULT NULL, - `CREATION_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(), - `UPDATE_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(), + `CREATION_TIMESTAMP` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `UPDATE_TIMESTAMP` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`ID`) -) ; - +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `collection_network_resource_customization` +-- + +DROP TABLE IF EXISTS `collection_network_resource_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `collection_network_resource_customization` ( + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `NETWORK_TECHNOLOGY` varchar(45) DEFAULT NULL, + `NETWORK_TYPE` varchar(45) DEFAULT NULL, + `NETWORK_ROLE` varchar(200) DEFAULT NULL, + `NETWORK_SCOPE` varchar(45) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `NETWORK_RESOURCE_MODEL_UUID` varchar(200) NOT NULL, + `INSTANCE_GROUP_MODEL_UUID` varchar(200) DEFAULT NULL, + `CRC_MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`,`CRC_MODEL_CUSTOMIZATION_UUID`), + KEY `fk_collection_net_resource_customization__network_resource1_idx` (`NETWORK_RESOURCE_MODEL_UUID`), + KEY `fk_collection_net_resource_customization__instance_group1_idx` (`INSTANCE_GROUP_MODEL_UUID`), + KEY `fk_col_net_res_customization__collection_res_customization_idx` (`CRC_MODEL_CUSTOMIZATION_UUID`), + CONSTRAINT `fk_collection_net_resource_customization__instance_group10` FOREIGN KEY (`INSTANCE_GROUP_MODEL_UUID`) REFERENCES `instance_group` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_collection_net_resource_customization__network_resource10` FOREIGN KEY (`NETWORK_RESOURCE_MODEL_UUID`) REFERENCES `network_resource` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_collection_network_resource_customization__collection_reso1` FOREIGN KEY (`CRC_MODEL_CUSTOMIZATION_UUID`) REFERENCES `collection_resource_customization` (`MODEL_CUSTOMIZATION_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `collection_resource` +-- + +DROP TABLE IF EXISTS `collection_resource`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `collection_resource` ( + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_NAME` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) NOT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `TOSCA_NODE_TYPE` varchar(200) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`MODEL_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `collection_resource_customization` +-- + +DROP TABLE IF EXISTS `collection_resource_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `collection_resource_customization` ( + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `role` varchar(200) DEFAULT NULL, + `object_type` varchar(200) NOT NULL, + `function` varchar(200) DEFAULT NULL, + `collection_resource_type` varchar(200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `CR_MODEL_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`), + KEY `CR_MODEL_UUID` (`CR_MODEL_UUID`), + CONSTRAINT `collection_resource_customization_ibfk_1` FOREIGN KEY (`CR_MODEL_UUID`) REFERENCES `collection_resource` (`MODEL_UUID`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `collection_resource_customization_to_service` +-- + +DROP TABLE IF EXISTS `collection_resource_customization_to_service`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `collection_resource_customization_to_service` ( + `SERVICE_MODEL_UUID` varchar(200) NOT NULL, + `RESOURCE_MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`SERVICE_MODEL_UUID`,`RESOURCE_MODEL_CUSTOMIZATION_UUID`), + KEY `RESOURCE_MODEL_CUSTOMIZATION_UUID` (`RESOURCE_MODEL_CUSTOMIZATION_UUID`), + CONSTRAINT `collection_resource_customization_to_service_ibfk_1` FOREIGN KEY (`SERVICE_MODEL_UUID`) REFERENCES `service` (`MODEL_UUID`) ON DELETE CASCADE, + CONSTRAINT `collection_resource_customization_to_service_ibfk_2` FOREIGN KEY (`RESOURCE_MODEL_CUSTOMIZATION_UUID`) REFERENCES `collection_resource_customization` (`MODEL_CUSTOMIZATION_UUID`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `collection_resource_instance_group_customization` +-- + +DROP TABLE IF EXISTS `collection_resource_instance_group_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `collection_resource_instance_group_customization` ( + `COLLECTION_RESOURCE_CUSTOMIZATION_MODEL_UUID` varchar(200) NOT NULL, + `INSTANCE_GROUP_MODEL_UUID` varchar(200) NOT NULL, + `FUNCTION` varchar(200) DEFAULT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `SUBINTERFACE_NETWORK_QUANTITY` int(11) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`COLLECTION_RESOURCE_CUSTOMIZATION_MODEL_UUID`,`INSTANCE_GROUP_MODEL_UUID`), + KEY `fk_collection_resource_instance_group_customization__instan_idx` (`INSTANCE_GROUP_MODEL_UUID`), + CONSTRAINT `fk_collection_resource_instance_group_customization__collecti1` FOREIGN KEY (`COLLECTION_RESOURCE_CUSTOMIZATION_MODEL_UUID`) REFERENCES `collection_resource_customization` (`MODEL_CUSTOMIZATION_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_collection_resource_instance_group_customization__instance1` FOREIGN KEY (`INSTANCE_GROUP_MODEL_UUID`) REFERENCES `instance_group` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `configuration` +-- + +DROP TABLE IF EXISTS `configuration`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `configuration` ( + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) NOT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `MODEL_NAME` varchar(200) NOT NULL, + `TOSCA_NODE_TYPE` varchar(200) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`MODEL_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `configuration_customization` +-- + +DROP TABLE IF EXISTS `configuration_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `configuration_customization` ( + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `CONFIGURATION_TYPE` varchar(200) DEFAULT NULL, + `CONFIGURATION_ROLE` varchar(200) DEFAULT NULL, + `CONFIGURATION_FUNCTION` varchar(200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `CONFIGURATION_MODEL_UUID` varchar(200) NOT NULL, + `SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL, + `CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL, + PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`), + KEY `fk_configuration_customization__configuration_idx` (`CONFIGURATION_MODEL_UUID`), + KEY `fk_configuration_customization__service_proxy_customization_idx` (`SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`), + KEY `fk_configuration_customization__configuration_customization_idx` (`CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`), + CONSTRAINT `fk_configuration_customization__configuration_customization1` FOREIGN KEY (`CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`) REFERENCES `configuration_customization` (`MODEL_CUSTOMIZATION_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_configuration_resource_customization__configuration_resour1` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`) REFERENCES `configuration` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `configuration_customization_to_service` +-- + +DROP TABLE IF EXISTS `configuration_customization_to_service`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `configuration_customization_to_service` ( + `SERVICE_MODEL_UUID` varchar(200) NOT NULL, + `RESOURCE_MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`SERVICE_MODEL_UUID`,`RESOURCE_MODEL_CUSTOMIZATION_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `controller_selection_reference` +-- + +DROP TABLE IF EXISTS `controller_selection_reference`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `controller_selection_reference` ( + `VNF_TYPE` varchar(50) NOT NULL, + `CONTROLLER_NAME` varchar(100) NOT NULL, + `ACTION_CATEGORY` varchar(15) NOT NULL, + PRIMARY KEY (`VNF_TYPE`,`CONTROLLER_NAME`,`ACTION_CATEGORY`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `cvnfc_configuration_customization` +-- + +DROP TABLE IF EXISTS `cvnfc_configuration_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `cvnfc_configuration_customization` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `CONFIGURATION_TYPE` varchar(200) DEFAULT NULL, + `CONFIGURATION_ROLE` varchar(200) DEFAULT NULL, + `CONFIGURATION_FUNCTION` varchar(200) DEFAULT NULL, + `POLICY_NAME` varchar(200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `CONFIGURATION_MODEL_UUID` varchar(200) NOT NULL, + `CVNFC_CUSTOMIZATION_ID` int(11) DEFAULT NULL, + PRIMARY KEY (`ID`), + KEY `fk_vnf_vfmodule_cvnfc_config_cust__configuration_idx` (`CONFIGURATION_MODEL_UUID`), + CONSTRAINT `fk_vnf_vfmod_cvnfc_config_cust__configuration_resource` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`) REFERENCES `configuration` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=20655 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `cvnfc_customization` +-- + +DROP TABLE IF EXISTS `cvnfc_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `cvnfc_customization` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) NOT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `MODEL_NAME` varchar(200) NOT NULL, + `TOSCA_NODE_TYPE` varchar(200) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `NFC_FUNCTION` varchar(200) DEFAULT NULL, + `NFC_NAMING_CODE` varchar(200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `VNFC_CUST_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL, + `VF_MODULE_CUSTOMIZATION_ID` int(13) DEFAULT NULL, + PRIMARY KEY (`ID`), + KEY `fk_cvnfc_customization__vnfc_customization1_idx` (`VNFC_CUST_MODEL_CUSTOMIZATION_UUID`), + KEY `fk_cvnfc_customization__vnf_vfmod_cvnfc_config_cust1_idx` (`MODEL_CUSTOMIZATION_UUID`), + KEY `fk_cvnfc_customization_to_vf_module_resource_customization` (`VF_MODULE_CUSTOMIZATION_ID`), + CONSTRAINT `fk_cvnfc_customization__vnfc_customization1` FOREIGN KEY (`VNFC_CUST_MODEL_CUSTOMIZATION_UUID`) REFERENCES `vnfc_customization` (`MODEL_CUSTOMIZATION_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_cvnfc_customization_to_vf_module_resource_customization` FOREIGN KEY (`VF_MODULE_CUSTOMIZATION_ID`) REFERENCES `vf_module_customization` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=20655 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `external_service_to_internal_model_mapping` +-- + +DROP TABLE IF EXISTS `external_service_to_internal_model_mapping`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `external_service_to_internal_model_mapping` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `SERVICE_NAME` varchar(200) NOT NULL, + `PRODUCT_FLAVOR` varchar(200) DEFAULT NULL, + `SUBSCRIPTION_SERVICE_TYPE` varchar(200) NOT NULL, + `SERVICE_MODEL_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_external_service_to_internal_model_mapping` (`SERVICE_NAME`,`PRODUCT_FLAVOR`,`SERVICE_MODEL_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `flyway_schema_history` +-- + +DROP TABLE IF EXISTS `flyway_schema_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `flyway_schema_history` ( + `installed_rank` int(11) NOT NULL, + `version` varchar(50) DEFAULT NULL, + `description` varchar(200) NOT NULL, + `type` varchar(20) NOT NULL, + `script` varchar(1000) NOT NULL, + `checksum` int(11) DEFAULT NULL, + `installed_by` varchar(100) NOT NULL, + `installed_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `execution_time` int(11) NOT NULL, + `success` tinyint(1) NOT NULL, + PRIMARY KEY (`installed_rank`), + KEY `flyway_schema_history_s_idx` (`success`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `heat_environment` +-- + +DROP TABLE IF EXISTS `heat_environment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `heat_environment` ( + `ARTIFACT_UUID` varchar(200) NOT NULL, + `NAME` varchar(100) NOT NULL, + `VERSION` varchar(20) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `BODY` longtext NOT NULL, + `ARTIFACT_CHECKSUM` varchar(200) NOT NULL DEFAULT 'MANUAL RECORD', + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`ARTIFACT_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `heat_files` +-- + +DROP TABLE IF EXISTS `heat_files`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `heat_files` ( + `ARTIFACT_UUID` varchar(200) NOT NULL, + `NAME` varchar(200) NOT NULL, + `VERSION` varchar(20) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `BODY` longtext NOT NULL, + `ARTIFACT_CHECKSUM` varchar(200) NOT NULL DEFAULT 'MANUAL RECORD', + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`ARTIFACT_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `heat_nested_template` +-- + +DROP TABLE IF EXISTS `heat_nested_template`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `heat_nested_template` ( + `PARENT_HEAT_TEMPLATE_UUID` varchar(200) NOT NULL, + `CHILD_HEAT_TEMPLATE_UUID` varchar(200) NOT NULL, + `PROVIDER_RESOURCE_FILE` varchar(100) DEFAULT NULL, + PRIMARY KEY (`PARENT_HEAT_TEMPLATE_UUID`,`CHILD_HEAT_TEMPLATE_UUID`), + KEY `fk_heat_nested_template__heat_template2_idx` (`CHILD_HEAT_TEMPLATE_UUID`), + CONSTRAINT `fk_heat_nested_template__child_heat_temp_uuid__heat_template1` FOREIGN KEY (`CHILD_HEAT_TEMPLATE_UUID`) REFERENCES `heat_template` (`ARTIFACT_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_heat_nested_template__parent_heat_temp_uuid__heat_template1` FOREIGN KEY (`PARENT_HEAT_TEMPLATE_UUID`) REFERENCES `heat_template` (`ARTIFACT_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `heat_template` +-- + +DROP TABLE IF EXISTS `heat_template`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `heat_template` ( + `ARTIFACT_UUID` varchar(200) NOT NULL, + `NAME` varchar(200) NOT NULL, + `VERSION` varchar(20) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `BODY` longtext NOT NULL, + `TIMEOUT_MINUTES` int(11) DEFAULT NULL, + `ARTIFACT_CHECKSUM` varchar(200) NOT NULL DEFAULT 'MANUAL RECORD', + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`ARTIFACT_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `heat_template_params` +-- + +DROP TABLE IF EXISTS `heat_template_params`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `heat_template_params` ( + `HEAT_TEMPLATE_ARTIFACT_UUID` varchar(200) NOT NULL, + `PARAM_NAME` varchar(100) NOT NULL, + `IS_REQUIRED` bit(1) NOT NULL, + `PARAM_TYPE` varchar(20) DEFAULT NULL, + `PARAM_ALIAS` varchar(45) DEFAULT NULL, + PRIMARY KEY (`HEAT_TEMPLATE_ARTIFACT_UUID`,`PARAM_NAME`), + CONSTRAINT `fk_heat_template_params__heat_template1` FOREIGN KEY (`HEAT_TEMPLATE_ARTIFACT_UUID`) REFERENCES `heat_template` (`ARTIFACT_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `identity_services` +-- -CREATE TABLE IF NOT EXISTS `cloud_sites` ( +DROP TABLE IF EXISTS `identity_services`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `identity_services` ( `ID` varchar(50) NOT NULL, - `REGION_ID` varchar(11) DEFAULT NULL, - `IDENTITY_SERVICE_ID` varchar(50) DEFAULT NULL, - `CLOUD_VERSION` varchar(20) DEFAULT NULL, - `CLLI` varchar(11) DEFAULT NULL, - `CLOUDIFY_ID` varchar(50) DEFAULT NULL, - `PLATFORM` varchar(50) DEFAULT NULL, - `ORCHESTRATOR` varchar(50) DEFAULT NULL, + `IDENTITY_URL` varchar(200) DEFAULT NULL, + `MSO_ID` varchar(255) DEFAULT NULL, + `MSO_PASS` varchar(255) DEFAULT NULL, + `ADMIN_TENANT` varchar(50) DEFAULT NULL, + `MEMBER_ROLE` varchar(50) DEFAULT NULL, + `TENANT_METADATA` tinyint(1) DEFAULT '0', + `IDENTITY_SERVER_TYPE` varchar(50) DEFAULT NULL, + `IDENTITY_AUTHENTICATION_TYPE` varchar(50) DEFAULT NULL, `LAST_UPDATED_BY` varchar(120) DEFAULT NULL, - `CREATION_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(), - `UPDATE_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(), + `CREATION_TIMESTAMP` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `UPDATE_TIMESTAMP` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `PROJECT_DOMAIN_NAME` varchar(255) DEFAULT NULL, + `USER_DOMAIN_NAME` varchar(255) DEFAULT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `instance_group` +-- + +DROP TABLE IF EXISTS `instance_group`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `instance_group` ( + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_NAME` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) NOT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `TOSCA_NODE_TYPE` varchar(200) DEFAULT NULL, + `ROLE` varchar(200) NOT NULL, + `OBJECT_TYPE` varchar(200) NOT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `CR_MODEL_UUID` varchar(200) DEFAULT NULL, + `INSTANCE_GROUP_TYPE` varchar(200) NOT NULL, + PRIMARY KEY (`MODEL_UUID`), + KEY `CR_MODEL_UUID` (`CR_MODEL_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `model` +-- + +DROP TABLE IF EXISTS `model`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `model` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `MODEL_CUSTOMIZATION_ID` varchar(40) DEFAULT NULL, + `MODEL_CUSTOMIZATION_NAME` varchar(40) DEFAULT NULL, + `MODEL_INVARIANT_ID` varchar(40) DEFAULT NULL, + `MODEL_NAME` varchar(40) DEFAULT NULL, + `MODEL_TYPE` varchar(20) DEFAULT NULL, + `MODEL_VERSION` varchar(20) DEFAULT NULL, + `MODEL_VERSION_ID` varchar(40) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `RECIPE` int(11) DEFAULT NULL, PRIMARY KEY (`ID`), - KEY `FK_cloud_sites_identity_services` (`IDENTITY_SERVICE_ID`), - CONSTRAINT `FK_cloud_sites_identity_services` FOREIGN KEY (`IDENTITY_SERVICE_ID`) REFERENCES `identity_services` (`ID`) -) ;
\ No newline at end of file + UNIQUE KEY `uk1_model` (`MODEL_TYPE`,`MODEL_VERSION_ID`), + KEY `RECIPE` (`RECIPE`), + CONSTRAINT `model_ibfk_1` FOREIGN KEY (`RECIPE`) REFERENCES `model_recipe` (`MODEL_ID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `model_recipe` +-- + +DROP TABLE IF EXISTS `model_recipe`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `model_recipe` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `MODEL_ID` int(11) DEFAULT NULL, + `ACTION` varchar(40) DEFAULT NULL, + `SCHEMA_VERSION` varchar(40) DEFAULT NULL, + `DESCRIPTION` varchar(40) DEFAULT NULL, + `ORCHESTRATION_URI` varchar(20) DEFAULT NULL, + `MODEL_PARAM_XSD` varchar(20) DEFAULT NULL, + `RECIPE_TIMEOUT` int(11) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`ID`), + UNIQUE KEY `uk1_model_recipe` (`MODEL_ID`,`ACTION`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `network_recipe` +-- + +DROP TABLE IF EXISTS `network_recipe`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `network_recipe` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `MODEL_NAME` varchar(20) NOT NULL, + `ACTION` varchar(50) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `ORCHESTRATION_URI` varchar(256) NOT NULL, + `NETWORK_PARAM_XSD` varchar(2048) DEFAULT NULL, + `RECIPE_TIMEOUT` int(11) DEFAULT NULL, + `SERVICE_TYPE` varchar(45) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `VERSION_STR` varchar(20) NOT NULL, + `RESOURCE_CATEGORY` varchar(200) DEFAULT NULL, + `RESOURCE_SUB_CATEGORY` varchar(200) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_rl4f296i0p8lyokxveaiwkayi` (`MODEL_NAME`,`ACTION`,`VERSION_STR`) +) ENGINE=InnoDB AUTO_INCREMENT=181 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `network_resource` +-- + +DROP TABLE IF EXISTS `network_resource`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `network_resource` ( + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_NAME` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) DEFAULT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `HEAT_TEMPLATE_ARTIFACT_UUID` varchar(200) NULL, + `NEUTRON_NETWORK_TYPE` varchar(20) DEFAULT NULL, + `MODEL_VERSION` varchar(20) DEFAULT NULL, + `TOSCA_NODE_TYPE` varchar(200) DEFAULT NULL, + `AIC_VERSION_MIN` varchar(20) NULL, + `AIC_VERSION_MAX` varchar(20) DEFAULT NULL, + `ORCHESTRATION_MODE` varchar(20) DEFAULT 'HEAT', + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `RESOURCE_CATEGORY` varchar(200) DEFAULT NULL, + `RESOURCE_SUB_CATEGORY` varchar(200) DEFAULT NULL, + PRIMARY KEY (`MODEL_UUID`), + KEY `fk_network_resource__temp_network_heat_template_lookup1_idx` (`MODEL_NAME`), + KEY `fk_network_resource__heat_template1_idx` (`HEAT_TEMPLATE_ARTIFACT_UUID`), + CONSTRAINT `fk_network_resource__heat_template1` FOREIGN KEY (`HEAT_TEMPLATE_ARTIFACT_UUID`) REFERENCES `heat_template` (`ARTIFACT_UUID`) ON DELETE NO ACTION ON UPDATE CASCADE, + CONSTRAINT `fk_network_resource__temp_network_heat_template_lookup__mod_nm1` FOREIGN KEY (`MODEL_NAME`) REFERENCES `temp_network_heat_template_lookup` (`NETWORK_RESOURCE_MODEL_NAME`) ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `network_resource_customization` +-- + +DROP TABLE IF EXISTS `network_resource_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `network_resource_customization` ( + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `NETWORK_TECHNOLOGY` varchar(45) DEFAULT NULL, + `NETWORK_TYPE` varchar(45) DEFAULT NULL, + `NETWORK_ROLE` varchar(200) DEFAULT NULL, + `NETWORK_SCOPE` varchar(45) DEFAULT NULL, + `RESOURCE_INPUT` varchar(20000) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `NETWORK_RESOURCE_MODEL_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`), + KEY `fk_network_resource_customization__network_resource1_idx` (`NETWORK_RESOURCE_MODEL_UUID`), + CONSTRAINT `fk_network_resource_customization__network_resource1` FOREIGN KEY (`NETWORK_RESOURCE_MODEL_UUID`) REFERENCES `network_resource` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `network_resource_customization_to_service` +-- + +DROP TABLE IF EXISTS `network_resource_customization_to_service`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `network_resource_customization_to_service` ( + `SERVICE_MODEL_UUID` varchar(200) NOT NULL, + `RESOURCE_MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`SERVICE_MODEL_UUID`,`RESOURCE_MODEL_CUSTOMIZATION_UUID`), + KEY `RESOURCE_MODEL_CUSTOMIZATION_UUID` (`RESOURCE_MODEL_CUSTOMIZATION_UUID`), + CONSTRAINT `network_resource_customization_to_service_ibfk_1` FOREIGN KEY (`SERVICE_MODEL_UUID`) REFERENCES `service` (`MODEL_UUID`) ON DELETE CASCADE, + CONSTRAINT `network_resource_customization_to_service_ibfk_2` FOREIGN KEY (`RESOURCE_MODEL_CUSTOMIZATION_UUID`) REFERENCES `network_resource_customization` (`MODEL_CUSTOMIZATION_UUID`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `northbound_request_ref_lookup` +-- + +DROP TABLE IF EXISTS `northbound_request_ref_lookup`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `northbound_request_ref_lookup` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `REQUEST_SCOPE` varchar(200) NOT NULL, + `MACRO_ACTION` varchar(200) NOT NULL, + `ACTION` varchar(200) NOT NULL, + `IS_ALACARTE` tinyint(1) NOT NULL DEFAULT '0', + `MIN_API_VERSION` double NOT NULL, + `MAX_API_VERSION` double DEFAULT NULL, + `IS_TOPLEVELFLOW` tinyint(1) DEFAULT NULL, + `CLOUD_OWNER` varchar(200) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_northbound_request_ref_lookup` (`MIN_API_VERSION`,`REQUEST_SCOPE`,`ACTION`,`IS_ALACARTE`,`MACRO_ACTION`,`CLOUD_OWNER`) +) ENGINE=InnoDB AUTO_INCREMENT=86 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `orchestration_flow_reference` +-- + +DROP TABLE IF EXISTS `orchestration_flow_reference`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `orchestration_flow_reference` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `COMPOSITE_ACTION` varchar(200) NOT NULL, + `SEQ_NO` int(11) NOT NULL, + `FLOW_NAME` varchar(200) NOT NULL, + `FLOW_VERSION` double NOT NULL, + `NB_REQ_REF_LOOKUP_ID` int(11) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_orchestration_flow_reference` (`COMPOSITE_ACTION`,`FLOW_NAME`,`SEQ_NO`,`NB_REQ_REF_LOOKUP_ID`), + KEY `fk_orchestration_flow_reference__northbound_req_ref_look_idx` (`NB_REQ_REF_LOOKUP_ID`), + KEY `fk_orchestration_flow_reference__building_block_detail` (`FLOW_NAME`), + CONSTRAINT `fk_orchestration_flow_reference__northbound_request_ref_look1` FOREIGN KEY (`NB_REQ_REF_LOOKUP_ID`) REFERENCES `northbound_request_ref_lookup` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=398 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `orchestration_status_state_transition_directive` +-- + +DROP TABLE IF EXISTS `orchestration_status_state_transition_directive`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `orchestration_status_state_transition_directive` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `RESOURCE_TYPE` varchar(25) NOT NULL, + `ORCHESTRATION_STATUS` varchar(25) NOT NULL, + `TARGET_ACTION` varchar(25) NOT NULL, + `FLOW_DIRECTIVE` varchar(25) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_orchestration_status_state_transition_directive` (`RESOURCE_TYPE`,`ORCHESTRATION_STATUS`,`TARGET_ACTION`) +) ENGINE=InnoDB AUTO_INCREMENT=686 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rainy_day_handler_macro` +-- + +DROP TABLE IF EXISTS `rainy_day_handler_macro`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `rainy_day_handler_macro` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `FLOW_NAME` varchar(200) NOT NULL, + `SERVICE_TYPE` varchar(200) NOT NULL, + `VNF_TYPE` varchar(200) NOT NULL, + `ERROR_CODE` varchar(200) NOT NULL, + `WORK_STEP` varchar(200) NOT NULL, + `POLICY` varchar(200) NOT NULL, + `SECONDARY_POLICY` varchar(200) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=93 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `service` +-- + +DROP TABLE IF EXISTS `service`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `service` ( + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_NAME` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) NOT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `TOSCA_CSAR_ARTIFACT_UUID` varchar(200) DEFAULT NULL, + `SERVICE_TYPE` varchar(200) DEFAULT NULL, + `SERVICE_ROLE` varchar(200) DEFAULT NULL, + `ENVIRONMENT_CONTEXT` varchar(200) DEFAULT NULL, + `WORKLOAD_CONTEXT` varchar(200) DEFAULT NULL, + `SERVICE_CATEGORY` varchar(200) DEFAULT NULL, + `RESOURCE_ORDER` varchar(200) default NULL, + PRIMARY KEY (`MODEL_UUID`), + KEY `fk_service__tosca_csar1_idx` (`TOSCA_CSAR_ARTIFACT_UUID`), + CONSTRAINT `fk_service__tosca_csar1` FOREIGN KEY (`TOSCA_CSAR_ARTIFACT_UUID`) REFERENCES `tosca_csar` (`ARTIFACT_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `service_proxy_customization` +-- + +DROP TABLE IF EXISTS `service_proxy_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `service_proxy_customization` ( + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) NOT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `MODEL_NAME` varchar(200) NOT NULL, + `TOSCA_NODE_TYPE` varchar(200) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `SOURCE_SERVICE_MODEL_UUID` varchar(200) NOT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`), + KEY `fk_service_proxy_customization__service1_idx` (`SOURCE_SERVICE_MODEL_UUID`), + CONSTRAINT `fk_service_proxy_resource_customization__service1` FOREIGN KEY (`SOURCE_SERVICE_MODEL_UUID`) REFERENCES `service` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `service_proxy_customization_to_service` +-- + +DROP TABLE IF EXISTS `service_proxy_customization_to_service`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `service_proxy_customization_to_service` ( + `SERVICE_MODEL_UUID` varchar(200) NOT NULL, + `RESOURCE_MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`SERVICE_MODEL_UUID`,`RESOURCE_MODEL_CUSTOMIZATION_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `service_recipe` +-- + +DROP TABLE IF EXISTS `service_recipe`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `service_recipe` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `ACTION` varchar(50) NOT NULL, + `VERSION_STR` varchar(20) DEFAULT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `ORCHESTRATION_URI` varchar(256) NOT NULL, + `SERVICE_PARAM_XSD` varchar(2048) DEFAULT NULL, + `RECIPE_TIMEOUT` int(11) DEFAULT NULL, + `SERVICE_TIMEOUT_INTERIM` int(11) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `SERVICE_MODEL_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_7fav5dkux2v8g9d2i5ymudlgc` (`SERVICE_MODEL_UUID`,`ACTION`), + KEY `fk_service_recipe__service1_idx` (`SERVICE_MODEL_UUID`), + CONSTRAINT `fk_service_recipe__service1` FOREIGN KEY (`SERVICE_MODEL_UUID`) REFERENCES `service` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=93 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `temp_network_heat_template_lookup` +-- + +DROP TABLE IF EXISTS `temp_network_heat_template_lookup`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `temp_network_heat_template_lookup` ( + `NETWORK_RESOURCE_MODEL_NAME` varchar(200) NOT NULL, + `HEAT_TEMPLATE_ARTIFACT_UUID` varchar(200) NULL, + `AIC_VERSION_MIN` varchar(20) NULL, + `AIC_VERSION_MAX` varchar(20) DEFAULT NULL, + PRIMARY KEY (`NETWORK_RESOURCE_MODEL_NAME`), + KEY `fk_temp_network_heat_template_lookup__heat_template1_idx` (`HEAT_TEMPLATE_ARTIFACT_UUID`), + CONSTRAINT `fk_temp_network_heat_template_lookup__heat_template1` FOREIGN KEY (`HEAT_TEMPLATE_ARTIFACT_UUID`) REFERENCES `heat_template` (`ARTIFACT_UUID`) ON DELETE NO ACTION ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tosca_csar` +-- + +DROP TABLE IF EXISTS `tosca_csar`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tosca_csar` ( + `ARTIFACT_UUID` varchar(200) NOT NULL, + `NAME` varchar(200) NOT NULL, + `VERSION` varchar(20) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `ARTIFACT_CHECKSUM` varchar(200) NOT NULL, + `URL` varchar(200) NOT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`ARTIFACT_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vf_module` +-- + +DROP TABLE IF EXISTS `vf_module`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vf_module` ( + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) DEFAULT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `MODEL_NAME` varchar(200) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `IS_BASE` tinyint(1) NOT NULL, + `HEAT_TEMPLATE_ARTIFACT_UUID` varchar(200) DEFAULT NULL, + `VOL_HEAT_TEMPLATE_ARTIFACT_UUID` varchar(200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `VNF_RESOURCE_MODEL_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`MODEL_UUID`,`VNF_RESOURCE_MODEL_UUID`), + KEY `fk_vf_module__vnf_resource1_idx` (`VNF_RESOURCE_MODEL_UUID`), + KEY `fk_vf_module__heat_template_art_uuid__heat_template1_idx` (`HEAT_TEMPLATE_ARTIFACT_UUID`), + KEY `fk_vf_module__vol_heat_template_art_uuid__heat_template2_idx` (`VOL_HEAT_TEMPLATE_ARTIFACT_UUID`), + CONSTRAINT `fk_vf_module__heat_template_art_uuid__heat_template1` FOREIGN KEY (`HEAT_TEMPLATE_ARTIFACT_UUID`) REFERENCES `heat_template` (`ARTIFACT_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_vf_module__vnf_resource1` FOREIGN KEY (`VNF_RESOURCE_MODEL_UUID`) REFERENCES `vnf_resource` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_vf_module__vol_heat_template_art_uuid__heat_template2` FOREIGN KEY (`VOL_HEAT_TEMPLATE_ARTIFACT_UUID`) REFERENCES `heat_template` (`ARTIFACT_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vf_module_customization` +-- + +DROP TABLE IF EXISTS `vf_module_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vf_module_customization` ( + `ID` int(13) NOT NULL AUTO_INCREMENT, + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `LABEL` varchar(200) DEFAULT NULL, + `INITIAL_COUNT` int(11) DEFAULT '0', + `MIN_INSTANCES` int(11) DEFAULT '0', + `MAX_INSTANCES` int(11) DEFAULT NULL, + `AVAILABILITY_ZONE_COUNT` int(11) DEFAULT NULL, + `HEAT_ENVIRONMENT_ARTIFACT_UUID` varchar(200) DEFAULT NULL, + `VOL_ENVIRONMENT_ARTIFACT_UUID` varchar(200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `VF_MODULE_MODEL_UUID` varchar(200) NOT NULL, + `VNF_RESOURCE_CUSTOMIZATION_ID` int(13) DEFAULT NULL, + PRIMARY KEY (`ID`), + KEY `fk_vf_module_customization__vf_module1_idx` (`VF_MODULE_MODEL_UUID`), + KEY `fk_vf_module_customization__heat_env__heat_environment1_idx` (`HEAT_ENVIRONMENT_ARTIFACT_UUID`), + KEY `fk_vf_module_customization__vol_env__heat_environment2_idx` (`VOL_ENVIRONMENT_ARTIFACT_UUID`), + KEY `fk_vf_module_customization_to_vnf_resource_customization` (`VNF_RESOURCE_CUSTOMIZATION_ID`), + KEY `vf_module_customization_model_cust_uuid_idx` (`MODEL_CUSTOMIZATION_UUID`), + CONSTRAINT `fk_vf_module_customization__heat_env__heat_environment1` FOREIGN KEY (`HEAT_ENVIRONMENT_ARTIFACT_UUID`) REFERENCES `heat_environment` (`ARTIFACT_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_vf_module_customization__vf_module1` FOREIGN KEY (`VF_MODULE_MODEL_UUID`) REFERENCES `vf_module` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_vf_module_customization__vol_env__heat_environment2` FOREIGN KEY (`VOL_ENVIRONMENT_ARTIFACT_UUID`) REFERENCES `heat_environment` (`ARTIFACT_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_vf_module_customization_to_vnf_resource_customization` FOREIGN KEY (`VNF_RESOURCE_CUSTOMIZATION_ID`) REFERENCES `vnf_resource_customization` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vf_module_to_heat_files` +-- + +DROP TABLE IF EXISTS `vf_module_to_heat_files`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vf_module_to_heat_files` ( + `VF_MODULE_MODEL_UUID` varchar(200) NOT NULL, + `HEAT_FILES_ARTIFACT_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`VF_MODULE_MODEL_UUID`,`HEAT_FILES_ARTIFACT_UUID`), + KEY `fk_vf_module_to_heat_files__heat_files__artifact_uuid1_idx` (`HEAT_FILES_ARTIFACT_UUID`), + CONSTRAINT `fk_vf_module_to_heat_files__heat_files__artifact_uuid1` FOREIGN KEY (`HEAT_FILES_ARTIFACT_UUID`) REFERENCES `heat_files` (`ARTIFACT_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_vf_module_to_heat_files__vf_module__model_uuid1` FOREIGN KEY (`VF_MODULE_MODEL_UUID`) REFERENCES `vf_module` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='il fait ce qu''il dit'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vnf_components` +-- + +DROP TABLE IF EXISTS `vnf_components`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vnf_components` ( + `VNF_ID` int(11) NOT NULL, + `COMPONENT_TYPE` varchar(20) NOT NULL, + `HEAT_TEMPLATE_ID` int(11) DEFAULT NULL, + `HEAT_ENVIRONMENT_ID` int(11) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`VNF_ID`,`COMPONENT_TYPE`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vnf_components_recipe` +-- + +DROP TABLE IF EXISTS `vnf_components_recipe`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vnf_components_recipe` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `VNF_TYPE` varchar(200) DEFAULT NULL, + `VNF_COMPONENT_TYPE` varchar(45) NOT NULL, + `ACTION` varchar(50) NOT NULL, + `SERVICE_TYPE` varchar(45) DEFAULT NULL, + `VERSION` varchar(20) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `ORCHESTRATION_URI` varchar(256) NOT NULL, + `VNF_COMPONENT_PARAM_XSD` varchar(2048) DEFAULT NULL, + `RECIPE_TIMEOUT` int(11) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime DEFAULT CURRENT_TIMESTAMP, + `VF_MODULE_MODEL_UUID` varchar(200) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_4dpdwddaaclhc11wxsb7h59ma` (`VF_MODULE_MODEL_UUID`,`VNF_COMPONENT_TYPE`,`ACTION`,`VERSION`) +) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vnf_recipe` +-- + +DROP TABLE IF EXISTS `vnf_recipe`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vnf_recipe` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `NF_ROLE` varchar(200) DEFAULT NULL, + `ACTION` varchar(50) NOT NULL, + `SERVICE_TYPE` varchar(45) DEFAULT NULL, + `VERSION_STR` varchar(20) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `ORCHESTRATION_URI` varchar(256) NOT NULL, + `VNF_PARAM_XSD` varchar(2048) DEFAULT NULL, + `RECIPE_TIMEOUT` int(11) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime DEFAULT CURRENT_TIMESTAMP, + `VF_MODULE_ID` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_f3tvqau498vrifq3cr8qnigkr` (`VF_MODULE_ID`,`ACTION`,`VERSION_STR`) +) ENGINE=InnoDB AUTO_INCREMENT=10015 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vnf_resource` +-- + +DROP TABLE IF EXISTS `vnf_resource`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vnf_resource` ( + `ORCHESTRATION_MODE` varchar(20) NOT NULL DEFAULT 'HEAT', + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `MODEL_UUID` varchar(200) NOT NULL, + `AIC_VERSION_MIN` varchar(20) DEFAULT NULL, + `AIC_VERSION_MAX` varchar(20) DEFAULT NULL, + `MODEL_INVARIANT_UUID` varchar(200) DEFAULT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `MODEL_NAME` varchar(200) DEFAULT NULL, + `TOSCA_NODE_TYPE` varchar(200) DEFAULT NULL, + `HEAT_TEMPLATE_ARTIFACT_UUID` varchar(200) DEFAULT NULL, + `RESOURCE_CATEGORY` varchar(200) DEFAULT NULL, + `RESOURCE_SUB_CATEGORY` varchar(200) DEFAULT NULL, + PRIMARY KEY (`MODEL_UUID`), + KEY `fk_vnf_resource__heat_template1` (`HEAT_TEMPLATE_ARTIFACT_UUID`), + CONSTRAINT `fk_vnf_resource__heat_template1` FOREIGN KEY (`HEAT_TEMPLATE_ARTIFACT_UUID`) REFERENCES `heat_template` (`ARTIFACT_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vnf_resource_customization` +-- + +DROP TABLE IF EXISTS `vnf_resource_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vnf_resource_customization` ( + `ID` int(13) NOT NULL AUTO_INCREMENT, + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `MIN_INSTANCES` int(11) DEFAULT NULL, + `MAX_INSTANCES` int(11) DEFAULT NULL, + `AVAILABILITY_ZONE_MAX_COUNT` int(11) DEFAULT NULL, + `NF_TYPE` varchar(200) DEFAULT NULL, + `NF_ROLE` varchar(200) DEFAULT NULL, + `NF_FUNCTION` varchar(200) DEFAULT NULL, + `NF_NAMING_CODE` varchar(200) DEFAULT NULL, + `MULTI_STAGE_DESIGN` varchar(20) DEFAULT NULL, + `RESOURCE_INPUT` varchar(20000) DEFAULT NULL, + `CDS_BLUEPRINT_NAME` varchar(200) default null, + `CDS_BLUEPRINT_VERSION` varchar(20) default null, + `SKIP_POST_INSTANTIATION_CONFIGURATION` boolean default true, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `VNF_RESOURCE_MODEL_UUID` varchar(200) NOT NULL, + `SERVICE_MODEL_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`ID`), + UNIQUE KEY `UK_vnf_resource_customization` (`MODEL_CUSTOMIZATION_UUID`,`SERVICE_MODEL_UUID`), + KEY `fk_vnf_resource_customization__vnf_resource1_idx` (`VNF_RESOURCE_MODEL_UUID`), + KEY `fk_vnf_resource_customization_to_service` (`SERVICE_MODEL_UUID`), + KEY `vnf_resource_customization_mod_cust_uuid_idx` (`MODEL_CUSTOMIZATION_UUID`), + CONSTRAINT `fk_vnf_resource_customization__vnf_resource1` FOREIGN KEY (`VNF_RESOURCE_MODEL_UUID`) REFERENCES `vnf_resource` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_vnf_resource_customization_to_service` FOREIGN KEY (`SERVICE_MODEL_UUID`) REFERENCES `service` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vnfc_customization` +-- + +DROP TABLE IF EXISTS `vnfc_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vnfc_customization` ( + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) NOT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `MODEL_NAME` varchar(200) NOT NULL, + `TOSCA_NODE_TYPE` varchar(200) NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vnfc_instance_group_customization` +-- + +DROP TABLE IF EXISTS `vnfc_instance_group_customization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vnfc_instance_group_customization` ( + `ID` int(13) NOT NULL AUTO_INCREMENT PRIMARY KEY, + `VNF_RESOURCE_CUSTOMIZATION_ID` int(13) NOT NULL, + `INSTANCE_GROUP_MODEL_UUID` varchar(200) NOT NULL, + `FUNCTION` varchar(200) DEFAULT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + KEY `fk_vnfc_instance_group_customization__instance_group1_idx` (`INSTANCE_GROUP_MODEL_UUID`), + CONSTRAINT `fk_vnfc_instance_group_customization__instance_group1` FOREIGN KEY (`INSTANCE_GROUP_MODEL_UUID`) REFERENCES `instance_group` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_vnfc_instance_group_customization_vnf_customization` FOREIGN KEY (`VNF_RESOURCE_CUSTOMIZATION_ID`) REFERENCES `vnf_resource_customization` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +set foreign_key_checks=1; + +CREATE TABLE IF NOT EXISTS `pnf_resource` ( + `ORCHESTRATION_MODE` varchar(20) NOT NULL DEFAULT 'HEAT', + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `MODEL_UUID` varchar(200) NOT NULL, + `MODEL_INVARIANT_UUID` varchar(200) DEFAULT NULL, + `MODEL_VERSION` varchar(20) NOT NULL, + `MODEL_NAME` varchar(200) DEFAULT NULL, + `TOSCA_NODE_TYPE` varchar(200) DEFAULT NULL, + `RESOURCE_CATEGORY` varchar(200) DEFAULT NULL, + `RESOURCE_SUB_CATEGORY` varchar(200) DEFAULT NULL, + PRIMARY KEY (`MODEL_UUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE IF NOT EXISTS `pnf_resource_customization` ( + `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + `MODEL_INSTANCE_NAME` varchar(200) NOT NULL, + `NF_TYPE` varchar(200) DEFAULT NULL, + `NF_ROLE` varchar(200) DEFAULT NULL, + `NF_FUNCTION` varchar(200) DEFAULT NULL, + `NF_NAMING_CODE` varchar(200) DEFAULT NULL, + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `PNF_RESOURCE_MODEL_UUID` varchar(200) NOT NULL, + `MULTI_STAGE_DESIGN` varchar(20) DEFAULT NULL, + `RESOURCE_INPUT` varchar(2000) DEFAULT NULL, + `CDS_BLUEPRINT_NAME` varchar(200) DEFAULT NULL, + `CDS_BLUEPRINT_VERSION` varchar(20) DEFAULT NULL, + `SKIP_POST_INSTANTIATION_CONFIGURATION` boolean default true, + PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`), + KEY `fk_pnf_resource_customization__pnf_resource1_idx` (`PNF_RESOURCE_MODEL_UUID`), + CONSTRAINT `fk_pnf_resource_customization__pnf_resource1` FOREIGN KEY (`PNF_RESOURCE_MODEL_UUID`) REFERENCES `pnf_resource` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE IF NOT EXISTS `pnf_resource_customization_to_service` ( + `SERVICE_MODEL_UUID` varchar(200) NOT NULL, + `RESOURCE_MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL, + PRIMARY KEY (`SERVICE_MODEL_UUID`,`RESOURCE_MODEL_CUSTOMIZATION_UUID`) +)ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE IF NOT EXISTS `workflow` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `ARTIFACT_UUID` varchar(200) NOT NULL, + `ARTIFACT_NAME` varchar(200) NOT NULL, + `NAME` varchar(200) NOT NULL, + `OPERATION_NAME` varchar(200) DEFAULT NULL, + `VERSION` double NOT NULL, + `DESCRIPTION` varchar(1200) DEFAULT NULL, + `BODY` longtext DEFAULT NULL, + `RESOURCE_TARGET` varchar(200) NOT NULL, + `SOURCE` varchar(200) NOT NULL, + `TIMEOUT_MINUTES` int(11) DEFAULT NULL, + `ARTIFACT_CHECKSUM` varchar(200) DEFAULT 'MANUAL RECORD', + `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT current_timestamp(), + PRIMARY KEY (`ID`), + UNIQUE KEY `UK_workflow` (`ARTIFACT_UUID`,`NAME`,`VERSION`,`SOURCE`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE IF NOT EXISTS `vnf_resource_to_workflow` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `VNF_RESOURCE_MODEL_UUID` varchar(200) NOT NULL, + `WORKFLOW_ID` int(11) NOT NULL, + PRIMARY KEY (`ID`), + UNIQUE KEY `UK_vnf_resource_to_workflow` (`VNF_RESOURCE_MODEL_UUID`,`WORKFLOW_ID`), + KEY `fk_vnf_resource_to_workflow__workflow1_idx` (`WORKFLOW_ID`), + KEY `fk_vnf_resource_to_workflow__vnf_res_mod_uuid_idx` (`VNF_RESOURCE_MODEL_UUID`), + CONSTRAINT `fk_vnf_resource_to_workflow__vnf_resource1` FOREIGN KEY (`VNF_RESOURCE_MODEL_UUID`) REFERENCES `vnf_resource` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_vnf_resource_to_workflow__workflow1` FOREIGN KEY (`WORKFLOW_ID`) REFERENCES `workflow` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + diff --git a/adapters/mso-openstack-adapters/src/test/resources/stack-resources.json b/adapters/mso-openstack-adapters/src/test/resources/stack-resources.json new file mode 100644 index 0000000000..6b63895a33 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/stack-resources.json @@ -0,0 +1,441 @@ +{ + "resources": [ + { + "resource_name": "ge_000", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule/d1431cdc-9b29-44fc-98d0-9b3dc1ac246d/resources/ge_000", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule/d1431cdc-9b29-44fc-98d0-9b3dc1ac246d", + "rel": "stack" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-ge_000-t66dxpwq6nb5/deee54a3-08ac-477b-9c09-c798edb40be1", + "rel": "nested" + } + ], + "logical_resource_id": "ge_000", + "resource_status_reason": "state changed", + "updated_time": "2018-04-09T21:09:52Z", + "required_by": [ + "vfw_instance" + ], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "deee54a3-08ac-477b-9c09-c798edb40be1", + "resource_type": "port.yaml" + }, + { + "resource_name": "vfw_instance", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule/d1431cdc-9b29-44fc-98d0-9b3dc1ac246d/resources/vfw_instance", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule/d1431cdc-9b29-44fc-98d0-9b3dc1ac246d", + "rel": "stack" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b", + "rel": "nested" + } + ], + "logical_resource_id": "vfw_instance", + "resource_status_reason": "state changed", + "updated_time": "2018-04-09T21:09:52Z", + "required_by": [], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "54f93b9e-5138-4f3f-bfe0-ee06e1f0877b", + "resource_type": "vfw.yaml" + }, + { + "resource_name": "port", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-ge_000-t66dxpwq6nb5/deee54a3-08ac-477b-9c09-c798edb40be1/resources/port", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-ge_000-t66dxpwq6nb5/deee54a3-08ac-477b-9c09-c798edb40be1", + "rel": "stack" + } + ], + "logical_resource_id": "port", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2018-04-09T21:09:52Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "212a203a-9764-4f42-84ea-731536a8f13a", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "pfe0", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b/resources/pfe0", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b", + "rel": "stack" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-pfe0-kvqmgn7jmiti/1325e04b-e836-4a13-bb2e-f34923d97ad7", + "rel": "nested" + } + ], + "logical_resource_id": "pfe0", + "resource_status_reason": "state changed", + "updated_time": "2018-04-09T21:09:54Z", + "required_by": [ + "re0" + ], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "1325e04b-e836-4a13-bb2e-f34923d97ad7", + "resource_type": "fpc.yaml" + }, + { + "resource_name": "fpc_internal_port", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b/resources/fpc_internal_port", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b", + "rel": "stack" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-fpc_internal_port-gbnyc4w7mb5b/4e920f39-9784-417e-9331-d75e2e37cc51", + "rel": "nested" + } + ], + "logical_resource_id": "fpc_internal_port", + "resource_status_reason": "state changed", + "updated_time": "2018-04-09T21:09:54Z", + "required_by": [ + "pfe0" + ], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "4e920f39-9784-417e-9331-d75e2e37cc51", + "resource_type": "re_pfe_port.yaml" + }, + { + "resource_name": "re-fpc-affinity-grp", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b/resources/re-fpc-affinity-grp", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b", + "rel": "stack" + } + ], + "logical_resource_id": "re-fpc-affinity-grp", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2018-04-09T21:09:54Z", + "required_by": [ + "pfe0", + "re0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "3aa37238-f8ff-4c96-b56a-8903bae28a60", + "resource_type": "OS::Nova::ServerGroup" + }, + { + "resource_name": "re0", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b/resources/re0", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b", + "rel": "stack" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re0-73oifso3xntc/0915e27e-428d-4d2c-a67b-abbce18081b2", + "rel": "nested" + } + ], + "logical_resource_id": "re0", + "resource_status_reason": "state changed", + "updated_time": "2018-04-09T21:09:54Z", + "required_by": [], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "0915e27e-428d-4d2c-a67b-abbce18081b2", + "resource_type": "re.yaml" + }, + { + "resource_name": "re_external_port", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b/resources/re_external_port", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b", + "rel": "stack" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_external_port-3okiee3zocr7/f58c65e3-a72e-4b2d-a295-cb40324d6b4c", + "rel": "nested" + } + ], + "logical_resource_id": "re_external_port", + "resource_status_reason": "state changed", + "updated_time": "2018-04-09T21:09:54Z", + "required_by": [ + "re0" + ], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "f58c65e3-a72e-4b2d-a295-cb40324d6b4c", + "resource_type": "port.yaml" + }, + { + "resource_name": "fpc_external_port", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b/resources/fpc_external_port", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b", + "rel": "stack" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-fpc_external_port-5vumcqp7hkbn/979e47c9-c15a-428e-ad73-af922029ee37", + "rel": "nested" + } + ], + "logical_resource_id": "fpc_external_port", + "resource_status_reason": "state changed", + "updated_time": "2018-04-09T21:09:54Z", + "required_by": [ + "pfe0", + "re0" + ], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "979e47c9-c15a-428e-ad73-af922029ee37", + "resource_type": "port.yaml" + }, + { + "resource_name": "re_internal_port", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b/resources/re_internal_port", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b", + "rel": "stack" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_internal_port-u4txbvemndci/0aebfd9d-ad97-43b1-a67b-b2b5340738d2", + "rel": "nested" + } + ], + "logical_resource_id": "re_internal_port", + "resource_status_reason": "state changed", + "updated_time": "2018-04-09T21:09:54Z", + "required_by": [ + "re0" + ], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "0aebfd9d-ad97-43b1-a67b-b2b5340738d2", + "resource_type": "re_pfe_port.yaml" + }, + { + "resource_name": "re_pfe_network", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b/resources/re_pfe_network", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam/54f93b9e-5138-4f3f-bfe0-ee06e1f0877b", + "rel": "stack" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_pfe_network-2wmjvgzrhtvs/290fc2fd-cd1d-47d0-90eb-2ece7c009b29", + "rel": "nested" + } + ], + "logical_resource_id": "re_pfe_network", + "resource_status_reason": "state changed", + "updated_time": "2018-04-09T21:09:54Z", + "required_by": [ + "fpc_internal_port", + "re_internal_port" + ], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "290fc2fd-cd1d-47d0-90eb-2ece7c009b29", + "resource_type": "bridge_int.yaml" + }, + { + "resource_name": "fpc", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-pfe0-kvqmgn7jmiti/1325e04b-e836-4a13-bb2e-f34923d97ad7/resources/fpc", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-pfe0-kvqmgn7jmiti/1325e04b-e836-4a13-bb2e-f34923d97ad7", + "rel": "stack" + } + ], + "logical_resource_id": "fpc", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2018-04-09T21:09:58Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "43c2159b-2c04-46ac-bda5-594110cae2d3", + "resource_type": "OS::Nova::Server" + }, + { + "resource_name": "port", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-fpc_internal_port-gbnyc4w7mb5b/4e920f39-9784-417e-9331-d75e2e37cc51/resources/port", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-fpc_internal_port-gbnyc4w7mb5b/4e920f39-9784-417e-9331-d75e2e37cc51", + "rel": "stack" + } + ], + "logical_resource_id": "port", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2018-04-09T21:09:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "387e3904-8948-43d1-8635-b6c2042b54da", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "re", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re0-73oifso3xntc/0915e27e-428d-4d2c-a67b-abbce18081b2/resources/re", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re0-73oifso3xntc/0915e27e-428d-4d2c-a67b-abbce18081b2", + "rel": "stack" + } + ], + "logical_resource_id": "re", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2018-04-09T21:10:36Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "7cff109a-b2b7-4933-97b4-ec44a8365568", + "resource_type": "OS::Nova::Server" + }, + { + "resource_name": "port", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_external_port-3okiee3zocr7/f58c65e3-a72e-4b2d-a295-cb40324d6b4c/resources/port", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_external_port-3okiee3zocr7/f58c65e3-a72e-4b2d-a295-cb40324d6b4c", + "rel": "stack" + } + ], + "logical_resource_id": "port", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2018-04-09T21:09:55Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "70a09dfd-f1c5-4bc8-bd8f-dc539b8d662a", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "port", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-fpc_external_port-5vumcqp7hkbn/979e47c9-c15a-428e-ad73-af922029ee37/resources/port", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-fpc_external_port-5vumcqp7hkbn/979e47c9-c15a-428e-ad73-af922029ee37", + "rel": "stack" + } + ], + "logical_resource_id": "port", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2018-04-09T21:09:55Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "12f88b4d-c8a4-4fbd-bcb4-7e36af02430b", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "port", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_internal_port-u4txbvemndci/0aebfd9d-ad97-43b1-a67b-b2b5340738d2/resources/port", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_internal_port-u4txbvemndci/0aebfd9d-ad97-43b1-a67b-b2b5340738d2", + "rel": "stack" + } + ], + "logical_resource_id": "port", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2018-04-09T21:09:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "c54b9f45-b413-4937-bbe4-3c8a5689cfc9", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "bridge_network_subnet", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_pfe_network-2wmjvgzrhtvs/290fc2fd-cd1d-47d0-90eb-2ece7c009b29/resources/bridge_network_subnet", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_pfe_network-2wmjvgzrhtvs/290fc2fd-cd1d-47d0-90eb-2ece7c009b29", + "rel": "stack" + } + ], + "logical_resource_id": "bridge_network_subnet", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2018-04-09T21:09:55Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "5ffd8c02-6913-4b67-adba-74e78c2bbe40", + "resource_type": "OS::Neutron::Subnet" + }, + { + "resource_name": "bridge_network", + "links": [ + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_pfe_network-2wmjvgzrhtvs/290fc2fd-cd1d-47d0-90eb-2ece7c009b29/resources/bridge_network", + "rel": "self" + }, + { + "href": "http://10.10.10.10:8004/v1/7320ec4a5b9d4589ba7c4412ccfd290f/stacks/ClosedLoop_vFW_VfModule-vfw_instance-tw3i5ile2nam-re_pfe_network-2wmjvgzrhtvs/290fc2fd-cd1d-47d0-90eb-2ece7c009b29", + "rel": "stack" + } + ], + "logical_resource_id": "bridge_network", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2018-04-09T21:09:55Z", + "required_by": [ + "bridge_network_subnet" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "5ad95036-8daf-4379-a59c-865f35976cd4", + "resource_type": "OS::Neutron::Net" + } + ] +} |