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客户端.
事实证明,我在其他答案中引用的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包.
在 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)