augeas установить значение с пробелами не удалось
У меня проблема с augeas, когда я устанавливаю значение (augeas-0.10.0 используется с puppet-2.7.11) с пробелами, напр.
...
changes => "set *[self::directive='FastCgiExternalServer']/arg '/usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization'",
...
После сохранения у меня появляется эта ошибка:
/augeas/files/etc/apache2/mods-available/fastcgi.conf/error = "put_failed"
/augeas/files/etc/apache2/mods-available/fastcgi.conf/error/path = "/files/etc/apache2/mods-available/fastcgi.conf/IfModule/directive"
/augeas/files/etc/apache2/mods-available/fastcgi.conf/error/lens = "/usr/share/augeas/lenses/dist/httpd.aug:76.18-77.49:"
/augeas/files/etc/apache2/mods-available/fastcgi.conf/error/message = "Failed to match \n ({ /arg/ = /([^\001-\004\t\n \"']|\\\\\"|\\\\')+|\"([^\001-\004\n\"\\]|\\\\[^\001-\004\n])\"|'([^\001-\004\n'\\]|\\\\[^\001-\004\n])'/ }({ /arg/ = /([^\001-\004\t\n \"']|\\\\\"|\\\\')+|\"([^\001-\004\n\"\\]|\\\\[^\001-\004\n])\"|'([^\001-\004\n'\\]|\\\\[^\001-\004\n])'/ })*)?\n with tree\n { \"arg\" = \"/usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization\" }"
Я пытался разными способами избежать этого значения, но каждая попытка не удалась с той же ошибкой.
Что я делаю не так? Спасибо за любые полезные ответы!
2 ответа
У вас есть две проблемы:
- ваши изменения могут создать
arg
узел без родителяdirective
узел, который не действителен сHttpd.lns
линзы; - вам нужно заключать в кавычки значение, поскольку оно содержит пробелы.
Так (используя augtool
):
# Make sure the directive exists
set directive[. = 'FastCgiExternalServer'] FastCgiExternalServer
# Set the argument
set directive[. = 'FastCgiExternalServer']/arg '"/usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization"'
должно работать лучше.
"Арг" на самом деле список. Каждый аргумент должен быть перечислен:
defvar conf /files/etc/apache2/sites-available/foo
clear $conf/VirtualHost
set $conf/VirtualHost/arg "172.16.0.1:80"
set $conf/VirtualHost/directive "FastCgiExternalServer"
set $conf/VirtualHost/*[self::directive='FastCgiExternalServer']/arg[0] "/usr/lib/cgi-bin/php5-fcgi"
set $conf/VirtualHost/*[self::directive='FastCgiExternalServer']/arg[1] "-socket"
set $conf/VirtualHost/*[self::directive='FastCgiExternalServer']/arg[2] "/var/run/php5-fpm.sock"
set $conf/VirtualHost/*[self::directive='FastCgiExternalServer']/arg[3] "-pass-header"
set $conf/VirtualHost/*[self::directive='FastCgiExternalServer']/arg[4] "Authorization"
Он производит следующий файл:
<VirtualHost 172.16.0.1:80>
FastCgiExternalServer -socket /var/run/php5-fpm.sock -pass-header Authorization
</VirtualHost>