Squid

使用 Augeas 修改 Squid 配置

  • April 23, 2012

我正在跑步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 配置選項。這不會使鏡頭配置變得非常脆弱嗎?我沒有研究過鏡頭,但他們為什麼不只定義文件的“結構”(例如“名稱空白值-包括-空格”或“名稱製表符-僅值-列表-空格分隔”, ETC。)?必須讓鏡頭了解所有配置選項,這似乎有點奇怪,而且有點讓人頭疼。

我是否正確診斷了這一點?如果是這樣,我能做些什麼(理想情況下不必手動修改鏡頭等)

我可以確認目前鏡頭不支持該cache_access_log參數,最好的辦法確實是在 Augeas trac 上開一張票。

一些配置文件很容易映射,你可以只指定一個模式(例如“key = value”)。其他的則更棘手,其中一些條目具有特定的語法,而另一些則具有不同的語法。例如,在 squid 鏡頭的情況下,http_accessacl條目的語法與文件的其餘部分不同。因此,有必要列出文件中的所有已知鍵,以將它們映射到正確的解析器。

對於這樣的鏡頭,當鏡頭中缺少某個鍵時,最好的辦法是報告它(或者更好的是,向列表發送更新檔,在這種情況下非常簡單)。

期待你的票/更新檔!

引用自:https://serverfault.com/questions/382207