#!/bin/bash strip_yaml_comments() { local file=$1 if [[ ! -f "$file" ]]; then echo "File not found: $file" return 1 fi grep -v '^#' "$file" | grep -v '^$' } download_and_process_config() { local url="https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml" local target_dir="/etc/headscale" local target_file="${target_dir}/config-example.yaml" local processed_file="${target_dir}/config-example-processed.yaml" # Create target directory if it does not exist mkdir -p "$target_dir" # Download the file using curl curl -o "$target_file" "$url" if [ $? -eq 0 ]; then echo "Config downloaded successfully to $target_file" # Process the downloaded file to strip comments strip_yaml_comments "$target_file" > "$processed_file" if [ $? -eq 0 ]; then echo "Processed config file saved to $processed_file" else echo "Failed to process the config file" return 1 fi else echo "Failed to download the config file" return 1 fi } insert_placeholders() { local config_file="/etc/headscale/config-example.yaml" if [[ ! -f "$config_file" ]]; then echo "Config file $config_file not found." return 1 fi declare -a replacements=( "server_url: .*" "server_url: \${SERVER_URL}" "listen_addr: .*" "listen_addr: \${LISTEN_ADDR}" "metrics_listen_addr: .*" "metrics_listen_addr: \${METRICS_LISTEN_ADDR}" "grpc_listen_addr: .*" "grpc_listen_addr: \${GRPC_LISTEN_ADDR}" "grpc_allow_insecure: .*" "grpc_allow_insecure: \${GRPC_ALLOW_INSECURE}" "private_key_path: .*" "private_key_path: \${NOISE_PRIVATE_KEY_PATH}" "acme_url: .*" "acme_url: \${ACME_URL}" "acme_email: .*" "acme_email: \${ACME_EMAIL}" "tls_letsencrypt_hostname: .*" "tls_letsencrypt_hostname: \${TLS_LETSENCRYPT_HOSTNAME}" "tls_letsencrypt_cache_dir: .*" "tls_letsencrypt_cache_dir: \${TLS_LETSENCRYPT_CACHE_DIR}" "db_type: .*" "db_type: \${DB_TYPE}" "db_path: .*" "db_path: \${DB_PATH}" ) for i in "${!replacements[@]}"; do local search="${replacements[i]% *}" local replace="${replacements[i]#* }" sed -i "s|$search|$replace|" "$config_file" done echo "Placeholders inserted in $config_file" } insert_placeholders download_and_process_config