aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/forwarding-plugins/src/main
diff options
context:
space:
mode:
authorramverma <ram.krishna.verma@est.tech>2019-08-16 10:13:09 +0000
committerramverma <ram.krishna.verma@est.tech>2019-08-16 10:13:09 +0000
commitebd5d6f5d1973298a62b581f2e604528993d56d2 (patch)
tree8805d6f1e331bf07c9f2ee21229a852e52bda3b1 /plugins/forwarding-plugins/src/main
parent2326847dac621c3718023be059cc1648f69bd31e (diff)
Add LifecycleApiForwarder in policy/distribution
* Adding implementation of LifecycleApiForwarder in policy/distribution for forwarding policy to new components (PAP & API). * Adding related test cases and json files for testing. * Created a rest simulator to use for testing the API calls. * Fixed review comments Issue-ID: POLICY-1890 Change-Id: I6682e0366206d3f4ac77f60b676f40a0fd1aad02 Signed-off-by: ramverma <ram.krishna.verma@est.tech>
Diffstat (limited to 'plugins/forwarding-plugins/src/main')
-rw-r--r--plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiForwarderParameters.java (renamed from plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiPolicyForwarderParameterGroup.java)23
-rw-r--r--plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiParameters.java49
-rw-r--r--plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiPolicyForwarder.java124
3 files changed, 178 insertions, 18 deletions
diff --git a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiPolicyForwarderParameterGroup.java b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiForwarderParameters.java
index 8ba7bdbe..ab1a737a 100644
--- a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiPolicyForwarderParameterGroup.java
+++ b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiForwarderParameters.java
@@ -22,34 +22,27 @@ package org.onap.policy.distribution.forwarding.lifecycle.api;
import lombok.Getter;
-import org.onap.policy.common.parameters.annotations.Min;
import org.onap.policy.common.parameters.annotations.NotBlank;
import org.onap.policy.common.parameters.annotations.NotNull;
import org.onap.policy.distribution.main.parameters.PolicyForwarderConfigurationParameterGroup;
/**
- * Holds the parameters for the{@link LifecycleApiPolicyForwarder}.
+ * Holds the parameters for the {@link LifecycleApiPolicyForwarder}.
+ *
+ * @author Ram Krishna Verma (ram.krishna.verma@est.tech)
*/
@Getter
@NotNull
@NotBlank
-public class LifecycleApiPolicyForwarderParameterGroup extends PolicyForwarderConfigurationParameterGroup {
+public class LifecycleApiForwarderParameters extends PolicyForwarderConfigurationParameterGroup {
public static final String POLICY_FORWARDER_PLUGIN_CLASS = LifecycleApiPolicyForwarder.class.getName();
- private String policyApiHostName;
- @Min(value = 1)
- private int policyApiPort;
- private String policyApiUserName;
- private String policyApiPassword;
- private String policyPapHostName;
- @Min(value = 1)
- private int policyPapPort;
- private String policyPapUserName;
- private String policyPapPassword;
+ private LifecycleApiParameters apiParameters;
+ private LifecycleApiParameters papParameters;
private boolean isHttps;
private boolean deployPolicies = true;
- public LifecycleApiPolicyForwarderParameterGroup() {
- super(LifecycleApiPolicyForwarderParameterGroup.class.getSimpleName());
+ public LifecycleApiForwarderParameters() {
+ super(LifecycleApiForwarderParameters.class.getSimpleName());
}
}
diff --git a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiParameters.java b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiParameters.java
new file mode 100644
index 00000000..ed9ed9e0
--- /dev/null
+++ b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiParameters.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.distribution.forwarding.lifecycle.api;
+
+import lombok.Getter;
+
+import org.onap.policy.common.parameters.annotations.Min;
+import org.onap.policy.common.parameters.annotations.NotBlank;
+import org.onap.policy.common.parameters.annotations.NotNull;
+import org.onap.policy.distribution.main.parameters.PolicyForwarderConfigurationParameterGroup;
+
+/**
+ * Holds the parameters for the {@link LifecycleApiPolicyForwarder}.
+ *
+ * @author Ram Krishna Verma (ram.krishna.verma@est.tech)
+ */
+@Getter
+@NotNull
+@NotBlank
+public class LifecycleApiParameters extends PolicyForwarderConfigurationParameterGroup {
+
+ private String hostName;
+ @Min(value = 1)
+ private int port;
+ private String userName;
+ private String password;
+
+ public LifecycleApiParameters() {
+ super(LifecycleApiParameters.class.getSimpleName());
+ }
+}
diff --git a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiPolicyForwarder.java b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiPolicyForwarder.java
index 4b8acb10..5cd9966d 100644
--- a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiPolicyForwarder.java
+++ b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiPolicyForwarder.java
@@ -20,12 +20,35 @@
package org.onap.policy.distribution.forwarding.lifecycle.api;
+import com.google.common.collect.ImmutableMap;
+
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
+import org.onap.policy.common.endpoints.http.client.HttpClient;
+import org.onap.policy.common.endpoints.http.client.HttpClientConfigException;
+import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
+import org.onap.policy.common.gson.GsonMessageBodyHandler;
import org.onap.policy.common.parameters.ParameterService;
import org.onap.policy.distribution.forwarding.PolicyForwarder;
import org.onap.policy.distribution.forwarding.PolicyForwardingException;
+import org.onap.policy.models.pap.concepts.PdpDeployPolicies;
import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifierOptVersion;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* This class provides an implementation of {@link PolicyForwarder} interface for forwarding the given policies & policy
@@ -35,7 +58,10 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity;
*/
public class LifecycleApiPolicyForwarder implements PolicyForwarder {
- private LifecycleApiPolicyForwarderParameterGroup forwarderParameters;
+ private static final String DEPLOY_POLICY_URI = "/policy/pap/v1/pdps/policies";
+ private static final String CREATE_POLICY_TYPE_URI = "/policy/api/v1/policytypes/";
+ private static final Logger LOGGER = LoggerFactory.getLogger(LifecycleApiPolicyForwarder.class);
+ private LifecycleApiForwarderParameters forwarderParameters;
/**
* {@inheritDoc}.
@@ -49,9 +75,101 @@ public class LifecycleApiPolicyForwarder implements PolicyForwarder {
* {@inheritDoc}.
*/
@Override
- public void forward(final Collection<ToscaEntity> policies) throws PolicyForwardingException {
- // TODO: add implementation
+ public void forward(final Collection<ToscaEntity> entities) throws PolicyForwardingException {
+ final List<ToscaEntity> failedEntities = new ArrayList<>();
+ for (final ToscaEntity entity : entities) {
+ forwardSingleEntity(failedEntities, entity);
+ }
+ if (!failedEntities.isEmpty()) {
+ throw new PolicyForwardingException(
+ "Failed forwarding the following entities: " + Arrays.toString(failedEntities.toArray()));
+ }
+ }
+
+ private void forwardSingleEntity(final List<ToscaEntity> failedEntities, final ToscaEntity entity) {
+ Response policyCreated = null;
+ try {
+ if (entity instanceof ToscaServiceTemplate) {
+ final ToscaServiceTemplate toscaServiceTemplate = (ToscaServiceTemplate) entity;
+ if (null != toscaServiceTemplate.getPolicyTypes() && !toscaServiceTemplate.getPolicyTypes().isEmpty()) {
+ createPolicyType(toscaServiceTemplate);
+ }
+ if (null != toscaServiceTemplate.getToscaTopologyTemplate()
+ && null != toscaServiceTemplate.getToscaTopologyTemplate().getPolicies()
+ && !toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().isEmpty()
+ && !toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).entrySet().isEmpty()) {
+ policyCreated = createPolicy(toscaServiceTemplate);
+ }
+ if (forwarderParameters.isDeployPolicies() && policyCreated != null) {
+ deployPolicy(policyCreated.readEntity(ToscaServiceTemplate.class));
+ }
+ } else {
+ throw new PolicyForwardingException("The entity is not of type ToscaServiceTemplate - " + entity);
+ }
+ } catch (final Exception exp) {
+ LOGGER.error(exp.getMessage(), exp);
+ failedEntities.add(entity);
+ }
}
+ private Response createPolicyType(final ToscaServiceTemplate toscaServiceTemplate)
+ throws PolicyForwardingException {
+ return invokeHttpClient(Entity.entity(toscaServiceTemplate, MediaType.APPLICATION_JSON), CREATE_POLICY_TYPE_URI,
+ true);
+ }
+
+ private Response createPolicy(final ToscaServiceTemplate toscaServiceTemplate) throws PolicyForwardingException {
+ final ToscaPolicy policy = toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).entrySet()
+ .iterator().next().getValue();
+ return invokeHttpClient(Entity.entity(toscaServiceTemplate, MediaType.APPLICATION_JSON),
+ CREATE_POLICY_TYPE_URI + policy.getType() + "/versions/" + policy.getTypeVersion() + "/policies", true);
+ }
+
+ private Response deployPolicy(final ToscaServiceTemplate toscaServiceTemplate) throws PolicyForwardingException {
+ final PdpDeployPolicies pdpPolicies = new PdpDeployPolicies();
+ final List<ToscaPolicyIdentifierOptVersion> policyIdentifierList = new ArrayList<>();
+ for (final Map<String, ToscaPolicy> policyMap : toscaServiceTemplate.getToscaTopologyTemplate().getPolicies()) {
+ final String policyId = policyMap.entrySet().iterator().next().getValue().getMetadata().get("policy-id");
+ final String policyVersion =
+ policyMap.entrySet().iterator().next().getValue().getMetadata().get("policy-version");
+ final ToscaPolicyIdentifierOptVersion toscaPolicyIdentifier =
+ new ToscaPolicyIdentifierOptVersion(policyId, policyVersion);
+ policyIdentifierList.add(toscaPolicyIdentifier);
+ }
+ pdpPolicies.setPolicies(policyIdentifierList);
+ return invokeHttpClient(Entity.entity(pdpPolicies, MediaType.APPLICATION_JSON), DEPLOY_POLICY_URI, false);
+ }
+
+ private Response invokeHttpClient(final Entity<?> entity, final String path, final boolean wantApi)
+ throws PolicyForwardingException {
+ Response response = null;
+ try {
+ response = getHttpClient(wantApi).post(path, entity, ImmutableMap.of(HttpHeaders.ACCEPT,
+ MediaType.APPLICATION_JSON, HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON));
+ if (response.getStatus() != Status.OK.getStatusCode()) {
+ LOGGER.error(
+ "Invocation of path {} failed for entity {}. Response status: {}, Response status info: {}",
+ path, entity, response.getStatus(), response.getStatusInfo());
+ throw new PolicyForwardingException("Failed creating the entity - " + entity);
+ }
+ } catch (final HttpClientConfigException exception) {
+ LOGGER.error(
+ "Invocation of path " + path + " failed for entity " + entity + " due to error opening Http client",
+ exception);
+ throw new PolicyForwardingException("Failed creating the entity - " + entity, exception);
+ }
+ return response;
+ }
+
+ private HttpClient getHttpClient(final boolean wantApi) throws HttpClientConfigException {
+ final boolean https = forwarderParameters.isHttps();
+ final LifecycleApiParameters parameters =
+ (wantApi ? forwarderParameters.getApiParameters() : forwarderParameters.getPapParameters());
+ final BusTopicParams params = BusTopicParams.builder().clientName("Policy Distribution").useHttps(https)
+ .hostname(parameters.getHostName()).port(parameters.getPort()).userName(parameters.getUserName())
+ .password(parameters.getPassword()).serializationProvider(GsonMessageBodyHandler.class.getName())
+ .build();
+ return HttpClientFactoryInstance.getClientFactory().build(params);
+ }
}