chef-winrm-fs 1.3.7 → 1.4.0
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/lib/chef-winrm-fs/core/file_transporter.rb +65 -59
- data/lib/chef-winrm-fs/core/tmp_zip.rb +10 -10
- data/lib/chef-winrm-fs/file_manager.rb +13 -13
- data/lib/chef-winrm-fs/scripts/scripts.rb +1 -1
- data/lib/chef-winrm-fs.rb +5 -5
- metadata +41 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff63f900e8d92ec0618ea948cbd905f183f3b5551e5f01ae4b981f1baf6d06c5
|
4
|
+
data.tar.gz: bc8a1f987323e2a59ed256939b999354600821816e8861af06aa8885ed756641
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44a9f86a242bfdd119c7abf88a85ae5e873e7619c3f26fdc290cce9be1724eee305bdd0e834e6db503e1386f2b26a6a9c10baf3066802c444b406807588f3976
|
7
|
+
data.tar.gz: c1fb676b22ffce03a6392b5c0f9817b69426d1ae64eb30b90c705256f2a3c18104eeddc96f6a480b9199c4e4043726b7b883a3145e8ad97508bc5c8caa0f01aa
|
@@ -16,15 +16,21 @@
|
|
16
16
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
17
|
# See the License for the specific language governing permissions and
|
18
18
|
# limitations under the License.
|
19
|
+
$VERBOSE = true
|
19
20
|
|
20
|
-
require
|
21
|
-
require 'csv' unless defined?(CSV)
|
22
|
-
require 'digest' unless defined?(Digest)
|
23
|
-
require 'securerandom' unless defined?(SecureRandom)
|
24
|
-
require 'stringio' unless defined?(StringIO)
|
21
|
+
require "benchmark" unless defined?(Benchmark)
|
25
22
|
|
26
|
-
require
|
27
|
-
require
|
23
|
+
# require "pry"
|
24
|
+
# require "pry-byebug" if defined?(PryByebug)
|
25
|
+
# binding.pry
|
26
|
+
|
27
|
+
require "csv" unless defined?(CSV)
|
28
|
+
require "digest" unless defined?(Digest)
|
29
|
+
require "securerandom" unless defined?(SecureRandom)
|
30
|
+
require "stringio" unless defined?(StringIO)
|
31
|
+
|
32
|
+
require "chef-winrm/exceptions"
|
33
|
+
require "chef-winrm-fs/core/tmp_zip"
|
28
34
|
|
29
35
|
module WinRM
|
30
36
|
module FS
|
@@ -38,7 +44,7 @@ module WinRM
|
|
38
44
|
# Exception for the case where upload source contains more than one
|
39
45
|
# StringIO object, or a combination of file/directory paths and StringIO object
|
40
46
|
class UploadSourceError < StandardError
|
41
|
-
def initialize(msg =
|
47
|
+
def initialize(msg = "Only a single StringIO object may be uploaded.")
|
42
48
|
super
|
43
49
|
end
|
44
50
|
end
|
@@ -126,7 +132,7 @@ module WinRM
|
|
126
132
|
# @return [String] the Array pack template for Base64 encoding a stream
|
127
133
|
# of data
|
128
134
|
# @api private
|
129
|
-
BASE64_PACK =
|
135
|
+
BASE64_PACK = "m0".freeze
|
130
136
|
|
131
137
|
# @return [String] the directory where temporary upload artifacts are
|
132
138
|
# persisted
|
@@ -148,9 +154,9 @@ module WinRM
|
|
148
154
|
def max_encoded_write
|
149
155
|
@max_encoded_write ||= begin
|
150
156
|
empty_command = WinRM::PSRP::MessageFactory.create_pipeline_message(
|
151
|
-
|
152
|
-
|
153
|
-
stream_command(
|
157
|
+
"00000000-0000-0000-0000-000000000000",
|
158
|
+
"00000000-0000-0000-0000-000000000000",
|
159
|
+
stream_command("")
|
154
160
|
)
|
155
161
|
shell.max_fragment_blob_size - empty_command.bytes.length
|
156
162
|
end
|
@@ -166,7 +172,7 @@ module WinRM
|
|
166
172
|
# @api private
|
167
173
|
def reconcile_destinations!(files)
|
168
174
|
files.each do |_, data|
|
169
|
-
data[
|
175
|
+
data["dst"] = File.join(data["dst"], File.basename(data["src"])) if data["target_is_folder"] == "True"
|
170
176
|
end
|
171
177
|
end
|
172
178
|
|
@@ -185,12 +191,12 @@ module WinRM
|
|
185
191
|
zip_sha1 = sha1sum(zip_io.path)
|
186
192
|
|
187
193
|
hash[zip_sha1] = {
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
+
"src" => dir,
|
195
|
+
"src_zip" => zip_io.path.to_s,
|
196
|
+
"zip_io" => zip_io,
|
197
|
+
"tmpzip" => "#{TEMP_UPLOAD_DIRECTORY}\\tmpzip-#{zip_sha1}.zip",
|
198
|
+
"dst" => "#{remote}\\#{File.basename(dir)}",
|
199
|
+
"size" => File.size(zip_io.path),
|
194
200
|
}
|
195
201
|
end
|
196
202
|
|
@@ -203,9 +209,9 @@ module WinRM
|
|
203
209
|
def add_file_hash!(hash, local, remote)
|
204
210
|
logger.debug "creating hash for file #{remote}"
|
205
211
|
hash[sha1sum(local)] = {
|
206
|
-
|
207
|
-
|
208
|
-
|
212
|
+
"src" => local,
|
213
|
+
"dst" => remote,
|
214
|
+
"size" => local.is_a?(StringIO) ? local.size : File.size(local),
|
209
215
|
}
|
210
216
|
end
|
211
217
|
|
@@ -218,9 +224,9 @@ module WinRM
|
|
218
224
|
# @return [Hash] a report hash, keyed by the local SHA1 digest
|
219
225
|
# @api private
|
220
226
|
def check_files(files)
|
221
|
-
logger.debug
|
227
|
+
logger.debug "Running check_files.ps1"
|
222
228
|
hash_file = check_files_ps_hash(files)
|
223
|
-
script = WinRM::FS::Scripts.render(
|
229
|
+
script = WinRM::FS::Scripts.render("check_files", hash_file: hash_file)
|
224
230
|
parse_response(shell.run(script))
|
225
231
|
end
|
226
232
|
|
@@ -235,10 +241,10 @@ module WinRM
|
|
235
241
|
[
|
236
242
|
sha1,
|
237
243
|
{
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
}
|
244
|
+
"target" => data.fetch("tmpzip", data["dst"]),
|
245
|
+
"src_basename" => data["src"].is_a?(StringIO) ? data["dst"] : File.basename(data["src"]),
|
246
|
+
"dst" => data["dst"],
|
247
|
+
},
|
242
248
|
]
|
243
249
|
end
|
244
250
|
ps_hash(Hash[hash])
|
@@ -250,10 +256,10 @@ module WinRM
|
|
250
256
|
# @param files [Hash] a files hash
|
251
257
|
# @api private
|
252
258
|
def cleanup(files)
|
253
|
-
files.select { |_, data| data.key?(
|
254
|
-
data.fetch(
|
255
|
-
files.fetch(sha1).delete(
|
256
|
-
logger.debug "Cleaned up src_zip #{data[
|
259
|
+
files.select { |_, data| data.key?("zip_io") }.each do |sha1, data|
|
260
|
+
data.fetch("zip_io").unlink
|
261
|
+
files.fetch(sha1).delete("zip_io")
|
262
|
+
logger.debug "Cleaned up src_zip #{data["src_zip"]}"
|
257
263
|
end
|
258
264
|
end
|
259
265
|
|
@@ -270,11 +276,11 @@ module WinRM
|
|
270
276
|
extracted_files = extract_files_ps_hash(files)
|
271
277
|
|
272
278
|
if extracted_files == ps_hash({})
|
273
|
-
logger.debug
|
279
|
+
logger.debug "No remote files to extract, skipping"
|
274
280
|
{}
|
275
281
|
else
|
276
|
-
logger.debug
|
277
|
-
script = WinRM::FS::Scripts.render(
|
282
|
+
logger.debug "Running extract_files.ps1"
|
283
|
+
script = WinRM::FS::Scripts.render("extract_files", hash_file: extracted_files)
|
278
284
|
|
279
285
|
parse_response(shell.run(script))
|
280
286
|
end
|
@@ -288,11 +294,11 @@ module WinRM
|
|
288
294
|
# @return [String] the inner contents of a PowerShell Hash Table
|
289
295
|
# @api private
|
290
296
|
def extract_files_ps_hash(files)
|
291
|
-
file_data = files.select { |_, data| data.key?(
|
297
|
+
file_data = files.select { |_, data| data.key?("tmpzip") }
|
292
298
|
|
293
299
|
result = file_data.map do |sha1, data|
|
294
|
-
val = {
|
295
|
-
val[
|
300
|
+
val = { "dst" => data["dst"] }
|
301
|
+
val["tmpzip"] = data["tmpzip"] if data["tmpzip"]
|
296
302
|
|
297
303
|
[sha1, val]
|
298
304
|
end
|
@@ -308,7 +314,7 @@ module WinRM
|
|
308
314
|
total = 0 if total.nil?
|
309
315
|
minutes = (total / 60).to_i
|
310
316
|
seconds = (total - (minutes * 60))
|
311
|
-
format(
|
317
|
+
format("(%dm%.2fs)", minutes, seconds)
|
312
318
|
end
|
313
319
|
|
314
320
|
# Contructs a Hash of files or directories, keyed by the local SHA1
|
@@ -329,7 +335,7 @@ module WinRM
|
|
329
335
|
else
|
330
336
|
local = local.to_s
|
331
337
|
expanded = File.expand_path(local)
|
332
|
-
expanded += local[-1] if local.end_with?(
|
338
|
+
expanded += local[-1] if local.end_with?("/", "\\")
|
333
339
|
if File.file?(expanded)
|
334
340
|
add_file_hash!(hash, expanded, remote)
|
335
341
|
elsif File.directory?(expanded)
|
@@ -387,7 +393,7 @@ module WinRM
|
|
387
393
|
# @return [String] a whitespace padded string of the given length
|
388
394
|
# @api private
|
389
395
|
def pad(depth = 0)
|
390
|
-
|
396
|
+
" " * depth
|
391
397
|
end
|
392
398
|
|
393
399
|
# Parses response of a PowerShell script or CMD command which contains
|
@@ -404,17 +410,17 @@ module WinRM
|
|
404
410
|
if exitcode != 0
|
405
411
|
raise FileTransporterFailed, "[#{self.class}] Upload failed " \
|
406
412
|
"(exitcode: #{exitcode})\n#{stderr}"
|
407
|
-
elsif stderr != '\r\n' && stderr !=
|
413
|
+
elsif stderr != '\r\n' && stderr != ""
|
408
414
|
raise FileTransporterFailed, "[#{self.class}] Upload failed " \
|
409
415
|
"(exitcode: 0), but stderr present\n#{stderr}"
|
410
416
|
end
|
411
417
|
|
412
|
-
logger.debug
|
418
|
+
logger.debug "Parsing CSV Response"
|
413
419
|
logger.debug output.stdout
|
414
420
|
|
415
421
|
array = CSV.parse(output.stdout, headers: true).map(&:to_hash)
|
416
|
-
array.each { |h| h.each { |key, value| h[key] = nil if value ==
|
417
|
-
Hash[array.map { |entry| [entry.fetch(
|
422
|
+
array.each { |h| h.each { |key, value| h[key] = nil if value == "" } }
|
423
|
+
Hash[array.map { |entry| [entry.fetch("src_sha1"), entry] }]
|
418
424
|
end
|
419
425
|
|
420
426
|
# Converts a Ruby hash into a PowerShell hash table, represented in a
|
@@ -429,10 +435,10 @@ module WinRM
|
|
429
435
|
def ps_hash(obj, depth = 0)
|
430
436
|
if obj.is_a?(Hash)
|
431
437
|
obj.map do |k, v|
|
432
|
-
%
|
438
|
+
%{#{pad(depth + 2)}#{ps_hash(k)} = #{ps_hash(v, depth + 2)}}
|
433
439
|
end.join(";\n").insert(0, "@{\n").insert(-1, "\n#{pad(depth)}}")
|
434
440
|
else
|
435
|
-
%
|
441
|
+
%{"#{obj}"}
|
436
442
|
end
|
437
443
|
end
|
438
444
|
|
@@ -456,7 +462,7 @@ module WinRM
|
|
456
462
|
chunk = 1
|
457
463
|
bytes = 0
|
458
464
|
# Do not freeze this string
|
459
|
-
buffer =
|
465
|
+
buffer = ""
|
460
466
|
shell.run(<<-PS
|
461
467
|
$to = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath("#{dest}")
|
462
468
|
$parent = Split-Path $to
|
@@ -486,7 +492,7 @@ module WinRM
|
|
486
492
|
chunk += 1
|
487
493
|
yield bytes if block_given?
|
488
494
|
end
|
489
|
-
shell.run(
|
495
|
+
shell.run("$fileStream.Dispose()")
|
490
496
|
buffer = nil # rubocop:disable Lint/UselessAssignment
|
491
497
|
|
492
498
|
[chunk - 1, bytes]
|
@@ -515,7 +521,7 @@ module WinRM
|
|
515
521
|
if src.is_a?(StringIO)
|
516
522
|
chunks, bytes = stream_upload(src, dest, &block)
|
517
523
|
else
|
518
|
-
File.open(src,
|
524
|
+
File.open(src, "rb") do |io|
|
519
525
|
chunks, bytes = stream_upload(io, dest, &block)
|
520
526
|
end
|
521
527
|
end
|
@@ -539,16 +545,16 @@ module WinRM
|
|
539
545
|
def stream_upload_files(files)
|
540
546
|
response = {}
|
541
547
|
files.each do |sha1, data|
|
542
|
-
src = data.fetch(
|
543
|
-
if data[
|
544
|
-
response[sha1] = {
|
545
|
-
chunks, bytes = stream_upload_file(src, data[
|
546
|
-
yield data[
|
548
|
+
src = data.fetch("src_zip", data["src"])
|
549
|
+
if data["chk_dirty"] == "True"
|
550
|
+
response[sha1] = { "dest" => data["tmpzip"] || data["dst"] }
|
551
|
+
chunks, bytes = stream_upload_file(src, data["tmpzip"] || data["dst"]) do |xfered|
|
552
|
+
yield data["src"], xfered
|
547
553
|
end
|
548
|
-
response[sha1][
|
549
|
-
response[sha1][
|
554
|
+
response[sha1]["chunks"] = chunks
|
555
|
+
response[sha1]["xfered"] = bytes
|
550
556
|
else
|
551
|
-
logger.debug "File #{data[
|
557
|
+
logger.debug "File #{data["dst"]} is up to date, skipping"
|
552
558
|
end
|
553
559
|
end
|
554
560
|
response
|
@@ -563,7 +569,7 @@ module WinRM
|
|
563
569
|
# @api private
|
564
570
|
def total_base64_transfer_size(files)
|
565
571
|
size = 0
|
566
|
-
files.values.each { |file| size += file[
|
572
|
+
files.values.each { |file| size += file["size"] if file["chk_dirty"] == "True" }
|
567
573
|
size / 3 * 4
|
568
574
|
end
|
569
575
|
end
|
@@ -17,10 +17,10 @@
|
|
17
17
|
# See the License for the specific language governing permissions and
|
18
18
|
# limitations under the License.
|
19
19
|
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
20
|
+
require "delegate"
|
21
|
+
require "pathname" unless defined?(Pathname)
|
22
|
+
require "tempfile" unless defined?(Tempfile)
|
23
|
+
require "zip" unless defined?(Zip)
|
24
24
|
|
25
25
|
module WinRM
|
26
26
|
module FS
|
@@ -70,7 +70,7 @@ module WinRM
|
|
70
70
|
def initialize(dir, logger = nil)
|
71
71
|
@logger = logger || Logging.logger[self]
|
72
72
|
@dir = clean_dirname(dir)
|
73
|
-
@zip_io = Tempfile.open([
|
73
|
+
@zip_io = Tempfile.open(["tmpzip-", ".zip"], binmode: true)
|
74
74
|
write_zip
|
75
75
|
@zip_io.close
|
76
76
|
end
|
@@ -113,13 +113,13 @@ module WinRM
|
|
113
113
|
# directory, excluding directories
|
114
114
|
# @api private
|
115
115
|
def entries
|
116
|
-
Pathname.glob(dir.join(
|
116
|
+
Pathname.glob(dir.join("**/.*")).push(*Pathname.glob(dir.join("**/*"))).delete_if(&:directory?).sort
|
117
117
|
end
|
118
118
|
|
119
119
|
# (see Logging.log_subject)
|
120
120
|
# @api private
|
121
121
|
def log_subject
|
122
|
-
@log_subject ||= [self.class.to_s.split(
|
122
|
+
@log_subject ||= [self.class.to_s.split("::").last, path].join("::")
|
123
123
|
end
|
124
124
|
|
125
125
|
# Adds all file entries to the Zip output stream.
|
@@ -134,16 +134,16 @@ module WinRM
|
|
134
134
|
zip_entry(entry_path),
|
135
135
|
nil, nil, ::Zip::Entry::DEFLATED, Zlib::BEST_COMPRESSION
|
136
136
|
)
|
137
|
-
entry.open(
|
137
|
+
entry.open("rb") { |src| IO.copy_stream(src, zos) }
|
138
138
|
end
|
139
|
-
logger.debug
|
139
|
+
logger.debug "=== All files added."
|
140
140
|
end
|
141
141
|
|
142
142
|
# Writes out a temporary Zip file.
|
143
143
|
#
|
144
144
|
# @api private
|
145
145
|
def write_zip
|
146
|
-
logger.debug
|
146
|
+
logger.debug "Populating files"
|
147
147
|
Zip::OutputStream.write_buffer(NoDupIO.new(zip_io)) do |zos|
|
148
148
|
produce_zip_entries(zos)
|
149
149
|
end
|
@@ -15,9 +15,9 @@
|
|
15
15
|
# See the License for the specific language governing permissions and
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
|
-
require
|
19
|
-
require_relative
|
20
|
-
require_relative
|
18
|
+
require "chef-winrm" unless defined?(WinRM::Connection)
|
19
|
+
require_relative "scripts/scripts"
|
20
|
+
require_relative "core/file_transporter"
|
21
21
|
|
22
22
|
module WinRM
|
23
23
|
module FS
|
@@ -34,9 +34,9 @@ module WinRM
|
|
34
34
|
# otherwise ''
|
35
35
|
# @param [String] The remote file path
|
36
36
|
# @parms [String] The digest method
|
37
|
-
def checksum(path, digest =
|
37
|
+
def checksum(path, digest = "SHA1")
|
38
38
|
@logger.debug("checksum with #{digest}: #{path}")
|
39
|
-
script = WinRM::FS::Scripts.render(
|
39
|
+
script = WinRM::FS::Scripts.render("checksum", path: path, digest: digest)
|
40
40
|
ps_run(script).exitcode == 0
|
41
41
|
end
|
42
42
|
|
@@ -45,7 +45,7 @@ module WinRM
|
|
45
45
|
# @return [Boolean] True if successful, otherwise false
|
46
46
|
def create_dir(path)
|
47
47
|
@logger.debug("create_dir: #{path}")
|
48
|
-
script = WinRM::FS::Scripts.render(
|
48
|
+
script = WinRM::FS::Scripts.render("create_dir", path: path)
|
49
49
|
ps_run(script).exitcode == 0
|
50
50
|
end
|
51
51
|
|
@@ -54,7 +54,7 @@ module WinRM
|
|
54
54
|
# @return [Boolean] True if successful, otherwise False
|
55
55
|
def delete(path)
|
56
56
|
@logger.debug("deleting: #{path}")
|
57
|
-
script = WinRM::FS::Scripts.render(
|
57
|
+
script = WinRM::FS::Scripts.render("delete", path: path)
|
58
58
|
ps_run(script).exitcode == 0
|
59
59
|
end
|
60
60
|
|
@@ -70,7 +70,7 @@ module WinRM
|
|
70
70
|
|
71
71
|
return false if output.exitcode >= 1
|
72
72
|
|
73
|
-
File.open(local_path,
|
73
|
+
File.open(local_path, "wb") do |fd|
|
74
74
|
out = _write_file(fd, output)
|
75
75
|
index += out.length
|
76
76
|
until out.empty?
|
@@ -86,12 +86,12 @@ module WinRM
|
|
86
86
|
# rubocop:enable Metrics/MethodLength
|
87
87
|
|
88
88
|
def _output_from_file(remote_path, chunk_size, index)
|
89
|
-
script = WinRM::FS::Scripts.render(
|
89
|
+
script = WinRM::FS::Scripts.render("download", path: remote_path, chunk_size: chunk_size, index: index)
|
90
90
|
ps_run(script)
|
91
91
|
end
|
92
92
|
|
93
93
|
def _write_file(tofd, output)
|
94
|
-
contents = output.stdout.gsub('\n\r',
|
94
|
+
contents = output.stdout.gsub('\n\r', "")
|
95
95
|
out = Base64.decode64(contents)
|
96
96
|
out = out[0, out.length - 1] if out.end_with? "\x00"
|
97
97
|
return out if out.empty?
|
@@ -105,7 +105,7 @@ module WinRM
|
|
105
105
|
# @return [Boolean] True if the file/dir exists, otherwise false.
|
106
106
|
def exists?(path)
|
107
107
|
@logger.debug("exists?: #{path}")
|
108
|
-
script = WinRM::FS::Scripts.render(
|
108
|
+
script = WinRM::FS::Scripts.render("exists", path: path)
|
109
109
|
ps_run(script).exitcode == 0
|
110
110
|
end
|
111
111
|
|
@@ -114,7 +114,7 @@ module WinRM
|
|
114
114
|
# @return [String] Full path to the temp directory
|
115
115
|
def temp_dir
|
116
116
|
@temp_dir ||= begin
|
117
|
-
ps_run(
|
117
|
+
ps_run("$env:TEMP").stdout.chomp.tr("\\", "/")
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
@@ -162,7 +162,7 @@ module WinRM
|
|
162
162
|
local_path = File.join(local_path, File.basename(remote_path.to_s)) if first
|
163
163
|
FileUtils.mkdir_p(local_path) unless File.directory?(local_path)
|
164
164
|
command = "Get-ChildItem #{remote_path} | Select-Object Name"
|
165
|
-
@connection.shell(:powershell) { |e| e.run(command) }.stdout.strip.split(
|
165
|
+
@connection.shell(:powershell) { |e| e.run(command) }.stdout.strip.split("\n").drop(2).each do |file|
|
166
166
|
download(File.join(remote_path.to_s, file.strip), File.join(local_path, file.strip), chunk_size, false)
|
167
167
|
end
|
168
168
|
end
|
data/lib/chef-winrm-fs.rb
CHANGED
@@ -15,11 +15,11 @@
|
|
15
15
|
# See the License for the specific language governing permissions and
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require_relative
|
22
|
-
require_relative
|
18
|
+
require "chef-winrm" unless defined?(WinRM::Connection)
|
19
|
+
require "logger"
|
20
|
+
require "pathname" unless defined?(Pathname)
|
21
|
+
require_relative "chef-winrm-fs/exceptions"
|
22
|
+
require_relative "chef-winrm-fs/file_manager"
|
23
23
|
|
24
24
|
module WinRM
|
25
25
|
# WinRM File System
|
metadata
CHANGED
@@ -1,30 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-winrm-fs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shawn Neal
|
8
8
|
- Matt Wrock
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2025-
|
12
|
+
date: 2025-04-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef-winrm
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 2.
|
20
|
+
version: '2.4'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2.
|
27
|
+
version: '2.4'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: erubi
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,6 +73,34 @@ dependencies:
|
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '2.0'
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: csv
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.3'
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.3'
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: benchmark
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.4.0
|
97
|
+
type: :runtime
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.4.0
|
76
104
|
- !ruby/object:Gem::Dependency
|
77
105
|
name: pry
|
78
106
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,19 +144,19 @@ dependencies:
|
|
116
144
|
- !ruby/object:Gem::Version
|
117
145
|
version: '3.0'
|
118
146
|
- !ruby/object:Gem::Dependency
|
119
|
-
name:
|
147
|
+
name: cookstyle
|
120
148
|
requirement: !ruby/object:Gem::Requirement
|
121
149
|
requirements:
|
122
150
|
- - "~>"
|
123
151
|
- !ruby/object:Gem::Version
|
124
|
-
version: 1
|
152
|
+
version: '8.1'
|
125
153
|
type: :development
|
126
154
|
prerelease: false
|
127
155
|
version_requirements: !ruby/object:Gem::Requirement
|
128
156
|
requirements:
|
129
157
|
- - "~>"
|
130
158
|
- !ruby/object:Gem::Version
|
131
|
-
version: 1
|
159
|
+
version: '8.1'
|
132
160
|
description: " Ruby library for file system operations via Windows Remote Management\n"
|
133
161
|
email:
|
134
162
|
- sneal@sneal.net
|
@@ -160,7 +188,7 @@ homepage: http://github.com/WinRb/winrm-fs
|
|
160
188
|
licenses:
|
161
189
|
- Apache-2.0
|
162
190
|
metadata: {}
|
163
|
-
post_install_message:
|
191
|
+
post_install_message:
|
164
192
|
rdoc_options:
|
165
193
|
- "-x"
|
166
194
|
- test/
|
@@ -172,7 +200,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
200
|
requirements:
|
173
201
|
- - ">="
|
174
202
|
- !ruby/object:Gem::Version
|
175
|
-
version: '3.
|
203
|
+
version: '3.1'
|
176
204
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
205
|
requirements:
|
178
206
|
- - ">="
|
@@ -180,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
180
208
|
version: '0'
|
181
209
|
requirements: []
|
182
210
|
rubygems_version: 3.3.27
|
183
|
-
signing_key:
|
211
|
+
signing_key:
|
184
212
|
specification_version: 4
|
185
213
|
summary: WinRM File System
|
186
214
|
test_files: []
|