Change agent.sh to work with K8s
[aaf/authz.git] / auth / docker / agent.sh
1 #!/bin/bash
2 #########
3 #  ============LICENSE_START====================================================
4 #  org.onap.aaf
5 #  ===========================================================================
6 #  Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
7 #  ===========================================================================
8 #  Licensed under the Apache License, Version 2.0 (the "License");
9 #  you may not use this file except in compliance with the License.
10 #  You may obtain a copy of the License at
11 #
12 #       http://www.apache.org/licenses/LICENSE-2.0
13 #
14 #  Unless required by applicable law or agreed to in writing, software
15 #  distributed under the License is distributed on an "AS IS" BASIS,
16 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 #  See the License for the specific language governing permissions and
18 #  limitations under the License.
19 #  ============LICENSE_END====================================================
20 #
21 # Fill out "aaf.props" if not filled out already
22 if [ ! -e aaf.props ]; then
23   > ./aaf.props
24 fi
25  
26 . ./aaf.props
27
28 if [ -z "$ADMIN" ]; then
29   echo -n "Is the target [K]ubernetes or [D]ocker (K):"
30   read R
31   case $R in 
32     d|D) ADMIN=docker 
33          echo "ADMIN=docker" >> aaf.props
34          ;;
35     *) ADMIN=kubectl
36          echo "ADMIN=kubectl" >> aaf.props
37         ;;
38   esac
39 fi
40    
41 if [ "$ADMIN" = "docker" ]; then
42    PROPS="VERSION DOCKER_REPOSITORY AAF_FQDN AAF_FQDN_IP DEPLOY_FQI APP_FQDN APP_FQI VOLUME DRIVER LATITUDE LONGITUDE"
43    DEF_AAF_FQDN=aaf-onap-test.osaaf.org
44 else
45    PROPS="VERSION DOCKER_REPOSITORY NAMESPACE DEPLOY_FQI DEPLOY_PASSWORD AAF_FQDN APP_FQDN APP_FQI VOLUME PVC DRIVER LATITUDE LONGITUDE"
46    DEF_AAF_FQDN=aaf-locate
47 fi
48
49 for V in $PROPS; do
50    if [ "$(grep $V ./aaf.props)" = "" ]; then
51       unset DEF
52       case $V in
53          DOCKER_REPOSITORY) 
54                      PROMPT="Docker Repo"; DEF="nexus3.onap.org:10003" ;;
55          AAF_FQDN)   PROMPT="AAF's FQDN" 
56                      if [ -z "$NAMESPACE" ]; then
57                        DEF=$DEF_AAF_FQDN
58                      else
59                        DEF=$DEF_AAF_FQDN.$NAMESPACE
60                      fi
61                      ;;                 
62          DEPLOY_FQI) PROMPT="Deployer's FQI"; DEF="deployer@people.osaaf.org" ;;
63          AAF_FQDN_IP)
64                      # Need AAF_FQDN's IP, because not might not be available in mini-container
65                      PROMPT="AAF FQDN IP"
66                      DEF=$(host $AAF_FQDN | grep "has address" | tail -1 | cut -f 4 -d ' ')
67                      ;;
68          APP_FQI)    PROMPT="App's FQI";; 
69          APP_FQDN)   PROMPT="App's Root FQDN";; 
70          VOLUME)     PROMPT="App's AAF Configuration Volume";DEF=${APP_FQDN/.*/}-config;;
71          DRIVER)     PROMPT=$V;DEF=local;;
72          VERSION)    PROMPT="CADI Version";DEF=2.1.9-SNAPSHOT;;
73          NAMESPACE)  PROMPT="Kubernetes Namespace";DEF=onap;;
74          PVC)        PROMPT="Persistent Volume Claim";DEF=$VOLUME-pvc;;
75          LATITUDE|LONGITUDE) PROMPT="$V of Node";;
76          *)          PROMPT=$V;;
77       esac
78       if [ "$DEF" = "" ]; then
79            PROMPT="$PROMPT: "
80       else 
81            PROMPT="$PROMPT ($DEF): "
82       fi
83       read -p "$PROMPT" VAR 
84       if [ "$VAR" = "" ]; then
85          if [ "$DEF" = "" ]; then
86             echo "agent.sh needs each value queried.  Please start again."
87             exit
88          else
89             VAR=$DEF
90             declare $V="$VAR"
91          fi
92       fi
93       echo "$V=$VAR" >> ./aaf.props
94    fi
95 done
96 . ./aaf.props
97
98 if [ -n "$DOCKER_REPOSITORY" ]; then
99   PREFIX="$DOCKER_REPOSITORY/"
100 else
101   PREFIX=""
102 fi 
103
104 if [[ "$ADMIN" =~ docker ]]; then
105   # Make sure Container Volume exists
106   if [ "$($ADMIN volume ls | grep ${VOLUME})" = "" ]; then
107     echo -n "Creating Volume: $VOLUME" 
108     $ADMIN volume create -d ${DRIVER} ${VOLUME}
109   fi
110
111   $ADMIN run \
112     -it \
113     --rm \
114     -v "${VOLUME}:/opt/app/osaaf" \
115     --add-host="$AAF_FQDN:$AAF_FQDN_IP" \
116     --env AAF_FQDN=${AAF_FQDN} \
117     --env DEPLOY_FQI=${DEPLOY_FQI} \
118     --env DEPLOY_PASSWORD=${DEPLOY_PASSWORD} \
119     --env APP_FQI=${APP_FQI} \
120     --env APP_FQDN=${APP_FQDN} \
121     --env LATITUDE=${LATITUDE} \
122     --env LONGITUDE=${LONGITUDE} \
123     --name aaf_agent_$USER \
124     "$PREFIX"onap/aaf/aaf_agent:$VERSION \
125     /bin/bash "$@"
126 else
127   NAMESPACE=${NAMESPACE:=onap}
128   YAML=${VOLUME}.yaml
129   # Make sure Container Volume exists
130   if [ -z "$($ADMIN -n $NAMESPACE get pv | grep ${VOLUME})" ]; then
131     if [ ! -r $YAML ]; then
132       SIZE=30M
133       echo "---" >> $YAML
134       echo "kind: PersistentVolume" >> $YAML
135       echo "apiVersion: v1" >> $YAML
136       echo "metadata:" >> $YAML
137       echo "  name: $VOLUME-pv" >> $YAML
138       echo "  namespace: $NAMESPACE" >> $YAML
139       echo "  labels:" >> $YAML
140       echo "    app: $VOLUME" >> $YAML
141       echo "    type: local" >> $YAML
142       echo "spec:" >> $YAML
143       echo "  capacity:" >> $YAML
144       echo "    storage: $SIZE" >> $YAML
145       echo "  accessModes:" >> $YAML
146       echo "    - ReadWriteOnce" >> $YAML
147       echo "  hostPath:" >> $YAML
148       echo "    path: \"/data/$VOLUME\"" >> $YAML
149       echo "  storageClassName: \"manual\"" >> $YAML
150       echo "---" >> $YAML
151       echo "kind: PersistentVolumeClaim" >> $YAML
152       echo "apiVersion: v1" >> $YAML
153       echo "metadata:" >> $YAML
154       echo "  name: $VOLUME-pvc" >> $YAML
155       echo "  namespace: $NAMESPACE" >> $YAML
156       echo "  labels:" >> $YAML
157       echo "    app: $VOLUME" >> $YAML
158       echo "    type: local" >> $YAML
159       echo "spec:" >> $YAML
160       echo "  selector:" >> $YAML
161       echo "    matchLabels:" >> $YAML
162       echo "      app: $VOLUME" >> $YAML
163       echo "  accessModes:" >> $YAML
164       echo "    - ReadWriteOnce" >> $YAML
165       echo "  resources:" >> $YAML
166       echo "    requests:" >> $YAML
167       echo "      storage: $SIZE" >> $YAML
168       echo "  storageClassName: "manual"" >> $YAML
169     fi
170     $ADMIN -n $NAMESPACE create -f $YAML
171   fi
172   POD=aaf-agent-$USER
173   $ADMIN run -n $NAMESPACE $POD \
174     -i --rm  \
175     --restart=Never \
176     --image="$PREFIX"onap/aaf/aaf_agent:$VERSION \
177     --overrides='
178 {
179   "apiVersion": "v1",
180   "kind": "Pod",
181   "metadata": {
182     "name": "'$POD'"
183   },
184   "spec": {
185     "volumes": [{
186       "name": "'$VOLUME'",
187       "persistentVolumeClaim": {
188          "claimName": "'$VOLUME'-pvc"
189       }
190     }],
191     "containers": [
192       {
193         "name": "aaf-agent-'$USER'",
194         "imagePullPolicy": "IfNotPresent",
195         "image": "'$PREFIX'onap/aaf/aaf_agent:'$VERSION'",
196         "args": [
197            "/bin/bash",
198            "'$@'"
199         ],
200         "stdin": true,
201         "stdinOnce": true,
202         "tty": true,
203         "volumeMounts": [
204           {
205             "mountPath": "/opt/app/osaaf",
206             "name": "'$VOLUME'"
207           }
208         ],
209        "env": [
210           {
211             "name": "AAF_FQDN",
212             "value": "'$AAF_FQDN'"
213           },{
214             "name": "DEPLOY_FQI",
215             "value": "'$DEPLOY_FQI'"
216           },{
217             "name": "DEPLOY_PASSWORD",
218             "value": "'$DEPLOY_PASSWORD'"
219           },{
220             "name": "APP_FQI",
221             "value": "'$APP_FQI'"
222           },{
223             "name": "APP_FQDN",
224             "value": "'$APP_FQDN'"
225           },{
226             "name": "LATITUDE",
227             "value": "'$LATITUDE'"
228           },{
229             "name": "LONGITUDE",
230             "value": "'$LONGITUDE'"
231           }
232         ]
233       }
234     ]
235   }
236 }'
237      
238
239 fi