Назад | Перейти на главную страницу

Марионеточные и запущенные сервисы?

У нас есть производственная среда, настроенная с помощью 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 попытка. По умолчанию поставщик пакетов недоступен, но кукольный доморощенный казался многообещающим. Здесь я пошел намного дальше, и мне действительно удалось заставить установку работать.

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, но все равно предпочтительнее родное решение.

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

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

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

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

node fancymac { include "rabbitmqosx }

Не уверен, что это все еще проблема, но похоже, что это была ошибка провайдера launchd, исправленная в 3.1.0. Ошибка: https://projects.puppetlabs.com/issues/16271