为什么自升级到Puppet4以来,自定义事实不再能找到`rb_sysopen`?

时间:2016-06-29 19:32:39

标签: ruby puppet facter

以下custom fact

# returns latest packerversion, e.g. 0.10.1
Facter.add("latest_packerversion") do
  setcode do
    url="https://www.packer.io/downloads.html"

    file = open("#{url}")
    contents = file.read()

    match = contents.match(/Latest\sversion:\s(.*)</)
    match[1]
  end
end

使用puppet 3.6.2工作,但自4.5.2升级到Error: Facter: error while resolving custom fact "latest_packerversion": No such file or directory @ rb_sysopen - https://www.packer.io/downloads.html 后发生:

rb_sysopen

分析

  • 由于升级到Puppet 4,似乎由于某种原因(No such file or directory @ rb_sysopen)无法找到rb_sysopen
  • Puppet4似乎使用嵌入式ruby版本而不是主机上安装的版本(Puppet3):
  

following issue

问题

自升级到Puppet4以来,为什么自定义事实不再能找到ref

1 个答案:

答案 0 :(得分:0)

<强>简明

我将在这两个事实中加入require 'open-uri',但我不明白为什么在升级到Puppet4后需要这样做

<强>冗长

一旦require 'open-uri'包含在其中一个自定义事实中,问题就解决了。

# returns latest gitversion, e.g. 2.8.2
Facter.add("latest_gitversion") do
  setcode do
require 'open-uri'

    url="https://git-scm.com/downloads"

    file = open("#{url}")
    contents = file.read()

    match = contents.match(/RelNotes.*((\d\.){2}\d)/)
    match[1]
  end
end

一旦require 'open-uri'被注释掉,问题就会再次出现:

Error: Facter: error while resolving custom fact "latest_gitversion": No such file or directory @ rb_sysopen - https://git-scm.com/downloads
Error: Facter: error while resolving custom fact "latest_packerversion": No such file or directory @ rb_sysopen - https://www.packer.io/downloads.html

目前还不清楚导致问题的原因。