wash 0.3.0 → 0.4.0

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: 29c5e73c61e19273eeeb661fe0632dd71d98c6b5155b3928a71165b4dbcb255d
4
- data.tar.gz: 96435335cf622b25ef9fd412ba4a66db4f4ad2d20c12eea766ffad0afdab1d9b
3
+ metadata.gz: aaae396f56664799c39570eef26c32861301ac233717133cb9cf00a3bb889262
4
+ data.tar.gz: e618c3d78d9dcff5aeb2a3cbaa3642a66a947026bd25176d2cfd692f9a14e76c
5
5
  SHA512:
6
- metadata.gz: 69b74fb0465cd0b9706e597e4226eaf5304aa1888b824e516d8606dc62a998f807b72ae3445068d28afb801fc1252af63ee5876978f23d00ea3ababba7320c65
7
- data.tar.gz: 1fc0e79f46a566a26ead6b30d82c84d62918b37abe7efd2fb45eb02abe0160df014281b2c2f174932c4b98fcfc9c8102f037d38c2930ce0c25e2b3bbc1b736cb
6
+ metadata.gz: 7fe1ee4d30afcd383893007022ffbd306ac6c324ca67ce8387d77faf407abd0a7f184c86428473f101358f4d99d743716e24b9161e3352a50fe55b0b0f4809bc
7
+ data.tar.gz: 7d1b888019d19babb129227b77996be16e16e7994e7c6d4b8627bf3f735277fc0afa0e5e7eb1a5c95c38937347d6f3bf6c12cf6250b5eabfe8288081b9226cb7
@@ -9,7 +9,7 @@ module Wash
9
9
  @pretty_print = true
10
10
  end
11
11
 
12
- # enable_entry_schemas enables {Entry schema}[https://puppetlabs.github.io/wash/docs/#entry-schemas]
12
+ # enable_entry_schemas enables {Entry schema}[https://puppetlabs.github.io/wash/docs/external-plugins#entry-schemas]
13
13
  # support. See {Wash::Entry}'s documentation for more details on
14
14
  # the available Entry schema helpers.
15
15
  def self.enable_entry_schemas
@@ -126,7 +126,7 @@ module Wash
126
126
  private_class_method :print_json
127
127
 
128
128
  def self.parse_json(json)
129
- JSON.parse(json,:symbolize_names => true)
129
+ JSON.parse(json, symbolize_names: true)
130
130
  end
131
131
  private_class_method :parse_json
132
132
 
@@ -66,7 +66,7 @@ module Wash
66
66
  # end
67
67
  # end
68
68
  #
69
- # Note that Wash.run uses {Class#allocate} when it reconstructs the entries, so
69
+ # Note that Wash.run uses Class#allocate when it reconstructs the entries, so
70
70
  # it does not call the initialize method.
71
71
  def state(field, *fields)
72
72
  @state ||= []
@@ -187,6 +187,11 @@ module Wash
187
187
  end
188
188
  visited[type_id][:children] = @child_klasses
189
189
  @child_klasses.each do |child_klass|
190
+ if child_klass == VOLUMEFS
191
+ visited[child_klass] = {}
192
+ next
193
+ end
194
+
190
195
  child_klass = const_get(child_klass)
191
196
  if visited[child_klass.send(:type_id)]
192
197
  next
@@ -237,6 +242,10 @@ module Wash
237
242
  end
238
243
  end
239
244
 
245
+ # Name of the volume filesystem type in Wash. Use with `parent_of` when
246
+ # returning `volumefs` in your `list` method.
247
+ VOLUMEFS = '__volume::fs__'
248
+
240
249
  # All entries have a name. Note that the name is always
241
250
  # included in the entry's state hash.
242
251
  attr_accessor :name
@@ -244,7 +253,7 @@ module Wash
244
253
  # Contains the entry's partial metadata.
245
254
  attr_accessor :partial_metadata
246
255
 
247
- def to_json(*)
256
+ def to_json(jstate = {})
248
257
  unless @name && @name.size > 0
249
258
  unless singleton
250
259
  raise "A nameless entry is being serialized. The entry is an instance of #{type_id}"
@@ -268,6 +277,8 @@ module Wash
268
277
  # supporting more overloaded methods
269
278
  block_readable = self.method(:read).arity > 0
