Кукольный и запущенный сервисы?

15

У нас есть производственная среда, настроенная с помощью Puppet, и мы хотим иметь возможность настроить аналогичную среду на наших машинах для разработки: сочетание Red Hats, Ubuntus и OSX. Как и следовало ожидать, OSX здесь странный человек, и, к сожалению, у меня много проблем с тем, чтобы заставить это работать.

Моя первая попытка была использовать macports, используя следующее объявление:

package { 'rabbitmq-server':
    ensure   => installed,
    provider => macports,
}

но это, к сожалению, приводит к следующей ошибке:

Error: /Stage[main]/Rabbitmq/Package[rabbitmq-server]: Could not evaluate: Execution of '/opt/local/bin/port -q installed rabbitmq-server' returned 1: usage: cut -b list [-n] [file ...]
       cut -c list [file ...]
       cut -f list [-s] [-d delim] [file ...]
    while executing
"exec dscl -q . -read /Users/$env(SUDO_USER) NFSHomeDirectory | cut -d ' ' -f 2"
    (procedure "mportinit" line 95)
    invoked from within
"mportinit ui_options global_options global_variations"

Затем я решил homebrewпопробовать. По умолчанию нет поставщика пакетов, но puppet-homebrew показался многообещающим. Здесь я продвинулся намного дальше и фактически смог заставить установку работать.

package { 'rabbitmq':
    ensure   => installed,
    provider => brew,
}
file { "plist":
    path   => "/Library/LaunchDaemons/homebrew.mxcl.rabbitmq.plist",
    source => "/usr/local/opt/rabbitmq/homebrew.mxcl.rabbitmq.plist",
    ensure => present,
    owner  => root,
    group  => wheel,
    mode   => 0644,
}
service { "homebrew.mxcl.rabbitmq":
    enable      => true,
    ensure      => running,
    provider    => "launchd",
    require     => [ File["/Library/LaunchDaemons/homebrew.mxcl.rabbitmq.plist"] ],
}

Здесь я не получаю никакой ошибки. Но RabbitMQ тоже не запускается (как если бы я выполнял ручную загрузку launchctl)


    [... snip ...]
    Debug: Executing '/bin/launchctl list'
    Debug: Executing '/usr/bin/plutil -convert xml1 -o /dev/stdout
        /Library/LaunchDaemons/homebrew.mxcl.rabbitmq.plist'
    Debug: Executing '/usr/bin/plutil -convert xml1 -o /dev/stdout
        /var/db/launchd.db/com.apple.launchd/overrides.plist'
    Debug: /Schedule[weekly]: Skipping device resources because running on a host
    Debug: /Schedule[puppet]: Skipping device resources because running on a host
    Debug: Finishing transaction 2248294820
    Debug: Storing state
    Debug: Stored state in 0.01 seconds
    Finished catalog run in 25.90 seconds

Что я делаю неправильно?

Редактировать : для справки, теперь мы делаем это с виртуальными машинами Vagrant вместо этого на наших машинах с OSX, но нативное решение все равно будет предпочтительным.

Джоэл Вестберг
источник
Какую версию кукол вы запускаете? Вы пробуете вышеупомянутые манифесты с puppet apply manifest.pp?
болтовня
Кажется, что отладка не содержит никакой «фактической» ошибки. Можете ли вы проверить /private/var/log/system.log, если есть какие-либо связанные записи?
Джон Сиу
@chutz: Работает sudo puppet apply manifest.ppна Puppet 3.0.1, Facter 1.6.16 @JohnSiu: К сожалению, там тоже ничего нет.
Джоэл Вестберг
Я не думаю, что вы идете не так в любом случае. Тем не менее, я думаю, что вы должны проверить подход к программированию еще раз.
Тоби
Знаете ли вы, что Puppet загружает лист запуска? Если нет, то вам нужно подождать до перезагрузки или принудительно выполнить шаг загрузки пакета loadctl после установки. Убедитесь, что на листе установлен флаг запуска при нагрузке. Можете ли вы опубликовать plist и вывод списка launchctl с именем сервиса.
Алекс

Ответы:

1

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

Vagrant - это программное обеспечение для виртуализации с открытым исходным кодом, которое позволяет реплицировать среды с помощью гипервизоров. На моем Mac я использую его с Oracle VirtualBox (в основном для тестирования Chef). VirtualBox также бесплатно. Первоначальная цель Vagrant состояла в том, чтобы позволить разработчикам работать в согласованных средах (то есть: то, что вы искали, но не то, как вы хотели, чтобы это работало). Vagrant можно комбинировать с Puppet, посмотрите эти примеры .

Форест Дж. Хэндфорд
источник
0

Этакий подход грубой силы:

class rabbitmqosx {    
    exec { "rabbitmqosx":
           command =>  "/path/to/rabbitmq",
           unless => [ 
                       "/bin/ps |grep -c rabbitmq" 
                     ]
         }

node fancymac { include "rabbitmqosx }
Stephan
источник