#!/bin/sh # shellcheck disable=SC2086 #- # ============LICENSE_START======================================================= # Copyright (C) 2020 Nordix Foundation. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= set -o errexit set -o nounset set -o pipefail set -o xtrace export PATH=/opt/bin:/usr/local/bin:/usr/bin:/bin CONFIG=/config SSH_CONFIG=$CONFIG/ssh TLS_CONFIG=$CONFIG/tls MODELS_CONFIG=$CONFIG/modules KEY_PATH=/opt/etc/keystored/keys BASE_VIRTUALENVS=$HOME/.local/share/virtualenvs find_file() { local dir=$1 shift for prog in "$@"; do if [ -f $dir/$prog ]; then echo -n $dir/$prog break fi done } find_executable() { local dir=$1 shift for prog in "$@"; do if [ -x $dir/$prog ]; then echo -n $dir/$prog break fi done } configure_ssh() { sysrepocfg --datastore=startup --format=xml ietf-system --import=$SSH_CONFIG/load_auth_pubkey.xml } configure_tls() { cp $TLS_CONFIG/server_key.pem $KEY_PATH cp $TLS_CONFIG/server_key.pem.pub $KEY_PATH sysrepocfg --datastore=startup --format=xml ietf-keystore --merge=$TLS_CONFIG/load_server_certs.xml sysrepocfg --datastore=startup --format=xml ietf-netconf-server --merge=$TLS_CONFIG/tls_listen.xml } configure_modules() { for dir in "$MODELS_CONFIG"/*; do if [ -d $dir ]; then model=${dir##*/} install_and_configure_yang_model $dir $model prog=$(find_executable $dir subscriber.py) if [ -n "$prog" ]; then configure_subscriber_execution $dir $model $prog fi fi done } install_and_configure_yang_model() { local dir=$1 local model=$2 yang=$(find_file $dir $model.yang model.yang) sysrepoctl --install --yang=$yang data=$(find_file $dir startup.json startup.xml data.json data.xml) if [ -n "$data" ]; then sysrepocfg --datastore=startup --import=$data $model fi } configure_subscriber_execution() { local dir=$1 local model=$2 local prog=$3 PROG_PATH=$PATH if [ -r "$dir/requirements.txt" ]; then env_dir=$(create_python_venv $dir) PROG_PATH=$env_dir/bin:$PROG_PATH fi cat > /etc/supervisord.d/$model.conf <&2 echo $env_dir } configure_ssh configure_tls configure_modules exec /usr/local/bin/supervisord -c /etc/supervisord.conf