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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +88 -0
- data/Gemfile +20 -0
- data/Gemfile.lock +242 -0
- data/LICENSE +201 -0
- data/README.md +43 -0
- data/RELEASE_PROCESS.md +105 -0
- data/Rakefile +42 -0
- data/bin/print_execution_environment +18 -0
- data/bin/push-apply +47 -0
- data/bin/pushy-client +8 -0
- data/bin/pushy-service-manager +19 -0
- data/jenkins/jenkins_run_tests.sh +9 -0
- data/keys/client_private.pem +27 -0
- data/keys/server_public.pem +9 -0
- data/lib/pushy_client.rb +268 -0
- data/lib/pushy_client/cli.rb +168 -0
- data/lib/pushy_client/heartbeater.rb +153 -0
- data/lib/pushy_client/job_runner.rb +316 -0
- data/lib/pushy_client/periodic_reconfigurer.rb +62 -0
- data/lib/pushy_client/protocol_handler.rb +508 -0
- data/lib/pushy_client/version.rb +23 -0
- data/lib/pushy_client/whitelist.rb +66 -0
- data/lib/pushy_client/win32.rb +27 -0
- data/lib/pushy_client/windows_service.rb +253 -0
- data/omnibus/Berksfile +12 -0
- data/omnibus/Gemfile +15 -0
- data/omnibus/Gemfile.lock +232 -0
- data/omnibus/LICENSE +201 -0
- data/omnibus/README.md +141 -0
- data/omnibus/acceptance/Berksfile +6 -0
- data/omnibus/acceptance/Berksfile.lock +35 -0
- data/omnibus/acceptance/Makefile +13 -0
- data/omnibus/acceptance/README.md +29 -0
- data/omnibus/acceptance/metadata.rb +12 -0
- data/omnibus/acceptance/recipes/chef-server-user-org.rb +31 -0
- data/omnibus/config/projects/push-jobs-client.rb +83 -0
- data/omnibus/config/software/opscode-pushy-client.rb +78 -0
- data/omnibus/files/mapfiles/solaris +18 -0
- data/omnibus/files/openssl-customization/windows/ssl_env_hack.rb +34 -0
- data/omnibus/omnibus.rb +54 -0
- data/omnibus/package-scripts/push-jobs-client/postinst +55 -0
- data/omnibus/package-scripts/push-jobs-client/postrm +39 -0
- data/omnibus/resources/push-jobs-client/dmg/background.png +0 -0
- data/omnibus/resources/push-jobs-client/dmg/icon.png +0 -0
- data/omnibus/resources/push-jobs-client/msi/assets/LICENSE.rtf +197 -0
- data/omnibus/resources/push-jobs-client/msi/assets/banner_background.bmp +0 -0
- data/omnibus/resources/push-jobs-client/msi/assets/dialog_background.bmp +0 -0
- data/omnibus/resources/push-jobs-client/msi/assets/oc.ico +0 -0
- data/omnibus/resources/push-jobs-client/msi/assets/oc_16x16.ico +0 -0
- data/omnibus/resources/push-jobs-client/msi/assets/oc_32x32.ico +0 -0
- data/omnibus/resources/push-jobs-client/msi/localization-en-us.wxl.erb +26 -0
- data/omnibus/resources/push-jobs-client/msi/parameters.wxi.erb +9 -0
- data/omnibus/resources/push-jobs-client/msi/source.wxs.erb +138 -0
- data/omnibus/resources/push-jobs-client/pkg/background.png +0 -0
- data/omnibus/resources/push-jobs-client/pkg/license.html.erb +202 -0
- data/omnibus/resources/push-jobs-client/pkg/welcome.html.erb +5 -0
- data/opscode-pushy-client.gemspec +28 -0
- data/pkg/opscode-pushy-client-2.3.0.gem +0 -0
- data/spec/pushy_client/protocol_handler_spec.rb +48 -0
- data/spec/pushy_client/whitelist_spec.rb +70 -0
- data/spec/spec_helper.rb +12 -0
- 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
|
data/omnibus/Berksfile
ADDED
@@ -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
|
data/omnibus/Gemfile
ADDED
@@ -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
|