berkshelf 1.0.0.rc2 → 1.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
data/Thorfile CHANGED
@@ -38,25 +38,41 @@ class Default < Thor
38
38
 
39
39
  desc "all", "Run all tests"
40
40
  def all
41
- invoke(:unit)
42
- invoke(:acceptance)
41
+ unless run_unit && run_acceptance
42
+ exit 1
43
+ end
43
44
  end
44
45
 
45
46
  desc "ci", "Run all possible tests on Travis-CI"
46
47
  def ci
47
48
  ENV['CI'] = 'true' # Travis-CI also sets this, but set it here for local testing
48
- run "rspec --tag ~chef_server --tag ~focus --color --format=documentation spec"
49
- run "cucumber --format pretty --tags ~@chef_server"
49
+ unless run_unit("--tag ~chef_server") && run_acceptance("--tags ~@chef_server")
50
+ exit 1
51
+ end
50
52
  end
51
53
 
52
54
  desc "unit", "Run unit tests"
53
55
  def unit
54
- run "rspec --color --format=documentation spec"
56
+ unless run_unit
57
+ exit 1
58
+ end
55
59
  end
56
60
 
57
61
  desc "acceptance", "Run acceptance tests"
58
62
  def acceptance
59
- run "cucumber --color --format pretty --tags ~@no_run"
63
+ unless run_acceptance
64
+ exit 1
65
+ end
66
+ end
67
+
68
+ no_tasks do
69
+ def run_unit(*flags)
70
+ run "rspec --color --format=documentation #{flags.join(' ')} spec"
71
+ end
72
+
73
+ def run_acceptance(*flags)
74
+ run "cucumber --color --format pretty --tags ~@no_run #{flags.join(' ')}"
75
+ end
60
76
  end
61
77
  end
62
78
 
data/berkshelf.gemspec CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.version = Berkshelf::VERSION
27
27
  s.required_ruby_version = ">= 1.9.1"
28
28
 
29
+ s.add_dependency 'yajl-ruby'
29
30
  s.add_dependency 'activesupport'
30
31
  s.add_dependency 'chef', '>= 10.12.0'
31
32
  s.add_dependency 'ridley', '>= 0.4.1'
@@ -10,7 +10,7 @@ Feature: update
10
10
  """
11
11
  Given I write to "Berksfile.lock" with:
12
12
  """
