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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2de1f11ed73e026b52fa86c015ddc14ae82cfe1ac26cd97fee0b02407fb39cd4
4
- data.tar.gz: 881ad0dff3a3008146b5fc7332f1f1aee7811c8a334eef4c6dde14876b65625d
3
+ metadata.gz: cf232dcb9239cd6f1858e5f26430227bf19c8c33a8b537708fa9cfe1ac7fcde4
4
+ data.tar.gz: beaf85ba9e0fcadd8dd03962989592b1d33415cbafadfbf0b3c654f243fc7c0e
5
5
  SHA512:
6
- metadata.gz: 215c743791ac41d0c6d94d54dbf87124c8c846a552b5ec41c3840eeba0673619554f5105532712f573a4a81a30df5aafaf2a55d9d1cbfc8ba4360aa5595464b1
7
- data.tar.gz: 12c041e55ebbd35318c21afb883f22e686b8c37f571d2a92f5eeb56a1fc44a3ee54ef7c09fa0fb611a1317250223f84c6cb140bc4d8b3e72f1249cecd5fb5ff2
6
+ metadata.gz: 831fb028c42c67942afbac8b35ec6b908ab10c0c9acb3183b19facd32e009ea512629c86af2ad3bc7f8dff9a2c31cf90e4e0317a4c1e32f72a297da3fc826b19
7
+ data.tar.gz: 7a3d8b9c734302d828298b6507d31f1539cc34739f41ff0fc8adddd1c3842a78dbd62b8ba5876ab0893ffb5f8295e187ba1e4232f6aaadfd211fffb0d00f0d0e
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /vendor/
9
10
 
10
11
  # rspec failure tracking
11
12
  .rspec_status
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zfs_mgmt (0.2.5)
4
+ zfs_mgmt (0.3.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/bin/zfsmgr CHANGED
@@ -35,6 +35,8 @@ class ZfsMgr < Thor
35
35
  end
36
36
  desc "snapshot SUBCOMMAND ...ARGS", "manage snapshots"
37
37
  subcommand "snapshot", Snapshot
38
+ desc "list SUBCOMMAND ...ARGS", "list filesystems"
39
+ subcommand "list", ZfsMgrList
38
40
  end
39
41
 
40
42
  ZfsMgr.start(ARGV)
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 = ['snap','creation','hourly','daily','weekly','monthly','yearly']
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
@@ -1,3 +1,3 @@
1
1
  module ZfsMgmt
2
- VERSION = "0.2.7"
2
+ VERSION = "0.3.4"
3
3
  end
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.1"
43
- spec.add_development_dependency "text-table", "~> 1.2.4"
44
- spec.add_development_dependency "filesize", "~> 0.2.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"
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.2.7
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: 2020-03-11 00:00:00.000000000 Z
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.1
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.1
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.4
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.4
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.0
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.0
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.0.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.