module GClouder::Resources::Validate::Remote
Public Class Methods
instances(local, remote, skip_keys: [])
click to toggle source
# File lib/gclouder/resources/validate/remote.rb, line 11 def self.instances(local, remote, skip_keys: []) remote.each do |region, resources| info region, heading: true, indent: 2 resources.each do |resource| #FIXME: This won't work with duplicate names local_config = local.fetch(region, []).select {|s| s["name"] == resource["name"] }.first failure = false next unless local_config info resource["name"], indent: 3, heading: true local_config.each do |key, value| skipped = false skip_message = nil # FIXME: we should recurse down into the data structure and check the values.. if value.is_a?(Hash) || value.is_a?(Array) skip_message ||= "(can't validate complex object)" skipped = true end if skip_keys.include?(key) skip_message ||= "(skip_keys in resource definition)" skipped = true else if !resource.key?(key) bad "#{key} (missing key)", indent: 4 failure = true next end if value != resource[key] bad "#{key} (\"#{value.to_s.truncate(30)}\" != \"#{resource[key].to_s.truncate(30)}\")", indent: 4 failure = true next end end message = "#{key}" " (#{value.to_s.truncate(60)})" message += " [skipped]" if skipped message += " #{skip_message}" if skip_message good message, indent: 4 end next unless failure info info "local config:" pp local_config.sort.to_h info info "remote config:" pp resource.sort.to_h info fatal "error: immutable remote resource differs from local definition for resource: #{region}/#{resource["name"]}" end end end