From 00532428c0b83065a8ae87eaa2de579c3918d984 Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Thu, 17 Sep 2020 17:03:34 -0400 Subject: [PATCH] Make stand-alone Policy environment This is a first cut at making it possible to easily run Policy components within a stand-alone environment. Made the following changes: - enhanced wait_for_port.sh to accept a list of hosts/ports - enhanced wait_for_port.sh to accept an optional command to execute when the wait completes - consolidated all of the yml files into a single file - removed "extra" services from the yml so that a component and its dependents can be brought up in a single invocation - modified the component setup.sh With these changes, a developer can clone the csit repo, run detmVers.sh to set the docker image version env variables, and then bring up a component (and its dependents) using: docker-compose -f scripts/policy/docker-compose-all.yml up --detach Note: this does not preload or deploy any policies; that must be done manually via curl. Modified to use new simulator docker image. Also fixed drools-apps CSIT broken due to disabling frankfurt controller. Also removed operational.Apex policy. The csar file used in policy-distribution test is also updated to reflect this change. Issue-ID: POLICY-2742 Change-Id: I412dbd5db9219ad2cdece9693f0b4b9fe7b2eb69 Signed-off-by: Jim Hahn Signed-off-by: a.sreekumar --- plans/policy/apex-pdp/setup.sh | 52 +-- plans/policy/apex-pdp/teardown.sh | 7 +- plans/policy/api/setup.sh | 24 +- plans/policy/api/teardown.sh | 5 +- plans/policy/distribution/setup.sh | 59 +-- plans/policy/distribution/teardown.sh | 8 +- plans/policy/drools-applications/setup.sh | 38 +- plans/policy/drools-applications/teardown.sh | 4 +- plans/policy/drools-pdp/setup.sh | 25 +- plans/policy/drools-pdp/teardown.sh | 4 +- plans/policy/pap/setup.sh | 32 +- plans/policy/pap/teardown.sh | 6 +- plans/policy/xacml-pdp/setup.sh | 45 +- plans/policy/xacml-pdp/teardown.sh | 8 +- scripts/policy/config/apex-pdp/OnapPfConfig.json | 42 ++ .../config/distribution/defaultConfig.json | 0 .../pap/defaultConfig.json} | 0 scripts/policy/config/pe/base.conf | 43 -- scripts/policy/config/pe/brmsgw-tweaks.sh | 40 -- scripts/policy/config/pe/brmsgw.conf | 67 --- scripts/policy/config/pe/console.conf | 145 ------ scripts/policy/config/pe/elk.conf | 16 - scripts/policy/config/pe/mysql.conf | 18 - scripts/policy/config/pe/pap-tweaks.sh | 14 - scripts/policy/config/pe/pap.conf | 68 --- scripts/policy/config/pe/paplp.conf | 25 - scripts/policy/config/pe/pdp-tweaks.sh | 14 - scripts/policy/config/pe/pdp.conf | 69 --- scripts/policy/config/pe/pdplp.conf | 25 - scripts/policy/config/pe/push-policies.sh | 506 --------------------- scripts/policy/config/sim-all/simParameters.json | 17 +- .../xacml-pdp/defaultConfig.json} | 0 scripts/policy/detmVers.sh | 80 ++++ scripts/policy/docker-compose-all.yml | 190 ++++++++ scripts/policy/docker-compose-api.yml | 54 --- scripts/policy/docker-compose-drools.yml | 46 -- scripts/policy/docker-compose-engine.yml | 64 --- scripts/policy/docker-compose-pap.yml | 74 --- .../drools-apps/docker-compose-drools-apps.yml | 139 ------ .../config/db/db.conf => get-models-examples.sh} | 23 +- scripts/policy/policy-apex-pdp/config/db/db.conf | 16 - scripts/policy/policy-apex-pdp/config/db/db.sh | 22 - .../policy/policy-apex-pdp/docker-compose-apex.yml | 92 ---- .../policy/policy-distribution/config/db/db.conf | 16 - scripts/policy/policy-distribution/config/db/db.sh | 22 - .../csar/sample_csar_with_apex_policy.csar | Bin 96875 -> 96868 bytes .../temp/sample_csar_with_apex_policy.csar | Bin 94632 -> 0 bytes .../docker-compose-distribution.yml | 109 ----- scripts/policy/policy-models-dmaap-sim.sh | 37 -- scripts/policy/policy-models-simulators.sh | 38 -- scripts/policy/policy-xacml-pdp/config/db/db.sh | 26 -- .../policy-xacml-pdp/docker-compose-pdpx.yml | 88 ---- scripts/policy/wait_for_port.sh | 39 +- .../drools-applications-test.robot | 4 +- 54 files changed, 448 insertions(+), 2157 deletions(-) create mode 100644 scripts/policy/config/apex-pdp/OnapPfConfig.json rename scripts/policy/{policy-distribution => }/config/distribution/defaultConfig.json (100%) rename scripts/policy/{drools-apps/custom/papDefaultConfig.json => config/pap/defaultConfig.json} (100%) delete mode 100644 scripts/policy/config/pe/base.conf delete mode 100755 scripts/policy/config/pe/brmsgw-tweaks.sh delete mode 100644 scripts/policy/config/pe/brmsgw.conf delete mode 100644 scripts/policy/config/pe/console.conf delete mode 100644 scripts/policy/config/pe/elk.conf delete mode 100644 scripts/policy/config/pe/mysql.conf delete mode 100755 scripts/policy/config/pe/pap-tweaks.sh delete mode 100644 scripts/policy/config/pe/pap.conf delete mode 100644 scripts/policy/config/pe/paplp.conf delete mode 100755 scripts/policy/config/pe/pdp-tweaks.sh delete mode 100644 scripts/policy/config/pe/pdp.conf delete mode 100644 scripts/policy/config/pe/pdplp.conf delete mode 100755 scripts/policy/config/pe/push-policies.sh rename scripts/policy/{drools-apps/custom/xacmlDefaultConfig.json => config/xacml-pdp/defaultConfig.json} (100%) create mode 100644 scripts/policy/detmVers.sh create mode 100644 scripts/policy/docker-compose-all.yml delete mode 100644 scripts/policy/docker-compose-api.yml delete mode 100644 scripts/policy/docker-compose-drools.yml delete mode 100644 scripts/policy/docker-compose-engine.yml delete mode 100644 scripts/policy/docker-compose-pap.yml delete mode 100644 scripts/policy/drools-apps/docker-compose-drools-apps.yml rename scripts/policy/{policy-xacml-pdp/config/db/db.conf => get-models-examples.sh} (68%) delete mode 100644 scripts/policy/policy-apex-pdp/config/db/db.conf delete mode 100644 scripts/policy/policy-apex-pdp/config/db/db.sh delete mode 100644 scripts/policy/policy-apex-pdp/docker-compose-apex.yml delete mode 100644 scripts/policy/policy-distribution/config/db/db.conf delete mode 100644 scripts/policy/policy-distribution/config/db/db.sh delete mode 100644 scripts/policy/policy-distribution/config/distribution/temp/sample_csar_with_apex_policy.csar delete mode 100644 scripts/policy/policy-distribution/docker-compose-distribution.yml delete mode 100644 scripts/policy/policy-models-dmaap-sim.sh delete mode 100755 scripts/policy/policy-models-simulators.sh delete mode 100755 scripts/policy/policy-xacml-pdp/config/db/db.sh delete mode 100644 scripts/policy/policy-xacml-pdp/docker-compose-pdpx.yml diff --git a/plans/policy/apex-pdp/setup.sh b/plans/policy/apex-pdp/setup.sh index d3c1d629..02238e90 100644 --- a/plans/policy/apex-pdp/setup.sh +++ b/plans/policy/apex-pdp/setup.sh @@ -20,55 +20,17 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= source ${SCRIPTS}/policy/config/policy-csit.conf -export POLICY_MARIADB_VER -echo ${GERRIT_BRANCH} -echo ${POLICY_MARIADB_VER} echo "Uninstall docker-py and reinstall docker." pip uninstall -y docker-py pip uninstall -y docker pip install -U docker==2.7.0 -# the directory of the script -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -echo ${DIR} - -# the temp directory used, within $DIR -# omit the -p parameter to create a temporal directory in the default location -WORK_DIR=`mktemp -d -p "$DIR"` -echo ${WORK_DIR} - -cd ${WORK_DIR} - -# check if tmp dir was created -if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then - echo "Could not create temp dir" - exit 1 -fi - sudo apt-get -y install libxml2-utils -bash ${SCRIPTS}/policy/policy-models-dmaap-sim.sh -POLICY_API_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/api/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_API_VERSION="${POLICY_API_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_PAP_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/pap/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_PAP_VERSION="${POLICY_PAP_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_APEX_PDP_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/apex-pdp/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_APEX_PDP_VERSION="${POLICY_APEX_PDP_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" +source ${SCRIPTS}/policy/detmVers.sh -echo ${POLICY_API_VERSION} -echo ${POLICY_PAP_VERSION} -echo ${POLICY_APEX_PDP_VERSION} - -# Adding this waiting container due to race condition between pap and mariadb -docker-compose -f ${WORKSPACE}/scripts/policy/policy-apex-pdp/docker-compose-apex.yml run --rm start_dependencies - -#Configure the database -docker exec --tty mariadb chmod +x /docker-entrypoint-initdb.d/db.sh -docker exec --tty mariadb /docker-entrypoint-initdb.d/db.sh - -# now bring everything else up -docker-compose -f ${WORKSPACE}/scripts/policy/policy-apex-pdp/docker-compose-apex.yml run --rm start_all +docker-compose -f ${SCRIPTS}/policy/docker-compose-all.yml up -d apex-pdp unset http_proxy https_proxy @@ -76,7 +38,7 @@ POLICY_API_IP=`get-instance-ip.sh policy-api` POLICY_PAP_IP=`get-instance-ip.sh policy-pap` MARIADB_IP=`get-instance-ip.sh mariadb` APEX_IP=`get-instance-ip.sh policy-apex-pdp` -DMAAP_IP=`get-instance-ip.sh dmaap-simulator` +DMAAP_IP=`get-instance-ip.sh policy.api.simpledemo.onap.org` echo PAP IP IS ${POLICY_PAP_IP} echo MARIADB IP IS ${MARIADB_IP} @@ -84,4 +46,10 @@ echo API IP IS ${POLICY_API_IP} echo APEX IP IS ${APEX_IP} echo DMAAP_IP IS ${DMAAP_IP} -ROBOT_VARIABLES="-v APEX_IP:${APEX_IP} -v POLICY_API_IP:${POLICY_API_IP} -v POLICY_PAP_IP:${POLICY_PAP_IP}" +# wait for the app to start up +${SCRIPTS}/policy/wait_for_port.sh ${APEX_IP} 6969 + +ROBOT_VARIABLES="" +ROBOT_VARIABLES="${ROBOT_VARIABLES} -v APEX_IP:${APEX_IP}" +ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_API_IP:${POLICY_API_IP}" +ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_PAP_IP:${POLICY_PAP_IP}" diff --git a/plans/policy/apex-pdp/teardown.sh b/plans/policy/apex-pdp/teardown.sh index 6c02aea1..86416e6e 100644 --- a/plans/policy/apex-pdp/teardown.sh +++ b/plans/policy/apex-pdp/teardown.sh @@ -3,6 +3,7 @@ # Copyright (C) 2018 Ericsson. All rights reserved. # # Modifications copyright (c) 2019 Nordix Foundation. +# Modifications Copyright (C) 2020 AT&T Intellectual Property. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,8 +20,4 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= -kill-instance.sh policy-apex-pdp -kill-instance.sh policy-pap -kill-instance.sh policy-api -kill-instance.sh mariadb -kill-instance.sh dmaap-simulator +docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-all.yml down -v diff --git a/plans/policy/api/setup.sh b/plans/policy/api/setup.sh index b75b492a..550337e9 100644 --- a/plans/policy/api/setup.sh +++ b/plans/policy/api/setup.sh @@ -19,9 +19,6 @@ # Select branch source ${SCRIPTS}/policy/config/policy-csit.conf -export POLICY_MARIADB_VER -echo ${GERRIT_BRANCH} -echo ${POLICY_MARIADB_VER} echo "Uninstall docker-py and reinstall docker." pip uninstall -y docker-py @@ -30,14 +27,9 @@ pip install -U docker==2.7.0 sudo apt-get -y install libxml2-utils -POLICY_API_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/api/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_API_VERSION="${POLICY_API_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" +bash ${SCRIPTS}/policy/get-models-examples.sh -# download models - it contains the policy definitions -rm -rf ${WORKSPACE}/models -cd ${WORKSPACE} - -git clone --depth 1 https://gerrit.onap.org/r/policy/models -b ${GERRIT_BRANCH} +source ${SCRIPTS}/policy/detmVers.sh DATA=${WORKSPACE}/models/models-examples/src/main/resources/policies @@ -53,15 +45,8 @@ sed -e 's!"version": "1.0.0"!"version": "2.0.0"!' \ echo ${POLICY_API_VERSION} -# Adding this waiting container to avoid race condition between api and mariadb containers. -docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-api.yml run --rm start_dependencies - -#Configure the database -docker exec --tty mariadb chmod +x /docker-entrypoint-initdb.d/db.sh -docker exec --tty mariadb /docker-entrypoint-initdb.d/db.sh +docker-compose -f ${SCRIPTS}/policy/docker-compose-all.yml up -d api -# now bring everything else up -docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-api.yml run --rm start_all unset http_proxy https_proxy @@ -71,6 +56,9 @@ MARIADB_IP=`get-instance-ip.sh mariadb` echo API IP IS ${POLICY_API_IP} echo MARIADB IP IS ${MARIADB_IP} +# wait for the app to start up +${SCRIPTS}/policy/wait_for_port.sh ${POLICY_API_IP} 6969 + ROBOT_VARIABLES="" ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_API_IP:${POLICY_API_IP}" ROBOT_VARIABLES="${ROBOT_VARIABLES} -v DATA:${DATA}" diff --git a/plans/policy/api/teardown.sh b/plans/policy/api/teardown.sh index 0572e034..6942e353 100755 --- a/plans/policy/api/teardown.sh +++ b/plans/policy/api/teardown.sh @@ -1,6 +1,6 @@ #!/bin/bash # ============LICENSE_START======================================================= -# Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. +# Copyright (C) 2019-2020 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. @@ -17,5 +17,4 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= -kill-instance.sh policy-api -kill-instance.sh mariadb +docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-all.yml down -v diff --git a/plans/policy/distribution/setup.sh b/plans/policy/distribution/setup.sh index 52573b58..73226140 100644 --- a/plans/policy/distribution/setup.sh +++ b/plans/policy/distribution/setup.sh @@ -20,63 +20,26 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= source ${SCRIPTS}/policy/config/policy-csit.conf -export POLICY_MARIADB_VER -echo ${GERRIT_BRANCH} -echo ${POLICY_MARIADB_VER} echo "Uninstall docker-py and reinstall docker." pip uninstall -y docker-py pip uninstall -y docker pip install -U docker==2.7.0 -# the directory of the script -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -echo ${DIR} - -# the temp directory used, within $DIR -# omit the -p parameter to create a temporal directory in the default location -WORK_DIR=`mktemp -d -p "$DIR"` -echo ${WORK_DIR} - -cd ${WORK_DIR} - -# check if tmp dir was created -if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then - echo "Could not create temp dir" - exit 1 -fi - sudo apt-get -y install libxml2-utils -bash ${SCRIPTS}/policy/policy-models-dmaap-sim.sh -POLICY_API_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/api/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_API_VERSION="${POLICY_API_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_PAP_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/pap/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_PAP_VERSION="${POLICY_PAP_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_APEX_PDP_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/apex-pdp/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_APEX_PDP_VERSION="${POLICY_APEX_PDP_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_DISTRIBUTION_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/distribution/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_DISTRIBUTION_VERSION="${POLICY_DISTRIBUTION_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" +source ${SCRIPTS}/policy/detmVers.sh -echo ${POLICY_API_VERSION} -echo ${POLICY_PAP_VERSION} -echo ${POLICY_APEX_PDP_VERSION} -echo ${POLICY_DISTRIBUTION_VERSION} - -SCRIPT_DIR=${WORKSPACE}/scripts/policy/policy-distribution +SCRIPT_DIR=${SCRIPTS}/policy/policy-distribution # Remaking the csar file in case if the file got corrupted zip -F ${SCRIPT_DIR}/config/distribution/csar/sample_csar_with_apex_policy.csar --out ${SCRIPT_DIR}/config/distribution/csar/csar_temp.csar -# Adding this waiting container due to race condition between pap and mariadb -docker-compose -f ${SCRIPT_DIR}/docker-compose-distribution.yml run --rm start_dependencies - -#Configure the database -docker exec --tty mariadb chmod +x /docker-entrypoint-initdb.d/db.sh -docker exec --tty mariadb /docker-entrypoint-initdb.d/db.sh +# Remake temp directory +rm -rf ${SCRIPT_DIR}/config/distribution/temp +mkdir ${SCRIPT_DIR}/config/distribution/temp -# now bring everything else up -docker-compose -f ${SCRIPT_DIR}/docker-compose-distribution.yml run --rm start_all +docker-compose -f ${SCRIPTS}/policy/docker-compose-all.yml up -d distribution unset http_proxy https_proxy @@ -84,7 +47,7 @@ POLICY_API_IP=`get-instance-ip.sh policy-api` POLICY_PAP_IP=`get-instance-ip.sh policy-pap` MARIADB_IP=`get-instance-ip.sh mariadb` APEX_IP=`get-instance-ip.sh policy-apex-pdp` -DMAAP_IP=`get-instance-ip.sh dmaap-simulator` +DMAAP_IP=`get-instance-ip.sh policy.api.simpledemo.onap.org` POLICY_DISTRIBUTION_IP=`get-instance-ip.sh policy-distribution` echo PAP IP IS ${POLICY_PAP_IP} @@ -94,4 +57,10 @@ echo APEX IP IS ${APEX_IP} echo DMAAP_IP IS ${DMAAP_IP} echo POLICY_DISTRIBUTION_IP IS ${POLICY_DISTRIBUTION_IP} -ROBOT_VARIABLES="-v APEX_IP:${APEX_IP} -v SCRIPT_DIR:${SCRIPT_DIR} -v POLICY_DISTRIBUTION_IP:${POLICY_DISTRIBUTION_IP}" +# wait for the app to start up +${SCRIPTS}/policy/wait_for_port.sh ${POLICY_DISTRIBUTION_IP} 6969 + +ROBOT_VARIABLES="" +ROBOT_VARIABLES="${ROBOT_VARIABLES} -v APEX_IP:${APEX_IP}" +ROBOT_VARIABLES="${ROBOT_VARIABLES} -v SCRIPT_DIR:${SCRIPT_DIR}" +ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_DISTRIBUTION_IP:${POLICY_DISTRIBUTION_IP}" diff --git a/plans/policy/distribution/teardown.sh b/plans/policy/distribution/teardown.sh index fbbf1de5..86416e6e 100644 --- a/plans/policy/distribution/teardown.sh +++ b/plans/policy/distribution/teardown.sh @@ -3,6 +3,7 @@ # Copyright (C) 2018 Ericsson. All rights reserved. # # Modifications copyright (c) 2019 Nordix Foundation. +# Modifications Copyright (C) 2020 AT&T Intellectual Property. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,9 +20,4 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= -kill-instance.sh policy-apex-pdp -kill-instance.sh policy-pap -kill-instance.sh policy-api -kill-instance.sh mariadb -kill-instance.sh dmaap-simulator -kill-instance.sh policy-distribution +docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-all.yml down -v diff --git a/plans/policy/drools-applications/setup.sh b/plans/policy/drools-applications/setup.sh index 1a1dc331..c4cbfa60 100755 --- a/plans/policy/drools-applications/setup.sh +++ b/plans/policy/drools-applications/setup.sh @@ -20,9 +20,6 @@ # OS upgrades source ${SCRIPTS}/policy/config/policy-csit.conf -export POLICY_MARIADB_VER -echo ${GERRIT_BRANCH} -echo ${POLICY_MARIADB_VER} SCR2=${WORKSPACE}/scripts/policy/drools-apps @@ -32,37 +29,15 @@ pip uninstall -y docker pip install -U docker==2.7.0 sudo apt-get -y install libxml2-utils -${SCRIPTS}/policy/policy-models-simulators.sh +bash ${SCRIPTS}/policy/get-models-examples.sh -POLICY_API_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/api/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_API_VERSION="${POLICY_API_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_PAP_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/pap/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_PAP_VERSION="${POLICY_PAP_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_XACML_PDP_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/xacml-pdp/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_XACML_PDP_VERSION="${POLICY_XACML_PDP_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_DROOLS_APPS_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/drools-applications/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -echo ${POLICY_DROOLS_APPS_VERSION_EXTRACT} -export POLICY_DROOLS_APPS_VERSION="${POLICY_DROOLS_APPS_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" +source ${SCRIPTS}/policy/detmVers.sh -echo ${POLICY_XACML_PDP_VERSION} -echo ${POLICY_DROOLS_APPS_VERSION} - -echo "user information: $(id)" -echo "docker and docker-compose versions:" -docker -v && docker-compose -v - -# Adding this waiting container due to race condition between drools and mariadb -docker-compose -f ${SCR2}/docker-compose-drools-apps.yml run --rm start_dependencies - -# Adding this waiting container due to race condition between pap and xacml -docker-compose -f ${SCR2}/docker-compose-drools-apps.yml run --rm start_pap - -# now bring everything else up -docker-compose -f ${SCR2}/docker-compose-drools-apps.yml run --rm start_all +docker-compose -f ${SCRIPTS}/policy/docker-compose-all.yml up -d drools-apps unset http_proxy https_proxy -DROOLS_IP=`get-instance-ip.sh drools` +DROOLS_IP=`get-instance-ip.sh drools-apps` API_IP=`get-instance-ip.sh policy-api` PAP_IP=`get-instance-ip.sh policy-pap` XACML_IP=`get-instance-ip.sh policy-xacml-pdp` @@ -75,10 +50,13 @@ echo PAP IP IS ${PAP_IP} echo XACML IP IS ${XACML_IP} echo SIMULATORS IP IS ${SIM_IP} +# wait for the app to start up +${SCRIPTS}/policy/wait_for_port.sh ${DROOLS_IP} 6969 + # give enough time for the controllers to come up sleep 15 -DATA=${WORKSPACE}/simulators/models/models-examples/src/main/resources/policies +DATA=${WORKSPACE}/models/models-examples/src/main/resources/policies ROBOT_VARIABLES="" ROBOT_VARIABLES="${ROBOT_VARIABLES} -v SCR2:${SCR2}" diff --git a/plans/policy/drools-applications/teardown.sh b/plans/policy/drools-applications/teardown.sh index 8b577d8e..67de4a1a 100755 --- a/plans/policy/drools-applications/teardown.sh +++ b/plans/policy/drools-applications/teardown.sh @@ -18,6 +18,6 @@ # mkdir -p $WORKSPACE/archives/ -docker-compose -f ${WORKSPACE}/scripts/policy/drools-apps/docker-compose-drools-apps.yml logs > $WORKSPACE/archives/docker-compose-drools-apps.log +docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-all.yml logs > $WORKSPACE/archives/docker-compose-drools-apps.log -docker-compose -f ${WORKSPACE}/scripts/policy/drools-apps/docker-compose-drools-apps.yml down -v +docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-all.yml down -v diff --git a/plans/policy/drools-pdp/setup.sh b/plans/policy/drools-pdp/setup.sh index d50106ff..6b951356 100755 --- a/plans/policy/drools-pdp/setup.sh +++ b/plans/policy/drools-pdp/setup.sh @@ -24,26 +24,15 @@ pip uninstall -y docker-py pip uninstall -y docker pip install -U docker==2.7.0 -echo "user information: $(id)" -echo "docker information:" -docker -v && docker-compose -v && docker info - # Component Versions source ${SCRIPTS}/policy/config/policy-csit.conf -export POLICY_MARIADB_VER -echo ${GERRIT_BRANCH} -echo ${POLICY_MARIADB_VER} sudo apt-get -y install libxml2-utils -POLICY_DROOLS_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/drools-applications/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_DROOLS_VERSION="${POLICY_DROOLS_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -echo ${POLICY_DROOLS_VERSION} -docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-drools.yml up -d -sleep 2m +source ${SCRIPTS}/policy/detmVers.sh -docker container ls -a +docker-compose -f ${SCRIPTS}/policy/docker-compose-all.yml up -d drools POLICY_DROOLS_IP=`get-instance-ip.sh drools` MARIADB_IP=`get-instance-ip.sh mariadb` @@ -51,10 +40,10 @@ MARIADB_IP=`get-instance-ip.sh mariadb` echo DROOLS IP IS ${POLICY_DROOLS_IP} echo MARIADB IP IS ${MARIADB_IP} -for i in {1..10}; do - curl -sS ${POLICY_DROOLS_IP}:9696 && break - echo sleep $i - sleep $i -done +# wait for the app to start up - looking for telemtry service on port 9696 +${SCRIPTS}/policy/wait_for_port.sh ${POLICY_DROOLS_IP} 9696 + +# give enough time for the controllers to come up +sleep 15 ROBOT_VARIABLES="-v POLICY_DROOLS_IP:${POLICY_DROOLS_IP}" diff --git a/plans/policy/drools-pdp/teardown.sh b/plans/policy/drools-pdp/teardown.sh index e08593d2..5a3f16e5 100755 --- a/plans/policy/drools-pdp/teardown.sh +++ b/plans/policy/drools-pdp/teardown.sh @@ -16,5 +16,5 @@ # mkdir -p $WORKSPACE/archives/ -docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-drools.yml logs > $WORKSPACE/archives/docker-compose-drools.log -docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-drools.yml down -v +docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-all.yml logs > $WORKSPACE/archives/docker-compose-drools.log +docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-all.yml down -v diff --git a/plans/policy/pap/setup.sh b/plans/policy/pap/setup.sh index a89a6daf..a1d153f8 100644 --- a/plans/policy/pap/setup.sh +++ b/plans/policy/pap/setup.sh @@ -19,40 +19,21 @@ # ============LICENSE_END========================================================= source ${SCRIPTS}/policy/config/policy-csit.conf -export POLICY_MARIADB_VER -echo ${GERRIT_BRANCH} -echo ${POLICY_MARIADB_VER} echo "Uninstall docker-py and reinstall docker." pip uninstall -y docker-py pip uninstall -y docker pip install -U docker==2.7.0 - sudo apt-get -y install libxml2-utils -bash ${SCRIPTS}/policy/policy-models-dmaap-sim.sh - -POLICY_API_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/api/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_API_VERSION="${POLICY_API_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_PAP_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/pap/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_PAP_VERSION="${POLICY_PAP_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" - -echo ${POLICY_API_VERSION} -echo ${POLICY_PAP_VERSION} - -# Adding this waiting container due to race condition between pap and mariadb -docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-pap.yml run --rm start_dependencies +bash ${SCRIPTS}/policy/get-models-examples.sh -#Configure the database -docker exec --tty mariadb chmod +x /docker-entrypoint-initdb.d/db.sh -docker exec --tty mariadb /docker-entrypoint-initdb.d/db.sh +source ${SCRIPTS}/policy/detmVers.sh -# now bring everything else up -docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-pap.yml run --rm start_all +docker-compose -f ${SCRIPTS}/policy/docker-compose-all.yml up -d pap unset http_proxy https_proxy - POLICY_PAP_IP=`get-instance-ip.sh policy-pap` POLICY_API_IP=`get-instance-ip.sh policy-api` MARIADB_IP=`get-instance-ip.sh mariadb` @@ -61,7 +42,12 @@ echo PAP IP IS ${POLICY_PAP_IP} echo API IP IS ${POLICY_API_IP} echo MARIADB IP IS ${MARIADB_IP} -DATA=${WORKSPACE}/dmaap-sim/models/models-examples/src/main/resources/policies + +# wait for the app to start up +${SCRIPTS}/policy/wait_for_port.sh ${POLICY_PAP_IP} 6969 + + +DATA=${WORKSPACE}/models/models-examples/src/main/resources/policies ROBOT_VARIABLES="" ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_PAP_IP:${POLICY_PAP_IP}" diff --git a/plans/policy/pap/teardown.sh b/plans/policy/pap/teardown.sh index c2d7e214..cfed2097 100644 --- a/plans/policy/pap/teardown.sh +++ b/plans/policy/pap/teardown.sh @@ -1,7 +1,7 @@ #!/bin/bash # ============LICENSE_START======================================================= # Copyright (C) 2019 Nordix Foundation. -# Modifications Copyright (C) 2019 AT&T Intellectual Property. +# Modifications Copyright (C) 2019-2020 AT&T Intellectual Property. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,6 +18,4 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= -kill-instance.sh policy-pap -kill-instance.sh policy-api -kill-instance.sh mariadb +docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-all.yml down -v diff --git a/plans/policy/xacml-pdp/setup.sh b/plans/policy/xacml-pdp/setup.sh index d6726c7a..7f557d13 100644 --- a/plans/policy/xacml-pdp/setup.sh +++ b/plans/policy/xacml-pdp/setup.sh @@ -18,60 +18,28 @@ # ============LICENSE_END========================================================= source ${SCRIPTS}/policy/config/policy-csit.conf -export POLICY_MARIADB_VER -echo ${GERRIT_BRANCH} -echo ${POLICY_MARIADB_VER} echo "Uninstall docker-py and reinstall docker." pip uninstall -y docker-py pip uninstall -y docker pip install -U docker==2.7.0 -# the directory of the script -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -echo ${DIR} - -# the temp directory used, within $DIR -# omit the -p parameter to create a temporal directory in the default location -WORK_DIR=`mktemp -d -p "$DIR"` -echo ${WORK_DIR} - -cd ${WORK_DIR} - -# check if tmp dir was created -if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then - echo "Could not create temp dir" - exit 1 -fi - SCR_DMAAP=${SCRIPTS}/policy/drools-apps sudo apt-get -y install libxml2-utils -bash ${SCRIPTS}/policy/policy-models-dmaap-sim.sh - -POLICY_API_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/api/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_API_VERSION="${POLICY_API_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_PAP_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/pap/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_PAP_VERSION="${POLICY_PAP_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" -POLICY_XACML_PDP_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/xacml-pdp/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_XACML_PDP_VERSION="${POLICY_XACML_PDP_VERSION_EXTRACT:0:3}-SNAPSHOT-latest" +bash ${SCRIPTS}/policy/get-models-examples.sh -echo ${POLICY_API_VERSION} -echo ${POLICY_PAP_VERSION} -echo ${POLICY_XACML_PDP_VERSION} +source ${SCRIPTS}/policy/detmVers.sh -# Adding this waiting container due to race condition between pap and mariadb -docker-compose -f ${WORKSPACE}/scripts/policy/policy-xacml-pdp/docker-compose-pdpx.yml run --rm start_dependencies +docker-compose -f ${SCRIPTS}/policy/docker-compose-all.yml up -d xacml-pdp -# now bring everything else up -docker-compose -f ${WORKSPACE}/scripts/policy/policy-xacml-pdp/docker-compose-pdpx.yml run --rm start_all unset http_proxy https_proxy POLICY_API_IP=`get-instance-ip.sh policy-api` MARIADB_IP=`get-instance-ip.sh mariadb` POLICY_PDPX_IP=`get-instance-ip.sh policy-xacml-pdp` -DMAAP_IP=`get-instance-ip.sh dmaap-simulator` +DMAAP_IP=`get-instance-ip.sh policy.api.simpledemo.onap.org` POLICY_PAP_IP=`get-instance-ip.sh policy-pap` echo PDP IP IS ${POLICY_PDPX_IP} @@ -80,7 +48,10 @@ echo PAP IP IS ${POLICY_PAP_IP} echo MARIADB IP IS ${MARIADB_IP} echo DMAAP_IP IS ${DMAAP_IP} -DATA2=${WORKSPACE}/dmaap-sim/models/models-examples/src/main/resources/policies +# wait for the app to start up +${SCRIPTS}/policy/wait_for_port.sh ${POLICY_PDPX_IP} 6969 + +DATA2=${WORKSPACE}/models/models-examples/src/main/resources/policies ROBOT_VARIABLES="" ROBOT_VARIABLES="${ROBOT_VARIABLES} -v SCR_DMAAP:${SCR_DMAAP}" diff --git a/plans/policy/xacml-pdp/teardown.sh b/plans/policy/xacml-pdp/teardown.sh index 270d6cc6..6942e353 100644 --- a/plans/policy/xacml-pdp/teardown.sh +++ b/plans/policy/xacml-pdp/teardown.sh @@ -1,6 +1,6 @@ #!/bin/bash # ============LICENSE_START======================================================= -# Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. +# Copyright (C) 2019-2020 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. @@ -17,8 +17,4 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= -kill-instance.sh policy-xacml-pdp -kill-instance.sh policy-pap -kill-instance.sh policy-api -kill-instance.sh mariadb -kill-instance.sh dmaap-simulator +docker-compose -f ${WORKSPACE}/scripts/policy/docker-compose-all.yml down -v diff --git a/scripts/policy/config/apex-pdp/OnapPfConfig.json b/scripts/policy/config/apex-pdp/OnapPfConfig.json new file mode 100644 index 00000000..59ba604d --- /dev/null +++ b/scripts/policy/config/apex-pdp/OnapPfConfig.json @@ -0,0 +1,42 @@ +{ + "name":"OnapPfParameterGroup", + "restServerParameters": { + "host": "0.0.0.0", + "port": 6969, + "userName": "healthcheck", + "password": "zb!XztG34", + "https": true + }, + "pdpStatusParameters":{ + "pdpGroup": "defaultGroup", + "timeIntervalMs": 120000, + "pdpType":"apex", + "description":"Pdp Heartbeat", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Apex", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Apex", + "version": "1.0.0" + } + ] + }, + "topicParameterGroup": { + "topicSources" : [{ + "topic" : "POLICY-PDP-PAP", + "servers" : [ "policy.api.simpledemo.onap.org" ], + "topicCommInfrastructure" : "dmaap", + "useHttps" : true, + "allowSelfSignedCerts" : true + }], + "topicSinks" : [{ + "topic" : "POLICY-PDP-PAP", + "servers" : [ "policy.api.simpledemo.onap.org" ], + "topicCommInfrastructure" : "dmaap", + "useHttps" : true, + "allowSelfSignedCerts" : true + }] + } +} diff --git a/scripts/policy/policy-distribution/config/distribution/defaultConfig.json b/scripts/policy/config/distribution/defaultConfig.json similarity index 100% rename from scripts/policy/policy-distribution/config/distribution/defaultConfig.json rename to scripts/policy/config/distribution/defaultConfig.json diff --git a/scripts/policy/drools-apps/custom/papDefaultConfig.json b/scripts/policy/config/pap/defaultConfig.json similarity index 100% rename from scripts/policy/drools-apps/custom/papDefaultConfig.json rename to scripts/policy/config/pap/defaultConfig.json diff --git a/scripts/policy/config/pe/base.conf b/scripts/policy/config/pe/base.conf deleted file mode 100644 index 851234f3..00000000 --- a/scripts/policy/config/pe/base.conf +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2020 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. - -JAVA_HOME=/usr/local/openjdk-11 -POLICY_HOME=/opt/app/policy -POLICY_LOGS=/var/log/onap -KEYSTORE_PASSWD=Pol1cy_0nap -TRUSTSTORE_PASSWD=Pol1cy_0nap - -JDBC_DRIVER=org.mariadb.jdbc.Driver -JDBC_URL=jdbc:mariadb://mariadb:3306/onap_sdk?connectTimeout=30000&socketTimeout=60000&log=true&sessionVariables=max_statement_time=30 -JDBC_LOG_URL=jdbc:mariadb://mariadb:3306/log?connectTimeout=30000&socketTimeout=60000&log=true&sessionVariables=max_statement_time=30 -JDBC_USER=policy_user -JDBC_PASSWORD=policy_user - -site_name=site_1 -fp_monitor_interval=30 -failed_counter_threshold=3 -test_trans_interval=20 -write_fpc_interval=5 -max_fpc_update_interval=60 -test_via_jmx=false -jmx_fqdn= - -AAF_NAMESPACE=org.onap.policy -AAF_HOST=aaf.api.simpledemo.onap.org - -ENVIRONMENT=TEST - -#Micro Service Model Properties -policy_msOnapName= -policy_msPolicyName= diff --git a/scripts/policy/config/pe/brmsgw-tweaks.sh b/scripts/policy/config/pe/brmsgw-tweaks.sh deleted file mode 100755 index f74730cc..00000000 --- a/scripts/policy/config/pe/brmsgw-tweaks.sh +++ /dev/null @@ -1,40 +0,0 @@ -#! /bin/bash -# Copyright 2020 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. - -PROPS_BUILD="${POLICY_HOME}/etc/build.info" - -PROPS_RUNTIME="${POLICY_HOME}/servers/brmsgw/config.properties" -PROPS_INSTALL="${POLICY_HOME}/install/servers/brmsgw/config.properties" - - -if [ ! -f "${PROPS_BUILD}" ]; then - echo "error: version information does not exist: ${PROPS_BUILD}" - exit 1 -fi - -source "${POLICY_HOME}/etc/build.info" - -if [ -z "${version}" ]; then - echo "error: no version information present" - exit 1 -fi - -for CONFIG in ${PROPS_RUNTIME} ${PROPS_INSTALL}; do - if [ ! -f "${CONFIG}" ]; then - echo "warning: configuration does not exist: ${CONFIG}" - else - sed -i -e "s/brms.dependency.version=.*/brms.dependency.version=${version}/g" "${CONFIG}" - fi -done diff --git a/scripts/policy/config/pe/brmsgw.conf b/scripts/policy/config/pe/brmsgw.conf deleted file mode 100644 index c2db9d12..00000000 --- a/scripts/policy/config/pe/brmsgw.conf +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright 2020 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. -# BRMSpep component installation configuration parameters -BRMSGW_JMX_PORT=9989 - -COMPONENT_X_MX_MB=512 -COMPONENT_X_MS_MB=512 - -REST_PAP_URL=https://pap:9091/pap/ -REST_PDP_ID=https://pdp:8081/pdp/ - -PDP_HTTP_USER_ID=testpdp -PDP_HTTP_PASSWORD=alpha123 -PDP_PAP_PDP_HTTP_USER_ID=testpap -PDP_PAP_PDP_HTTP_PASSWORD=alpha123 - -M2_HOME=/usr/share/java/maven-3 -snapshotRepositoryID=policy-nexus-snapshots -snapshotRepositoryName=Snapshots -snapshotRepositoryURL=http://nexus:8081/nexus/content/repositories/snapshots -releaseRepositoryID=policy-nexus-releases -releaseRepositoryName=Releases -releaseRepositoryURL=http://nexus:8081/nexus/content/repositories/releases -repositoryUsername=admin -repositoryPassword=admin123 -UEB_URL=mr.api.simpledemo.onap.org -UEB_TOPIC=PDPD-CONFIGURATION -UEB_API_KEY= -UEB_API_SECRET= - -groupID=org.onap.policy-engine -artifactID=drlPDPGroup -AMSTERDAM_GROUP_ID=org.onap.policy-engine.drools.amsterdam -AMSTERDAM_ARTIFACT_ID=policy-amsterdam-rules - -# the java property is RESOURCE_NAME (uppercase), but the conf parameter is lowercase -resource_name=brmsgw_1 -node_type=brms_gateway - -#Environment should be Set either DEV, TEST or PROD -ENVIRONMENT=TEST - -#Notification Properties... type can be either websocket, ueb, or dmaap -BRMS_NOTIFICATION_TYPE=websocket -BRMS_UEB_URL=mr.api.simpledemo.onap.org -BRMS_UEB_TOPIC=PDPD-CONFIGURATION -BRMS_UEB_DELAY= -BRMS_CLIENT_ID=python -BRMS_CLIENT_KEY=dGVzdA== -BRMS_UEB_API_KEY= -BRMS_UEB_API_SECRET= - -#Dependency.json file version -BRMS_DEPENDENCY_VERSION=1.5.1 -BRMS_MODELS_DEPENDENCY_VERSION=2.1.2 - diff --git a/scripts/policy/config/pe/console.conf b/scripts/policy/config/pe/console.conf deleted file mode 100644 index ceaad638..00000000 --- a/scripts/policy/config/pe/console.conf +++ /dev/null @@ -1,145 +0,0 @@ -# Copyright 2020 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. -# configs component installation configuration parameters - -# tomcat specific parameters - -TOMCAT_JMX_PORT=9993 -TOMCAT_SHUTDOWN_PORT=8090 -SSL_HTTP_CONNECTOR_PORT=8443 -SSL_HTTP_CONNECTOR_REDIRECT_PORT=8443 -SSL_AJP_CONNECTOR_PORT=8383 -SSL_AJP_CONNECTOR_REDIRECT_PORT=8443 - -TOMCAT_X_MS_MB=2048 -TOMCAT_X_MX_MB=2048 - -# ------------------ console properties --------------------------- - -# -# Authorization Policy - -ROOT_POLICIES=admin -ADMIN_FILE=Policy-Admin.xml - - -# Set your domain here: - -REST_ADMIN_DOMAIN=com - -# -# Location where the GIT repository is located -# -REST_ADMIN_REPOSITORY=repository - -# -# Location where all the user workspaces are located. -# -REST_ADMIN_WORKSPACE=${{POLICY_HOME}}/servers/console/bin/workspace - -# -# These can be set so the Admin Console knows who is logged on. Ideally, you can run the console in a J2EE -# container and setup authentication as you please. Setting HttpSession attribute values will override these -# values set in the properties files. -# -# ((HttpServletRequest) request).getSession().setAttribute("xacml.rest.admin.user.name", "Homer"); -# -# The default policy: Policy-Admin.xml is extremely simple. -# -# You can test authorization within the Admin Console by changing the user id. -# There are 3 supported user ids: -# guest - Read only access -# editor - Read/Write access -# admin - Read/Write/Admin access -# -# An empty or null value for xacml.rest.admin.user.id results in no access to the application at all. -# -# This is for development/demonstration purposes only. A production environment should provide authentication which is -# outside the scope of this application. This application can be used to develop a XACML policy for user authorization -# within this application. -# - -REST_ADMIN_USER_NAME=Administrator -REST_ADMIN_USER_ID=super-admin - -# -# -# Property to declare the max time frame for logs. -# -LOG_TIMEFRAME=30 - -# Property to declare the number of visible rows for users in MicroService Policy -COLUMN_COUNT=3 - -# Dashboard refresh rate in miliseconds -REFRESH_RATE=40000 - -# -# URL location for the PAP servlet. -# - - -REST_PAP_URL=https://pap:9091/pap/ - -# -# Config/Action Properties location. -# - -REST_CONFIG_HOME=${{POLICY_HOME}}/servers/pap/webapps/Config/ -REST_ACTION_HOME=${{POLICY_HOME}}/servers/pap/webapps/Action/ -REST_CONFIG_URL=https://pap:9091/ -REST_CONFIG_WEBAPPS=${{POLICY_HOME}}/servers/pap/webapps/ - -# PAP account information -CONSOLE_PAP_HTTP_USER_ID=testpap -CONSOLE_PAP_HTTP_PASSWORD=alpha123 - - -node_type=pap_admin -resource_name=console_1 - -# The (optional) period of time in seconds between executions of the integrity audit. -# Value < 0 : Audit does not run (default value if property is not present = -1) -# Value = 0 : Audit runs continuously -# Value > 0 : The period of time in seconds between execution of the audit on a particular node -integrity_audit_period_seconds=-1 - -#Automatic Policy Distribution -automatic_push=false - -#Diff of policies for Firewall feature -FW_GETURL= -FW_AUTHOURL= -FW_PROXY= -FW_PORT= - -#SMTP Server Details for Java Mail -onap_smtp_host= -onap_smtp_port=25 -onap_smtp_userName= -onap_smtp_password= -onap_smtp_emailExtension= -onap_application_name= - -#-----------------------ONAP-PORTAL-Properties---------------------- - -ONAP_REDIRECT_URL=http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/login.htm -ONAP_REST_URL=http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/auxapi -ONAP_UEB_URL_LIST= -ONAP_PORTAL_INBOX_NAME= -ONAP_UEB_APP_KEY= -ONAP_UEB_APP_SECRET= -ONAP_UEB_APP_MAILBOX_NAME= -APP_DISPLAY_NAME=ONAP Policy -ONAP_SHARED_CONTEXT_REST_URL=http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/context diff --git a/scripts/policy/config/pe/elk.conf b/scripts/policy/config/pe/elk.conf deleted file mode 100644 index a65fd17d..00000000 --- a/scripts/policy/config/pe/elk.conf +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2020 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. -# elasticsearch - -ELK_JMX_PORT=9995 \ No newline at end of file diff --git a/scripts/policy/config/pe/mysql.conf b/scripts/policy/config/pe/mysql.conf deleted file mode 100644 index 0f6ee8c7..00000000 --- a/scripts/policy/config/pe/mysql.conf +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2020 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. -# mysql scripts component installation configuration parameters - -# Path to mysql bin -MYSQL_BIN=/usr/local/mysql/bin - diff --git a/scripts/policy/config/pe/pap-tweaks.sh b/scripts/policy/config/pe/pap-tweaks.sh deleted file mode 100755 index 87c6d21d..00000000 --- a/scripts/policy/config/pe/pap-tweaks.sh +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/bash -# Copyright 2020 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. diff --git a/scripts/policy/config/pe/pap.conf b/scripts/policy/config/pe/pap.conf deleted file mode 100644 index 86f5a50c..00000000 --- a/scripts/policy/config/pe/pap.conf +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright 2020 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. -# pap component installation configuration parameters - -# tomcat specific parameters - -TOMCAT_JMX_PORT=9990 -TOMCAT_SHUTDOWN_PORT=9405 -SSL_HTTP_CONNECTOR_PORT=9091 -SSL_AJP_CONNECTOR_PORT=8380 -SSL_AJP_CONNECTOR_REDIRECT_PORT=8443 - -TOMCAT_X_MS_MB=512 -TOMCAT_X_MX_MB=512 - -# pap properties - -PAP_PDPS=${{POLICY_HOME}}/servers/pap/bin/pdps -PAP_URL=https://pap:9091/pap/ - -PAP_INITIATE_PDP=true -PAP_HEARTBEAT_INTERVAL=10000 -PAP_HEARTBEAT_TIMEOUT=10000 - -REST_ADMIN_DOMAIN=com -REST_ADMIN_REPOSITORY=repository -REST_ADMIN_WORKSPACE=workspace - -# PDP related properties - -PAP_PDP_URL=https://pdp:8081/pdp/ -PAP_PDP_HTTP_USER_ID=testpdp -PAP_PDP_HTTP_PASSWORD=alpha123 - -PAP_HTTP_USER_ID=testpap -PAP_HTTP_PASSWORD=alpha123 - -#new values added 10-21-2015 -PROP_PAP_TRANS_WAIT=500000 -PROP_PAP_TRANS_TIMEOUT=5000 -PROP_PAP_AUDIT_TIMEOUT=300000 -PROP_PAP_RUN_AUDIT_FLAG=true -PROP_PAP_AUDIT_FLAG=true - -PROP_PAP_INCOMINGNOTIFICATION_TRIES=4 - - -node_type=pap -resource_name=pap_1 -dependency_groups=paplp_1 -test_via_jmx=true - -# The (optional) period of time in seconds between executions of the integrity audit. -# Value < 0 : Audit does not run (default value if property is not present = -1) -# Value = 0 : Audit runs continuously -# Value > 0 : The period of time in seconds between execution of the audit on a particular node -integrity_audit_period_seconds=-1 diff --git a/scripts/policy/config/pe/paplp.conf b/scripts/policy/config/pe/paplp.conf deleted file mode 100644 index 647625cb..00000000 --- a/scripts/policy/config/pe/paplp.conf +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2020 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. -# JVM specific parameters -LOGPARSER_JMX_PORT=9996 -LOGPARSER_X_MS_MB=256 -LOGPARSER_X_MX_MB=256 - -SERVER=https://pap:9091/pap/ -LOGPATH=/var/log/onap/policy/pap/pap-rest.log -PARSERLOGPATH=${{POLICY_HOME}}/servers/paplp/bin/IntegrityMonitor.log - -node_type=logparser -# the java property is RESOURCE_NAME (uppercase), but the conf parameter is lowercase -resource_name=paplp_1 diff --git a/scripts/policy/config/pe/pdp-tweaks.sh b/scripts/policy/config/pe/pdp-tweaks.sh deleted file mode 100755 index 87c6d21d..00000000 --- a/scripts/policy/config/pe/pdp-tweaks.sh +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/bash -# Copyright 2020 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. diff --git a/scripts/policy/config/pe/pdp.conf b/scripts/policy/config/pe/pdp.conf deleted file mode 100644 index 0aa6b0b6..00000000 --- a/scripts/policy/config/pe/pdp.conf +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright 2020 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. -# pdp component installation configuration parameters - -# tomcat specific parameters - -TOMCAT_JMX_PORT=9991 -TOMCAT_SHUTDOWN_PORT=8087 -SSL_HTTP_CONNECTOR_PORT=8081 -SSL_AJP_CONNECTOR_PORT=8381 -SSL_AJP_CONNECTOR_REDIRECT_PORT=8443 - -TOMCAT_X_MS_MB=512 -TOMCAT_X_MX_MB=512 - -# pdp properties - -UEB_CLUSTER=mr.api.simpledemo.onap.org - -REST_PAP_URL=https://pap:9091/pap/ -REST_PDP_ID=https://pdp:8081/pdp/ -REST_PDP_CONFIG=${{POLICY_HOME}}/servers/pdp/bin/config -REST_PDP_WEBAPPS=${{POLICY_HOME}}/servers/pdp/webapps -REST_PDP_REGISTER=true -REST_PDP_REGISTER_SLEEP=15 -REST_PDP_REGISTER_RETRIES=-1 -REST_PDP_MAXCONTENT=999999999 - -# PDP related properties -PDP_HTTP_USER_ID=testpdp -PDP_HTTP_PASSWORD=alpha123 -PDP_PAP_PDP_HTTP_USER_ID=testpap -PDP_PAP_PDP_HTTP_PASSWORD=alpha123 - -node_type=pdp_xacml -resource_name=pdp_1 -dependency_groups=pdplp_1;brmsgw_1 -test_via_jmx=true - -# -# Notification Properties -# Notification type: websocket, ueb or dmaap... if left blank websocket is the default -PDP_NOTIFICATION_TYPE=websocket -PDP_UEB_CLUSTER= -PDP_UEB_TOPIC= -PDP_UEB_DELAY= -PDP_UEB_API_KEY= -PDP_UEB_API_SECRET= -PDP_DMAAP_AAF_LOGIN= -PDP_DMAAP_AAF_PASSWORD= - -#AAF Policy Name space -#Required only, when we use AAF -POLICY_AAF_NAMESPACE= -POLICY_AAF_RESOURCE= - -# Indeterminate resolution -DECISION_INDETERMINATE_RESPONSE=PERMIT diff --git a/scripts/policy/config/pe/pdplp.conf b/scripts/policy/config/pe/pdplp.conf deleted file mode 100644 index 4676b610..00000000 --- a/scripts/policy/config/pe/pdplp.conf +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2020 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. -# JVM specific parameters -LOGPARSER_JMX_PORT=9997 -LOGPARSER_X_MS_MB=256 -LOGPARSER_X_MX_MB=256 - -SERVER=https://pdp:8081/pdp/ -LOGPATH=/var/log/onap/policy/pdpx/pdp-rest.log -PARSERLOGPATH=${{POLICY_HOME}}/servers/pdplp/bin/IntegrityMonitor.log - -node_type=logparser -# the java property is RESOURCE_NAME (uppercase), but the conf parameter is lowercase -resource_name=pdplp_1 diff --git a/scripts/policy/config/pe/push-policies.sh b/scripts/policy/config/pe/push-policies.sh deleted file mode 100755 index 65013138..00000000 --- a/scripts/policy/config/pe/push-policies.sh +++ /dev/null @@ -1,506 +0,0 @@ -#! /bin/bash -x -# Copyright 2020 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. - -#########################################Upload BRMS Param Template########################################## - -echo "Upload BRMS Param Template" - -sleep 2 - -wget -O cl-amsterdam-template.drl https://git.onap.org/policy/drools-applications/plain/controlloop/templates/archetype-cl-amsterdam/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl - -sleep 2 - -curl -k -v --silent -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -F "file=@cl-amsterdam-template.drl" -F "importParametersJson={\"serviceName\":\"ClosedLoopControlName\",\"serviceType\":\"BRMSPARAM\"}" 'https://pdp:8081/pdp/api/policyEngineImport' - -echo "PRELOAD_POLICIES is $PRELOAD_POLICIES" - -if [ "$PRELOAD_POLICIES" == "false" ]; then - exit 0 -fi - -#########################################Create BRMS Param policies########################################## - -echo "Create BRMSParam Operational Policies" - -sleep 2 - -echo "Create BRMSParamvFirewall Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/html' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyConfigType": "BRMS_PARAM", - "policyName": "com.BRMSParamvFirewall", - "policyDescription": "BRMS Param vFirewall policy", - "policyScope": "com", - "attributes": { - "MATCHING": { - "controller" : "amsterdam" - }, - "RULE": { - "templateName": "ClosedLoopControlName", - "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", - "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a%0D%0A++trigger_policy%3A+unique-policy-id-1-modifyConfig%0D%0A++timeout%3A+1200%0D%0A++abatement%3A+false%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-1-modifyConfig%0D%0A++++name%3A+modify+packet+gen+config%0D%0A++++description%3A%0D%0A++++actor%3A+APPC%0D%0A++++recipe%3A+ModifyConfig%0D%0A++++target%3A%0D%0A++++++%23+TBD+-+Cannot+be+known+until+instantiation+is+done%0D%0A++++++resourceID%3A+Eace933104d443b496b8.nodes.heat.vpg%0D%0A++++++type%3A+VNF%0D%0A++++retry%3A+0%0D%0A++++timeout%3A+300%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" - } - } -}' 'https://pdp:8081/pdp/api/createPolicy' - -sleep 2 - -echo "Create BRMSParamvDNS Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/html' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyConfigType": "BRMS_PARAM", - "policyName": "com.BRMSParamvDNS", - "policyDescription": "BRMS Param vDNS policy", - "policyScope": "com", - "attributes": { - "MATCHING": { - "controller" : "amsterdam" - }, - "RULE": { - "templateName": "ClosedLoopControlName", - "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - "controlLoopYaml": "controlLoop%3A%0A++version%3A+2.0.0%0A++controlLoopName%3A+ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3%0A++trigger_policy%3A+unique-policy-id-1-scale-up%0A++timeout%3A+1200%0A++abatement%3A+false%0Apolicies%3A%0A++-+id%3A+unique-policy-id-1-scale-up%0A++++name%3A+Create+a+new+VF+Module%0A++++description%3A%0A++++actor%3A+SO%0A++++recipe%3A+VF+Module+Create%0A++++target%3A%0A++++++type%3A+VNF%0A++++payload%3A%0A++++++requestParameters%3A+%27%7B%22usePreload%22%3Atrue%2C%22userParams%22%3A%5B%5D%7D%27%0A++++++configurationParameters%3A+%27%5B%7B%22ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B9%5D%22%2C%22oam-ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B16%5D%22%2C%22enabled%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B23%5D%22%7D%5D%27%0A++++retry%3A+0%0A++++timeout%3A+1200%0A++++success%3A+final_success%0A++++failure%3A+final_failure%0A++++failure_timeout%3A+final_failure_timeout%0A++++failure_retries%3A+final_failure_retries%0A++++failure_exception%3A+final_failure_exception%0A++++failure_guard%3A+final_failure_guard" - } - } -}' 'https://pdp:8081/pdp/api/createPolicy' - -sleep 2 - -echo "Create BRMSParamVOLTE Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/html' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyConfigType": "BRMS_PARAM", - "policyName": "com.BRMSParamVOLTE", - "policyDescription": "BRMS Param VOLTE policy", - "policyScope": "com", - "attributes": { - "MATCHING": { - "controller" : "amsterdam" - }, - "RULE": { - "templateName": "ClosedLoopControlName", - "closedLoopControlName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b", - "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b%0D%0A++trigger_policy%3A+unique-policy-id-1-restart%0D%0A++timeout%3A+3600%0D%0A++abatement%3A+false%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-1-restart%0D%0A++++name%3A+Restart+the+VM%0D%0A++++description%3A%0D%0A++++actor%3A+VFC%0D%0A++++recipe%3A+Restart%0D%0A++++target%3A%0D%0A++++++type%3A+VM%0D%0A++++retry%3A+3%0D%0A++++timeout%3A+1200%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" - } - } -}' 'https://pdp:8081/pdp/api/createPolicy' - -sleep 2 - -echo "Create BRMSParamvCPE Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/html' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyConfigType": "BRMS_PARAM", - "policyName": "com.BRMSParamvCPE", - "policyDescription": "BRMS Param vCPE policy", - "policyScope": "com", - "attributes": { - "MATCHING": { - "controller" : "amsterdam" - }, - "RULE": { - "templateName": "ClosedLoopControlName", - "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", - "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e%0D%0A++trigger_policy%3A+unique-policy-id-1-restart%0D%0A++timeout%3A+3600%0D%0A++abatement%3A+true%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-1-restart%0D%0A++++name%3A+Restart+the+VM%0D%0A++++description%3A%0D%0A++++actor%3A+APPC%0D%0A++++recipe%3A+Restart%0D%0A++++target%3A%0D%0A++++++type%3A+VM%0D%0A++++retry%3A+3%0D%0A++++timeout%3A+1200%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" - } - } -}' 'https://pdp:8081/pdp/api/createPolicy' - -sleep 2 - -echo "Create BRMSParamvPCI Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/html' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyConfigType": "BRMS_PARAM", - "policyName": "com.BRMSParamvPCI", - "policyDescription": "BRMS Param vPCI policy", - "policyScope": "com", - "attributes": { - "MATCHING": { - "controller" : "casablanca" - }, - "RULE": { - "templateName": "ClosedLoopControlName", - "closedLoopControlName": "ControlLoop-vPCI-fb41f388-a5f2-11e8-98d0-529269fb1459", - "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+3.0.0%0D%0A++controlLoopName%3A+ControlLoop-vPCI-fb41f388-a5f2-11e8-98d0-529269fb1459%0D%0A++trigger_policy%3A+unique-policy-id-123-modifyconfig%0D%0A++timeout%3A+1200%0D%0A++abatement%3A+false%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-123-modifyconfig%0D%0A++++name%3A+modify+PCI+config%0D%0A++++description%3A%0D%0A++++actor%3A+SDNR%0D%0A++++recipe%3A+ModifyConfig%0D%0A++++target%3A%0D%0A++++++%23+These+fields+are+not+used%0D%0A++++++resourceID%3A+Eace933104d443b496b8.nodes.heat.vpg%0D%0A++++++type%3A+VNF%0D%0A++++retry%3A+0%0D%0A++++timeout%3A+300%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" - } - } -}' 'https://pdp:8081/pdp/api/createPolicy' - -sleep 2 - -echo "Create BRMSParamCCVPN Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/html' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyConfigType": "BRMS_PARAM", - "policyName": "com.BRMSParamCCVPN", - "policyDescription": "BRMS Param CCVPN policy", - "policyScope": "com", - "attributes": { - "MATCHING": { - "controller" : "amsterdam" - }, - "RULE": { - "templateName": "ClosedLoopControlName", - "closedLoopControlName": "ControlLoop-CCVPN-2179b738-fd36-4843-a71a-a8c24c70c66b", - "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-CCVPN-2179b738-fd36-4843-a71a-a8c24c70c66b%0D%0A++trigger_policy%3A+unique-policy-id-16-Reroute%0D%0A++timeout%3A+3600%0D%0A++abatement%3A+false%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-16-Reroute%0D%0A++++name%3A+Connectivity Reroute%0D%0A++++description%3A%0D%0A++++actor%3A+SDNC%0D%0A++++recipe%3A+Reroute%0D%0A++++target%3A%0D%0A++++++type%3A+VM%0D%0A++++retry%3A+3%0D%0A++++timeout%3A+1200%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" - } - } -}' 'https://pdp:8081/pdp/api/createPolicy' - -#########################################Create Micro Service Config policies########################################## - -echo "Create MicroService Config Policies" - -sleep 2 - -echo "Create MicroServicevFirewall Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "configBody": "{ \"service\": \"tca_policy\", \"location\": \"SampleServiceLocation\", \"uuid\": \"test\", \"policyName\": \"MicroServicevFirewall\", \"description\": \"MicroService vFirewall Policy\", \"configName\": \"SampleConfigName\", \"templateVersion\": \"OpenSource.version.1\", \"version\": \"1.1.0\", \"priority\": \"1\", \"policyScope\": \"resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\", \"riskType\": \"SampleRiskType\", \"riskLevel\": \"1\", \"guard\": \"False\", \"content\": { \"tca_policy\": { \"domain\": \"measurementsForVfScaling\", \"metricsPerEventName\": [{ \"eventName\": \"vFirewallBroadcastPackets\", \"controlLoopSchemaType\": \"VNF\", \"policyScope\": \"DCAE\", \"policyName\": \"DCAE.Config_tca-hi-lo\", \"policyVersion\": \"v0.0.1\", \"thresholds\": [{ \"closedLoopControlName\": \"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\", \"version\": \"1.0.2\", \"fieldPath\": \"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta\", \"thresholdValue\": 300, \"direction\": \"LESS_OR_EQUAL\", \"severity\": \"MAJOR\", \"closedLoopEventStatus\": \"ONSET\" }, { \"closedLoopControlName\": \"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\", \"version\": \"1.0.2\", \"fieldPath\": \"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta\", \"thresholdValue\": 700, \"direction\": \"GREATER_OR_EQUAL\", \"severity\": \"CRITICAL\", \"closedLoopEventStatus\": \"ONSET\" } ] }] } } }", - "policyConfigType": "MicroService", - "policyName": "com.MicroServicevFirewall", - "onapName": "DCAE" -}' 'https://pdp:8081/pdp/api/createPolicy' - - -sleep 2 - -echo "Create MicroServicevDNS Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "configBody": "{ \"service\": \"tca_policy\", \"location\": \"SampleServiceLocation\", \"uuid\": \"test\", \"policyName\": \"MicroServicevDNS\", \"description\": \"MicroService vDNS Policy\", \"configName\": \"SampleConfigName\", \"templateVersion\": \"OpenSource.version.1\", \"version\": \"1.1.0\", \"priority\": \"1\", \"policyScope\": \"resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\", \"riskType\": \"SampleRiskType\", \"riskLevel\": \"1\", \"guard\": \"False\", \"content\": { \"tca_policy\": { \"domain\": \"measurementsForVfScaling\", \"metricsPerEventName\": [{ \"eventName\": \"vLoadBalancer\", \"controlLoopSchemaType\": \"VM\", \"policyScope\": \"DCAE\", \"policyName\": \"DCAE.Config_tca-hi-lo\", \"policyVersion\": \"v0.0.1\", \"thresholds\": [{ \"closedLoopControlName\": \"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\", \"version\": \"1.0.2\", \"fieldPath\": \"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta\", \"thresholdValue\": 300, \"direction\": \"GREATER_OR_EQUAL\", \"severity\": \"CRITICAL\", \"closedLoopEventStatus\": \"ONSET\" }] }] } } }", - "policyConfigType": "MicroService", - "policyName": "com.MicroServicevDNS", - "onapName": "DCAE" -}' 'https://pdp:8081/pdp/api/createPolicy' - - -sleep 2 - -echo "Create MicroServicevCPE Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "configBody": "{ \"service\": \"tca_policy\", \"location\": \"SampleServiceLocation\", \"uuid\": \"test\", \"policyName\": \"MicroServicevCPE\", \"description\": \"MicroService vCPE Policy\", \"configName\": \"SampleConfigName\", \"templateVersion\": \"OpenSource.version.1\", \"version\": \"1.1.0\", \"priority\": \"1\", \"policyScope\": \"resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e\", \"riskType\": \"SampleRiskType\", \"riskLevel\": \"1\", \"guard\": \"False\", \"content\": { \"tca_policy\": { \"domain\": \"measurementsForVfScaling\", \"metricsPerEventName\": [{ \"eventName\": \"Measurement_vGMUX\", \"controlLoopSchemaType\": \"VNF\", \"policyScope\": \"DCAE\", \"policyName\": \"DCAE.Config_tca-hi-lo\", \"policyVersion\": \"v0.0.1\", \"thresholds\": [{ \"closedLoopControlName\": \"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e\", \"version\": \"1.0.2\", \"fieldPath\": \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\", \"thresholdValue\": 0, \"direction\": \"EQUAL\", \"severity\": \"MAJOR\", \"closedLoopEventStatus\": \"ABATED\" }, { \"closedLoopControlName\": \"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e\", \"version\": \"1.0.2\", \"fieldPath\": \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\", \"thresholdValue\": 0, \"direction\": \"GREATER\", \"severity\": \"CRITICAL\", \"closedLoopEventStatus\": \"ONSET\" }] }] } } }", - "policyConfigType": "MicroService", - "policyName": "com.MicroServicevCPE", - "onapName": "DCAE" -}' 'https://pdp:8081/pdp/api/createPolicy' - -#########################################Create SDNC Naming Policies########################################## - -echo "Create SDNC Naming Policies" - -sleep 2 - -echo "Create SDNC vFW Naming Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "configBody": "{\"service\":\"SDNC-GenerateName\",\"version\":\"CSIT\",\"content\":{\"policy-instance-name\":\"ONAP_VFW_NAMING_TIMESTAMP\",\"naming-models\":[{\"naming-properties\":[{\"property-name\":\"AIC_CLOUD_REGION\"},{\"property-name\":\"nfRole\"},{\"property-name\":\"TIMESTAMP\"},{\"property-value\":\"_\",\"property-name\":\"DELIMITER\"}],\"naming-type\":\"VNF\",\"nfRole\":\"vFW\",\"naming-recipe\":\"AIC_CLOUD_REGION|DELIMITER|nfRole|DELIMITER|TIMESTAMP\"},{\"naming-properties\":[{\"property-name\":\"VNF_NAME\"},{\"property-name\":\"SEQUENCE\",\"increment-sequence\":{\"max\":\"zzz\",\"scope\":\"ENTIRETY\",\"start-value\":\"001\",\"length\":\"3\",\"increment\":\"1\",\"sequence-type\":\"alpha-numeric\"}},{\"property-name\":\"NFC_NAMING_CODE\"},{\"property-value\":\"_\",\"property-name\":\"DELIMITER\"}],\"naming-type\":\"VNFC\",\"nfRole\":\"vFW\",\"naming-recipe\":\"VNF_NAME|DELIMITER|NFC_NAMING_CODE|DELIMITER|SEQUENCE\"},{\"naming-properties\":[{\"property-name\":\"VNF_NAME\"},{\"property-value\":\"_\",\"property-name\":\"DELIMITER\"},{\"property-name\":\"VF_MODULE_LABEL\"},{\"property-name\":\"VF_MODULE_TYPE\"},{\"property-name\":\"SEQUENCE\",\"increment-sequence\":{\"max\":\"zzz\",\"scope\":\"PRECEEDING\",\"start-value\":\"01\",\"length\":\"3\",\"increment\":\"1\",\"sequence-type\":\"alpha-numeric\"}}],\"naming-type\":\"VF-MODULE\",\"nfRole\":\"vFW\",\"naming-recipe\":\"VNF_NAME|DELIMITER|VF_MODULE_LABEL|DELIMITER|VF_MODULE_TYPE|DELIMITER|SEQUENCE\"},{\"naming-properties\":[{\"property-name\":\"VNF_NAME\"}],\"naming-type\":\"KEY\",\"nfRole\":\"vFW\",\"naming-recipe\":\"VNF_NAME\"},{\"naming-properties\":[{\"property-name\":\"VNF_NAME\"},{\"property-value\":\"protected\",\"property-name\":\"CONSTANT\"},{\"property-value\":\"_\",\"property-name\":\"DELIMITER\"}],\"naming-type\":\"protected_private_net_id\",\"nfRole\":\"vFW\",\"naming-recipe\":\"VNF_NAME|DELIMITER|CONSTANT\"},{\"naming-properties\":[{\"property-name\":\"VNF_NAME\"},{\"property-value\":\"unprotected\",\"property-name\":\"CONSTANT\"},{\"property-value\":\"_\",\"property-name\":\"DELIMITER\"}],\"naming-type\":\"unprotected_private_net_id\",\"nfRole\":\"vFW\",\"naming-recipe\":\"VNF_NAME|DELIMITER|CONSTANT\"}]}}", - "policyName": "SDNC_Policy.ONAP_VFW_NAMING_TIMESTAMP", - "policyConfigType": "MicroService", - "onapName": "SDNC", - "riskLevel": "4", - "riskType": "test", - "guard": "false", - "priority": "4", - "description": "ONAP_VFW_NAMING_TIMESTAMP" - }' 'https://pdp:8081/pdp/api/createPolicy' - - sleep 2 - - echo "Create SDNC vPG Naming Policy" - curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "configBody": "{\"service\":\"SDNC-GenerateName\",\"version\":\"CSIT\",\"content\":{\"policy-instance-name\":\"ONAP_VPG_NAMING_TIMESTAMP\",\"naming-models\":[{\"naming-properties\":[{\"property-name\":\"AIC_CLOUD_REGION\"},{\"property-name\":\"nfRole\"},{\"property-name\":\"TIMESTAMP\"},{\"property-value\":\"_\",\"property-name\":\"DELIMITER\"}],\"naming-type\":\"VNF\",\"nfRole\":\"vPG\",\"naming-recipe\":\"AIC_CLOUD_REGION|DELIMITER|nfRole|DELIMITER|TIMESTAMP\"},{\"naming-properties\":[{\"property-name\":\"VNF_NAME\"},{\"property-name\":\"SEQUENCE\",\"increment-sequence\":{\"max\":\"zzz\",\"scope\":\"ENTIRETY\",\"start-value\":\"001\",\"length\":\"3\",\"increment\":\"1\",\"sequence-type\":\"alpha-numeric\"}},{\"property-name\":\"NFC_NAMING_CODE\"},{\"property-value\":\"_\",\"property-name\":\"DELIMITER\"}],\"naming-type\":\"VNFC\",\"nfRole\":\"vPG\",\"naming-recipe\":\"VNF_NAME|DELIMITER|NFC_NAMING_CODE|DELIMITER|SEQUENCE\"},{\"naming-properties\":[{\"property-name\":\"VNF_NAME\"},{\"property-value\":\"_\",\"property-name\":\"DELIMITER\"},{\"property-name\":\"VF_MODULE_LABEL\"},{\"property-name\":\"VF_MODULE_TYPE\"},{\"property-name\":\"SEQUENCE\",\"increment-sequence\":{\"max\":\"zzz\",\"scope\":\"PRECEEDING\",\"start-value\":\"01\",\"length\":\"3\",\"increment\":\"1\",\"sequence-type\":\"alpha-numeric\"}}],\"naming-type\":\"VF-MODULE\",\"nfRole\":\"vPG\",\"naming-recipe\":\"VNF_NAME|DELIMITER|VF_MODULE_LABEL|DELIMITER|VF_MODULE_TYPE|DELIMITER|SEQUENCE\"},{\"naming-properties\":[{\"property-name\":\"VNF_NAME\"}],\"naming-type\":\"KEY\",\"nfRole\":\"vPG\",\"naming-recipe\":\"VNF_NAME\"},{\"naming-properties\":[{\"property-name\":\"VNF_NAME\"},{\"property-value\":\"protected\",\"property-name\":\"CONSTANT\"},{\"property-value\":\"_\",\"property-name\":\"DELIMITER\"}],\"naming-type\":\"protected_private_net_id\",\"nfRole\":\"vPG\",\"naming-recipe\":\"VNF_NAME|DELIMITER|CONSTANT\"},{\"naming-properties\":[{\"property-name\":\"VNF_NAME\"},{\"property-value\":\"unprotected\",\"property-name\":\"CONSTANT\"},{\"property-value\":\"_\",\"property-name\":\"DELIMITER\"}],\"naming-type\":\"unprotected_private_net_id\",\"nfRole\":\"vPG\",\"naming-recipe\":\"VNF_NAME|DELIMITER|CONSTANT\"}]}}", - "policyName": "SDNC_Policy.ONAP_VPG_NAMING_TIMESTAMP", - "policyConfigType": "MicroService", - "onapName": "SDNC", - "riskLevel": "4", - "riskType": "test", - "guard": "false", - "priority": "4", - "description": "ONAP_VPG_NAMING_TIMESTAMP" - }' 'https://pdp:8081/pdp/api/createPolicy' - -#########################################Creating OOF PCI Policies########################################## -sleep 2 - -echo "Create MicroServicevPCI Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "configBody": "{ \"service\": \"tca_policy\", \"location\": \"SampleServiceLocation_pci\", \"uuid\": \"test_pci\", \"policyName\": \"MicroServicevPCI\", \"description\": \"MicroService vPCI Policy\", \"configName\": \"SampleConfigName\", \"templateVersion\": \"OpenSource.version.1\", \"version\": \"1.1.0\", \"priority\": \"1\", \"policyScope\": \"resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=ControlLoop-vPCI-fb41f388-a5f2-11e8-98d0-529269fb1459\", \"riskType\": \"SampleRiskType\", \"riskLevel\": \"1\", \"guard\": \"False\", \"content\": { \"tca_policy\": { \"domain\": \"measurementsForVfScaling\", \"metricsPerEventName\": [{ \"eventName\": \"vFirewallBroadcastPackets\", \"controlLoopSchemaType\": \"VNF\", \"policyScope\": \"DCAE\", \"policyName\": \"DCAE.Config_tca-hi-lo\", \"policyVersion\": \"v0.0.1\", \"thresholds\": [{ \"closedLoopControlName\": \"ControlLoop-vPCI-fb41f388-a5f2-11e8-98d0-529269fb1459\", \"version\": \"1.0.2\", \"fieldPath\": \"$.event.executePolicy\", \"thresholdValue\": 1, \"direction\": \"GREATER_OR_EQUAL\", \"severity\": \"MAJOR\", \"closedLoopEventStatus\": \"ONSET\" } ] }] } } }", - "policyConfigType": "MicroService", - "policyName": "com.MicroServicevPCI", - "onapName": "DCAE" -}' 'https://pdp:8081/pdp/api/createPolicy' - -sleep 2 - -echo "Create PCI MS Config Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyName": "com.PCIMS_CONFIG_POLICY", - "configBody": "{ \"PCI_NEIGHBOR_CHANGE_CLUSTER_TIMEOUT_IN_SECS\":60, \"PCI_MODCONFIG_POLICY_NAME\":\"ControlLoop-vPCI-fb41f388-a5f2-11e8-98d0-529269fb1459\", \"PCI_OPTMIZATION_ALGO_CATEGORY_IN_OOF\":\"OOF-PCI-OPTIMIZATION\", \"PCI_SDNR_TARGET_NAME\":\"SDNR\" }", - "policyType": "Config", - "attributes" : { "matching" : { "key1" : "value1" } }, - "policyConfigType": "Base", - "onapName": "DCAE", - "configName": "PCIMS_CONFIG_POLICY", - "configBodyType": "JSON" -}' 'https://pdp:8081/pdp/api/createPolicy' - -sleep 2 - -echo "Create OOF Config Policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyName": "com.OOF_PCI_CONFIG_POLICY", - "configBody": "{ \"ALGO_CATEGORY\":\"OOF-PCI-OPTIMIZATION\", \"PCI_OPTMIZATION_ALGO_NAME\":\"OOF-PCI-OPTIMIZATION-LEVEL1\", \"PCI_OPTIMIZATION_NW_CONSTRAINT\":\"MAX5PCICHANGESONLY\", \"PCI_OPTIMIZATION_PRIORITY\": 2, \"PCI_OPTIMIZATION_TIME_CONSTRAINT\":\"ONLYATNIGHT\" }", - "attributes" : { "matching" : { "key1" : "value1" } }, - "policyType": "Config", - "policyConfigType": "Base", - "onapName": "DCAE", - "configName": "OOF_PCI_CONFIG_POLICY", - "configBodyType": "JSON" -}' 'https://pdp:8081/pdp/api/createPolicy' - -#########################################Creating Decision Guard policies######################################### - -sleep 2 - -echo "Creating Decision Guard policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyClass": "Decision", - "policyName": "com.AllPermitGuard", - "policyDescription": "Testing all Permit YAML Guard Policy", - "onapName": "PDPD", - "ruleProvider": "GUARD_YAML", - "attributes": { - "MATCHING": { - "actor": ".*", - "recipe": ".*", - "targets": ".*", - "clname": ".*", - "limit": "10", - "timeWindow": "1", - "timeUnits": "minute", - "guardActiveStart": "00:00:01-05:00", - "guardActiveEnd": "23:59:59-05:00" - } - } -}' 'https://pdp:8081/pdp/api/createPolicy' - -sleep 2 - -echo "Creating Decision vDNS Guard - Frequency Limiter policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyClass": "Decision", - "policyName": "com.vDNS_Frequency", - "policyDescription": "Limit vDNS Scale Up over time period", - "onapName": "PDPD", - "ruleProvider": "GUARD_YAML", - "attributes": { - "MATCHING": { - "actor": "SO", - "recipe": "scaleOut", - "targets": ".*", - "clname": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - "limit": "1", - "timeWindow": "10", - "timeUnits": "minute", - "guardActiveStart": "00:00:01-05:00", - "guardActiveEnd": "23:59:59-05:00" - } - } -}' 'https://pdp:8081/pdp/api/createPolicy' - -sleep 2 - -echo "Creating Decision vDNS Guard - Min/Max policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "policyClass": "Decision", - "policyName": "com.vDNS_MinMax", - "policyDescription": "Ensure number of instances within a range", - "onapName": "SampleDemo", - "ruleProvider": "GUARD_MIN_MAX", - "attributes": { - "MATCHING": { - "actor": "SO", - "recipe": "scaleOut", - "targets": ".*", - "clname": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - "min": "1", - "max": "5", - "guardActiveStart": "00:00:01-05:00", - "guardActiveEnd": "23:59:59-05:00" - } - } -}' 'https://pdp:8081/pdp/api/createPolicy' - -#########################################Push Decision policy######################################### - -sleep 2 - -echo "Push Decision policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.AllPermitGuard", - "policyType": "DECISION" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 2 - -echo "Push Decision policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.vDNS_Frequency", - "policyType": "DECISION" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 2 - -echo "Push Decision policy" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.vDNS_MinMax", - "policyType": "DECISION" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -#########################################Pushing BRMS Param policies########################################## - -echo "Pushing BRMSParam Operational policies" - -sleep 2 - -echo "pushPolicy : PUT : com.BRMSParamvFirewall" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.BRMSParamvFirewall", - "policyType": "BRMS_Param" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 2 - -echo "pushPolicy : PUT : com.BRMSParamvDNS" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.BRMSParamvDNS", - "policyType": "BRMS_Param" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 2 - -echo "pushPolicy : PUT : com.BRMSParamVOLTE" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.BRMSParamVOLTE", - "policyType": "BRMS_Param" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 2 - -echo "pushPolicy : PUT : com.BRMSParamvCPE" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.BRMSParamvCPE", - "policyType": "BRMS_Param" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 2 - -echo "pushPolicy : PUT : com.BRMSParamvPCI" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.BRMSParamvPCI", - "policyType": "BRMS_Param" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 2 - -echo "pushPolicy : PUT : com.BRMSParamCCVPN" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.BRMSParamCCVPN", - "policyType": "BRMS_Param" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -#########################################Pushing MicroService Config policies########################################## - -echo "Pushing MicroService Config policies" - -sleep 2 - -echo "pushPolicy : PUT : com.MicroServicevFirewall" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.MicroServicevFirewall", - "policyType": "MicroService" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 10 - -echo "pushPolicy : PUT : com.MicroServicevDNS" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.MicroServicevDNS", - "policyType": "MicroService" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 10 - -echo "pushPolicy : PUT : com.MicroServicevCPE" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.MicroServicevCPE", - "policyType": "MicroService" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -#########################################Pushing SDNC Naming Policies########################################## -echo "Pushing SDNC Naming Policies" - -sleep 2 - -echo "pushPolicy : PUT : SDNC_Policy.ONAP_VFW_NAMING_TIMESTAMP" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "SDNC_Policy.ONAP_VFW_NAMING_TIMESTAMP", - "policyType": "MicroService" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 10 - -echo "pushPolicy : PUT : SDNC_Policy.ONAP_VPG_NAMING_TIMESTAMP" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "SDNC_Policy.ONAP_VPG_NAMING_TIMESTAMP", - "policyType": "MicroService" -}' 'https://pdp:8081/pdp/api/pushPolicy' - - -#########################################Pushing OOF PCI Policies########################################## -sleep 10 - -echo "pushPolicy : PUT : com.MicroServicevPCI" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.MicroServicevPCI", - "policyType": "MicroService" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 10 - -echo "pushPolicy : PUT : com.PCIMS_CONFIG_POLICY" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.PCIMS_CONFIG_POLICY", - "policyType": "Base" -}' 'https://pdp:8081/pdp/api/pushPolicy' - -sleep 10 - -echo "pushPolicy : PUT : com.OOF_PCI_CONFIG_POLICY" -curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ - "pdpGroup": "default", - "policyName": "com.OOF_PCI_CONFIG_POLICY", - "policyType": "Base" -}' 'https://pdp:8081/pdp/api/pushPolicy' diff --git a/scripts/policy/config/sim-all/simParameters.json b/scripts/policy/config/sim-all/simParameters.json index e98acc03..4b009b6f 100644 --- a/scripts/policy/config/sim-all/simParameters.json +++ b/scripts/policy/config/sim-all/simParameters.json @@ -1,8 +1,7 @@ { "dmaapProvider": { "name": "DMaaP simulator", - "topicSweepSec": 300, - "restServerParameters": { } + "topicSweepSec": 300 }, "restServers": [ { @@ -94,5 +93,17 @@ "sink": "APPC-LCM-WRITE", "source": "APPC-LCM-READ" } - ] + ], + "grpcServer": { + "name": "CDS simulator", + "providerClass": "org.onap.policy.simulators.CdsSimulator", + "host": "0.0.0.0", + "port": 6680, + "timeout": 30, + "username": "ccsdkapps", + "password": "ccsdkapps", + "resourceLocation": "org/onap/policy/simulators/cds/", + "successRepeatCount": 0, + "requestedResponseDelayMs": 0 + } } diff --git a/scripts/policy/drools-apps/custom/xacmlDefaultConfig.json b/scripts/policy/config/xacml-pdp/defaultConfig.json similarity index 100% rename from scripts/policy/drools-apps/custom/xacmlDefaultConfig.json rename to scripts/policy/config/xacml-pdp/defaultConfig.json diff --git a/scripts/policy/detmVers.sh b/scripts/policy/detmVers.sh new file mode 100644 index 00000000..d37b4792 --- /dev/null +++ b/scripts/policy/detmVers.sh @@ -0,0 +1,80 @@ +# ============LICENSE_START==================================================== +# Copyright (C) 2020 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. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END====================================================== + +SCRIPTS="${SCRIPTS-scripts}" + +source ${SCRIPTS}/policy/config/policy-csit.conf +export POLICY_MARIADB_VER + +echo POLICY_MARIADB_VER=${POLICY_MARIADB_VER} + +POLICY_MODELS_VERSION=$( + curl -q --silent \ + https://git.onap.org/policy/models/plain/pom.xml?h=${GERRIT_BRANCH} | + xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -) +export POLICY_MODELS_VERSION=${POLICY_MODELS_VERSION:0:3}-SNAPSHOT-latest +echo POLICY_MODELS_VERSION=${POLICY_MODELS_VERSION} + +POLICY_API_VERSION=$( + curl -q --silent \ + https://git.onap.org/policy/api/plain/pom.xml?h=${GERRIT_BRANCH} | + xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -) +export POLICY_API_VERSION=${POLICY_API_VERSION:0:3}-SNAPSHOT-latest +echo POLICY_API_VERSION=${POLICY_API_VERSION} + +POLICY_PAP_VERSION=$( + curl -q --silent \ + https://git.onap.org/policy/pap/plain/pom.xml?h=${GERRIT_BRANCH} | + xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -) +export POLICY_PAP_VERSION=${POLICY_PAP_VERSION:0:3}-SNAPSHOT-latest +echo POLICY_PAP_VERSION=${POLICY_PAP_VERSION} + +POLICY_XACML_PDP_VERSION=$( + curl -q --silent \ + https://git.onap.org/policy/xacml-pdp/plain/pom.xml?h=${GERRIT_BRANCH} | + xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -) +export POLICY_XACML_PDP_VERSION=${POLICY_XACML_PDP_VERSION:0:3}-SNAPSHOT-latest +echo POLICY_XACML_PDP_VERSION=${POLICY_XACML_PDP_VERSION} + +POLICY_DROOLS_VERSION=$( + curl -q --silent \ + https://git.onap.org/policy/drools-pdp/plain/pom.xml?h=${GERRIT_BRANCH} | + xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -) +export POLICY_DROOLS_VERSION=${POLICY_DROOLS_VERSION:0:3}-SNAPSHOT-latest +echo POLICY_DROOLS_VERSION=${POLICY_DROOLS_VERSION} + +POLICY_DROOLS_APPS_VERSION=$( + curl -q --silent \ + https://git.onap.org/policy/drools-applications/plain/pom.xml?h=${GERRIT_BRANCH} | + xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -) +export POLICY_DROOLS_APPS_VERSION=${POLICY_DROOLS_APPS_VERSION:0:3}-SNAPSHOT-latest +echo POLICY_DROOLS_APPS_VERSION=${POLICY_DROOLS_APPS_VERSION} + +POLICY_APEX_PDP_VERSION=$( + curl -q --silent \ + https://git.onap.org/policy/apex-pdp/plain/pom.xml?h=${GERRIT_BRANCH} | + xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -) +export POLICY_APEX_PDP_VERSION=${POLICY_APEX_PDP_VERSION:0:3}-SNAPSHOT-latest +echo POLICY_APEX_PDP_VERSION=${POLICY_APEX_PDP_VERSION} + +POLICY_DISTRIBUTION_VERSION=$( + curl -q --silent \ + https://git.onap.org/policy/distribution/plain/pom.xml?h=${GERRIT_BRANCH} | + xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -) +export POLICY_DISTRIBUTION_VERSION=${POLICY_DISTRIBUTION_VERSION:0:3}-SNAPSHOT-latest +echo POLICY_DISTRIBUTION_VERSION=${POLICY_DISTRIBUTION_VERSION} diff --git a/scripts/policy/docker-compose-all.yml b/scripts/policy/docker-compose-all.yml new file mode 100644 index 00000000..55044c91 --- /dev/null +++ b/scripts/policy/docker-compose-all.yml @@ -0,0 +1,190 @@ +# +# ===========LICENSE_START==================================================== +# Copyright (C) 2020 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===================================================== +# +version: '2' +services: + mariadb: + image: mariadb:${POLICY_MARIADB_VER} + container_name: mariadb + hostname: mariadb + command: ['--lower-case-table-names=1', '--wait_timeout=28800'] + env_file: config/db/db.conf + volumes: + - ./config/db:/docker-entrypoint-initdb.d:ro + expose: + - 3306 + policy.api.simpledemo.onap.org: + image: nexus3.onap.org:10001/onap/policy-models-simulator:${POLICY_MODELS_VERSION} + container_name: policy.api.simpledemo.onap.org + hostname: policy.api.simpledemo.onap.org + volumes: + - ./config/sim-all:/opt/app/policy/simulators/etc/mounted:ro + expose: + - 6666 + - 6668 + - 6669 + - 6670 + - 3905 + api: + image: nexus3.onap.org:10001/onap/policy-api:${POLICY_API_VERSION} + container_name: policy-api + depends_on: + - mariadb + hostname: policy-api + expose: + - 6969 + volumes: + - ./wait_for_port.sh:/opt/app/policy/api/bin/wait_for_port.sh:ro + entrypoint: ./wait_for_port.sh + command: [ + '-c', 'bash ./policy-api.sh', + 'mariadb', '3306' + ] + pap: + image: nexus3.onap.org:10001/onap/policy-pap:${POLICY_PAP_VERSION} + container_name: policy-pap + depends_on: + - mariadb + - policy.api.simpledemo.onap.org + - api + hostname: policy-pap + expose: + - 6969 + volumes: + - ./config/pap/defaultConfig.json:/opt/app/policy/pap/etc/defaultConfig.json:ro + - ./wait_for_port.sh:/opt/app/policy/pap/bin/wait_for_port.sh:ro + entrypoint: ./wait_for_port.sh + command: [ + '-c', 'bash ./policy-pap.sh', + 'mariadb', '3306', + 'policy.api.simpledemo.onap.org', '3905', + 'api', '6969' + ] + xacml-pdp: + image: nexus3.onap.org:10001/onap/policy-xacml-pdp:${POLICY_XACML_PDP_VERSION} + container_name: policy-xacml-pdp + depends_on: + - mariadb + - policy.api.simpledemo.onap.org + - pap + hostname: policy-xacml-pdp + expose: + - 6969 + volumes: + - ./config/xacml-pdp/defaultConfig.json:/opt/app/policy/pdpx/etc/defaultConfig.json:ro + - ./wait_for_port.sh:/opt/app/policy/pdpx/bin/wait_for_port.sh:ro + entrypoint: ./wait_for_port.sh + command: [ + '-c', 'bash ./policy-pdpx.sh', + 'mariadb', '3306', + 'policy.api.simpledemo.onap.org', '3905', + 'pap', '6969' + ] + drools: + image: nexus3.onap.org:10001/onap/policy-drools:${POLICY_DROOLS_VERSION} + container_name: drools + depends_on: + - mariadb + - policy.api.simpledemo.onap.org + - pap + hostname: drools + expose: + - 6969 + - 9696 + volumes: + - ./config/drools/custom:/tmp/policy-install/config:ro + - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro + env_file: + - config/drools/env/base.conf + entrypoint: /opt/app/policy/bin/wait_for_port.sh + command: [ + '-c', '/opt/app/policy/bin/pdpd-entrypoint.sh boot', + 'mariadb', '3306', + 'policy.api.simpledemo.onap.org', '3905' + ] + drools-apps: + image: nexus3.onap.org:10001/onap/policy-pdpd-cl:${POLICY_DROOLS_APPS_VERSION} + container_name: drools-apps + depends_on: + - mariadb + - policy.api.simpledemo.onap.org + - pap + - xacml-pdp + hostname: drools-apps + expose: + - 6969 + - 9696 + volumes: + - ./config/drools-apps/custom:/tmp/policy-install/config:ro + - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro + env_file: + - config/drools-apps/env/base.conf + - config/drools-apps/env/feature-healthcheck.conf + - config/drools-apps/env/feature-pooling-dmaap.conf + entrypoint: /opt/app/policy/bin/wait_for_port.sh + command: [ + '-c', '/opt/app/policy/bin/pdpd-cl-entrypoint.sh boot', + 'mariadb', '3306', + 'policy.api.simpledemo.onap.org', '3905', + 'pap', '6969', + 'policy.api.simpledemo.onap.org', '6666', + 'policy.api.simpledemo.onap.org', '6668', + 'policy.api.simpledemo.onap.org', '6669', + 'policy.api.simpledemo.onap.org', '6670' + ] + apex-pdp: + image: nexus3.onap.org:10001/onap/policy-apex-pdp:${POLICY_APEX_PDP_VERSION} + container_name: policy-apex-pdp + depends_on: + - mariadb + - policy.api.simpledemo.onap.org + - pap + hostname: policy-apex-pdp + expose: + - 6969 + - 23324 + volumes: + - ./config/apex-pdp/OnapPfConfig.json:/opt/app/policy/apex-pdp/etc/onappf/config/OnapPfConfig.json:ro + - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro + entrypoint: /opt/app/policy/bin/wait_for_port.sh + command: [ + '-c', '/opt/app/policy/apex-pdp/bin/apexOnapPf.sh -c /opt/app/policy/apex-pdp/etc/onappf/config/OnapPfConfig.json', + 'mariadb', '3306', + 'policy.api.simpledemo.onap.org', '3905', + 'pap', '6969' + ] + distribution: + image: nexus3.onap.org:10001/onap/policy-distribution:${POLICY_DISTRIBUTION_VERSION} + container_name: policy-distribution + depends_on: + - mariadb + - api + - pap + - apex-pdp + hostname: policy-distribution + volumes: + - ./config/distribution/defaultConfig.json:/opt/app/policy/distribution/etc/defaultConfig.json:ro + - ./policy-distribution/config/distribution/temp/:/opt/app/policy/distribution/etc/temp/:ro + - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro + entrypoint: /opt/app/policy/bin/wait_for_port.sh + command: [ + '-c', './policy-dist.sh', + 'mariadb', '3306', + 'policy.api.simpledemo.onap.org', '3905', + 'pap', '6969', + 'apex-pdp', '6969' + ] diff --git a/scripts/policy/docker-compose-api.yml b/scripts/policy/docker-compose-api.yml deleted file mode 100644 index e32190f1..00000000 --- a/scripts/policy/docker-compose-api.yml +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright 2019-2020 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. -version: '2' -services: - mariadb: - image: mariadb:${POLICY_MARIADB_VER} - container_name: mariadb - hostname: mariadb - command: ['--lower-case-table-names=1', '--wait_timeout=28800'] - env_file: config/db/db.conf - volumes: - - ./config/db:/docker-entrypoint-initdb.d - expose: - - 3306 - api: - image: nexus3.onap.org:10001/onap/policy-api:${POLICY_API_VERSION} - container_name: policy-api - depends_on: - - mariadb - hostname: policy-api - expose: - - 6969 - start_dependencies: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait - depends_on: - - mariadb - hostname: policy-wait - command: mariadb:3306 - start_all: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait-all - depends_on: - - mariadb - - api - hostname: policy-wait-all - command: - mariadb:3306 - api:6969 diff --git a/scripts/policy/docker-compose-drools.yml b/scripts/policy/docker-compose-drools.yml deleted file mode 100644 index 5fc6ef67..00000000 --- a/scripts/policy/docker-compose-drools.yml +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright 2018-2020 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. -version: '2' -services: - mariadb: - image: mariadb:${POLICY_MARIADB_VER} - container_name: mariadb - hostname: mariadb - command: ['--lower-case-table-names=1', '--wait_timeout=28800'] - env_file: - - ${WORKSPACE}/scripts/policy/config/db/db.conf - volumes: - - ${WORKSPACE}/scripts/policy/config/db:/docker-entrypoint-initdb.d - expose: - - 3306 - nexus: - image: sonatype/nexus:2.14.8-01 - container_name: nexus - hostname: nexus - expose: - - 8081 - drools: - image: nexus3.onap.org:10001/onap/policy-drools:${POLICY_DROOLS_VERSION} - container_name: drools - depends_on: - - mariadb - - nexus - hostname: drools - expose: - - 6969 - - 9696 - volumes: - - ${WORKSPACE}/scripts/policy/config/drools/custom:/tmp/policy-install/config - env_file: - - ${WORKSPACE}/scripts/policy/config/drools/env/base.conf diff --git a/scripts/policy/docker-compose-engine.yml b/scripts/policy/docker-compose-engine.yml deleted file mode 100644 index 1fc5f9f3..00000000 --- a/scripts/policy/docker-compose-engine.yml +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright 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. -version: '2' -services: - mariadb: - image: mariadb:${POLICY_MARIADB_VER} - container_name: mariadb - hostname: mariadb - command: ['--lower-case-table-names=1', '--wait_timeout=28800'] - env_file: - - ${WORKSPACE}/scripts/policy/config/db/db.conf - volumes: - - ${WORKSPACE}/scripts/policy/config/db:/docker-entrypoint-initdb.d - expose: - - 3306 - nexus: - image: sonatype/nexus:2.14.8-01 - container_name: nexus - hostname: nexus - pap: - image: nexus3.onap.org:10001/onap/policy-pe:${POLICY_ENGINE_VERSION} - environment: - - PRELOAD_POLICIES=${PRELOAD_POLICIES} - container_name: pap - depends_on: - - mariadb - hostname: pap - expose: - - 8443 - - 9091 - command: pap - volumes: - - ${WORKSPACE}/scripts/policy/config/pe:/tmp/policy-install/config - pdp: - image: nexus3.onap.org:10001/onap/policy-pe:${POLICY_ENGINE_VERSION} - container_name: pdp - depends_on: - - pap - hostname: pdp - expose: - - 8081 - command: pdp - volumes: - - ./config/pe:/tmp/policy-install/config - brmsgw: - image: nexus3.onap.org:10001/onap/policy-pe:${POLICY_ENGINE_VERSION} - container_name: brmsgw - depends_on: - - pap - hostname: brmsgw - command: brmsgw - volumes: - - ${WORKSPACE}/scripts/policy/config/pe:/tmp/policy-install/config diff --git a/scripts/policy/docker-compose-pap.yml b/scripts/policy/docker-compose-pap.yml deleted file mode 100644 index 934e1739..00000000 --- a/scripts/policy/docker-compose-pap.yml +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright 2019-2020 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. -version: '2' -services: - mariadb: - image: mariadb:${POLICY_MARIADB_VER} - container_name: mariadb - hostname: mariadb - command: ['--lower-case-table-names=1', '--wait_timeout=28800'] - env_file: config/db/db.conf - volumes: - - ./config/db:/docker-entrypoint-initdb.d - expose: - - 3306 - message-router: - image: dmaap/simulator - container_name: dmaap-simulator - hostname: dmaap-simulator - expose: - - 3904 - pap: - image: nexus3.onap.org:10001/onap/policy-pap:${POLICY_PAP_VERSION} - container_name: policy-pap - depends_on: - - mariadb - hostname: policy-pap - expose: - - 6969 - api: - image: nexus3.onap.org:10001/onap/policy-api:${POLICY_API_VERSION} - container_name: policy-api - depends_on: - - mariadb - hostname: policy-api - expose: - - 6969 - start_dependencies: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait - depends_on: - - mariadb - - message-router - hostname: policy-wait - command: - mariadb:3306 - message-router:3904 - start_all: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait-all - depends_on: - - mariadb - - pap - - api - hostname: policy-wait-all - command: - mariadb:3306 - message-router:3904 - pap:6969 - api:6969 diff --git a/scripts/policy/drools-apps/docker-compose-drools-apps.yml b/scripts/policy/drools-apps/docker-compose-drools-apps.yml deleted file mode 100644 index 5098a177..00000000 --- a/scripts/policy/drools-apps/docker-compose-drools-apps.yml +++ /dev/null @@ -1,139 +0,0 @@ -# -# ===========LICENSE_START==================================================== -# Copyright (C) 2020 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===================================================== -# -version: '2' -services: - mariadb: - image: mariadb:${POLICY_MARIADB_VER} - container_name: mariadb - hostname: mariadb - command: ['--lower-case-table-names=1', '--wait_timeout=28800'] - env_file: ../config/db/db.conf - volumes: - - ../config/db:/docker-entrypoint-initdb.d:ro - expose: - - 3306 - policy.api.simpledemo.onap.org: - image: policy/simulators - container_name: policy.api.simpledemo.onap.org - hostname: policy.api.simpledemo.onap.org - volumes: - - ../config/sim-all:/opt/app/policy/simulators/etc/parameters:ro - expose: - - 6666 - - 6668 - - 6669 - - 6670 - - 3905 - api: - image: nexus3.onap.org:10001/onap/policy-api:${POLICY_API_VERSION} - container_name: policy-api - depends_on: - - mariadb - hostname: policy-api - expose: - - 6969 - pap: - image: nexus3.onap.org:10001/onap/policy-pap:${POLICY_PAP_VERSION} - container_name: policy-pap - depends_on: - - mariadb - hostname: policy-pap - expose: - - 6969 - volumes: - - ./custom/papDefaultConfig.json:/opt/app/policy/pap/etc/defaultConfig.json:ro - policy-xacml-pdp: - image: nexus3.onap.org:10001/onap/policy-xacml-pdp:${POLICY_XACML_PDP_VERSION} - container_name: policy-xacml-pdp - depends_on: - - mariadb - - policy.api.simpledemo.onap.org - hostname: policy-xacml-pdp - expose: - - 6969 - volumes: - - ./custom/xacmlDefaultConfig.json:/opt/app/policy/pdpx/etc/defaultConfig.json:ro - drools: - image: nexus3.onap.org:10001/onap/policy-pdpd-cl:${POLICY_DROOLS_APPS_VERSION} - container_name: drools - depends_on: - - mariadb - - policy.api.simpledemo.onap.org - hostname: drools - expose: - - 6969 - - 9696 - volumes: - - ../config/drools-apps/custom:/tmp/policy-install/config:ro - env_file: - - ../config/drools-apps/env/base.conf - - ../config/drools-apps/env/feature-healthcheck.conf - - ../config/drools-apps/env/feature-pooling-dmaap.conf - start_dependencies: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait - depends_on: - - mariadb - - policy.api.simpledemo.onap.org - hostname: policy-wait - command: - mariadb:3306 - policy.api.simpledemo.onap.org:6666 - policy.api.simpledemo.onap.org:6668 - policy.api.simpledemo.onap.org:6669 - policy.api.simpledemo.onap.org:6670 - policy.api.simpledemo.onap.org:3905 - start_pap: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 120 - container_name: policy-wait-pap - depends_on: - - mariadb - - policy.api.simpledemo.onap.org - - pap - hostname: policy-wait-pap - command: - mariadb:3306 - policy.api.simpledemo.onap.org:3905 - pap:6969 - start_all: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 120 - container_name: policy-wait-all - depends_on: - - mariadb - - policy.api.simpledemo.onap.org - - api - - pap - - policy-xacml-pdp - - drools - hostname: policy-wait-all - command: - mariadb:3306 - policy.api.simpledemo.onap.org:6666 - policy.api.simpledemo.onap.org:6668 - policy.api.simpledemo.onap.org:6669 - policy.api.simpledemo.onap.org:6670 - policy.api.simpledemo.onap.org:3905 - api:6969 - pap:6969 - drools:6969 diff --git a/scripts/policy/policy-xacml-pdp/config/db/db.conf b/scripts/policy/get-models-examples.sh similarity index 68% rename from scripts/policy/policy-xacml-pdp/config/db/db.conf rename to scripts/policy/get-models-examples.sh index b4449118..1860511e 100644 --- a/scripts/policy/policy-xacml-pdp/config/db/db.conf +++ b/scripts/policy/get-models-examples.sh @@ -1,6 +1,8 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. -# ================================================================================ +#!/bin/bash +# +# ============LICENSE_START=================================================== +# Copyright (C) 2020 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 @@ -12,9 +14,14 @@ # 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===================================================== # -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= -MYSQL_ROOT_PASSWORD=secret -MYSQL_USER=policy_user -MYSQL_PASSWORD=policy_user \ No newline at end of file + +source ${SCRIPTS}/policy/config/policy-csit.conf + +rm -rf ${WORKSPACE}/models +mkdir ${WORKSPACE}/models +cd ${WORKSPACE} + +# download models examples +git clone --depth 1 https://gerrit.onap.org/r/policy/models -b ${GERRIT_BRANCH} diff --git a/scripts/policy/policy-apex-pdp/config/db/db.conf b/scripts/policy/policy-apex-pdp/config/db/db.conf deleted file mode 100644 index 4768bfc4..00000000 --- a/scripts/policy/policy-apex-pdp/config/db/db.conf +++ /dev/null @@ -1,16 +0,0 @@ -# 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. -MYSQL_ROOT_PASSWORD=secret -MYSQL_USER=policy_user -MYSQL_PASSWORD=policy_user diff --git a/scripts/policy/policy-apex-pdp/config/db/db.sh b/scripts/policy/policy-apex-pdp/config/db/db.sh deleted file mode 100644 index 660f2c5a..00000000 --- a/scripts/policy/policy-apex-pdp/config/db/db.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -xv -# 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. - -for db in policyadmin -do - mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "CREATE DATABASE IF NOT EXISTS ${db};" - mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "GRANT ALL PRIVILEGES ON \`${db}\`.* TO '${MYSQL_USER}'@'%' ;" -done - -mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "FLUSH PRIVILEGES;" diff --git a/scripts/policy/policy-apex-pdp/docker-compose-apex.yml b/scripts/policy/policy-apex-pdp/docker-compose-apex.yml deleted file mode 100644 index b7ba21c8..00000000 --- a/scripts/policy/policy-apex-pdp/docker-compose-apex.yml +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright (C) 2019 Nordix Foundation. -# Modifications Copyright (C) 2019 AT&T Intellectual Property. -# -# 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. -version: '2' -networks: - default: - driver: bridge -services: - mariadb: - image: mariadb:${POLICY_MARIADB_VER} - container_name: mariadb - hostname: mariadb - command: ['--lower-case-table-names=1', '--wait_timeout=28800'] - env_file: config/db/db.conf - volumes: - - ./config/db:/docker-entrypoint-initdb.d - ports: - - "3306:3306" - message-router: - image: dmaap/simulator - container_name: dmaap-simulator - hostname: dmaap-simulator - ports: - - "3904:3904" - pap: - image: nexus3.onap.org:10001/onap/policy-pap:${POLICY_PAP_VERSION} - container_name: policy-pap - depends_on: - - mariadb - - message-router - hostname: policy-pap - - api: - image: nexus3.onap.org:10001/onap/policy-api:${POLICY_API_VERSION} - container_name: policy-api - depends_on: - - mariadb - hostname: policy-api - apex: - image: nexus3.onap.org:10001/onap/policy-apex-pdp:${POLICY_APEX_PDP_VERSION} - container_name: policy-apex-pdp - depends_on: - - mariadb - - message-router - - pap - hostname: policy-apex-pdp - command: ['/opt/app/policy/apex-pdp/bin/apexOnapPf.sh', '-c', '/opt/app/policy/apex-pdp/etc/onappf/config/OnapPfConfig.json'] - - ports: - - "6969:6969" - - "23324:23324" - start_dependencies: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait - depends_on: - - mariadb - - message-router - hostname: policy-wait - command: - mariadb:3306 - message-router:3904 - start_all: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait-all - depends_on: - - mariadb - - message-router - - api - - pap - - apex - hostname: policy-wait-all - command: - mariadb:3306 - message-router:3904 - api:6969 - pap:6969 - apex:6969 diff --git a/scripts/policy/policy-distribution/config/db/db.conf b/scripts/policy/policy-distribution/config/db/db.conf deleted file mode 100644 index 4768bfc4..00000000 --- a/scripts/policy/policy-distribution/config/db/db.conf +++ /dev/null @@ -1,16 +0,0 @@ -# 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. -MYSQL_ROOT_PASSWORD=secret -MYSQL_USER=policy_user -MYSQL_PASSWORD=policy_user diff --git a/scripts/policy/policy-distribution/config/db/db.sh b/scripts/policy/policy-distribution/config/db/db.sh deleted file mode 100644 index 660f2c5a..00000000 --- a/scripts/policy/policy-distribution/config/db/db.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -xv -# 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. - -for db in policyadmin -do - mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "CREATE DATABASE IF NOT EXISTS ${db};" - mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "GRANT ALL PRIVILEGES ON \`${db}\`.* TO '${MYSQL_USER}'@'%' ;" -done - -mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "FLUSH PRIVILEGES;" diff --git a/scripts/policy/policy-distribution/config/distribution/csar/sample_csar_with_apex_policy.csar b/scripts/policy/policy-distribution/config/distribution/csar/sample_csar_with_apex_policy.csar index c2f90eaf1f1cac916b667a8e87494d1ba5cf53ce..4d293e42e9499ad69261bf94a41f0fe898262a0b 100644 GIT binary patch delta 6511 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 ZHKQT`MG$2(0}+4{`Si{d<DoB^!ML>G* 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 HfZ)FXeQJ=P diff --git a/scripts/policy/policy-distribution/config/distribution/temp/sample_csar_with_apex_policy.csar b/scripts/policy/policy-distribution/config/distribution/temp/sample_csar_with_apex_policy.csar deleted file mode 100644 index 675e8897790e01ea16e8a710ce41bc7c09ef219d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94632 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 diff --git a/scripts/policy/policy-distribution/docker-compose-distribution.yml b/scripts/policy/policy-distribution/docker-compose-distribution.yml deleted file mode 100644 index f2398908..00000000 --- a/scripts/policy/policy-distribution/docker-compose-distribution.yml +++ /dev/null @@ -1,109 +0,0 @@ -# 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. -version: '2' -networks: - default: - driver: bridge -services: - mariadb: - image: mariadb:${POLICY_MARIADB_VER} - container_name: mariadb - hostname: mariadb - command: ['--lower-case-table-names=1', '--wait_timeout=28800'] - env_file: config/db/db.conf - volumes: - - ./config/db:/docker-entrypoint-initdb.d - ports: - - "3306:3306" - message-router: - image: dmaap/simulator - container_name: dmaap-simulator - hostname: dmaap-simulator - ports: - - "3904:3904" - policy-pap: - image: nexus3.onap.org:10001/onap/policy-pap:${POLICY_PAP_VERSION} - container_name: policy-pap - depends_on: - - mariadb - - message-router - hostname: policy-pap - - - policy-api: - image: nexus3.onap.org:10001/onap/policy-api:${POLICY_API_VERSION} - container_name: policy-api - depends_on: - - mariadb - hostname: policy-api - - - distribution: - image: nexus3.onap.org:10001/onap/policy-distribution:${POLICY_DISTRIBUTION_VERSION} - container_name: policy-distribution - hostname: policy-distribution - volumes: - - ./config/distribution/defaultConfig.json:/opt/app/policy/distribution/etc/defaultConfig.json - - ./config/distribution/temp/:/opt/app/policy/distribution/etc/temp/ - depends_on: - - mariadb - - message-router - - policy-pap - - policy-api - - apex - - apex: - image: nexus3.onap.org:10001/onap/policy-apex-pdp:${POLICY_APEX_PDP_VERSION} - container_name: policy-apex-pdp - depends_on: - - mariadb - - message-router - - policy-pap - hostname: policy-apex-pdp - command: ['/opt/app/policy/apex-pdp/bin/apexOnapPf.sh', '-c', '/opt/app/policy/apex-pdp/etc/onappf/config/OnapPfConfig.json'] - ports: - - "6969:6969" - - "23324:23324" - start_dependencies: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait - depends_on: - - mariadb - - message-router - hostname: policy-wait - command: - mariadb:3306 - message-router:3904 - start_all: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait-all - depends_on: - - mariadb - - message-router - - policy-api - - policy-pap - - apex - - distribution - hostname: policy-wait-all - command: - mariadb:3306 - message-router:3904 - policy-api:6969 - policy-pap:6969 - apex:6969 - distribution:6969 diff --git a/scripts/policy/policy-models-dmaap-sim.sh b/scripts/policy/policy-models-dmaap-sim.sh deleted file mode 100644 index 2839e5c3..00000000 --- a/scripts/policy/policy-models-dmaap-sim.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# ============LICENSE_START======================================================= -# Copyright (C) 2020 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. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -source ${SCRIPTS}/policy/config/policy-csit.conf - -rm -rf ${WORKSPACE}/dmaap-sim -mkdir ${WORKSPACE}/dmaap-sim -cd ${WORKSPACE}/dmaap-sim - -POLICY_MODELS_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/models/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_MODELS_VERSION="${POLICY_MODELS_VERSION_EXTRACT}" -echo ${POLICY_MODELS_VERSION} - -# download dmaap tarball and build docker image -git clone --depth 1 https://gerrit.onap.org/r/policy/models -b ${GERRIT_BRANCH} -cd models/models-sim/models-sim-dmaap -item=`curl --silent -L ${NEXUS_URL}/org/onap/policy/models/sim/policy-models-sim-dmaap/${POLICY_MODELS_VERSION} | egrep 'policy-models-sim-dmaap-.*tarball' | cut '-d"' -f2 | egrep 'gz$' | sort | tail -1` -mkdir target -curl -L $item -o target/policy-models-sim-dmaap-${POLICY_MODELS_VERSION}-tarball.tar.gz -bash ./src/main/package/docker/docker_build.sh -cd ${WORKSPACE} diff --git a/scripts/policy/policy-models-simulators.sh b/scripts/policy/policy-models-simulators.sh deleted file mode 100755 index 9e67d487..00000000 --- a/scripts/policy/policy-models-simulators.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -# -# ============LICENSE_START=================================================== -# Copyright (C) 2020 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===================================================== -# - -source ${SCRIPTS}/policy/config/policy-csit.conf - -rm -rf ${WORKSPACE}/simulators -mkdir ${WORKSPACE}/simulators -cd ${WORKSPACE}/simulators - -POLICY_MODELS_VERSION_EXTRACT="$(curl -q --silent https://git.onap.org/policy/models/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)" -export POLICY_MODELS_VERSION="${POLICY_MODELS_VERSION_EXTRACT}" -echo ${POLICY_MODELS_VERSION} - -# download simulators tarball and build docker image -git clone --depth 1 https://gerrit.onap.org/r/policy/models -b ${GERRIT_BRANCH} -cd models/models-sim/policy-models-simulators -item=`curl --silent -L ${NEXUS_URL}/org/onap/policy/models/sim/policy-models-simulators/${POLICY_MODELS_VERSION} | egrep 'policy-models-simulators-.*tarball' | cut '-d"' -f2 | egrep 'gz$' | sort | tail -1` -mkdir target -curl -L $item -o target/policy-models-simulators-${POLICY_MODELS_VERSION}-tarball.tar.gz -bash ./src/main/package/docker/docker_build.sh - -cd ${WORKSPACE} diff --git a/scripts/policy/policy-xacml-pdp/config/db/db.sh b/scripts/policy/policy-xacml-pdp/config/db/db.sh deleted file mode 100755 index 499764df..00000000 --- a/scripts/policy/policy-xacml-pdp/config/db/db.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -xv -# ============LICENSE_START======================================================= -# Copyright (C) 2020 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. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -for db in policyadmin operationshistory -do - mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "CREATE DATABASE IF NOT EXISTS ${db};" - mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "GRANT ALL PRIVILEGES ON \`${db}\`.* TO '${MYSQL_USER}'@'%' ;" -done - -mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "FLUSH PRIVILEGES;" diff --git a/scripts/policy/policy-xacml-pdp/docker-compose-pdpx.yml b/scripts/policy/policy-xacml-pdp/docker-compose-pdpx.yml deleted file mode 100644 index caf8315b..00000000 --- a/scripts/policy/policy-xacml-pdp/docker-compose-pdpx.yml +++ /dev/null @@ -1,88 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2019-2020 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. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= -version: '2' -services: - mariadb: - image: mariadb:${POLICY_MARIADB_VER} - container_name: mariadb - hostname: mariadb - command: ['--lower-case-table-names=1', '--wait_timeout=28800'] - env_file: config/db/db.conf - volumes: - - ./config/db:/docker-entrypoint-initdb.d - expose: - - 3306 - message-router: - image: dmaap/simulator - container_name: dmaap-simulator - hostname: dmaap-simulator - expose: - - 3904 - pap: - image: nexus3.onap.org:10001/onap/policy-pap:${POLICY_PAP_VERSION} - container_name: policy-pap - depends_on: - - mariadb - - message-router - hostname: policy-pap - api: - image: nexus3.onap.org:10001/onap/policy-api:${POLICY_API_VERSION} - container_name: policy-api - depends_on: - - mariadb - hostname: policy-api - xacml-pdp: - image: nexus3.onap.org:10001/onap/policy-xacml-pdp:${POLICY_XACML_PDP_VERSION} - container_name: policy-xacml-pdp - depends_on: - - mariadb - - message-router - - pap - hostname: policy-xacml-pdp - expose: - - 6969 - start_dependencies: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait - depends_on: - - mariadb - - message-router - hostname: policy-wait - command: - mariadb:3306 - message-router:3904 - start_all: - image: dadarek/wait-for-dependencies - environment: - TIMEOUT_LENGTH: 60 - container_name: policy-wait-all - depends_on: - - mariadb - - message-router - - api - - pap - - xacml-pdp - hostname: policy-wait-all - command: - mariadb:3306 - message-router:3904 - api:6969 - pap:6969 - xacml-pdp:6969 diff --git a/scripts/policy/wait_for_port.sh b/scripts/policy/wait_for_port.sh index 58bf25d0..c50cd970 100755 --- a/scripts/policy/wait_for_port.sh +++ b/scripts/policy/wait_for_port.sh @@ -1,21 +1,40 @@ #!/bin/bash -if [[ $# -ne 2 ]]; then - echo "Usage: wait-for-port hostname port" >&2 +tmout=120 +cmd= + +while getopts c:t: opt; do + case "$opt" in + c) cmd="$OPTARG" ;; + t) tmout="$OPTARG" ;; + esac +done +let nargs=$OPTIND-1 +shift $nargs + +let even_args=$#%2 +if [[ $# -lt 2 || $even_args -ne 0 ]]; then + echo "args: [-t timeout] [-c command] hostname1 port1 hostname2 port2 ..." >&2 exit 1 fi -export host=$1 -export port=$2 +while [[ $# -ge 2 ]]; do + export host=$1 + export port=$2 + shift + shift -echo "Waiting for $host port $port open" -timeout 120 bash -c 'until nc -vz "$host" "$port"; do echo -n "."; sleep 1; done' -rc=$? + echo "Waiting for $host port $port..." + timeout $tmout bash -c 'until nc -vz "$host" "$port"; do echo -n "."; + sleep 1; done' + rc=$? -if [[ $rc != 0 ]]; then + if [[ $rc != 0 ]]; then echo "$host port $port cannot be reached" exit $rc -fi + fi +done + +$cmd -echo "$host port $port is open" exit 0 diff --git a/tests/policy/drools-applications/drools-applications-test.robot b/tests/policy/drools-applications/drools-applications-test.robot index a1ca5e20..0b73ccf8 100644 --- a/tests/policy/drools-applications/drools-applications-test.robot +++ b/tests/policy/drools-applications/drools-applications-test.robot @@ -35,10 +35,10 @@ Controller Log Creating session https://${DROOLS_IP}:9696 ${session}= Create Session policy https://${DROOLS_IP}:9696 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json - ${resp}= Get Request policy /policy/pdp/engine/controllers/frankfurt/drools/facts headers=${headers} + ${resp}= Get Request policy /policy/pdp/engine/controllers/usecases/drools/facts headers=${headers} Log Received response from policy ${resp.text} Should Be Equal As Strings ${resp.status_code} 200 - Should Be Equal As Strings ${resp.json()['frankfurt']} 0 + Should Be Equal As Strings ${resp.json()['usecases']} 0 MakeTopics [Documentation] Creates the Policy topics -- 2.16.6