#!/bin/bash # Copyright 2021 The KubeEdge Authors. # # 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. set -o errexit set -o nounset set -o pipefail SEDNA_VERSION=v0.3.0 KB_VERSION=v0.3.0 TMP_DIR=$(mktemp -d --suffix=.sedna) SEDNA_ROOT=${SEDNA_ROOT:-$TMP_DIR} GM_NODE_NAME=${SEDNA_GM_NODE:-} KB_NODE_NAME=${SEDNA_GM_NODE:-} trap "rm -rf '$TMP_DIR'" EXIT _download_yamls() { yaml_dir=$1 mkdir -p ${SEDNA_ROOT}/$yaml_dir cd ${SEDNA_ROOT}/$yaml_dir for yaml in ${yaml_files[@]}; do # the yaml file already exists, no need to download [ -e "$yaml" ] && continue echo downloading $yaml into ${SEDNA_ROOT}/$yaml_dir local try_times=30 i=1 timeout=2 while ! timeout ${timeout}s curl -sSO https://raw.githubusercontent.com/kubeedge/sedna/main/$yaml_dir/$yaml; do ((++i>try_times)) && { echo timeout to download $yaml exit 2 } echo -en "retrying to download $yaml after $[i*timeout] seconds...\r" done done } download_yamls() { yaml_files=( sedna.io_datasets.yaml sedna.io_federatedlearningjobs.yaml sedna.io_incrementallearningjobs.yaml sedna.io_jointinferenceservices.yaml sedna.io_lifelonglearningjobs.yaml sedna.io_models.yaml ) _download_yamls build/crds yaml_files=( gm.yaml ) _download_yamls build/gm/rbac } prepare_install(){ # need to create a namespace kubectl create ns sedna kubectl label node/$GM_NODE_NAME sedna=control-plane --overwrite } prepare() { mkdir -p ${SEDNA_ROOT} # we only need build directory # here don't use git clone because of large vendor directory download_yamls } cleanup(){ kubectl label node/$SEDNA_GM_NODE sedna- | sed 's/labeled$/un&/' || true kubectl delete ns sedna } create_crds() { cd ${SEDNA_ROOT} kubectl create -f build/crds } delete_crds() { cd ${SEDNA_ROOT} kubectl delete -f build/crds --timeout=90s } create_kb(){ cd ${SEDNA_ROOT} kubectl $action -f - < $config_file << EOF kubeConfig: "" master: "" namespace: "" websocket: address: 0.0.0.0 port: 9000 localController: server: http://localhost:${SEDNA_LC_BIND_PORT:-9100} knowledgeBaseServer: server: http://$KB_ADDRESS EOF fi kubectl $action -n sedna configmap $cm_name --from-file=$config_file } create_gm() { cd ${SEDNA_ROOT} kubectl create -f build/gm/rbac/ cm_name=gm-config config_file_name=gm.yaml prepare_gm_config_map $cm_name $config_file_name kubectl $action -f - </dev/null } check_action() { action=${SEDNA_ACTION:-create} support_action_list="create delete" if ! echo "$support_action_list" | grep -w -q "$action"; then echo "\`$action\` not in support action list: create/delete!" >&2 echo "You need to specify it by setting $(red_text SEDNA_ACTION) environment variable when running this script!" >&2 exit 2 fi } check_node() { if [ -z "$GM_NODE_NAME" ] || ! kubectl get node $GM_NODE_NAME; then echo "ERROR: $(red_text GM node name \`$GM_NODE_NAME\` does not exist in k8s cluster)!" >&2 echo "You need to specify it by setting $(red_text SEDNA_GM_NODE) environment variable when running this script!" >&2 exit 1 fi } do_check() { check_kubectl check_action check_node } show_debug_infos() { cat - <