#!/bin/bash


# 测试 kubectl 命令或 docker service 命令是否可以执行

function decide_env() {
    echo "请选择当前环境前的序号："
    echo "1. swarm 单机"
    echo "2. swarm 集群"
    echo "3. k8s 单机"
    echo "4. k8s 集群"
    echo ""
    read -p "选择当前环境（输入对应环境前的序号）：" env_input
    echo ""

    case $env_input in
        1) env_mode=swarm_single ;;
        2) env_mode=swarm_cluster ;;
        3) env_mode=k8s_single 
        input_namespace
        ;;
        4) env_mode=k8s_cluster
        input_namespace
        ;;
    esac
}

function input_namespace() {
    read -p "输入服务所在的名称空间(默认为edoc2)：" namespace
    echo ""
    if [ -z $namespace ]; then
        namespace="edoc2"
    fi
}

function check_command() {
    if [ "$env_mode" == "swarm_single" -o "$env_mode" == "sawrm_cluster" ] ; then
        docker service ls > /dev/null 2>&1
        if [ $? -ne 0 ]; then
            echo "当前选择的环境为 $env_mode 模式"
            echo "当前节点执行 \`docker service ls \`失败，请检查以下问题："
            echo "1、当前节点是否有 docker 命令执行权限"
            echo "2、当前节点是否是 docker swarm manager 节点"
            exit 1;
        fi
    elif [ "$env_mode" == "k8s_single" -o "$env_mode" == "k8s_cluster" ];then
        kubectl get pod -n $namespace > /dev/null 2>&1
        if [ $? -ne 0 ]; then
            echo "当前选择的环境为 $env_mode 模式"
            echo "当前节点执行 kubectl get pod -n $namespace 失败，请检查以下问题："
            echo "1、当前节点是否有 kubectl 命令执行权限"
            echo "2、当前节点是否有权限执行 kubectl get pod 命令"
            exit 1;
        fi
    fi
}

function edit_file() {
    #student_files=/tmp/1.txt
    declare -a files=($1)
    for line in "${files[@]}"
    do
        vi -o "$line"
    done
}


function edit_cnf() {
    echo "输入Y开始编辑 $1 配置文件，编辑完成后，使用 :wq 来保存并退出"
    read input

    case $input in
        [yY])
            edit_file $1
        ;;
        *)
        ;;
    esac
}

function copy_cnf() {
    if [ "$env_mode" == "swarm_single" -o "$env_mode" == "sawrm_cluster" ] ; then
        mysql_id=$(docker ps |grep mysql:  | awk '{print $1}')
        mysql_data_path=$(docker inspect $mysql_id | grep -B 1  '"Destination": "/var/lib/mysql"' | head -n 1  |awk '{print $2}' | tr -d '",')

        if [ ! -f "$mysql_data_path/my.cnf" ]; then
            docker cp $mysql_id:/etc/mysql/my.cnf $mysql_data_path/my.cnf
        else
            echo "$mysql_data_path/my.cnf 已存在，跳过重新拷贝"
        fi

        edit_cnf $mysql_data_path/my.cnf
    elif [ "$env_mode" == "k8s_single" ]; then
        mysql_id=$(kubectl  get pod -n $namespace |grep mysql |awk '{print $1}')
        mysql_data_path=$(kubectl get pod $mysql_id -n $namespace -o "jsonpath={.spec.volumes[?(@.name=='owner-mysql-volume')].hostPath.path}")

        if [ ! -f "$mysql_data_path/my.cnf" ]; then
            kubectl cp -n $namespace $mysql_id:/etc/mysql/my.cnf $mysql_data_path/my.cnf
        else
            echo "$mysql_data_path/my.cnf 已存在，跳过重新拷贝"
        fi
        
        edit_cnf $mysql_data_path/my.cnf
    elif [ "$env_mode" == "k8s_cluster" ]; then
        echo "k8s 集群模式修改 mysql 配置文件，直接通过修改 mysql 编排文件目录下的 mysql-mgr-cnf-0.yaml/mysql-mgr-cnf-1.yaml/mysql-mgr-cnf-2.yaml 三个文件中的mysql配置文件部分即可"
        exit 1 ;
    fi
}


decide_env
check_command
copy_cnf


