3

Ruby と Chef のハッカーに質問があります。

私はChefの知識が非常に限られており、Rubyプログラミング言語についてはさらに少ないですが、「augeas」に似たものをChef(chef-solo)に実装する必要があります(Puppetで動作しますが、ここではChefのソリューションが必要です)。

以下のサンプルコードを入手しましたが、機能していません。現在、何が問題なのかを把握しようと数日間取り組んでいます。

基本的に、テキスト ファイル内の特定の文字列を選択し、これらの値を変更できる必要があります。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
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 に答える