zfs_mgmt 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14fbd30f0a3d93dff6442c011b7a613b9639fd5855a9efd635b3b9b14fa336c7
4
- data.tar.gz: 826699e0d0bca72bf87a779a87b14b9bcc01dffe34596eff471264b07b683d62
3
+ metadata.gz: 558d14c8bb3e9617b2d355308c85cd1da639035fb67662409a6445e1769c6e55
4
+ data.tar.gz: ef0acb4c148281bb81e0df51f08efa9c2ab87302a14c3700cce3214e9ab9e515
5
5
  SHA512:
6
- metadata.gz: fbe275a0b964b664d08346def641abff1c63467e70edb47b60accbd519a3e2df0bf81f2e000f09b28c7cf4db2cd71aa67580c8b570ffc5171835f818b3783d3c
7
- data.tar.gz: 4b326c73524719f3e103781532228d40fe09f0ebada718701d444d6296dfa5e310e2bd2a4035ad8cb6b08791ff5c8ddf7d0a1ecb6102d305957af853683ba356
6
+ metadata.gz: 84f9fa0ba043d4c7a8e4b4625642bd5c14260591438da6851ecf6704a7747baedd4f1e397c3d55a648e55e6588c5bd6efd31e56a243a918bb9cb40de5db26c14
7
+ data.tar.gz: 1d77d1167f829dfa24236c3bdbda28093b15c5f325a55c02c26f9cd8eba7e9d73d1e2db3d8e68c6d9370ecc5e70ec676f2dba9682ab4a05d80bce273572f6206
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zfs_mgmt (0.4.3)
4
+ zfs_mgmt (0.4.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/lib/zfs_mgmt.rb CHANGED
@@ -238,7 +238,7 @@ module ZfsMgmt
238
238
  }
239
239
  return saved,saved_snaps,deleteme
240
240
  end
241
- def self.zfs_managed_list(filter: '.+', properties: ['all'], property_match: { 'zfsmgmt:manage' => 'true' } )
241
+ def self.zfs_managed_list(filter: '.+', properties: ['all'], property_match: { 'zfsmgmt:manage' => method(:prop_on?) } )
242
242
  zfss = [] # array of arrays
243
243
  zfsget(properties: properties).each do |zfs,props|
244
244
  unless /#{filter}/ =~ zfs
@@ -246,7 +246,7 @@ module ZfsMgmt
246
246
  end
247
247
  managed = true
248
248
  property_match.each do |k,v|
249
- unless props.has_key?(k) and props[k] == v
249
+ unless key_comp?(props,k,v)
250
250
  managed = false
251
251
  break
252
252
  end
@@ -422,8 +422,8 @@ module ZfsMgmt
422
422
  com = []
423
423
  source = sorted[0]
424
424
  if options[:initial_snapshot] == 'newest' or
425
- ( options.has_key?('replicate') and options['replicate'] == true ) or
426
- ( props.has_key?('zfsmgmt:send_replicate') and props['zfsmgmt:send_replicate'] == 'true' )
425
+ key_comp?(options, 'replicate') or
426
+ key_comp?(props, 'zfsmgmt:send_replcate')
427
427
  source = sorted[-1]
428
428
  end
