Class: OsCtld::Commands::Container::Cat
- Defined in:
- lib/osctld/commands/container/cat.rb
Instance Attribute Summary
Attributes inherited from Base
#client, #client_handler, #id, #opts
Instance Method Summary collapse
Methods inherited from Base
#base_execute, #call_cmd, #call_cmd!, #error, #error!, handle, #handled, #indirect?, #initialize, #manipulate, #manipulation_holder, #ok, #progress, #request_stop, run, run!
Constructor Details
This class inherits a constructor from OsCtld::Commands::Base
Instance Method Details
#execute ⇒ Object
7 8 9 10 11 12 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 41 42 43 44 45 46 47 |
# File 'lib/osctld/commands/container/cat.rb', line 7 def execute ct = DB::Containers.find(opts[:id], opts[:pool]) error!('container not found') unless ct error!('container not running') if !ct.running? || ct.init_pid.nil? # Ensure the container is mounted ct.mount client.send("#{{ status: true, response: 'continue' }.to_json}\n", 0) out_w = client.recv_io errors = ContainerControl::Commands::WithMountns.run!( ct, ns_pid: ct.init_pid, # Passing out_w as stdout will keep the file descriptor open # on fork. It will however not be set as $stdout as WithMountns # does not handle it, the write therefore still goes to out_w. stdout: out_w, block: proc do ret = {} opts[:files].each do |file| File.open(file) do |io| ::IO.copy_stream(io, out_w) end rescue SystemCallError => e ret[file] = e. end ret end ) out_w.close ok(errors:) rescue ContainerControl::Error => e error(e.) end |