Рецепт Chef для настройки нескольких экземпляров mpd

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

Я хочу настроить каждый экземпляр в своем Vagrantfile следующим образом:

mpd: {
  channels: {
    mix: {
      name: 'mpd_mix',
      bind: '0.0.0.0',
      socket: '/home/vagrant/.mpd/socket/mix',
      port: '6600'
    },
    tech: {
      name: 'mpd_tech',
      bind: '0.0.0.0',
      socket: '/home/vagrant/.mpd/socket/tech',
      port: '6601'
    }
  }
}

Таким образом, рецепт должен взять эти настройки и прокрутить их (создав экземпляр mpd для каждого канала).

Вот что у меня сейчас есть в качестве рецепта:

package "mpd"

node.normal[:mpd][:channels].each_value do |channel|
    # create socket
    file channel[:socket] do
      action :touch
    end

    # trying to set the attributes for the config file and the service
    node.set[:mpd][:port] = channel[:port]
    node.set[:mpd][:db_file] = "/var/lib/mpd/tag_cache_" + channel[:name]
    node.set[:mpd][:bind_2] = channel[:socket]
    node.set[:mpd][:icecast_mountpoint] = "/" + channel[:name] + ".mp3"
    node.set[:mpd][:channel_name] = channel[:name]

    # create service
    service channel[:name] do
      service_name "mpd" # linux service command
      action :enable
    end

    # create the corresponding config file
    config_filename = "/etc/" + channel[:name] + ".conf"
    template config_filename do
      source "mpd.conf.erb"
      mode "0644"
      notifies :restart, resources(:service => channel[:name])
    end
end

У меня есть несколько проблем с этим:

  1. Ist не создает системную службу для каждого экземпляра mpd, поэтому я могу сделать sudo service mpd_mix start. Почему?
  2. Он не использует файл конфигурации /etc/mpd_mix.conf при запуске mpd, потому что он по-прежнему вызывает /etc/init.d/mpd start, который использует /etc/mpd.conf. Как я могу это изменить, чтобы он использовал правильный файл конфигурации для каждого экземпляра mpd?
  3. Настройка атрибутов для создания файлов конфигурации не работает должным образом (см. часть node.set в приведенном выше коде). Оба файла конфигурации, /etc/mpd_tech.conf и /etc/mpd_mix.conf, используют атрибуты технического канала. Похоже, настройки микширования каким-то образом перезаписываются? Как я могу это исправить?

Я был бы очень признателен за помощь в этом, так как я новичок в кулинарных книгах шеф-повара.


person funkenstrahlen    schedule 29.05.2014    source источник


Ответы (1)


Я понял, как это сделать. Вот соответствующая часть кода:

node[:mpd][:channels].each_value do |channel|

    # create socket
    file channel[:socket] do
      action :touch
    end

    # create init file
    init_filename = "/etc/init.d/" + channel[:name]
    template init_filename do
      variables :channel => channel
      source "mpd.init.erb"
      mode "0755"
    end

    # create service
    service channel[:name] do
      service_name channel[:name] # linux service command
      action :enable
    end

    # create config file
    config_filename = "/etc/" + channel[:name] + ".conf"
    template config_filename do
      variables :channel => channel
      source "mpd.conf.erb"
      mode "0644"
      notifies :restart, resources(:service => channel[:name])
    end

end

Если вы хотите взглянуть поближе, взгляните на полный репозиторий кулинарных книг на github: https://github.com/i42n/chef-cookbook-mpd/blob/master/recipes/default.rb

person funkenstrahlen    schedule 29.05.2014