rubber 2.8.1 → 2.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 74952b3078921c178e794dd97dbfde331e459626
4
- data.tar.gz: 64a2230b873c17bf2d296267f04b4ede7df42cc3
3
+ metadata.gz: ab6253fd1d0b38c978eda0a0dc6ca62262284cb6
4
+ data.tar.gz: d64c12b608be9a43292bace407970d31a2d7f0cf
5
5
  SHA512:
6
- metadata.gz: cadef25f61d49602b586cedfe50f20a7c67ec83ac5f6d6b7a21ea63e58eb27edb9a5d45d4e8a483eab874589c8c7391898361a41d7196912ec3a8801e29eceda
7
- data.tar.gz: fce48417a6a09e1e12ede3487f24cf70f3b5e6feb0a3da2c33d5a152390f9a2aa2915956bae282d754e9de2b0e84be34eaeefbf29b55876215457b9ae4d51856
6
+ metadata.gz: 0037e0e29c1b5a408971a1ba2b2095135e34881fcac4d26e6ed100b27211ec1e3db324f52526e29b1aa2a4b14ff0a31c3f381897340b6cf41414eaa92eb4c6d0
7
+ data.tar.gz: 3c60ffe2b978abda2f0626770776a68e412fe695eee2b5221d0585131998a74e6973a1a35061654a599c44389d272b11dab769de128906d30623ca3fc85da0cd
@@ -9,7 +9,7 @@ rvm:
9
9
  - 1.9.2
10
10
  - 1.9.3
11
11
  - 2.0.0
12
- - 2.1.0
12
+ - 2.1
13
13
  - ruby-head
14
14
  - jruby-18mode
15
15
  - jruby-19mode
@@ -26,7 +26,7 @@ matrix:
26
26
  gemfile: Gemfile.1.8.7
27
27
  - rvm: 2.0.0
28
28
  gemfile: Gemfile.1.8.7
29
- - rvm: 2.1.0
29
+ - rvm: 2.1
30
30
  gemfile: Gemfile.1.8.7
31
31
  - rvm: ruby-head
32
32
  gemfile: Gemfile.1.8.7
data/CHANGELOG CHANGED
@@ -1,3 +1,22 @@
1
+ 2.9.0 (06/02/2014)
2
+
3
+ New Features:
4
+ ============
5
+
6
+ [core] Added support for private networking in Digital Ocean. <aee6114, c2c2059, 83fa02e, dbced9d, b1c9564, 54d6405, 55f7e13, bc1a05a>
7
+ [core, local_windows] Support for using rubber on Windows. <738cd3f, dd049bf, bd82f2a, 6bd51e7, f199cad, cfa3012, 329acad, 0b0afa3, 86bf2d0>
8
+
9
+ Improvements:
10
+ ============
11
+
12
+ [delayed_job] Added Rails 4 compatibility. <c374142, 982f08b, 2f49cf7>
13
+
14
+ Bug Fixes:
15
+ =========
16
+
17
+ [base] Updated the Digital Ocean image to one that works. <48f7984>
18
+
19
+
1
20
  2.8.1 (05/01/2014)
2
21
 
3
22
  Bug Fixes:
data/Gemfile CHANGED
@@ -3,5 +3,11 @@ source "https://rubygems.org"
3
3
  gem 'jruby-openssl', :platform => :jruby
4
4
  gem 'unlimited-strength-crypto', :platform => :jruby
5
5
 
6
+ group :development do
7
+ # Need to run off master for tests until updated Digital Ocean mocking
8
+ # makes it into a release
9
+ gem 'fog', :git => 'https://github.com/fog/fog.git', :branch => 'master'
10
+ end
11
+
6
12
  # Specify your gem's dependencies in rubber.gemspec
7
13
  gemspec
@@ -29,12 +29,19 @@ module Rubber
29
29
  super(env, capistrano)
30
30
  end
31
31
 
