opscode-pushy-client 2.3.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.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +88 -0
  3. data/Gemfile +20 -0
  4. data/Gemfile.lock +242 -0
  5. data/LICENSE +201 -0
  6. data/README.md +43 -0
  7. data/RELEASE_PROCESS.md +105 -0
  8. data/Rakefile +42 -0
  9. data/bin/print_execution_environment +18 -0
  10. data/bin/push-apply +47 -0
  11. data/bin/pushy-client +8 -0
  12. data/bin/pushy-service-manager +19 -0
  13. data/jenkins/jenkins_run_tests.sh +9 -0
  14. data/keys/client_private.pem +27 -0
  15. data/keys/server_public.pem +9 -0
  16. data/lib/pushy_client.rb +268 -0
  17. data/lib/pushy_client/cli.rb +168 -0
  18. data/lib/pushy_client/heartbeater.rb +153 -0
  19. data/lib/pushy_client/job_runner.rb +316 -0
  20. data/lib/pushy_client/periodic_reconfigurer.rb +62 -0
  21. data/lib/pushy_client/protocol_handler.rb +508 -0
  22. data/lib/pushy_client/version.rb +23 -0
  23. data/lib/pushy_client/whitelist.rb +66 -0
  24. data/lib/pushy_client/win32.rb +27 -0
  25. data/lib/pushy_client/windows_service.rb +253 -0
  26. data/omnibus/Berksfile +12 -0
  27. data/omnibus/Gemfile +15 -0
  28. data/omnibus/Gemfile.lock +232 -0
  29. data/omnibus/LICENSE +201 -0
  30. data/omnibus/README.md +141 -0
  31. data/omnibus/acceptance/Berksfile +6 -0
  32. data/omnibus/acceptance/Berksfile.lock +35 -0
  33. data/omnibus/acceptance/Makefile +13 -0
  34. data/omnibus/acceptance/README.md +29 -0
  35. data/omnibus/acceptance/metadata.rb +12 -0
  36. data/omnibus/acceptance/recipes/chef-server-user-org.rb +31 -0
  37. data/omnibus/config/projects/push-jobs-client.rb +83 -0
  38. data/omnibus/config/software/opscode-pushy-client.rb +78 -0
  39. data/omnibus/files/mapfiles/solaris +18 -0
  40. data/omnibus/files/openssl-customization/windows/ssl_env_hack.rb +34 -0
  41. data/omnibus/omnibus.rb +54 -0
  42. data/omnibus/package-scripts/push-jobs-client/postinst +55 -0
  43. data/omnibus/package-scripts/push-jobs-client/postrm +39 -0
  44. data/omnibus/resources/push-jobs-client/dmg/background.png +0 -0
  45. data/omnibus/resources/push-jobs-client/dmg/icon.png +0 -0
  46. data/omnibus/resources/push-jobs-client/msi/assets/LICENSE.rtf +197 -0
  47. data/omnibus/resources/push-jobs-client/msi/assets/banner_background.bmp +0 -0
  48. data/omnibus/resources/push-jobs-client/msi/assets/dialog_background.bmp +0 -0
  49. data/omnibus/resources/push-jobs-client/msi/assets/oc.ico +0 -0
  50. data/omnibus/resources/push-jobs-client/msi/assets/oc_16x16.ico +0 -0
  51. data/omnibus/resources/push-jobs-client/msi/assets/oc_32x32.ico +0 -0
  52. data/omnibus/resources/push-jobs-client/msi/localization-en-us.wxl.erb +26 -0
  53. data/omnibus/resources/push-jobs-client/msi/parameters.wxi.erb +9 -0
  54. data/omnibus/resources/push-jobs-client/msi/source.wxs.erb +138 -0
  55. data/omnibus/resources/push-jobs-client/pkg/background.png +0 -0
  56. data/omnibus/resources/push-jobs-client/pkg/license.html.erb +202 -0
  57. data/omnibus/resources/push-jobs-client/pkg/welcome.html.erb +5 -0
  58. data/opscode-pushy-client.gemspec +28 -0
  59. data/pkg/opscode-pushy-client-2.3.0.gem +0 -0
  60. data/spec/pushy_client/protocol_handler_spec.rb +48 -0
  61. data/spec/pushy_client/whitelist_spec.rb +70 -0
  62. data/spec/spec_helper.rb +12 -0
  63. metadata +235 -0
