r-train 0.9.4 → 0.9.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
  SHA1:
3
- metadata.gz: 9d2fed9f8df330e399ebcdc9fb4bf54d54e211c6
4
- data.tar.gz: 188c391502ea0ec079707863f5d36a70ee76d388
3
+ metadata.gz: 1d0d1580a540541055d89da66ae4d90b97e85162
4
+ data.tar.gz: b228d1944aa2b7201223ad47897033ca6e6a531c
5
5
  SHA512:
6
- metadata.gz: bcc3d7a32ba560692852d0d43079d5b2e743ac2a0f4a1acf975adeb99709f915d40a5a21c3fb0862fe5d82394ccf0310dd0f2a7ff21fe66f01ab320b505e4d67
7
- data.tar.gz: dbb31f983a9ae7011a1a74df2cc322cbc59357d8fc88419a7435533591e501901064aa69576578d53a7e0e455a45314684f752bcff6c6e957add4d20c89249be
6
+ metadata.gz: d189e9a16f00e5921e7cdd3c15610c35ccdfa70cc969ec82e59e440b2dae214dd92ae65dbd89f5e9dbdc2b8bbf29cd53aedef8dab73bd6cbbadc2b1f321c9f20
7
+ data.tar.gz: 4a78e3f8dd1b22e3405003e882de552bf7c62ee1c70e491dd36c673248859c0aa566f9043248428d99ce0b52b7f65c7f8151b550ed68ea5f3e5b6e51ae39e905
@@ -1,30 +1,51 @@
1
1
  # Change Log
2
2
 
