我正试图在我的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的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
这是我的 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>
提前致谢!
答案 0 :(得分:8)
我在Vagrantfile中添加了以下内容,augeas开始工作了。
在声明puppet provisioner之前添加以下行,如果在ubuntu上:
config.vm.provision:shell,:inline =&gt; “sudo apt-get update&amp;&amp; sudo apt-get install puppet -y”
这将更新您的apt软件包,然后更新其最新版本已经修复的puppet客户端。
答案 1 :(得分:7)
事实证明,我在其他答案中引用的bug #6907中没有修复此问题。该修复仅适用于依赖于在运行期间提供的命令的Puppet提供程序。
对于Augeas提供商,它使用一个名为“features”的内部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包。
答案 2 :(得分:1)
在Puppet 2.7.14上,这个should work作为提供者的依赖关系只会在他们需要时进行评估 - 即当Puppet需要运行这些Augeas资源时。
如果没有完整的Puppet日志文件进行确认,我怀疑它是因为您在Augeas软件包和需要它们的Augeas资源之间缺少明确的依赖关系。请记住,按顺序列出清单中的资源并不代表Puppet以这种方式执行它。
您可以向每个Augeas资源添加require参数:
augeas { "php-cli":
require => [ Package["php5"], Package["libaugeas-ruby"] ],
# ...
}
或者使用chaining syntax自动使每个Augeas资源依赖于一个包。在类中的一行上添加它,但不在任何资源内:
Package["libaugeas-ruby"] -> Augeas <| |>
答案 3 :(得分: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
(简言之,我部分申请patch from @m0dlx。)
之后,此错误消失了。