我正在使用带有 augeas 的 IniFile 模块来创建 Splunk 管理镜头。这适用于所有包含节标题的文件,如普通 INI 文件,但有几个文件不遵循此方案,仅使用名称=值对。
是否有一种现成的方法可以将这些条目映射到没有定义为通用内容(如 main)的部分?我宁愿不必为第二种文件类型学习另一个模块,因为目前有一种现成的方法可以避免它。
module Splunk =
autoload xfm
let comment = IniFile.comment IniFile.comment_re IniFile.comment_default
let sep = IniFile.sep IniFile.sep_re IniFile.sep_default
let setting = IniFile.record_re
let title = IniFile.title ( IniFile.record_re )
let entry = IniFile.entry steting sep comment
let record = IniFile.record title entry
let lns = IniFile.lns record comment
let filter = incl "/etc/splunk/*.conf"
let xfm = transform lns filter
test lns get "[section]\ntest-value=yes\n" = ?
test lns get "test=yes\n" = ?
PHP lens 提供类似的功能,支持在 INI 文件中定义的部分之前进行设置。我已经将它应用到您的镜头中并修复了本应用于
IniFile.entry_re
避免歧义的“设置”镜头。将生成的树如下所示,该部分之外的所有设置都位于“.anon”节点下:
该节点对于避免放置方向的歧义是必需的。举个例子,如果你的任务是将这棵树写回到一个文件中:
它可以写成
[foo]
(一个部分名称)或foo=
(一个部分外的设置)。“.anon”子树确保这个转换回来没有歧义。要删除它并拥有平面结构,您需要为每种类型的文件创建第二个模块/镜头,我认为这是一个更自然的解决方案。“.anon”节点在同一文件中存在混合的 PHP 情况下更有意义。完成并添加测试后,请务必将您的镜头提交给 Augeas 项目,我们很乐意将其包含在内。通过trac提交或发送到列表。