Мне нужно установить значение «dc_local_interfaces» на «127.0.0.1; :: 1», но точка с запятой предотвращает это.
Это мое определение в Puppet:
augeas { "/etc/exim4/update-exim4.conf.conf":
lens => "Shellvars.lns",
incl => "/etc/exim4/update-exim4.conf.conf",
changes => "set dc_local_interfaces 127.0.0.1;::1",
}
Я пробовал разные способы установки значения (без апострофов, с использованием апострофов, с использованием апострофов с экранированием обратной косой черты), но ни один из них не работал. Когда я использую augtool, все работает:
set /files/etc/exim4/update-exim4.conf.conf/dc_local_interfaces "'127.0.0.1;::1'"
(через несколько часов я теперь могу ответить на этот вопрос напрямую, а не использовать комментарий (для лучшего форматирования))
Поскольку я писал вопрос и тестировал параллельно, я нашел ответ сам, но так как для exim / puppet в целом мало что можно найти, я все же решил опубликовать это в надежде, что другие сочтут его полезным.
Вы должны использовать апострофы снаружи, чтобы вы могли использовать кавычки внутри, чтобы снова иметь возможность использовать экранированные апострофы внутри внутри. Да. И на самом деле это выглядит даже уродливее, чем кажется (пробелы теперь тоже работают):
changes => 'set dc_local_interfaces "\'127.0.0.1;::1;test 1 2 3\'"',
Мое решение вроде этого:
class exim4::augeas (
$config = undef,
) {
if $config {
create_resources(augeas, $config, $defaults)
}
else {
$hiera_config = hiera_hash('exim4::augeas', undef)
if $hiera_config {
create_resources(augeas, $hiera_config)
}
}
}
И в иере:
exim4::augeas:
'exim4':
context: '/files/etc/exim4/update-exim4.conf.conf'
lens: 'Shellvars.lns'
incl: '/etc/exim4/update-exim4.conf.conf'
changes:
- "set dc_other_hostnames \"\'something.test.com\'\""
На самом деле это не очень специфично для exim ...