################################################################################
# 这部分是脚本项目全局的默认配置属性，主要作用于一键功能定制

# [通用配置]
# 定制集群的默认网段信息，只需要前三位
target_net="10.0.0"
# 定制集群的默认部署方式
default_deploy_type="online"
# 定制集群的部署类型，alone代表单主master集群，multi代表多主master集群
cluster_type="alone"
# 定制集群的部署模式，alone代表独立k8s集群，multi代表多独立k8s集群
cluster_mode="alone"
# 定制集群的默认网络解决方案类型
default_network_type="flannel"
# 定制集群的默认网络数据传输模式类型，iptables 和 ipvs
default_network_proxy="iptables"
# 定制kubernetes镜像仓库类型，yes代表使用本地harbor，no代表使用阿里云镜像仓库
default_repo_type="yes"
# 获取k8s环境初始化镜像文件类型，yes代表提前获取，no代表初始化时从互联网获取
default_get_image_type="yes"
# k8s集群初始化时候，是否使用本地离线镜像文件，yes代表使用，no代表使用互联网获取
default_use_image_type="yes"
# 定制集群的默认容器引擎
default_container_engine_type="containerd"
# 定制k8s集群的软件版本
k8s_version="1.31.1"
# 定制k8s集群的pause镜像版本
k8s_pause_image_ver="3.9"
# 定制harbor的集群类型,alone代表单节点集群，multi代表harbor主从集群
default_harbor_cluster_type="alone"
# 项目操作角色，develop代表项目研发阶段，operator代表项目使用阶段
user_role="operator"
# 设定项目执行的方式, run代表正常运行，debug代表调试模式
shell_run_type="run"
# 定制harbor镜像仓库的https改造方式，harbor代表属性方式，nginx代表使用代理方式
harbor_https_type="nginx"


################################################################################
# 这部分是一些基础用户、目录相关的定制信息

# [基础认证信息]
login_user='root'
login_pass='123456'

# [基础文件信息]
host_name="hosts"
host_target_dir="/etc"
host_file="${host_target_dir}/${host_name}"
data_dir="/data"
target_dir="${data_dir}/softs"
server_dir="${data_dir}/server"

# [基础目录信息]
root_dir=$(dirname $PWD)
tmpl_dir="${root_dir}/tmpl"
conf_dir="${root_dir}/conf"
scripts_dir="${root_dir}/scripts"
softs_dir="${root_dir}/softs"
yaml_dir="${root_dir}/yaml"
subfunc_dir="${scripts_dir}/subfunc"
service_conf_dir="/lib/systemd/system"
service_bin_dir='/usr/local/bin'
ext_scripts_dir='ext_scripts'
default_backup_dir="${data_dir}/backup"

# [软件源相关]
k8s_sources_repo_addr='mirrors.aliyun.com'
centos_repo_dir='/etc/yum.repos.d'
centos_repo_file='kubernetes.repo'
ubuntu_repo_dir='/etc/apt/sources.list.d'
ubuntu_repo_file='kubernetes.list'

# [远程主机资源清单目录]
remote_dir="${server_dir}/yaml"
kubeproxy_yaml="kube-proxy.yaml"
remote_kubeproxy_dir="${remote_dir}/kubeproxy"
remote_kubeproxy_file="${remote_kubeproxy_dir}/${kubeproxy_yaml}"

# [ssh集群认证相关]
# 创建k8s集群的时候，是否需要重置部署服务器的ssh秘钥信息
# no代表不需要重新生成ssh秘钥对
k8s_cluster_create_reset_ssh="no"
# 集群环境清理时候，集群主机默认的主机名信息恢复
k8s_cluster_remote_hostname_default="sswang"


# [harbor基础信息]
# harbor仓库部署的时候，是否导入备份镜像文件
backup_image_load_harbor="no"
# harbor的长主机名格式
harbor_addr=$(grep register /etc/hosts | awk '{print $2}')
# harbor仓库的访问协议类型
harbor_http_type="http"
# harbor仓库的域名访问格式
harbor_url="${harbor_http_type}://${harbor_addr}"

