From dcab9adf67d2f481e0e04ee3aef8846c9f95436d Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 21 Jan 2024 23:04:52 +0000 Subject: [PATCH] Update docker/headscale/prep.sh --- docker/headscale/prep.sh | 65 ++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/docker/headscale/prep.sh b/docker/headscale/prep.sh index 6a80b7d..1eb8286 100644 --- a/docker/headscale/prep.sh +++ b/docker/headscale/prep.sh @@ -1,18 +1,27 @@ #!/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 '^$' + + # Filter out lines that are either full-line comments or completely empty + sed -i '/^\s*#/d;/^\s*$/d' "$file" + + if [ $? -eq 0 ]; then + echo "Comments stripped successfully in $file" + else + echo "Failed to strip comments from the file." + return 1 + fi } 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" @@ -23,20 +32,15 @@ download_and_process_config() { 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 + strip_yaml_comments "$target_file" else echo "Failed to download the config file" return 1 fi } -insert_placeholders() { + +insert_env_placeholders() { local config_file="/etc/headscale/config-example.yaml" if [[ ! -f "$config_file" ]]; then @@ -44,30 +48,25 @@ insert_placeholders() { 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}" - ) + # Substitute only simple, single-line configuration options + sed -i 's|^server_url:.*|server_url: ${SERVER_URL}|' "$config_file" + sed -i 's|^listen_addr:.*|listen_addr: ${LISTEN_ADDR}|' "$config_file" + sed -i 's|^metrics_listen_addr:.*|metrics_listen_addr: ${METRICS_LISTEN_ADDR}|' "$config_file" + sed -i 's|^grpc_listen_addr:.*|grpc_listen_addr: ${GRPC_LISTEN_ADDR}|' "$config_file" + sed -i 's|^grpc_allow_insecure:.*|grpc_allow_insecure: ${GRPC_ALLOW_INSECURE}|' "$config_file" + sed -i 's|^db_type:.*|db_type: ${DB_TYPE}|' "$config_file" + sed -i 's|^db_path:.*|db_path: ${DB_PATH}|' "$config_file" + sed -i 's|^acme_url:.*|acme_url: ${ACME_URL}|' "$config_file" + sed -i 's|^acme_email:.*|acme_email: ${ACME_EMAIL}|' "$config_file" + sed -i 's|^tls_letsencrypt_hostname:.*|tls_letsencrypt_hostname: ${TLS_LETSENCRYPT_HOSTNAME}|' "$config_file" + sed -i 's|^tls_letsencrypt_cache_dir:.*|tls_letsencrypt_cache_dir: ${TLS_LETSENCRYPT_CACHE_DIR}|' "$config_file" + sed -i 's|^unix_socket:.*|unix_socket: ${UNIX_SOCKET}|' "$config_file" + sed -i 's|^unix_socket_permission:.*|unix_socket_permission: ${UNIX_SOCKET_PERMISSION}|' "$config_file" - 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" + echo "Environment variable placeholders inserted in $config_file" } -insert_placeholders -download_and_process_config \ No newline at end of file +download_and_process_config + +insert_env_placeholders \ No newline at end of file