remy 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/.rdebugrc ADDED
@@ -0,0 +1,3 @@
1
+ set autolist
2
+ set autoeval
3
+ set autoreload
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm 1.8.7-p352@remy --create
1
+ rvm 1.9.2-p320@remy --create
data/README.md CHANGED
@@ -164,7 +164,7 @@ This assumes that 'demo.sharespost.com' is specified in the :servers section of
164
164
 
165
165
  ### Run chef-solo on a single box:
166
166
 
167
- The simplest usage of Remy (Note: this only works if the Remy.configuration has already been specified, such as within
167
+ The simplest usage of Remy (Note: this only works if the Remy::Configuration::Chef.configuration has already been specified, such as within
168
168
  a Rails application):
169
169
 
170
170
  `Remy::Chef.new(:ip_address => '123.123.123.123').run`
@@ -174,7 +174,7 @@ as an argument.
174
174
 
175
175
  Example: update your production database box:
176
176
 
177
- server_config = Remy.find_server_config(:rails_env => :production, :role => :db)
177
+ server_config = Remy::Configuration::Chef.find_server_config(:rails_env => :production, :role => :db)
178
178
  Remy::Chef.new(server_config).run
179
179
 
180
180
  Other arguments can be passed into chef and will get applied against this node:
@@ -193,7 +193,7 @@ which will make chef-solo run in debug mode.
193
193
 
194
194
  From within your Capistrano file, you do a variety of things, such as the following:
195
195
 
196
- Remy.servers.find_servers(:rails_env => :staging, :role => :app) do |server|
196
+ Remy::Configuration::Chef.servers.find_servers(:rails_env => :staging, :role => :app) do |server|
197
197
  Remy::Chef.new(server).run
198
198
  end
199
199
 
@@ -7,7 +7,7 @@ module Remy
7
7
  def initialize(options = { })
8
8
  @ip_address = options[:ip_address]
9
9
  @password = options[:password]
10
- options = (Remy.bootstrap || {}).merge(options).symbolize_keys
10
+ options = (Remy::Config::Chef.bootstrap || {}).merge(options).symbolize_keys
11
11
  @ruby_version = options[:ruby_version] || '1.8.7'
12
12
  @gems = options[:gems] || {}
13
13
  @quiet = options[:quiet] || false
@@ -24,7 +24,7 @@ module Remy
24
24
 
25
25
  def apt_get_rvm_packages
26
26
  # This list of required packages came from doing "rvm requirements"
27
- remote_apt_get 'build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison'
27
+ remote_apt_get 'build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion'
28
28
  end
29
29
 
30
30
  def install_gems_to_bootstrap_chef
data/lib/remy/chef.rb CHANGED
@@ -3,17 +3,18 @@ module Remy
3
3
  # For chef-solo info, see: http://wiki.opscode.com/display/chef/Chef+Solo
4
4
  include ::Remy::Shell
5
5
  include FileUtils
6
+ include ::Remy::Utility
6
7
  attr_reader :ip_address
7
8
 
8
9
  def initialize(options = {})
9
10
  options = JSON.parse(options).symbolize_keys! if options.is_a?(String)
10
11
  @chef_args = options.delete(:chef_args)
11
12
  @quiet = options.delete(:quiet)
12
- @node_configuration = Remy.configuration.dup
13
- @ip_address = options[:ip_address] ? options[:ip_address] : @node_configuration.ip_address
14
- server_config = Remy.find_server_config(:ip_address => ip_address) || Hashie::Mash.new
15
- @node_configuration.deep_merge!(server_config)
16
- @node_configuration.merge!(options)
13
+ @node_config = Remy::Config::Chef.config.dup
14
+ @ip_address = options[:ip_address] ? options[:ip_address] : @node_config.ip_address
15
+ server_config = Remy::Config::Chef.find_server_config(:ip_address => ip_address) || Hashie::Mash.new
16
+ @node_config.deep_merge!(server_config)
17
+ @node_config.merge!(options)
17
18
  end
18
19
 
19
20
  def run
@@ -23,7 +24,7 @@ module Remy
23
24
  end
24
25
 
25
26
  def self.rake_run(rake_options)
26
- ip_addresses = Remy.determine_ip_addresses_for_remy_run(rake_options)
27
+ ip_addresses = Remy::Config::Chef.determine_ip_addresses_for_remy_run(rake_options)
27
28
  ip_addresses.each do |ip_address|
28
29
  Remy::Chef.new(:ip_address => ip_address).run
29
30
  end
@@ -36,7 +37,7 @@ module Remy
36
37
  copy_spec_cookbook_and_role_dirs_to_tmp_dir
37
38
  create_solo_rb
38
39
  create_bash_script_which_runs_chef
39
- create_node_json_from_node_configuration
40
+ create_node_json_from_node_config
40
41
  end
41
42
 
42
43
  def rsync_temp_dir_with_cookbooks_to_remote_host
@@ -66,13 +67,8 @@ module Remy
66
67
  end
67
68
 
68
69
  def copy_spec_cookbook_and_role_dirs_to_tmp_dir
69
- [@node_configuration.roles_path, @node_configuration.cookbook_path, @node_configuration.spec_path].each do |path|
70
- if path
71
- full_path = path.map{|p| File.expand_path(p) }
72
- full_path.each do |a_path|
73
- cp_r a_path, tmp_dir
74
- end
75
- end
70
+ flatten_paths(@node_config.roles_path, @node_config.cookbook_path, @node_config.spec_path).each do |a_path|
71
+ cp_r a_path, tmp_dir
76
72
  end
77
73
  end
78
74
 
@@ -102,9 +98,9 @@ EOF
102
98
  chmod(0755, File.join(tmp_dir, run_chef_solo_bash_script))
103
99
  end
104
100
 
105
- def create_node_json_from_node_configuration
101
+ def create_node_json_from_node_config
106
102
  File.open(File.join(tmp_dir, node_json), 'w+') do |f|
107
- f << @node_configuration.to_json
103
+ f << @node_config.to_json
108
104
  end
109
105
  end
110
106
 
@@ -117,7 +113,7 @@ EOF
117
113
  end
118
114
 
119
115
  def remote_chef_dir
120
- @node_configuration.remote_chef_dir
116
+ @node_config.remote_chef_dir
121
117
  end
122
118
 
123
119
  def tmp_dir
@@ -0,0 +1,56 @@
1
+ #--
2
+ # Copyright (c) 2011 Gregory S. Woodward
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ module Remy
25
+ module Config
26
+ class Chef
27
+ extend Remy::Config
28
+ include ::Remy::Shell
29
+ include FileUtils
30
+
31
+ def self.configure
32
+ temp_config = Hashie::Mash.new(:node_attributes => {}, :yml_files => [], :remote_chef_dir => '/var/chef')
33
+ yield temp_config
34
+ yml_files = [temp_config.yml_files].compact.flatten
35
+ @config = Hashie::Mash.new({:yml_files => yml_files,
36
+ :remote_chef_dir => temp_config.remote_chef_dir,
37
+ :roles_path => [temp_config.roles_path].compact.flatten,
38
+ :spec_path => [temp_config.spec_path].compact.flatten,
39
+ :cookbook_path => [temp_config.cookbook_path].compact.flatten}.merge!(temp_config.node_attributes))
40
+
41
+ yml_files.each do |filename|
42
+ begin
43
+ @config.deep_merge!(YAML.load(ERB.new(File.read(filename)).result) || {})
44
+ rescue SystemCallError, IOError
45
+ # do nothing if the chef.yml file could not be read (it's not needed for every usage of remy, just certain ones)
46
+ end
47
+ end
48
+ end
49
+
50
+ def self.save_node_json(output_file_path)
51
+ FileUtils.mkdir_p File.dirname(output_file_path)
52
+ File.open(output_file_path, 'w') { |f| f << @config.to_json }
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,9 @@
1
+ class Remy::Config::Node
2
+ extend Remy::Config
3
+
4
+ def self.configure
5
+ temp_config = Hashie::Mash.new
6
+ yield temp_config
7
+ @config = Hashie::Mash.new(JSON.parse(File.read(temp_config.json_file)))
8
+ end
9
+ end
@@ -22,52 +22,22 @@
22
22
  #++
23
23
 
24
24
  module Remy
25
- class Configuration
26
- attr_accessor :yml_files, :cookbook_path, :spec_path, :remote_chef_dir, :node_attributes, :roles_path
27
-
28
- def initialize
29
- @yml_files = []
30
- @node_attributes = {}
31
- end
32
- end
33
-
34
- class << self
35
- include ::Remy::Shell
36
- include FileUtils
37
-
38
- def configure
39
- @config_instance = Configuration.new
40
- yield @config_instance
41
- @configuration = Hashie::Mash.new({:yml_files => [@config_instance.yml_files].compact.flatten,
42
- :remote_chef_dir => (@config_instance.remote_chef_dir || '/var/chef'),
43
- :roles_path => [@config_instance.roles_path].compact.flatten,
44
- :spec_path => [@config_instance.spec_path].compact.flatten,
45
- :cookbook_path => [@config_instance.cookbook_path].compact.flatten}.merge!(@config_instance.node_attributes))
46
-
47
- @config_instance.yml_files.each do |filename|
48
- begin
49
- configuration.deep_merge!(YAML.load(ERB.new(File.read(filename)).result) || {})
50
- rescue SystemCallError, IOError
51
- # do nothing if the chef.yml file could not be read (it's not needed for every usage of remy, just certain ones)
52
- end
53
- end
54
- end
55
-
56
- def configuration
57
- @configuration ? @configuration : Hashie::Mash.new
25
+ module Config
26
+ def config
27
+ @config ? @config : Hashie::Mash.new
58
28
  end
59
29
 
60
30
  def to_json
61
- configuration.to_json
31
+ config.to_json
62
32
  end
63
33
 
64
34
  def servers
65
- configuration.servers
35
+ config.servers
66
36
  end
67
37
 
68
38
  def find_servers(options = {})
69
- return nil unless configuration.servers
70
- Hashie::Mash.new(configuration.servers.inject({}) do |hash, (server_name, server_config)|
39
+ return nil unless config.servers
40
+ Hashie::Mash.new(config.servers.inject({}) do |hash, (server_name, server_config)|
71
41
  found = options.all? { |(key, value)| server_config[key] == value }
72
42
  hash[server_name] = server_config if found
73
43
  hash
@@ -75,8 +45,8 @@ module Remy
75
45
  end
76
46
 
77
47
  def find_server(options = {})
78
- return nil unless configuration.servers
79
- server_name, server_config = configuration.servers.detect do |(server_name, server_config)|
48
+ return nil unless config.servers
49
+ server_name, server_config = config.servers.detect do |(server_name, server_config)|
80
50
  options.all? { |(key, value)| server_config[key] == value }
81
51
  end
82
52
  {server_name => server_config.nil? ? nil : server_config.dup}
@@ -87,16 +57,16 @@ module Remy
87
57
  end
88
58
 
89
59
  def find_server_config_by_name(name)
90
- return nil unless configuration.servers
91
- configuration.servers.find {|(server_name, _)| server_name == name}.try(:last)
60
+ return nil unless config.servers
61
+ config.servers.find { |(server_name, _)| server_name == name }.try(:last)
92
62
  end
93
63
 
94
- def cloud_configuration
95
- configuration && configuration.cloud_configuration
64
+ def cloud_config
65
+ config && config.cloud_config
96
66
  end
97
67
 
98
68
  def bootstrap
99
- configuration && configuration.bootstrap
69
+ config && config.bootstrap
100
70
  end
101
71
 
102
72
  def determine_ip_addresses_for_remy_run(rake_args)
@@ -104,12 +74,12 @@ module Remy
104
74
  if options_hash = convert_properties_to_hash(rake_args)
105
75
  servers = find_servers(options_hash)
106
76
  if !servers.empty?
107
- ip_addresses = servers.collect {|server_name, chef_option| chef_option.ip_address }
77
+ ip_addresses = servers.collect { |server_name, chef_option| chef_option.ip_address }
108
78
  else
109
79
  ip_addresses = [options_hash[:ip_address]]
110
80
  end
111
81
  else
112
- names_or_ip_addresses = rake_args.present? ? rake_args.split(' ').collect {|name| name.strip } : []
82
+ names_or_ip_addresses = rake_args.present? ? rake_args.split(' ').collect { |name| name.strip } : []
113
83
  names_or_ip_addresses.each do |name_or_ip_address|
114
84
  # From: http://www.regular-expressions.info/examples.html
115
85
  ip_address_regex = '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'
@@ -119,7 +89,7 @@ module Remy
119
89
  ip_addresses << server_config.ip_address
120
90
  end
121
91
  end
122
- ip_addresses << configuration.ip_address
92
+ ip_addresses << config.ip_address
123
93
  end
124
94
  ip_addresses.compact
125
95
  end
data/lib/remy/server.rb CHANGED
@@ -6,7 +6,7 @@ class Remy::Server
6
6
  :flavor_id => 4, # 2GB
7
7
  :image_id => 49, # Ubuntu 10.04 LTS (lucid)
8
8
  :quiet => false
9
- }.merge(Remy.cloud_configuration || {}).merge(options || {}).symbolize_keys
9
+ }.merge(Remy::Config::Chef.cloud_config || {}).merge(options || {}).symbolize_keys
10
10
 
11
11
  @server_name = options[:server_name]
12
12
  @cloud_api_key = options[:cloud_api_key]
@@ -0,0 +1,7 @@
1
+ module Remy
2
+ module Utility
3
+ def flatten_paths(*path_arrays)
4
+ path_arrays.flatten.compact.map { |path| File.expand_path(path) }
5
+ end
6
+ end
7
+ end
data/lib/remy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Remy
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/remy.rb CHANGED
@@ -40,9 +40,10 @@ require 'json'
40
40
  require 'hashie'
41
41
  require 'tmpdir'
42
42
  require 'remy/shell'
43
+ require 'remy/utility'
43
44
  require 'yaml'
44
45
  dir = File.dirname(__FILE__)
45
- Dir[File.join(File.dirname(__FILE__), 'remy', '**', '*.rb')].each {|f| require f.gsub(dir, '')[1, f.length] }
46
+ Dir[File.join(dir, 'remy', '**', '*.rb')].each {|f| require f.gsub(dir, '')[1, f.length] }
46
47
 
47
48
  module Remy
48
49
  begin
data/lib/tasks/remy.rake CHANGED
@@ -1,18 +1,16 @@
1
1
  require 'remy'
2
2
 
3
3
  namespace :remy do
4
- task :environment do
5
- begin
6
- Rake::Task[:environment].invoke
7
- rescue RuntimeError
8
- end
4
+ desc 'Create a JSON file from the contents of the Chef yml config files for use on development boxes by the Rails application.'
5
+ task :save_node_json, :rake_args do |task, options|
6
+ Remy::Config::Chef.save_node_json(options[:rake_args])
9
7
  end
10
8
 
11
9
  desc 'ssh to a named box'
12
10
  task :ssh, :rake_args do |task, options|
13
11
  Rake::Task[:'remy:environment'].invoke
14
- user = Remy.configuration.user || 'root'
15
- if ip_address = Remy.determine_ip_addresses_for_remy_run(options[:rake_args]).try(:first)
12
+ user = Remy::Config::Chef.config.user || 'root'
13
+ if ip_address = Remy::Config::Chef.determine_ip_addresses_for_remy_run(options[:rake_args]).try(:first)
16
14
  exec "ssh #{user}@#{ip_address}"
17
15
  end
18
16
  end
@@ -20,7 +18,6 @@ namespace :remy do
20
18
  namespace :chef do
21
19
  desc 'run chef solo'
22
20
  task :run, :rake_args do |task, options|
23
- Rake::Task[:'remy:environment'].invoke
24
21
  Remy::Chef.rake_run(options[:rake_args])
25
22
  end
26
23
  end
@@ -28,19 +25,16 @@ namespace :remy do
28
25
  namespace :server do
29
26
  desc 'create a server'
30
27
  task :create, :server_name, :flavor_id, :cloud_api_key, :cloud_username, :cloud_provider, :image_id do |task, options|
31
- Rake::Task[:'remy:environment'].invoke
32
28
  Remy::Server.new(options).create
33
29
  end
34
30
 
35
31
  desc 'bootstrap chef'
36
32
  task :bootstrap, :ip_address, :password do |task, options|
37
- Rake::Task[:'remy:environment'].invoke
38
33
  Remy::Bootstrap.new(options).run
39
34
  end
40
35
 
41
36
  desc 'create a server and bootstrap chef'
42
37
  task :create_and_bootstrap, :server_name, :flavor_id, :cloud_api_key, :cloud_username, :cloud_provider, :image_id do |task, options|
43
- Rake::Task[:'remy:environment'].invoke
44
38
  begin
45
39
  result = Remy::Server.new({:raise_exception => true}.merge(options)).create
46
40
  Rake::Task[:'remy:server:bootstrap'].invoke(result[:ip_address], result[:password])
data/remy.gemspec CHANGED
@@ -19,13 +19,12 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ['lib']
20
20
 
21
21
  # specify any dependencies here; for example:
22
- s.add_development_dependency 'bourne'
23
- s.add_development_dependency 'mocha'
24
22
  s.add_development_dependency 'i18n'
25
23
  s.add_development_dependency 'json'
26
24
  s.add_development_dependency 'rspec', '~> 2.7.0'
27
25
  s.add_runtime_dependency 'activesupport', '>= 2'
28
26
  s.add_runtime_dependency 'chef'
27
+ s.add_runtime_dependency 'rake'
29
28
  s.add_runtime_dependency 'fog'
30
29
  s.add_runtime_dependency 'hashie'
31
30
  end
@@ -10,7 +10,7 @@ rails_env: bogus_and_should_be_overridden_by_value_in_servers_section
10
10
  servers:
11
11
  web.sharespost.com:
12
12
  <<: *APP
13
- ip_address: <%= IP_ADDRESS %>
13
+ ip_address: <%= IP_ADDRESS_OF_REMY_TEST %>
14
14
  rails_env: demo
15
15
  color: blue
16
16
 
@@ -27,7 +27,7 @@ servers:
27
27
  rails_env: demo
28
28
  color: green
29
29
 
30
- cloud_configuration:
30
+ cloud_config:
31
31
  cloud_provider: Rackspace
32
32
  cloud_username: sharespost
33
33
  cloud_api_key: abcdefg12345
@@ -38,7 +38,7 @@ cloud_configuration:
38
38
  bootstrap:
39
39
  ruby_version: 1.9.2
40
40
  gems:
41
- bundler: 1.0.21
42
- chef: 0.10.4
43
- rspec: 2.7.0
41
+ bundler: 3.0.0
42
+ chef: 10.12.0
43
+ rspec: 2.11.0
44
44
 
@@ -1,4 +1,4 @@
1
- ip_address: <%= IP_ADDRESS %>
1
+ ip_address: <%= IP_ADDRESS_OF_REMY_TEST %>
2
2
  color: blue
3
3
  recipes:
4
4
  - recipe[hello_world]
@@ -0,0 +1 @@
1
+ {"blah": "bar"}
@@ -15,19 +15,19 @@ describe Remy::Bootstrap do
15
15
 
16
16
  describe "ruby_version" do
17
17
  it 'should default to 1.8.7 if there is no Ruby version specified in the yml files' do
18
- Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/hello_world_chef.yml') }
18
+ Remy::Config::Chef.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/hello_world_chef.yml') }
19
19
  bootstrap = Remy::Bootstrap.new
20
20
  ruby_version(bootstrap).should == '1.8.7'
21
21
  end
22
22
 
23
23
  it 'should get the Ruby version if specified in the yml files' do
24
- Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/chef.yml') }
24
+ Remy::Config::Chef.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/chef.yml') }
25
25
  bootstrap = Remy::Bootstrap.new
26
26
  ruby_version(bootstrap).should == '1.9.2'
27
27
  end
28
28
 
29
29
  it 'should use the version passed in as an option, even if it exists in the yml files' do
30
- Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/chef.yml') }
30
+ Remy::Config::Chef.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/chef.yml') }
31
31
  bootstrap = Remy::Bootstrap.new(:ruby_version => '1.9.1')
32
32
  ruby_version(bootstrap).should == '1.9.1'
33
33
  end
@@ -35,7 +35,7 @@ describe Remy::Bootstrap do
35
35
 
36
36
  describe "gems" do
37
37
  it 'should default to nil if not specified in the yml files' do
38
- Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/hello_world_chef.yml') }
38
+ Remy::Config::Chef.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/hello_world_chef.yml') }
39
39
  bootstrap = Remy::Bootstrap.new
40
40
  gem(bootstrap)[:chef].should be_nil
41
41
  gem(bootstrap)[:bundler].should be_nil
@@ -43,17 +43,17 @@ describe Remy::Bootstrap do
43
43
  end
44
44
 
45
45
  it 'should get gem version if it has been specified in the yml files' do
46
- Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/chef.yml') }
46
+ Remy::Config::Chef.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/chef.yml') }
47
47
  bootstrap = Remy::Bootstrap.new
48
- gem(bootstrap)[:chef].should == '0.10.4'
49
- gem(bootstrap)[:bundler].should == '1.0.21'
50
- gem(bootstrap)[:rspec].should == '2.7.0'
48
+ gem(bootstrap)[:chef].should == '10.12.0'
49
+ gem(bootstrap)[:bundler].should == '3.0.0'
50
+ gem(bootstrap)[:rspec].should == '2.11.0'
51
51
  end
52
52
  end
53
53
 
54
54
  describe "ip_address" do
55
55
  it 'should use the value from the options' do
56
- Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/hello_world_chef.yml') }
56
+ Remy::Config::Chef.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), '../fixtures/hello_world_chef.yml') }
57
57
  bootstrap = Remy::Bootstrap.new(:ip_address => '1.2.3.4', :password => 'abcdef')
58
58
  ip_address(bootstrap).should == '1.2.3.4'
59
59
  end