2012-06-05 15 views
5

Sto cercando di ottenere supporto per l'augisita sulla mia macchina Vagrant.Supporto di Augeas sulla mia macchina Vagrant?

ho provato ad installare qualche pacchetto con queste direttive:

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

Quando provo a utilizzare Augia sui miei manifesti, dopo l'avvio vm ricevo questo errore:

err: Could not find a suitable provider for augeas 

Sono usando la scatola ufficiale precise32 con Vagrant 1.0.3.

Vagrant 1.0.3 ha ruby ​​1.8.7 e marionette 2.7.14

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

Questo è il mio piccolo manifesta con php classe, incluso dopo apache classe, mysql e le altre classi testato separatamente. Tutte le cose funzionano correttamente eccetto per il 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", 
     ]; 
    } 

} 

Dopo l'installazione dei pacchetti, la registrazione nella macchina vagabonda con "ssh vagabonda", mi lancio:

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

Grazie in anticipo!

+0

Quale versione di burattino stai usando e come si presenta il tuo codice burattino? –

+0

Ho aggiunto le informazioni che hai richiesto. Spero che questo aiuti ... –

risposta

1

Su Puppet 2.7.14, questo should work come le dipendenze per i provider verrà valutato solo quando necessario, ad esempio quando Puppet deve eseguire le risorse di Augeas.

Senza il file di log completo di Puppet per confermare, ho il sospetto che sia perché mancano delle dipendenze esplicite tra i pacchetti di Augeas e le risorse di Augeas che ne hanno bisogno. Ricorda, elencare le risorse nel manifest in quell'ordine non significa che Puppet la esegua in quel modo.

Si potrebbe o aggiungere richiede parametri ad ogni risorsa Augia:

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

o utilizzare il chaining syntax per rendere automaticamente ogni risorsa Augia dipendono da un pacchetto. Aggiungere questo su una linea all'interno della classe, ma non all'interno di qualsiasi risorsa:

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

Ho aggiunto tutti i requisiti alla direttiva augeas ma il problema persiste ancora. Nota: ho modificato la domanda principale con il nuovo codice incluse le nuove richieste. Grazie per la risposta ... –

+0

Ok, potresti provare a eseguire questo comando dopo aver installato libaugeas-ruby? 'ruby -raugeas -e" inserisce Augeas.open "' –

+0

aggiunto alla domanda principale: #

7

Si scopre che questo non è stato risolto in bug #6907 che ho fatto riferimento nella mia altra risposta. Quella correzione funzionava solo per i fornitori di Puppet che dipendevano dai comandi che venivano poi forniti durante la corsa.

Per il provider di Augeas, utilizza un burattino interno chiamato "caratteristiche" per verificare se la libreria di ruby-augeas è disponibile o meno. Le funzionalità vengono verificate una sola volta e i risultati vengono memorizzati nella cache, quindi anche dopo aver installato la libreria, ciò significa che la funzione è stata ancora valutata come falsa.

Ho archiviato questo come bug #14822 e ho inviato un pull request con una correzione.Test con la patch, ora ottenere questo percorso di successo:

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

io non sono a conoscenza Vagrant, ma penso che sarà necessario trovare una soluzione per installare il pacchetto libaugeas-rubino prima che il Puppet eseguito in nel frattempo.

+1

Sono sicuro che questo è il modo per trovare la soluzione, ma non la soluzione stessa. Vota! :) –

8

Ho aggiunto quanto segue al mio Vagrantfile e ha iniziato a funzionare.

Prima di dichiarare fantoccio provisioner aggiungere la seguente riga, se su ubuntu:

config.vm.provision: coperture,: linea => "sudo apt-get update & & sudo apt-get install fantoccio -y "

Questo aggiornerà i pacchetti apt e quindi aggiornerà il client puppet la cui versione più recente ha già una soluzione.

1

Dopo aver letto la risposta da @ m0dlx ho ispezionare /home/vagrant/postinstall.sh di file e ha scoperto che Vagrant utilizza propria copia di Ruby:

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

Dopo che trovo lima augeas.rb a /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/puppet-2.7.19/lib/puppet/provider/augeas/augeas.rb e modificarlo, cambiando la linea

confine :true => Puppet.features.augeas? 

a

confine :true => :augeas 

(In breve, applico parzialmente patch from @m0dlx.)

Dopo che questo errore è andato.

Problemi correlati