Change agent.sh to work with K8s
[aaf/authz.git] / auth / docker / agent.sh
index 88b8497..33db109 100644 (file)
@@ -18,8 +18,6 @@
 #  limitations under the License.
 #  ============LICENSE_END====================================================
 #
-
-
 # Fill out "aaf.props" if not filled out already
 if [ ! -e aaf.props ]; then
   > ./aaf.props
@@ -27,29 +25,53 @@ fi
  
 . ./aaf.props
 
-DOCKER=${DOCKER:=docker}
-CADI_VERSION=${CADI_VERSION:=2.1.9-SNAPSHOT}
+if [ -z "$ADMIN" ]; then
+  echo -n "Is the target [K]ubernetes or [D]ocker (K):"
+  read R
+  case $R in 
+    d|D) ADMIN=docker 
+         echo "ADMIN=docker" >> aaf.props
+         ;;
+    *) ADMIN=kubectl
+         echo "ADMIN=kubectl" >> aaf.props
+       ;;
+  esac
+fi
+   
+if [ "$ADMIN" = "docker" ]; then
+   PROPS="VERSION DOCKER_REPOSITORY AAF_FQDN AAF_FQDN_IP DEPLOY_FQI APP_FQDN APP_FQI VOLUME DRIVER LATITUDE LONGITUDE"
+   DEF_AAF_FQDN=aaf-onap-test.osaaf.org
+else
+   PROPS="VERSION DOCKER_REPOSITORY NAMESPACE DEPLOY_FQI DEPLOY_PASSWORD AAF_FQDN APP_FQDN APP_FQI VOLUME PVC DRIVER LATITUDE LONGITUDE"
+   DEF_AAF_FQDN=aaf-locate
+fi
 
-for V in VERSION DOCKER_REPOSITORY AAF_FQDN AAF_FQDN_IP DEPLOY_FQI APP_FQDN APP_FQI VOLUME DRIVER LATITUDE LONGITUDE; do
+for V in $PROPS; do
    if [ "$(grep $V ./aaf.props)" = "" ]; then
       unset DEF
       case $V in
         DOCKER_REPOSITORY) 
-               PROMPT="Docker Repo"
-               DEF=""
-               ;;
-         AAF_FQDN)   PROMPT="AAF's FQDN";;
-         DEPLOY_FQI) PROMPT="Deployer's FQI";;
+                    PROMPT="Docker Repo"; DEF="nexus3.onap.org:10003" ;;
+         AAF_FQDN)   PROMPT="AAF's FQDN" 
+                     if [ -z "$NAMESPACE" ]; then
+                      DEF=$DEF_AAF_FQDN
+                    else
+                       DEF=$DEF_AAF_FQDN.$NAMESPACE
+                    fi
+                     ;;                        
+         DEPLOY_FQI) PROMPT="Deployer's FQI"; DEF="deployer@people.osaaf.org" ;;
          AAF_FQDN_IP)
-               # Need AAF_FQDN's IP, because not might not be available in mini-container
-               PROMPT="AAF FQDN IP"
-               DEF=$(host $AAF_FQDN | grep "has address" | tail -1 | cut -f 4 -d ' ')
-                ;;
+                    # Need AAF_FQDN's IP, because not might not be available in mini-container
+                    PROMPT="AAF FQDN IP"
+                    DEF=$(host $AAF_FQDN | grep "has address" | tail -1 | cut -f 4 -d ' ')
+                     ;;
          APP_FQI)    PROMPT="App's FQI";; 
          APP_FQDN)   PROMPT="App's Root FQDN";; 
-         VOLUME)     PROMPT="APP's AAF Configuration Volume";;
+         VOLUME)     PROMPT="App's AAF Configuration Volume";DEF=${APP_FQDN/.*/}-config;;
          DRIVER)     PROMPT=$V;DEF=local;;
-        VERSION)    PROMPT="CADI Version";DEF=$CADI_VERSION;;
+        VERSION)    PROMPT="CADI Version";DEF=2.1.9-SNAPSHOT;;
+        NAMESPACE)  PROMPT="Kubernetes Namespace";DEF=onap;;
+        PVC)        PROMPT="Persistent Volume Claim";DEF=$VOLUME-pvc;;
          LATITUDE|LONGITUDE) PROMPT="$V of Node";;
          *)          PROMPT=$V;;
       esac
@@ -65,6 +87,7 @@ for V in VERSION DOCKER_REPOSITORY AAF_FQDN AAF_FQDN_IP DEPLOY_FQI APP_FQDN APP_
             exit
          else
             VAR=$DEF
+            declare $V="$VAR"
          fi
       fi
       echo "$V=$VAR" >> ./aaf.props
@@ -72,19 +95,20 @@ for V in VERSION DOCKER_REPOSITORY AAF_FQDN AAF_FQDN_IP DEPLOY_FQI APP_FQDN APP_
 done
 . ./aaf.props
 
-# Make sure Container Volume exists
-if [ "$($DOCKER volume ls | grep ${VOLUME})" = "" ]; then
-  echo -n "Creating Volume: " 
-  $DOCKER volume create -d ${DRIVER} ${VOLUME}
-fi
-
 if [ -n "$DOCKER_REPOSITORY" ]; then
   PREFIX="$DOCKER_REPOSITORY/"
 else
   PREFIX=""
 fi 
 