32
+ # Currently New York 2 (id 4) supports private networking
33
+ REGIONS_WITH_PRIVATE_NETWORKING = [4]
34
+
32
35
  def create_instance(instance_alias, image_name, image_type, security_groups, availability_zone, region)
33
36
  do_region = compute_provider.regions.find { |r| r.name == region }
34
37
  if do_region.nil?
35
38
  raise "Invalid region for DigitalOcean: #{region}"
36
39
  end
37
40
 
41
+ if env.private_networking && ! REGIONS_WITH_PRIVATE_NETWORKING.include?(do_region.id)
42
+ raise "Private networking is enabled, but region #{region} does not support it"
43
+ end
44
+
38
45
  image = compute_provider.images.find { |i| i.name == image_name }
39
46
  if image.nil?
40
47
  raise "Invalid image name for DigitalOcean: #{image_name}"
@@ -60,7 +67,8 @@ module Rubber
60
67
  :image_id => image.id,
61
68
  :flavor_id => flavor.id,
62
69
  :region_id => do_region.id,
63
- :ssh_key_ids => [ssh_key['id']])
70
+ :ssh_key_ids => [ssh_key['id']],
71
+ :private_networking => (env.private_networking.to_s.downcase == 'true'))
64
72
 
65
73
  response.id
66
74
  end
@@ -81,7 +89,7 @@ module Rubber
81
89
  instance[:state] = item.state
82
90
  instance[:type] = item.flavor_id
83
91
  instance[:external_ip] = item.public_ip_address
84
- instance[:internal_ip] = item.public_ip_address
92
+ instance[:internal_ip] = item.private_ip_address || item.public_ip_address
85
93
  instance[:region_id] = item.region_id
86
94
  instance[:provider] = 'digital_ocean'
87
95
  instance[:platform] = Rubber::Platforms::LINUX
@@ -2,6 +2,7 @@ require 'yaml'
2
2
  require 'socket'
3
3
  require 'delegate'
4
4
  require 'monitor'
5
+ require 'rbconfig'
5
6
 
6
7
 
7
8
  module Rubber
@@ -250,7 +251,19 @@ module Rubber
250
251
 
251
252
  global
252
253
  end
253
-
254
+
255
+ def local_platform
256
+ RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'windows' : 'posix'
257
+ end
258
+
259
+ def local_windows?
260
+ local_platform == 'windows'
261
+ end
262
+
263
+ def local_posix?
264
+ local_platform == 'posix'
265
+ end
266
+
254
267
  def method_missing(method_id)
255
268
  self[method_id.id2name]
256
269
  end
@@ -28,26 +28,36 @@ namespace :rubber do
28
28
  after "deploy:rollback_code", "rubber:config"
29
29
  before "deploy:migrate", "rubber:config"
30
30
 
31
- desc <<-DESC
31
+ namespace :config do
32
+
33
+ desc <<-DESC
34
+ Pushes and runs rubber configuration on the deployed rails application
35
+ DESC
36
+ task :default do
37
+ # Don't want to do rubber:config during bootstrap_db where it's triggered by
38
+ # deploy:update_code, because the user could be requiring the rails env inside
39
+ # some of their config templates (which fails because rails can't connect to
40
+ # the db)
41
+ if fetch(:rubber_updating_code_for_bootstrap_db, false)
42
+ logger.info "Updating code for bootstrap, skipping rubber:config"
43
+ else
44
+ rubber.config.push
45
+ rubber.config.configure
46
+ end
47
+ end
48
+
49
+ desc <<-DESC
50
+ Pushes instance config and rubber secret file to remote
51
+ DESC
52
+ task :push do
53
+ push_config
54
+ end
55
+
56
+ desc <<-DESC
32
57
  Configures the deployed rails application by running the rubber configuration process