3
- ## [0.9.4](https://github.com/chef/train/tree/0.9.4) (2016-01-15)
4
- [Full Changelog](https://github.com/chef/train/compare/v0.9.3...0.9.4)
3
+ ## [0.9.5](https://github.com/chef/train/tree/0.9.5) (2016-01-25)
4
+ [Full Changelog](https://github.com/chef/train/compare/v0.9.4...0.9.5)
5
+
6
+ **Implemented enhancements:**
7
+
8
+ - use minitest for windows tests [\#56](https://github.com/chef/train/pull/56) ([chris-rock](https://github.com/chris-rock))
9
+ - use negotiate auth for winrm and not basic\_auth [\#55](https://github.com/chef/train/pull/55) ([mwrock](https://github.com/mwrock))
10
+ - bugfix: pin net-ssh 2.9 in gem file [\#54](https://github.com/chef/train/pull/54) ([chris-rock](https://github.com/chris-rock))
11
+ - Add appveyor and Windows test [\#53](https://github.com/chef/train/pull/53) ([chris-rock](https://github.com/chris-rock))
12
+ - Deprecating winrm-tansport gem [\#46](https://github.com/chef/train/pull/46) ([mwrock](https://github.com/mwrock))
5
13
 
6
14
  **Fixed bugs:**
7
15
 
8
- - bugfix: command wrapper always return nil [\#50](https://github.com/chef/train/pull/50) ([chris-rock](https://github.com/chris-rock))
16
+ - Cannot install train on Windows with ChefDK if username \>9 chars in length due to spec filename lengths in docker-api gem. [\#28](https://github.com/chef/train/issues/28)
17
+ - Properly wrap commands in powershell for local backend [\#57](https://github.com/chef/train/pull/57) ([chris-rock](https://github.com/chris-rock))
18
+ - Copying https://github.com/test-kitchen/test-kitchen/pull/919 to this repo [\#52](https://github.com/chef/train/pull/52) ([tyler-ball](https://github.com/tyler-ball))
9
19
 
10
- **Merged pull requests:**
20
+ ## [v0.9.4](https://github.com/chef/train/tree/v0.9.4) (2016-01-15)
21
+ [Full Changelog](https://github.com/chef/train/compare/v0.9.3...v0.9.4)
22
+
23
+ **Implemented enhancements:**
11
24
 
12
25
  - 0.9.3 is empty on Windows [\#48](https://github.com/chef/train/pull/48) ([tyler-ball](https://github.com/tyler-ball))
13
26
  - Updating to the latest release of net-ssh to consume https://github.com/net-ssh/net-ssh/pull/280 [\#47](https://github.com/chef/train/pull/47) ([tyler-ball](https://github.com/tyler-ball))
14
27
 
28
+ **Fixed bugs:**
29
+
30
+ - bugfix: command wrapper always return nil [\#50](https://github.com/chef/train/pull/50) ([chris-rock](https://github.com/chris-rock))
31
+
32
+ **Merged pull requests:**
33
+
34
+ - 0.9.4 [\#51](https://github.com/chef/train/pull/51) ([chris-rock](https://github.com/chris-rock))
35
+
15
36
  ## [v0.9.3](https://github.com/chef/train/tree/v0.9.3) (2016-01-03)
16
37
  [Full Changelog](https://github.com/chef/train/compare/v0.9.2...v0.9.3)
17
38
 
18
39
  **Implemented enhancements:**
19
40
 
41
+ - introduce `mounted` as a separate method to retrieve the content [\#44](https://github.com/chef/train/pull/44) ([chris-rock](https://github.com/chris-rock))
20
42
  - Support for local transport on Windows [\#43](https://github.com/chef/train/pull/43) ([chris-rock](https://github.com/chris-rock))
21
43
  - Split integration test preparation from executing [\#42](https://github.com/chef/train/pull/42) ([chris-rock](https://github.com/chris-rock))
44
+ - Support for AIX and targeted SSH testing [\#41](https://github.com/chef/train/pull/41) ([foobarbam](https://github.com/foobarbam))
22
45
 
23
46
  **Merged pull requests:**
24
47
 
25
48
  - 0.9.3 [\#45](https://github.com/chef/train/pull/45) ([chris-rock](https://github.com/chris-rock))
26
- - introduce `mounted` as a separate method to retrieve the content [\#44](https://github.com/chef/train/pull/44) ([chris-rock](https://github.com/chris-rock))
27
- - Support for AIX and targeted SSH testing [\#41](https://github.com/chef/train/pull/41) ([foobarbam](https://github.com/foobarbam))
28
49
 
29
50
  ## [v0.9.2](https://github.com/chef/train/tree/v0.9.2) (2015-12-11)
30
51
  [Full Changelog](https://github.com/chef/train/compare/v0.9.1...v0.9.2)
data/README.md CHANGED
@@ -89,6 +89,25 @@ puts conn.file('/proc/version').content
89
89
  conn.close
90
90
  ```
91
91
 
92
+ # Testing
93
+
94
+ We perform `unit`, `integration` and `windows` tests.
95
+
96
+ * `unit` tests ensure the intended behaviour of the implementation
97
+ * `integration` tests run against VMs and docker containers
98
+ * `windows` tests that run on appveyor for windows integration tests
99
+
100
+ ## Windows
101
+
102
+ ```
103
+ # run windows tests
104
+ bundle exec rake test:windows
105
+
106
+ # run single tests
107
+ bundle exec ruby -I .\test\windows\ .\test\windows\local_test.rb
108
+ ```
109
+
110
+
92
111
  # Kudos and Contributors
93
112
 
94
113
  Train is heavily based on the work of:
data/Rakefile CHANGED
@@ -33,6 +33,12 @@ namespace :test do
33
33
  sh('sh', '-c', "cd #{path} && config=test-runner.yaml ruby -I ../../lib docker_test.rb tests/*")
34
34
  end
35
35
 
36
+ task :windows do
37
+ Dir.glob('test/windows/*_test.rb').all? do |file|
38
+ sh(Gem.ruby, '-w', '-I .\test\windows', file)
39
+ end or fail 'Failures'
40
+ end
41
+
36
42
  task :vm do
37
43
  concurrency = ENV['CONCURRENCY'] || 4
38
44
  path = File.join(File.dirname(__FILE__), 'test', 'integration')
@@ -99,12 +99,20 @@ module Train::Extras
99
99
  def initialize(backend, options)
100
100
  @backend = backend
101
101
  validate_options(options)
102
+ end
102
103
 
103
- @prefix = 'powershell '
104
+ def run(script)
105
+ # wrap the script to ensure we always run it via powershell
106
+ # especially in local mode, we cannot be sure that we get a Powershell
107
+ # we may just get a `cmd`.
108
+ # TODO: we may want to opt for powershell.exe -command instead of `encodeCommand`
109
+ "powershell -encodedCommand #{WinRM::PowershellScript.new(safe_script(script)).encoded}"
104
110
  end
105
111
 
106
- def run(command)
107
- @prefix + command
112
+ # reused from https://github.com/WinRb/WinRM/blob/master/lib/winrm/command_executor.rb
113
+ # suppress the progress stream from leaking to stderr
114
+ def safe_script(script)
115
+ "$ProgressPreference='SilentlyContinue';" + script
108
116
  end
109
117
 
110
118
  def to_s
@@ -20,6 +20,7 @@
20
20
 
21
21
  require 'net/ssh'
22
22
  require 'net/scp'
23
+ require 'timeout'
23
24
 
24
25
  class Train::Transports::SSH
25
26
  # A Connection instance can be generated and re-generated, given new
@@ -35,7 +35,7 @@ module Train::Transports
35
35
  # @author Matt Wrock <matt@mattwrock.com>
36
36
  # @author Salim Afiune <salim@afiunemaya.com.mx>
37
37
  # @author Fletcher Nichol <fnichol@nichol.ca>
38
- class WinRM < Train.plugin(1) # rubocop:disable Metrics/ClassLength
38
+ class WinRM < Train.plugin(1)
39
39
  name 'winrm'
40
40
 
41
41
  autoload :Connection, 'train/transports/winrm_connection'
@@ -89,7 +89,7 @@ module Train::Transports
89
89
  opts[:endpoint] = "#{scheme}://#{opts[:host]}:#{port}/#{path}"
90
90
  end
91
91
 
92
- WINRM_TRANSPORT_SPEC_VERSION = '~> 1.0'.freeze
92
+ WINRM_FS_SPEC_VERSION = '~> 0.3'.freeze
93
93
 
94
94
  # Builds the hash of options needed by the Connection object on
95
95
  # construction.
@@ -100,9 +100,9 @@ module Train::Transports
100
100
  def connection_options(opts)
101
101
  {
102
102
  logger: logger,
103
- winrm_transport: :plaintext,
104
- disable_sspi: true,
105
- basic_auth_only: true,
103
+ winrm_transport: :negotiate,
104
+ disable_sspi: false,
105
+ basic_auth_only: false,
106
106
  endpoint: opts[:endpoint],
107
107
  user: opts[:user],
108
108
  pass: opts[:password],
@@ -132,39 +132,35 @@ module Train::Transports
132
132
 
133
133
  # (see Base#load_needed_dependencies!)
134
134
  def load_needed_dependencies!
135
- spec_version = WINRM_TRANSPORT_SPEC_VERSION.dup
136
- logger.debug('Winrm Transport requested,' \
137
- " loading WinRM::Transport gem (#{spec_version})")
138
- gem 'winrm-transport', spec_version
139
- first_load = require 'winrm/transport/version'
135
+ spec_version = WINRM_FS_SPEC_VERSION.dup
136
+ logger.debug('winrm-fs requested,' \
137
+ " loading WinRM::FS gem (#{spec_version})")
138
+ gem 'winrm-fs', spec_version
139
+ first_load = require 'winrm-fs'
140
140
  load_winrm_transport!
141
141
 
142
- version = ::WinRM::Transport::VERSION
143
142
  if first_load
144
- logger.debug("WinRM::Transport #{version} library loaded")
143
+ logger.debug('WinRM::FS library loaded')
145
144
  else
146
- logger.debug("WinRM::Transport #{version} previously loaded")
145
+ logger.debug('WinRM::FS previously loaded')
147
146
  end
148
147
  rescue LoadError => e
149
148
  logger.fatal(
150
- "The `winrm-transport' gem is missing and must" \
149
+ "The `winrm-fs' gem is missing and must" \
151
150
  ' be installed or cannot be properly activated. Run' \
152
- " `gem install winrm-transport --version '#{spec_version}'`" \
151
+ " `gem install winrm-fs --version '#{spec_version}'`" \
153
152
  ' or add the following to your Gemfile if you are using Bundler:' \
154
- " `gem 'winrm-transport', '#{spec_version}'`.",
153
+ " `gem 'winrm-fs', '#{spec_version}'`.",
155
154
  )
156
155
  raise Train::UserError,
157
- "Could not load or activate WinRM::Transport (#{e.message})"
156
+ "Could not load or activate WinRM::FS (#{e.message})"
158
157
  end
159
158
 
160
159
  # Load WinRM::Transport code.
161
160
  #
162
161
  # @api private
163
162
  def load_winrm_transport!
164
- silence_warnings { require 'winrm' }
165
- require 'winrm/transport/shell_closer'
166
- require 'winrm/transport/command_executor'
167
- require 'winrm/transport/file_transporter'
163
+ silence_warnings { require 'winrm-fs' }
168
164
  end
169
165
 
170
166
  # Return the last saved WinRM connection instance.
@@ -27,7 +27,7 @@ class Train::Transports::WinRM
27
27
  # host such as executing commands, transferring files, etc.
28
28
  #
29
29
  # @author Fletcher Nichol <fnichol@nichol.ca>
30
- class Connection < BaseConnection # rubocop:disable Metrics/ClassLength
30
+ class Connection < BaseConnection
31
31
  def initialize(options)
32
32
  super(options)
33
33
  @endpoint = @options.delete(:endpoint)
@@ -42,10 +42,8 @@ class Train::Transports::WinRM
42
42
  # (see Base::Connection#close)
43
43
  def close
44
44
  return if @session.nil?
45
- shell_id = session.shell
46
- logger.debug("[WinRM] closing remote shell #{shell_id} on #{self}")
45
+
47
46
  session.close
48
- logger.debug("[WinRM] remote shell #{shell_id} closed")
49
47
  ensure
50
48
  @session = nil
51
49
  end
@@ -95,10 +93,8 @@ class Train::Transports::WinRM
95
93
  def wait_until_ready
96
94
  delay = 3
97
95
  session(
98
- retries: @max_wait_until_ready / delay,
99
- delay: delay,
100
- message: "Waiting for WinRM service on #{endpoint}, "\
101
- "retrying in #{delay} seconds",
96
+ retry_limit: @max_wait_until_ready / delay,
97
+ retry_delay: delay,
102
98
  )
103
99
  execute(PING_COMMAND.dup)
104
100
  end
@@ -107,16 +103,6 @@ class Train::Transports::WinRM
107
103
 
108
104
  PING_COMMAND = "Write-Host '[WinRM] Established\n'".freeze
109
105
 
110
- RESCUE_EXCEPTIONS_ON_ESTABLISH = lambda do
111
- [
112
- Errno::EACCES, Errno::EADDRINUSE, Errno::ECONNREFUSED,
113
- Errno::ECONNRESET, Errno::ENETUNREACH, Errno::EHOSTUNREACH,
114
- ::WinRM::WinRMHTTPTransportError, ::WinRM::WinRMAuthorizationError,
115
- HTTPClient::KeepAliveDisconnected,
116
- HTTPClient::ConnectTimeoutError
117
- ].freeze
118
- end
119
-
120
106
  # Create a local RDP document and return it
121
107
  #
122
108
  # @param opts [Hash] configuration options
@@ -136,35 +122,10 @@ class Train::Transports::WinRM
136
122
  content
137
123
  end
138
124
 
139
- # Establish a remote shell session on the remote host.
140
- #
141
- # @param opts [Hash] retry options
142
- # @option opts [Integer] :retries the number of times to retry before
143
- # failing
144
- # @option opts [Float] :delay the number of seconds to wait until
145
- # attempting a retry
146
- # @option opts [String] :message an optional message to be logged on
147
- # debug (overriding the default) when a rescuable exception is raised
148
- # @return [Winrm::CommandExecutor] the command executor session
149
- # @api private
150
- def establish_shell(opts)
151
- service_args = [@endpoint, @winrm_transport, options]
152
- @service = ::WinRM::WinRMWebService.new(*service_args)
153
- closer = WinRM::Transport::ShellCloser.new("#{self}", false, service_args)
154
-
155
- executor = WinRM::Transport::CommandExecutor.new(@service, logger, closer)
156
- retryable(opts) do
157
- logger.debug("[WinRM] opening remote shell on #{self}")
158
- shell_id = executor.open
159
- logger.debug("[WinRM] remote shell #{shell_id} is open on #{self}")
160
- end
161
- executor
162
- end
163
-
164
125
  # @return [Winrm::FileTransporter] a file transporter
165
126
  # @api private
166
127
  def file_transporter
167
- @file_transporter ||= WinRM::Transport::FileTransporter.new(session, logger)
128
+ @file_transporter ||= WinRM::FS::Core::FileTransporter.new(session)
168
129
  end
169
130
 
170
131
  # Builds a `LoginCommand` for use by Linux-based platforms.
@@ -196,38 +157,6 @@ class Train::Transports::WinRM
196
157
  LoginCommand.new('mstsc', rdp_doc)
197
158
  end
198
159
 
199
- # Yields to a block and reties the block if certain rescuable
200
- # exceptions are raised.
201
- #
202
- # @param opts [Hash] retry options
203
- # @option opts [Integer] :retries the number of times to retry before
204
- # failing
205
- # @option opts [Float] :delay the number of seconds to wait until
206
- # attempting a retry
207
- # @option opts [String] :message an optional message to be logged on
208
- # debug (overriding the default) when a rescuable exception is raised
209
- # @return [Winrm::CommandExecutor] the command executor session
210
- # @api private
211
- def retryable(opts)
212
- yield
213
- rescue *RESCUE_EXCEPTIONS_ON_ESTABLISH.call => e
214
- if (opts[:retries] -= 1) <= 0
215
- logger.warn("[WinRM] connection failed, terminating (#{e.inspect})")
216
- raise
217
- end
218
-
219
- if opts[:message]
220
- logger.debug("[WinRM] connection failed (#{e.inspect})")
221
- message = opts[:message]
222
- else
223
- message = '[WinRM] connection failed, '\
224
- "retrying in #{opts[:delay]} seconds (#{e.inspect})"
225
- end
226
- logger.info(message)
227
- sleep(opts[:delay])
228
- retry
229
- end
230
-
231
160
  # Establishes a remote shell session, or establishes one when invoked
232
161
  # the first time.
233
162
  #
@@ -235,10 +164,17 @@ class Train::Transports::WinRM
235
164
  # @return [Winrm::CommandExecutor] the command executor session
236
165
  # @api private
237
166
  def session(retry_options = {})
238
- @session ||= establish_shell({
239
- retries: @connection_retries.to_i,
240
- delay: @connection_retry_sleep.to_i,
241
- }.merge(retry_options))
167
+ @session ||= begin
168
+ opts = {
169
+ retry_limit: @connection_retries.to_i,
170
+ retry_delay: @connection_retry_sleep.to_i,
171
+ }.merge(retry_options)
172
+
173
+ service_args = [@endpoint, @winrm_transport, options.merge(opts)]
174
+ @service = ::WinRM::WinRMWebService.new(*service_args)
175
+ @service.logger = logger
176
+ @service.create_executor
177
+ end
242
178
  end
243
179
 
244
180
  # String representation of object, reporting its connection details and
@@ -3,5 +3,5 @@
3
3
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
4
4
 
5
5
  module Train
6
- VERSION = '0.9.4'
6
+ VERSION = '0.9.5'
7
7
  end
@@ -51,6 +51,7 @@ describe 'powershell command' do
51
51
 
52
52
  it 'wraps commands in powershell' do
53
53
  lc = cls.new(backend, {})
54
- lc.run(cmd).must_equal "powershell #{cmd}"
54
+ tmp =
55
+ lc.run(cmd).must_equal "powershell -encodedCommand #{WinRM::PowershellScript.new('$ProgressPreference=\'SilentlyContinue\';' + cmd).encoded}"
55
56
  end
56
57
  end
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+
5
+ require 'minitest/autorun'
6
+ require 'minitest/spec'
7
+ require 'mocha/setup'
8
+ require 'train'
9
+
10
+ describe 'windows local command' do
11
+ let(:conn) {
12
+ # get final config
13
+ target_config = Train.target_config({})
14
+ # initialize train
15
+ backend = Train.create('local', target_config)
16
+
17
+ # start or reuse a connection
18
+ conn = backend.connection
19
+ conn
20
+ }
21
+
22
+ it 'verify os' do
23
+ os = conn.os
24
+ os[:name].must_equal nil
25
+ os[:family].must_equal "windows"
26
+ os[:release].must_equal "Server 2012 R2"
27
+ os[:arch].must_equal nil
28
+ end
29
+
30
+ it 'run echo test' do
31
+ cmd = conn.run_command('Write-Output "test"')
32
+ cmd.stdout.must_equal "test\r\n"
33
+ cmd.stderr.must_equal ''
34
+ end
35
+
36
+ it 'use powershell piping' do
37
+ cmd = conn.run_command("New-Object -Type PSObject | Add-Member -MemberType NoteProperty -Name A -Value (Write-Output 'PropertyA') -PassThru | Add-Member -MemberType NoteProperty -Name B -Value (Write-Output 'PropertyB') -PassThru | ConvertTo-Json")
38
+ cmd.stdout.must_equal "{\r\n \"A\": \"PropertyA\",\r\n \"B\": \"PropertyB\"\r\n}\r\n"
39
+ cmd.stderr.must_equal ''
40
+ end
41
+
42
+ after do
43
+ # close the connection
44
+ conn.close
45
+ end
46
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+
5
+ require 'minitest/autorun'
6
+ require 'minitest/spec'
7
+ require 'mocha/setup'
8
+ require 'train'
9
+
10
+ describe 'windows local command' do
11
+ let(:conn) {
12
+ # get final config
13
+ target_config = Train.target_config({
14
+ target: ENV['train_target'],
15
+ password: ENV['winrm_pass'],
16
+ ssl: ENV['train_ssl'],
17
+ self_signed: true,
18
+ })
19
+
20
+ # initialize train
21
+ backend = Train.create('winrm', target_config)
22
+
23
+ # start or reuse a connection
24
+ conn = backend.connection
25
+ conn
26
+ }
27
+
28
+ it 'verify os' do
29
+ os = conn.os
30
+ os[:name].must_equal nil
31
+ os[:family].must_equal "windows"
32
+ os[:release].must_equal "Server 2012 R2"
33
+ os[:arch].must_equal nil
34
+ end
35
+
36
+ it 'run echo test' do
37
+ cmd = conn.run_command('Write-Output "test"')
38
+ cmd.stdout.must_equal "test\r\n"
39
+ cmd.stderr.must_equal ''
40
+ end
41
+
42
+ it 'use powershell piping' do
43
+ cmd = conn.run_command("New-Object -Type PSObject | Add-Member -MemberType NoteProperty -Name A -Value (Write-Output 'PropertyA') -PassThru | Add-Member -MemberType NoteProperty -Name B -Value (Write-Output 'PropertyB') -PassThru | ConvertTo-Json")
44
+ cmd.stdout.must_equal "{\r\n \"A\": \"PropertyA\",\r\n \"B\": \"PropertyB\"\r\n}\r\n"
45
+ cmd.stderr.must_equal ''
46
+ end
47
+
48
+ after do
49
+ # close the connection
50
+ conn.close
51
+ end
52
+ end
@@ -29,8 +29,8 @@ Gem::Specification.new do |spec|
29
29
  # 1.9 support is no longer needed here or for Inspec
30
30
  spec.add_dependency 'net-ssh', '>= 2.9', '< 4.0'
31
31
  spec.add_dependency 'net-scp', '~> 1.2'
32
- spec.add_dependency 'winrm', '~> 1.3'
33
- spec.add_dependency 'winrm-transport', '~> 1.0'
32
+ spec.add_dependency 'winrm', '~> 1.6'
33
+ spec.add_dependency 'winrm-fs', '~> 0.3'
34
34
  spec.add_dependency 'docker-api', '~> 1.22'
35
35
 
36
36
  spec.add_development_dependency 'rake', '~> 10.4'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r-train
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Richter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-15 00:00:00.000000000 Z
11
+ date: 2016-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -78,28 +78,28 @@ dependencies:
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '1.3'
81
+ version: '1.6'
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '1.3'
88
+ version: '1.6'
89
89
  - !ruby/object:Gem::Dependency
90
- name: winrm-transport
90
+ name: winrm-fs
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '1.0'
95
+ version: '0.3'
96
96
  type: :runtime
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '1.0'
102
+ version: '0.3'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: docker-api
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -263,7 +263,6 @@ files:
263
263
  - test/integration/.kitchen/logs/default-ubuntu-1404.log
264
264
  - test/integration/.kitchen/logs/kitchen.log
265
265
  - test/integration/Berksfile
266
- - test/integration/Berksfile.lock
267
266
  - test/integration/bootstrap.sh
268
267
  - test/integration/chefignore
269
268
  - test/integration/cookbooks/test/metadata.rb
@@ -287,7 +286,6 @@ files:
287
286
  - test/integration/tests/path_pipe_test.rb
288
287
  - test/integration/tests/path_symlink_test.rb
289
288
  - test/integration/tests/run_command_test.rb
290
- - test/tools/os.rb
291
289
  - test/unit/extras/command_wrapper_test.rb
292
290
  - test/unit/extras/file_common_test.rb
293
291
  - test/unit/extras/linux_file_test.rb
@@ -304,6 +302,8 @@ files:
304
302
  - test/unit/transports/mock_test.rb
305
303
  - test/unit/transports/ssh_test.rb
306
304
  - test/unit/version_test.rb
305
+ - test/windows/local_test.rb
306
+ - test/windows/winrm_test.rb
307
307
  - train.gemspec
308
308
  homepage: https://github.com/chef/train/
309
309
  licenses:
@@ -381,7 +381,6 @@ test_files:
381
381
  - test/integration/.kitchen/logs/default-ubuntu-1404.log
382
382
  - test/integration/.kitchen/logs/kitchen.log
383
383
  - test/integration/Berksfile
384
- - test/integration/Berksfile.lock
385
384
  - test/integration/bootstrap.sh
386
385
  - test/integration/chefignore
387
386
  - test/integration/cookbooks/test/metadata.rb
@@ -405,7 +404,6 @@ test_files:
405
404
  - test/integration/tests/path_pipe_test.rb
406
405
  - test/integration/tests/path_symlink_test.rb
407
406
  - test/integration/tests/run_command_test.rb
408
- - test/tools/os.rb
409
407
  - test/unit/extras/command_wrapper_test.rb
410
408
  - test/unit/extras/file_common_test.rb
411
409
  - test/unit/extras/linux_file_test.rb
@@ -422,3 +420,5 @@ test_files:
422
420
  - test/unit/transports/mock_test.rb
423
421
  - test/unit/transports/ssh_test.rb
424
422
  - test/unit/version_test.rb
423
+ - test/windows/local_test.rb
424
+ - test/windows/winrm_test.rb
@@ -1,8 +0,0 @@
1
- DEPENDENCIES
2
- sudo (~> 2.7.2)
3
- test
4
- path: cookbooks/test
5
-
6
- GRAPH
7
- sudo (2.7.2)
8
- test (0.0.0)
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: utf-8
3
-
4
- require 'train'
5
-
6
- train = Train.create('local')
7
-
8
- # start or reuse a connection
9
- conn = train.connection
10
- os = conn.os
11
-
12
- # get OS info
13
- conf = {
14
- name: os[:name],
15
- family: os[:family],
16
- release: os[:release],
17
- arch: os[:arch],
18
- }
19
- puts JSON.dump(conf)
20
-
21
- # close the connection
22
- conn.close