我正在尝试在我的流浪机器上获得对 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
我正在使用带有流浪者 32 的 precision1.0.3 官方框。
流浪者 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@precise32:~$ ruby -raugeas -e "puts Augeas.open"
#<Augeas:0xb77a3598>
提前感谢!
我将以下内容添加到我的 Vagrantfile 中,它开始工作。
在声明 puppet provisioning er 之前,如果在 ubuntu 上添加以下行:
config.vm.provision :shell, :inline => "sudo apt-get update && sudo apt-get install puppet -y"
这将更新您的 apt 软件包,然后更新最新版本已经修复的 puppet 客户端。
事实证明,这在我在其他答案中引用的错误 #6907 中没有修复。 该修复仅适用于依赖于在运行期间提供的命令的 Puppet 提供程序。
对于 Augeas 提供程序,它使用一个名为"features"的内部 Puppet 来检查 ruby-augeas 库是否可用。 功能仅检查一次并缓存结果,因此即使在安装库后,这意味着该功能的评估仍为 false。
我将其作为错误 #14822 提交上游,并发送了一个带有修复程序的拉取请求。 使用补丁进行测试,我现在成功运行:
notice: /Stage[main]//Package[ruby-augeas]/ensure: created
notice: /Stage[main]//Augeas[test]/returns: executed successfully
我不熟悉 Vagrant,但我认为您需要找到一种解决方法来在 Puppet 运行之前安装 libaugeas-ruby 包。
在 Puppet 2.7.14 上,这应该可以工作,因为提供程序的依赖项只会在需要时进行评估 - 即当 Puppet 需要运行这些 Augeas 资源时。
如果没有完整的 Puppet 日志文件来确认,我怀疑这是因为您在 Augeas 软件包和需要它们的 Augeas 资源之间缺少显式依赖关系。 请记住,按该顺序列出清单中的资源并不意味着 Puppet 以这种方式执行它。
您可以将 require 参数添加到每个 Augeas 资源:
augeas { "php-cli":
require => [ Package["php5"], Package["libaugeas-ruby"] ],
# ...
}
或者使用链接语法自动使每个 Augeas 资源依赖于包。 在类内的一行中添加它,但不在任何资源中添加它:
Package["libaugeas-ruby"] -> Augeas <| |>
在阅读了@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
(简而言之,我部分应用了@m0dlx的补丁。
之后,此错误消失了。