rubber 2.12.2 → 2.13.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 +4 -4
- data/CHANGELOG +27 -0
- data/lib/rubber/cli.rb +0 -1
- data/lib/rubber/cloud/aws_table_store.rb +1 -1
- data/lib/rubber/cloud/fog_storage.rb +1 -1
- data/lib/rubber/cloud/vsphere.rb +23 -1
- data/lib/rubber/commands/vulcanize.rb +1 -1
- data/lib/rubber/dns/aws.rb +4 -3
- data/lib/rubber/generator.rb +6 -2
- data/lib/rubber/instance.rb +48 -6
- data/lib/rubber/recipes/rubber.rb +8 -0
- data/lib/rubber/recipes/rubber/deploy.rb +9 -3
- data/lib/rubber/recipes/rubber/instances.rb +1 -0
- data/lib/rubber/recipes/rubber/setup.rb +10 -2
- data/lib/rubber/recipes/rubber/static_ips.rb +1 -1
- data/lib/rubber/recipes/rubber/utils.rb +8 -2
- data/lib/rubber/version.rb +1 -1
- data/templates/apache/config/rubber/deploy-apache.rb +1 -1
- data/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +8 -0
- data/templates/apache/config/rubber/rubber-apache.yml +2 -2
- data/templates/base/config/rubber/deploy-util.rb +3 -3
- data/templates/base/config/rubber/rubber.yml +8 -3
- data/templates/cassandra/config/rubber/deploy-cassandra.rb +2 -2
- data/templates/collectd/config/rubber/role/collectd/collectd-ping.conf +11 -2
- data/templates/collectd/config/rubber/role/collectd/thresholds.conf +1 -1
- data/templates/collectd/script/collectd/role/redis/redis_info.rb +0 -1
- data/templates/cruise/config/rubber/role/cruise/my.cnf +1 -1
- data/templates/graphite/config/rubber/deploy-graphite.rb +125 -69
- data/templates/graphite/config/rubber/role/graphite_server/carbon.conf +150 -26
- data/templates/graphite/config/rubber/role/graphite_server/graphite-carbon-default.conf +8 -0
- data/templates/graphite/config/rubber/role/graphite_server/graphite_server-upstart.conf +3 -0
- data/templates/graphite/config/rubber/role/graphite_server/storage-schemas.conf +2 -1
- data/templates/graphite/config/rubber/role/graphite_web/crontab +1 -1
- data/templates/graphite/config/rubber/role/graphite_web/dashboard.conf +1 -1
- data/templates/graphite/config/rubber/role/graphite_web/dashboard.html +1 -1
- data/templates/graphite/config/rubber/role/graphite_web/graphite.wsgi +4 -1
- data/templates/graphite/config/rubber/role/graphite_web/local_settings.py +171 -41
- data/templates/graphite/config/rubber/role/graphite_web/uwsgi.ini +6 -3
- data/templates/graphite/config/rubber/rubber-graphite.yml +7 -1
- data/templates/graphite/templates.rb +9 -0
- data/templates/graylog/config/rubber/common/graylog-rsyslog.conf +1 -1
- data/templates/graylog/config/rubber/role/graylog_server/graylog2.conf +2 -2
- data/templates/jenkins/config/rubber/role/jenkins/jenkins-apache-vhost.conf +5 -0
- data/templates/memcached/config/rubber/role/memcached/memcached.conf +1 -1
- data/templates/mysql/config/rubber/deploy-mysql.rb +2 -2
- data/templates/mysql/config/rubber/role/db/my.cnf +1 -1
- data/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +3 -3
- data/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +1 -1
- data/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +12 -0
- data/templates/passenger/config/rubber/rubber-passenger.yml +1 -1
- data/templates/passenger_nginx/config/rubber/role/passenger_nginx/nginx.conf +1 -1
- data/templates/percona/config/rubber/deploy-percona.rb +2 -2
- data/templates/percona/config/rubber/role/db/my.cnf +1 -1
- data/templates/postgresql/config/rubber/deploy-postgresql.rb +4 -8
- data/templates/postgresql/config/rubber/role/postgresql/pg_hba.conf +1 -1
- data/templates/postgresql/config/rubber/role/postgresql/postgresql.conf +1 -1
- data/templates/redis/config/rubber/role/redis/redis.conf +1 -1
- data/templates/torquebox/config/rubber/role/app/torquebox-apache-vhost.conf +12 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab0ab6d9b549a41b15aff33366f303d4245bce3d
|
4
|
+
data.tar.gz: 2bb33a094d043c0da799b9cfa9a7049ebde4dfe8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e328f32286a8d3bad4ecef5d0f248ace669da4eb8e384b169b29c999735d6240eae420560e194ecab82b27a078b16e5d3ab0a11f162675d8fdc4227c324cb0e6
|
7
|
+
data.tar.gz: 2aaad28bef809b031f579533debf52ea27cd39de9e2a88ffa6d20d061af12bd0f9df3ba0642e3fb4799b62373c95d7df671536b78ad58acf756a684b9db93293
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,30 @@
|
|
1
|
+
2.13.0 (10/01/2014)
|
2
|
+
|
3
|
+
New Features:
|
4
|
+
============
|
5
|
+
|
6
|
+
[base] Ubuntu 14.04 support.
|
7
|
+
[core] Added a way of specifying packages to be installed by OS version. <a682955>
|
8
|
+
[core] Added a way to retrieve the OS version for an instance. <1954d06, 59a5929, 491cd7e>
|
9
|
+
[core] Added a 'rubber_instance' helper method for use in templates and Capistrano tasks to reference the instance being deployed to. <4281344, 52ff83d, f94db86>
|
10
|
+
|
11
|
+
Improvements:
|
12
|
+
============
|
13
|
+
|
14
|
+
[apache] Updated config to work with both Apache 2.2 and 2.4. <8afa6df>
|
15
|
+
[graphite] Updated the graphite template to work in both Ubuntu 12.04 and 14.04. <97a86ca, 7fef018, ce328d6>
|
16
|
+
[passenger] Updated config to work with both Apache 2.2 and 2.4. <8afa6df>
|
17
|
+
[postgresql] Always use the pgdg apt repository since it supports all Ubuntu LTS releases on all supported versions of PostgreSQL. <b1aeb00>
|
18
|
+
|
19
|
+
Bug Fixes:
|
20
|
+
=========
|
21
|
+
|
22
|
+
[core] Fixed a regression whereby we might try to generate config before all the files have been pushed. <a0d6c32>
|
23
|
+
[core] Fixed a regression whereby we would try to deploy to non-Linux servers, even though they're not supported. <513e0e1>
|
24
|
+
[core] Worked around an issue with Ubuntu 14.04 and vSphere whereby VMware Tools won't correctly populate the DNS list. <15216b7, d1fceac>
|
25
|
+
[core] Make sure VMs can still be refreshed in vSphere even if the VMware Tools installation is out-of-date. <546ec93>
|
26
|
+
|
27
|
+
|
1
28
|
2.12.2 (08/26/2014)
|
2
29
|
|
3
30
|
Improvements:
|
data/lib/rubber/cli.rb
CHANGED
@@ -11,7 +11,6 @@ module Rubber
|
|
11
11
|
class CLI < Clamp::Command
|
12
12
|
|
13
13
|
# setup clamp subcommands for each rubber command
|
14
|
-
command_classes = []
|
15
14
|
Rubber::Commands.constants.each do |c|
|
16
15
|
clazz = Rubber::Commands.const_get(c)
|
17
16
|
if clazz.class == Class && clazz.ancestors.include?(Clamp::Command) &&
|
data/lib/rubber/cloud/vsphere.rb
CHANGED
@@ -102,6 +102,24 @@ module Rubber
|
|
102
102
|
compute_provider.servers.get(instance_id).destroy(:force => true)
|
103
103
|
end
|
104
104
|
|
105
|
+
def after_refresh_instance(instance)
|
106
|
+
rubber_cfg = Rubber::Configuration.get_configuration(Rubber.env)
|
107
|
+
host_env = rubber_cfg.environment.bind(nil, instance.name)
|
108
|
+
|
109
|
+
dns_servers = [host_env.public_nic, env.public_nic, host_env.private_nic, env.private_nic].collect { |nic| nic.dns_servers if nic }.compact.first
|
110
|
+
|
111
|
+
# VMware Tools currently (as of Aug. 25, 2014) has a bug with Ubuntu 14.04 whereby it fails to properly configure
|
112
|
+
# DNS when static IP configurations are used in a customization spec. This works around the problem by setting
|
113
|
+
# up the resolvconf configuration directly.
|
114
|
+
if dns_servers && ! dns_servers.empty?
|
115
|
+
contents = dns_servers.map { |server| "nameserver #{server}" }.join("\n")
|
116
|
+
contents << "\n"
|
117
|
+
|
118
|
+
capistrano.put(contents, '/etc/resolvconf/resolv.conf.d/base', :mode => '0644', :hosts => instance.external_ip)
|
119
|
+
capistrano.run('resolvconf -u', :hosts => instance.external_ip)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
105
123
|
def describe_instances(instance_id=nil)
|
106
124
|
instances = []
|
107
125
|
opts = {}
|
@@ -118,7 +136,11 @@ module Rubber
|
|
118
136
|
|
119
137
|
instance = {}
|
120
138
|
instance[:id] = item.id
|
121
|
-
|
139
|
+
|
140
|
+
# If the VM is up, but the VMware Tools installation is out-of-date, just treat it as if the tools installation
|
141
|
+
# is okay. Otherwise, the rubber:refresh process won't detect that the VM has booted properly, even though
|
142
|
+
# it's running just fine. In all other cases, use the state reported by the vSphere API call.
|
143
|
+
instance[:state] = item.tools_state == 'toolsOld' ? active_state : item.tools_state
|
122
144
|
|
123
145
|
# We can't trust the describe operation when the instance is newly created because the VM customization
|
124
146
|
# step likely hasn't completed yet. This means we'll get back the IP address for the VM template, rather
|
data/lib/rubber/dns/aws.rb
CHANGED
@@ -127,7 +127,7 @@ module Rubber
|
|
127
127
|
|
128
128
|
def find_hosts(opts = {})
|
129
129
|
opts = setup_opts(opts, [:host, :domain])
|
130
|
-
|
130
|
+
|
131
131
|
zone = find_or_create_zone(opts[:domain])
|
132
132
|
host = opts_to_host(opts)
|
133
133
|
|
@@ -142,13 +142,14 @@ module Rubber
|
|
142
142
|
hosts = hosts.select {|h| h.name == host[:name] } if opts.has_key?(:host) && opts[:host] != '*'
|
143
143
|
hosts = hosts.select {|h| h.type == host[:type] } if opts.has_key?(:type) && opts[:type] != '*'
|
144
144
|
|
145
|
-
|
145
|
+
hosts
|
146
146
|
end
|
147
147
|
|
148
148
|
def find_host_records(opts = {})
|
149
149
|
hosts = find_hosts(opts)
|
150
150
|
result = hosts.collect {|h| host_to_opts(h).merge(:domain => opts[:domain]) }
|
151
|
-
|
151
|
+
|
152
|
+
result
|
152
153
|
end
|
153
154
|
|
154
155
|
def create_host_record(opts = {})
|
data/lib/rubber/generator.rb
CHANGED
@@ -237,14 +237,18 @@ module Rubber
|
|
237
237
|
binding
|
238
238
|
end
|
239
239
|
|
240
|
-
def rubber_env
|
240
|
+
def rubber_env
|
241
241
|
Rubber::Configuration.rubber_env
|
242
242
|
end
|
243
243
|
|
244
|
-
def rubber_instances
|
244
|
+
def rubber_instances
|
245
245
|
Rubber.instances
|
246
246
|
end
|
247
247
|
|
248
|
+
def rubber_instance
|
249
|
+
rubber_instances[rubber_env.host]
|
250
|
+
end
|
251
|
+
|
248
252
|
end
|
249
253
|
|
250
254
|
end
|
data/lib/rubber/instance.rb
CHANGED
@@ -140,7 +140,7 @@ module Rubber
|
|
140
140
|
@items.values.find_all {|ic| ic.roles.any? {|r| r.name == role_name && (! options || r.options == options)}}
|
141
141
|
end
|
142
142
|
|
143
|
-
def filtered
|
143
|
+
def filtered
|
144
144
|
filtered_results = []
|
145
145
|
|
146
146
|
validate_filters()
|
@@ -160,7 +160,7 @@ module Rubber
|
|
160
160
|
return filtered_results
|
161
161
|
end
|
162
162
|
|
163
|
-
def validate_filters
|
163
|
+
def validate_filters
|
164
164
|
aliases = @items.values.collect{|ic| ic.name}
|
165
165
|
[@filters, @filters_negated].flatten.each do |f|
|
166
166
|
raise "Filter doesn't match any hosts: #{f}" if ! aliases.include?(f)
|
@@ -172,7 +172,7 @@ module Rubber
|
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
175
|
-
def all_roles
|
175
|
+
def all_roles
|
176
176
|
@items.collect {|n, i| i.role_names}.flatten.uniq
|
177
177
|
end
|
178
178
|
|
@@ -195,6 +195,9 @@ module Rubber
|
|
195
195
|
|
196
196
|
# The configuration for a single instance
|
197
197
|
class InstanceItem
|
198
|
+
UBUNTU_OS_VERSION_CMD = 'lsb_release -sr'.freeze
|
199
|
+
VARIABLES_TO_OMIT_IN_SERIALIZATION = ['@capistrano', '@os_version']
|
200
|
+
|
198
201
|
attr_reader :name, :domain, :instance_id, :image_type, :image_id, :security_groups
|
199
202
|
attr_accessor :roles, :zone
|
200
203
|
attr_accessor :external_host, :external_ip
|
@@ -202,6 +205,7 @@ module Rubber
|
|
202
205
|
attr_accessor :static_ip, :volumes, :partitions, :root_device_type
|
203
206
|
attr_accessor :spot_instance_request_id
|
204
207
|
attr_accessor :provider, :platform
|
208
|
+
attr_accessor :capistrano
|
205
209
|
|
206
210
|
def initialize(name, domain, roles, instance_id, image_type, image_id, security_group_list=[])
|
207
211
|
@name = name
|
@@ -211,6 +215,7 @@ module Rubber
|
|
211
215
|
@image_type = image_type
|
212
216
|
@image_id = image_id
|
213
217
|
@security_groups = security_group_list
|
218
|
+
@os_version = nil
|
214
219
|
end
|
215
220
|
|
216
221
|
def self.from_hash(hash)
|
@@ -226,6 +231,8 @@ module Rubber
|
|
226
231
|
def to_hash
|
227
232
|
hash = {}
|
228
233
|
instance_variables.each do |iv|
|
234
|
+
next if VARIABLES_TO_OMIT_IN_SERIALIZATION.include?(iv.to_s)
|
235
|
+
|
229
236
|
name = iv.to_s.gsub(/^@/, '')
|
230
237
|
value = instance_variable_get(iv)
|
231
238
|
value = value.collect {|r| r.to_s } if name == 'roles'
|
@@ -239,10 +246,10 @@ module Rubber
|
|
239
246
|
end
|
240
247
|
|
241
248
|
def full_name
|
242
|
-
"
|
249
|
+
"#{@name}.#{@domain}"
|
243
250
|
end
|
244
251
|
|
245
|
-
def role_names
|
252
|
+
def role_names
|
246
253
|
roles.collect {|r| r.name}
|
247
254
|
end
|
248
255
|
|
@@ -267,6 +274,41 @@ module Rubber
|
|
267
274
|
def windows?
|
268
275
|
platform == Rubber::Platforms::WINDOWS
|
269
276
|
end
|
277
|
+
|
278
|
+
def os_version
|
279
|
+
@os_version ||= begin
|
280
|
+
os_version_cmd = Rubber.config.os_version_cmd || UBUNTU_OS_VERSION_CMD
|
281
|
+
|
282
|
+
if capistrano
|
283
|
+
@os_version = capistrano.capture(os_version_cmd, :host => self.full_name).chomp
|
284
|
+
else
|
285
|
+
# If we can't SSH to the machine, we may be able to execute the command locally if this
|
286
|
+
# instance item happens to refer to the same machine we're executing on.
|
287
|
+
if Socket::gethostname == self.full_name
|
288
|
+
@os_version = `#{os_version_cmd}`.chomp
|
289
|
+
else
|
290
|
+
raise "Unable to get os_version for #{self.full_name}"
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
if RUBY_VERSION < '1.9'
|
297
|
+
def to_yaml_properties
|
298
|
+
vars = instance_variables.map { |x| x.to_s }
|
299
|
+
vars - VARIABLES_TO_OMIT_IN_SERIALIZATION
|
300
|
+
end
|
301
|
+
|
302
|
+
else
|
303
|
+
def encode_with(coder)
|
304
|
+
vars = instance_variables.map { |x| x.to_s }
|
305
|
+
vars = vars - VARIABLES_TO_OMIT_IN_SERIALIZATION
|
306
|
+
|
307
|
+
vars.each do |var|
|
308
|
+
coder[var.gsub('@', '')] = eval(var)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
270
312
|
end
|
271
313
|
|
272
314
|
# The configuration for a single role contained in the list
|
@@ -328,7 +370,7 @@ module Rubber
|
|
328
370
|
end
|
329
371
|
alias == eql?
|
330
372
|
|
331
|
-
def hash
|
373
|
+
def hash
|
332
374
|
@name.hash
|
333
375
|
end
|
334
376
|
|
@@ -65,6 +65,8 @@ namespace :rubber do
|
|
65
65
|
set :rubber_env, rubber_cfg.environment.bind()
|
66
66
|
set :rubber_instances, rubber_cfg.instance
|
67
67
|
|
68
|
+
rubber_cfg.instance.each { |instance| instance.capistrano = self }
|
69
|
+
|
68
70
|
# Disable connecting to any Windows instance.
|
69
71
|
# pass -l to bash in :shell to that run also gets full env
|
70
72
|
# use a pty so we don't get "stdin: is not a tty" error output
|
@@ -147,6 +149,12 @@ namespace :rubber do
|
|
147
149
|
|
148
150
|
end
|
149
151
|
|
152
|
+
def top.rubber_instance
|
153
|
+
hostname = capture('hostname').chomp
|
154
|
+
|
155
|
+
rubber_instances[hostname]
|
156
|
+
end
|
157
|
+
|
150
158
|
Dir[File.join(File.dirname(__FILE__), 'rubber/*.rb')].each do |rubber_part|
|
151
159
|
load(rubber_part)
|
152
160
|
end
|
@@ -30,6 +30,8 @@ namespace :rubber do
|
|
30
30
|
|
31
31
|
namespace :config do
|
32
32
|
|
33
|
+
allow_optional_tasks(self)
|
34
|
+
|
33
35
|
desc <<-DESC
|
34
36
|
Pushes and runs rubber configuration on the deployed rails application
|
35
37
|
DESC
|
@@ -73,7 +75,9 @@ namespace :rubber do
|
|
73
75
|
rsudo "chown -R #{rubber_env.app_user}:#{rubber_env.app_user} #{current_path}/tmp"
|
74
76
|
end
|
75
77
|
|
76
|
-
def push_config
|
78
|
+
def push_config(options = {})
|
79
|
+
path = options.delete(:deploy_path) || config_path
|
80
|
+
|
77
81
|
unless fetch(:rubber_config_files_pushed, false)
|
78
82
|
# Need to do this so we can work with staging instances without having to
|
79
83
|
# checkin instance file between create and bootstrap, as well as during a deploy
|
@@ -93,7 +97,7 @@ namespace :rubber do
|
|
93
97
|
|
94
98
|
push_files.each do |file|
|
95
99
|
dest_file = file.sub(/^#{Rubber.root}\/?/, '')
|
96
|
-
put(File.read(file), File.join(
|
100
|
+
put(File.read(file), File.join(path, dest_file), :mode => "+r")
|
97
101
|
end
|
98
102
|
end
|
99
103
|
|
@@ -101,7 +105,7 @@ namespace :rubber do
|
|
101
105
|
secret = rubber_cfg.environment.config_secret
|
102
106
|
if secret && File.exist?(secret)
|
103
107
|
base = rubber_cfg.environment.config_root.sub(/^#{Rubber.root}\/?/, '')
|
104
|
-
put(File.read(secret), File.join(
|
108
|
+
put(File.read(secret), File.join(path, base, File.basename(secret)), :mode => "+r")
|
105
109
|
end
|
106
110
|
|
107
111
|
set :rubber_config_files_pushed, true
|
@@ -114,6 +118,8 @@ namespace :rubber do
|
|
114
118
|
force = options[:force] || ENV['FORCE']
|
115
119
|
file = options[:file] || ENV['FILE']
|
116
120
|
|
121
|
+
push_config(:deploy_path => path)
|
122
|
+
|
117
123
|
opts = ""
|
118
124
|
opts += " --no_post" if no_post
|
119
125
|
opts += " --force" if force
|
@@ -315,6 +315,7 @@ namespace :rubber do
|
|
315
315
|
|
316
316
|
instance_item = Rubber::Configuration::InstanceItem.new(instance_alias, env.domain, instance_roles, instance_id, ami_type, ami, security_groups)
|
317
317
|
instance_item.spot_instance_request_id = request_id if create_spot_instance
|
318
|
+
instance_item.capistrano = self
|
318
319
|
rubber_instances.add(instance_item)
|
319
320
|
rubber_instances.save()
|
320
321
|
|
@@ -603,8 +603,7 @@ namespace :rubber do
|
|
603
603
|
end
|
604
604
|
end
|
605
605
|
end
|
606
|
-
|
607
|
-
|
606
|
+
|
608
607
|
def destroy_dyndns(instance_item)
|
609
608
|
env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
|
610
609
|
if env.dns_provider
|
@@ -633,10 +632,19 @@ namespace :rubber do
|
|
633
632
|
expanded_pkg_list << pkg_spec
|
634
633
|
end
|
635
634
|
end
|
635
|
+
|
636
|
+
@os_specific_opts = get_host_options('os_packages') { |pkg_list| pkg_list.join(' ') }
|
637
|
+
|
636
638
|
expanded_pkg_list << 'ec2-ami-tools' if rubber_env.cloud_provider == 'aws'
|
637
639
|
expanded_pkg_list.join(' ')
|
638
640
|
end
|
639
641
|
|
642
|
+
opts.each do |host, packages|
|
643
|
+
if @os_specific_opts.has_key?(host)
|
644
|
+
opts[host] << " #{@os_specific_opts[host]}"
|
645
|
+
end
|
646
|
+
end
|
647
|
+
|
640
648
|
if upgrade
|
641
649
|
if ENV['NO_DIST_UPGRADE']
|
642
650
|
sudo_script 'upgrade_packages', <<-ENDSCRIPT
|
@@ -166,7 +166,7 @@ namespace :rubber do
|
|
166
166
|
logger.info "Run 'cap rubber:describe_static_ips' to check the allocated ones"
|
167
167
|
end
|
168
168
|
|
169
|
-
def allocate_static_ip
|
169
|
+
def allocate_static_ip
|
170
170
|
ip = cloud.create_static_ip()
|
171
171
|
fatal "Failed to allocate static ip" if ip.nil?
|
172
172
|
return ip
|
@@ -207,13 +207,19 @@ namespace :rubber do
|
|
207
207
|
# be installed.
|
208
208
|
def get_host_options(cfg_name, &block)
|
209
209
|
opts = {}
|
210
|
-
rubber_instances.each do |
|
210
|
+
rubber_instances.each do |ic|
|
211
211
|
env = rubber_cfg.environment.bind(ic.role_names, ic.name)
|
212
212
|
cfg_value = env[cfg_name]
|
213
|
+
|
213
214
|
if cfg_value
|
215
|
+
if cfg_value.is_a?(Hash)
|
216
|
+
cfg_value = cfg_value[ic.os_version]
|
217
|
+
end
|
218
|
+
|
214
219
|
if block
|
215
220
|
cfg_value = block.call(cfg_value)
|
216
221
|
end
|
222
|
+
|
217
223
|
opts["hostvar_#{ic.full_name}"] = cfg_value if cfg_value && cfg_value.strip.size > 0
|
218
224
|
end
|
219
225
|
end
|
@@ -226,7 +232,7 @@ namespace :rubber do
|
|
226
232
|
end
|
227
233
|
|
228
234
|
def update_code_for_bootstrap
|
229
|
-
unless
|
235
|
+
unless fetch(:rubber_code_was_updated, false)
|
230
236
|
deploy.setup
|
231
237
|
logger.info "updating code for bootstrap"
|
232
238
|
deploy.update_code
|
data/lib/rubber/version.rb
CHANGED
@@ -9,7 +9,7 @@ namespace :rubber do
|
|
9
9
|
|
10
10
|
task :install, :roles => :apache do
|
11
11
|
rubber.sudo_script 'install_apache', <<-ENDSCRIPT
|
12
|
-
a2dissite default
|
12
|
+
a2dissite *default || true
|
13
13
|
|
14
14
|
# TODO: remove this once 12.04 is fixed
|
15
15
|
# https://bugs.launchpad.net/ubuntu/+source/mod-proxy-html/+bug/964397
|