Как обновить ресурс Puppet ini_setting или ini_subsetting без заголовка раздела в файле conf? - PullRequest
0 голосов
/ 24 апреля 2020

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

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

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

Тестирование

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'.

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

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

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

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

0 голосов
/ 27 апреля 2020

Вы пробовали свой 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...