web-dev-qa-db-ja.com

Chefでファイルを変更するにはどうすればよいですか?

7つのファイルと1つの戦争があります。値を展開するときに値を変更する必要があります。私はこれを持っています:

##usuario
#alfresco.user=*****
alfresco.user=********
##pass 
#alfresco.password= sfsfs
alfresco.password=sfgsf

alfresco.rutaAnexos=/gthtfdh/dfgdf/cm:

#atributo.type.anexo=ANEXO_INFO_OBJETO
atributo.type.anexo=AN
atributo.type.observaciones=OBSERVACIONES

いくつかの行をコメントし、他の行のコメントを解除する必要があります。次に、7つのテンプレートを作成し、環境に応じて変数を配置し、レシピにファイルを作成する必要があります。

これどうやってするの?

シェフは実際にこれを許可して使用しています。あなたはopscodeので例を見つけることができます

cookbooks/chef-server/recipes/default.rb

Ruby_block "ensure node can resolve API FQDN" do
  block do
    fe = Chef::Util::FileEdit.new("/etc/hosts")
    fe.insert_line_if_no_match(/#{node['chef-server']['api_fqdn']}/,
                               "127.0.0.1 #{node['chef-server']['api_fqdn']}")
    fe.write_file
  end
  not_if { Resolv.getaddress(node['chef-server']['api_fqdn']) rescue false }
end

これがユースケースです。ソースからのインストール後、ソフトウェアのすべてのバージョンで同じではない作成された構成ファイルの行のコメントを外す必要があったため、テンプレートの使用は適切ではありませんでした。私が使用した方法は次のとおりです。

  • (オブジェクト)search_file_replace(regex、replace)
  • (オブジェクト)search_file_replace_line(regex、newline)

完全なドキュメントは次の場所にあります。

ストレスに:このメソッドは、テンプレートとパーシャルの使用が不適切な場合にのみ使用されます。 @StephenKingが既に言ったように、テンプレートはこれを行う一般的な方法です。

78
Konzulic

以下に、Chefを使用して構成ファイルの行のコメントを解除する方法の例を示します。 Ruby_block::File::grepで保護されています。 Debianのテストはただの楽しみのためです。

pam_config = "/etc/pam.d/su"
commented_limits = /^#\s+(session\s+\w+\s+pam_limits\.so)\b/m

Ruby_block "add pam_limits to su" do
  block do
    sed = Chef::Util::FileEdit.new(pam_config)
    sed.search_file_replace(commented_limits, '\1')
    sed.write_file
  end
  only_if { ::File.readlines(pam_config).grep(commented_limits).any? }
end if platform_family?('debian')
17
Stuart Pook