2.6 KiB
2.6 KiB
CF DNS 命令修复与扩展记录(2026-03-19)
背景
用户要求:
/cf dnsproxy支持直接用域名,例如:/cf dnsproxy ima.good.xx.kg on/cf dnsadd最后参数用on/off表示是否开启代理
线上报错:
yaml: line 8: did not find expected key/cf dnsproxy解析失败(bash: bad substitution)
改动概览
- 命令解析
internal/module/cf/commands.go/cf dnsproxy支持record_id|name/cf dnsadd支持on/off(兼容 true/false;当未提供 on/off 时把第4参数视为类型)
- 帮助文案
internal/module/cf/module.gointernal/core/ops/service.go- 更新
/cf dnsadd与/cf dnsproxy的参数示例
- 更新
- runbook 修复
runbooks/cf_dns_proxy.yaml- 解决 YAML 行内命令渲染与变量替换问题
- 修复
${env.INPUT_RECORD_ID}未替换导致 bash 报错 - 加入占位值
__empty__,避免空变量导致替换缺失 update_dns中 JSON 通过单引号包裹,避免 shell 分词/换行破坏
- ops-runner 支持
cmd/ops-runner/main.go- 增加
/cf dnsproxy支持 /cf dnsadd参数改为 on/off
- 增加
问题与修复记录
1. YAML 解析错误
- 现象:
yaml: line 8: did not find expected key - 原因:runbook 中 command 复杂引号/换行组合导致 YAML 解析失败
- 修复:重写
cf_dns_proxy.yamlcommand 区块
2. dnsproxy 变量替换失败
- 现象:
bash: ${env.INPUT_RECORD_ID}: bad substitution - 原因:输入为空时,没有替换占位,shell 直接解析
${env.INPUT_RECORD_ID} - 修复:InputsFn 总是注入
record_id/name占位值,runbook 将__empty__转为空
3. dnsproxy update 失败(JSON 被 shell 吞掉)
- 现象:
bash: line 1: true,: command not found - 原因:
${steps.resolve_dns.output}未加引号,JSON 被 shell 拆分 - 修复:
INPUT_JSON='${steps.resolve_dns.output}'
4. dnsadd on/off 支持
- 现象:
DNS record type "on" is invalid - 原因:解析逻辑未识别 on/off,误当作类型
- 修复:InputsFn 与 ops-runner 同步支持
on/off
5. 测试记录创建失败(127.0.0.1)
- 现象:
Target 127.0.0.1 is not allowed for a proxied record - 处理:改用公网 IP 199.188.198.12
测试结果
- 新增测试记录
/cf dnsadd test001.good.xx.kg 199.188.198.12 on
- 成功创建,proxied=true
- 代理切换
/cf dnsproxy ima.good.xx.kg on
- 成功更新,proxied=true
产物
- 修复代码与 runbook
- 版本化二进制输出(dist/ 目录)
注意事项
- proxied=on 不能指向 127.0.0.1 等内网回环地址
- runbook command 中 JSON 建议统一使用单引号包裹