Class: Chef::Knife

Inherits:
Object
  • Object
show all
Defined in:
lib/chef/knife/scribe_copy.rb,
lib/chef/knife/scribe_hire.rb,
lib/chef/knife/scribe_adjust.rb

Direct Known Subclasses

ScribeAdjust, ScribeCopy, ScribeHire

Defined Under Namespace

Classes: ScribeAdjust, ScribeCopy, ScribeHire

Instance Method Summary collapse

Instance Method Details

#deep_delete(delete_from, delete_spec) ⇒ Object Also known as: action_delete



308
309
310
# File 'lib/chef/knife/scribe_adjust.rb', line 308

def deep_delete(delete_from, delete_spec)
  deep_delete!(delete_from.dup, delete_spec.dup)
end

#deep_delete!(delete_from, delete_spec) ⇒ Object



314
315
316
317
318
319
320
321
322
323
324
325
# File 'lib/chef/knife/scribe_adjust.rb', line 314

def deep_delete!(delete_from, delete_spec)
  if delete_from.kind_of?(Hash) || delete_from.kind_of?(Array)
    if delete_spec.kind_of?(Array)
      delete_spec.each { |item| deep_delete!(delete_from, item) }
    elsif delete_spec.kind_of?(Hash)
      delete_spec.each { |key,item| deep_delete!(delete_from[key], item) }
    else
      delete_from.kind_of?(Array) ? delete_from.delete_at(delete_spec) : delete_from.delete(delete_spec)
    end
  end
  delete_from
end

#diffObject



327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
# File 'lib/chef/knife/scribe_adjust.rb', line 327

def diff
  original_file = Tempfile.new("original")
  adjusted_file = Tempfile.new("adjusted")
  begin
    changes.each do |key, change|
      ui.info("[#{key}]")
      original_file.write(JSON.pretty_generate(change["original"]))
      adjusted_file.write(JSON.pretty_generate(change["adjusted"]))
      original_file.rewind
      adjusted_file.rewind
      diff_output = shell_out("diff -L original -L adjusted -u #{original_file.path} #{adjusted_file.path}")
      ui.info(diff_output.stdout)
    end
  ensure
    original_file.close
    original_file.unlink
    adjusted_file.close
    adjusted_file.unlink
  end
end