使用 Augeas 修改 Squid 配置

使用 Augeas 修改 Squid 配置

我正在运行squid-deb-proxy,我想使用 Puppet/Augeas 改变配置。

当我尝试这个时:

augeas {'squid-deb-proxy.conf':
    lens    => 'Squid.lns',
    incl    => '/etc/squid-deb-proxy/squid-deb-proxy.conf',
    changes => ["set http_port 3129"],
    require => Package['squid-deb-proxy']
}

我从 Puppet 收到以下错误:

err: /Stage[main]/Portal::Packages::Squid-deb-proxy/Augeas[squid-deb-proxy.conf]: Could not evaluate: Save failed with return code false

我尝试了以下操作augtool

augtool> rm /augeas/load/*
rm : /augeas/load/* 867
augtool> set /augeas/load/Squid/lens Squid.lns
augtool> set /augeas/load/Squid/incl /etc/squid-deb-proxy/squid-deb-proxy.conf
augtool> load
augtool> print
/augeas
/augeas/root = "/"
/augeas/context = "/files"
/augeas/variables
/augeas/version = "0.10.0"
/augeas/version/save
/augeas/version/save/mode[1] = "backup"
/augeas/version/save/mode[2] = "newfile"
/augeas/version/save/mode[3] = "noop"
/augeas/version/save/mode[4] = "overwrite"
/augeas/version/defvar
/augeas/version/defvar/expr
/augeas/version/pathx
/augeas/version/pathx/functions
/augeas/version/pathx/functions/count
/augeas/version/pathx/functions/glob
/augeas/version/pathx/functions/label
/augeas/version/pathx/functions/last
/augeas/version/pathx/functions/position
/augeas/version/pathx/functions/regexp
/augeas/save = "overwrite"
/augeas/span = "disable"
/augeas/load
/augeas/load/Squid
/augeas/load/Squid/lens = "Squid.lns"
/augeas/load/Squid/incl = "/etc/squid-deb-proxy/squid-deb-proxy.conf"
/augeas/files
/augeas/files/etc
/augeas/files/etc/squid-deb-proxy
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf/path = "/files/etc/squid-deb-proxy/squid-deb-proxy.conf"
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf/mtime = "1335175492"
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf/lens = "Squid.lns"
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf/lens/info = "/usr/share/augeas/lenses/dist/squid.aug:433.18-.95:"
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf/error = "parse_failed"
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf/error/pos = "1449"
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf/error/line = "42"
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf/error/char = "0"
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf/error/lens = "/usr/share/augeas/lenses/dist/squid.aug:433.18-.95:"
/augeas/files/etc/squid-deb-proxy/squid-deb-proxy.conf/error/message = "Iterated lens matched less than it should"
/files

这似乎表明镜头无法解析配置文件。第 42 行内容如下squid-deb-proxy.conf

cache_access_log /var/log/squid-deb-proxy/access.log

并且cache_access_log似乎没有列出/usr/share/augeas/lenses/dist/squid.aug

所以……在我看来,Augeas 0.10.0 附带的 Squid 镜头并未涵盖所有 Squid 配置选项。这是否会使镜头配置变得非常脆弱?我还没有研究过镜头,但是为什么它们不定义文件的“结构”(例如“名称空白值包括空格”或“名称仅制表符值列表空格分隔”等)?让镜头了解所有配置选项似乎有点奇怪,而且维护起来有点麻烦。

我是否正确诊断了这个问题?如果正确,我该怎么做(最好不用手动修改镜头等)

答案1

我可以确认,当前镜头不支持该cache_access_log参数,最好的办法就是开一张票在 Augeas 轨道上

有些配置文件映射起来很简单,您只需指定一个模式(例如“key = value”)。其他配置文件则比较棘手,其中一些条目具有特定的语法,而其他条目则具有不同的语法。例如,在 squid lens 的情况下,http_accessacl条目的语法与文件其余部分不同。因此,有必要列出文件中所有已知的键,以将它们映射到正确的解析器。

对于这样的镜头,当镜头中缺少密钥时,最好的办法就是报告(或者更好的是,向列表发送补丁,在这种情况下这很简单)。

期待您的票/补丁!

相关内容