class HAProxy::Renderer
Responsible for rendering an HAProxy::Config
instance to a string.
Attributes
config[RW]
source_tree[RW]
Public Class Methods
new(config, source_tree)
click to toggle source
# File lib/haproxy/renderer.rb, line 8 def initialize(config, source_tree) self.config = config self.source_tree = source_tree @server_list = {} @config_list = {} @context = self.config @prev_context = self.config @config_text = "".dup end
Public Instance Methods
render()
click to toggle source
# File lib/haproxy/renderer.rb, line 18 def render render_node(source_tree) handle_context_change @config_text end
render_node(node)
click to toggle source
# File lib/haproxy/renderer.rb, line 24 def render_node(node) node.elements.each do |e| update_render_context(e) handle_context_change if context_changed? if e.class == HAProxy::Treetop::ServerLine # Keep track of the servers that we've seen, so that we can detect and render new ones. @server_list[e.name] = e # Don't render the server element if it's been deleted from the config. next if @context.servers[e.name].nil? end if (e.class == HAProxy::Treetop::ConfigLine) && (@context.class == HAProxy::Default) # Keep track of the configs in this config block we've seen, so that # we can detect and render new ones. @config_list[e.key] = e # Don't render the config *if* it's been removed from the config block. next unless @context.config.key?(e.key) end if e.class == HAProxy::Treetop::ServerLine # Use a custom rendering method for servers, since we allow them to be # added/removed/changed. render_server_element(e) elsif (e.class == HAProxy::Treetop::ConfigLine) && (@context.class == HAProxy::Default) # Use a custom rendering method for configs, since we allow them to be # added/removed/changed. render_config_line_element(e) elsif e.elements && e.elements.size > 0 render_node(e) else @config_text << e.text_value end end @config_text end
Protected Instance Methods
context_changed?()
click to toggle source
# File lib/haproxy/renderer.rb, line 64 def context_changed? @context != @prev_context end
handle_context_change()
click to toggle source
# File lib/haproxy/renderer.rb, line 91 def handle_context_change if [HAProxy::Default].include?(@prev_context.class) # Render any configs which were added new_configs = @prev_context.config.keys - @config_list.keys new_configs.each do |config_name| config_value = @prev_context.config[config_name] render_config_line(config_name, config_value) end end if [HAProxy::Listener, HAProxy::Backend].include?(@prev_context.class) # Render any servers that were added new_servers = @prev_context.servers.keys - @server_list.keys new_servers.each do |server_name| server = @prev_context.servers[server_name] render_server(server) end end @server_list = {} end
render_config_line(key, value)
click to toggle source
# File lib/haproxy/renderer.rb, line 75 def render_config_line(key, value) content = "#{key} #{value}".strip @config_text << "\t#{content}\n" end
render_config_line_element(e)
click to toggle source
# File lib/haproxy/renderer.rb, line 68 def render_config_line_element(e) config_key = e.key.gsub(/\s+/, " ") config_value = @context.config[e.key] config_value = config_value.gsub(/\s+/, " ") unless config_value.nil? render_config_line(config_key, config_value) end
render_server(server)
click to toggle source
# File lib/haproxy/renderer.rb, line 85 def render_server(server) attribute_string = render_server_attributes(server.attributes) content = "server #{server.name} #{server.host}:#{server.port} #{attribute_string}".strip @config_text << "\t#{content}\n" end
render_server_attributes(attributes)
click to toggle source
# File lib/haproxy/renderer.rb, line 114 def render_server_attributes(attributes) attribute_string = "".dup attributes.each do |name, value| attribute_string << name.to_s attribute_string << " " if value && value != true attribute_string << value.to_s attribute_string << " " end end attribute_string end
render_server_element(e)
click to toggle source
# File lib/haproxy/renderer.rb, line 80 def render_server_element(e) server = @context.servers[e.name] render_server(server) end
update_render_context(e)
click to toggle source
# File lib/haproxy/renderer.rb, line 127 def update_render_context(e) @prev_context = @context case e.class.name when "HAProxy::Treetop::GlobalSection" @context = @config.global when "HAProxy::Treetop::DefaultsSection" section_name = e.defaults_header.proxy_name ? e.defaults_header.proxy_name.content : nil @context = @config.default(section_name) when "HAProxy::Treetop::ListenSection" section_name = e.listen_header.proxy_name ? e.listen_header.proxy_name.content : nil @context = @config.listener(section_name) when "HAProxy::Treetop::FrontendSection" section_name = e.frontend_header.proxy_name ? e.frontend_header.proxy_name.content : nil @context = @config.frontend(section_name) when "HAProxy::Treetop::BackendSection" section_name = e.backend_header.proxy_name ? e.backend_header.proxy_name.content : nil @context = @config.backend(section_name) else @context = @prev_context end end