opscode-pushy-client 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|