NONRTRIC-979: ServiceManager - deployment and undeployment
[it/dep.git] / bin / deploy-nonrtric
1 #!/bin/bash
2 ################################################################################
3 #   Copyright (c) 2023 Nordix Foundation.                                      #
4 #   Copyright (C) 2023-2024 OpenInfra Foundation Europe. All rights reserved.  #
5 #                                                                              #
6 #   Licensed under the Apache License, Version 2.0 (the "License");            #
7 #   you may not use this file except in compliance with the License.           #
8 #   You may obtain a copy of the License at                                    #
9 #                                                                              #
10 #       http://www.apache.org/licenses/LICENSE-2.0                             #
11 #                                                                              #
12 #   Unless required by applicable law or agreed to in writing, software        #
13 #   distributed under the License is distributed on an "AS IS" BASIS,          #
14 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15 #   See the License for the specific language governing permissions and        #
16 #   limitations under the License.                                             #
17 ################################################################################
18
19 # This script deploys NonRtRic components automatically
20
21
22
23 if [ "$#" -eq 1 ]; then
24     OVERRIDEYAML=$1
25 else
26
27     while [ -n "$1" ]; do # while loop starts
28
29         case "$1" in
30
31         -f) OVERRIDEYAML=$2
32             shift
33             ;;
34         *) echo "Option $1 not recognized" ;; # In case you typed a different option other than a,b,c
35
36         esac
37
38         shift
39
40     done
41 fi
42
43
44 if [ -z "$OVERRIDEYAML" ];then
45     echo "****************************************************************************************************************"
46     echo "                                                     ERROR                                                      "
47     echo "****************************************************************************************************************"
48     echo "RIC deployment without deployment recipe is currently disabled. Please specify an recipe with the -f option."
49     echo "****************************************************************************************************************"
50     exit 1
51 fi
52
53
54 ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
55
56 echo "** $ROOT_DIR"
57 rm $ROOT_DIR/../nonrtric/helm/*/charts/*.tgz
58
59 #ChartMuseum configuration
60 CM_VERSION="v0.16.1"
61 CM_PORT="8879"
62 CM_BASE_URL="http://127.0.0.1:$CM_PORT"
63 CM_CHART_GET_URL="$CM_BASE_URL/charts"
64 CM_CHART_POST_URL="$CM_BASE_URL/charts/api/charts"
65
66 #Check for helm3
67 IS_HELM3=$(helm version -c --short|grep -e "^v3")
68
69 if ! command -v chartmuseum &> /dev/null
70 then
71   pushd /tmp
72   echo "Installing ChartMuseum binary..."
73   wget https://get.helm.sh/chartmuseum-$CM_VERSION-linux-amd64.tar.gz
74   tar xvfz chartmuseum-$CM_VERSION-linux-amd64.tar.gz
75   sudo mv /tmp/linux-amd64/chartmuseum /usr/local/bin/chartmuseum
76   popd
77 else
78   echo "ChartMuseum is already installed."
79 fi
80
81 # Package common templates and serve it using Helm local repo
82 HELM_LOCAL_REPO="./chartstorage"
83 rm $HELM_LOCAL_REPO/*
84
85 #Start Chart Museum server if there isn't one
86 CHART_MUSEUM_PID=$(lsof -i :"$CM_PORT" | grep "chartmus" | grep -v "grep" | awk '{print $2}')
87 if [ -z "$CHART_MUSEUM_PID" ]; then
88   echo "Starting ChartMuseum on port $CM_PORT..."
89   nohup chartmuseum --port=$CM_PORT --storage="local" --context-path=/charts --storage-local-rootdir=$HELM_LOCAL_REPO >/dev/null 2>&1 &
90   echo $! > $ROOT_DIR/CM_PID.txt
91 else
92   echo "ChartMuseum is already running..."
93 fi
94
95 # Check if ChartMuseum  is ready to serve request
96 command="curl --silent --output /dev/null  $CM_BASE_URL"
97 for i in $(seq 1 5)
98 do $command && s=0 && break || s=$? && echo "Failed to establish a connection with the ChartMuseum server. Retrying after 5s" && sleep 5;
99 done
100
101 if [ $s -gt 0 ]
102 then
103         echo "Cmd to test ChartMuseum failed with ($s): $command"
104         exit $s
105 fi
106
107 helm repo remove local
108 helm repo add local $CM_CHART_GET_URL
109
110 echo -e "\nPackaging NONRTRIC common [nonrtric-common]"
111 NONRTRIC_COMMON_CHART_VERSION=$(cat $ROOT_DIR/../ric-common/Common-Template/helm/nonrtric-common/Chart.yaml | grep version | awk '{print $2}')
112 helm package -d /tmp $ROOT_DIR/../ric-common/Common-Template/helm/nonrtric-common
113 curl --data-binary @/tmp/nonrtric-common-$NONRTRIC_COMMON_CHART_VERSION.tgz $CM_CHART_POST_URL
114
115 charts_already_exists=()
116
117 COMPONENTS="
118 a1controller \
119 a1simulator \
120 capifcore \
121 controlpanel \
122 dmaapadapterservice \
123 dmaapmediatorservice \
124 dmeparticipant \
125 helmmanager \
126 informationservice \
127 nonrtricgateway \
128 orufhrecovery \
129 policymanagementservice \
130 ransliceassurance \
131 rappcatalogueenhancedservice \
132 rappcatalogueservice \
133 rappmanager \
134 servicemanager \
135 "
136
137 for component in $COMPONENTS; do
138     echo "Packaging NONRTRIC component [$component]"
139     helm dep up $ROOT_DIR/../nonrtric/helm/$component
140     VERSION=$(cat $ROOT_DIR/../nonrtric/helm/$component/Chart.yaml | grep version | awk '{print $2}')
141     helm package -d /tmp $ROOT_DIR/../nonrtric/helm/$component
142     resp_code=$(curl -s -o /dev/null -w "%{http_code}" --data-binary @/tmp/$component-$VERSION.tgz $CM_CHART_POST_URL)
143     echo "Chart upload status of $component is $resp_code"
144     if [ "$resp_code" -eq 409 ]; then
145       charts_already_exists+=("$component")
146     fi
147 done
148
149 if [ ${#charts_already_exists[@]} -gt 0 ]; then
150   echo "----------------------------------- WARNING!!! -------------------------------------------"
151   echo "The following charts already exists in ChartMuseum '${charts_already_exists[@]}'."
152   echo "The current build of the charts hasn't been updated because the charts already exist."
153   echo "It is recommended to delete the charts from ChartMuseum before the build."
154   echo "------------------------------------------------------------------------------------------"
155 fi
156
157 helm dep up $ROOT_DIR/../nonrtric/helm/nonrtric
158
159 helm repo index ${HELM_LOCAL_REPO}
160
161 # Make sure that helm local repo is added
162 helm repo add local $CM_CHART_GET_URL --force-update
163
164 echo "Finished Packaging NONRTRIC components [$COMPONENTS]"
165
166
167 COMMON_BLOCK=$(cat $OVERRIDEYAML | awk '/^common:/{getline; while ($0 ~ /^ +.*|^ *$/) {print $0; if (getline == 0) {break}}}')
168 NAMESPACE_BLOCK=$(cat $OVERRIDEYAML | awk '/^  namespace:/{getline; while ($0 ~ /^    .*|^ *$/) {print $0; if (getline == 0) {break}}}')
169 NONRTRIC_NAMESPACE=$(echo "$NAMESPACE_BLOCK" | awk '/^ *nonrtric:/{print $2}')
170 RELEASE_PREFIX=$(echo "$COMMON_BLOCK" | awk '/^ *releasePrefix:/{print $2}')
171 INSTALL_KONG=$(cat $OVERRIDEYAML | awk '/^  installKong:/{print $2}')
172 INSTALL_RANPM=$(cat $OVERRIDEYAML | awk '/^  installRanpm:/{print $2}')
173
174 if ! kubectl get ns ${NONRTRIC_NAMESPACE:-nonrtric}> /dev/null 2>&1; then
175     kubectl create ns ${NONRTRIC_NAMESPACE:-nonrtric}
176 fi
177
178 if ! kubectl get ns onap > /dev/null 2>&1; then
179     kubectl create ns onap
180 fi
181
182 HELM_NAME_OPT=""
183 if [ -z $IS_HELM3 ];then
184    HELM_NAME_OPT="--name"
185 fi
186
187 echo "Install Kong- $INSTALL_KONG"
188
189 if [ "$INSTALL_KONG" = true ];then
190   echo "Install kongstorage through helm"
191   helm install kongstorage -n "${NONRTRIC_NAMESPACE:-nonrtric}" ${HELM_NAME_OPT}  "$ROOT_DIR/../nonrtric/helm/kongstorage"
192
193   echo "Installing Kong"
194   helm repo add kong https://charts.konghq.com --force-update
195   helm repo update
196   helm install kong-nonrtric kong/kong -n ${NONRTRIC_NAMESPACE:-nonrtric} -f dep/nonrtric/helm/kongstorage/kongvalues.yaml
197 fi
198
199 kubectl create configmap -n ${NONRTRIC_NAMESPACE:-nonrtric} nonrtric-recipe --from-file=recipe=$OVERRIDEYAML
200
201 echo "Deploying NONRTRIC"
202
203 echo "Install Ranpm- $INSTALL_RANPM"
204
205 if [ "$INSTALL_RANPM" = true ];then
206    echo "Running install-ranpm.sh"
207    chmod +x ${ROOT_DIR}/../ranpm/install/install-ranpm.sh
208    ${ROOT_DIR}/../ranpm/install/install-ranpm.sh
209    echo "install-ranpm.sh completed"
210 fi
211
212 echo "helm install -f $OVERRIDEYAML --namespace ${NONRTRIC_NAMESPACE:-nonrtric} ${HELM_NAME_OPT} ${RELEASE_PREFIX} $ROOT_DIR/../nonrtric/helm/nonrtric"
213 helm install -f $OVERRIDEYAML -n "${NONRTRIC_NAMESPACE:-nonrtric}" ${HELM_NAME_OPT} "${RELEASE_PREFIX}" "$ROOT_DIR/../nonrtric/helm/nonrtric"