2012-06-05 47 views
5

我正在嘗試在我的Vagrant機器上獲得對augeas的支持。Augeas支持我的Vagrant機器?

我想這些指令安裝一些軟件包:

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

當我嘗試在我的艙單使用augeas,VM啓動後,我收到此錯誤:

err: Could not find a suitable provider for augeas 

我使用Vagrant 1.0.3的精確32官方包裝盒。

流浪1.0.3有紅寶石1.8.7和2.7.14傀儡

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

這是我與PHP類的小清單,包括後阿帕奇類,MySQL的和其它類測試分別。 除了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", 
     ]; 
    } 

} 

安裝包之後,在流浪的機器記錄與 「無業遊民SSH」,我啓動:

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

提前感謝!

+0

您使用的是哪個版本的puppet,您的puppet代碼是什麼樣的? –

+0

我添加了您請求的信息。我希望這可以幫助... –

回答

1

在Puppet 2.7.14上,這個should work作爲提供者的依賴關係,只有在需要時纔會被評估 - 即當Puppet需要運行這些Augeas資源時。

如果沒有完整的Puppet日誌文件來確認,我懷疑這是因爲您錯過了Augeas包和需要它們的Augeas資源之間的顯式依賴關係。請記住,按照該順序在清單中列出資源並不意味着Puppet以這種方式執行它。

您既可以添加需要的參數,以每Augeas資源:

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

或者使用chaining syntax自動使每一個Augeas資源依賴於一個包。增加這個在類中的線,但沒有任何資源裏面:

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

我已經將所有要求添加到augeas指令,但問題仍然存在。注意:我已經用新代碼編輯了主要問題,包括新需求。謝謝你回覆... –

+0

好的,你可以嘗試在libaugeas-ruby安裝後運行這個命令嗎? 'ruby -raugeas -e「把Augeas.open」' –

+0

添加到主要問題中:#

7

事實證明,這是不固定在bug #6907是我在其他的答案中引用。該修補程序僅適用於Puppet提供程序,這些提供程序依賴於隨後在運行期間提供的命令。

對於Augeas提供者,它使用名爲「features」的內部Puppet來檢查ruby-augeas庫是否可用。功能只被檢查一次並且結果被緩存,因此即使在安裝庫之後,這也意味着功能仍然被評估爲false。

我向上游提交了bug #14822,併發送了一個修正的pull request。與補丁測試,現在我得到這個成功運行:

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

我不熟悉的無業遊民,但我認爲你需要找到一種解決方法安裝libaugeas-Ruby包的木偶在運行之前與此同時。

+1

我確定這是找到解決方案的方法,但不是解決方案本身。投票! :) –

8

我將以下內容添加到我的Vagrant文​​件中,並且augeas開始工作。

之前宣佈木偶供應者添加以下行,如果在Ubuntu:

config.vm.provision:外殼,:直列=>「sudo易於得到更新& &命令和apt-get安裝傀儡-y 「

這會更新您的apt套件,然後更新其最新版本已經修復的puppet客戶端。

1

從@ m0dlx閱讀的答案後,我檢查/home/vagrant/postinstall.sh文件,發現流浪使用了Ruby的自己的副本:

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

之後,我發現文件augeas.rb/opt/vagrant_ruby/lib/ruby/gems/1.8/gems/puppet-2.7.19/lib/puppet/provider/augeas/augeas.rb並對其進行編輯,通過改變線路

confine :true => Puppet.features.augeas? 

confine :true => :augeas 

(簡言之,我部分適用patch from @m0dlx。)

之後,這個錯誤消失了。