Class: OsCtld::Commands::Container::SendCancel
- Includes:
- OsCtl::Lib::Utils::Log, OsCtl::Lib::Utils::Send, OsCtl::Lib::Utils::System
- Defined in:
- lib/osctld/commands/container/send_cancel.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
| 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 48 49 50 51 | # File 'lib/osctld/commands/container/send_cancel.rb', line 12 def execute ct = DB::Containers.find(opts[:id], opts[:pool]) error!('container not found') unless ct ct.exclusively do if !ct.send_log error!('invalid send sequence') elsif !ct.send_log.can_send_cancel?(opts[:force]) if opts[:force] error!('invalid send sequence') else error!('invalid send sequence, could cancel forcefully') end end if opts[:local].nil? || !opts[:local] ret = system( *send_ssh_cmd( ct.pool.send_receive_key_chain, ct.send_log.opts, ['receive', 'cancel', ct.send_log.token] ) ) if ret.nil? || ($?.exitstatus != 0 && !opts[:force]) error!('cancel failed') end end ct.each_dataset do |ds| ct.send_log.snapshots.each do |snap| zfs(:destroy, nil, "#{ds}@#{snap}") end end ct.close_send_log end ok end |