429
429
  com += zfs_send_com(options,
@@ -445,7 +445,7 @@ module ZfsMgmt
445
445
  # should be resumable!
446
446
  com = [ ]
447
447
  com.push( ZfsMgmt.global_options[:zfs_binary], 'send', '-t', remote_zfs_state )
448
- com.push('-v','-P') if options[:verbose] and options[:verbose] == 'send'
448
+ com.push('-v','-P') if key_comp?(options, 'verbose', 'send')
449
449
  com.push('|')
450
450
  e = zfs_send_estimate(com) if options[:verbose] == 'pv'
451
451
  com += mbuffer_command(options) if options[:mbuffer]
@@ -498,7 +498,15 @@ module ZfsMgmt
498
498
  if snaps.has_key?(rsnap.sub(destination_path,zfs))
499
499
  $logger.debug("process #{rsnap} to #{sorted[-1]}")
500
500
  com = []
501
- com += zfs_send_com(options,props,[(options[:intermediary] ? '-I' : '-i'),dq(rsnap.split('@')[1])],sorted[-1])
501
+ i_opt = '-i'
502
+ # allow the command line option for intermediary to override the property
503
+ if key_comp?(options,'intermediary',[true,false])
504
+ i_opt = '-I' if key_comp?(options, 'intermediary', true)
505
+ elsif key_comp?(props, 'zfsmgmt:send_intermediary')
506
+ i_opt = '-I'
507
+ end
508
+
509
+ com += zfs_send_com(options,props,[i_opt, dq('@' + rsnap.split('@')[1])], sorted[-1])
502
510
  e = zfs_send_estimate(com) if options[:verbose] == 'pv'
503
511
  com += mbuffer_command(options) if options[:mbuffer]
504
512
  com += pv_command(options,e) if options[:verbose] == 'pv'
@@ -521,7 +529,7 @@ module ZfsMgmt
521
529
  end
522
530
  def self.zfs_send_com(options,props,extra_opts,target)
523
531
  zfs_send_com = [ ZfsMgmt.global_options[:zfs_binary], 'send' ]
524
- zfs_send_com.push('-v','-P') if options[:verbose] and options[:verbose] == 'send'
532
+ zfs_send_com.push('-v','-P') if key_comp?(options,'verbose','send')
525
533
  send_opts = {
526
534
  'backup' => '-b',
527
535
  'compressed' => '-c',
@@ -533,10 +541,11 @@ module ZfsMgmt
533
541
  'replicate' => '-R',
534
542
  }
535
543
  send_opts.each do |p,o|
536
- if options.has_key?(p)
537
- zfs_send_com.push(o) if options[p] == true
538
- elsif props.has_key?("zfsmgmt:send_#{p}")
539
- zfs_send_com.push(o) if props["zfsmgmt:send_#{p}"] == 'true'
544
+ # allow the command line options to override the properties value
545
+ if key_comp?(options,p,[true,false])
546
+ zfs_send_com.push(o) if key_comp?(options,p,true)
547
+ elsif key_comp?(props,"zfsmgmt:send_#{p}")
548
+ zfs_send_com.push(o)
540
549
  end
541
550
  end
542
551
  zfs_send_com + extra_opts + [dq(target),'|']
@@ -544,18 +553,21 @@ module ZfsMgmt
544
553
  def self.zfs_recv_com(options,extra_opts,props,target)
545
554
  zfs_recv_com = [ ZfsMgmt.global_options[:zfs_binary], 'recv', '-F', '-s' ]
546
555
  recv_opts = {
547
- 'noop' => '-n',
548
- 'drop_holds' => '-h',
549
- 'unmount' => '-u',
556
+ 'noop' => '-n',
557
+ 'drop_holds' => '-h',
558
+ 'unmount' => '-u',
559
+ #'discard_last' => '-e',
560
+ #'discard_first' => '-d',
550
561
  }
551
562
  recv_opts.each do |p,o|
552
- if options.has_key?(p)
553
- zfs_recv_com.push(o) if options[p] == true
554
- elsif props.has_key?("zfsmgmt:recv_#{p}")
555
- zfs_recv_com.push(o) if props["zfsmgmt:recv_#{p}"] == 'true'
563
+ # allow the command line options to override the properties value
564
+ if key_comp?(options,p,[true,false])
565
+ zfs_recv_com.push(o) if key_comp?(options,p,true)
566
+ elsif key_comp?(props,"zfsmgmt:recv_#{p}")
567
+ zfs_recv_com.push(o)
556
568
  end
557
569
  end
558
- zfs_recv_com.push('-v') if options[:verbose] and ( options[:verbose] == 'receive' or options[:verbose] == 'recv' )
570
+ zfs_recv_com.push('-v') if key_comp?(options, 'verbose', ['receive', 'recv'])
559
571
  if options[:exclude]
560
572
  options[:exclude].each do |x|
561
573
  zfs_recv_com.push('-x',x)
@@ -628,14 +640,13 @@ module ZfsMgmt
628
640
  return v.include?(h[p])
629
641
  elsif v.kind_of?(Hash)
630
642
  return v.keys.include?(h[p])
631
- elsif v.kind_of?(String)
632
- return h[p] == v
633
643
  elsif v.kind_of?(Method)
634
644
  return v.call(h[p])
635
645
  elsif v.kind_of?(Regexp)
636
646
  return v =~ h[p]
637
647
  else
638
- raise ArgumentError
648
+ # string, boolean, numbers?
649
+ return h[p] == v
639
650
  end
640
651
  end
641
652
  def self.set_log_level(sev)
@@ -652,4 +663,23 @@ module ZfsMgmt
652
663
  $logger.level = Logger::FATAL
653
664
  end
654
665
  end
666
+ def self.zfs_send_all(options)
667
+ zfs_managed_list(filter: options[:filter],
668
+ property_match: { 'zfsmgmt:send' => method(:prop_on?) }).each do |zfs,props,snaps|
669
+
670
+ if props['zfsmgmt:send@source'] == 'received'
671
+ $logger.debug("skipping received filesystem: #{zfs}")
672
+ next
673
+ end
674
+ if key_comp?(props,'zfsmgmt:send_replicate') and props['zfsmgmt:send_replicate@source'] != 'local'
675
+ $logger.debug("skipping descendant of replicated filesystems: #{zfs}")
676
+ next
677
+ end
678
+ unless props['zfsmgmt:destination']
679
+ $logger.error("#{zfs}: you must specify a destination zfs path via the user property zfsmgmt:destination, even if using --destination on the command line, skipping")
680
+ next
681
+ end
682
+ zfs_send(options,zfs,props,snaps)
683
+ end
684
+ end
655
685
  end
@@ -70,7 +70,7 @@ module ZfsMgmt::Restic
70
70
  'zfsmgmt:restic_repository',
71
71
  'userrefs',
72
72
  ],
