You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Hashicorp Vault存储的CoreDNS配置导出为多行YAML文件

可行解决方案

方案1:不修改Vault中现有存储的内容,直接格式化单行输出

当前Vault中存储的是单行配置字符串,可以通过awk对输出内容做结构化拆分,直接生成符合要求的格式化内容,完整命令如下:

vault kv get -format=json ${VAULT_PATH}/coredns-custom | jq -r '.data.data.config' | awk '{
    if(match($0, /^([^{]+) {([^}]+)}$/, res)) {
        print res[1] "{"
        split(res[2], opts, / +/)
        print "    " opts[1]
        print "    " opts[2], opts[3]
        print "    " opts[4], opts[5], opts[6], opts[7]
        print "}"
    }
}' > coredns-custom.yaml

如果后续CoreDNS配置会动态调整,可以用更通用的sed处理逻辑,自动识别括号内的每条配置项并换行缩进:

vault kv get -format=json ${VAULT_PATH}/coredns-custom | jq -r '.data.data.config' | sed -E '
s/^([^{]+) \{/\1 {\
/
s/([a-z]+ [0-9]+|[a-z]+|forward [^}]+)/\
    \1/g
s/ *}$/\
}/' > coredns-custom.yaml

方案2:修改Vault存储内容为带转义换行的格式,导出时解析换行

你之前插入\n不生效,是因为Vault返回的JSON中\n是转义后的字符串,jq默认不会自动把转义字符替换为真实换行,需要主动做替换处理:

  1. 先把Vault中存储的config值修改为带转义换行的内容:
{
  "config": "test.domain.com:53 {\n    errors\n    cache 30\n    forward . 1.1.1.1 1.1.1.2\n}"
}
  1. 导出时用jq的gsub方法替换转义换行符为真实换行,命令如下:
vault kv get -format=json ${VAULT_PATH}/coredns-custom | jq -r '.data.data.config | gsub("\\\\n"; "\n")' > coredns-custom.yaml

内容的提问来源于stack exchange,提问作者musicman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:24:04