2017-12-05 26 views
0

多くの回答と解決された解決策がありますが、何も私のためにはうまくいかないことがわかります。私は何をしようとしていますか? /var/lib/tomcat8/conf/catalina.propertiesファイルにあります。シェフを使用してファイルを編集する

ここで私はこれまでに単純なルビーのやり方やシェフのユーティリティを試してきました。

File.open("/var/lib/tomcat8/conf/catalina.properties", "a+") do |f| 
    f << "\n" 
    f << "javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl" 
end 


ruby_block "insert_line" do 
    block do 
    file = Chef::Util::FileEdit.new("/var/lib/tomcat8/conf/catalina.properties") 
    file.insert_line_if_no_match("/javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl/", "javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl") 
    file.write_file 
    end 
end 



file '/var/lib/tomcat8/conf/catalina.properties' do 
    action :create 
    owner 'root' 
    group 'root' 
    content File.open("/var/lib/tomcat8/conf/catalina.properties", "a+") do |f| 
     f << "\n" 
     f << "javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl" 
    end 
end 



file '/var/lib/tomcat8/conf/catalina.properties' do 
    action :create 
    owner 'root' 
    group 'root' 
    content File.open("/var/lib/tomcat8/conf/catalina.properties", "a+") do |f| 
     f << "\n" 
     f << "javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl" 
    end 
end 

「テスト」を入れてみましたが、シェフがコードになっていないようです。

答えて

0

chef-clientは、ファイルが実行されるたびにファイルに含まれているかどうかにかかわらず、この論理を追加するため、このロジックには根本的な欠陥があります。私はシェフが本当にこのアプローチを好んでいるとは思わない。

ファイル全体をテンプレートとして管理しない場合は、この問題を防ぐために、条件付き/ガードが組み込まれているので、sous-chef/line-cookbookを使用する必要があります。

1

これをより安全に行う方法の例は、poise-filelineのCookbookを参照してください。

私たちは全体的に、(覚えているように)収束しないことが多い非常に脆いコードを作成するので、このアプローチはお勧めしません。より良い方法は、templateリソースを使用してファイル全体を収束的に制御することです。

関連する問題