Augeas支持我的Vagrant机器?

Fra*_*ula 5 puppet vagrant augeas

我正试图在我的Vagrant机器上获得对augeas的支持.

我尝试使用这些指令安装一些包:

package { "augeas-tools":   ensure => installed }
package { "libaugeas-dev":  ensure => installed }
package { "libaugeas-ruby": ensure => installed }
Run Code Online (Sandbox Code Playgroud)

当我尝试在我的清单上使用augeas时,在vm启动后我收到此错误:

err: Could not find a suitable provider for augeas
Run Code Online (Sandbox Code Playgroud)

我正在使用带有Vagrant 1.0.3的exact32官方框.

Vagrant 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
Run Code Online (Sandbox Code Playgroud)

这是我的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",
        ];
    }

}
Run Code Online (Sandbox Code Playgroud)

安装软件包后,使用"vagrant ssh"登录流浪汉机器,我启动:

vagrant@precise32:~$ ruby -raugeas -e "puts Augeas.open"
#<Augeas:0xb77a3598>
Run Code Online (Sandbox Code Playgroud)

提前致谢!

小智 8

我在Vagrantfile中添加了以下内容,augeas开始工作了.

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

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

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


Dom*_*eal 7

事实证明,我在其他答案中引用的bug#6907中没有修复这个问题.该修复仅适用于依赖于在运行期间提供的命令的Puppet提供程序.

对于Augeas提供商,它使用一个名为"features"的内部Puppet来检查ruby-augeas库是否可用.功能仅被检查一次并且结果被缓存,因此即使在安装库之后,这也意味着该功能仍被评估为false.

我在上游提交了错误#14822并发送了一个带有修复程序的pull请求.使用补丁进行测试,我现在可以成功运行:

notice: /Stage[main]//Package[ruby-augeas]/ensure: created
notice: /Stage[main]//Augeas[test]/returns: executed successfully
Run Code Online (Sandbox Code Playgroud)

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


Dom*_*eal 1

在 Puppet 2.7.14 上,这应该可以工作,因为提供者的依赖项只会在需要时才会被评估 - 即当 Puppet 需要运行这些 Augeas 资源时。

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

您可以向每个 Augeas 资源添加 require 参数:

augeas { "php-cli":
    require => [ Package["php5"], Package["libaugeas-ruby"] ],
    # ...
}
Run Code Online (Sandbox Code Playgroud)

或者使用链接语法自动使每个 Augeas 资源依赖于一个包。将其添加到类内的一行上,但不要添加到任何资源内:

Package["libaugeas-ruby"] -> Augeas <| |>
Run Code Online (Sandbox Code Playgroud)