class Inspec::Deprecation::ConfigFile
def initialize(io = nil)
def initialize(io = nil) io ||= open_default_config_io begin @raw_data = JSON.parse(io.read) rescue JSON::ParserError => e raise Inspec::Deprecation::MalformedConfigFileError, "Could not parse deprecation config file: #{e.message}" end @groups = {} @unknown_group_action = :warn validate! silence_deprecations_from_cli end
def open_default_config_io
def open_default_config_io default_path = File.join(Inspec.src_root, "etc", "deprecations.json") unless File.exist?(default_path) raise Inspec::Deprecation::MalformedConfigError, "Missing deprecation config file: #{default_path}" end File.open(default_path) end
def silence_deprecations_from_cli
def silence_deprecations_from_cli # Read --silence-deprecations CLI option cfg = Inspec::Config.cached return unless cfg[:silence_deprecations] groups_to_silence = cfg[:silence_deprecations] silence_all = groups_to_silence.include?("all") groups.each do |group_name, group| # Only silence things that warn. Don't silence things that exit; # those harsher measures are usually protecting removed code and ignoring # and continuing regardless would be perilous and lead to errors. if %i{warn fail_control}.include?(group.action) && (silence_all || groups_to_silence.include?(group_name.to_s)) group.action = :ignore end end end
def validate!
Validation
====================================================================================================#
def validate! validate_file_version validate_unknown_group_action unless @raw_data.key?("groups") raise Inspec::Deprecation::InvalidConfigFileError, "Missing groups field" end unless @raw_data["groups"].is_a?(Hash) raise Inspec::Deprecation::InvalidConfigFileError, "Groups field must be a Hash" end @raw_data["groups"].each do |group_name, group_info| validate_group_entry(group_name, group_info) end end
def validate_file_version
def validate_file_version unless @raw_data.key?("file_version") raise Inspec::Deprecation::InvalidConfigFileError, "Missing file_version field" end unless @raw_data["file_version"] == "1.0.0" raise Inspec::Deprecation::InvalidConfigFileError, "Unrecognized file_version '#{@raw_data["file_version"]}' - supported versions: 1.0.0" end end
def validate_group_entry(name, opts)
def validate_group_entry(name, opts) opts.each do |seen_field, _value| unless VALID_GROUP_FIELDS.include?(seen_field) raise Inspec::Deprecation::InvalidConfigFileError, "Unrecognized field for group '#{name}' - saw '#{seen_field}', supported fields: #{VALID_GROUP_FIELDS.map(&:to_s).join(", ")}" end end entry = GroupEntry.new(name.to_sym) opts["action"] = (opts["action"] || :warn).to_sym unless VALID_ACTIONS.include?(opts["action"]) raise Inspec::Deprecation::UnrecognizedActionError, "Unrecognized action for group '#{name}' - saw '#{opts["action"]}', supported actions: #{VALID_ACTIONS.map(&:to_s).join(", ")}" end entry.action = opts["action"] entry.suffix = opts["suffix"] entry.prefix = opts["prefix"] entry.exit_status = opts["exit_status"] groups[name.to_sym] = entry end
def validate_unknown_group_action
def validate_unknown_group_action seen_action = (@raw_data["unknown_group_action"] || @unknown_group_action).to_sym unless VALID_ACTIONS.include?(seen_action) raise Inspec::Deprecation::UnrecognizedActionError, "Unrecognized value '#{seen_action}' for field 'unknown_group_action' - supported actions: #{VALID_ACTIONS.map(&:to_s).join(", ")}" end @unknown_group_action = seen_action end