module Metadata

Mix-in with metadata handling routines for the CustomRuleLoader

Public Instance Methods

cfn_model_with_suppressed_resources_removed(cfn_model:, rule_id:, allow_suppression:, print_suppression:) click to toggle source
# File lib/cfn-nag/metadata.rb, line 20
def cfn_model_with_suppressed_resources_removed(cfn_model:,
                                                rule_id:,
                                                allow_suppression:,
                                                print_suppression:)
  return cfn_model unless allow_suppression

  cfn_model = cfn_model.copy

  cfn_model.resources.delete_if do |logical_resource_id, resource|
    rules_to_suppress = rules_to_suppress resource
    if rules_to_suppress.nil?
      false
    else
      suppress_resource?(rules_to_suppress, rule_id, logical_resource_id, print_suppression)
    end
  end
  cfn_model
end
validate_cfn_nag_metadata(cfn_model) click to toggle source

XXX given mangled_metadatas is never used or returned, STDERR emit can be moved to unless block

# File lib/cfn-nag/metadata.rb, line 10
def validate_cfn_nag_metadata(cfn_model)
  mangled_metadatas = collect_mangled_metadata(cfn_model)
  mangled_metadatas.each do |mangled_metadata|
    logical_resource_id = mangled_metadata.first
    mangled_rules = mangled_metadata[1]

    $stderr.puts "#{logical_resource_id} has missing cfn_nag suppression rule id: #{mangled_rules}"
  end
end

Private Instance Methods

collect_mangled_metadata(cfn_model) click to toggle source
# File lib/cfn-nag/metadata.rb, line 63
def collect_mangled_metadata(cfn_model)
  mangled_metadatas = []
  cfn_model.resources.each do |logical_resource_id, resource|
    resource_rules_to_suppress = rules_to_suppress resource
    next if resource_rules_to_suppress.nil?

    mangled_rules = resource_rules_to_suppress.select do |rule_to_suppress|
      rule_to_suppress['id'].nil?
    end
    unless mangled_rules.empty?
      mangled_metadatas << [logical_resource_id, mangled_rules]
    end
  end
  mangled_metadatas
end
rules_to_suppress(resource) click to toggle source
# File lib/cfn-nag/metadata.rb, line 54
def rules_to_suppress(resource)
  if resource.metadata &&
     resource.metadata['cfn_nag'] &&
     resource.metadata['cfn_nag']['rules_to_suppress']

    resource.metadata['cfn_nag']['rules_to_suppress']
  end
end
suppress_resource?(rules_to_suppress, rule_id, logical_resource_id, print_suppression) click to toggle source
# File lib/cfn-nag/metadata.rb, line 41
def suppress_resource?(rules_to_suppress, rule_id, logical_resource_id, print_suppression)
  found_suppression_rule = rules_to_suppress.find do |rule_to_suppress|
    next if rule_to_suppress['id'].nil?

    rule_to_suppress['id'] == rule_id
  end
  if found_suppression_rule && print_suppression
    message = "Suppressing #{rule_id} on #{logical_resource_id} for reason: #{found_suppression_rule['reason']}"
    $stderr.puts message
  end
  !found_suppression_rule.nil?
end