Написание объектива Augeas
Мне нужно отредактировать одну строку в /etc/mongodb.conf
auth = true
У Augeas есть объектив Монго, однако он работает только на Augeas > 1,0
Я полностью застрял на augeas 0.9, потому что это последняя версия репозитория epel, и я не могу скомпилировать augeas из github.
Как обходной путь, я пытаюсь написать свой собственный объектив augeas, который будет работать на augeas 0,9
То, что я до сих пор это
module Spencer =
autoload xfm
let entry = key /[a-z]+/ . del /[ \t]*=[ \t]*/ "=" . store /[a-z]+/
let lns = [ entry . del "\n" "\n" ] *
test lns get "auth = false\nfoo = bar\n" = ?
let filter = incl "/etc/mongodb.conf"
let xfm = transform lns filter
Когда я пытаюсь использовать тип puppet, чтобы применить линзу к /etc/mongodb.conf, я получаю сообщение об ошибке "Итеративная линза соответствует меньше, чем должна".
puppet apply augmongo.pp --debug --verbose --summarize
Info: Applying configuration version '1385024927'
Debug: Augeas[auth-mongo](provider=augeas): Opening augeas with root /, lens path , flags 64
Debug: Augeas[auth-mongo](provider=augeas): Augeas version 0.9.0 is installed
Test result: /usr/share/augeas/lenses/dist/spencer.aug:8.0-.44:
{ "auth" = "false" }
{ "foo" = "bar" }
Debug: Augeas[auth-mongo](provider=augeas): Will attempt to save and only run if files changed
Debug: Augeas[auth-mongo](provider=augeas): sending command 'set' with params ["/files/etc/mongodb.conf/auth", "true"]
Debug: Augeas[auth-mongo](provider=augeas): Put failed on one or more files, output from /augeas//error:
Debug: Augeas[auth-mongo](provider=augeas): /augeas/files/etc/mongodb.conf/error = put_failed
Debug: Augeas[auth-mongo](provider=augeas): /augeas/files/etc/mongodb.conf/error/pos = 1
Debug: Augeas[auth-mongo](provider=augeas): /augeas/files/etc/mongodb.conf/error/lens = /usr/share/augeas/lenses/dist/spencer.aug:6.10-.37:
Debug: Augeas[auth-mongo](provider=augeas): /augeas/files/etc/mongodb.conf/error/message = Iterated lens matched less than it should
Debug: Augeas[auth-mongo](provider=augeas): Closed the augeas connection
Error: /Stage[main]/Augmongo/Augeas[auth-mongo]: Could not evaluate: Save failed with return code false, see debug
Debug: Finishing transaction 69857417180740
Debug: Storing state
Debug: Stored state in 0.13 seconds
Что не так с объективом?
Как я могу проверить линзу из командной строки и вывести куклу из уравнения?
2 ответа
RHEL 6.4 только что обновлен до Augeas 1.0. См. https://rhn.redhat.com/errata/RHSA-2013-1537.html.
Вы должны быть в состоянии пересобрать пакеты или подождать, пока CentOS сделает это за вас.
У меня были похожие проблемы с augeas & puppet. Применение изменений, казалось, заканчивалось ошибкой Could not evaluate: Save failed with return code false
каждый раз. Это оказалось проблемой синтаксиса. Я имел:
set spec[user = '%somegroup']/host_group/command/tag NOPASSWD
(обратите внимание на два пустых пространства между tag
а также NOPASSWD
). Когда я попробовал ту же команду с одним пустым пространством, проблема была решена. Изучение шаблона / объектива (spencer.aug, строка 6.10-.37) может дать некоторую подсказку о том, что пошло не так.