zfs_mgmt 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
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