在Chef中配置Apache(http.conf)

时间:2017-08-28 11:59:17

标签: apache automation chef

我在使用Chef时已经相当新了:我需要在CentOS 7上配置我的Apache 所以我创建了一个名为post_inst_config.rb的小食谱,我以这种方式放入我的厨师运行列表......

"recipe[mapserver_install::inst_apache2]",
"recipe[mapserver_install::post_inst_config]"

这是你的post_inst_config.rb

#Add to /etc/httpd/conf/httpd.conf the string: ScriptAlias /cgi-bin/ /var/www/cgi-bin/
File.open("/etc/httpd/conf/httpd.conf", 'a') do |file|
  file.write "ScriptAlias /cgi-bin/ /var/www/cgi-bin/"
  file.write "\n"
end

#Define the following symblink: ln -s /usr/bin/mapserv /var/www/cgi-bin/mapserv
link '/usr/bin/mapserv' do
  to '/var/www/cgi-bin/mapserv'
end

#Create the directory for the imagepath ...
directory '/var/www/html/output' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

#Restart apache  ....
service "httpd" do
  action :restart
end

当我尝试执行我的厨师食谱时,我得到了这个错误......

  ================================================================================
  Recipe Compile Error in /var/chef/cache/cookbooks/mapserver_install/recipes/post_inst_config.rb
  ================================================================================

  Errno::ENOENT
  -------------
  No such file or directory @ rb_sysopen - /etc/httpd/conf/httpd.conf

请注意,如果我尝试在没有安装post_inst_config.rb Apache的情况下执行我的运行列表并且工作正常。

建议表示赞赏......

1 个答案:

答案 0 :(得分:1)

这是一个两遍问题,请参阅https://coderanger.net/two-pass/了解详情,但基本上事情并没有按照您认为的顺序发生。将该代码移动到ruby_block资源(但请注意,您不会检查该行是否已经存在,因此每次运行时都会重新添加它)或者我们会像poise-file食谱那样或line食谱,其中包含用于修改文件的资源。我们真的不推荐这种修改文件的方式,使用template资源一次控制整个文件内容要容易得多,也更安全。