Layanan boneka dan launchd?

15

Kami memiliki lingkungan produksi yang dikonfigurasi dengan Puppet, dan ingin dapat membuat lingkungan yang serupa pada mesin pengembangan kami: campuran Red Hats, Ubuntus dan OSX. Seperti yang mungkin diharapkan, OSX adalah pria aneh di sini, dan sayangnya, saya mengalami banyak masalah untuk mendapatkan ini berfungsi.

Upaya pertama saya menggunakan macports, menggunakan deklarasi berikut:

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

tetapi ini, sayangnya, menghasilkan kesalahan berikut:

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"

Selanjutnya, saya pikir saya akan homebrewmencoba. Tidak ada penyedia paket yang tersedia secara default, tetapi boneka-homebrew tampak menjanjikan. Di sini, saya mendapatkan lebih jauh, dan benar-benar berhasil menginstal agar berfungsi.

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

Di sini, saya tidak mendapatkan kesalahan. Tapi RabbitMQ juga tidak memulai (seperti halnya jika saya melakukan pemuatan manual 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

Apa yang saya lakukan salah?

Sunting : Sebagai catatan, kami sekarang melakukan ini dengan Vagrant VMs sebagai gantinya pada mesin OSX kami, tetapi solusi asli masih lebih disukai.

Joel Westberg
sumber
Versi boneka apa yang Anda jalankan? Apakah Anda mencoba manifes di atas dengan puppet apply manifest.pp?
chutz
Tampaknya debug tidak mengandung kesalahan 'aktual'. Bisakah Anda mengecek /private/var/log/system.log jika ada entri terkait?
John Siu
@chutz: Running sudo puppet apply manifest.ppon Puppet 3.0.1, Facter 1.6.16 @JohnSiu: Tidak ada apa-apa di sana, sayangnya.
Joel Westberg
Saya tidak berpikir Anda salah dalam hal apa pun. Namun, saya pikir Anda harus memeriksa pendekatan pemrograman sekali lagi.
Toby
Apakah Anda tahu jika boneka memuat daftar launchd? Jika tidak, Anda harus menunggu sampai reboot, atau memaksakan langkah loadctl launchctl setelah menginstal. Pastikan plist telah menjalankan flag flag yang sudah diatur di dalamnya. Bisakah Anda memposting plist dan output daftar launchctl dengan nama layanan.
Alex

Jawaban:

1

Sayangnya, alat manajemen konfigurasi tidak bekerja dengan baik untuk mesin desktop. Jauh lebih baik menggunakan alat seperti Vagrant (seperti yang Anda miliki).

Vagrant adalah perangkat lunak virtualisasi open-source yang memungkinkan Anda untuk mereplikasi lingkungan melalui hypervisor. Di Mac saya, saya menggunakannya dengan Oracle's VirtualBox (kebanyakan untuk pengujian Chef). VirtualBox juga gratis. Maksud asli dari Vagrant adalah untuk memungkinkan pengembang untuk memiliki lingkungan yang konsisten untuk bekerja (yaitu: apa yang Anda cari tetapi tidak bagaimana Anda ingin itu berfungsi). Vagran dapat dikombinasikan dengan Wayang, lihat contoh-contoh ini .

Hutan J. Handford
sumber
0

Semacam pendekatan brute force:

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

node fancymac { include "rabbitmqosx }
Stephan
sumber