diff --git a/cookbooks/fb_apache/libraries/default.rb b/cookbooks/fb_apache/libraries/default.rb index 40b4a26f3..5a7b70534 100644 --- a/cookbooks/fb_apache/libraries/default.rb +++ b/cookbooks/fb_apache/libraries/default.rb @@ -28,37 +28,55 @@ def self.indentstr(indent) ' ' * indent end - # Map a hash to a apache-style syntax - def self.template_hash_handler(buf, indent, kw, data) - if HANDLERS.keys.include?(kw) - self.send(HANDLERS[kw], buf, indent, kw, data) - return - end - buf << indentstr(indent) - buf << "<#{kw}>\n" - data.each do |key, val| + def self.render_apache_conf(buf, depth, config) + config.each do |kw, val| + if HANDLERS.keys.include?(kw) + self.send(HANDLERS[kw], buf, depth, val) + next + end + + indent = indentstr(depth) + case val - when String - buf << indentstr(indent + 1) - buf << "#{key} #{val}\n" + when String, Integer + buf << indent + buf << "#{kw} #{val}\n" + + when Array + val.each do |entry| + buf << indent + buf << "#{kw} #{entry}\n" + end + when Hash - template_hash_handler(buf, indent + 1, key, val) + buf << indent + buf << "<#{kw}>\n" + + render_apache_conf(buf, depth + 1, val) + + buf << indent + buf << "\n" + + else + fail "fb_apache: bad type for value of #{kw}: #{val.class}" end end - buf << indentstr(indent) - buf << "\n" end # Helper for rewrite syntax - def self.template_rewrite_helper(buf, _indent, _key, rules) + def self.template_rewrite_helper(buf, depth, rules) + indent = indentstr(depth) + rules.each do |name, ruleset| - buf << indentstr(1) + buf << indent buf << "# #{name}\n" + ruleset['conditions']&.each do |cond| - buf << indentstr(1) + buf << indent buf << "RewriteCond #{cond}\n" end - buf << indentstr(1) + + buf << indent buf << "RewriteRule #{ruleset['rule']}\n\n" end end diff --git a/cookbooks/fb_apache/templates/default/apache_conf.erb b/cookbooks/fb_apache/templates/default/apache_conf.erb deleted file mode 100644 index 0625351ca..000000000 --- a/cookbooks/fb_apache/templates/default/apache_conf.erb +++ /dev/null @@ -1,14 +0,0 @@ -<% @conf.each do |keyword, data| %> -<% if data.is_a?(String) || data.is_a?(Fixnum) %> - <%= keyword %> <%= data %> -<% elsif data.is_a?(Array) %> -<% data.each do |entry| %> - <%= keyword %> <%= entry %> -<% end %> -<% elsif data.is_a?(Hash) %> -<% FB::Apache.template_hash_handler(_buf, 1, keyword, data) %> -<% else %> -<% fail "fb_apache: bad type for value of #{keyword}: #{data.class}" %> -<% end %> -<% end %> - diff --git a/cookbooks/fb_apache/templates/default/fb_apache.conf.erb b/cookbooks/fb_apache/templates/default/fb_apache.conf.erb index b77d1a4ca..a02fd34de 100644 --- a/cookbooks/fb_apache/templates/default/fb_apache.conf.erb +++ b/cookbooks/fb_apache/templates/default/fb_apache.conf.erb @@ -3,5 +3,4 @@ <%= render 'apache_modules.erb' %> <% end %> -<%= render 'apache_conf.erb', - :variables => {:conf => node['fb_apache']['extra_configs']} %> +<% FB::Apache.render_apache_conf(_buf, 0, node['fb_apache']['extra_configs']) %> diff --git a/cookbooks/fb_apache/templates/default/fb_sites.conf.erb b/cookbooks/fb_apache/templates/default/fb_sites.conf.erb index 6c5abba0a..26e56c3ee 100644 --- a/cookbooks/fb_apache/templates/default/fb_sites.conf.erb +++ b/cookbooks/fb_apache/templates/default/fb_sites.conf.erb @@ -3,7 +3,7 @@ <% realvhost = conf['_virtualhost'] || vhost %> > <% conf.reject! { |x, y| x == '_virtualhost' } %> -<%= render 'apache_conf.erb', :variables => {:conf => conf} %> +<% FB::Apache.render_apache_conf(_buf, 1, conf) %> <% end %>