# [部署项目日志记录相关]
deploy_log_file="/var/log/deploy_k8s_$(date +%Y%m%d).log"

# [定制github相关的地址]
# github_domain="githubfast.com"
github_domain="github.com"

# [cilium网络相关信息]
# 定制cilium的IP地址管理模式 kubernetes | cluster-pool
cilium_ipam_type="kubernetes"
# 定制cilium的默认网络模型: vxlan | native
cilium_net_type="native"
# 定制cilium的默认安装方式: usekubeproxy|nokubeproxy
cilium_deploy_type="nokubeproxy"
# 定制cilium是否使用ebpf功能: yes | no
cilium_use_ebpf="yes"

################################################################################
# 这部分是和CA以及安全相关的定制信息
ca_name="ca"
ca_key_num="4096"
ca_key_expire="3650"
ca_country="CN"
ca_addr="Beijing"
ca_org="sswang"
ca_ou="sswang"
v3_file_name="v3.ext"
auth_key_iden="keyid,issuer"
v3_key_usage="digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment"
ext_key_usage="serverAuth"

# 定制CA文件的类型
# define代表普通自建的CA证书，k8s代表直接重用k8s的CA文件、public代表用互联网CA
# 因为public的CA我们需要买，所以public基本上无用
create_my_ca_type="define"

################################################################################
# 这部分是一些容器引擎相关的定制信息

# [Containerd部署信息]
# 定制containerd的配置文件
containerd_config="/etc/containerd/config.toml"
containerd_service="containerd.service"
# 定制containerd的配置文件样式，old代表使用旧版本配制样式，new代表使用新版本配置样式
containerd_hosts_config_type="new"
# 定制containerd的仓库配置文件
containerd_hosts_dir="/etc/containerd/certs.d/${harbor_addr}"
containerd_hosts_file="hosts.toml"
# 是否具有构建镜像的能力, yes代表具有构建镜像的能力，no代表没有构建镜像的能力
containerd_build_func="yes"
# 定制buildkit的配置文件
buildkit_conf="/etc/buildkit/buildkitd.toml"
buildkit_service="buildkit.service"
# 定制nerdctl的配置文件
nerdctl_conf="/etc/nerdctl/nerdctl.toml"
# 定制nerdctl默认的镜像命名空间
nerdctl_default_namespace="default"

# [CRI-O部署信息]

# [镜像构建信息]
# 在非docker环境下是否同时部署镜像构建的功能
# nodocker_build_status="yes"
# 在非docker环境下harbor环境的https代理方式
nodocker_harbor_https_type="nginx"
nginx_service="nginx.service"
nginx_base_path="/etc/nginx"

################################################################################
# 这部分是项目依赖的一些特殊环境变量
# ip地址的正则匹配规则
ip_addr_regex_rule="^([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"

################################################################################
# 这部分是项目容器环境所依赖文件的 离线目录、软件版本、软件地址、文件名称等信息

# [expect文件信息]
expect_dir="${softs_dir}/expect"
expect_centos_dir="${expect_dir}/centos"
expect_ubuntu_dir="${expect_dir}/ubuntu"

# [docker文件信息]
docker_ver="24.0.7"
docker_site="https://mirrors.aliyun.com/docker-ce"
docker_site_url="${docker_site}/linux/static/stable/x86_64"
docker_tar="docker-${docker_ver}.tgz"
docker_url="${docker_site_url}/${docker_tar}"
docker_dir="${softs_dir}/docker-ce/${docker_ver}"

# [cri-dockerd文件信息]
cri_dockerd_ver="0.3.2"
cri_name="cri-dockerd"
cri_github_url="https://${github_domain}/Mirantis"
cri_github_tags="${cri_github_url}/${cri_name}/tags"
cri_dockerd_dir="${softs_dir}/cri_dockerd/${cri_dockerd_ver}"
cri_softs_name="${cri_name}-${cri_dockerd_ver}.amd64.tgz"
cri_softs_site="${cri_github_url}/${cri_name}/releases/download"
cri_softs_url="${cri_softs_site}/v${cri_dockerd_ver}/${cri_softs_name}"

