Class: OsCtld::Commands::Container::LocalTransfer::Config
- Defined in:
- lib/osctld/commands/container/local_transfer/config.rb
Direct Known Subclasses
Instance Attribute Summary
Attributes inherited from Base
#client, #client_handler, #id, #opts
Instance Method Summary collapse
- #create_target_datasets(builder, dataset_map) ⇒ Object protected
- #execute(ct) ⇒ Object
- #resolve_target_pool(ct) ⇒ Object protected
- #resolve_target_user_group(ct, target_pool) ⇒ Object protected
Methods inherited from Base
#build_dataset_map, #cleanup_target_container!, #clear_failed_state_snapshot, #complete_target!, #destroy_local_transfer_snapshots, #ensure_target_staged_or_complete!, #find, #force_writeout, #operation, #require_local_transfer_log!, #snapshot_datasets, #snapshot_name, #start_target!, #target_ct, #target_pool, #transfer_dataset, #validate_dataset_layout!
Methods inherited from Logged
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
#create_target_datasets(builder, dataset_map) ⇒ Object (protected)
92 93 94 95 96 97 98 99 |
# File 'lib/osctld/commands/container/local_transfer/config.rb', line 92 def create_target_datasets(builder, dataset_map) dataset_map.each do |pair| builder.create_dataset( OsCtl::Lib::Zfs::Dataset.new(pair.target, base: builder.ctrc.dataset.name), mapping: builder.ctrc.map_mode == 'zfs' ) end end |
#execute(ct) ⇒ Object
5 6 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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/osctld/commands/container/local_transfer/config.rb', line 5 def execute(ct) target_pool = resolve_target_pool(ct) target_user, target_group = resolve_target_user_group(ct, target_pool) if DB::Containers.contains?(opts[:target_id], target_pool) error!("container #{target_pool.name}:#{opts[:target_id]} already exists") end new_ct = ct.exclusively do if ct.transfer_in_progress? error!('this container already has a transfer in progress') end ct.dup( opts[:target_id], pool: target_pool, user: target_user, group: target_group, dataset: opts[:target_dataset], network_interfaces: opts[:network_interfaces] ) end builder = Container::Builder.new(new_ct.new_run_conf, cmd: self) error!(builder.errors.join('; ')) unless builder.valid? manipulate([ct, new_ct]) do unless builder.register error!("container #{new_ct.pool.name}:#{new_ct.id} already exists") end begin dataset_map = build_dataset_map(ct, new_ct) create_target_datasets(builder, dataset_map) new_ct.save_config builder.setup_ct_dir builder.setup_lxc_home builder.setup_lxc_configs builder.setup_log_file builder.setup_user_hook_script_dir builder.monitor ct.open_local_transfer_log( :source, operation:, target_pool: new_ct.pool.name, target_id: new_ct.id, target_dataset: new_ct.dataset.name, target_dataset_custom: !opts[:target_dataset].nil?, target_user: new_ct.user.name, target_group: new_ct.group.name, network_interfaces: opts[:network_interfaces], datasets: dataset_map ) rescue StandardError progress('Error occurred, cleaning up') builder.cleanup(dataset: !opts[:target_dataset]) raise end end call_cmd!(Commands::User::LxcUsernet) if opts[:network_interfaces] ok end |
#resolve_target_pool(ct) ⇒ Object (protected)
73 74 75 76 77 78 |
# File 'lib/osctld/commands/container/local_transfer/config.rb', line 73 def resolve_target_pool(ct) target_pool = opts[:target_pool] ? DB::Pools.find(opts[:target_pool]) : ct.pool error!('pool not found') unless target_pool target_pool end |
#resolve_target_user_group(ct, target_pool) ⇒ Object (protected)
80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/osctld/commands/container/local_transfer/config.rb', line 80 def resolve_target_user_group(ct, target_pool) return [nil, nil] if target_pool == ct.pool target_user = DB::Users.find(opts[:target_user] || ct.user.name, target_pool) error!('target user not found') unless target_user target_group = DB::Groups.find(opts[:target_group] || ct.group.name, target_pool) error!('target group not found') unless target_group [target_user, target_group] end |