-$DOCKER run \
+if [[ "$ADMIN" =~ docker ]]; then
+  # Make sure Container Volume exists
+  if [ "$($ADMIN volume ls | grep ${VOLUME})" = "" ]; then
+    echo -n "Creating Volume: $VOLUME" 
+    $ADMIN volume create -d ${DRIVER} ${VOLUME}
+  fi
+
+  $ADMIN run \
     -it \
     --rm \
     -v "${VOLUME}:/opt/app/osaaf" \
@@ -99,3 +123,117 @@ $DOCKER run \
     --name aaf_agent_$USER \
     "$PREFIX"onap/aaf/aaf_agent:$VERSION \
     /bin/bash "$@"
+else
+  NAMESPACE=${NAMESPACE:=onap}
+  YAML=${VOLUME}.yaml
+  # Make sure Container Volume exists
+  if [ -z "$($ADMIN -n $NAMESPACE get pv | grep ${VOLUME})" ]; then
+    if [ ! -r $YAML ]; then
+      SIZE=30M
+      echo "---" >> $YAML
+      echo "kind: PersistentVolume" >> $YAML
+      echo "apiVersion: v1" >> $YAML
+      echo "metadata:" >> $YAML
+      echo "  name: $VOLUME-pv" >> $YAML
+      echo "  namespace: $NAMESPACE" >> $YAML
+      echo "  labels:" >> $YAML
+      echo "    app: $VOLUME" >> $YAML
+      echo "    type: local" >> $YAML
+      echo "spec:" >> $YAML
+      echo "  capacity:" >> $YAML
+      echo "    storage: $SIZE" >> $YAML
+      echo "  accessModes:" >> $YAML
+      echo "    - ReadWriteOnce" >> $YAML
+      echo "  hostPath:" >> $YAML
+      echo "    path: \"/data/$VOLUME\"" >> $YAML
+      echo "  storageClassName: \"manual\"" >> $YAML
+      echo "---" >> $YAML
+      echo "kind: PersistentVolumeClaim" >> $YAML
+      echo "apiVersion: v1" >> $YAML
+      echo "metadata:" >> $YAML
+      echo "  name: $VOLUME-pvc" >> $YAML
+      echo "  namespace: $NAMESPACE" >> $YAML
+      echo "  labels:" >> $YAML
+      echo "    app: $VOLUME" >> $YAML
+      echo "    type: local" >> $YAML
+      echo "spec:" >> $YAML
+      echo "  selector:" >> $YAML
+      echo "    matchLabels:" >> $YAML
+      echo "      app: $VOLUME" >> $YAML
+      echo "  accessModes:" >> $YAML
+      echo "    - ReadWriteOnce" >> $YAML
+      echo "  resources:" >> $YAML
+      echo "    requests:" >> $YAML
+      echo "      storage: $SIZE" >> $YAML
+      echo "  storageClassName: "manual"" >> $YAML
+    fi
+    $ADMIN -n $NAMESPACE create -f $YAML
+  fi
+  POD=aaf-agent-$USER
+  $ADMIN run -n $NAMESPACE $POD \
+    -i --rm  \
+    --restart=Never \
+    --image="$PREFIX"onap/aaf/aaf_agent:$VERSION \
+    --overrides='
+{
+  "apiVersion": "v1",
+  "kind": "Pod",
+  "metadata": {
+    "name": "'$POD'"
+  },
+  "spec": {
+    "volumes": [{
+      "name": "'$VOLUME'",
+      "persistentVolumeClaim": {
+         "claimName": "'$VOLUME'-pvc"
+      }
+    }],
+    "containers": [
+      {
+        "name": "aaf-agent-'$USER'",
+        "imagePullPolicy": "IfNotPresent",
+        "image": "'$PREFIX'onap/aaf/aaf_agent:'$VERSION'",
+        "args": [
+          "/bin/bash",
+           "'$@'"
+        ],
+        "stdin": true,
+        "stdinOnce": true,
+        "tty": true,
+        "volumeMounts": [
+          {
+            "mountPath": "/opt/app/osaaf",
+            "name": "'$VOLUME'"
+          }
+        ],
+       "env": [
+          {
+            "name": "AAF_FQDN",
+            "value": "'$AAF_FQDN'"
+          },{
+            "name": "DEPLOY_FQI",
+            "value": "'$DEPLOY_FQI'"
+          },{
+            "name": "DEPLOY_PASSWORD",
+            "value": "'$DEPLOY_PASSWORD'"
+          },{
+            "name": "APP_FQI",
+            "value": "'$APP_FQI'"
+          },{
+            "name": "APP_FQDN",
+            "value": "'$APP_FQDN'"
+          },{
+            "name": "LATITUDE",
+            "value": "'$LATITUDE'"
+          },{
+            "name": "LONGITUDE",
+            "value": "'$LONGITUDE'"
+          }
+        ]
+      }
+    ]
+  }
+}'
+     
+
+fi