2012-06-05 12 views
5

Ich versuche, Unterstützung für augeas auf meinem Vagrant-Maschine zu bekommen.Unterstützung von Augeas auf meiner Vagrant-Maschine?

Ich habe versucht, einige Pakete mit diesen Richtlinien zu installieren:

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

Wenn ich versuche, augeas auf meinem Manifest zu verwenden, nach dem vm Boot empfange ich diese Fehlermeldung:

err: Could not find a suitable provider for augeas 

Ich bin Verwenden der precise32 offiziellen Box mit Vagrant 1.0.3.

Vagrant 1.0.3 hat Rubin 1.8.7 und Puppen 2.7.14

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

Dies ist mein kleines Manifest mit php Klasse, enthielt nach Apache Klasse, mysql und anderen Klassen getestet separat. Alle Dinge funktionieren korrekt, außer für den Befehl 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", 
     ]; 
    } 

} 

Nach der Installation von Paketen in der Vagabund Maschine mit "vagabundierenden ssh" logging, i starten:

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

Vielen Dank im Voraus!

+0

Welche Marionettenversion verwenden Sie und wie sieht Ihr Marionettencode aus? –

+0

Ich habe die von Ihnen angeforderten Informationen hinzugefügt. Ich hoffe, das hilft ... –

Antwort

1

In Puppet 2.7.14 werden diese should work als Abhängigkeiten für Anbieter nur dann ausgewertet, wenn sie benötigt werden - d. H. Wenn Puppet diese Augias-Ressourcen ausführen muss.

Ohne die vollständige Puppet-Protokolldatei zu bestätigen, vermute ich, dass es daran liegt, dass Sie explizite Abhängigkeiten zwischen den Augesas-Paketen und den Augaeas-Ressourcen vermissen, die sie benötigen. Denken Sie daran, dass das Auflisten der Ressourcen im Manifest in dieser Reihenfolge nicht bedeutet, dass Puppet es so ausführt.

Sie entweder hinzufügen könnte erfordert Parameter für jede Augias Ressource:

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

Oder nutzen Sie die chaining syntax automatisch jede Augias Ressource auf einem Paket abhängig zu machen. Fügen Sie diese auf einer Linie innerhalb der Klasse, aber nicht in jeder Ressource:

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

Ich habe alle Anforderungen an die augeas Direktive hinzugefügt, aber das Problem besteht immer noch. Hinweis: Ich habe die Hauptfrage mit dem neuen Code einschließlich neuer Anforderungen bearbeitet. Danke für die Antwort ... –

+0

Ok, könnten Sie versuchen, diesen Befehl auszuführen, nachdem libaugeas-ruby installiert wurde? 'ruby -raugeas -e 'setzt Augeas.open" ' –

+0

zur Hauptfrage hinzugefügt: #

7

Es stellt sich heraus, dass dies nicht in bug #6907 fixiert war, dass ich in meiner anderen Antwort verwiesen. Dieser Fix funktionierte nur für Puppet-Provider, die von Befehlen abhängig waren, die dann während des Laufs geliefert wurden.

Für den Augesas-Provider verwendet es eine interne Puppet namens "Features", um zu überprüfen, ob die Ruby-Auges-Bibliothek verfügbar ist oder nicht. Features werden nur einmal überprüft und die Ergebnisse werden zwischengespeichert, sodass auch nach der Installation der Bibliothek das Feature immer noch als false eingestuft wurde.

Ich habe diese Upstream als bug #14822 abgelegt und eine pull request mit einem Fix gesendet.mit dem Patch zu testen, bekomme ich jetzt diesen erfolgreichen Lauf:

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

ich mit Vagrant nicht vertraut bin, aber ich denke, dass Sie eine Abhilfe finden müssen das libaugeas-ruby Paket vor dem Puppet zulaufen installieren die Zwischenzeit.

+1

Ich bin mir sicher, dass dies die Lösung ist, aber nicht die Lösung selbst. Stimme hoch! :) –

8

Ich habe zu meiner Vagrantfile hinzugefügt und es begann zu arbeiten.

Bevor erklärt Puppen provisioner die folgende Zeile hinzufügen, wenn auf ubuntu:

config.vm.provision: Shell: inline => „sudo apt-get & & sudo apt-get update puppet -y installieren "

Dies wird Ihre apt-Pakete aktualisieren und dann den Marionetten-Client aktualisieren, dessen letzte Version bereits repariert wurde.

1

Nach Antwort Lesen von @ m0dlx inspizieren ich /home/vagrant/postinstall.sh Datei und festgestellt, dass Vagrant eigene Kopie von Ruby verwendet:

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

Danach habe ich Datei finden augeas.rb bei /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/puppet-2.7.19/lib/puppet/provider/augeas/augeas.rb und bearbeiten, durch die Linie zu ändern

confine :true => Puppet.features.augeas? 

zu

confine :true => :augeas 

(Kurz gesagt, ich teile teilweise patch from @m0dlx.)

Danach ist dieser Fehler verschwunden.