# [containerd文件信息]

# [docker-compose文件信息]
compose_version="v2.23.3"
compose_cmd_name="docker-compose"
compose_bin_dir="/usr/bin"
compose_file_name="${compose_cmd_name}-linux-x86_64"
compose_github_url="https://${github_domain}/docker/compose"
compose_github_tags="${compose_github_url}/tags"
compose_softs_site="${compose_github_url}/releases/download/${compose_version}/${compose_file_name}"
compose_dir="${softs_dir}/compose/${compose_version}"

# [harbor文件信息]
harbor_version='v2.5.0'
harbor_dir="${softs_dir}/harbor/${harbor_version}"
harbor_name='harbor'
harbor_image="harbor.${harbor_version}.tar.gz"
harbor_softs="harbor-offline-installer-${harbor_version}.tgz"
harbor_github_url="https://${github_domain}/goharbor/harbor"
harbor_github_tags="${harbor_github_url}/tags"
harbor_site="${harbor_github_url}/releases/download"
harbor_softs_url="${harbor_site}/${harbor_version}/${harbor_softs}"
harbor_backup="${default_backup_dir}/harbor"

# [kubernetes文件信息]
# cri_tools_softs='cri-tools=1.26.0-00'
# k8s_cni_softs='kubernetes-cni=1.2.0-00'
k8s_dir="${softs_dir}/kubernetes/${k8s_version}"
k8s_centos_dir="${k8s_dir}/centos"
k8s_ubuntu_dir="${k8s_dir}/ubuntu"


################################################################################
# 这部分是项目应用软件所依赖文件的 离线目录、软件版本、软件地址、文件名称等信息

# [nginx相关]
nginx_ver="1.26.0"
nginx_tar="nginx-${nginx_ver}.tar.gz"
nginx_dir="${softs_dir}/nginx/${nginx_ver}"
nginx_github_url="https://${github_domain}/nginx/nginx"
nginx_url="https://nginx.org/download/${nginx_tar}"
nginx_github_tags="${nginx_github_url}/tags"

################################################################################
# 这部分是项目集群环境依赖的 容器镜像文件等信息

# [离线镜像文件相关]
images_dir="${root_dir}/images"
k8s_cluster_images="k8s_cluster_images.tar"
k8s_flannel_images="k8s_flannel_images.tar"
k8s_calico_images="k8s_calico_images.tar"
k8s_cilium_images="k8s_cilium_images.tar"

################################################################################
# 这部分是项目所涉及到的脚本文件和通用主机变量信息

# [通用环境变量]
all_node_list=$(awk '/kuber/{print $1}' "${conf_dir}/${host_name}")
all_k8s_list=$(awk '/-master|node/{print $1}' "${conf_dir}/${host_name}")
k8s_master_list=$(awk '/-master/{print $1}' "${conf_dir}/${host_name}")
k8s_node_list=$(awk '/-node/{print $1}' "${conf_dir}/${host_name}")
master1=$(echo ${k8s_master_list} | awk '{print $1}')

# [脚本通用功能函数文件]
base_func_usage="base_func_usage.sh"
base_func_menu="base_func_menu.sh"
base_func_exec="base_func_exec.sh"
base_func_conf="base_func_conf.sh"
base_func_secure="base_func_secure.sh"
base_func_softs="base_func_softs.sh"
k8s_func_exec="k8s_func_exec.sh"
base_cluster_exec="base_cluster_exec.sh"
k8s_cluster_deploy="k8s_cluster_deploy.sh"
base_func_offline="base_func_offline.sh"
base_func_image="base_func_image.sh"
k8s_subfunc_manager="k8s_func_manager.sh"
k8s_subfunc_clean="k8s_func_clean.sh"
k8s_subfunc_network="k8s_func_network.sh"

