diff options
Diffstat (limited to 'tools/generate-environment-files.sh')
| -rwxr-xr-x | tools/generate-environment-files.sh | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/tools/generate-environment-files.sh b/tools/generate-environment-files.sh new file mode 100755 index 0000000..5135061 --- /dev/null +++ b/tools/generate-environment-files.sh @@ -0,0 +1,174 @@ +#!/bin/bash +# +# Generate Environment Files for Services +# +# Reads the cluster configuration and node configuration to generate +# environment files used by systemd services. +# + +set -euo pipefail + +CONFIG_DIR="${CONFIG_DIR:-/etc/cluster-config}" +ENV_DIR="/etc/cluster-config/environment" +CURRENT_NODE="$CONFIG_DIR/current-node.yaml" +CLUSTER_CONFIG="$CONFIG_DIR/cluster.yaml" + +log() { + echo "[env-generator] $*" | systemd-cat -t env-generator -p info + echo "[env-generator] $*" +} + +error() { + echo "[env-generator] ERROR: $*" | systemd-cat -t env-generator -p err + echo "[env-generator] ERROR: $*" >&2 +} + +# Create environment directory +mkdir -p "$ENV_DIR" + +# Extract values from YAML (simple grep-based parser) +get_value() { + local file="$1" + local key="$2" + grep "^[[:space:]]*${key}:" "$file" | head -1 | sed "s/.*${key}: *[\"']\?\([^\"']*\)[\"']\?/\1/" +} + +get_node_ip() { + get_value "$CURRENT_NODE" "ip" +} + +get_node_name() { + cat "$CONFIG_DIR/node-identity" +} + +get_cluster_value() { + local key="$1" + grep -A 5 "^${key}:" "$CLUSTER_CONFIG" | tail -1 | sed 's/.*"\(.*\)"/\1/' | xargs +} + +# Generate kubelet environment +generate_kubelet_env() { + local node_ip=$(get_node_ip) + + cat > "$ENV_DIR/kubelet.env" <<EOF +NODE_IP=$node_ip +KUBELET_EXTRA_ARGS= +EOF + + log "Generated kubelet.env" +} + +# Generate kube-apiserver environment +generate_apiserver_env() { + local node_ip=$(get_node_ip) + local service_cidr=$(get_cluster_value "service_cidr") + + cat > "$ENV_DIR/kube-apiserver.env" <<EOF +NODE_IP=$node_ip +SERVICE_CIDR=${service_cidr:-10.96.0.0/12} +EOF + + log "Generated kube-apiserver.env" +} + +# Generate kube-controller-manager environment +generate_controller_env() { + local pod_cidr=$(get_cluster_value "pod_cidr") + local service_cidr=$(get_cluster_value "service_cidr") + + cat > "$ENV_DIR/kube-controller-manager.env" <<EOF +POD_CIDR=${pod_cidr:-10.244.0.0/16} +SERVICE_CIDR=${service_cidr:-10.96.0.0/12} +EOF + + log "Generated kube-controller-manager.env" +} + +# Generate etcd environment +generate_etcd_env() { + local node_ip=$(get_node_ip) + local node_name=$(get_node_name) + + # For now, single-node etcd. TODO: support multi-master + local etcd_cluster="${node_name}=https://${node_ip}:2380" + + cat > "$ENV_DIR/etcd.env" <<EOF +ETCD_NAME=$node_name +NODE_IP=$node_ip +ETCD_INITIAL_CLUSTER=$etcd_cluster +EOF + + log "Generated etcd.env" +} + +# Generate Kafka environment +generate_kafka_env() { + local node_ip=$(get_node_ip) + local node_name=$(get_node_name) + + # Extract broker ID from node config (or use hash of hostname) + local broker_id=$(grep "kafka_broker_id:" "$CURRENT_NODE" | sed 's/.*: //' || echo "1") + + cat > "$ENV_DIR/kafka.env" <<EOF +NODE_IP=$node_ip +NODE_NAME=$node_name +KAFKA_BROKER_ID=$broker_id +EOF + + log "Generated kafka.env" +} + +# Generate Ceph environment +generate_ceph_env() { + local node_name=$(get_node_name) + + cat > "$ENV_DIR/ceph.env" <<EOF +NODE_NAME=$node_name +OSD_WEIGHT=1.0 +EOF + + log "Generated ceph.env" +} + +# Generate MQTT environment +generate_mqtt_env() { + local node_ip=$(get_node_ip) + + cat > "$ENV_DIR/mqtt.env" <<EOF +NODE_IP=$node_ip +EOF + + log "Generated mqtt.env" +} + +# Generate CoreDNS environment +generate_coredns_env() { + cat > "$ENV_DIR/coredns.env" <<EOF +CLUSTER_DOMAIN=cluster.local +EOF + + log "Generated coredns.env" +} + +main() { + log "Generating environment files..." + + if [ ! -f "$CURRENT_NODE" ]; then + error "Current node config not found: $CURRENT_NODE" + exit 1 + fi + + # Generate all environment files + generate_kubelet_env + generate_apiserver_env + generate_controller_env + generate_etcd_env + generate_kafka_env + generate_ceph_env + generate_mqtt_env + generate_coredns_env + + log "Environment file generation complete" +} + +main "$@" |
