Class: Hiera::Backend::Eyaml::Actions::EditAction

Inherits:
Object
  • Object
show all
Defined in:
lib/hiera/backend/eyaml/actions/edit_action.rb

Class Method Summary collapse

Class Method Details

.executeObject

Raises:

  • (StandardError)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/hiera/backend/eyaml/actions/edit_action.rb', line 13

def self.execute 
  
  decrypted_input = DecryptAction.execute 
  decrypted_file = Utils.write_tempfile decrypted_input
  editor = Utils.find_editor
  system editor, decrypted_file
  status = $?
  raise StandardError, "Editor #{editor} has not exited?" unless status.exited?
  raise StandardError, "Editor did not exit successfully (exit code #{status.exitstatus}), aborting" unless status.exitstatus  #TODO: The file is left on the disk
  raise StandardError, "File was moved by editor" unless File.file? decrypted_file

  edited_file = File.read decrypted_file
  Utils.secure_file_delete :file => decrypted_file, :num_bytes => [edited_file.length, decrypted_input.length].max
  raise StandardError, "Edited file is blank" if edited_file.empty?
  raise StandardError, "No changes" if edited_file == decrypted_input

  Eyaml::Options[:input_data] = edited_file
  Eyaml::Options[:output] = "raw"

  encrypted_output = EncryptAction.execute

  filename = Eyaml::Options[:eyaml]
  File.open("#{filename}", 'w') { |file| 
    file.write encrypted_output
  }

  true
end