Работа с ресурсом шеф-повара systemd_unit - PullRequest
0 голосов
/ 02 ноября 2018

Ресурс chef systemd позволяет указать файл службы через атрибут содержимого (который принимает строку или хэш). Оба из них чувствуют себя оскорбительно плохой идеей; их пример:

systemd_unit 'sysstat-collect.timer' do
  content <<-EOU.gsub(/^\s+/, '')
  [Unit]
  Description=Run system activity accounting tool every 10 minutes

  [Timer]
  OnCalendar=*:00/10

  [Install]
  WantedBy=sysstat.service
  EOU

  action [:create, :enable]
end

Это очень неправильно ... смешивать мой рецепт шеф-повара с тем, что должно быть просто файлом конфигурации (или шаблоном). Я пробовал различные варианты попыток записать файл в мою цель (используя cookbook_file), а затем прочитать его обратно, чтобы перейти к содержанию, но это также кажется неудовлетворительным и до сих пор не сработало.

Отредактируйте, чтобы задать лучший вопрос:

Есть ли какой-нибудь механизм использования ресурса chef systemd, чтобы я не встраивал файлы конфигурации в виде строк в сам файл рецепта?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Я думал так же, когда впервые начал использовать systemd_unit, но теперь я смотрю на это по-другому. Я не храню файлы конфигурации JSON, YAML или TOML в качестве шаблонов, потому что они могут быть сгенерированы из хэшей атрибутов. Это гарантирует, что они синтаксически верны, и более гибкий способ изменить атрибут, чем файл поваренной книги. Единицы - это файлы в формате INI, поэтому я отношусь к ним одинаково.

Иногда, однако, вам просто нужно прочитать текстовый файл и передать его ресурсу. Я уверен, что этот метод можно улучшить, но он делает свою работу.

unit_temp_path = "#{Chef::Config[:file_cache_path]}/foo.service"

cookbook_file unit_temp_path do
  action :create
end

systemd_unit 'foo.service' do
  # delay reading until convergence phase
  content lazy { ::File.read(unit_temp_path) }
  action :create
end
0 голосов
/ 17 марта 2019

Я не уверен, с какой из двух проблем сталкивается ОП:

  • Не помещать необработанные строки в systemd_unit
  • systemd_unit ведет себя плохо при настройке единиц, которые не .service

У меня возникли проблемы с использованием ресурса systemd_unit на Chef13 для не .timer и не .service юнитов. В частности, он, кажется, ненавидит .network и .netdev, что вынуждает меня использовать template_file, прикованный к чему-то, что вызовет systemctl daemon-reload после: /

Что касается не помещения необработанных строк в systemd_unit, может быть, следующий пример может помочь?

systemd_unit 'portage-sync.timer' do
  verify true
  content(
    Unit: {
      Description: 'Timer to synchronize portage tree',
    },
    Timer: {
      OnCalendar: '*-*-* 12:00:00 UTC',
      Persistent: true,
      RemainAfterElapse: true,
      Unit: 'portage-sync.service',
    },
    Install: {
      WantedBy: 'multi-user.target',
    },
  )
end
0 голосов
/ 05 ноября 2018

Вы можете использовать что-то вроде template "/etc/systemd/system/#{unit_name}" do ... end и уведомление для daemon-reload.

...