From 9507f2f8d2ec616f01f5ee8825106300b95e8ddc Mon Sep 17 00:00:00 2001 From: Andrew Gauld Date: Fri, 7 Feb 2020 15:00:39 +0000 Subject: Add DCAE MOD design tool project Change-Id: I660b28ebfaa7e4b5f03a1df5fd17d126f58b7c14 Issue-ID: DCAEGEN2-1860 Signed-off-by: Andrew Gauld --- mod/designtool/designtool-web/sh/applypatches.sh | 107 +++++++++++++++++++++++ mod/designtool/designtool-web/sh/common.sh | 43 +++++++++ mod/designtool/designtool-web/sh/start.sh | 97 ++++++++++++++++++++ 3 files changed, 247 insertions(+) create mode 100755 mod/designtool/designtool-web/sh/applypatches.sh create mode 100755 mod/designtool/designtool-web/sh/common.sh create mode 100755 mod/designtool/designtool-web/sh/start.sh (limited to 'mod/designtool/designtool-web/sh') diff --git a/mod/designtool/designtool-web/sh/applypatches.sh b/mod/designtool/designtool-web/sh/applypatches.sh new file mode 100755 index 0000000..47de89c --- /dev/null +++ b/mod/designtool/designtool-web/sh/applypatches.sh @@ -0,0 +1,107 @@ +#!/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======================================================= + +set -eufx -o pipefail + +PATCH_BINARY=/tmp/patches/designtool-web-$1.war +NIFI_VERSION=$2 +PATCHES=/tmp/patches +TARGETS=/tmp/targets +mkdir -p $PATCHES $TARGETS +# extract patches +cd $PATCHES +jar xf $PATCH_BINARY +rm $PATCH_BINARY +# extract jars and wars to be patched +cd $TARGETS +jar xf $NIFI_BASE_DIR/nifi-current/lib/nifi-framework-nar-$NIFI_VERSION.nar \ + META-INF/bundled-dependencies/nifi-framework-nar-loading-utils-$NIFI_VERSION.jar \ + META-INF/bundled-dependencies/nifi-jetty-$NIFI_VERSION.jar \ + META-INF/bundled-dependencies/nifi-web-api-$NIFI_VERSION.war \ + META-INF/bundled-dependencies/nifi-web-ui-$NIFI_VERSION.war +# patch jar files +cd $PATCHES/WEB-INF/classes +set +f +jar uf $NIFI_BASE_DIR/nifi-toolkit-current/lib/nifi-client-dto-$NIFI_VERSION.jar \ + org/apache/nifi/web/api/dto/FlowConfigurationDTO*.class +jar uf $TARGETS/META-INF/bundled-dependencies/nifi-jetty-$NIFI_VERSION.jar \ + org/apache/nifi/web/server/JettyServer*.class +jar uf $NIFI_BASE_DIR/nifi-current/lib/nifi-properties-$NIFI_VERSION.jar \ + org/apache/nifi/util/NiFiProperties*.class +jar uf $NIFI_BASE_DIR/nifi-current/lib/nifi-runtime-$NIFI_VERSION.jar \ + org/apache/nifi/NiFi*.class +jar uf $NIFI_BASE_DIR/nifi-toolkit-current/lib/nifi-framework-core-api-$NIFI_VERSION.jar \ + org/apache/nifi/controller/AbstractPort*.class +jar uf $TARGETS/META-INF/bundled-dependencies/nifi-framework-nar-loading-utils-$NIFI_VERSION.jar \ + org/apache/nifi/nar/DCAEClassLoaders*.class \ + org/apache/nifi/nar/DCAEAutoLoader*.class +# patch war files +cd $PATCHES +jar uf $TARGETS/META-INF/bundled-dependencies/nifi-web-api-$NIFI_VERSION.war \ + WEB-INF/classes/org/apache/nifi/web/StandardNiFiServiceFacade*.class \ + WEB-INF/classes/org/apache/nifi/web/api/dto/DtoFactory*.class \ + WEB-INF/classes/org/apache/nifi/web/dao/impl/StandardConnectionDAO*.class +set -f +jar xf $TARGETS/META-INF/bundled-dependencies/nifi-web-ui-$NIFI_VERSION.war \ + css/nf-canvas-all.css \ + js/nf/canvas/nf-canvas-all.js \ + js/nf/summary/nf-summary-all.js +rm -f \ + css/nf-canvas-all.css.gz \ + js/nf/canvas/nf-canvas-all.js.gz \ + js/nf/summary/nf-summary-all.js.gz +sed -i \ + -e '/graph-controls/{r navigation-min.css' -e 'd}' \ + css/nf-canvas-all.css +sed -i \ + -e '/process-group-up-to-date/{r nf-process-group-min.js' -e 'd}' \ + -e '/div.available-relationship/{r nf-connection-configuration-min.js' -e 'd}' \ + -e '/nf.FlowVerison/{r nf-flow-version-min.js' -e 'd}' \ + -e '/controllerConfig/{r nf-settings-min.js' -e 'd}' \ + -e '/this.breadcrumbs/{r nf-ng-breadcrumbs-controller-min.js' -e 'd}' \ + -e '/processor-types-table/{r nf-ng-processor-component-min.js' -e 'd}' \ + js/nf/canvas/nf-canvas-all.js +sed -i \ + -e '/controllerConfig/{r nf-settings-min.js' -e 'd}' \ + js/nf/summary/nf-summary-all.js +gzip -k \ + css/nf-canvas-all.css \ + js/nf/canvas/nf-canvas-all.js \ + js/nf/summary/nf-summary-all.js +jar uf $TARGETS/META-INF/bundled-dependencies/nifi-web-ui-$NIFI_VERSION.war \ + $(find WEB-INF/classes/org/apache/jsp/WEB_002dINF WEB-INF/pages WEB-INF/partials css js images -type f -print) +# patch scripts +cp common.sh start.sh $NIFI_BASE_DIR/scripts/ +# patch nar files +cd $TARGETS +cp $NIFI_BASE_DIR/nifi-toolkit-current/lib/nifi-client-dto-$NIFI_VERSION.jar \ + META-INF/bundled-dependencies/nifi-client-dto-$NIFI_VERSION.jar +jar uf $NIFI_BASE_DIR/nifi-current/lib/nifi-site-to-site-reporting-nar-$NIFI_VERSION.nar \ + META-INF/bundled-dependencies/nifi-client-dto-$NIFI_VERSION.jar +cp $NIFI_BASE_DIR/nifi-toolkit-current/lib/nifi-framework-core-api-$NIFI_VERSION.jar \ + META-INF/bundled-dependencies/nifi-framework-core-api-$NIFI_VERSION.jar +jar uf $NIFI_BASE_DIR/nifi-current/lib/nifi-framework-nar-$NIFI_VERSION.nar \ + META-INF/bundled-dependencies/nifi-client-dto-$NIFI_VERSION.jar \ + META-INF/bundled-dependencies/nifi-framework-core-api-$NIFI_VERSION.jar \ + META-INF/bundled-dependencies/nifi-framework-nar-loading-utils-$NIFI_VERSION.jar \ + META-INF/bundled-dependencies/nifi-jetty-$NIFI_VERSION.jar \ + META-INF/bundled-dependencies/nifi-web-api-$NIFI_VERSION.war \ + META-INF/bundled-dependencies/nifi-web-ui-$NIFI_VERSION.war +cp $NIFI_BASE_DIR/nifi-current/lib/nifi-properties-$NIFI_VERSION.jar \ + $NIFI_BASE_DIR/nifi-toolkit-current/lib/nifi-properties-$NIFI_VERSION.jar +echo Success +exit 0 diff --git a/mod/designtool/designtool-web/sh/common.sh b/mod/designtool/designtool-web/sh/common.sh new file mode 100755 index 0000000..542b777 --- /dev/null +++ b/mod/designtool/designtool-web/sh/common.sh @@ -0,0 +1,43 @@ +#!/bin/sh -e +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +# +# Modifications to the original nifi code for the ONAP project are made +# available under the Apache License, Version 2.0 +# + +# 1 - value to search for +# 2 - value to replace +# 3 - file to perform replacement inline +prop_replace () { + target_file=${3:-${nifi_props_file}} + echo 'replacing target file ' ${target_file} + sed -i -e "s|^$1=.*$|$1=$2|" ${target_file} +} + +# 1 - property name +# 2 - property value +# 3 - file to perform replacement inline +prop_append () { + target_file=${3:-${nifi_props_file}} + echo 'appending target file ' ${target_file} + sed -i "$ a $1=$2" ${target_file} +} + +# NIFI_HOME is defined by an ENV command in the backing Dockerfile +export nifi_props_file=${NIFI_HOME}/conf/nifi.properties +export nifi_toolkit_props_file=${HOME}/.nifi-cli.nifi.properties +export hostname=$(hostname) diff --git a/mod/designtool/designtool-web/sh/start.sh b/mod/designtool/designtool-web/sh/start.sh new file mode 100755 index 0000000..8658983 --- /dev/null +++ b/mod/designtool/designtool-web/sh/start.sh @@ -0,0 +1,97 @@ +#!/bin/sh -e + +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +# +# Modifications to the original nifi code for the ONAP project are made +# available under the Apache License, Version 2.0 +# + +scripts_dir='/opt/nifi/scripts' + +[ -f "${scripts_dir}/common.sh" ] && . "${scripts_dir}/common.sh" + +# Establish baseline properties +prop_replace 'nifi.web.http.port' "${NIFI_WEB_HTTP_PORT:-8080}" +prop_replace 'nifi.web.http.host' "${NIFI_WEB_HTTP_HOST:-$HOSTNAME}" +prop_replace 'nifi.remote.input.host' "${NIFI_REMOTE_INPUT_HOST:-$HOSTNAME}" +prop_replace 'nifi.remote.input.socket.port' "${NIFI_REMOTE_INPUT_SOCKET_PORT:-10000}" +prop_replace 'nifi.remote.input.secure' 'false' + +# Set nifi-toolkit properties files and baseUrl +"${scripts_dir}/toolkit.sh" +prop_replace 'baseUrl' "http://${NIFI_WEB_HTTP_HOST:-$HOSTNAME}:${NIFI_WEB_HTTP_PORT:-8080}" ${nifi_toolkit_props_file} + +prop_replace 'nifi.variable.registry.properties' "${NIFI_VARIABLE_REGISTRY_PROPERTIES:-}" +prop_replace 'nifi.cluster.is.node' "${NIFI_CLUSTER_IS_NODE:-false}" +prop_replace 'nifi.cluster.node.address' "${NIFI_CLUSTER_ADDRESS:-$HOSTNAME}" +prop_replace 'nifi.cluster.node.protocol.port' "${NIFI_CLUSTER_NODE_PROTOCOL_PORT:-}" +prop_replace 'nifi.cluster.node.protocol.threads' "${NIFI_CLUSTER_NODE_PROTOCOL_THREADS:-10}" +prop_replace 'nifi.cluster.node.protocol.max.threads' "${NIFI_CLUSTER_NODE_PROTOCOL_MAX_THREADS:-50}" +prop_replace 'nifi.zookeeper.connect.string' "${NIFI_ZK_CONNECT_STRING:-}" +prop_replace 'nifi.zookeeper.root.node' "${NIFI_ZK_ROOT_NODE:-/nifi}" +prop_replace 'nifi.cluster.flow.election.max.wait.time' "${NIFI_ELECTION_MAX_WAIT:-5 mins}" +prop_replace 'nifi.cluster.flow.election.max.candidates' "${NIFI_ELECTION_MAX_CANDIDATES:-}" +prop_replace 'nifi.web.proxy.context.path' "${NIFI_WEB_PROXY_CONTEXT_PATH:-}" + +# REVIEW: Could not figure out how the nifi.properties file gets generated so +# replace value conditionally if the property name exists otherwise append +if grep -q 'nifi.dcae.jars.index.url' $nifi_props_file +then + prop_replace 'nifi.dcae.jars.index.url' "${NIFI_DCAE_JARS_INDEX_URL:-http://genprocessor-http/nifi-jars/}" +else + prop_append 'nifi.dcae.jars.index.url' "${NIFI_DCAE_JARS_INDEX_URL:-http://genprocessor-http/nifi-jars/}" +fi + +if grep -q 'nifi.ui.dcae.distibutor.api.url' $nifi_props_file +then + prop_replace 'nifi.ui.dcae.distibutor.api.url' "${NIFI_DCAE_DISTRIBUTOR_API_URL:-http://distributor-api}" +else + prop_append 'nifi.ui.dcae.distibutor.api.url' "${NIFI_DCAE_DISTRIBUTOR_API_URL:-http://distributor-api}" +fi + +. "${scripts_dir}/update_cluster_state_management.sh" + +# Check if we are secured or unsecured +case ${AUTH} in + tls) + echo 'Enabling Two-Way SSL user authentication' + . "${scripts_dir}/secure.sh" + ;; + ldap) + echo 'Enabling LDAP user authentication' + # Reference ldap-provider in properties + prop_replace 'nifi.security.user.login.identity.provider' 'ldap-provider' + + . "${scripts_dir}/secure.sh" + . "${scripts_dir}/update_login_providers.sh" + ;; + *) + if [ ! -z "${NIFI_WEB_PROXY_HOST}" ]; then + echo 'NIFI_WEB_PROXY_HOST was set but NiFi is not configured to run in a secure mode. Will not update nifi.web.proxy.host.' + fi + ;; +esac + +# Continuously provide logs so that 'docker logs' can produce them +tail -F "${NIFI_HOME}/logs/nifi-app.log" & +"${NIFI_HOME}/bin/nifi.sh" run & +nifi_pid="$!" + +trap "echo Received trapped signal, beginning shutdown...;" KILL TERM HUP INT EXIT; + +echo NiFi running with PID ${nifi_pid}. +wait ${nifi_pid} -- cgit 1.2.3-korg