Chef上的Ruby代码作为“ruby_block”无法正常工作

时间:2013-11-08 08:49:32

标签: ruby chef

我对Ruby和Chef黑客有疑问。

我对Chef的知识非常有限,对Ruby编程语言的了解甚少,但是,我需要在Chef(chef-solo)上实现类似于“augeas”的东西(与Puppet一起工作,但在这里我需要一个解决方案厨师)。

我得到了下面的示例代码,但它不起作用,我现在试图弄清楚出了什么问题。

基本上我需要能够在文本文件中选择特定的字符串并修改这些值。我可以使用sed,但也许我可以使用Chef的ruby_block以更优雅的方式完成它。

请让我知道以下代码可能出现的问题。为什么我的/ etc / hosts没有使用新值更新?

总是当我重新开始大厨独奏时,我收到以下错误:

NoMethodError
-------------
undefined method `chef' for Chef::Resource::RubyBlock

感谢您的帮助。

关注我的default.rb文件:

ruby_block "edit etc hosts" do
  block do
    rc = Chef::Util::FileEdit.new("/etc/hosts")
    rc.search_file_replace_line(
      /^127\.0\.0\.1 localhost$/,
      "127.0.0.1 #{new_fqdn} #{new_hostname} localhost"
    )
    rc.write_file
  end
end

2 个答案:

答案 0 :(得分:1)

将此行添加为ruby块的第一行:

require 'chef/util/file_edit'

根据您的情况,您应该使用食谱hostsfile

hostsfile_entry '127.0.0.1' do
  hostname  new_hostname
  aliases   [new_fqdn]
  comment   'Append by Recipe X'
  action    :append
end

答案 1 :(得分:0)

让Augeas与Chef合作应该不会太难。 Augeas是一个C库,Puppet只使用它的Ruby绑定。您只需要在Chef中使用这些绑定。

这里有一个PoC Augeas资源提供者:https://github.com/craigtracey/augeas

注意:http://lists.opscode.com/sympa/arc/chef/2013-02/msg00337.html提到Augeas整合到Chef中,但显然参与者误解了Augeas,因为他们提到了幂等问题和增量。 Augeas的大多数用途都不会导致管理增量,而是希望的状态。