aboutsummaryrefslogtreecommitdiffstats
path: root/dbc-client/misc/dbc-client
blob: 2436e9a5d389f44976d2ee6a896f66c036180f29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/bin/sh
#
# ============LICENSE_START===============================================
# org.onap.dmaap
# ========================================================================
# Copyright © 2019 AT&T Intellectual Property. All rights reserved.
# Copyright (C) 2021 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.
# ============LICENSE_END=================================================
# ECOMP is a trademark and service mark of AT&T Intellectual Property.

umask 0022
set -uex -o pipefail
export PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin

# RESP_CACHE is (/opt/app/config/cache) empty-dir volume mount for K8s env
RESP_CACHE=${RESP_CACHE:-''}
RESP=${RESP:-'/dev/null'}
APP_ROOT=${APP_ROOT:-/opt/app/dbc-client}
IF_PUB_SUB_EXIST=${IF_PUB_SUB_EXIST:-false}
CONFIGMAP_ROOT=${CONFIGMAP_ROOT:-/opt/app/config}

PORT=${PORT:-8443}
DBC=${DBC:-dmaap-bc}
PROTO=${PROTO:-https}
PARAM=${PARAM:-'useExisting=true'}
REQUESTID=${REQUESTID:-dbc-client}
URL=${URL:-"${PROTO}"://"${DBC}":"${PORT}"/webapi/}

CA_PEM=${CA_PEM:-ca.pem}
KEY_PEM=${KEY_PEM:-key.pem}
CLIENT_PEM=${CLIENT_PEM:-client.pem}
PEM_DIR=${PEM_DIR:-/opt/app/osaaf/local}
CERT_PWD=${CERT_PWD:-'2U[iOZzMHI:.#tdCwlBqc;}S'}

BA_PWD=${BA_PWD:-'demo123456!'}
AUTH_METHOD=${AUTH_METHOD:-basicAuth}
BA_IDENTITY=${BA_IDENTITY:-dmaap-bc@dmaap-bc.onap.org}

function xcurl() {
  curl -X POST \
    -s "$CURL_CRED" \
    -w "%{http_code}" \
    -H "X-ECOMP-RequestID: $REQUESTID" \
    -H "Content-Type: application/json" "$@"
}

function init_config() {
  if [ ! -d "$APP_ROOT" -a ! -d "$CONFIGMAP_ROOT" ]; then
    echo "Expected either App root directory $APP_ROOT Or ConfigMap directory $CONFIGMAP_ROOT does not exist."
    exit 1
  fi
  cd "$PEM_DIR"
  if [ "$AUTH_METHOD" = "basicAuth" ]; then
    echo "-u ${BA_IDENTITY}:${BA_PWD}" >"$PEM_DIR"/curl.cred
    CURL_CRED="-K $PEM_DIR/curl.cred"
  elif [ -f "$CA_PEM" -a -f "$CLIENT_PEM" -a -f "$KEY_PEM" ]; then
    printf "key \"$PEM_DIR/$KEY_PEM\"\n cacert \"$PEM_DIR/$CA_PEM\"\n cert \"$PEM_DIR/${CLIENT_PEM}:${CERT_PWD}\"" >$PEM_DIR/curl.cred
    CURL_CRED="-K $PEM_DIR/curl.cred"
  else
    echo "PEM files for authorization not found..!"
  fi
}

function init_dbc_provisioning() {
  cd "$CONFIGMAP_ROOT"
  for dir in dmaap dcaeLocations mr_clusters topics mr_clients dr_nodes feeds dr_pubs dr_subs; do
    if [ -d ${dir} ]; then
      for file in $(ls ${dir}/*.json); do
        do_http_post "$file" "$dir"
      done
    fi
  done
}

function do_http_post() {
  RETRY_TIME=60
  if [ -n "$RESP_CACHE" ]; then
    RESP="$RESP_CACHE"/"$(echo "${1##*/}" | cut -d "." -f1)"-resp.json
  fi
  while true; do
    if [ "$2" != "feeds" -a "$2" != "topics" ]; then
      req_body=$(cat "${1}" | envsubst)
      if [ -n "$RESP_CACHE" ] && [ "${2}" = "dr_pubs" -o "${2}" = "dr_subs" ]; then
        IF_PUB_SUB_EXIST=false
        check_pub_sub "${2}" "${req_body}" "${RESP}"
        if [ "${IF_PUB_SUB_EXIST}" = true ]; then
          echo "DR Publisher or Subscriber already exist.."
          break
        fi
      fi
      rc=$(xcurl -o "$RESP" -d "$req_body" "${URL}${2}")
      if [ "$rc" = "200" -o "$rc" = "201" -o "$rc" = "409" ]; then
        echo "Http Post request is successful with response code=$rc"
        break
      fi
    else
      rc=$(xcurl -o "$RESP" -d @"${1}" "${URL}${2}"/?"${PARAM}")
      if [ "$rc" = "200" -o "$rc" = "201" -o "$rc" = "409" ]; then
        echo "Http Post request for feed creation is successful with response code=$rc"
        break
      fi
    fi
    echo "$(date): Http Response code=$rc.  Will retry after $RETRY_TIME seconds.."
    sleep "$RETRY_TIME"
  done
}

function check_pub_sub() {
  #Parameters:
  #${1} Param - String representing dir either dr_pubs or dr_subs
  #${2} Param - Request details (Dr Publisher/Subscriber creation input details) containing feedName, dr-userName, dr-Password, dr-LocationName
  #${3} Param - String representing RESP_CACHE Env to '/opt/app/config/cache' or '/dev/null'
  feed_config_resp="$RESP_CACHE"/"feedConfig-$(echo "${3//[!0-9]/}")-resp.json"
  if [ -f "${feed_config_resp}" ]; then
    echo "Checking if pub or sub exist.."
    val=${1#*_}
    dr_usr=$(echo "${2}" | jq -r '.username')
    dr_pwd=$(echo "${2}" | jq -r '.userpwd')
    pub_sub_cnt=$(jq ".${val} | length" "${feed_config_resp}")
    local i=0
    while [ "$i" -lt "$pub_sub_cnt" ]; do
      _dr_usr=$(jq -r ".${val}[$i].username" "${feed_config_resp}")
      _dr_pwd=$(jq -r ".${val}[$i].userpwd" "${feed_config_resp}")
      if [ "${dr_usr}" = "${_dr_usr}" -a "${dr_pwd}" = "${_dr_pwd}" ]; then
        if [ "${1}" = "dr_pubs" ]; then
          echo "Publisher exist with username: ${dr_usr}, password: ${dr_pwd}"
          echo "$(jq -c ".${val}[$i]" "${feed_config_resp}")" >"${3}"
          IF_PUB_SUB_EXIST=true
          break
        elif [ "${1}" = "dr_subs" ]; then
          dr_loc=$(echo "${2}" | jq -r '.dcaeLocationName')
          _dr_loc=$(jq -r ".${val}[$i].dcaeLocationName" "${feed_config_resp}")
          dr_deliveryURL=$(echo "${2}" | jq -r '.deliveryURL')
          _dr_deliveryURL=$(jq -r ".${val}[$i].deliveryURL" "${feed_config_resp}")
          if [ "${dr_loc}" = "${_dr_loc}" -a "${dr_deliveryURL}" = "${_dr_deliveryURL}" ]; then
            echo "Subscriber exist with username: ${dr_usr}, password: ${dr_pwd}, dcaeLocationName: ${dr_loc}, deliveryURL: ${dr_deliveryURL}"
            echo "$(jq -c ".${val}[$i]" "${feed_config_resp}")" >"${3}"
            IF_PUB_SUB_EXIST=true
            break
          fi
        fi
      fi
      i=$((i + 1))
    done
  else
    echo "Feed configuration doesn't exist."
  fi
}

init_config
init_dbc_provisioning