2012-06-05 12 views
5

Estoy tratando de obtener soporte para augeas en mi máquina Vagrant.Soporte de Augeas en mi máquina Vagrant?

He intentado instalar algún paquete de estas directivas:

package { "augeas-tools": ensure => installed } 
package { "libaugeas-dev": ensure => installed } 
package { "libaugeas-ruby": ensure => installed } 

Cuando intento utilizar augeas en mis manifiestos, después del arranque vm que recibo este error:

err: Could not find a suitable provider for augeas 

estoy usando la caja oficial precisa32 con Vagrant 1.0.3.

Vagrant 1.0.3 1.8.7 tiene rubí y marionetas 2.7.14

$ ruby -v 
$ ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux] 
$ puppet help 
$ Puppet v2.7.14 

Ésta es mi pequeña manifiesta con php clase, incluido después Apache clase, MySQL y otras clases de prueba por separado. Todo funciona correctamente excepto para el comando augeas.

class php { 

    exec { "apt-update": 
     command  => "/usr/bin/apt-get update", 
     refreshonly => true; 
    } 

    package { "augeas-tools": ensure => installed } 
    package { "libaugeas-dev": ensure => installed } 
    package { "libaugeas-ruby": ensure => installed } 

    package { "php5":    ensure => installed } 
    package { "php5-cli":   ensure => installed } 
    package { "php5-xdebug":  ensure => installed } 
    package { "php5-curl":   ensure => installed } 
    package { "php5-intl":   ensure => installed } 
    package { "php5-imap":   ensure => installed } 
    package { "php5-mcrypt":  ensure => installed } 
    package { "php5-imagick":  ensure => installed } 
    package { "php5-sqlite":  ensure => installed } 
    package { "php5-gd":   ensure => installed } 
    package { "php-apc":   ensure => installed } 

    package { 
     "libapache2-mod-php5" : 
      ensure => installed, 
      require => Package["php5"] 
    } 

    augeas { "php-cli": 
     require => [ 
         Package["php5"], 
         Package["augeas-tools"], 
         Package["libaugeas-dev"], 
         Package["libaugeas-ruby"], 
        ], 
     context => "/etc/php5/cli/php.ini", 
     changes => [ 
      "set date.timezone Europe/Rome", 
      "set short_open_tag Off", 
     ]; 
    } 

    augeas { "php-apache": 
     require => [ 
         Package["php5"], 
         Package["augeas-tools"], 
         Package["libaugeas-dev"], 
         Package["libaugeas-ruby"], 
        ], 
     context => "/etc/php5/apache2/php.ini", 
     changes => [ 
      "set date.timezone Europe/Rome", 
      "set short_open_tag Off", 
     ]; 
    } 

} 

Después de la instalación de los paquetes, la tala en la máquina vagabundo con "ssh vagabundo", ejecuto:

[email protected]:~$ ruby -raugeas -e "puts Augeas.open" 
#<Augeas:0xb77a3598> 

Gracias de antemano!

+0

¿Qué versión de títere estás usando y cómo es tu código de títere? –

+0

Agregué la información que ha solicitado. Espero que esto ayude ... –

Respuesta

1

En Puppet 2.7.14, should work, ya que las dependencias de los proveedores solo se evaluarán cuando sean necesarias, es decir, cuando Puppet necesite ejecutar esos recursos de Augeas.

Sin el archivo de registro de Puppet completo para confirmar, sospecho que es porque no tiene dependencias explícitas entre los paquetes Augeas y los recursos de Augeas que los necesitan. Recuerde, enumerar los recursos en el manifiesto en ese orden no significa que Puppet lo ejecute de esa manera.

Usted podría añadir parámetros requiere a todos los recursos Augías:

augeas { "php-cli": 
    require => [ Package["php5"], Package["libaugeas-ruby"] ], 
    # ... 
} 

o utilizar el chaining syntax hacer de forma automática todos los recursos Augeas depende de un paquete. Añadir este en una línea dentro de la clase, pero no dentro de cualquier recurso:

Package["libaugeas-ruby"] -> Augeas <| |> 
+0

He agregado todos los requisitos a la directiva augeas, pero el problema aún persiste. Nota: he editado la pregunta principal con el nuevo código que incluye nuevas necesidades. Gracias por su respuesta ... –

+0

Bien, ¿podría intentar ejecutar este comando después de instalar libaugeas-ruby? 'ruby -raugeas -e" pone Augeas.open "' –

+0

agregado a la pregunta principal: #

7

Resulta que esto no se fijó en bug #6907 que hice referencia en mi otra respuesta. Esa solución solo funcionó para los proveedores de Puppet que dependían de los comandos que luego se suministraban durante la ejecución.

Para el proveedor de Augeas, usa una Marioneta interna llamada "características" para comprobar si la biblioteca de ruby-augeas está disponible o no. Las funciones solo se comprueban una vez y los resultados se guardan en la memoria caché, por lo que incluso después de instalar la biblioteca, esto significa que la característica aún se evaluó como falsa.

Archivé este upstream como bug #14822 y he enviado pull request con una solución.Las pruebas con el parche, ahora conseguir este funcionamiento acertado:

notice: /Stage[main]//Package[ruby-augeas]/ensure: created 
notice: /Stage[main]//Augeas[test]/returns: executed successfully 

No estoy familiarizado con el vagabundo, pero creo que tendrá que encontrar una solución para instalar el paquete libaugeas-rubí antes de la Títeres ejecuta en mientras tanto.

+1

Estoy seguro de que esta es la manera de encontrar la solución, pero no la solución en sí misma. ¡Vota arriba! :) –

8

Agregué lo siguiente a mi Vagrantfile y el augeas comenzó a funcionar.

Antes de declarar provisioner marionetas añadir la siguiente línea, si en ubuntu:

config.vm.provision: cáscara,: inline => "sudo apt-get update & & sudo apt-get install -y marioneta "

Esto actualizará sus paquetes apt y luego actualizará el cliente puppet cuya última versión ya tiene una solución.

1

Después de leer la respuesta de @ m0dlx Inspecciono /home/vagrant/postinstall.sh archivo y encontré que Vagrant utiliza copia propia de Ruby:

# The base path to the Ruby used for the Chef and Puppet gems ruby_home="/opt/vagrant_ruby"

Después de eso me parece archivo augeas.rb en /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/puppet-2.7.19/lib/puppet/provider/augeas/augeas.rb y editarlo, cambiando la línea

confine :true => Puppet.features.augeas? 

a

confine :true => :augeas 

(Hablando brevemente parcialmente aplique patch from @m0dlx.)

Después de que este error se haya ido.

Cuestiones relacionadas