zfs_mgmt 0.2.7 → 0.3.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/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/bin/zfsmgr +2 -0
- data/lib/zfs_mgmt.rb +36 -6
- data/lib/zfs_mgmt/version.rb +1 -1
- data/zfs_mgmt.gemspec +3 -3
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf232dcb9239cd6f1858e5f26430227bf19c8c33a8b537708fa9cfe1ac7fcde4
|
4
|
+
data.tar.gz: beaf85ba9e0fcadd8dd03962989592b1d33415cbafadfbf0b3c654f243fc7c0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 831fb028c42c67942afbac8b35ec6b908ab10c0c9acb3183b19facd32e009ea512629c86af2ad3bc7f8dff9a2c31cf90e4e0317a4c1e32f72a297da3fc826b19
|
7
|
+
data.tar.gz: 7a3d8b9c734302d828298b6507d31f1539cc34739f41ff0fc8adddd1c3842a78dbd62b8ba5876ab0893ffb5f8295e187ba1e4232f6aaadfd211fffb0d00f0d0e
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/bin/zfsmgr
CHANGED
data/lib/zfs_mgmt.rb
CHANGED
@@ -230,10 +230,10 @@ module ZfsMgmt
|
|
230
230
|
end
|
231
231
|
# print a table of saved snapshots with the reasons it is being saved
|
232
232
|
table = Text::Table.new
|
233
|
-
table.head = [
|
233
|
+
table.head = [zfs,'creation','hourly','daily','weekly','monthly','yearly']
|
234
234
|
table.rows = []
|
235
235
|
saved_snaps.sort { |a,b| snaps[b]['creation'] <=> snaps[a]['creation'] }.each do |snap|
|
236
|
-
table.rows << [snap,local_epoch_to_datetime(snaps[snap]['creation'])] + find_saved_reason(saved,snap)
|
236
|
+
table.rows << [snap.split('@')[1],local_epoch_to_datetime(snaps[snap]['creation'])] + find_saved_reason(saved,snap)
|
237
237
|
end
|
238
238
|
print table.to_s
|
239
239
|
end
|
@@ -250,17 +250,21 @@ module ZfsMgmt
|
|
250
250
|
(saved,saved_snaps,deleteme) = snapshot_destroy_policy(zfs,props,snaps)
|
251
251
|
|
252
252
|
$logger.info("deleting #{deleteme.length} snapshots for #{zfs}")
|
253
|
+
deleteme.reverse! # oldest first for removal
|
254
|
+
deleteme.each do |snap_name|
|
255
|
+
$logger.debug("delete: #{snap_name} #{local_epoch_to_datetime(snaps[snap_name]['creation']).strftime('%F %T')}")
|
256
|
+
end
|
257
|
+
|
253
258
|
com_base = "zfs destroy -p"
|
259
|
+
if deleteme.length > 0
|
260
|
+
com_base = "#{com_base}d"
|
261
|
+
end
|
254
262
|
if noop
|
255
263
|
com_base = "#{com_base}n"
|
256
264
|
end
|
257
265
|
if verbopt
|
258
266
|
com_base = "#{com_base}v"
|
259
267
|
end
|
260
|
-
deleteme.reverse! # oldest first for removal
|
261
|
-
deleteme.each do |snap_name|
|
262
|
-
$logger.debug("delete: #{snap_name} #{local_epoch_to_datetime(snaps[snap_name]['creation']).strftime('%F %T')}")
|
263
|
-
end
|
264
268
|
while deleteme.length > 0
|
265
269
|
for i in 0..(deleteme.length - 1) do
|
266
270
|
max = deleteme.length - 1 - i
|
@@ -274,6 +278,9 @@ module ZfsMgmt
|
|
274
278
|
$logger.info(com)
|
275
279
|
deleteme = deleteme - deleteme[0..max]
|
276
280
|
system(com)
|
281
|
+
if $?.exitstatus != 0
|
282
|
+
$logger.error("zfs exited with non-zero status: #{$?.exitstatus}")
|
283
|
+
end
|
277
284
|
break
|
278
285
|
end
|
279
286
|
end
|
@@ -318,3 +325,26 @@ module ZfsMgmt
|
|
318
325
|
end
|
319
326
|
end
|
320
327
|
end
|
328
|
+
class ZfsMgrList < Thor
|
329
|
+
class_option :filter, :type => :string, :default => '.+',
|
330
|
+
:desc => 'only act on zfs matching this regexp'
|
331
|
+
desc "stale", "list all zfs with stale snapshots"
|
332
|
+
method_option :age, :desc => "timeframe outside of which the zfs will be considered stale", :default => '1d'
|
333
|
+
def stale()
|
334
|
+
cutoff = Time.at(Time.now.to_i - ZfsMgmt.timespec_to_seconds(options[:age]))
|
335
|
+
table = Text::Table.new
|
336
|
+
table.head = ['zfs','snapshot','age']
|
337
|
+
table.rows = []
|
338
|
+
ZfsMgmt.zfs_managed_list(filter: options[:filter]).each do |blob|
|
339
|
+
zfs,props,snaps = blob
|
340
|
+
last = snaps.keys.sort { |a,b| snaps[a]['creation'] <=> snaps[b]['creation'] }.last
|
341
|
+
snap_time = Time.at(snaps[last]['creation'])
|
342
|
+
if snap_time < cutoff
|
343
|
+
table.rows << [zfs,last,snap_time]
|
344
|
+
end
|
345
|
+
end
|
346
|
+
if table.rows.count > 0
|
347
|
+
print table.to_s
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
data/lib/zfs_mgmt/version.rb
CHANGED
data/zfs_mgmt.gemspec
CHANGED
@@ -39,8 +39,8 @@ Gem::Specification.new do |spec|
|
|
39
39
|
spec.add_development_dependency "bundler", "~> 1.16"
|
40
40
|
spec.add_development_dependency "rake", ">= 12.3.3"
|
41
41
|
spec.add_development_dependency "rspec", "~> 3.0"
|
42
|
-
spec.add_development_dependency "thor", "~> 1.0
|
43
|
-
spec.add_development_dependency "text-table", "~> 1.2
|
44
|
-
spec.add_development_dependency "filesize", "~> 0.2
|
42
|
+
spec.add_development_dependency "thor", "~> 1.0"
|
43
|
+
spec.add_development_dependency "text-table", "~> 1.2"
|
44
|
+
spec.add_development_dependency "filesize", "~> 0.2"
|
45
45
|
|
46
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zfs_mgmt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aran Cox
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,42 +58,42 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0
|
61
|
+
version: '1.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.0
|
68
|
+
version: '1.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: text-table
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.2
|
75
|
+
version: '1.2'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.2
|
82
|
+
version: '1.2'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: filesize
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.2
|
89
|
+
version: '0.2'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.2
|
96
|
+
version: '0.2'
|
97
97
|
description:
|
98
98
|
email:
|
99
99
|
- arancox@gmail.com
|
@@ -149,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
149
|
- !ruby/object:Gem::Version
|
150
150
|
version: '0'
|
151
151
|
requirements: []
|
152
|
-
rubygems_version: 3.
|
152
|
+
rubygems_version: 3.1.2
|
153
153
|
signing_key:
|
154
154
|
specification_version: 4
|
155
155
|
summary: Misc. helpers regarding snapshots and send/recv.
|