From e5e24d606ecdaa1fca547969d56c890764f26e45 Mon Sep 17 00:00:00 2001 From: ramverma Date: Thu, 11 Apr 2019 22:09:38 +0000 Subject: [PATCH] Adding code for db config & initial group creation 1) Adding code for initial PdpGroup/Subgroup creation. 2) Adding db configuration 3) Updated code as per change in policy/models Change-Id: If37870925001b333e0537e364eecb266c351cf5a Issue-ID: POLICY-1635 Signed-off-by: ramverma --- .../org/onap/policy/pap/main/startstop/Main.java | 13 +++- .../policy/pap/main/startstop/PapActivator.java | 4 +- .../pap/main/startstop/PapDatabaseInitializer.java | 83 ++++++++++++++++++++++ main/src/main/resources/META-INF/persistence.xml | 4 -- main/src/main/resources/PapDb.json | 64 +++++++++++++++++ .../policy/pap/main/parameters/CommonTestData.java | 1 + main/src/test/resources/META-INF/persistence.xml | 39 ---------- .../resources/parameters/MinimumParameters.json | 1 + .../resources/parameters/PapConfigParameters.json | 3 +- .../PapConfigParameters_InvalidName.json | 1 + .../src/main/resources/etc/defaultConfig.json | 3 +- 11 files changed, 167 insertions(+), 49 deletions(-) create mode 100644 main/src/main/java/org/onap/policy/pap/main/startstop/PapDatabaseInitializer.java create mode 100644 main/src/main/resources/PapDb.json diff --git a/main/src/main/java/org/onap/policy/pap/main/startstop/Main.java b/main/src/main/java/org/onap/policy/pap/main/startstop/Main.java index d58be4ec..f1598165 100644 --- a/main/src/main/java/org/onap/policy/pap/main/startstop/Main.java +++ b/main/src/main/java/org/onap/policy/pap/main/startstop/Main.java @@ -24,6 +24,7 @@ package org.onap.policy.pap.main.startstop; import java.io.FileInputStream; import java.util.Arrays; import java.util.Properties; + import org.onap.policy.common.utils.services.Registry; import org.onap.policy.pap.main.PapConstants; import org.onap.policy.pap.main.PolicyPapException; @@ -78,9 +79,9 @@ public class Main { } // Read the properties - Properties props = new Properties(); + final Properties props = new Properties(); try { - String propFile = arguments.getFullPropertyFilePath(); + final String propFile = arguments.getFullPropertyFilePath(); try (FileInputStream stream = new FileInputStream(propFile)) { props.load(stream); } @@ -89,6 +90,14 @@ public class Main { return; } + // Initialize database + try { + new PapDatabaseInitializer().initializePapDatabase(parameterGroup.getDatabaseProviderParameters()); + } catch (final PolicyPapException exp) { + LOGGER.error("start of policy pap service failed, used parameters are {}", Arrays.toString(args), exp); + return; + } + // Now, create the activator for the policy pap service activator = new PapActivator(parameterGroup, props); Registry.register(PapConstants.REG_PAP_ACTIVATOR, activator); diff --git a/main/src/main/java/org/onap/policy/pap/main/startstop/PapActivator.java b/main/src/main/java/org/onap/policy/pap/main/startstop/PapActivator.java index a60232fd..f34d13ad 100644 --- a/main/src/main/java/org/onap/policy/pap/main/startstop/PapActivator.java +++ b/main/src/main/java/org/onap/policy/pap/main/startstop/PapActivator.java @@ -48,8 +48,8 @@ import org.onap.policy.pap.main.rest.PapRestServer; import org.onap.policy.pap.main.rest.PapStatisticsManager; /** - * This class wraps a distributor so that it can be activated as a complete service together with all its pap and - * forwarding handlers. + * This class activates Policy Administration (PAP) as a complete service together with all its controllers, listeners & + * handlers. * * @author Ram Krishna Verma (ram.krishna.verma@est.tech) */ diff --git a/main/src/main/java/org/onap/policy/pap/main/startstop/PapDatabaseInitializer.java b/main/src/main/java/org/onap/policy/pap/main/startstop/PapDatabaseInitializer.java new file mode 100644 index 00000000..5d72b6d7 --- /dev/null +++ b/main/src/main/java/org/onap/policy/pap/main/startstop/PapDatabaseInitializer.java @@ -0,0 +1,83 @@ +/*- + * ============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.pap.main.startstop; + +import java.util.List; + +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardCoder; +import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.models.base.PfModelException; +import org.onap.policy.models.pdp.concepts.PdpGroup; +import org.onap.policy.models.pdp.concepts.PdpGroups; +import org.onap.policy.models.provider.PolicyModelsProvider; +import org.onap.policy.models.provider.PolicyModelsProviderFactory; +import org.onap.policy.models.provider.PolicyModelsProviderParameters; +import org.onap.policy.pap.main.PolicyPapException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This class creates initial PdpGroup/SubGroup in the database. + * + * @author Ram Krishna Verma (ram.krishna.verma@est.tech) + */ +public class PapDatabaseInitializer { + + private static final Logger LOGGER = LoggerFactory.getLogger(PapDatabaseInitializer.class); + + private StandardCoder standardCoder; + private PolicyModelsProviderFactory factory; + + /** + * Constructs the object. + */ + public PapDatabaseInitializer() { + factory = new PolicyModelsProviderFactory(); + standardCoder = new StandardCoder(); + } + + /** + * Initializes database. + * + * @param policyModelsProviderParameters the database parameters + * @throws PolicyPapException in case of errors. + */ + public void initializePapDatabase(final PolicyModelsProviderParameters policyModelsProviderParameters) + throws PolicyPapException { + + try (PolicyModelsProvider databaseProvider = + factory.createPolicyModelsProvider(policyModelsProviderParameters)) { + final String originalJson = ResourceUtils.getResourceAsString("PapDb.json"); + final PdpGroups pdpGroupsToCreate = standardCoder.decode(originalJson, PdpGroups.class); + final List pdpGroupsFromDb = databaseProvider.getPdpGroups( + pdpGroupsToCreate.getGroups().get(0).getName(), pdpGroupsToCreate.getGroups().get(0).getVersion()); + if (pdpGroupsFromDb.isEmpty()) { + databaseProvider.createPdpGroups(pdpGroupsToCreate.getGroups()); + LOGGER.debug("Created initial pdpGroup in DB - {}", pdpGroupsToCreate); + } else { + LOGGER.debug("Initial pdpGroup already exists in DB, skipping create - {}", pdpGroupsFromDb); + } + } catch (final PfModelException | CoderException exp) { + throw new PolicyPapException(exp); + } + } +} diff --git a/main/src/main/resources/META-INF/persistence.xml b/main/src/main/resources/META-INF/persistence.xml index 0f8a8ecc..1d4abd42 100644 --- a/main/src/main/resources/META-INF/persistence.xml +++ b/main/src/main/resources/META-INF/persistence.xml @@ -33,10 +33,6 @@ org.onap.policy.models.pdp.persistence.concepts.JpaPdp - - - - diff --git a/main/src/main/resources/PapDb.json b/main/src/main/resources/PapDb.json new file mode 100644 index 00000000..c6452cc1 --- /dev/null +++ b/main/src/main/resources/PapDb.json @@ -0,0 +1,64 @@ +{ + "groups": [ + { + "name": "controlloop", + "version": "1.0.0", + "description": "This group should be used for managing all control loop related policies and pdps", + "pdpGroupState": "ACTIVE", + "pdpSubgroups": [ + { + "pdpType": "xacml", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.Guard", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1 + }, + { + "pdpType": "drools", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.Operational", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1 + }, + { + "pdpType": "apex", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.Operational", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1 + } + ] + }, + { + "name": "monitoring", + "version": "1.0.0", + "description": "This group should be used for managing all monitoring related policies and pdps", + "pdpGroupState": "ACTIVE", + "pdpSubgroups": [ + { + "pdpType": "xacml", + "supportedPolicyTypes": [ + { + "name": "onap.policies.Monitoring", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/main/src/test/java/org/onap/policy/pap/main/parameters/CommonTestData.java b/main/src/test/java/org/onap/policy/pap/main/parameters/CommonTestData.java index 7de63cc2..e7ffce07 100644 --- a/main/src/test/java/org/onap/policy/pap/main/parameters/CommonTestData.java +++ b/main/src/test/java/org/onap/policy/pap/main/parameters/CommonTestData.java @@ -171,6 +171,7 @@ public class CommonTestData { final Map map = new TreeMap<>(); map.put("name", PolicyModelsProviderParameters.class.getSimpleName()); map.put("implementation", DatabasePolicyModelsProviderImpl.class.getCanonicalName()); + map.put("databaseDriver", "org.h2.Driver"); map.put("databaseUrl", "jdbc:h2:mem:testdb"); map.put("databaseUser", "policy"); map.put("databasePassword", Base64.getEncoder().encodeToString("P01icY".getBytes())); diff --git a/main/src/test/resources/META-INF/persistence.xml b/main/src/test/resources/META-INF/persistence.xml index a43afafc..7c455fb7 100644 --- a/main/src/test/resources/META-INF/persistence.xml +++ b/main/src/test/resources/META-INF/persistence.xml @@ -33,46 +33,7 @@ org.onap.policy.models.pdp.persistence.concepts.JpaPdp - - - - - - - - - - - - org.eclipse.persistence.jpa.PersistenceProvider - - org.onap.policy.models.dao.converters.CDataConditioner - org.onap.policy.models.dao.converters.Uuid2String - org.onap.policy.models.base.PfConceptKey - org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType - org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy - org.onap.policy.models.pdp.persistence.concepts.JpaPdpGroup - org.onap.policy.models.pdp.persistence.concepts.JpaPdpSubGroup - org.onap.policy.models.pdp.persistence.concepts.JpaPdp - - - - - - - - - diff --git a/main/src/test/resources/parameters/MinimumParameters.json b/main/src/test/resources/parameters/MinimumParameters.json index 7e7d3ee7..e611dc90 100644 --- a/main/src/test/resources/parameters/MinimumParameters.json +++ b/main/src/test/resources/parameters/MinimumParameters.json @@ -19,6 +19,7 @@ "databaseProviderParameters": { "name": "PolicyProviderParameterGroup", "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", + "databaseDriver": "org.h2.Driver", "databaseUrl": "jdbc:h2:mem:testdb", "databaseUser": "policy", "databasePassword": "P01icY", diff --git a/main/src/test/resources/parameters/PapConfigParameters.json b/main/src/test/resources/parameters/PapConfigParameters.json index c967fdf1..05f25bb8 100644 --- a/main/src/test/resources/parameters/PapConfigParameters.json +++ b/main/src/test/resources/parameters/PapConfigParameters.json @@ -20,9 +20,10 @@ "databaseProviderParameters": { "name": "PolicyProviderParameterGroup", "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", + "databaseDriver": "org.h2.Driver", "databaseUrl": "jdbc:h2:mem:testdb", "databaseUser": "policy", "databasePassword": "P01icY", - "persistenceUnit": "PdpGroupTest" + "persistenceUnit": "ToscaConceptTest" } } diff --git a/main/src/test/resources/parameters/PapConfigParameters_InvalidName.json b/main/src/test/resources/parameters/PapConfigParameters_InvalidName.json index 8cb74172..d06ecfc8 100644 --- a/main/src/test/resources/parameters/PapConfigParameters_InvalidName.json +++ b/main/src/test/resources/parameters/PapConfigParameters_InvalidName.json @@ -19,6 +19,7 @@ "databaseProviderParameters": { "name": "PolicyProviderParameterGroup", "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", + "databaseDriver": "org.h2.Driver", "databaseUrl": "jdbc:h2:mem:testdb", "databaseUser": "policy", "databasePassword": "P01icY", diff --git a/packages/policy-pap-tarball/src/main/resources/etc/defaultConfig.json b/packages/policy-pap-tarball/src/main/resources/etc/defaultConfig.json index bdcabc40..32b6c30f 100644 --- a/packages/policy-pap-tarball/src/main/resources/etc/defaultConfig.json +++ b/packages/policy-pap-tarball/src/main/resources/etc/defaultConfig.json @@ -21,7 +21,8 @@ "databaseProviderParameters": { "name": "PolicyProviderParameterGroup", "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", - "databaseUrl": "jdbc:mariadb://policydb:3306/policy", + "databaseDriver": "org.mariadb.jdbc.Driver", + "databaseUrl": "jdbc:mariadb://mariadb:3306/policyadmin", "databaseUser": "policy_user", "databasePassword": "cG9saWN5X3VzZXI=", "persistenceUnit": "PolicyMariaDb" -- 2.16.6