如何使用AWK将配置文件变量转换为tfh pushvars指定命令格式
AWK脚本调整方案(适配HCL变量转tfh命令)
输入变量格式
tags = { environment = "development", provider = "ServiceOne", ansible_role = "nfs-role", comment = "mysql" } line = "b01" my_lb_ports = "[53, 80, 443, 389, 636, 3268, 3269, 6443]" dns_servers = "[\"8.8.8.8\", \"9.9.9.9\"]"
目标输出格式
tfh pushvars -overwrite-all -dry-run false -hcl-var "tags={environment=\"development\", provider=\"ServiceOne\", ansible_role=\"nfs-role\",comment= \"mysql\"}" tfh pushvars -overwrite-all -dry-run false -hcl-var "line=\"b01\"" tfh pushvars -overwrite-all -dry-run false -hcl-var "my_lb_ports=[\"53\", \"80\", \"443\", \"389\", \"636\", \"3268\", \"3269\", \"6443\"]" tfh pushvars -overwrite-all -dry-run false -hcl-var "dns_servers=[\"8.8.8.8\", \"9.9.9.9\"]"
调整后完整脚本
#!/usr/bin/env bash (( $# == 2 )) || { echo "==> Usage: ./${0##*/} <<INPUT_FILE>> <<OUTPUT_FILE>>"; exit 1; } vars_file="$1" output_file="$2" awk ' # 跳过空行和注释行 /^[[:space:]]*$/ || /^#/ { next } # 匹配变量起始行(包含=且不在拼接状态) !in_block && /=/ { split($0, parts, /=/, 2) var_name = parts[1] gsub(/[[:space:]]/, "", var_name) var_value = parts[2] # 判断是否需要开启多行拼接:包含{且无对应的},或者引号未闭合 in_block = (var_value ~ /{/ && var_value !~ /}/) || (gsub(/"/, "\"", var_value) % 2 == 1) # 不需要拼接直接处理 if (!in_block) { process_var(var_name, var_value) } next } # 拼接多行内容 in_block { var_value = var_value $0 # 遇到}或者引号闭合则结束拼接 if ($0 ~ /}/ || gsub(/"/, "\"", var_value) % 2 == 0) { in_block = 0 process_var(var_name, var_value) } next } # 变量处理函数 function process_var(name, value, processed_val) { # 移除所有多余空白 gsub(/[[:space:]]+/, "", value) # 去掉外层包裹的引号(如果有) if (value ~ /^".*"$/) { value = substr(value, 2, length(value)-2) } # 处理数字数组加引号 if (value ~ /^\[[0-9,]+]$/) { gsub(/([0-9]+)/, "\"&\"", value) } # 转义所有双引号 gsub(/"/, "\\\"", value) # 输出tfh命令 printf "tfh pushvars -overwrite-all -dry-run false -hcl-var \"%s=%s\"\n", name, value } ' "$vars_file" > "$output_file"
核心修改点
- 新增多行拼接逻辑,适配map类型的多行变量定义
- 统一处理变量值的格式转换,避免重复输出
- 新增纯数字数组的自动加引号逻辑,匹配目标格式
- 统一处理双引号转义,符合shell命令传参规则
内容的提问来源于stack exchange,提问作者Andrew Ramnikov
相关产品推荐
相关产品推荐

