Títeres y servicios de lanzamiento?

15

Tenemos un entorno de producción configurado con Puppet, y queremos poder configurar un entorno similar en nuestras máquinas de desarrollo: una mezcla de Red Hats, Ubuntus y OSX. Como era de esperar, OSX es el hombre extraño aquí, y lamentablemente, estoy teniendo muchos problemas para que esto funcione.

Mi primer intento fue usar macports, usando la siguiente declaración:

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

pero esto, lamentablemente, genera el siguiente error:

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"

A continuación, pensé que lo homebrewintentaría. No hay un proveedor de paquetes disponible por defecto, pero puppet-homebrew parecía prometedor. Aquí, llegué mucho más lejos, y de hecho logré que la instalación funcionara.

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

Aquí no recibo ningún error. Pero RabbitMQ tampoco se inicia (como lo hace si hago una carga manual con 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

¿Qué estoy haciendo mal?

Editar : Para el registro, ahora estamos haciendo esto con máquinas virtuales de Vagrant en nuestras máquinas OSX, pero la solución nativa aún sería preferible.

Joel Westberg
fuente
¿Qué versión de títere estás ejecutando? ¿Estás probando los manifiestos anteriores con puppet apply manifest.pp?
chutz
La depuración no parece contener ningún error 'real'. ¿Puede verificar /private/var/log/system.log si hay entradas relacionadas?
John Siu
@chutz: Ejecutando sudo puppet apply manifest.ppen Puppet 3.0.1, Facter 1.6.16 @JohnSiu: Nada allí tampoco, lamentablemente.
Joel Westberg
No creo que vayas mal de ninguna manera. Sin embargo, creo que debe verificar el enfoque de programación una vez más.
Toby
¿Sabes si Puppet está cargando la lista de lanzamiento? De lo contrario, tendrá que esperar hasta que se reinicie, o forzar un paso de pliegue de carga de launchctl después de la instalación. Asegúrese de que el plist tenga el indicador de ejecución en carga establecido. ¿Puede publicar el plist y la salida de la lista de launchctl con el nombre del servicio.
Alex

Respuestas:

1

Desafortunadamente, las herramientas de administración de configuración realmente no funcionan bien para máquinas de escritorio. Es mucho mejor usar una herramienta como Vagrant (como la que tiene).

Vagrant es un software de virtualización de código abierto que le permite replicar entornos a través de hipervisores. En mi Mac, lo uso con VirtualBox de Oracle (principalmente para pruebas de Chef). VirtualBox también es gratis. La intención original de Vagrant era permitir a los desarrolladores tener entornos consistentes para trabajar (es decir: lo que estaba buscando pero no cómo quería que funcionara). Vagrant se puede combinar con Puppet, mira estos ejemplos .

Forest J. Handford
fuente
0

Una especie de enfoque de fuerza bruta:

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

node fancymac { include "rabbitmqosx }
Stephan
fuente