3

我有一个关于 Ruby 和 Chef 黑客的问题。

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

我得到了下面的示例代码,但它不起作用,我现在花了几天时间试图找出问题所在。

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

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

当我重新运行 chef-solo 时,总是出现以下错误:

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
4

2 回答 2

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
于 2013-11-08T09:44:39.987 回答
0

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

这里有一个用于 Chef 的 PoC Augeas 资源提供程序:https ://github.com/craigtracey/augeas 。

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

于 2013-11-23T21:54:25.503 回答