33
- DESC
34
- task :config do
35
- # Don't want to do rubber:config during bootstrap_db where it's triggered by
36
- # deploy:update_code, because the user could be requiring the rails env inside
37
- # some of their config templates (which fails because rails can't connect to
38
- # the db)
39
- if fetch(:rubber_updating_code_for_bootstrap_db, false)
40
- logger.info "Updating code for bootstrap, skipping rubber:config"
41
- else
42
- opts = {}
43
- opts[:no_post] = true if ENV['NO_POST']
44
- opts[:force] = true if ENV['FORCE']
45
- opts[:file] = ENV['FILE'] if ENV['FILE']
46
-
47
- # when running deploy:migrations, we need to run config against release_path
48
- opts[:deploy_path] = current_release if fetch(:migrate_target, :current).to_sym == :latest
49
-
50
- run_config(opts)
58
+ DESC
59
+ task :configure do
60
+ run_config
51
61
  end
52
62
  end
53
63
 
@@ -63,13 +73,7 @@ namespace :rubber do
63
73
  rsudo "chown -R #{rubber_env.app_user}:#{rubber_env.app_user} #{current_path}/tmp"
64
74
  end
65
75
 
66
- def run_config(options={})
67
- path = options.delete(:deploy_path) || current_path
68
- opts = ""
69
- opts += " --no_post" if options[:no_post]
70
- opts += " --force" if options[:force]
71
- opts += " --file=\"#{options[:file]}\"" if options[:file]
72
-
76
+ def push_config
73
77
  unless fetch(:rubber_config_files_pushed, false)
74
78
  # Need to do this so we can work with staging instances without having to
75
79
  # checkin instance file between create and bootstrap, as well as during a deploy
@@ -89,7 +93,7 @@ namespace :rubber do
89
93
 
90
94
  push_files.each do |file|
