1

以下自定义事实

# 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某种原因再也找不到了(No such file or directory @ rb_sysopen自从升级到 Puppet 4 以来
  • Puppet4 似乎使用嵌入式 ruby​​ 版本,而不是安装在主机上的版本(Puppet3):

Puppet 4,Facter 2.4 和 CFacter 0.4,最新的 Hiera 和 Mcollective,以及 Ruby 2.1.5、OpenSSL 1.0.0r 和我们的 gem 依赖项。

  • Ruby 2.1.5 中不rb_sysopen存在?没有找到任何证据。
  • 也许发生了与事实相关的变化,可能导致问题?在发行说明中没有发现任何相关内容。

问题

为什么rb_sysopen升级到 Puppet4 后,自定义事实再也找不到了?

4

1 回答 1

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

目前还不清楚是什么导致了这个问题。

于 2016-06-29T19:50:24.130 回答