82 lines
3.3 KiB
Plaintext
82 lines
3.3 KiB
Plaintext
|
|
# Info: KCL Kubernetes task schemas for provisioning (Provisioning)
|
||
|
|
# Author: JesusPerezLorenzo
|
||
|
|
# Release: 0.0.4
|
||
|
|
# Date: 10-12-2023
|
||
|
|
|
||
|
|
import regex
|
||
|
|
|
||
|
|
schema ETCD_endpoint:
|
||
|
|
prot: "http"| "https" = "https"
|
||
|
|
name?: str
|
||
|
|
addr?: str
|
||
|
|
port: int = 2379
|
||
|
|
|
||
|
|
check:
|
||
|
|
addr == Undefined or regex.match(addr,"^\$.*$") or regex.match(addr, "^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])$"), "'addr = ${addr}' check value definition (use $vaule or xx.xx.xx.xx)"
|
||
|
|
|
||
|
|
schema Kubernetes:
|
||
|
|
name: str = "kubernetes"
|
||
|
|
version: str
|
||
|
|
major_version: str
|
||
|
|
cri: "crio" | "containerd" = "crio"
|
||
|
|
runtime_default: "crun" | "runc" | "youki" = "crun"
|
||
|
|
runtimes: str = "crun,runc"
|
||
|
|
|
||
|
|
cni: "cilium" | "calico" = "cilium"
|
||
|
|
cni_version: str = ""
|
||
|
|
bind_port: int = 6443
|
||
|
|
timeout_cp: str = "4m0s"
|
||
|
|
certs_dir: str = "/etc/kubernetes/pki"
|
||
|
|
auth_mode: str = "Node,RBAC"
|
||
|
|
taints_effect: "PreferNoSchedule" = "PreferNoSchedule"
|
||
|
|
pull_policy: "IfNotPresent" = "IfNotPresent"
|
||
|
|
# Kubernetes addons separated with commans
|
||
|
|
addons: str
|
||
|
|
tpl: str = "kubeadm-config.yaml.j2"
|
||
|
|
repo: str = "registry.k8s.io"
|
||
|
|
dns_domain: str = "cluster.local"
|
||
|
|
pod_net: str = "10.244.0.0/16"
|
||
|
|
service_net: str = "10.96.0.0/12"
|
||
|
|
cert_sans: [str] = [ "$hostname", "$cluster_name", "127.0.0.1" ]
|
||
|
|
# External IPs separated with commans for ingress
|
||
|
|
external_ips: [str]
|
||
|
|
# Cluster name
|
||
|
|
cluster_name: str
|
||
|
|
hostname: str
|
||
|
|
# ControlPanel IP
|
||
|
|
cp_ip?: str
|
||
|
|
cp_name: str
|
||
|
|
# If HOSTNAME == K8S_MASTER it will be MASTER_0
|
||
|
|
# othewise set HOSTNAME value to be resolved in same K8S_MASTER network
|
||
|
|
# By using -cp- as part of HOSTNAME will be consider node as controlpanel
|
||
|
|
# Other options: -wk-0 or -wkr-0 for worker nodes
|
||
|
|
ip: str
|
||
|
|
# K8s cluster role: controlpnlane or worker
|
||
|
|
mode: "controlplane" | "worker"
|
||
|
|
# K8s command task
|
||
|
|
cmd_task: "install" | "update" | "remove" | "reinstall" = "install"
|
||
|
|
admin_user: str
|
||
|
|
target_path: str
|
||
|
|
taint_node: bool = True
|
||
|
|
etcd_mode: "" | "external" = ""
|
||
|
|
etcd_prefix: str = ""
|
||
|
|
etcd_endpoints: [ETCD_endpoint] = []
|
||
|
|
etcd_ca_path: str = "/etc/kubernetes/pki/etcd/ca.crt"
|
||
|
|
etcd_cert_path: str = "/etc/kubernetes/pki/etcd/server.crt"
|
||
|
|
etcd_key_path: str = "/etc/kubernetes/pki/etcd/server.key"
|
||
|
|
etcd_cluster_name: str = ""
|
||
|
|
etcd_peers: str = ""
|
||
|
|
# etcd certs path
|
||
|
|
prov_etcd_path: str = "etcdcerts"
|
||
|
|
# install etcd certs path
|
||
|
|
etcd_certs_path: str = "etcd_certs"
|
||
|
|
# LOG path for kubeadm
|
||
|
|
install_log_path: str = "/tmp/k8s.log"
|
||
|
|
# Work path for config generated file
|
||
|
|
work_path: str = "$cluster_name"
|
||
|
|
check:
|
||
|
|
cp_ip == Undefined or regex.match(cp_ip,"^\$.*$") or regex.match(cp_ip, "^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])$"), "'cp_ip = ${cp_ip}' check value definition (use $vaule or xx.xx.xx.xx)"
|
||
|
|
regex.match(pod_net,"^\$.*$") or regex.match(pod_net, "^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\/(?:3[0-2]|[0-2]?[0-9])$"), "'pod_net = ${pod_net}' check value definition"
|
||
|
|
regex.match(service_net,"^\$.*$") or regex.match(service_net, "^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\/(?:3[0-2]|[0-2]?[0-9])$"), "'service_net = ${service_net}' check value definition"
|
||
|
|
|