berkshelf 0.5.0.rc2 → 0.5.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/berkshelf.rb +2 -0
- data/lib/berkshelf/berksfile.rb +11 -0
- data/lib/berkshelf/cli.rb +10 -4
- data/lib/berkshelf/ui.rb +3 -3
- data/lib/berkshelf/uploader.rb +11 -0
- data/lib/berkshelf/vagrant.rb +8 -4
- data/lib/berkshelf/vagrant/action/upload.rb +9 -3
- data/lib/berkshelf/vagrant/action/validate.rb +30 -0
- data/lib/berkshelf/vagrant/config.rb +38 -21
- data/lib/berkshelf/version.rb +1 -1
- metadata +3 -2
data/lib/berkshelf.rb
CHANGED
@@ -6,6 +6,7 @@ require 'zlib'
|
|
6
6
|
require 'archive/tar/minitar'
|
7
7
|
require 'solve'
|
8
8
|
require 'ridley'
|
9
|
+
require 'thor'
|
9
10
|
require 'chef/knife'
|
10
11
|
require 'chef/platform'
|
11
12
|
require 'chef/cookbook/metadata'
|
@@ -15,6 +16,7 @@ require 'active_support/core_ext'
|
|
15
16
|
require 'berkshelf/version'
|
16
17
|
require 'berkshelf/core_ext'
|
17
18
|
require 'berkshelf/errors'
|
19
|
+
require 'thor/monkies'
|
18
20
|
|
19
21
|
Chef::Config[:cache_options][:path] = Dir.mktmpdir
|
20
22
|
|
data/lib/berkshelf/berksfile.rb
CHANGED
@@ -367,6 +367,17 @@ module Berkshelf
|
|
367
367
|
# @option options [Symbol, Array] :only
|
368
368
|
# Group(s) to include which will cause any sources marked as a member of the
|
369
369
|
# group to be installed and all others to be ignored
|
370
|
+
# @option options [Integer] :thread_count
|
371
|
+
# @option options [Hash] :params
|
372
|
+
# URI query unencoded key/value pairs
|
373
|
+
# @option options [Hash] :headers
|
374
|
+
# unencoded HTTP header key/value pairs
|
375
|
+
# @option options [Hash] :request
|
376
|
+
# request options
|
377
|
+
# @option options [Hash] :ssl
|
378
|
+
# SSL options
|
379
|
+
# @option options [URI, String, Hash] :proxy
|
380
|
+
# URI, String, or Hash of HTTP proxy options
|
370
381
|
def upload(options = {})
|
371
382
|
uploader = Uploader.new(options)
|
372
383
|
solution = resolve(options)
|
data/lib/berkshelf/cli.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require 'thor'
|
2
|
-
require 'thor/monkies'
|
3
1
|
require 'berkshelf'
|
4
2
|
|
5
3
|
module Berkshelf
|
4
|
+
Thor::Base.shell = Berkshelf::UI
|
5
|
+
|
6
6
|
# @author Jamie Winsor <jamie@vialstudios.com>
|
7
7
|
class Cli < Thor
|
8
8
|
class << self
|
@@ -14,7 +14,6 @@ module Berkshelf
|
|
14
14
|
|
15
15
|
def initialize(*args)
|
16
16
|
super(*args)
|
17
|
-
self.shell = Berkshelf.ui
|
18
17
|
Berkshelf.config_path = @options[:config]
|
19
18
|
Berkshelf.set_format @options[:format]
|
20
19
|
@options = options.dup # unfreeze frozen options Hash from Thor
|
@@ -108,6 +107,10 @@ module Berkshelf
|
|
108
107
|
type: :boolean,
|
109
108
|
default: false,
|
110
109
|
desc: "Upload all cookbooks even if a frozen one exists on the target Chef Server"
|
110
|
+
option :ssl_verify,
|
111
|
+
type: :boolean,
|
112
|
+
default: true,
|
113
|
+
desc: "Disable/Enable SSL verification when uploading cookbooks"
|
111
114
|
desc "upload", "Upload the Cookbooks specified by a Berksfile or a Berksfile.lock to a Chef Server."
|
112
115
|
def upload
|
113
116
|
Berkshelf.load_config
|
@@ -117,7 +120,10 @@ module Berkshelf
|
|
117
120
|
server_url: Chef::Config[:chef_server_url],
|
118
121
|
client_name: Chef::Config[:node_name],
|
119
122
|
client_key: Chef::Config[:client_key],
|
120
|
-
organization: ChefAPILocation.extract_organization(Chef::Config[:chef_server_url])
|
123
|
+
organization: ChefAPILocation.extract_organization(Chef::Config[:chef_server_url]),
|
124
|
+
ssl: {
|
125
|
+
verify: options[:ssl_verify]
|
126
|
+
}
|
121
127
|
)
|
122
128
|
end
|
123
129
|
|
data/lib/berkshelf/ui.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Berkshelf
|
2
|
-
class UI < Thor::Shell::
|
2
|
+
class UI < ::Thor::Shell::Basic
|
3
3
|
# Mute the output of this instance of UI until {#unmute!} is called
|
4
4
|
def mute!
|
5
5
|
@mute = true
|
@@ -10,10 +10,10 @@ module Berkshelf
|
|
10
10
|
@mute = false
|
11
11
|
end
|
12
12
|
|
13
|
-
def say(message, color = nil, force_new_line =
|
13
|
+
def say(message = "", color = nil, force_new_line = nil)
|
14
14
|
return if quiet?
|
15
15
|
|
16
|
-
super(message, color
|
16
|
+
super(message, color)
|
17
17
|
end
|
18
18
|
alias_method :info, :say
|
19
19
|
|
data/lib/berkshelf/uploader.rb
CHANGED
@@ -17,6 +17,17 @@ module Berkshelf
|
|
17
17
|
# @option options [String] :organization
|
18
18
|
# the Organization to connect to. This is only used if you are connecting to
|
19
19
|
# private Chef or hosted Chef
|
20
|
+
# @option options [Integer] :thread_count
|
21
|
+
# @option options [Hash] :params
|
22
|
+
# URI query unencoded key/value pairs
|
23
|
+
# @option options [Hash] :headers
|
24
|
+
# unencoded HTTP header key/value pairs
|
25
|
+
# @option options [Hash] :request
|
26
|
+
# request options
|
27
|
+
# @option options [Hash] :ssl
|
28
|
+
# SSL options
|
29
|
+
# @option options [URI, String, Hash] :proxy
|
30
|
+
# URI, String, or Hash of HTTP proxy options
|
20
31
|
def initialize(options = {})
|
21
32
|
@conn = Ridley.connection(options)
|
22
33
|
end
|
data/lib/berkshelf/vagrant.rb
CHANGED
@@ -10,6 +10,7 @@ module Berkshelf
|
|
10
10
|
autoload :Upload, 'berkshelf/vagrant/action/upload'
|
11
11
|
autoload :Clean, 'berkshelf/vagrant/action/clean'
|
12
12
|
autoload :SetUI, 'berkshelf/vagrant/action/set_ui'
|
13
|
+
autoload :Validate, 'berkshelf/vagrant/action/validate'
|
13
14
|
end
|
14
15
|
|
15
16
|
autoload :Config, 'berkshelf/vagrant/config'
|
@@ -56,10 +57,13 @@ module Berkshelf
|
|
56
57
|
# Initialize the Berkshelf Vagrant middleware stack
|
57
58
|
def init!
|
58
59
|
::Vagrant.config_keys.register(:berkshelf) { Berkshelf::Vagrant::Config }
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
|
61
|
+
[ :provision, :start ].each do |action|
|
62
|
+
::Vagrant.actions[action].insert(::Vagrant::Action::General::Validate, Berkshelf::Vagrant::Action::Validate)
|
63
|
+
::Vagrant.actions[action].insert(::Vagrant::Action::VM::Provision, Berkshelf::Vagrant::Middleware.install)
|
64
|
+
::Vagrant.actions[action].insert(::Vagrant::Action::VM::Provision, Berkshelf::Vagrant::Middleware.upload)
|
65
|
+
end
|
66
|
+
|
63
67
|
::Vagrant.actions[:destroy].insert(::Vagrant::Action::VM::CleanMachineFolder, Berkshelf::Vagrant::Middleware.clean)
|
64
68
|
end
|
65
69
|
end
|
@@ -6,16 +6,19 @@ module Berkshelf
|
|
6
6
|
attr_reader :berksfile
|
7
7
|
attr_reader :node_name
|
8
8
|
attr_reader :client_key
|
9
|
+
attr_reader :ssl_verify
|
9
10
|
|
10
11
|
def initialize(app, env)
|
11
12
|
@app = app
|
12
13
|
@node_name = env[:global_config].berkshelf.node_name
|
13
14
|
@client_key = env[:global_config].berkshelf.client_key
|
15
|
+
@ssl_verify = env[:global_config].berkshelf.client_key
|
14
16
|
@berksfile = Berksfile.from_file(env[:global_config].berkshelf.berksfile_path)
|
15
17
|
end
|
16
18
|
|
17
19
|
def call(env)
|
18
20
|
if Berkshelf::Vagrant.chef_client?(env[:global_config])
|
21
|
+
p env[:global_config].berkshelf
|
19
22
|
upload(env)
|
20
23
|
end
|
21
24
|
|
@@ -28,9 +31,12 @@ module Berkshelf
|
|
28
31
|
Berkshelf::Vagrant.provisioners(:chef_client, env[:global_config]).each do |provisioner|
|
29
32
|
Berkshelf.formatter.msg "uploading cookbooks to '#{provisioner.config.chef_server_url}'"
|
30
33
|
berksfile.upload(
|
31
|
-
provisioner.config.chef_server_url,
|
32
|
-
|
33
|
-
client_key: self.client_key
|
34
|
+
server_url: provisioner.config.chef_server_url,
|
35
|
+
client_name: self.node_name,
|
36
|
+
client_key: self.client_key,
|
37
|
+
ssl: {
|
38
|
+
verify: self.ssl_verify
|
39
|
+
}
|
34
40
|
)
|
35
41
|
end
|
36
42
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Berkshelf
|
2
|
+
module Vagrant
|
3
|
+
module Action
|
4
|
+
# @author Jamie Winsor <jamie@vialstudios.com>
|
5
|
+
#
|
6
|
+
# As of Vagrant 1.0.5 it is not possible to validate configuration values of
|
7
|
+
# a configuraiton that was not explicitly described in a Vagrant::Config.run block.
|
8
|
+
#
|
9
|
+
# In our case we want some values set for our middleware stacks even if the user does
|
10
|
+
# not explicitly set values for settings in `config.berkshelf`.
|
11
|
+
class Validate
|
12
|
+
def initialize(app, env)
|
13
|
+
@app = app
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
recorder = ::Vagrant::Config::ErrorRecorder.new
|
18
|
+
env[:vm].config.berkshelf.validate(env[:vm].env, recorder)
|
19
|
+
|
20
|
+
unless recorder.errors.empty?
|
21
|
+
raise ::Vagrant::Errors::ConfigValidationFailed,
|
22
|
+
messages: ::Vagrant::Util::TemplateRenderer.render("config/validation_failed", errors: { berkshelf: recorder })
|
23
|
+
end
|
24
|
+
|
25
|
+
@app.call(env)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -2,20 +2,43 @@ module Berkshelf
|
|
2
2
|
module Vagrant
|
3
3
|
# @author Jamie Winsor <jamie@vialstudios.com>
|
4
4
|
# @author Andrew Garson <andrew.garson@gmail.com>
|
5
|
+
#
|
6
|
+
# @note according to <http://vagrantup.com/v1/docs/extending/configuration.html> instance
|
7
|
+
# variables should not be instantiated with default values in the initializer of a Config file.
|
8
|
+
# Instead explicit getters which set and return the default value should be used.
|
5
9
|
class Config < ::Vagrant::Config::Base
|
6
|
-
# return [String]
|
10
|
+
# @return [String]
|
7
11
|
# path to a knife configuration file
|
8
|
-
|
12
|
+
def config_path
|
13
|
+
@config_path ||= Berkshelf::DEFAULT_CONFIG
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param [String] value
|
17
|
+
def config_path=(value)
|
18
|
+
@config_path = File.expand_path(value)
|
19
|
+
end
|
9
20
|
|
10
21
|
# @return [String]
|
11
22
|
# path to the Berksfile to use with Vagrant
|
12
|
-
|
23
|
+
def berksfile_path
|
24
|
+
@berksfile_path ||= File.join(Dir.pwd, Berkshelf::DEFAULT_FILENAME)
|
25
|
+
end
|
26
|
+
|
27
|
+
# @param [String] value
|
28
|
+
def berksfile_path=(value)
|
29
|
+
@berksfile_path = File.expand_path(value)
|
30
|
+
end
|
13
31
|
|
14
32
|
# @return [String]
|
15
33
|
# A path to a client key on disk to use with the Chef Client provisioner to
|
16
34
|
# upload cookbooks installed by Berkshelf.
|
17
35
|
attr_reader :client_key
|
18
36
|
|
37
|
+
# @param [String] value
|
38
|
+
def client_key=(value)
|
39
|
+
@client_key = File.expand_path(value)
|
40
|
+
end
|
41
|
+
|
19
42
|
# @return [String]
|
20
43
|
# A client name (node_name) to use with the Chef Client provisioner to upload
|
21
44
|
# cookbooks installed by Berkshelf.
|
@@ -24,31 +47,25 @@ module Berkshelf
|
|
24
47
|
# @return [Array<Symbol>]
|
25
48
|
# cookbooks in all other groups except for these will be installed
|
26
49
|
# and copied to Vagrant's shelf
|
27
|
-
|
50
|
+
def except
|
51
|
+
@except ||= Array.new
|
52
|
+
end
|
53
|
+
attr_writer :except
|
28
54
|
|
29
55
|
# @return [Array<Symbol>]
|
30
56
|
# only cookbooks in these groups will be installed and copied to
|
31
57
|
# Vagrant's shelf
|
32
|
-
|
33
|
-
|
34
|
-
def initialize
|
35
|
-
@config_path = Berkshelf::DEFAULT_CONFIG
|
36
|
-
@berksfile_path = File.join(Dir.pwd, Berkshelf::DEFAULT_FILENAME)
|
37
|
-
@only = Array.new
|
38
|
-
@except = Array.new
|
39
|
-
end
|
40
|
-
|
41
|
-
def config_path=(value)
|
42
|
-
@config_path = File.expand_path(value)
|
58
|
+
def only
|
59
|
+
@only ||= Array.new
|
43
60
|
end
|
61
|
+
attr_writer :only
|
44
62
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
def client_key=(value)
|
50
|
-
@client_key = File.expand_path(value)
|
63
|
+
# @return [Boolean]
|
64
|
+
# should connections to a Chef API use SSL verification
|
65
|
+
def ssl_verify
|
66
|
+
@ssl_verify ||= true
|
51
67
|
end
|
68
|
+
attr_writer :ssl_verify
|
52
69
|
|
53
70
|
def validate(env, errors)
|
54
71
|
if !except.empty? && !only.empty?
|
data/lib/berkshelf/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berkshelf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.0.
|
4
|
+
version: 0.5.0.rc3
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-09-
|
15
|
+
date: 2012-09-21 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: ridley
|
@@ -514,6 +514,7 @@ files:
|
|
514
514
|
- lib/berkshelf/vagrant/action/install.rb
|
515
515
|
- lib/berkshelf/vagrant/action/set_ui.rb
|
516
516
|
- lib/berkshelf/vagrant/action/upload.rb
|
517
|
+
- lib/berkshelf/vagrant/action/validate.rb
|
517
518
|
- lib/berkshelf/vagrant/config.rb
|
518
519
|
- lib/berkshelf/vagrant/middleware.rb
|
519
520
|
- lib/berkshelf/version.rb
|