summaryrefslogtreecommitdiff
path: root/tools/generate-environment-files.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/generate-environment-files.sh')
-rwxr-xr-xtools/generate-environment-files.sh174
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 "$@"