Интересно, может ли кто-нибудь помочь мне с моей проблемой в файле настроек? Мне нужно получить вывод, как показано ниже, но у меня возникают проблемы с использованием inifile. Я поставил ниже мой код и результаты тестирования. Мой сервис не запускается из-за '[]'. Ваши комментарии и идеи высоко ценятся. Спасибо!

Ожидаемый результат

cat /etc/service.conf
info something something...
without section header
setting1=value1

< Сильный > Testings

< Сильный > testscript1.pp

ini_setting {'setx':
ensure  => present,
  path    => '/etc/service.conf',
  key_val_separator => '=',
  setting => 'setting1',
  value   => 'value1',
}

вывод testscript1.pp

cat /etc/service.conf
info something something...
[setx]
setting1=value1

< Сильный > testscript2.pp

$defaults = {
      ensure  => present,
      path    => '/etc/service.conf',
      key_val_separator => '=',
}
$settings = {
      ' ' => {
        'setting1' => 'value1',
      }
    }
create_ini_settings($settings,$defaults)

вывод testscript2.pp

cat /etc/service.conf
info something something...
[ ]
setting1=value1

Поскольку я действительно хотел удалить символ [], поскольку он вызывает ошибку при перезапуске службы, я использовал section_prefix => '#',. Первый запуск кукольного агента проходит гладко и работает. Теперь проблема в том, что если агент puppet работает с частотой (например, каждый час), он автоматически добавляет данные в файл conf из-за отсутствия заголовка раздела. Я решил использовать ini_subsetting, но получаю ошибки.

< Сильный > testscript3.pp

ini_subsetting {'subset':
      ensure            => present,
      section           => '',
      key_val_separator => '=',
      path              => '/etc/service.conf',
      setting           => 'setting1',
      subsetting        => '',
      value             => 'value1',
    }

вывод testscript3.pp

Error: Failed to apply catalog: Parameter path failed on Ini_subsetting[subset]: File paths must be fully qualified, not '/etc/service.conf'.

Любые предложения или советы высоко ценятся.

Спасибо.

0
emyatsuna 24 Апр 2020 в 10:16

2 ответа

Лучший ответ

Если файл, которым вы управляете, не имеет каких-либо маркеров раздела, то это не файл INI, даже в общем смысле, который поддерживает модуль puppetlabs / inifile. Насколько я знаю, вам нужно выбрать другой подход к управлению файлом.

Вы можете подумать о шаблонировании всего файла или о написании собственного типа и провайдера для него, но прежде чем идти на такие большие проблемы, вам следует подумать, является ли старый добрый file_line из puppetlabs / stdlib подойдет для ваших нужд.

0
John Bollinger 27 Апр 2020 в 05:01

Вы пробовали свой testscript1.pp с section => ''?

Это будет выглядеть так:

ini_setting {'setx':
  ensure            => present,
  path              => '/etc/service.conf',
  key_val_separator => '=',
  section           => '',
  setting           => 'setting1',
  value             => 'value1',
}

И вывод будет:

cat /etc/service.conf
info something something...
setting1=value1

Или вы можете попытаться использовать force_new_section_creation => false, так как это верно по умолчанию и форсирует создание раздела, как указано в ссылка.

Что касается вашего третьего примера, он, вероятно, не работает из-за пустого параметра subsetting. Для типа ресурса ini_subsetting требуются параметры setting и subsetting.

0
Éder Gillian 27 Апр 2020 в 03:20