270
279
  [:read, block_readable]
280
+ elsif method == :exec && @transport
281
+ [:exec, { transport: @transport[0], options: @transport[1] }]
271
282
  else
272
283
  method
273
284
  end
@@ -290,9 +301,9 @@ module Wash
290
301
  end
291
302
  hash[:state] = to_hash(state).merge(klass: type_id, name: @name).to_json
292
303
  if Wash.send(:pretty_print?)
293
- JSON.pretty_generate(hash)
304
+ JSON.pretty_generate(hash, jstate)
294
305
  else
295
- JSON.generate(hash)
306
+ JSON.generate(hash, jstate)
296
307
  end
297
308
  end
298
309
 
@@ -343,6 +354,49 @@ module Wash
343
354
  @cache_ttls = @cache_ttls.merge(ttls)
344
355
  end
345
356
 
357
+ # volumefs creates the `volume::fs` entry as specified in Wash's external plugin docs.
358
+ #
359
+ # @example
360
+ # class Foo
361
+ # parent_of VOLUMEFS
362
+ # def list
363
+ # [volumefs('fs', maxdepth: 5), Bar.new]
364
+ # end
365
+ # end
366
+ #
367
+ # @param [String] name The name to use for the child representing the remote filesystem.
368
+ # @param [Hash] options Options to configure the filesystem.
369
+ # - maxdepth: How deep to walk the remote filesystem when needed. This is a trade-off
370
+ # between speed of the transport and filesystem complexity. For fast transports it
371
+ # should be low (1-3), for slower transports higher (3-6).
372
+ def volumefs(name, options = {})
373
+ { type_id: VOLUMEFS, name: name, state: options.to_json }
374
+ end
375
+
376
+ # transport requests that Wash use a built-in transport with the supplied
377
+ # transport options to implement Exec. When using this feature, you must
378
+ # also declare the 'exec' method so it's included in the schema. You may
379
+ # use this to implement a fallback implementation for entries where the
380
+ # transport feature is not used.
381
+ #
382
+ # @example
383
+ # class Foo
384
+ # def initialize(name)
385
+ # transport :ssh, host: name, user: 'root'
386
+ # end
387
+ #
388
+ # def exec
389
+ # raise 'implemented by transport'
390
+ # end
391
+ # end
392
+ #
393
+ # @param [Symbol] klass The transport to use. Only `:ssh` is supported
394
+ # @param [Hash] options For SSH: :host (required), :user, :fallback_user,
395
+ # :password, :identity_file, :known_hosts, :host_key_alias, :retries, :port
396
+ def transport(klass, options = {})
397
+ @transport = [klass, options]
398
+ end
399
+
346
400
  # schema returns the entry's schema. It should not be overridden.
347
401
  def schema
348
402
  schemaHash = {}
@@ -42,17 +42,17 @@ module Wash
42
42
  # the size and offset
43
43
  args = args.map(&:to_i)
44
44
  end
45
- STDOUT.print(entry.read(*args))
45
+ $stdout.print(entry.read(*args))
46
46
  end
47
47
 
48
48
  method(:write) do |entry, _|
49
- entry.write(STDIN)
49
+ entry.write($stdin)
50
50
  end
51
51
 
52
52
  method(:exec) do |entry, *args|
53
53
  opts, cmd, args = Wash.send(:parse_json, args[0]), args[1], args[2..-1]
54
54
  if opts[:stdin]
55
- opts[:stdin] = STDIN
55
+ opts[:stdin] = $stdin
56
56
  else
57
57
  opts[:stdin] = nil
58
58
  end
@@ -17,8 +17,8 @@ module Wash
17
17
  puts("200")
18
18
  @first_chunk = false
19
19
  end
20
- STDOUT.print(chunk)
21
- STDOUT.flush
20
+ $stdout.print(chunk)
21
+ $stdout.flush
22
22
  end
23
23
  end
24
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-14 00:00:00.000000000 Z
11
+ date: 2020-01-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A library for building Wash external plugins
14
14
  email:
@@ -40,8 +40,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  requirements: []
43
- rubyforge_project:
44
- rubygems_version: 2.7.3
43
+ rubygems_version: 3.0.3
45
44
  signing_key:
46
45
  specification_version: 4
47
46
  summary: A library for building Wash external plugins