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

使用go-ini解析Ansible-playbook文件时遇key-value delimiter not found错误

解决go-ini解析Ansible Inventory时的"key-value delimiter not found"错误

这个问题的核心原因是:go-ini默认遵循严格的标准INI格式,要求每一行必须是key=value的键值对结构,但Ansible的Inventory文件是INI格式的扩展——它允许在section下直接列出主机(比如你的[vm_master]下的172.16.1.2),这种行没有键值分隔符=,所以go-ini会报错。

快速解决方案:开启go-ini的无值键支持

你只需要在加载文件时配置AllowNoValue: true,让go-ini允许没有值的键(也就是把那些主机IP当作键,值为空),修改后的代码如下:

import "gopkg.in/ini.v1"

// ...

opts := ini.LoadOptions{
    AllowNoValue: true,
}
conf, err := ini.LoadOptions(opts, inventoryFilePath)
if err != nil {
    return errors.New("Unable to read file: " + err.Error())
}

nodeSection, err := conf.GetSection("vm_master")
if err != nil {
    return errors.New("Unable to get section: " + err.Error())
}

// 获取section下的所有主机IP(也就是所有无值的键)
hosts := nodeSection.KeyStrings()
// 现在hosts里就包含了["172.16.1.2"]

补充说明

Ansible的Inventory文件并不是严格的标准INI,它额外支持了:

  • 直接在section下列出主机
  • 分组变量(比如[all:vars]这种带后缀的section)
  • 通配符、范围表达式等

如果后续你需要处理更多Ansible特有的Inventory语法,可能需要考虑使用专门针对Ansible Inventory的Go库,不过对于基础的主机列表解析,开启AllowNoValue就足够解决你的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:00:47