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 +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
|