# [ 子功能脚本文件 ]
k8s_project_scripts="00_k8s_project.sh"
k8s_deploy_scripts="01_shell_deploy_k8s.sh"
base_env_scripts="01_01_general_base_env.sh"
base_cluster_scripts="01_02_cluster_base_env.sh"
base_kernel_scripts="01_02_01_kubernetes_kernel_conf.sh"
base_docker_scripts="01_02_02_kubernetes_docker_install.sh"
base_docker_offline_scripts="01_02_02_kubernetes_docker_offline.sh"
base_containerd_offline_scripts="01_02_02_kubernetes_containerd_offline.sh"
base_cri_docker_scripts="01_02_03_kubernetes_cri_dockerd_install.sh"
base_harbor_remote_scripts="01_02_04_kubernetes_harbor_install_remote.sh"
base_harbor_install_scripts="01_02_05_kubernetes_harbor_install.sh"
k8s_cluster_init_scripts="01_03_kubernetes_cluster_create.sh"
k8s_cluster_manager_scripts="01_04_kubernetes_cluster_manager.sh"
k8s_cluster_function_manager_scripts="01_04_01_kubernetes_cluster_function_manager.sh"
k8s_cluster_clean_manager_scripts="01_04_02_kubernetes_cluster_clean_manager.sh"
k8s_cluster_network_manager_scripts="01_04_03_kubernetes_cluster_network_manager.sh"
k8s_cluster_storage_manager_scripts="01_04_04_kubernetes_cluster_storage_manager.sh"
k8s_cluster_depend_manager_scripts="01_04_05_kubernetes_cluster_depend_manager.sh"
k8s_cluster_resource_manager_scripts="01_04_06_kubernetes_cluster_resource_manager.sh"
kubernetes_offline_prepare="01_07_kubernetes_offline_prepare.sh"
k8s_master_tail_scripts="k8s_master_tail.sh"
k8s_node_centos_tail_scripts="k8s_node_centos_tail.sh"

################################################################################
# 这部分是k8s集群项目所依赖的集群基础环境信息 

# [docker相关配置]
docker_service_conf="docker.service"
docker_daemon_dir='/etc/docker'
docker_daemon_json='daemon.json'

# [CRI软件信息]
cri_service_conf="${cri_name}.service"
cri_socket_conf="${cri_name}.socket"

# [CNI相关信息]
cni_conf_dir="/etc/cni/net.d"

# [harbor配置]
harbor_admin='admin'
harbor_admin_passwd='123456'
harbor_user='sswang'
harbor_passwd='A12345678a'
harbor_my_repo='sswang'
harbor_k8s_repo='google_containers'
harbor_ver='api/version'
user_api='api/v2.0/users'
proj_api='api/v2.0/projects'
image_api='api/v2.0/search?q='
ali_mirror='registry.aliyuncs.com/google_containers'
harbor_images_list_file='/tmp/harbor-image.txt'

# [ETCD配置信息]
etcdctl_cmd_dir='/usr/local/bin'
etcd_data_dir="/var/lib/etcd"
etcd_pki_dir="/etc/kubernetes/pki/etcd"
etcd_mainfest_dir="/etc/kubernetes/manifests"
etcd_backup_dir="/${default_backup_dir}/etcd"
etcd_db_backup_dir="${etcd_backup_dir}/db"
etcd_data_backup_dir="${etcd_backup_dir}/data"
etcd_endpoint="${master1}:2379"


################################################################################
# 这部分是k8s项目的其他信息，比如cri接口、附件相关、网络相关、解决方案相关功能 

# [Kubernetes相关]
docker_sock="unix:///var/run/cri-dockerd.sock"
containerd_sock="unix:///var/run/containerd/containerd.sock"
crio_sock="unix:///var/run/crio/crio.sock"
[ "${default_container_engine_type}" == "docker" ] && cri_options="--cri-socket=${docker_sock}" 
[ "${default_container_engine_type}" == "containerd" ] && cri_options="--cri-socket=${containerd_sock}" 
[ "${default_container_engine_type}" == "crio" ] && cri_options="--cri-socket=${crio_sock}" 
cluster_init_msg_file='cluster_init_msg.txt'

# [Kubernetes初始化网段]
K8S_SVC_CIDR_DEFINE='10.96.0.0/12'
K8S_POD_CIDR_DEFINE='10.244.0.0/16'
K8S_SVC_PORT="6443"

