class SousVide::Outputs::JsonFile

Saves the report to a JSON file. The file will be saved to chef cache directory.

Default file name is “sous-vide-report.json”.

@example

SousVide::Outputs::JsonFile.new

Public Class Methods

new(logger: nil, file_name: "sous-vide-report.json") click to toggle source
# File lib/sous_vide/outputs/json_file.rb, line 11
def initialize(logger: nil, file_name: "sous-vide-report.json")
  @logger = logger
  @file_name = file_name
end

Public Instance Methods

call(run_data:, node_data:, resources_data:) click to toggle source

Saves report to file.

# File lib/sous_vide/outputs/json_file.rb, line 17
def call(run_data:, node_data:, resources_data:)
  log "=============== #{self.class.name} ==============="
  log ""
  log "Processing #{resources_data.size} resources."

  json_data = resources_data.map do |tracked|
    tracked.to_h.merge(node_data).merge(run_data)
  end

  ::Chef::FileCache.store(@file_name, ::Chef::JSONCompat.to_json_pretty(json_data))

  log "The report is in #{Chef::Config[:file_cache_path]}/#{@file_name} file."
  log ""
end

Private Instance Methods

log(*args) click to toggle source
# File lib/sous_vide/outputs/json_file.rb, line 34
def log(*args)
  message = args.compact.join(" ")
  logger.info(message)
end
logger() click to toggle source
# File lib/sous_vide/outputs/json_file.rb, line 39
def logger
  @logger ||= ::Chef::Log
end