91
95
  dest_file = file.sub(/^#{Rubber.root}\/?/, '')
92
- put(File.read(file), File.join(path, dest_file), :mode => "+r")
96
+ put(File.read(file), File.join(config_path, dest_file), :mode => "+r")
93
97
  end
94
98
  end
95
99
 
@@ -97,13 +101,24 @@ namespace :rubber do
97
101
  secret = rubber_cfg.environment.config_secret
98
102
  if secret && File.exist?(secret)
99
103
  base = rubber_cfg.environment.config_root.sub(/^#{Rubber.root}\/?/, '')
100
- put(File.read(secret), File.join(path, base, File.basename(secret)), :mode => "+r")
104
+ put(File.read(secret), File.join(config_path, base, File.basename(secret)), :mode => "+r")
101
105
  end
102
106
 
103
107
  set :rubber_config_files_pushed, true
104
108
  end
105
-
106
- rsudo "cd #{path} && RUBBER_ENV=#{Rubber.env} RAILS_ENV=#{Rubber.env} ./script/rubber config #{opts}"
107
109
  end
108
110
 
109
- end
111
+ def run_config
112
+ opts = ""
113
+ opts += " --no_post" if ENV['NO_POST']
114
+ opts += " --force" if ENV['FORCE']
115
+ opts += " --file=\"#{ENV['FILE']}\"" if ENV['FILE']
116
+ rsudo "cd #{config_path} && RUBBER_ENV=#{Rubber.env} RAILS_ENV=#{Rubber.env} ./script/rubber config #{opts}"
117
+ end
118
+
119
+ def config_path
120
+ # when running deploy:migrations, we need to run config against release_path
121
+ fetch(:migrate_target, :current).to_sym == :latest ? current_release : current_path
122
+ end
123
+
124
+ end
@@ -613,7 +613,9 @@ namespace :rubber do
613
613
  # delete from ~/.ssh/known_hosts all lines that begin with ec2- or instance_alias
614
614
  def cleanup_known_hosts(instance_item)
615
615
  logger.info "Cleaning ~/.ssh/known_hosts"
616
- File.open(File.expand_path('~/.ssh/known_hosts'), 'r+') do |f|
616
+
617
+ begin
618
+ File.open(File.expand_path('~/.ssh/known_hosts'), 'r+') do |f|
617
619
  out = ""
618
620
  f.each do |line|
619
621
  line = case line
@@ -628,6 +630,11 @@ namespace :rubber do
628
630
  f.pos = 0
629
631
  f.print out
630
632
  f.truncate(f.pos)
633
+ end
634
+ rescue
635
+ error_msg = "Failed to modify #{filepath} on local machine."
636
+ error_msg += " Please ensure you are running command as Administrator." if rubber_env.local_windows?
637
+ abort error_msg
631
638
  end
632
639
  end
633
640
 
@@ -145,28 +145,48 @@ namespace :rubber do
145
145
  Generates/etc/hosts for local machine
146
146
  DESC
147
147
  required_task :setup_local_aliases do
148
- hosts_file = '/etc/hosts'
148
+ hosts_file = rubber_env.local_windows? ?
149
+ "#{ENV['windir']}\\System32\\drivers\\etc\\hosts" :
150
+ '/etc/hosts'
149
151
 
150
152
  # Generate /etc/hosts contents for the local machine from instance config
151
153
  delim = "## rubber config #{rubber_env.domain} #{Rubber.env}"
152
154
  local_hosts = delim + "\n"
153
155
  rubber_instances.each do |ic|
154
- # don't add unqualified hostname in local hosts file since user may be
155
- # managing multiple domains with same aliases
156
- hosts_data = [ic.full_name, ic.external_host, ic.internal_host]
157
156
 
158
- # add the ip aliases for web tools hosts so we can map internal tools
159
- # to their own vhost to make proxying easier (rewriting url paths for
160
- # proxy is a real pain, e.g. '/graphite/' externally to '/' on the
161
- # graphite web app)
162
- if ic.role_names.include?('web_tools')
163
- Array(rubber_env.web_tools_proxies).each do |name, settings|
164
- hosts_data << "#{name}-#{ic.full_name}"
157
+ if rubber_env.local_windows?
158
+
159
+ hosts_data = [ic.full_name, ic.internal_host]
160
+
161
+ if ic.role_names.include?('web_tools')
162
+ Array(rubber_env.web_tools_proxies).each do |name, settings|
163
+ hosts_data << "#{name}-#{ic.full_name}"
164
+ end
165
165
  end
166
- end
167
166
 
168
- local_hosts << ic.external_ip << ' ' << hosts_data.join(' ') << "\n"
167
+ hosts_data.compact.each do |host_name|
168
+ local_hosts << ic.external_ip.ljust(18) << host_name << "\n"
169
+ end
170
+
171
+ else # non-Windows OS
172
+ # don't add unqualified hostname in local hosts file since user may be
173
+ # managing multiple domains with same aliases
174
+ hosts_data = [ic.full_name, ic.external_host, ic.internal_host]
175
+
176
+ # add the ip aliases for web tools hosts so we can map internal tools
177
+ # to their own vhost to make proxying easier (rewriting url paths for
178
+ # proxy is a real pain, e.g. '/graphite/' externally to '/' on the
179
+ # graphite web app)
180
+ if ic.role_names.include?('web_tools')
181
+ Array(rubber_env.web_tools_proxies).each do |name, settings|
182
+ hosts_data << "#{name}-#{ic.full_name}"
183
+ end
184
+ end
185
+
186
+ local_hosts << ic.external_ip << ' ' << hosts_data.compact.join(' ') << "\n"
187
+ end
169
188
  end
189
+
170
190
  local_hosts << delim << "\n"
171
191
 
172
192
  # Write out the hosts file for this machine, use sudo
@@ -175,10 +195,25 @@ namespace :rubber do
175
195
 
176
196
  # only write out if it has changed
177
197
  if existing != (filtered + local_hosts)
178
- logger.info "Writing out aliases into local machines #{hosts_file}, sudo access needed"
179
- Rubber::Util::sudo_open(hosts_file, 'w') do |f|
180
- f.write(filtered)
181
- f.write(local_hosts)
198
+ if rubber_env.local_windows?
199
+ logger.info "Writing out aliases into local machines #{hosts_file}"
200
+
201
+ begin
202
+ File.open(hosts_file, 'w') do |f|
203
+ f.write(filtered)
204
+ f.write(local_hosts)
205
+ end
206
+ rescue
207
+ error_msg = "Could not modify #{hosts_file} on local machine."
208
+ error_msg += ' Please ensure you are running command as Administrator.'
209
+ abort error_msg
210
+ end
211
+ else # non-Windows OS
212
+ logger.info "Writing out aliases into local machines #{hosts_file}, sudo access needed"
213
+ Rubber::Util::sudo_open(hosts_file, 'w') do |f|
214
+ f.write(filtered)
215
+ f.write(local_hosts)
216
+ end
182
217
  end
183
218
  end
184
219
  end
@@ -1,3 +1,3 @@
1
1
  module Rubber
2
- VERSION = '2.8.1'.freeze
2
+ VERSION = '2.9.0'.freeze
3
3
  end
@@ -107,15 +107,24 @@ cloud_providers:
107
107
  #
108
108
  # Options include
109
109
  # New York 1
110
+ # Amsterdam 1
110
111
  # San Francisco 1
112
+ # New York 2
113
+ # Amsterdam 2
114
+ # Singapore 1
111
115
  #
112
116
  # These change often. Check https://www.digitalocean.com/droplets/new for the most up to date options.
113
- region: New York 1
117
+ # Default to New York 2 since this is the only region that currently supports private networking
118
+ region: New York 2
114
119
 
115
120
  # REQUIRED: The image name and type for creating instances.
116
- image_id: Ubuntu 12.04.3 x64
121
+ image_id: Ubuntu 12.04.4 x64
117
122
  image_type: 512MB
118
123
 
124
+ # Optionally enable private networking for your instances.
125
+ # This is currently only supported in New York 2.
126
+ private_networking: true
127
+
119
128
  # Use an alternate cloud provider supported by fog. This doesn't fully work
120
129
  # yet due to differences in providers within fog, but gives you a starting
121
130
  # point for contributing a new provider to rubber. See rubber/lib/rubber/cloud(.rb)
@@ -11,20 +11,27 @@ namespace :rubber do
11
11
  def args
12
12
  rubber_env.delayed_job_args || "-n #{rubber_env.num_delayed_job_workers}"
13
13
  end
14
+
15
+ def script_location
16
+ bin_location = "bin/delayed_job"
17
+ script_location = "script/delayed_job"
18
+
19
+ File.exists?(bin_location) ? bin_location : script_location
20
+ end
14
21
 
15
22
  desc "Stop the delayed_job process"
16
23
  task :stop, :roles => :delayed_job do
17
- rsudo "cd #{current_path} && RAILS_ENV=#{Rubber.env} script/delayed_job stop #{self.args}", :as => rubber_env.app_user
24
+ rsudo "cd #{current_path} && RAILS_ENV=#{Rubber.env} #{self.script_location} stop #{self.args}", :as => rubber_env.app_user
18
25
  end
19
26
 
20
27
  desc "Start the delayed_job process"
21
28
  task :start, :roles => :delayed_job do
22
- rsudo "cd #{current_path} && RAILS_ENV=#{Rubber.env} script/delayed_job start #{self.args}", :as => rubber_env.app_user
29
+ rsudo "cd #{current_path} && RAILS_ENV=#{Rubber.env} #{self.script_location} start #{self.args}", :as => rubber_env.app_user
23
30
  end
24
31
 
25
32
  desc "Restart the delayed_job process"
26
33
  task :restart, :roles => :delayed_job do
27
- rsudo "cd #{current_path} && RAILS_ENV=#{Rubber.env} script/delayed_job restart #{self.args}", :as => rubber_env.app_user
34
+ rsudo "cd #{current_path} && RAILS_ENV=#{Rubber.env} #{self.script_location} restart #{self.args}", :as => rubber_env.app_user
28
35
  end
29
36
 
30
37
  desc "Live tail of delayed_job log files for all machines"
@@ -4,13 +4,20 @@
4
4
  %>
5
5
  description "graphite server"
6
6
 
7
- start on [2345]
8
- stop on runlevel [016]
7
+ start on runlevel [2345]
8
+ stop on runlevel [!2345]
9
9
 
10
- expect daemon
10
+ env CARBON_CACHE=<%= rubber_env.graphite_dir %>/bin/carbon-cache.py
11
+ env PIDFILE=/var/run/graphite-server.pid
12
+ env LOGDIR=<%= rubber_env.graphite_storage_dir %>/log/carbon-cache
13
+
14
+ kill timeout 5
15
+
16
+ post-stop exec $CARBON_CACHE --pidfile=$PIDFILE --debug stop
11
17
 
12
18
  script
13
- cd <%= rubber_env.graphite_dir %>
14
- rm -f <%= rubber_env.graphite_server_pid_file %>
15
- exec ./bin/carbon-cache.py --pidfile <%= rubber_env.graphite_server_pid_file %> start
16
- end script
19
+ ulimit -n 65000
20
+
21
+ mkdir -p $LOGDIR
22
+ exec $CARBON_CACHE --pidfile=$PIDFILE --debug start >> $LOGDIR/console.log 2>&1
23
+ end script
@@ -0,0 +1,78 @@
1
+
2
+ on :load do
3
+
4
+ if rubber_env.local_windows? && rubber_instances.reject{|i| i.windows?}.any?
5
+
6
+ # The Bundler 'platforms' block in your Gemfile currently causes cross-platform
7
+ # deploys to fail. See: https://github.com/carlhuda/bundler/issues/646
8
+ # As a workaround we deploy to remote Linux without the Gemfile.lock from Windows.
9
+ # If you are not using 'platforms' in your Gemfile, you do not need this hack.
10
+ set :copy_exclude, strategy.copy_exclude + ['Gemfile.lock']
11
+ set :bundle_flags, "--quiet"
12
+
13
+ # An alternative option:
14
+ # set :bundle_flags, "--no_deployment --quiet"
15
+
16
+ end
17
+
18
+ end
19
+
20
+ namespace :rubber do
21
+
22
+ namespace :local_windows do
23
+
24
+ # Run dos2unix on code only if it has been deployed via copy
25
+ if ENV.has_key?('FIX_LINE_ENDINGS') || (Rubber.config.local_windows? && (fetch(:deploy_via, nil) == :copy))
26
+ after "deploy:update_code", "rubber:local_windows:dos2unix_code"
27
+ end
28
+
29
+ # Always run dos2unix each time config is pushed, as the Rubber secret file is always pushed via copy
30
+ if ENV.has_key?('FIX_LINE_ENDINGS') || Rubber.config.local_windows?
31
+ after "rubber:config:push", "rubber:local_windows:dos2unix_config"
32
+ end
33
+
34
+ desc <<-DESC
35
+ Converts remote code files to Windows-style line endings (CR+LF) to Unix-style (LF)
36
+ DESC
37
+ task :dos2unix_code, :except => { :platform => 'windows' } do
38
+ run_dos2unix release_path
39
+ end
40
+
41
+ desc <<-DESC
42
+ Converts remote config files to Windows-style line endings (CR+LF) to Unix-style (LF)
43
+ DESC
44
+ task :dos2unix_config, :except => { :platform => 'windows' } do
45
+ run_dos2unix config_path
46
+ end
47
+
48
+ def run_dos2unix(path)
49
+ rsudo "find #{path} -type f -exec dos2unix -q {} \\;"
50
+ end
51
+
52
+ def config_path
53
+ File.join(release_path, rubber_cfg.environment.config_root.sub(/^#{Rubber.root}\/?/, ''))
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+
60
+ namespace :rubber do
61
+
62
+ namespace :putty do
63
+
64
+ desc <<-DESC
65
+ Opens Putty sessions with your servers. Open multiple sessions at once
66
+ with FILTER variable. Requires Putty in your system path and a key
67
+ named *.ppk in your keys directory.
68
+ DESC
69
+ task :default do
70
+ rubber_env.rubber_instances.filtered.each do |inst|
71
+ # can use rubber_env.cloud_providers.aws.key_file as well
72
+ spawn("putty -ssh ubuntu@#{inst.external_host} -i #{Rubber.cloud.env.key_file}.ppk")
73
+ end
74
+ end
75
+
76
+ end
77
+
78
+ end
@@ -0,0 +1,4 @@
1
+ # dos2unix is a utility which converts line-endings from Windows- to Unix-style.
2
+ # It does not change files which are already Unix format.
3
+ #
4
+ packages: [dos2unix]
@@ -0,0 +1 @@
1
+ description: Enables Rubber to deploy to a remote Linux machine from a local Windows machine
@@ -7,7 +7,12 @@ class DigitalOceanTest < Test::Unit::TestCase
7
7
  context 'digital_ocean' do
8
8
 
9
9
  setup do
10
- env = {'client_key' => "XXX", 'api_key' => "YYY", 'region' => 'New York 1', 'key_file' => "#{File.dirname(__FILE__)}/../fixtures/basic/test.pem"}
10
+ env = {
11
+ 'client_key' => "XXX",
12
+ 'api_key' => "YYY",
13
+ 'region' => 'New York 1',
14
+ 'key_file' => "#{File.dirname(__FILE__)}/../fixtures/basic/test.pem"
15
+ }
11
16
  env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
12
17
  @cloud = Rubber::Cloud::DigitalOcean.new(env, nil)
13
18
  end
@@ -22,6 +27,38 @@ class DigitalOceanTest < Test::Unit::TestCase
22
27
  assert @cloud.create_instance('my-instance', 'Ubuntu 12.04 x64', '512MB', [], '', 'New York 1')
23
28
  end
24
29
 
30
+ should 'create instance with private networking enabled' do
31
+ env = {
32
+ 'client_key' => "XXX",
33
+ 'api_key' => "YYY",
34
+ 'key_file' => "#{File.dirname(__FILE__)}/../fixtures/basic/test.pem",
35
+ 'private_networking' => true
36
+ }
37
+
38
+ env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
39
+
40
+ assert Rubber::Cloud::DigitalOcean.new(env, nil).create_instance('my-instance', 'Ubuntu 12.04 x64', '512MB', [], '', 'New York 2')
41
+ end
42
+
43
+ should 'raise error if region does not support private networking but private networking is enabled' do
44
+ env = {
45
+ 'client_key' => "XXX",
46
+ 'api_key' => "YYY",
47
+ 'key_file' => "#{File.dirname(__FILE__)}/../fixtures/basic/test.pem",
48
+ 'private_networking' => true
49
+ }
50
+
51
+ env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
52
+
53
+ begin
54
+ Rubber::Cloud::DigitalOcean.new(env, nil).create_instance('my-instance', 'Ubuntu 12.04 x64', '512MB', [], '', 'New York 1')
55
+ rescue => e
56
+ assert_equal 'Private networking is enabled, but region New York 1 does not support it', e.message
57
+ else
58
+ fail 'Did not raise exception for region that does not support private networking'
59
+ end
60
+ end
61
+
25
62
  should 'raise error if invalid region' do
26
63
  begin
27
64
  @cloud.create_instance('my-instance', 'Ubuntu 12.04 x64', '512MB', [], '', 'Mars 1')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubber
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.1
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Conway
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-01 00:00:00.000000000 Z
12
+ date: 2014-06-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
@@ -427,6 +427,9 @@ files:
427
427
  - templates/jetty/config/rubber/role/jetty/jetty.xml
428
428
  - templates/jetty/config/rubber/rubber-jetty.yml
429
429
  - templates/jetty/templates.yml
430
+ - templates/local_windows/config/rubber/deploy-local_windows.rb
431
+ - templates/local_windows/config/rubber/rubber-local_windows.yml
432
+ - templates/local_windows/templates.yml
430
433
  - templates/memcached/config/rubber/deploy-memcached.rb
431
434
  - templates/memcached/config/rubber/role/memcached/crontab
432
435
  - templates/memcached/config/rubber/role/memcached/dalli.rb