# [Kubernetes网络使用网卡]
K8S_NODE_NET_DEV="ens33"

# [k8s附件相关]
addons_dir="${root_dir}/addons"
addons_dashboard="${addons_dir}/dashboard"
addons_network="${addons_dir}/network"
addons_monitor="${addons_dir}/monitor"
addons_sc="${addons_dir}/storageclass"
addons_flannel="${addons_network}/flannel"
addons_calico="${addons_network}/calico"
addons_cilium="${addons_network}/cilium"
addons_kubeproxy="${addons_dir}/k8s/kube-proxy"

# [k8s flannel 网络相关]
flannel_url='https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation'
flannel_yaml='kube-flannel.yml'
flannel_ns="kube-flannel"
flannel_ds_name="${flannel_ns}-ds"

# [k8s calico 网络相关]
calico_version="3.25"
temp_version=$(echo "${calico_version}" | awk -F'.' '{print $1"-"$2}')
calico_url="https://calico-v${temp_version}.netlify.app/archive/v${calico_version}/manifests/calico.yaml"
calico_yaml="kube-calico.yml"
calico_ns="kube-system"
calico_ds_name="calico-node"

# [k8s cilium 网络相关]
cilium_base_ver="16.0"
cilium_ver="1.${cilium_base_ver}"
cilium_values_dir="${addons_cilium}/${cilium_ver}"
cilium_cli_ver="0.${cilium_base_ver}"
cilium_cli_tar="cilium-linux-amd64.tar.gz"
cilium_cli_dir="${softs_dir}/cilium_cli/${cilium_cli_ver}"
cilium_cli_github_base="https://${github_domain}/cilium/cilium-cli"
cilium_cli_github_tags="${cilium_cli_github_base}/tags"
cilium_cli_url="${cilium_cli_github_base}/releases/download/v${cilium_cli_ver}/${cilium_cli_tar}"
cilium_ns="kube-system"
cilium_ds_name="cilium"
cilium_yaml="values.yaml"

# [k8s cilium Centos7 内核相关]
kernel_url="https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS"
kernel_tail="1.el7.elrepo.x86_64.rpm"
kernel_version="5.18.10"
kernel_dir="${softs_dir}/kernel"
kernel_centos_dir="${kernel_dir}/${kernel_version}" 
remote_kernel_dir="/tmp/kernel"

# [helm相关]
helm_ver="3.15.0"
helm_tar="helm-v${helm_ver}-linux-amd64.tar.gz"
helm_url="https://get.helm.sh/${helm_tar}"
helm_dir="${softs_dir}/helm/${helm_ver}"
helm_github_url="https://${github_domain}/helm/helm"
helm_github_tags="${helm_github_url}/tags"

# [containerd相关]
containerd_ver="1.6.12"
containerd_tar="cri-containerd-cni-${containerd_ver}-linux-amd64.tar.gz"
containerd_dir="${softs_dir}/containerd/${containerd_ver}"
containerd_github_url="https://${github_domain}/containerd/containerd"
containerd_url="${containerd_github_url}/releases/download/v${containerd_ver}/${containerd_tar}"
containerd_github_tags="${containerd_github_url}/tags"

# [nerdctl相关]
nerdctl_ver="1.7.6"
nerdctl_tar="nerdctl-full-${nerdctl_ver}-linux-amd64.tar.gz"
nerdctl_dir="${softs_dir}/nerdctl/${nerdctl_ver}"
nerdctl_github_url="https://${github_domain}/containerd/nerdctl"
nerdctl_url="${nerdctl_github_url}/releases/download/v${nerdctl_ver}/${nerdctl_tar}"
nerdctl_github_tags="${nerdctl_github_url}/tags"

# [libseccomp相关]
libsec_ver="2.5.2"
libsec_tar="libseccomp-${libsec_ver}-1.el8.x86_64.rpm"
libsec_dir="${softs_dir}/libseccomp/${libsec_ver}"
libsec_site_url="https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage"
libsec_url="${libsec_site_url}/${libsec_tar}"