@@ -0,0 +1,23 @@
1
+ # @copyright Copyright 2014-2017, Chef Software Inc. All Rights Reserved.
2
+ #
3
+ # This file is provided to you under the Apache License,
4
+ # Version 2.0 (the "License"); you may not use this file
5
+ # except in compliance with the License. You may obtain
6
+ # a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing,
11
+ # software distributed under the License is distributed on an
12
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
13
+ # KIND, either express or implied. See the License for the
14
+ # specific language governing permissions and limitations
15
+ # under the License.
16
+ #
17
+
18
+ # Note: the version must also be updated in
19
+ # omnibus/config/projects/push-jobs-client.rb
20
+ class PushyClient
21
+ VERSION = "2.3.0"
22
+ PROTOCOL_VERSION = "2.0"
23
+ end
@@ -0,0 +1,66 @@
1
+ # @copyright Copyright 2014 Chef Software, Inc. All Rights Reserved.
2
+ #
3
+ # This file is provided to you under the Apache License,
4
+ # Version 2.0 (the "License"); you may not use this file
5
+ # except in compliance with the License. You may obtain
6
+ # a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing,
11
+ # software distributed under the License is distributed on an
12
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
13
+ # KIND, either express or implied. See the License for the
14
+ # specific language governing permissions and limitations
15
+ # under the License.
16
+ #
17
+
18
+ require "chef/log"
19
+
20
+ class PushyClient
21
+ class Whitelist
22
+
23
+ attr_accessor :whitelist
24
+
25
+ def initialize(whitelist)
26
+ @whitelist = whitelist
27
+ end
28
+
29
+ def [](argument)
30
+ command = process(argument)
31
+ node_name = "UNKNOWN"
32
+ job_id = "UNKNOWN"
33
+ Chef::Log.info("[#{node_name}] Job #{job_id}: whitelist '#{argument}' to '#{command}'")
34
+ command
35
+ end
36
+
37
+ def process(argument)
38
+ # If we have an exact match, use it
39
+ if whitelist.has_key?(argument)
40
+ return whitelist[argument]
41
+ else
42
+ whitelist.keys.each do |key|
43
+ if key.kind_of?(Regexp)
44
+ if key.match(argument)
45
+ value = whitelist[key]
46
+ if value.kind_of?(Hash)
47
+ # Need a deep copy, don't want to change the global value
48
+ new_value = Marshal.load(Marshal.dump(value))
49
+ new_value[:command_line] = argument.gsub(key, value[:command_line])
50
+ return new_value
51
+ else
52
+ return argument.gsub(key, value)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ nil
60
+ end
61
+
62
+ def method_missing(method, *args, &block)
63
+ @whitelist.send(method, *args, &block)
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,27 @@
1
+ #
2
+ # Author:: John Keiser (<jkeiser@opscode.com>)
3
+ # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require 'win32/process'
19
+
20
+ module Process
21
+ extend FFI::Library
22
+ # Override WaitForSingleObject with :blocking => true, so that Process.wait
23
+ # (from win32-process) will not block the Ruby interpreter while waiting for
24
+ # the process to complete.
25
+ ffi_lib :kernel32
26
+ attach_function :WaitForSingleObject, [:ulong, :ulong], :ulong, :blocking => true
27
+ end
@@ -0,0 +1,253 @@
1
+ #
2
+ # Author:: Christopher Maier (<maier@lambda.local>)
3
+ # Copyright:: Copyright (c) 2011 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/application'
20
+ require 'chef/config'
21
+ require 'chef/log'
22
+ require 'chef/rest'
23
+ require 'mixlib/cli'
24
+ require 'win32/daemon'
25
+ require_relative '../pushy_client'
26
+ require_relative '../pushy_client/cli'
27
+ require_relative '../pushy_client/version'
28
+
29
+ class PushyClient
30
+ class WindowsService < ::Win32::Daemon
31
+ include Mixlib::CLI
32
+
33
+ option :config_file,
34
+ :short => "-c CONFIG",
35
+ :long => "--config CONFIG",
36
+ :default => PushyClient::CLI.find_default_config,
37
+ :description => "The configuration file to use"
38
+
39
+ option :log_location,
40
+ :short => "-L LOGLOCATION",
41
+ :long => "--logfile LOGLOCATION",
42
+ :description => "Set the log file location",
43
+ :default => "#{ENV['SYSTEMDRIVE']}/chef/push-client.log"
44
+
45
+ option :allow_unencrypted,
46
+ :long => "--allow_unencrypted",
47
+ :boolean => true,
48
+ :description => "Allow unencrypted connections to 1.x servers"
49
+
50
+ def service_init
51
+ @service_action_mutex = Mutex.new
52
+ @service_signal = ConditionVariable.new
53
+
54
+ reconfigure
55
+ Chef::Log.info("Chef Push Jobs Client Service initialized")
56
+ end
57
+
58
+ def service_main(*startup_parameters)
59
+ begin
60
+ @service_action_mutex.synchronize do
61
+ Chef::Log.info("Push Client version: #{::PushyClient::VERSION}")
62
+ Chef::Log.info("Push Client started as service with parameters: #{startup_parameters}")
63
+ Chef::Log.info("Push Client passed: #{ARGV.join(', ')}")
64
+ reconfigure(startup_parameters)
65
+
66
+ # Lifted from PushyClient::CLI
67
+ ohai = Ohai::System.new
68
+ ohai.load_plugins
69
+ ohai.run_plugins(true, ['os', 'hostname'])
70
+
71
+ @client = PushyClient.new(
72
+ :chef_server_url => Chef::Config[:chef_server_url],
73
+ :client_key => Chef::Config[:client_key],
74
+ :node_name => Chef::Config[:node_name] || ohai[:fqdn] || ohai[:hostname],
75
+ :whitelist => Chef::Config[:whitelist] || { 'chef-client' => 'chef-client' },
76
+ :hostname => ohai[:hostname],
77
+ :allow_unencrypted => Chef::Config[:allow_unencrypted]
78
+ )
79
+
80
+ @client.start
81
+ Chef::Log.info("pushy-client is started...")
82
+
83
+ # Wait until we get service exit signal
84
+ @service_signal.wait(@service_action_mutex)
85
+ Chef::Log.debug("Stopping pushy-client...")
86
+ @client.stop
87
+ end
88
+
89
+ rescue Exception => e
90
+ Chef::Log.error("#{e.class}: #{e}")
91
+ Chef::Log.error("Terminating pushy-client service...")
92
+ Chef::Application.debug_stacktrace(e)
93
+ end
94
+
95
+ Chef::Log.debug("Exiting service...")
96
+ end
97
+
98
+ ################################################################################
99
+ # Control Signal Callback Methods
100
+ ################################################################################
101
+
102
+ def service_stop
103
+ Chef::Log.info("STOP request from operating system.")
104
+ while !@service_action_mutex.try_lock do
105
+ Chef::Log.info("Pushy is being initialized waiting for initialization to complete.")
106
+ sleep(1)
107
+ end
108
+
109
+ @service_signal.signal
110
+ @service_action_mutex.unlock
111
+ end
112
+
113
+ def service_pause
114
+ Chef::Log.info("PAUSE request from operating system.")
115
+ Chef::Log.info("Pushy Client Service doesn't support PAUSE.")
116
+ Chef::Log.info("Pushy Client Service is still running.")
117
+ end
118
+
119
+ def service_resume
120
+ Chef::Log.info("RESUME signal received from the OS.")
121
+ end
122
+
123
+ def service_shutdown
124
+ Chef::Log.info("SHUTDOWN signal received from the OS.")
125
+
126
+ # Treat shutdown similar to stop.
127
+
128
+ service_stop
129
+ end
130
+
131
+ ################################################################################
132
+ # Internal Methods
133
+ ################################################################################
134
+
135
+ private
136
+
137
+ def apply_config(config_file_path)
138
+ Chef::Config.from_file(config_file_path)
139
+ Chef::Config.merge!(config)
140
+ end
141
+
142
+ # Lifted from Chef::Application, with addition of optional startup parameters
143
+ # for playing nicely with Windows Services and logic from PushyClient::CLI
144
+ def reconfigure(startup_parameters=[])
145
+ Chef::Config[:force_logger] = true
146
+
147
+ configure_chef startup_parameters
148
+ configure_logging
149
+ end
150
+
151
+ # Lifted from application.rb
152
+ # See application.rb for related comments.
153
+
154
+ def configure_logging
155
+ Chef::Log.init(Chef::Config[:log_location])
156
+ if want_additional_logger?
157
+ configure_stdout_logger
158
+ end
159
+ Chef::Log.level = resolve_log_level
160
+ end
161
+
162
+ def configure_stdout_logger
163
+ stdout_logger = Logger.new(STDOUT)
164
+ STDOUT.sync = true
165
+ stdout_logger.formatter = Chef::Log.logger.formatter
166
+ Chef::Log.loggers << stdout_logger
167
+ end
168
+
169
+ # Based on config and whether or not STDOUT is a tty, should we setup a
170
+ # secondary logger for stdout?
171
+ def want_additional_logger?
172
+ ( Chef::Config[:log_location] != STDOUT ) && STDOUT.tty? && (!Chef::Config[:daemonize]) && (Chef::Config[:force_logger])
173
+ end
174
+
175
+ # Use of output formatters is assumed if `force_formatter` is set or if
176
+ # `force_logger` is not set and STDOUT is to a console (tty)
177
+ def using_output_formatter?
178
+ Chef::Config[:force_formatter] || (!Chef::Config[:force_logger] && STDOUT.tty?)
179
+ end
180
+
181
+ def auto_log_level?
182
+ Chef::Config[:log_level] == :auto
183
+ end
184
+
185
+ # if log_level is `:auto`, convert it to :warn (when using output formatter)
186
+ # or :info (no output formatter). See also +using_output_formatter?+
187
+ def resolve_log_level
188
+ if auto_log_level?
189
+ if using_output_formatter?
190
+ :warn
191
+ else
192
+ :info
193
+ end
194
+ else
195
+ Chef::Config[:log_level]
196
+ end
197
+ end
198
+
199
+ def configure_chef(startup_parameters)
200
+ # Bit of a hack ahead:
201
+ # It is possible to specify a service's binary_path_name with arguments, like "foo.exe -x argX".
202
+ # It is also possible to specify startup parameters separately, either via the the Services manager
203
+ # or by using the registry (I think).
204
+
205
+ # In order to accommodate all possible sources of parameterization, we first parse any command line
206
+ # arguments. We then parse any startup parameters. This works, because Mixlib::CLI reuses its internal
207
+ # 'config' hash; thus, anything in startup parameters will override any command line parameters that
208
+ # might be set via the service's binary_path_name
209
+ #
210
+ # All these parameters then get layered on top of those from Chef::Config
211
+
212
+ parse_options # Operates on ARGV by default
213
+ parse_options startup_parameters
214
+
215
+ Chef::Log.info("Push Client using default config file path: '#{config[:config_file]}'")
216
+
217
+ begin
218
+ case config[:config_file]
219
+ when /^(http|https):\/\//
220
+ begin
221
+ # First we will try Chef::HTTP::SimpleJSON as preference to Chef::REST
222
+ require 'chef/http/simple_json'
223
+ Chef::HTTP::SimpleJSON.new("").streaming_request(config[:config_file]) { |f| apply_config(f.path) }
224
+ rescue LoadError
225
+ require 'chef/rest'
226
+ Chef::REST.new("", nil, nil).fetch(config[:config_file]) { |f| apply_config(f.path) }
227
+ end
228
+ else
229
+ ::File::open(config[:config_file]) { |f| apply_config(f.path) }
230
+ end
231
+ rescue Errno::ENOENT => error
232
+ Chef::Log.warn("*****************************************")
233
+ Chef::Log.warn("Did not find config file: #{config[:config_file]}, using command line options.")
234
+ Chef::Log.warn("*****************************************")
235
+
236
+ Chef::Config.merge!(config)
237
+ rescue SocketError => error
238
+ Chef::Application.fatal!("Error getting config file #{Chef::Config[:config_file]}", 2)
239
+ rescue Chef::Exceptions::ConfigurationError => error
240
+ Chef::Application.fatal!("Error processing config file #{Chef::Config[:config_file]} with error #{error.message}", 2)
241
+ rescue Exception => error
242
+ Chef::Application.fatal!("Unknown error processing config file #{Chef::Config[:config_file]} with error #{error.message}", 2)
243
+ end
244
+ end
245
+
246
+ end
247
+ end
248
+
249
+ # To run this file as a service, it must be called as a script from within
250
+ # the Windows Service framework. In that case, kick off the main loop!
251
+ if __FILE__ == $0
252
+ PushyClient::WindowsService.mainloop
253
+ end
@@ -0,0 +1,12 @@
1
+ source 'https://supermarket.chef.io'
2
+
3
+ cookbook 'omnibus'
4
+
5
+ # Uncomment to use the latest version of the Omnibus cookbook from GitHub
6
+ # cookbook 'omnibus', github: 'opscode-cookbooks/omnibus'
7
+
8
+ group :integration do
9
+ cookbook 'apt', '~> 2.3'
10
+ cookbook 'freebsd', '~> 0.1'
11
+ cookbook 'yum-epel', '~> 0.3'
12
+ end
@@ -0,0 +1,15 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'omnibus', git: 'https://github.com/chef/omnibus.git'
4
+ gem 'omnibus-software', git: 'https://github.com/chef/omnibus-software.git'
5
+
6
+ # This development group is installed by default when you run `bundle install`,
7
+ # but if you are using Omnibus in a CI-based infrastructure, you do not need
8
+ # the Test Kitchen-based build lab. You can skip these unnecessary dependencies
9
+ # by running `bundle install --without development` to speed up build times.
10
+ group :development do
11
+ gem 'berkshelf'
12
+ gem 'test-kitchen'
13
+ gem 'kitchen-vagrant'
14
+ gem 'winrm-fs'
15
+ end
@@ -0,0 +1,232 @@
1
+ GIT
2
+ remote: https://github.com/chef/omnibus-software.git
3
+ revision: 69e7fd212b293795c9a1abf7e2aed3be89ac6d06
4
+ specs:
5
+ omnibus-software (4.0.0)
6
+ chef-sugar (>= 3.4.0)
7
+ omnibus (>= 5.5.0)
8
+
9
+ GIT
10
+ remote: https://github.com/chef/omnibus.git
11
+ revision: 433220e0b7c434dbc4a36daaa1fecbdb1bf7231d
12
+ specs:
13
+ omnibus (5.5.0)
14
+ aws-sdk (~> 2)
15
+ chef-sugar (~> 3.3)
16
+ cleanroom (~> 1.0)
17
+ ffi-yajl (~> 2.2)
18
+ license_scout
19
+ mixlib-shellout (~> 2.0)
20
+ mixlib-versioning
21
+ ohai (~> 8.0)
22
+ pedump
23
+ ruby-progressbar (~> 1.7)
24
+ thor (~> 0.18)
25
+
26
+ GEM
27
+ remote: https://rubygems.org/
28
+ specs:
29
+ addressable (2.5.0)
30
+ public_suffix (~> 2.0, >= 2.0.2)
31
+ artifactory (2.8.1)
32
+ awesome_print (1.7.0)
33
+ aws-sdk (2.8.14)
34
+ aws-sdk-resources (= 2.8.14)
35
+ aws-sdk-core (2.8.14)
36
+ aws-sigv4 (~> 1.0)
37
+ jmespath (~> 1.0)
38
+ aws-sdk-resources (2.8.14)
39
+ aws-sdk-core (= 2.8.14)
40
+ aws-sigv4 (1.0.0)
41
+ berkshelf (5.6.4)
42
+ addressable (~> 2.3, >= 2.3.4)
43
+ berkshelf-api-client (>= 2.0.2, < 4.0)
44
+ buff-config (~> 2.0)
45
+ buff-extensions (~> 2.0)
46
+ buff-shell_out (~> 1.0)
47
+ cleanroom (~> 1.0)
48
+ faraday (~> 0.9)
49
+ httpclient (~> 2.7)
50
+ minitar (~> 0.5, >= 0.5.4)
51
+ mixlib-archive (~> 0.4)
52
+ octokit (~> 4.0)
53
+ retryable (~> 2.0)
54
+ ridley (~> 5.0)
55
+ solve (> 2.0, < 4.0)
56
+ thor (~> 0.19, < 0.19.2)
57
+ berkshelf-api-client (3.0.0)
58
+ faraday (~> 0.9)
59
+ httpclient (~> 2.7)
60
+ ridley (>= 4.5, < 6.0)
61
+ buff-config (2.0.0)
62
+ buff-extensions (~> 2.0)
63
+ varia_model (~> 0.6)
64
+ buff-extensions (2.0.0)
65
+ buff-ignore (1.2.0)
66
+ buff-ruby_engine (1.0.0)
67
+ buff-shell_out (1.1.0)
68
+ buff-ruby_engine (~> 1.0)
69
+ builder (3.2.3)
70
+ celluloid (0.16.0)
71
+ timers (~> 4.0.0)
72
+ celluloid-io (0.16.2)
73
+ celluloid (>= 0.16.0)
74
+ nio4r (>= 1.1.0)
75
+ chef-config (12.19.36)
76
+ addressable
77
+ fuzzyurl
78
+ mixlib-config (~> 2.0)
79
+ mixlib-shellout (~> 2.0)
80
+ chef-sugar (3.4.0)
81
+ cleanroom (1.0.0)
82
+ erubis (2.7.0)
83
+ faraday (0.9.2)
84
+ multipart-post (>= 1.2, < 3)
85
+ ffi (1.9.18)
86
+ ffi-yajl (2.3.0)
87
+ libyajl2 (~> 1.2)
88
+ fuzzyurl (0.9.0)
89
+ gssapi (1.2.0)
90
+ ffi (>= 1.0.1)
91
+ gyoku (1.3.1)
92
+ builder (>= 2.1.2)
93
+ hashie (3.5.5)
94
+ hitimes (1.2.4)
95
+ httpclient (2.8.3)
96
+ iostruct (0.0.4)
97
+ ipaddress (0.8.3)
98
+ jmespath (1.3.1)
99
+ json (2.0.3)
100
+ kitchen-vagrant (1.0.2)
101
+ test-kitchen (~> 1.4)
102
+ libyajl2 (1.2.0)
103
+ license_scout (0.1.3)
104
+ ffi-yajl (~> 2.2)
105
+ mixlib-shellout (~> 2.2)
106
+ little-plugger (1.1.4)
107
+ logging (2.2.0)
108
+ little-plugger (~> 1.1)
109
+ multi_json (~> 1.10)
110
+ minitar (0.6.1)
111
+ mixlib-archive (0.4.1)
112
+ mixlib-log
113
+ mixlib-authentication (1.4.1)
114
+ mixlib-log
115
+ mixlib-cli (1.7.0)
116
+ mixlib-config (2.2.4)
117
+ mixlib-install (2.1.12)
118
+ artifactory
119
+ mixlib-shellout
120
+ mixlib-versioning
121
+ thor
122
+ mixlib-log (1.7.1)
123
+ mixlib-shellout (2.2.7)
124
+ mixlib-versioning (1.1.0)
125
+ molinillo (0.5.7)
126
+ multi_json (1.12.1)
127
+ multipart-post (2.0.0)
128
+ net-scp (1.2.1)
129
+ net-ssh (>= 2.6.5)
130
+ net-ssh (4.1.0)
131
+ net-ssh-gateway (1.3.0)
132
+ net-ssh (>= 2.6.5)
133
+ nio4r (2.0.0)
134
+ nori (2.6.0)
135
+ octokit (4.6.2)
136
+ sawyer (~> 0.8.0, >= 0.5.3)
137
+ ohai (8.23.0)
138
+ chef-config (>= 12.5.0.alpha.1, < 13)
139
+ ffi (~> 1.9)
140
+ ffi-yajl (~> 2.2)
141
+ ipaddress
142
+ mixlib-cli
143
+ mixlib-config (~> 2.0)
144
+ mixlib-log (>= 1.7.1, < 2.0)
145
+ mixlib-shellout (~> 2.0)
146
+ plist (~> 3.1)
147
+ systemu (~> 2.6.4)
148
+ wmi-lite (~> 1.0)
149
+ pedump (0.5.2)
150
+ awesome_print
151
+ iostruct (>= 0.0.4)
152
+ multipart-post (~> 2.0.0)
153
+ progressbar
154
+ zhexdump (>= 0.0.2)
155
+ plist (3.2.0)
156
+ progressbar (1.8.2)
157
+ public_suffix (2.0.5)
158
+ retryable (2.0.4)
159
+ ridley (5.1.0)
160
+ addressable
161
+ buff-config (~> 2.0)
162
+ buff-extensions (~> 2.0)
163
+ buff-ignore (~> 1.2)
164
+ buff-shell_out (~> 1.0)
165
+ celluloid (~> 0.16.0)
166
+ celluloid-io (~> 0.16.1)
167
+ chef-config (>= 12.5.0)
168
+ erubis
169
+ faraday (~> 0.9.0)
170
+ hashie (>= 2.0.2, < 4.0.0)
171
+ httpclient (~> 2.7)
172
+ json (>= 1.7.7)
173
+ mixlib-authentication (>= 1.3.0)
174
+ retryable (~> 2.0)
175
+ semverse (~> 2.0)
176
+ varia_model (~> 0.6)
177
+ ruby-progressbar (1.8.1)
178
+ rubyntlm (0.6.1)
179
+ rubyzip (1.2.1)
180
+ safe_yaml (1.0.4)
181
+ sawyer (0.8.1)
182
+ addressable (>= 2.3.5, < 2.6)
183
+ faraday (~> 0.8, < 1.0)
184
+ semverse (2.0.0)
185
+ solve (3.1.0)
186
+ molinillo (>= 0.5)
187
+ semverse (>= 1.1, < 3.0)
188
+ systemu (2.6.5)
189
+ test-kitchen (1.16.0)
190
+ mixlib-install (>= 1.2, < 3.0)
191
+ mixlib-shellout (>= 1.2, < 3.0)
192
+ net-scp (~> 1.1)
193
+ net-ssh (>= 2.9, < 5.0)
194
+ net-ssh-gateway (~> 1.2)
195
+ safe_yaml (~> 1.0)
196
+ thor (~> 0.19, < 0.19.2)
197
+ thor (0.19.1)
198
+ timers (4.0.4)
199
+ hitimes
200
+ varia_model (0.6.0)
201
+ buff-extensions (~> 2.0)
202
+ hashie (>= 2.0.2, < 4.0.0)
203
+ winrm (2.1.3)
204
+ builder (>= 2.1.2)
205
+ erubis (~> 2.7)
206
+ gssapi (~> 1.2)
207
+ gyoku (~> 1.0)
208
+ httpclient (~> 2.2, >= 2.2.0.2)
209
+ logging (>= 1.6.1, < 3.0)
210
+ nori (~> 2.0)
211
+ rubyntlm (~> 0.6.0, >= 0.6.1)
212
+ winrm-fs (1.0.1)
213
+ erubis (~> 2.7)
214
+ logging (>= 1.6.1, < 3.0)
215
+ rubyzip (~> 1.1)
216
+ winrm (~> 2.0)
217
+ wmi-lite (1.0.0)
218
+ zhexdump (0.0.2)
219
+
220
+ PLATFORMS
221
+ ruby
222
+
223
+ DEPENDENCIES
224
+ berkshelf
225
+ kitchen-vagrant
226
+ omnibus!
227
+ omnibus-software!
228
+ test-kitchen
229
+ winrm-fs
230
+
231
+ BUNDLED WITH
232
+ 1.14.6