Puppet 我的流浪机器有什么支持吗?

Puppet 我的流浪机器有什么支持吗?,puppet,vagrant,augeas,Puppet,Vagrant,Augeas,我正试图在我的流浪机器上为augeas争取支持 我尝试使用以下指令安装一些软件包: package { "augeas-tools": ensure => installed } package { "libaugeas-dev": ensure => installed } package { "libaugeas-ruby": ensure => installed } 当我尝试在清单上使用AUGEA时,在vm引导后,我收到以下错误: err: Could not

我正试图在我的流浪机器上为augeas争取支持

我尝试使用以下指令安装一些软件包:

package { "augeas-tools":   ensure => installed }
package { "libaugeas-dev":  ensure => installed }
package { "libaugeas-ruby": ensure => installed }
当我尝试在清单上使用AUGEA时,在vm引导后,我收到以下错误:

err: Could not find a suitable provider for augeas
我正在使用precise32官方邮箱和Vagrant 1.0.3

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>
vagrant@precise32:~$ruby-raugeas-e“打开Augeas.open”
#
提前谢谢

在Puppet 2.7.14上,这作为提供者的依赖关系,将仅在需要时进行评估,即Puppet需要运行这些Augeas资源时

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

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

augeas { "php-cli":
    require => [ Package["php5"], Package["libaugeas-ruby"] ],
    # ...
}
Package["libaugeas-ruby"] -> Augeas <| |>
或者使用自动使每个Augeas资源依赖于包。将其添加到类中的一行,但不要添加到任何资源中:

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

事实证明,我在另一个答案中提到的问题并没有解决这一问题。该修复仅适用于依赖于运行期间提供的命令的Puppet提供程序

对于Augeas提供程序,它使用一个名为“features”的内部傀儡来检查ruby Augeas库是否可用。功能只被检查一次,结果被缓存,所以即使在安装了库之后,这意味着该功能仍然被评估为false

我向上游提交了此文件,并已发送了一份带有修复程序的电子邮件。通过使用修补程序进行测试,我现在可以成功运行:

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

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

我将以下内容添加到我的Vagrant文件中,它开始工作

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

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


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

在阅读@m0dlx的答案后,我检查了
/home/vagrant/postinstall.sh
文件,发现vagrant使用自己的Ruby副本:

#厨师和木偶宝石Ruby_home=“/opt/vagrant_Ruby”

之后,我在
/opt/vagrant_ruby/lib/ruby/gems/1.8/gems/puppet-2.7.19/lib/puppet/provider/augeas/augeas.rb
找到文件

confine :true => Puppet.features.augeas?

(简而言之,我部分申请。)


之后,此错误消失。

您使用的是哪个版本的puppet,您的puppet代码是什么样子的?我添加了您请求的信息。我希望这会有所帮助……我已经在augeas指令中添加了所有要求,但问题仍然存在。注意:我用新代码编辑了主要问题,包括新要求。感谢您的回复…好的,您能在安装libaugeas ruby后尝试运行此命令吗
ruby-raugeas-e“puts Augeas.open”
添加到主要问题中:#我在另一个答案中提到的东西已经被合并,所以从2.7.20或3.0.2开始,您就可以这样做了。我确信这是找到解决方案的方法,但不是解决方案本身。投赞成票!:)