Opsworks Apache正在多层上进行设置

时间:2015-08-20 07:09:17

标签: chef aws-opsworks

AWS Opsworks Cookbooks Repositorymod_php5_apache2 cookbook内,您会在recipes/php.rb中找到以下内容(为清晰起见而被删除):

# setup Apache virtual host
node[:deploy].each do |application, deploy|
  include_recipe 'apache2::service'

  if deploy[:application_type] != 'php'
    Chef::Log.debug("Skipping mod_php5_apache2::php application #{application} as it is not an PHP app")
    next
  end

  web_app deploy[:application] do
    ...
  end
  ...
end

这将迭代所有 node[:deploy]中标记为PHP应用程序的应用程序,其中包括为HTTP和HTTPS创建apache2配置(vhost)。

这在运行 Setup 生命周期事件时出现问题,因为Opsworks(Chef运行)将尝试为node[:deploy]对象中的所有内容创建配置,即使这些配置没有&#39 ; t适用于当前正在执行的(设置)实例或图层。

我有一个可行的鸭子磁带解决方案:覆盖我自己的存储库中提供的php.rb,并在顶部添加自定义的应用程序到层映射字典。

map = {
  "phpapp1" => "layer1_php_application",
  "phpapp2" => "layer2_custom",
  "phpapp3" => "layer3_custom" 
}

# setup Apache virtual host
node[:deploy].each do |application, deploy|

  if node[:opsworks][:instance][:layers].include? map[application]
      ...
      include_recipe 'apache2::service'

        if deploy[:application_type] != 'php'
          Chef::Log.debug("Skipping mod_php5_apache2::php application #{application} as it is not an PHP app")
          next
        end

        web_app deploy[:application] do
          ...
        end
      ...
  end
end

但感觉真的很糟糕,因为我已将应用和图层名称直接捆绑到我的食谱中。

虽然conf文件在/etc/apache2/sites-available中存在问题,但在/var/srv//var/log/apache2中可以找到类似的不需要的文件......

解决此问题的最佳方法是:

  1. 将整本食谱投入到每一层?
  2. 或者,使用上面的自定义词典
  3. 节点对象上有什么东西我可以用作我错过的过滤器吗?谢谢!

0 个答案:

没有答案