| #!/bin/bash |
| |
| # ============LICENSE_START=============================================== |
| # Copyright (C) 2023 Nordix Foundation. 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================================================= |
| # |
| |
| print_usage() { |
| echo "Usage: docker-setup.sh" |
| exit 1 |
| } |
| |
| check_error() { |
| if [ $1 -ne 0 ]; then |
| echo "Failed $2" |
| echo "Exiting..." |
| exit 1 |
| fi |
| } |
| |
| setup_init() { |
| echo "Cleaning previously started containers..." |
| |
| ./docker-tear-down.sh |
| |
| echo "Docker pruning" |
| docker system prune -f |
| docker volume prune -f |
| |
| echo "Creating dir for minio volume mapping" |
| |
| mkdir -p /tmp/minio-test |
| mkdir -p /tmp/minio-test/0 |
| rm -rf /tmp/minio-test/0/* |
| |
| NW="nonrtric-docker-net" |
| echo "Creating docker network" |
| docker network inspect $NW 2> /dev/null 1> /dev/null |
| if [ $? -ne 0 ]; then |
| docker network create $NW |
| else |
| echo " Network: $NW exits" |
| fi |
| } |
| |
| pull_image() { |
| if [ -z "$(docker images -q $1)" ]; then |
| echo "Pulling image... "$1 |
| docker pull $1 |
| check_error $? |
| fi |
| } |
| |
| check_images(){ |
| export KEYCLOAK_IMAGE=quay.io/keycloak/keycloak:20.0.1 |
| pull_image $KEYCLOAK_IMAGE |
| |
| export OPA_IMAGE=openpolicyagent/opa:latest-envoy |
| pull_image $OPA_IMAGE |
| |
| export BUNDLE_IMAGE=nginx:1.21 |
| pull_image $BUNDLE_IMAGE |
| |
| export MINIO_IMAGE=minio/minio |
| pull_image $MINIO_IMAGE |
| |
| export REDPANDA_IMAGE=redpandadata/console:v2.2.3 |
| pull_image $REDPANDA_IMAGE |
| |
| export STRIMZI_IMAGE=quay.io/strimzi/kafka:0.35.0-kafka-3.4.0 |
| pull_image $STRIMZI_IMAGE |
| |
| export DMAAP_IMAGE=nexus3.onap.org:10002/onap/dmaap/dmaap-mr:1.4.4 |
| pull_image $DMAAP_IMAGE |
| |
| export VES_COLLECTOR_IMAGE=nexus3.onap.org:10002/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.12.3 |
| pull_image $VES_COLLECTOR_IMAGE |
| |
| export ICS_IMAGE="nexus3.o-ran-sc.org:10001/o-ran-sc/nonrtric-plt-informationcoordinatorservice:1.5.0" |
| pull_image $ICS_IMAGE |
| |
| export DMAAPADP_IMAGE="nexus3.o-ran-sc.org:10001/o-ran-sc/nonrtric-plt-pmproducer:1.0.1" |
| pull_image $DMAAPADP_IMAGE |
| |
| export DFC_IMAGE="nexus3.o-ran-sc.org:10001/o-ran-sc/nonrtric-plt-ranpm-datafilecollector:1.0.0" |
| pull_image $DFC_IMAGE |
| |
| export KPX_IMAGE="nexus3.o-ran-sc.org:10001/o-ran-sc/nonrtric-plt-ranpm-pm-file-converter:1.0.1" |
| pull_image $KPX_IMAGE |
| |
| export AUTH_TOKEN_IMAGE=nexus3.o-ran-sc.org:10001/o-ran-sc/nonrtric-plt-auth-token-fetch:1.1.1 |
| pull_image $AUTH_TOKEN_IMAGE |
| |
| export NONRTRIC_GATEWAY_IMAGE=nexus3.o-ran-sc.org:10001/o-ran-sc/nonrtric-gateway:1.2.0 |
| pull_image $NONRTRIC_GATEWAY_IMAGE |
| |
| export CONTROL_PANEL_IMAGE=nexus3.o-ran-sc.org:10001/o-ran-sc/nonrtric-controlpanel:2.5.0 |
| pull_image $CONTROL_PANEL_IMAGE |
| } |
| |
| setup_keycloak() { |
| ./config/keycloak/certs/gen-certs.sh |
| echo "Starting containers for: keycloak, opa" |
| envsubst '$KEYCLOAK_IMAGE,$OPA_IMAGE,$BUNDLE_IMAGE' < docker-compose-security.yaml > docker-compose-security_gen.yaml |
| docker-compose -p security -f docker-compose-security_gen.yaml up -d |
| } |
| |
| populate_keycloak(){ |
| # Create realm in keycloak |
| . scripts/populate_keycloak.sh |
| |
| create_realms nonrtric-realm |
| while [ $? -ne 0 ]; do |
| create_realms nonrtric-realm |
| done |
| |
| # Create client for admin calls |
| cid="console-setup" |
| create_clients nonrtric-realm $cid |
| check_error $? |
| generate_client_secrets nonrtric-realm $cid |
| check_error $? |
| |
| echo "" |
| |
| cid="console-setup" |
| __get_admin_token |
| TOKEN=$(get_client_token nonrtric-realm $cid) |
| |
| cid="kafka-producer-pm-xml2json" |
| create_clients nonrtric-realm $cid |
| check_error $? |
| generate_client_secrets nonrtric-realm $cid |
| check_error $? |
| |
| export XML2JSON_CLIENT_SECRET=$(< .sec_nonrtric-realm_$cid) |
| |
| cid="pm-producer-json2kafka" |
| create_clients nonrtric-realm $cid |
| check_error $? |
| generate_client_secrets nonrtric-realm $cid |
| check_error $? |
| |
| export JSON2KAFKA_CLIENT_SECRET=$(< .sec_nonrtric-realm_$cid) |
| |
| cid="dfc" |
| create_clients nonrtric-realm $cid |
| check_error $? |
| generate_client_secrets nonrtric-realm $cid |
| check_error $? |
| |
| export DFC_CLIENT_SECRET=$(< .sec_nonrtric-realm_$cid) |
| } |
| |
| setup_kafka() { |
| echo "Starting containers for: kafka, zookeeper, kafka client, ics, minio" |
| envsubst < docker-compose-k1.yaml > docker-compose-k1_gen.yaml |
| docker-compose -p common -f docker-compose-k1_gen.yaml up -d |
| } |
| |
| create_topics() { |
| echo "Creating topics: $TOPICS, may take a while ..." |
| for t in $TOPICS; do |
| retcode=1 |
| rt=43200000 |
| echo "Creating topic $t with retention $(($rt/1000)) seconds" |
| while [ $retcode -ne 0 ]; do |
| docker exec -it common-kafka-1-1 ./bin/kafka-topics.sh \ |
| --create --topic $t --config retention.ms=$rt --bootstrap-server kafka-1:9092 |
| retcode=$? |
| done |
| done |
| } |
| |
| setup_dfc() { |
| export NUM_DFC=1 |
| echo "Starting $NUM_DFC dfc" |
| export DFC_MINIO=http://minio-server:9000 |
| export FILES_VOLUME="/pm-files" |
| |
| cwd=$PWD |
| for (( i=1; i<=$NUM_DFC; i++ )); do |
| echo "Updating dfc$i truststore" |
| cd $cwd/config/dfc$i |
| cp ../dfc-common/template-truststore.jks truststore.jks |
| check_error $? |
| |
| echo " Adding https ca cert to dfc$i truststore" |
| keytool -importcert -alias pm-https -file $cwd/config/https/certs/httpsca.crt -keystore truststore.jks -storetype JKS -storepass $(cat ../dfc-common/truststore.pass) -noprompt |
| check_error $? |
| done |
| cd $cwd |
| |
| chmod 666 config/dfc1/token-cache/jwt.txt |
| envsubst < docker-compose-dfc1.yaml > docker-compose-dfc_gen.yaml |
| envsubst < config/dfc1/application-template.yaml > config/dfc1/application.yaml |
| docker-compose -p dfc -f docker-compose-dfc_gen.yaml up -d |
| } |
| |
| setup_producers() { |
| echo "Starting producers" |
| chmod 666 config/pmpr/token-cache/jwt.txt |
| export KPADP_MINIO=http://minio-server:9000 |
| cp config/pmpr/application_configuration-minio-template.json config/pmpr/application_configuration.json |
| envsubst < config/pmpr/application-minio-template.yaml > config/pmpr/application.yaml |
| |
| envsubst < docker-compose-producers.yaml > docker-compose-producers_gen.yaml |
| docker-compose -p prod -f docker-compose-producers_gen.yaml up -d |
| } |
| |
| create_http_servers_certs() { |
| export NUM_HTTP=10 |
| echo "" |
| ./config/https/certs/gen-certs.sh $NUM_HTTP |
| } |
| |
| setup_http_servers() { |
| cp pm-files/pm* ne-files |
| |
| echo "Starting http servers" |
| export PM_HTTPSSERVER_IMAGE="pm-https-server:latest" |
| |
| total_lines=$(cat docker-compose-pm-https.yaml | wc -l) |
| services_line=$(grep -n "services:" docker-compose-pm-https.yaml| cut -f1 -d:) |
| let remaining_lines=$total_lines-$services_line |
| export START_TIME=$(date +%Y%m%d.%H%M -d '3 hours ago') |
| |
| grep -B $services_line "services:" docker-compose-pm-https.yaml > docker-compose-pm-https_gen.yaml |
| for (( i=1; i<=$NUM_HTTP; i++ )); do |
| export CONTAINER_NUM=$i |
| grep -A $remaining_lines "services:" docker-compose-pm-https.yaml | grep -v "services:" | \ |
| envsubst '$CONTAINER_NUM,$PM_HTTPSSERVER_IMAGE,$START_TIME' >> docker-compose-pm-https_gen.yaml |
| done |
| docker-compose -p pm-https -f docker-compose-pm-https_gen.yaml up -d |
| } |
| |
| ## Main ## |
| export KAFKA_NUM_PARTITIONS=10 |
| export TOPICS="file-ready collected-file json-file-ready-kp json-file-ready-kpadp pmreports" |
| |
| setup_init |
| |
| check_images |
| |
| setup_keycloak |
| check_error $? |
| |
| # Wait for keycloak to start |
| echo 'Waiting for keycloak to be ready' |
| until [ $(curl -s -w '%{http_code}' -o /dev/null 'http://localhost:8462') -eq 200 ]; |
| do |
| echo -n '.' |
| sleep 2 |
| done |
| echo "" |
| populate_keycloak |
| |
| setup_kafka |
| check_error $? |
| |
| create_topics |
| |
| create_http_servers_certs |
| check_error $? |
| |
| setup_dfc |
| check_error $? |
| |
| setup_producers |
| check_error $? |
| |
| setup_http_servers |
| check_error $? |
| |
| scripts/clean-shared-volume.sh |