13
- cookbook 'artifact', :locked_version => '0.0.1'
13
+ cookbook 'artifact', :locked_version => '0.1.0'
14
14
  """
15
15
  When I run the update command
16
16
  Then the file "Berksfile.lock" should contain exactly:
@@ -5,8 +5,8 @@ license "<%= license_name %>"
5
5
  description "Installs/Configures <%= name %>"
6
6
  long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
7
7
  <% if options[:scmversion] -%>
8
- version IO.read(File.join(File.dirname(__FILE__), 'VERSION')) rescue "0.0.1"
8
+ version IO.read(File.join(File.dirname(__FILE__), 'VERSION')) rescue "0.1.0"
9
9
  <% else -%>
10
- version "0.0.1"
10
+ version "0.1.0"
11
11
  <% end -%>
12
12
 
@@ -384,7 +384,6 @@ module Berkshelf
384
384
  # @option options [URI, String, Hash] :proxy
385
385
  # URI, String, or Hash of HTTP proxy options
386
386
  def upload(options = {})
387
- options[:organization] ||= ChefAPILocation.extract_organization(Chef::Config[:chef_server_url])
388
387
  uploader = Uploader.new(options)
389
388
  solution = resolve(options)
390
389
 
data/lib/berkshelf/cli.rb CHANGED
@@ -160,7 +160,7 @@ module Berkshelf
160
160
  desc: "Upload all cookbooks even if a frozen one exists on the target Chef Server"
161
161
  option :ssl_verify,
162
162
  type: :boolean,
163
- default: true,
163
+ default: nil,
164
164
  desc: "Disable/Enable SSL verification when uploading cookbooks"
165
165
  desc "upload", "Upload the Cookbooks specified by a Berksfile or a Berksfile.lock to a Chef Server"
166
166
  def upload
@@ -6,17 +6,42 @@ module Berkshelf
6
6
  class Config < Chozo::Config::JSON
7
7
  FILENAME = "config.json".freeze
8
8
 
9
- class << self
10
- attr_writer :path
9
+ # List taken from: http://wiki.opscode.com/display/chef/Chef+Configuration+Settings
10
+ # Listed in order of preferred preference
11
+ KNIFE_LOCATIONS = [
12
+ './.chef/knife.rb',
13
+ '~/.chef/knife.rb',
14
+ '/etc/chef/solo.rb',
15
+ '/etc/chef/client.rb'
16
+ ].freeze
11
17
 
18
+ class << self
12
19
  # @return [String]
13
20
  def path
14
- File.join(Berkshelf.berkshelf_path, FILENAME)
21
+ @path || File.join(Berkshelf.berkshelf_path, FILENAME)
15
22
  end
16
23
 
17
- # @return [String]
24
+ # @param [String] new_path
25
+ def path=(new_path)
26
+ @path = File.expand_path(new_path)
27
+ end
28
+
29
+ # @return [String, nil]
18
30
  def chef_config_path
19
- @chef_config_path ||= File.expand_path(ENV["BERKSHELF_CHEF_CONFIG"] || "~/.chef/knife.rb")
31
+ @chef_config_path ||= begin
32
+ possibles = KNIFE_LOCATIONS.dup
33
+
34
+ unless ENV['BERKSHELF_CHEF_CONFIG'].nil?
35
+ possibles.unshift(ENV['BERKSHELF_CHEF_CONFIG'])
36
+ end
37
+
38
+ location = possibles.find do |location|
39
+ File.exists?(File.expand_path(location))
40
+ end
41
+ location ||= "~/.chef/knife.rb"
42
+
43
+ File.expand_path(location)
44
+ end
20
45
  end
21
46
 
22
47
  # @param [String] value
@@ -86,7 +111,7 @@ module Berkshelf
86
111
  default: Hash.new
87
112
  attribute 'vagrant.vm.network.bridged',
88
113
  type: Boolean,
89
- default: true
114
+ default: false
90
115
  attribute 'vagrant.vm.network.hostonly',
91
116
  type: String,
92
117
  default: '33.33.33.10'
@@ -95,6 +120,7 @@ module Berkshelf
95
120
  default: 'chef_solo'
96
121
  attribute 'ssl.verify',
97
122
  type: Boolean,
98
- default: true
123
+ default: true,
124
+ required: true
99
125
  end
100
126
  end
@@ -71,7 +71,7 @@ module Berkshelf
71
71
  end
72
72
 
73
73
  if options[:scmversion]
74
- create_file target.join("VERSION"), "0.0.1"
74
+ create_file target.join("VERSION"), "0.1.0"
75
75
  end
76
76
 
77
77
  unless options[:no_bundler]
@@ -56,20 +56,6 @@ module Berkshelf
56
56
 
57
57
  true
58
58
  end
59
-
60
- # Retrieves the organization of a Chef API URI. If the URI does not contain an
61
- # organization then nil will be returned.
62
- #
63
- # @param [String] uri
64
- #
65
- # @raise [InvalidChefAPILocation]
66
- #
67
- # @return [String, nil]
68
- def extract_organization(uri)
69
- validate_uri!(uri)
70
-
71
- URI(uri).path.split('organizations/')[1]
72
- end
73
59
  end
74
60
 
75
61
  include Location
@@ -34,6 +34,10 @@ module Berkshelf
34
34
 
35
35
  def configure_cookbooks_path(env)
36
36
  Berkshelf::Vagrant.provisioners(:chef_solo, env[:vm].config).each do |provisioner|
37
+ unless provisioner.config.cookbooks_path.is_a?(Array)
38
+ provisioner.config.cookbooks_path = Array(provisioner.config.cookbooks_path)
39
+ end
40
+
37
41
  provisioner.config.cookbooks_path.unshift(self.shelf)
38
42
  end
39
43
  end
@@ -1,3 +1,3 @@
1
1
  module Berkshelf
2
- VERSION = "1.0.0.rc2"
2
+ VERSION = "1.0.0.rc3"
3
3
  end
data/lib/berkshelf.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'yajl'
1
2
  require 'chef/cookbook/metadata'
2
3
  require 'chef/cookbook_version'
3
4
  require 'chef/knife'
data/spec/spec_helper.rb CHANGED
@@ -11,6 +11,8 @@ Spork.prefork do
11
11
  require 'webmock/rspec'
12
12
 
13
13
  APP_ROOT = File.expand_path('../../', __FILE__)
14
+ ENV["BERKSHELF_PATH"] = File.join(APP_ROOT, "tmp", "berkshelf")
15
+ ENV["BERKSHELF_CHEF_CONFIG"] = File.join(APP_ROOT, "tmp", "knife.rb")
14
16
 
15
17
  Dir[File.join(APP_ROOT, "spec/support/**/*.rb")].each {|f| require f}
16
18
 
@@ -103,8 +103,7 @@ EOF
103
103
  @uploader ||= Berkshelf::Uploader.new(
104
104
  server_url: Chef::Config[:chef_server_url],
105
105
  client_name: Chef::Config[:node_name],
106
- client_key: Chef::Config[:client_key],
107
- organization: Berkshelf::ChefAPILocation.extract_organization(Chef::Config[:chef_server_url])
106
+ client_key: Chef::Config[:client_key]
108
107
  )
109
108
  end
110
109
  end
@@ -61,7 +61,7 @@ module Berkshelf
61
61
 
62
62
  context "when there is no matching cookbook for the given name and constraint" do
63
63
  let(:version) { Solve::Version.new("1.0.0") }
64
- let(:constraint) { Solve::Constraint.new("= 0.0.1") }
64
+ let(:constraint) { Solve::Constraint.new("= 0.1.0") }
65
65
 
66
66
  before(:each) do
67
67
  subject.stub(:cookbooks).and_return([ double('badcache', name: 'none', version: version) ])
@@ -66,16 +66,16 @@ module Berkshelf
66
66
  context "given the symbol :config for the value of chef_api:" do
67
67
  before(:each) { @loc = subject.new("nginx", constraint, chef_api: :config) }
68
68
 
69
- it "uses the value of Chef::Config[:chef_server_url] for the uri attribute" do
70
- @loc.uri.should eql(Chef::Config[:chef_server_url])
69
+ it "uses the value of Berkshelf::Chef.instance.chef.chef_server_url for the uri attribute" do
70
+ @loc.uri.should eql(Berkshelf::Config.instance.chef.chef_server_url)
71
71
  end
72
72
 
73
- it "uses the value of Chef::Config[:node_name] for the node_name attribute" do
74
- @loc.node_name.should eql(Chef::Config[:node_name])
73
+ it "uses the value of Berkshelf::Chef.instance.chef.node_name for the node_name attribute" do
74
+ @loc.node_name.should eql(Berkshelf::Config.instance.chef.node_name)
75
75
  end
76
76
 
77
- it "uses the value of Chef::Config[:client_key] for the client_key attribute" do
78
- @loc.client_key.should eql(Chef::Config[:client_key])
77
+ it "uses the value of Berkshelf::Chef.instance.chef.client_key for the client_key attribute" do
78
+ @loc.client_key.should eql(Berkshelf::Config.instance.chef.client_key)
79
79
  end
80
80
  end
81
81
  end
@@ -228,7 +228,7 @@ module Berkshelf
228
228
  end
229
229
 
230
230
  it "returns a string containing the location key and the Chef API URI" do
231
- subject.to_s.should eql("chef_api: '#{Chef::Config[:chef_server_url]}'")
231
+ subject.to_s.should eql("chef_api: '#{Berkshelf::Config.instance.chef.chef_server_url}'")
232
232
  end
233
233
  end
234
234
  end
@@ -1,34 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- module Berkshelf
4
- describe Lockfile do
5
- let(:downloader) { Downloader.new(Berkshelf.cookbook_store) }
6
-
7
- describe "without a lockfile in place already" do
8
- before(:all) do
9
- @old_dir = Dir.pwd
10
- Dir.chdir fixtures_path.join("lockfile_spec", "without_lock")
11
- end
12
-
13
- after(:all) do
14
- FileUtils.rm(fixtures_path.join("lockfile_spec", "without_lock", "Berksfile.lock"))
15
- Dir.chdir(@old_dir)
16
- end
17
-
18
- it "should be able to write a Berksfile.lock from a list of cookbooks" do
19
- resolver = Resolver.new(downloader, sources: CookbookSource.new('nginx', constraint: '= 0.101.0'))
20
- resolver.resolve
21
-
22
- Lockfile.new(resolver.sources).write
23
-
24
- File.read('Berksfile.lock').split(/\r?\n/).should =~ [
25
- "cookbook 'bluepill', :locked_version => '1.1.0'",
26
- "cookbook 'build-essential', :locked_version => '1.1.2'",
27
- "cookbook 'nginx', :locked_version => '0.101.0'",
28
- "cookbook 'ohai', :locked_version => '1.0.2'",
29
- "cookbook 'runit', :locked_version => '0.15.0'"
30
- ]
31
- end
32
- end
33
- end
3
+ describe Berkshelf::Lockfile do
4
+ pending
34
5
  end
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: 1.0.0.rc2
4
+ version: 1.0.0.rc3
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -12,8 +12,24 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-11-07 00:00:00.000000000 Z
15
+ date: 2012-11-12 00:00:00.000000000 Z
16
16
  dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: yajl-ruby
19
+ requirement: !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: '0'
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
17
33
  - !ruby/object:Gem::Dependency
18
34
  name: activesupport
19
35
  requirement: !ruby/object:Gem::Requirement