#!/usr/bin/env bash
# 文件名: install.sh

set -e

TEMP_PATH=$(mktemp -d)
CHARTMUSEUM_DATADIR=${CHARTMUSEUM_DATADIR:-/data/chartmuseum}
CHARTMUSEUM_VER=v0.16.2
CHARTMUSEUM_PORT=${CHARTMUSEUM_PORT:-38080}
CHARTMUSEUM_USER=${CHARTMUSEUM_USER:-Admin}
CHARTMUSEUM_PASS=${CHARTMUSEUM_PASS:-Abcd3.14159}
CHART_REPO_NAME=${CHART_REPO_NAME:-local-chartmuseum}

txtbld=$(tput bold)             # Bold
bldred=${txtbld}$(tput setaf 1) # red
bldgre=${txtbld}$(tput setaf 2) # green
bldylw=${txtbld}$(tput setaf 3) # yellow
txtrst=$(tput sgr0)             # Reset
err=${bldred}ERROR${txtrst}
info=${bldgre}INFO${txtrst}
warn=${bldylw}WARNING${txtrst}

# 判断环境平台
if [ -z "${ARCH}" ]; then
  case $(uname -m) in
    x86_64) ARCH=amd64 ;;
    aarch64) ARCH=arm64 ;;
    *) printf "$err: 不支持该平台 $(uname -m)"; exit 1 ;;
  esac
fi

# 判断服务是否已安装
if [[ "$(systemctl is-enabled chartmuseum.service)" != "enabled" ]]
then
    sed -n -e '1,/^exit 0$/!p' $0 > ${TEMP_PATH}/chartmuseum-${CHARTMUSEUM_VER}.tar.gz 2>/dev/null

    printf "$info: [ ${bldgre}chartmuseum-${CHARTMUSEUM_VER}${txtrst} ] 安装中...\n"

    cd ${TEMP_PATH}
    tar axvf chartmuseum-${CHARTMUSEUM_VER}.tar.gz >/dev/null
    cp -rf chartmuseum-${ARCH} /usr/sbin/chartmuseum >/dev/null
    chmod +x /usr/sbin/chartmuseum

    # 创建所需目录
    install -d ${CHARTMUSEUM_DATADIR} >/dev/null

    # 创建服务配置文件
    cat > /etc/chartmuseum.conf<<EOF
ARGS=--debug --port=${CHARTMUSEUM_PORT} --storage="local" --storage-local-rootdir="${CHARTMUSEUM_DATADIR}" --log-json --basic-auth-user="${CHARTMUSEUM_USER}" --basic-auth-pass="${CHARTMUSEUM_PASS}"
EOF
    # 创建服务启动文件
    cat > /etc/systemd/system/chartmuseum.service<<EOF
[Unit]
Description=Chart Center Service
Requires=network-online.target
After=network-online.target

[Service]
Type=simple
EnvironmentFile=/etc/chartmuseum.conf
ExecStart=/usr/sbin/chartmuseum \$ARGS
ExecStop=/usr/bin/chartmuseum step-down
User=root
Restart=Always

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable chartmuseum.service --now

    # 输出当前部署信息
    cat<< EOF
`echo -e " =======  chartmusem | 部署摘要 ======="`
`echo -e " - 应用版本: ${CHARTMUSEUM_VER}"` 
`echo -e " - 数据目录: ${CHARTMUSEUM_DATADIR}"`
`echo -e " - 监听端口: ${CHARTMUSEUM_PORT}"`
`echo -e " - 超管用户: ${CHARTMUSEUM_USER}/${CHARTMUSEUM_PASS}"`
`echo -e " - Chart仓库: ${CHART_REPO_NAME}"`
`echo -e " ======================================"`
`echo -e ""`
EOF

    helm version >/dev/null 2>/dev/null
    if [[ "$?" -eq "0" ]]
    then
        # 等待服务启动
        count=1
        max_count=10
        delay=2
    
        until [ "$(curl -s -w '%{http_code}' -o /dev/null http://localhost:${CHARTMUSEUM_PORT}/health)" -eq 200 ]
        do
        if [ $count != $max_count ]
        then
            printf "$info: 第 [ $count ] 次发起服务探测...\n"
            sleep $delay
            count=$(( count+1 ))
        else
            printf "$err: 重试超过上限，退出！\n" && exit ${EXIT_CODE}
        fi

        done
        helm repo list 2>/dev/null | grep ${CHART_REPO_NAME} >/dev/null 2>/dev/null || helm repo add ${CHART_REPO_NAME} http://localhost:${CHARTMUSEUM_PORT} --username ${CHARTMUSEUM_USER} --password ${CHARTMUSEUM_PASS} >/dev/null 2>/dev/null
        printf "$info: [ ${CHART_REPO_NAME} ] chart 仓库添加成功!\n"
    fi
else
    printf "$info: [ ${bldgre}chartmuseum-${CHARTMUSEUM_VER}${txtrst} ] 已安装!\n"
fi

rm -rf ${TEMP_PATH}
exit 0
