| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you 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. |
| |
| version: '3' |
| |
| vars: |
| D: "" |
| RUN: '{{if eq .D ""}}{{else}}echo RUN:{{end}}' |
| CAT: '{{if eq .D ""}}true{{else}}cat{{end}}' |
| RETRY: 100 |
| TIMEOUT: 10 |
| ETC: |
| sh: if $WSK_INSECURE ; then echo "-i" ; else echo "" ; fi |
| CFG: "kubectl -n nuvolaris get wsk/controller" |
| SLEEP: "500" |
| |
| env: |
| KUBECONFIG: |
| sh: | |
| if test -e "$OPS_TMP/kubeconfig" |
| then echo "$OPS_TMP/kubeconfig" |
| else echo ~/.kube/config |
| fi |
| |
| tasks: |
| |
| wait: |
| #desc: wait for apihost available |
| silent: true |
| env: |
| BAR: |
| sh: printf "%*s" {{.RETRY}} "" | tr ' ' '#' |
| cmds: |
| - | |
| N=0 |
| while true |
| do |
| APIHOST="$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.apihost}')" |
| HOST="$(echo $APIHOST | awk -F: '{print $2}')" |
| if [[ "$APIHOST" != "" ]] && [[ "$HOST" != "//pending" ]] |
| then break |
| fi |
| printf "\rwaiting for APIHOST ready: [${BAR:0:$((N++))}]" |
| sleep 5 |
| done |
| printf "\n" |
| echo $APIHOST |
| |
| wait-cm: |
| desc: wait for an annotation in nuvolaris cm/config |
| silent: true |
| env: |
| BAR: |
| sh: printf "%*s" {{.RETRY}} "" | tr ' ' '#' |
| cmds: |
| - test -n "{{.JSONPATH}}" || die "use JSONPATH=<cm/config-jsonpath-lookup>" |
| - | |
| N=0 |
| RES=false |
| while [[ $N -lt {{.RETRY}} ]] |
| do |
| ANNOT_VALUE="$(kubectl -n nuvolaris get cm/config -o jsonpath='{{.JSONPATH}}')" |
| if [[ -z "$ANNOT_VALUE" ]] |
| then |
| printf "\rwaiting for completing system initialization: [${BAR:0:$((N++))}]" |
| sleep 5 |
| else |
| RES=true; break |
| fi |
| done |
| printf "\n" |
| $RES |
| |
| wait-cm-value: |
| desc: wait for an annotation in nuvolaris cm/config to be set and have a specific value |
| silent: true |
| env: |
| BAR: |
| sh: printf "%*s" {{.RETRY}} "" | tr ' ' '#' |
| cmds: |
| - test -n "{{.JSONPATH}}" || die "use JSONPATH=<cm/config-jsonpath-lookup>" |
| - test -n "{{.EXPECTED_VALUE}}" || die "use EXPECTED_VALUE=<value>" |
| - | |
| if [[ -n "{{.MESSAGE}}" ]] |
| then echo "{{.MESSAGE}}" |
| fi |
| N=0 |
| RES=false |
| while [[ $N -lt {{.RETRY}} ]] |
| do |
| ANNOT_VALUE="$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.system_action_status}')" |
| if [[ -z "$ANNOT_VALUE" ]] |
| then |
| printf "\rwaiting for completing system initialization: [${BAR:0:$((N++))}]" |
| sleep 5 |
| else |
| test "$ANNOT_VALUE" = "{{.EXPECTED_VALUE}}" && RES=true || RES=false |
| break |
| fi |
| done |
| printf "\n" |
| $RES |
| |
| config: |
| #desc: configuring nuvolaris |
| silent: true |
| cmds: |
| - | |
| export OPSDEV_APIHOST=$(kubectl --kubeconfig="$KUBECONFIG" -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.apihost}') |
| export OPSDEV_USERNAME=nuvolaris |
| export AUTH=$(kubectl --kubeconfig="$KUBECONFIG" -n nuvolaris get wsk/controller -ojsonpath='{.spec.openwhisk.namespaces.nuvolaris}') |
| echo Checking connection... |
| retry -t 100 -m 600 $OPS -wsk {{.ETC}} --apihost "$OPSDEV_APIHOST" --auth "$AUTH" namespace list |
| export OPS_PASSWORD=$(kubectl -n nuvolaris get wsk/controller -ojsonpath -ojsonpath='{.spec.nuvolaris.password}') |
| ops -login "$OPSDEV_APIHOST" "$OPSDEV_USERNAME" |
| OPSDEV_HOST_PROT="$(echo "$OPSDEV_APIHOST" | awk -F '://' '{print $1}')" |
| OPSDEV_HOST_URL="$(echo "$OPSDEV_APIHOST" | awk -F '://' '{print $2}')" |
| config OPSDEV_APIHOST="$OPSDEV_APIHOST" |
| config OPSDEV_USERNAME="$OPSDEV_USERNAME" |
| config OPSDEV_HOST="$OPSDEV_HOST_PROT://$OPSDEV_USERNAME.$OPSDEV_HOST_URL" |
| source ~/.wskprops |
| echo "$OPS_PASSWORD" >~/.ops/nuvolaris.password |
| echo "Saved password for 'nuvolaris' user in ~/.ops/nuvolaris.password" |
| |
| login: |
| silent: true |
| desc: configuring nuvolaris |
| cmds: |
| - task: wait |
| - task: wait-cm-value |
| vars: |
| JSONPATH: "{.metadata.annotations.system_action_status}" |
| EXPECTED_VALUE: "created" |
| MESSAGE: "Waiting for system action status" |
| - task: config |
| - task: hello |
| |
| hello: |
| silent: true |
| desc: executing an hello world action |
| cmds: |
| - "{{.RUN}} wsk {{.ETC}} package update hello" |
| - "{{.RUN}} wsk {{.ETC}} action update hello/hello hello.js" |
| - "{{.RUN}} wsk {{.ETC}} action invoke hello/hello -p name 'Apache OpenServerless' -r | rg hello" |
| |
| mongodb: |
| silent: true |
| desc: mongodb test |
| cmds: |
| - #echo {{.MONGODB_URL}} |
| - "{{.RUN}} wsk {{.ETC}} package update hello" |
| - | |
| MONGODB_URL="$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.mongodb_url}')" |
| {{.RUN}} wsk {{.ETC}} action update hello/mongodb mongodb.js -p mongodb_url "$MONGODB_URL" |
| - "{{.RUN}} wsk {{.ETC}} action invoke hello/mongodb -r | rg 'hello'" |
| |
| redis: |
| silent: true |
| desc: redis test |
| cmds: |
| - "{{.RUN}} wsk {{.ETC}} package update hello" |
| - | |
| REDIS_URL="$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.redis_url}')" |
| REDIS_PREFIX="$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.redis_prefix}')" |
| {{.RUN}} wsk {{.ETC}} action update hello/redis redis.js -p redis_url "$REDIS_URL" -p redis_prefix "$REDIS_PREFIX" |
| - "{{.RUN}} wsk {{.ETC}} action invoke hello/redis -r | rg 'hello'" |
| |
| minio: |
| silent: true |
| desc: minio test |
| cmds: |
| - "{{.RUN}} wsk {{.ETC}} package update hello" |
| - | |
| S3_ACCESS_KEY=$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.s3_access_key}') |
| S3_SECRET_KEY=$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.s3_secret_key}') |
| S3_HOST=$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.s3_host}') |
| S3_PORT=$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.s3_port}') |
| S3_BUCKET_DATA=$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.s3_bucket_data}') |
| S3_BUCKET_WEB=$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.s3_bucket_static}') |
| {{.RUN}} wsk {{.ETC}} action update hello/minio minio.js \ |
| -p s3_access "$S3_ACCESS_KEY" \ |
| -p s3_secret "$S3_SECRET_KEY" \ |
| -p s3_host "$S3_HOST" \ |
| -p s3_port "$S3_PORT" \ |
| -p s3_data "$S3_BUCKET_DATA" |
| - "{{.RUN}} wsk {{.ETC}} action invoke hello/minio -r" |
| |
| postgres: |
| silent: true |
| desc: postgres test |
| cmds: |
| - "{{.RUN}} wsk {{.ETC}} package update hello" |
| - | |
| POSTGRES_URL="$(kubectl -n nuvolaris get cm/config -o jsonpath='{.metadata.annotations.postgres_url}')" |
| {{.RUN}} wsk {{.ETC}} action update hello/postgres postgres.js -p dburi "$POSTGRES_URL" |
| - "{{.RUN}} wsk {{.ETC}} action invoke hello/postgres -r" |
| |
| sleep: |
| desc: sleep |
| silent: true |
| cmds: |
| - "{{.RUN}} wsk action update sleep sleep.js --web=true --timeout 300000" |
| #- "{{.RUN}}wsk action invoke sleep -p sleep {{.SLEEP}} -r" |
| - curl "$($OPS -wsk action get sleep --url)?sleep={{.SLEEP}}" |
| |
| status: |
| silent: true |
| desc: showing the configuration status |
| cmds: |
| - echo "=== Nuvolaris Host:" |
| - wsk property get --apihost | awk '/whisk API host/{print $4}' |
| - echo "=== Nuvolaris Key:" |
| - wsk property get --auth | awk '/whisk auth/{print $3}' |
| - echo "=== Minio" |
| - kubectl -n nuvolaris get configmap config -n nuvolaris -o=jsonpath='{.metadata.annotations}' | jq . | awk '/minio_/{print $1 " " $2}' |
| - echo "=== Redis" |
| - kubectl -n nuvolaris get configmap config -n nuvolaris -o=jsonpath='{.metadata.annotations}' | jq . | awk '/redis_/{print $1 " " $2}' |
| - echo "=== Postgres" |
| - kubectl -n nuvolaris get configmap config -n nuvolaris -o=jsonpath='{.metadata.annotations}' | jq . | awk '/postgres_/{print $1 " " $2}' |
| - echo "=== MongoDB (FerretDB)" |
| - kubectl -n nuvolaris get configmap config -n nuvolaris -o=jsonpath='{.metadata.annotations}' | jq . | awk '/mongodb_/{print $1 " " $2}' |
| |
| info: |
| - echo "kubectl={{.KUBECTL}}" |
| - echo "kubeconfig=$KUBECONFIG" |
| - cat ~/.wskprops |
| |
| delete: |
| desc: no-op delete command |
| |
| streamer: |
| desc: manage the streamer deployment |
| |
| system-api: |
| desc: manage the system api deployment |
| |
| add-user: |
| silent: true |
| desc: create a new U=user (default 'devel') with P=password, (default a random pw) |
| vars: |
| USR: '{{or .U "devel" }}' |
| PSW: |
| sh: | |
| if test -z "{{.P}}" |
| then ops -random --str 8 |
| else echo "{{.P}}" |
| fi |
| FLAGS: '{{or .F "--all"}}' |
| |
| env: |
| APIHOST: |
| sh: echo "$OPERATOR_CONFIG_HOSTPROTOCOL://$OPERATOR_CONFIG_APIHOST" |
| HOST: |
| sh: echo "$OPERATOR_CONFIG_HOSTPROTOCOL://{{.USR}}.$OPERATOR_CONFIG_APIHOST" |
| cmds: |
| #- test ! -e ~/.ops/{{.USR}}.password || die "User {{.USR}} already exists - check .ops/{{.USR}}.password in your home for password" |
| - | |
| if kubectl -n nuvolaris get wsku/{{.USR}} 2>/dev/null |
| then die "User {{.USR}} already exists - check ~/.ops/{{.USR}}.password in your home for password" |
| fi |
| - echo "Creating user {{.USR}} in $APIHOST" |
| - | |
| ops admin adduser "{{.USR}}" "{{.USR}}@example.com" '{{.PSW}}' {{.FLAGS}} |
| sleep 15 |
| - | |
| export OPS_PASSWORD="{{.PSW}}" |
| retry ops ide login {{.USR}} "$APIHOST" |
| - echo "{{.PSW}}" > ~/.ops/{{.USR}}.password |
| - ops util upload "$(realpath web)" |
| - echo "Login with:" ops ide login {{.USR}} https://miniops.me |
| - echo "Password is saved in:" ~/.ops/{{.USR}}.password |
| - echo "Web URL is:" "$HOST" |