【问题标题】:Augeas support on my Vagrant machine?我的 Vagrant 机器上支持 Augeas 吗?
【发布时间】:2012-06-09 07:32:59
【问题描述】:

我正在尝试在我的 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 的精确 32 官方框。

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>

提前致谢!

【问题讨论】:

  • 您使用的是哪个版本的 puppet,您的 puppet 代码是什么样的?
  • 我添加了您要求的信息。我希望这会有所帮助...

标签: puppet vagrant augeas


【解决方案1】:

我在我的 Vagrantfile 中添加了以下内容,它开始工作了。

如果在 ubuntu 上,在声明 puppet provisioner 之前添加以下行:

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

这将更新您的 apt 包,然后更新最新版本已修复的 puppet 客户端。

【讨论】:

    【解决方案2】:

    事实证明,这在我在其他答案中引用的 bug #6907 中没有得到解决。该修复仅适用于依赖于随后在运行期间提供的命令的 Puppet 提供程序。

    对于 Augeas 提供程序,它使用称为“功能”的内部 Puppet 来检查 ruby​​-augeas 库是否可用。功能只被检查一次并且结果被缓存,所以即使在安装库之后,这意味着该功能仍然被评估为假。

    我在上游提交了 bug #14822 并发送了 pull request 并进行了修复。使用补丁进行测试,我现在可以成功运行:

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

    我不熟悉 Vagrant,但我认为您需要找到一种解决方法来在 Puppet 运行之前安装 libaugeas-ruby 包。

    【讨论】:

    • 我确信这是找到解决方案的方法,但不是解决方案本身。投票! :)
    【解决方案3】:

    在 Puppet 2.7.14 上,这个 should work 作为提供者的依赖项只会在需要时评估 - 即当 Puppet 需要运行这些 Augeas 资源时。

    如果没有完整的 Puppet 日志文件进行确认,我怀疑这是因为您缺少 Augeas 包和需要它们的 Augeas 资源之间的显式依赖关系。请记住,以该顺序在清单中列出资源并不意味着 Puppet 以这种方式执行它。

    您可以为每个 Augeas 资源添加 requires 参数:

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

    或者使用chaining syntax 自动使每个Augeas 资源依赖于一个包。将此添加到类中的一行,但不要添加到任何资源中:

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

    【讨论】:

    • 我已将所有要求添加到 augeas 指令,但问题仍然存在。注意:我已经用包括新要求的新代码编辑了主要问题。谢谢你的回复...
    • 好的,你可以在安装 libaugeas-ruby 之后尝试运行这个命令吗? ruby -raugeas -e "puts Augeas.open"
    • 添加到主要问题:#<0xb77a3598>
    【解决方案4】:

    从@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"

    之后我在/opt/vagrant_ruby/lib/ruby/gems/1.8/gems/puppet-2.7.19/lib/puppet/provider/augeas/augeas.rb 找到文件augeas.rb 并通过更改行对其进行编辑

    confine :true => Puppet.features.augeas?
    

    confine :true => :augeas
    

    (简而言之,我部分申请了patch from @m0dlx。)

    之后这个错误就消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-20
      • 2017-07-23
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 2023-01-14
      • 2017-08-04
      • 2011-08-31
      相关资源
      最近更新 更多