Project

General

Profile

Download (1.92 KB) Statistics
| Branch: | Tag: | Revision:
class HostBuildStatus
attr_reader :host, :state, :errors
delegate :available_template_kinds, :smart_proxies, :to => :host
VALIDATION_TYPES = [:host, :templates, :proxies]

def initialize(host)
@host = host
@errors = {}
@state = true # default to true state
VALIDATION_TYPES.each {|type| @errors[type] = []}
end

def check_all_statuses
host_status
templates_status
smart_proxies_status
end

private

def host_status
return if host.valid?
host.errors.full_messages.each do |error|
fail!(:host, error.to_s, host.to_label)
end
rescue => error
fail!(:host, _('Failed to validate %{host}: %{error}') % {:host => host, :error => error.to_s}, host.to_label)
end

def templates_status
fail!(:templates, _('No templates found for this host.')) if available_template_kinds.empty?

available_template_kinds.each do |template|
begin
valid_template = host.render_template(template.template)
fail!(:templates, _('Template %s is empty.') % template.name, template.name) if valid_template.blank?
rescue => exception
fail!(:templates, _('Failure parsing %{template}: %{error}.') % {:template => template.name, :error => exception}, template.name)
end
end
end

def smart_proxies_status
fail!(:proxies, _('No smart proxies found.')) if smart_proxies.empty?

smart_proxies.each do |proxy|
begin
errors = proxy.refresh.messages.any?
errors = errors.is_a?(Array) ? errors.to_sentence : errors
fail!(:proxies, _('Failure deploying via smart proxy %{proxy}: %{error}.') % {:proxy => proxy, :error => errors}, proxy.id) if errors
rescue => error
fail!(:proxies, _('Error connecting to %{proxy}: %{error}.') % {:proxy => proxy, :error => error}, proxy.id)
end
end
end

def fail!(type, message, id = nil)
@state = false
@errors[type] << {:message => message, :edit_id => id}
end
end
(6-6/20)