Назад | Перейти на главную страницу

Использование 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.

Итак ... мне кажется, что линзы Squid, поставляемые с Augeas 0.10.0, не охватывают все параметры конфигурации Squid. Разве это не делает конфигурации линз чрезвычайно хрупкими? Я не рассматривал линзы, но почему бы им просто не определить «структуру» файла (например, «имя пробела значение-включая-пробелы» или «имя табуляции-только значения-список-разделенные пробелами», и т.д.)? Это кажется немного странным и немного сложной головной болью, когда линзы знают обо всех параметрах конфигурации.

Я правильно диагностировал это? И если да, то что я могу с этим поделать (в идеале без модификации объектива вручную и т. Д.)

Я могу подтвердить, что текущий объектив не поддерживает cache_access_log параметр, и лучшее, что с этим можно сделать, это открыть тикет на трассе Авгия.

Некоторые файлы конфигурации легко сопоставить, и вы можете просто указать шаблон (например, «ключ = значение»). Другие более сложны, когда одни записи имеют определенный синтаксис, а другие - другой. Например, в случае линзы кальмара, http_access или acl записи имеют другой синтаксис, чем остальная часть файла. По этой причине необходимо перечислить все известные ключи в файле, чтобы сопоставить их с правильным парсером.

Для таких объективов лучше всего, когда в объективе отсутствует ключ, - это сообщить об этом (а еще лучше, отправить патч в список, в данном случае это довольно тривиально).

С нетерпением жду вашего билета / патча!