2017-12-05 3 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 

puts "testing"을 넣으려고했는데 요리사가 코드에 익숙해 보이지 않는 것 같습니다.

답변

0

chef-client는 실행될 때마다 파일에 이미 있는지 여부에 관계없이 줄을 추가하므로이 논리에는 근본적인 결함이 있습니다. 나는 또한 요리사가 정말로이 접근법을 좋아한다고 생각하지 않는다.

전체 파일을 템플릿으로 관리하지 않으려면 sous-chef/line-cookbook에 조건/가드가 내장되어 있으므로이 문제를 방지해야합니다.

1

더 안전하게이 작업을 수행하는 방법에 대한 예는 poise-fileline 요리 책을 확인하십시오.

우리는 전반적으로 집중력이 떨어지는 매우 부서지기 쉬운 코드를 생성하므로이 방법을 사용하지 않는 것이 좋습니다. 더 좋은 방법은 template 리소스를 사용하여 전체 파일을 수렴 방식으로 제어하는 ​​것입니다.

관련 문제