Usługi lalek i uruchomionych?

15

Mamy środowisko produkcyjne skonfigurowane z Puppet i chcemy mieć możliwość skonfigurowania podobnego środowiska na naszych komputerach programistycznych: mieszanki Red Hats, Ubuntus i OSX. Jak można się spodziewać, OSX jest tutaj dziwnym człowiekiem i niestety mam problem z uruchomieniem tego.

Moja pierwsza próba polegała na użyciu macportsnastępującej deklaracji:

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

ale to niestety powoduje następujący błąd:

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"

Następnie pomyślałem, że homebrewspróbuję. Domyślnie nie ma dostępnego dostawcy pakietów, ale marionetka homebrew wydawała się obiecująca. Tutaj dotarłem znacznie dalej i udało mi się sprawić, aby instalacja działała.

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"] ],
}

Tutaj nie otrzymuję żadnego błędu. Ale RabbitMQ też się nie uruchamia (tak jak w przypadku ręcznego ładowania 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

Co ja robię źle?

Edycja : Dla przypomnienia, teraz robimy to za pomocą maszyn wirtualnych Vagrant zamiast na naszych komputerach OSX, ale nadal byłoby preferowane rozwiązanie natywne.

Joel Westberg
źródło
Jaką wersję marionetki prowadzisz? Czy próbujesz z powyższymi manifestami puppet apply manifest.pp?
chutz,
Debugowanie nie wydaje się zawierać żadnego „rzeczywistego” błędu. Czy możesz wpisać /private/var/log/system.log, jeśli są jakieś powiązane wpisy?
John Siu,
@chutz: Działa sudo puppet apply manifest.ppna Puppet 3.0.1, Facter 1.6.16 @JohnSiu: Niestety, tam też nie ma.
Joel Westberg,
Nie sądzę, żebyś popełnił błąd w jakikolwiek sposób. Myślę jednak, że musisz jeszcze raz sprawdzić podejście programistyczne.
Toby
Czy wiesz, czy marionetka ładuje uruchomioną listwę? Jeśli nie, musisz poczekać do ponownego uruchomienia komputera lub wymusić krok instalatora loadctl po instalacji. Upewnij się, że plist ma ustawioną flagę „Uruchom przy obciążeniu”. Czy możesz opublikować listę i dane wyjściowe listy launchctl z nazwą usługi.
Alex

Odpowiedzi:

1

Niestety narzędzia do zarządzania konfiguracją naprawdę nie działają dobrze na komputerach stacjonarnych. O wiele lepiej jest użyć narzędzia takiego jak Vagrant (jak masz).

Vagrant to oprogramowanie do wirtualizacji typu open source, które umożliwia replikację środowisk za pomocą hiperwizorów. Na komputerze Mac używam go z VirtualBox firmy Oracle (głównie do testowania przez szefa kuchni). VirtualBox jest również bezpłatny. Pierwotnym zamiarem Vagrant było umożliwienie programistom posiadania spójnych środowisk do pracy (tj. Tego, czego szukałeś, ale nie tego, jak chciałeś, aby działało). Vagrant można łączyć z Puppet, sprawdź te przykłady .

Forest J. Handford
źródło
0

Rodzaj brutalnego podejścia:

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

node fancymac { include "rabbitmqosx }
Stephan
źródło