zfs_mgmt 0.2.7 → 0.3.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: 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.