5

Vagrant マシンで augeas のサポートを得ようとしています。

これらのディレクティブを使用していくつかのパッケージをインストールしようとしました:

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でprecision32公式ボックスを使用しています。

Vagrant 1.0.3 には ruby​​ 1.8.7 と puppet 2.7.14 があります

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

これは、 phpクラスを含む私の小さなマニフェストであり、 apacheクラス、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",
        ];
    }

}

パッケージのインストール後、「vagrant ssh」を使用して vagrant マシンにログインし、次を起動します。

vagrant@precise32:~$ ruby -raugeas -e "puts Augeas.open"
#<Augeas:0xb77a3598>

前もって感謝します!

4

4 に答える 4

8

Vagrantfile に以下を追加すると、うまくいき始めました。

ubuntu の場合は、puppet プロビジョナーを宣言する前に次の行を追加します。

config.vm.provision :shell, :inline => "sudo apt-get update && sudo apt-get install puppet -y"

これにより、apt パッケージが更新され、最新バージョンに修正済みの puppet クライアントが更新されます。

于 2012-12-27T07:18:24.857 に答える
7

これは、他の回答で参照したバグ #6907で修正されていないことがわかりました。この修正は、実行中に提供されたコマンドに依存する Puppet プロバイダーに対してのみ有効でした。

Augeas プロバイダーの場合、「features」と呼ばれる内部 Puppet を使用して、ruby-augeas ライブラリが利用可能かどうかを確認します。機能は 1 回だけチェックされ、結果はキャッシュされるため、ライブラリをインストールした後でも機能が false と評価されます。

これをバグ #14822としてアップストリームに提出し、プル リクエストを送信して修正を加えました。パッチを使用してテストすると、次の成功した実行が得られます。

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

私は Vagrant に詳しくありませんが、その間に Puppet を実行する前に libaugeas-ruby パッケージをインストールする回避策を見つける必要があると思います。

于 2012-06-05T18:38:16.193 に答える
1

Puppet 2.7.14 では、プロバイダーの依存関係は必要な場合 (つまり、Puppet が Augeas リソースを実行する必要がある場合) にのみ評価されるため、これは機能するはずです。

確認する完全な Puppet ログ ファイルがないのは、Augeas パッケージとそれらを必要とする Augeas リソースの間に明示的な依存関係がないためだと思われます。この順序でマニフェストにリソースをリストしても、Puppet がそのように実行するわけではないことに注意してください。

すべての Augeas リソースに必須パラメーターを追加することもできます。

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

または、連鎖構文を使用して、すべての Augeas リソースがパッケージに依存するように自動的に作成します。これをクラス内の行に追加しますが、リソース内では追加しません:

Package["libaugeas-ruby"] -> Augeas <| |>
于 2012-06-05T12:37:46.457 に答える
1

@m0dlx からの回答を読んだ後、/home/vagrant/postinstall.shファイルを調べたところ、Vagrant が独自の 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

(簡単に言えば@m0dlx からのパッチを部分的に適用します。)

その後、このエラーはなくなりました。

于 2013-04-16T09:52:02.410 に答える