radfish 0.2.4 → 0.2.5

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: 6da783b12d9a90873743161fff969aae700800a544b1223f488e9828964b3a97
4
- data.tar.gz: f42f9b1ae0ffbf3d50ad13732895b82472839133ece168b1cfb06b015f1d07a7
3
+ metadata.gz: 2a440779d106c4dab6553860f7a70b63c606072fdf79ebf37164d32a6e9dd5bd
4
+ data.tar.gz: 3c1c74fb4bea5668de9e8fb68fddd16e72b7ba716c62e3d650b8cbd368822da5
5
5
  SHA512:
6
- metadata.gz: 0edb45f482cd15f8d389064273572d158f195500c613f99a652b713438c16715703de07130f8421dd6e2d6b7d1b2a7df4eb066d1aa0d6625cfa2e2827572bc9b
7
- data.tar.gz: f0ba4c5e3c0d07e0f06df7f2b15a56dc99b9349d537e71c3c48037bf1d757aae773ac1d5b5df671a6398656cb12a2b0d000a6d923876c8f37d5f5f74c1f4c14a
6
+ metadata.gz: 2023d3129b3cac7eb57f0a7d1f2b999700636571a6d21080069ae49137e7efd81aac059a8cdda4419ba8f21daf4216f3b72e8ef1a1c6fcd1569aab88030f9bb9
7
+ data.tar.gz: 784a58288211fbfdca734a5581fdaa311f9f32c95edc7240b5ad0eaaa7d64617aa575a8792111d893e2e4d940ba4493a3c6caaaeb3f17d9474a2f94163e54a33
@@ -182,7 +182,8 @@ module Radfish
182
182
 
183
183
  def volumes(controller)
184
184
  raise ArgumentError, "Controller required" unless controller.is_a?(Controller)
185
- @adapter.volumes(controller)
185
+ raw = @adapter.volumes(controller)
186
+ Array(raw).map { |v| build_volume(v, controller) }
186
187
  end
187
188
 
188
189
  private
@@ -214,5 +215,28 @@ module Radfish
214
215
  adapter_data: raw
215
216
  )
216
217
  end
218
+
219
+ def build_volume(raw, controller)
220
+ fetch = ->(key) do
221
+ if raw.respond_to?(:[])
222
+ raw[key.to_s] || raw[key.to_sym]
223
+ elsif raw.respond_to?(key.to_sym)
224
+ raw.public_send(key.to_sym)
225
+ end
226
+ end
227
+
228
+ Volume.new(
229
+ client: self,
230
+ controller: controller,
231
+ id: fetch.call(:id),
232
+ name: fetch.call(:name),
233
+ capacity_bytes: fetch.call(:capacity_bytes),
234
+ capacity_gb: fetch.call(:capacity_gb),
235
+ raid_type: fetch.call(:raid_type) || fetch.call(:volume_type),
236
+ status: fetch.call(:status) || fetch.call(:health),
237
+ encrypted: fetch.call(:encrypted),
238
+ adapter_data: raw
239
+ )
240
+ end
217
241
  end
218
242
  end
@@ -19,6 +19,11 @@ module Radfish
19
19
  raise NotImplementedError, "Adapter must implement #storage_summary"
20
20
  end
21
21
 
22
+ # Given a Volume, return its physical drive objects
23
+ def volume_drives(volume)
24
+ raise NotImplementedError, "Adapter must implement #volume_drives(volume)"
25
+ end
26
+
22
27
  end
23
28
  end
24
29
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Radfish
4
- VERSION = "0.2.4"
4
+ VERSION = "0.2.5"
5
5
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Radfish
4
+ class Volume
5
+ attr_reader :id, :name, :capacity_bytes, :capacity_gb, :raid_type,
6
+ :status, :encrypted, :adapter_data, :controller
7
+
8
+ def initialize(client:, controller:, id: nil, name: nil, capacity_bytes: nil,
9
+ capacity_gb: nil, raid_type: nil, status: nil, encrypted: nil,
10
+ adapter_data: nil)
11
+ @client = client
12
+ @controller = controller
13
+ @id = id
14
+ @name = name
15
+ @capacity_bytes = capacity_bytes
16
+ @capacity_gb = capacity_gb || (capacity_bytes ? (capacity_bytes.to_f / (1000**3)).round(2) : nil)
17
+ @raid_type = raid_type
18
+ @status = status
19
+ @encrypted = encrypted
20
+ @adapter_data = adapter_data
21
+ end
22
+
23
+ def drives
24
+ @client.adapter.volume_drives(self)
25
+ end
26
+
27
+ def to_h
28
+ {
29
+ id: id,
30
+ name: name,
31
+ capacity_bytes: capacity_bytes,
32
+ capacity_gb: capacity_gb,
33
+ raid_type: raid_type,
34
+ status: status,
35
+ encrypted: encrypted
36
+ }.compact
37
+ end
38
+ end
39
+ end
40
+
data/lib/radfish.rb CHANGED
@@ -93,6 +93,7 @@ require_relative 'radfish/power_info'
93
93
  require_relative 'radfish/thermal_info'
94
94
  require_relative 'radfish/pci_info'
95
95
  require_relative 'radfish/controller'
96
+ require_relative 'radfish/volume'
96
97
  require_relative 'radfish/client'
97
98
 
98
99
  # Auto-load adapters if available
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: radfish
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Siegel
@@ -187,6 +187,7 @@ files:
187
187
  - lib/radfish/thermal_info.rb
188
188
  - lib/radfish/vendor_detector.rb
189
189
  - lib/radfish/version.rb
190
+ - lib/radfish/volume.rb
190
191
  - radfish.gemspec
191
192
  homepage: https://github.com/buildio/radfish
192
193
  licenses: