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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/zfs_mgmt.rb +52 -22
- data/lib/zfs_mgmt/restic.rb +1 -1
- data/lib/zfs_mgmt/version.rb +1 -1
- data/lib/zfs_mgmt/zfs_mgr/send.rb +1 -24
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 558d14c8bb3e9617b2d355308c85cd1da639035fb67662409a6445e1769c6e55
|
4
|
+
data.tar.gz: ef0acb4c148281bb81e0df51f08efa9c2ab87302a14c3700cce3214e9ab9e515
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84f9fa0ba043d4c7a8e4b4625642bd5c14260591438da6851ecf6704a7747baedd4f1e397c3d55a648e55e6588c5bd6efd31e56a243a918bb9cb40de5db26c14
|
7
|
+
data.tar.gz: 1d77d1167f829dfa24236c3bdbda28093b15c5f325a55c02c26f9cd8eba7e9d73d1e2db3d8e68c6d9370ecc5e70ec676f2dba9682ab4a05d80bce273572f6206
|
data/Gemfile.lock
CHANGED
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' =>
|
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
|
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
|
-
(
|
426
|
-
(
|
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
|
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
|
-
|
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
|
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
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
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'
|
548
|
-
'drop_holds'
|
549
|
-
'unmount'
|
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
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
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
|
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
|
-
|
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
|
data/lib/zfs_mgmt/restic.rb
CHANGED
@@ -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'])
|
data/lib/zfs_mgmt/version.rb
CHANGED
@@ -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
|