rubber 2.4.2 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +9 -0
- data/lib/rubber.rb +5 -0
- data/lib/rubber/cloud/aws.rb +23 -1
- data/lib/rubber/cloud/base.rb +16 -0
- data/lib/rubber/cloud/fog.rb +4 -4
- data/lib/rubber/cloud/generic.rb +1 -1
- data/lib/rubber/cloud/vagrant.rb +57 -0
- data/lib/rubber/recipes/rubber.rb +2 -1
- data/lib/rubber/recipes/rubber/instances.rb +41 -22
- data/lib/rubber/recipes/rubber/setup.rb +2 -2
- data/lib/rubber/vagrant/config.rb +32 -0
- data/lib/rubber/vagrant/plugin.rb +18 -0
- data/lib/rubber/vagrant/provisioner.rb +59 -0
- data/lib/rubber/version.rb +1 -1
- data/templates/base/config/rubber/rubber-vagrant-env.yml +7 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eea69e220cb373705e078eaa52e02f5e90a170d6
|
4
|
+
data.tar.gz: ff4b8c6ed5e32ce6bbbcc40987e11cf675d83af8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0402e07cef45eb6e2d109161e7fee64fd1cf81375b4be06a804462855b15828a5236b26aabf8f35863a7bfd69f828f40067c134f902e476327a0c3f36213de3a
|
7
|
+
data.tar.gz: 57b6878e9a38472c947019b9d8283a773b59bf082ea3529ffa80dfb13fd5cda5a2a3b85dc83fb3c35dc71af93bd81f321099be9431f84085cc11babd835083af
|
data/CHANGELOG
CHANGED
data/lib/rubber.rb
CHANGED
data/lib/rubber/cloud/aws.rb
CHANGED
@@ -64,6 +64,10 @@ module Rubber
|
|
64
64
|
'running'
|
65
65
|
end
|
66
66
|
|
67
|
+
def stopped_state
|
68
|
+
'stopped'
|
69
|
+
end
|
70
|
+
|
67
71
|
def before_create_instance(instance_alias, role_names)
|
68
72
|
setup_security_groups(instance_alias, role_names)
|
69
73
|
end
|
@@ -83,7 +87,25 @@ module Rubber
|
|
83
87
|
Rubber::Tag::update_instance_tags(instance.name)
|
84
88
|
end
|
85
89
|
end
|
86
|
-
|
90
|
+
|
91
|
+
def before_stop_instance(instance)
|
92
|
+
capistrano.fatal "Cannot stop spot instances!" if ! instance.spot_instance_request_id.nil?
|
93
|
+
capistrano.fatal "Cannot stop instances with instance-store root device!" if (instance.root_device_type != 'ebs')
|
94
|
+
end
|
95
|
+
|
96
|
+
def before_start_instance(instance)
|
97
|
+
capistrano.fatal "Cannot start spot instances!" if ! instance.spot_instance_request_id.nil?
|
98
|
+
capistrano.fatal "Cannot start instances with instance-store root device!" if (instance.root_device_type != 'ebs')
|
99
|
+
end
|
100
|
+
|
101
|
+
def after_start_instance(instance)
|
102
|
+
# Re-starting an instance will almost certainly give it a new set of IPs and DNS entries, so refresh the values.
|
103
|
+
capistrano.rubber.refresh_instance(instance.name)
|
104
|
+
|
105
|
+
# Static IPs, DNS, etc. need to be set up for the started instance.
|
106
|
+
capistrano.rubber.post_refresh
|
107
|
+
end
|
108
|
+
|
87
109
|
def create_image(image_name)
|
88
110
|
|
89
111
|
# validate all needed config set
|
data/lib/rubber/cloud/base.rb
CHANGED
@@ -26,6 +26,22 @@ module Rubber
|
|
26
26
|
setup_security_groups(instance.name, instance.role_names)
|
27
27
|
end
|
28
28
|
|
29
|
+
def before_stop_instance(instance)
|
30
|
+
# No-op by default.
|
31
|
+
end
|
32
|
+
|
33
|
+
def after_stop_instance(instance)
|
34
|
+
# No-op by default.
|
35
|
+
end
|
36
|
+
|
37
|
+
def before_start_instance(instance)
|
38
|
+
# No-op by default.
|
39
|
+
end
|
40
|
+
|
41
|
+
def after_start_instance(instance)
|
42
|
+
# No-op by default.
|
43
|
+
end
|
44
|
+
|
29
45
|
def isolate_prefix
|
30
46
|
"#{env.app_name}_#{Rubber.env}_"
|
31
47
|
end
|
data/lib/rubber/cloud/fog.rb
CHANGED
@@ -48,13 +48,13 @@ module Rubber
|
|
48
48
|
response = @compute_provider.servers.get(instance_id).reboot()
|
49
49
|
end
|
50
50
|
|
51
|
-
def stop_instance(
|
51
|
+
def stop_instance(instance, force=false)
|
52
52
|
# Don't force the stop process. I.e., allow the instance to flush its file system operations.
|
53
|
-
response = @compute_provider.servers.get(instance_id).stop(force)
|
53
|
+
response = @compute_provider.servers.get(instance.instance_id).stop(force)
|
54
54
|
end
|
55
55
|
|
56
|
-
def start_instance(
|
57
|
-
response = @compute_provider.servers.get(instance_id).start()
|
56
|
+
def start_instance(instance)
|
57
|
+
response = @compute_provider.servers.get(instance.instance_id).start()
|
58
58
|
end
|
59
59
|
|
60
60
|
def create_static_ip
|
data/lib/rubber/cloud/generic.rb
CHANGED
@@ -45,7 +45,7 @@ module Rubber
|
|
45
45
|
# Since there's no API to query for instance details, the best we can do is use what we have in memory from
|
46
46
|
# the :create_instance operation or ask the user for the details again.
|
47
47
|
unless Generic.instances
|
48
|
-
create_instance(instance_id, nil, nil, nil, nil)
|
48
|
+
create_instance(instance_id, nil, nil, nil, nil, nil)
|
49
49
|
end
|
50
50
|
|
51
51
|
Generic.instances
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'rubber/cloud/generic'
|
2
|
+
|
3
|
+
module Rubber
|
4
|
+
module Cloud
|
5
|
+
class Vagrant < Generic
|
6
|
+
|
7
|
+
def active_state
|
8
|
+
'running'
|
9
|
+
end
|
10
|
+
|
11
|
+
def stopped_state
|
12
|
+
'saved'
|
13
|
+
end
|
14
|
+
|
15
|
+
def before_create_instance(instance_alias, role_names)
|
16
|
+
unless ENV.has_key?('RUN_FROM_VAGRANT')
|
17
|
+
capistrano.fatal "Since you are using the 'vagrant' provider, you must create instances by running `vagrant up #{instance_alias}`."
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def describe_instances(instance_id=nil)
|
22
|
+
output = `vagrant status #{instance_id}`
|
23
|
+
|
24
|
+
output =~ /#{instance_id}\s+(\w+)/m
|
25
|
+
state = $1
|
26
|
+
|
27
|
+
if Generic.instances
|
28
|
+
Generic.instances.each do |instance|
|
29
|
+
if instance[:id] == instance_id
|
30
|
+
instance[:state] = state
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
Generic.instances
|
35
|
+
else
|
36
|
+
instance = {}
|
37
|
+
instance[:id] = instance_id
|
38
|
+
instance[:state] = state
|
39
|
+
|
40
|
+
[instance]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def destroy_instance(instance_id)
|
45
|
+
system("vagrant destroy #{instance_id} --force")
|
46
|
+
end
|
47
|
+
|
48
|
+
def stop_instance(instance, force=false)
|
49
|
+
system("vagrant suspend #{instance.instance_id}")
|
50
|
+
end
|
51
|
+
|
52
|
+
def start_instance(instance)
|
53
|
+
system("vagrant resume #{instance.instance_id}")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -65,7 +65,8 @@ namespace :rubber do
|
|
65
65
|
# NOTE: for some reason Capistrano requires you to have both the public and
|
66
66
|
# the private key in the same folder, the public key should have the
|
67
67
|
# extension ".pub".
|
68
|
-
|
68
|
+
|
69
|
+
ssh_options[:keys] = [ENV['RUBBER_SSH_KEY'] || cloud.env.key_file].flatten.compact
|
69
70
|
ssh_options[:timeout] = fetch(:ssh_timeout, 5)
|
70
71
|
end
|
71
72
|
|
@@ -220,7 +220,7 @@ namespace :rubber do
|
|
220
220
|
value = Capistrano::CLI.ui.ask("You do not have a primary db role, should #{instance_alias} be it [y/n]?: ")
|
221
221
|
roles << "db:primary=true" if value =~ /^y/
|
222
222
|
end
|
223
|
-
|
223
|
+
|
224
224
|
ir.concat roles.collect {|r| Rubber::Configuration::RoleItem.parse(r) }
|
225
225
|
|
226
226
|
# Add in roles that the given set of roles depends on
|
@@ -255,7 +255,7 @@ namespace :rubber do
|
|
255
255
|
post_refresh
|
256
256
|
end
|
257
257
|
|
258
|
-
set :
|
258
|
+
set :monitor, Monitor.new
|
259
259
|
|
260
260
|
# Creates a new ec2 instance with the given alias and roles
|
261
261
|
# Configures aliases (/etc/hosts) on local and remote machines
|
@@ -263,7 +263,7 @@ namespace :rubber do
|
|
263
263
|
role_names = instance_roles.collect{|x| x.name}
|
264
264
|
env = rubber_cfg.environment.bind(role_names, instance_alias)
|
265
265
|
|
266
|
-
|
266
|
+
monitor.synchronize do
|
267
267
|
cloud.before_create_instance(instance_alias, role_names)
|
268
268
|
end
|
269
269
|
|
@@ -318,7 +318,7 @@ namespace :rubber do
|
|
318
318
|
rubber_instances.add(instance_item)
|
319
319
|
rubber_instances.save()
|
320
320
|
|
321
|
-
|
321
|
+
monitor.synchronize do
|
322
322
|
cloud.after_create_instance(instance_item)
|
323
323
|
end
|
324
324
|
end
|
@@ -350,7 +350,7 @@ namespace :rubber do
|
|
350
350
|
|
351
351
|
instance = cloud.describe_instances(instance_item.instance_id).first
|
352
352
|
|
353
|
-
|
353
|
+
monitor.synchronize do
|
354
354
|
cloud.before_refresh_instance(instance_item)
|
355
355
|
end
|
356
356
|
|
@@ -386,7 +386,7 @@ namespace :rubber do
|
|
386
386
|
end
|
387
387
|
end
|
388
388
|
|
389
|
-
|
389
|
+
monitor.synchronize do
|
390
390
|
cloud.after_refresh_instance(instance_item)
|
391
391
|
end
|
392
392
|
|
@@ -499,11 +499,15 @@ namespace :rubber do
|
|
499
499
|
instance_item = rubber_instances[instance_alias]
|
500
500
|
|
501
501
|
fatal "Instance does not exist: #{instance_alias}" if ! instance_item
|
502
|
-
fatal "Cannot stop spot instances!" if ! instance_item.spot_instance_request_id.nil?
|
503
|
-
fatal "Cannot stop instances with instance-store root device!" if (instance_item.root_device_type != 'ebs')
|
504
502
|
|
505
503
|
instance_item
|
506
504
|
end
|
505
|
+
|
506
|
+
monitor.synchronize do
|
507
|
+
instance_items.each do |instance_item|
|
508
|
+
cloud.before_stop_instance(instance_item)
|
509
|
+
end
|
510
|
+
end
|
507
511
|
|
508
512
|
# Get user confirmation
|
509
513
|
human_instance_list = instance_items.collect{|instance_item| "#{instance_item.name} (#{instance_item.instance_id})"}.join(', ')
|
@@ -516,13 +520,13 @@ namespace :rubber do
|
|
516
520
|
stop_threads << Thread.new do
|
517
521
|
env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
|
518
522
|
|
519
|
-
cloud.stop_instance(instance_item
|
523
|
+
cloud.stop_instance(instance_item)
|
520
524
|
|
521
525
|
stopped = false
|
522
526
|
while !stopped
|
523
527
|
sleep 1
|
524
528
|
instance = cloud.describe_instances(instance_item.instance_id).first rescue {}
|
525
|
-
stopped = (instance[:state] ==
|
529
|
+
stopped = (instance[:state] == cloud.stopped_state)
|
526
530
|
end
|
527
531
|
end
|
528
532
|
end
|
@@ -536,23 +540,33 @@ namespace :rubber do
|
|
536
540
|
print "\n"
|
537
541
|
|
538
542
|
stop_threads.each(&:join)
|
543
|
+
|
544
|
+
monitor.synchronize do
|
545
|
+
instance_items.each do |instance_item|
|
546
|
+
cloud.after_stop_instance(instance_item)
|
547
|
+
end
|
548
|
+
end
|
539
549
|
end
|
540
550
|
|
541
551
|
# Starts the given ec2 instances. Note that this operation only works for instances that use an EBS volume for the root
|
542
552
|
# device, that are not spot instances, and that are already stopped.
|
543
553
|
def start_instances(aliases)
|
544
554
|
start_threads = []
|
545
|
-
|
555
|
+
describe_threads = []
|
546
556
|
|
547
557
|
instance_items = aliases.collect do |instance_alias|
|
548
558
|
instance_item = rubber_instances[instance_alias]
|
549
559
|
|
550
560
|
fatal "Instance does not exist: #{instance_alias}" if ! instance_item
|
551
|
-
fatal "Cannot start spot instances!" if ! instance_item.spot_instance_request_id.nil?
|
552
|
-
fatal "Cannot start instances with instance-store root device!" if (instance_item.root_device_type != 'ebs')
|
553
561
|
|
554
562
|
instance_item
|
555
563
|
end
|
564
|
+
|
565
|
+
monitor.synchronize do
|
566
|
+
instance_items.each do |instance_item|
|
567
|
+
cloud.before_start_instance(instance_item)
|
568
|
+
end
|
569
|
+
end
|
556
570
|
|
557
571
|
# Get user confirmation
|
558
572
|
human_instance_list = instance_items.collect{|instance_item| "#{instance_item.name} (#{instance_item.instance_id})"}.join(', ')
|
@@ -565,12 +579,14 @@ namespace :rubber do
|
|
565
579
|
start_threads << Thread.new do
|
566
580
|
env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
|
567
581
|
|
568
|
-
cloud.start_instance(instance_item
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
while !
|
582
|
+
cloud.start_instance(instance_item)
|
583
|
+
|
584
|
+
describe_threads << Thread.new do
|
585
|
+
started = false
|
586
|
+
while ! started
|
573
587
|
sleep 1
|
588
|
+
instance = cloud.describe_instances(instance_item.instance_id).first rescue {}
|
589
|
+
started = (instance[:state] == cloud.active_state)
|
574
590
|
end
|
575
591
|
end
|
576
592
|
end
|
@@ -584,10 +600,13 @@ namespace :rubber do
|
|
584
600
|
end
|
585
601
|
|
586
602
|
start_threads.each(&:join)
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
603
|
+
describe_threads.each(&:join)
|
604
|
+
|
605
|
+
monitor.synchronize do
|
606
|
+
instance_items.each do |instance_item|
|
607
|
+
cloud.after_start_instance(instance_item)
|
608
|
+
end
|
609
|
+
end
|
591
610
|
end
|
592
611
|
|
593
612
|
# delete from ~/.ssh/known_hosts all lines that begin with ec2- or instance_alias
|
@@ -9,8 +9,8 @@ namespace :rubber do
|
|
9
9
|
link_bash
|
10
10
|
set_timezone
|
11
11
|
enable_multiverse
|
12
|
-
install_core_packages
|
13
12
|
upgrade_packages
|
13
|
+
install_core_packages
|
14
14
|
install_packages
|
15
15
|
setup_volumes
|
16
16
|
setup_gem_sources
|
@@ -26,7 +26,7 @@ namespace :rubber do
|
|
26
26
|
# We special-case the 'ubuntu' user since Amazon doesn't since the Canonical AMIs on EC2 don't set the password for
|
27
27
|
# this account, making any password prompt potentially confusing.
|
28
28
|
orig_password = fetch(:password)
|
29
|
-
set(:password, initial_ssh_user == 'ubuntu' ? nil : Capistrano::CLI.password_prompt("Password for #{initial_ssh_user} @ #{ip}: "))
|
29
|
+
set(:password, initial_ssh_user == 'ubuntu' || ENV.has_key?('RUN_FROM_VAGRANT') ? nil : Capistrano::CLI.password_prompt("Password for #{initial_ssh_user} @ #{ip}: "))
|
30
30
|
|
31
31
|
task :_allow_root_ssh, :hosts => "#{initial_ssh_user}@#{ip}" do
|
32
32
|
rsudo "mkdir -p /root/.ssh && cp /home/#{initial_ssh_user}/.ssh/authorized_keys /root/.ssh/"
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Rubber
|
3
|
+
class Config < Vagrant.plugin("2", :config)
|
4
|
+
attr_accessor :roles, :rubber_env
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@roles = UNSET_VALUE
|
8
|
+
@rubber_env = UNSET_VALUE
|
9
|
+
end
|
10
|
+
|
11
|
+
def finalize!
|
12
|
+
@rubber_env = 'vagrant' if @rubber_env == UNSET_VALUE
|
13
|
+
|
14
|
+
::Rubber::initialize(Dir.pwd, @rubber_env)
|
15
|
+
|
16
|
+
@roles = ::Rubber.config['staging_roles'] if @roles == UNSET_VALUE
|
17
|
+
end
|
18
|
+
|
19
|
+
def validate(machine)
|
20
|
+
if @rubber_env.nil?
|
21
|
+
return { 'rubber' => ['rubber_env must be set to the Rubber environment to use for this cluster'] }
|
22
|
+
end
|
23
|
+
|
24
|
+
if @roles.nil?
|
25
|
+
return { 'rubber' => ['roles must be set to a list of roles to use for this machine'] }
|
26
|
+
end
|
27
|
+
|
28
|
+
{}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Rubber
|
3
|
+
class Plugin < Vagrant.plugin("2")
|
4
|
+
name 'rubber'
|
5
|
+
description 'Provides support for provisioning your virtual machines with Rubber.'
|
6
|
+
|
7
|
+
config(:rubber, :provisioner) do
|
8
|
+
require File.expand_path('../config', __FILE__)
|
9
|
+
Config
|
10
|
+
end
|
11
|
+
|
12
|
+
provisioner(:rubber) do
|
13
|
+
require File.expand_path('../provisioner', __FILE__)
|
14
|
+
Provisioner
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Rubber
|
3
|
+
class Provisioner < Vagrant.plugin("2", :provisioner)
|
4
|
+
attr_reader :ssh_info, :private_ip
|
5
|
+
|
6
|
+
def configure(root_config)
|
7
|
+
root_config.vm.networks.each do |type, info|
|
8
|
+
if type == :private_network
|
9
|
+
@private_ip = info[:ip]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
if @private_ip.nil?
|
14
|
+
$stderr.puts "Rubber requires a private network address to be configured in your Vagrantfile."
|
15
|
+
exit(-1)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def provision
|
20
|
+
@ssh_info = machine.ssh_info
|
21
|
+
|
22
|
+
create
|
23
|
+
bootstrap && deploy_migrations
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def create
|
29
|
+
script = <<-ENDSCRIPT
|
30
|
+
unset GEM_HOME;
|
31
|
+
unset GEM_PATH;
|
32
|
+
PATH=#{ENV['PATH'].split(':')[1..-1].join(':')} RUN_FROM_VAGRANT=true RUBBER_ENV=#{config.rubber_env} ALIAS=#{machine.name} ROLES='#{config.roles}' EXTERNAL_IP=#{private_ip} INTERNAL_IP=#{private_ip} RUBBER_SSH_KEY=#{ssh_info[:private_key_path]} bash -c 'bundle exec cap rubber:create -S initial_ssh_user=#{ssh_info[:username]}'
|
33
|
+
ENDSCRIPT
|
34
|
+
|
35
|
+
system(script)
|
36
|
+
end
|
37
|
+
|
38
|
+
def bootstrap
|
39
|
+
script = <<-ENDSCRIPT
|
40
|
+
unset GEM_HOME;
|
41
|
+
unset GEM_PATH;
|
42
|
+
PATH=#{ENV['PATH'].split(':')[1..-1].join(':')} RUN_FROM_VAGRANT=true RUBBER_ENV=#{config.rubber_env} RUBBER_SSH_KEY=#{ssh_info[:private_key_path]} FILTER=#{machine.name} bash -c 'bundle exec cap rubber:bootstrap'
|
43
|
+
ENDSCRIPT
|
44
|
+
|
45
|
+
system(script)
|
46
|
+
end
|
47
|
+
|
48
|
+
def deploy_migrations
|
49
|
+
script = <<-ENDSCRIPT
|
50
|
+
unset GEM_HOME;
|
51
|
+
unset GEM_PATH;
|
52
|
+
PATH=#{ENV['PATH'].split(':')[1..-1].join(':')} RUN_FROM_VAGRANT=true RUBBER_ENV=#{config.rubber_env} RUBBER_SSH_KEY=#{ssh_info[:private_key_path]} FILTER=#{machine.name} bash -c 'bundle exec cap deploy:migrations'
|
53
|
+
ENDSCRIPT
|
54
|
+
|
55
|
+
system(script)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/rubber/version.rb
CHANGED
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.
|
4
|
+
version: 2.5.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: 2013-06-
|
12
|
+
date: 2013-06-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|
@@ -215,6 +215,7 @@ files:
|
|
215
215
|
- lib/rubber/cloud/fog.rb
|
216
216
|
- lib/rubber/cloud/fog_storage.rb
|
217
217
|
- lib/rubber/cloud/generic.rb
|
218
|
+
- lib/rubber/cloud/vagrant.rb
|
218
219
|
- lib/rubber/commands/config.rb
|
219
220
|
- lib/rubber/commands/cron.rb
|
220
221
|
- lib/rubber/commands/util.rb
|
@@ -246,6 +247,9 @@ files:
|
|
246
247
|
- lib/rubber/tag.rb
|
247
248
|
- lib/rubber/thread_safe_proxy.rb
|
248
249
|
- lib/rubber/util.rb
|
250
|
+
- lib/rubber/vagrant/config.rb
|
251
|
+
- lib/rubber/vagrant/plugin.rb
|
252
|
+
- lib/rubber/vagrant/provisioner.rb
|
249
253
|
- lib/rubber/version.rb
|
250
254
|
- rails/init.rb
|
251
255
|
- rubber.gemspec
|
@@ -273,6 +277,7 @@ files:
|
|
273
277
|
- templates/base/config/rubber/deploy-util.rb
|
274
278
|
- templates/base/config/rubber/rubber-dns.yml
|
275
279
|
- templates/base/config/rubber/rubber-ruby.yml
|
280
|
+
- templates/base/config/rubber/rubber-vagrant-env.yml
|
276
281
|
- templates/base/config/rubber/rubber.yml
|
277
282
|
- templates/base/script/rubber
|
278
283
|
- templates/base/templates.rb
|