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

Как я могу использовать Puppet / Augeas для управления конфигурацией exim dc_local_interfaces?

Мне нужно установить значение «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 ...