73
- property_match: { 'zfsmgmt:restic_backup' => 'true' }).each do |blob|
73
+ property_match: { 'zfsmgmt:restic_backup' => ['on','true'] }).each do |blob|
74
74
  zfs,props,zfs_snapshots = blob
75
75
  last_zfs_snapshot = zfs_snapshots.keys.sort { |a,b| zfs_snapshots[a]['creation'] <=> zfs_snapshots[b]['creation'] }.last
76
76
  zfs_snap_time = Time.at(zfs_snapshots[last_zfs_snapshot]['creation'])
@@ -1,3 +1,3 @@
1
1
  module ZfsMgmt
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.4"
3
3
  end
@@ -35,29 +35,6 @@ class ZfsMgmt::ZfsMgr::Send < Thor
35
35
  ZfsMgmt.set_log_level(options[:loglevel])
36
36
  ZfsMgmt.global_options = options
37
37
 
38
- [
39
- { 'zfsmgmt:send' => 'true' },
40
- # {
41
- # 'zfsmgmt:send' => 'replicate',
42
- # 'zfsmgmt:send@source' => 'local'
43
- # },
44
- ].each do |match|
45
- ZfsMgmt.zfs_managed_list(filter: options[:filter],
46
- property_match: match).each do |zfs,props,snaps|
47
- if props['zfsmgmt:send@source'] == 'received'
48
- $logger.debug("skipping received filesystem: #{zfs}")
49
- next
50
- end
51
- if props.has_key?('zfsmgmt:send_replicate') and props['zfsmgmt:send_replicate'] == 'true' and props['zfsmgmt:send_replicate@source'] != 'local'
52
- $logger.debug("skipping descendant of replicated filesystems: #{zfs}")
53
- next
54
- end
55
- unless props['zfsmgmt:destination']
56
- $logger.error("#{zfs}: you must specify a destination zfs path via the user property zfsmgmt:destination, even if using --destination on the command line, skipping")
57
- next
58
- end
59
- ZfsMgmt.zfs_send(options,zfs,props,snaps)
60
- end
61
- end
38
+ ZfsMgmt.zfs_send_all(options)
62
39
  end
63
40
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zfs_mgmt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aran Cox