diff options
Diffstat (limited to 'packages/base/src/files/bin/features')
-rw-r--r-- | packages/base/src/files/bin/features | 640 |
1 files changed, 0 insertions, 640 deletions
diff --git a/packages/base/src/files/bin/features b/packages/base/src/files/bin/features deleted file mode 100644 index 7b14644f..00000000 --- a/packages/base/src/files/bin/features +++ /dev/null @@ -1,640 +0,0 @@ -#! /bin/bash - -### -# ============LICENSE_START======================================================= -# ONAP POLICY -# ================================================================================ -# Copyright (C) 2017 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========================================================= -## - -# ############################################################# -# Features Directory Layout: -# -# POLICY_HOME/ -# └── features/ -# └── <feature-name>*/ -# └── [config]/ -# │ └── <config-file>* -# └── lib/ -# │ └── [dependencies]/ -# │ │ └── <dependent-jar>* -# │ └── feature/ -# │ └── <feature-jar> -# └── [install] -# └── [enable] -# └── [disable] -# └── [other-future-operations] -# └── [other-files] -# -# <feature-name> directory should not have the "feature-" prefix. -# <config-file> preferable with "feature-" prefix. -# -# Example: -# -# POLICY_HOME/ -# └── features/ -# ├── eelf/ -# │ ├── config/ -# │ │ ├── logback-eelf.xml -# │ └── lib/ -# │ │ └── dependencies/ -# │ │ │ └── ECOMP-Logging-1.1.0-SNAPSHOT.jar -# │ │ │ └── eelf-core-1.0.0.jar -# │ │ └── feature/ -# │ │ └── feature-eelf-1.1.0-SNAPSHOT.jar -# │ └── install/ -# │ └── enable -# │ └── disable -# └── healthcheck/ -# ├── config/ -# │ └── feature-healthcheck.properties -# └── lib/ -# └── feature/ -# └── feature-healthcheck-1.1.0-SNAPSHOT.jar -# ############################################################# - -if [[ ${DEBUG} == y ]]; then - echo "-- MAIN --" - set -x -fi - -# The directories at play - -LIB=${POLICY_HOME}/lib -CONFIG=${POLICY_HOME}/config -FEATURES=${POLICY_HOME}/features - -if [[ ! ( -d "${LIB}" && -x "${LIB}" ) ]]; then - echo "ERROR: no ${LIB} directory" - exit 1 -fi - -if [[ ! ( -d "${CONFIG}" && -x "${CONFIG}" ) ]]; then - echo "ERROR: no ${CONFIG} directory" - exit 2 -fi - -if [[ ! ( -d "${FEATURES}" && -x "${FEATURES}" ) ]]; then - echo "ERROR: no ${FEATURES} directory" - exit 3 -fi - -# relative per Feature Directory Paths - -FEATURE_DEPS="lib/dependencies" -FEATURE_LIB="lib/feature" -FEATURE_CONFIG="config" -FEATURE_INSTALL="install" - -featureJars=$(find "${FEATURES}" -name "feature-*.jar" -type f -exec basename {} \; 2> /dev/null) -if [[ -z ${featureJars} ]]; then - echo "no features" - usage - exit 0 -fi - -# default field lengths -nameLength=20 -versionLength=15 - -# update field lengths, if needed -for jar in ${featureJars} ; do - # get file name without 'jar' suffix - tmp="${jar%\.jar}" - - # remove feature prefix - tmp="${tmp#feature-}" - - # get feature name by removing the version portion - name="${tmp%%-[0-9]*}" - - # extract version portion of name - version="${tmp#${name}-}" - - # grow the size of the name/version field, if needed - if (( "${#name}" > nameLength )) ; then - nameLength="${#name}" - fi - if (( "${#version}" > versionLength )) ; then - versionLength="${#version}" - fi -done - -# ########################################################## -# usage: usage information -# ########################################################## -function usage -{ - # print out usage information - cat >&2 <<-'EOF' - Usage: features status - Get enabled/disabled status on all features - features enable <feature> ... - Enable the specified feature - features disable <feature> ... - Disable the specified feature - EOF -} - -# ########################################################## -# status: dump out status information -# ########################################################## -function status -{ - if [[ ${DEBUG} == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local tmp name version status - local format="%-${nameLength}s %-${versionLength}s %s\n" - - printf "${format}" "name" "version" "status" - printf "${format}" "----" "-------" "------" - - for jar in ${featureJars} ; do - # get file name without 'jar' suffix - tmp="${jar%\.jar}" - - # remove feature prefix - tmp="${tmp#feature-}" - - # get feature name by removing the version portion - name="${tmp%%-[0-9]*}" - - # extract version portion of name - version="${tmp#${name}-}" - - # determine status - status=disabled - if [[ -e "${LIB}/${jar}" ]] ; then - status=enabled - fi - printf "${format}" "${name}" "${version}" "${status}" - done -} - -# ########################################################## -# depEnableAnalysis(featureName): -# reports on potential dependency conflicts -# featureName: name of the feature -# ########################################################## -function depEnableAnalysis() -{ - if [[ ${DEBUG} == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local featureName="$1" - local featureDepJars featureDepJarPath depJarName multiVersionJars - - if [[ -z ${featureName} ]]; then - echo "WARN: no feature name" - return 1 - fi - - featureDepJars=$(ls "${FEATURES}"/"${featureName}"/"${FEATURE_DEPS}"/*.jar 2> /dev/null) - for featureDepJarPath in ${featureDepJars}; do - depJarName=$(basename "${featureDepJarPath}") - - # it could be a base jar - - if [[ -f "${LIB}"/"${depJarName}" ]]; then - echo "WARN: dependency ${depJarName} already in use" - continue - fi - - # it could be a link from another feature - - if [[ -L "${LIB}"/"${depJarName}" ]]; then - continue - fi - - # unadvisable if multiple versions exist - - multiVersionJars=$(ls "${LIB}"/"${depJarName%%-[0-9]*.jar}"-*.jar 2> /dev/null) - if [[ -n "${multiVersionJars}" ]]; then - echo "WARN: other version of library ${depJarName} present: ${multiVersionJars}" - return 2 - fi - done -} - -# ########################################################## -# configEnableAnalysis(featureName): -# reports on potential dependency conflicts -# featureName: name of the feature -# ########################################################## -function configEnableAnalysis() -{ - if [[ ${DEBUG} == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local featureName="$1" - local featureConfigs configPath configFileName - - if [[ -z ${featureName} ]]; then - echo "WARN: no feature name" - return 1 - fi - - featureConfigs=$(ls "${FEATURES}"/"${featureName}"/"${FEATURE_CONFIG}"/ 2> /dev/null) - for configPath in ${featureConfigs}; do - configFileName=$(basename "${configPath}") - if [[ -e "${LIB}"/"${configFileName}" ]]; then - echo "ERROR: a config file of the same name is already in the base: ${configFileName}" - return 2 - fi - done -} - -# ########################################################## -# enableFeatureDeps(featureName): -# enables feature dependencies -# featureName: name of the feature -# ########################################################## -function enableFeatureDeps() -{ - if [[ ${DEBUG} == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local featureName="$1" - local featureDeps featureDepPath depJarName - - if [[ -z ${featureName} ]]; then - echo "WARN: no feature name" - return 1 - fi - - featureDeps=$(ls "${FEATURES}"/"${featureName}"/"${FEATURE_DEPS}"/*.jar 2> /dev/null) - for featureDepPath in ${featureDeps}; do - depJarName=$(basename "${featureDepPath}") - if [[ ! -f "${LIB}"/"${depJarName}" ]]; then - ln -s -f "${featureDepPath}" "${LIB}/" - fi - done -} - -# ########################################################## -# enableFeatureConfig(featureName): -# enables feature configuration -# featureName: name of the feature -# ########################################################## -function enableFeatureConfig() -{ - if [[ ${DEBUG} == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local featureName="$1" - local featureConfigs featureConfigPath - - if [[ -z ${featureName} ]]; then - echo "WARN: no feature name" - return 1 - fi - - featureConfigs=$(find "${FEATURES}"/"${featureName}"/"${FEATURE_CONFIG}"/ -type f -maxdepth 1 2> /dev/null) - for featureConfigPath in ${featureConfigs}; do - ln -s -f "${featureConfigPath}" "${CONFIG}/" - done -} - -# ########################################################## -# enableFeatureOp(featureName): 'enable' feature operation -# featureName: name of the feature -# ########################################################## -function enableFeatureOp() -{ - if [[ ${DEBUG} == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local featureName="$1" - - if [[ -z ${featureName} ]]; then - echo "WARN: no feature name" - return 1 - fi - - enableScript="${FEATURES}"/"${featureName}"/"${FEATURE_INSTALL}"/enable - if [[ -f ${enableScript} ]]; then - ( - cd "${FEATURES}"/"${featureName}"/"${FEATURE_INSTALL}" - chmod u+x enable - ./enable - ) - fi -} - -# ########################################################## -# enableFeature(featureName, featureJar): enables a feature -# featureName: name of the feature -# featureJar: path to feature jar implementation -# ########################################################## -function enableFeature() -{ - if [[ $DEBUG == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local featureName="$1" - local featureJar="$2" - - if [[ -z ${featureName} ]]; then - echo "WARN: no feature name" - return 1 - fi - - if [[ -z ${featureJar} ]]; then - echo "WARN: no feature jar" - return 2 - fi - - if ! depEnableAnalysis "${featureName}"; then - return 3 - fi - - if ! configEnableAnalysis "${featureName}"; then - return 4 - fi - - # enable feature itself - - ln -s -f "${featureJar}" "${LIB}/" - - # enable dependent libraries if any - - enableFeatureDeps "${featureName}" - - # enable configuration - - enableFeatureConfig "${featureName}" - - # TODO: run feature install DB scripts if any - - # run custom enable if any - - enableFeatureOp "${featureName}" -} - -# ########################################################## -# disableFeatureDeps(featureName): -# disables feature dependencies -# ########################################################## -function disableFeatureDeps() -{ - if [[ ${DEBUG} == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local featureName="$1" - local xDepsEnabledMap featureBaseDirs aFeatureDir aFeatureName - local featureDeps aFeatureDep - local depJarPath depJarName depJarRealPath - - if [[ -z ${featureName} ]]; then - echo "WARN: no feature name" - return 1 - fi - - declare -A xDepsEnabledMap - - featureBaseDirs=$(ls -d "${FEATURES}"/*/ 2> /dev/null) - for aFeatureDir in ${featureBaseDirs}; do - aFeatureName=$(basename "${aFeatureDir}") - if [[ "${aFeatureName}" == "${featureName}" ]]; then - continue - fi - - depJarPaths=$(ls "${aFeatureDir}"/"${FEATURE_DEPS}"/*.jar 2> /dev/null) - for depJarPath in ${depJarPaths}; do - if [[ "$?" == 0 ]] ; then - depJarName=$(basename "${depJarPath}") - xDepsEnabledMap[${depJarName}]="${depJarPath}" - fi - done - done - - if [[ ${DEBUG} == y ]]; then - echo "${!xDepsEnabledMap[@]}" - echo "${xDepsEnabledMap[@]}" - fi - - featureDeps=$(ls "${FEATURES}"/"${featureName}"/"${FEATURE_DEPS}"/*.jar 2> /dev/null) - for aFeatureDep in ${featureDeps}; do - depJarName=$(basename "${aFeatureDep}") - if [[ -L "${LIB}"/"${depJarName}" ]]; then - depJarRealPath=$(readlink -f "${LIB}"/"${depJarName}") - if [[ "${depJarRealPath}" == "${aFeatureDep}" ]]; then - rm -f "${LIB}"/"${depJarName}" - - # case there were multiple features using this library - # re-enable link fron an enabled feature - - if [[ -n ${xDepsEnabledMap[${depJarName}]} ]]; then - ln -s -f "${xDepsEnabledMap[${depJarName}]}" "${LIB}/" - fi - fi - fi - done -} - -# ########################################################## -# disableFeatureConfig(featureName): -# disables feature configuration -# featureName: name of the feature -# ########################################################## -function disableFeatureConfig() -{ - if [[ ${DEBUG} == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local featureName="$1" - local featureConfigs featureConfigPath - - if [[ -z ${featureName} ]]; then - echo "WARN: no feature name" - return 1 - fi - - featureConfigs=$(find "${FEATURES}"/"${featureName}"/"${FEATURE_CONFIG}"/ -type f -maxdepth 1 2> /dev/null) - for featureConfigPath in ${featureConfigs}; do - configFileName=$(basename "${featureConfigPath}") - rm -f "${CONFIG}"/"${configFileName}" 2> /dev/null - done -} - -# ########################################################## -# disableFeatureOp(featureName): 'enable' feature operation -# featureName: name of the feature -# ########################################################## -function disableFeatureOp() -{ - if [[ ${DEBUG} == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local featureName="$1" - - if [[ -z ${featureName} ]]; then - echo "WARN: no feature name" - return 1 - fi - - disableScript="${FEATURES}"/"${featureName}"/"${FEATURE_INSTALL}"/disable - if [[ -f ${disableScript} ]]; then - ( - cd "${FEATURES}"/"${featureName}"/"${FEATURE_INSTALL}" - chmod u+x disable - ./disable - ) - fi -} - -# ########################################################## -# disableFeature(featureName, featureJar): enables a feature -# featureName: name of the feature -# ########################################################## -function disableFeature() -{ - if [[ ${DEBUG} == y ]]; then - echo "-- ${FUNCNAME[0]} $@ --" - set -x - fi - - local featureName="$1" - - if [[ -z ${featureName} ]]; then - echo "WARN: no feature name" - return - fi - - # disable feature itself - - ( - cd "${LIB}" - rm -f feature-"${featureName}"-[0-9]*.jar 2> /dev/null - ) - - # disable dependencies if any - - disableFeatureDeps "${featureName}" - - # disable configuration if any - - disableFeatureConfig "${featureName}" - - # run feature uninstall DB scripts if any - # TODO: future - - # run custom disable if any - disableFeatureOp "${featureName}" -} - -case "$1" in - status) - { - # dump out status information - status - };; - - enable) - { - if [[ -f "${POLICY_HOME}"/PID ]]; then - echo "ERROR: enable: not allowed when policy is running .." - echo - status - exit 10 - fi - - # enable the specified options - shift - match= - for name in "$@" ; do - # look for matches - 'file' has the full path name - file=$(ls "${FEATURES}"/"${name}"/"${FEATURE_LIB}"/feature-"${name}"-[0-9]*.jar 2> /dev/null) - if [[ "$?" != 0 ]] ; then - # no matching file - echo "${name}: no such option" - else - # make sure there is only one feature jar - countFeatureJars=$(echo "${file}" | wc -w) - if [[ ${countFeatureJars} != 1 ]]; then - echo "WARNING: skipping ${name}, ${countFeatureJars} feature libraries found" - continue - fi - - # found a match (handle multiple matches, just in case) - match=true - - enableFeature "${name}" "${file}" - fi - done - if [[ "${match}" ]] ; then - echo - status - fi - };; - - disable) - { - if [[ -f "${POLICY_HOME}"/PID ]]; then - echo "ERROR: disable: not allowed when policy is running .." - echo - status - exit 11 - fi - - # disable the specified options - shift - match= - for name in "$@" ; do - # look for matches -- 'file' has the last segment of the path name - file=$(ls "${FEATURES}"/"${name}"/"${FEATURE_LIB}"/feature-"${name}"-[0-9]*.jar 2> /dev/null) - if [[ "$?" != 0 ]] ; then - echo "${name}: no such option" - else - # found a match (handle multiple matches, just in case) - match=true - - disableFeature "${name}" - fi - done - if [[ "${match}" ]] ; then - echo - status - fi - };; - - *) - { - usage - };; -esac -exit |