rubber 3.1.0 → 3.2.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 +7 -0
- data/CHANGELOG +10 -1
- data/Gemfile +2 -3
- data/lib/ext/fog/compute/digital_ocean_v2.rb +82 -0
- data/lib/rubber/cloud.rb +11 -2
- data/lib/rubber/cloud/aws.rb +9 -536
- data/lib/rubber/cloud/aws/base.rb +318 -0
- data/lib/rubber/cloud/aws/classic.rb +245 -0
- data/lib/rubber/cloud/{aws_table_store.rb → aws/table_store.rb} +2 -1
- data/lib/rubber/cloud/aws/vpc.rb +612 -0
- data/lib/rubber/cloud/base.rb +10 -2
- data/lib/rubber/cloud/digital_ocean.rb +62 -21
- data/lib/rubber/cloud/vagrant.rb +3 -3
- data/lib/rubber/instance.rb +13 -5
- data/lib/rubber/recipes/rubber/instances.rb +68 -16
- data/lib/rubber/recipes/rubber/setup.rb +12 -2
- data/lib/rubber/recipes/rubber/vpcs.rb +92 -0
- data/lib/rubber/tag.rb +1 -1
- data/lib/rubber/util.rb +8 -0
- data/lib/rubber/version.rb +1 -1
- data/rubber.gemspec +1 -1
- data/templates/base/config/rubber/rubber.yml +32 -1
- data/templates/nat_gateway/config/rubber/role/nat_gateway/nat.sh +45 -0
- data/templates/nat_gateway/templates.yml +2 -0
- data/test/cloud/aws/classic_test.rb +54 -0
- data/test/cloud/{aws_table_store_test.rb → aws/table_store_test.rb} +8 -8
- data/test/cloud/{aws_test.rb → aws/vpc_test.rb} +5 -5
- data/test/cloud/digital_ocean_test.rb +37 -19
- data/test/instance_test.rb +1 -1
- metadata +74 -93
data/lib/rubber/tag.rb
CHANGED
data/lib/rubber/util.rb
CHANGED
@@ -119,6 +119,14 @@ module Rubber
|
|
119
119
|
str.split('_').map{ |part| part.capitalize }.join
|
120
120
|
end
|
121
121
|
|
122
|
+
def is_instance_id?(str)
|
123
|
+
str =~ /^i-[a-z0-9]+$/
|
124
|
+
end
|
125
|
+
|
126
|
+
def is_internet_gateway_id?(str)
|
127
|
+
str =~ /^igw-[a-z0-9]+$/
|
128
|
+
end
|
129
|
+
|
122
130
|
extend self
|
123
131
|
end
|
124
132
|
end
|
data/lib/rubber/version.rb
CHANGED
data/rubber.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
s.add_dependency 'net-ssh', '~> 2.6'
|
32
32
|
s.add_dependency 'thor'
|
33
33
|
s.add_dependency 'clamp'
|
34
|
-
s.add_dependency 'fog', '
|
34
|
+
s.add_dependency 'fog', '< 2.0'
|
35
35
|
|
36
36
|
s.add_development_dependency('rake')
|
37
37
|
s.add_development_dependency('test-unit')
|
@@ -81,8 +81,39 @@ cloud_providers:
|
|
81
81
|
# OPTIONAL: Needed for backing up database to s3
|
82
82
|
# backup_bucket: "#{app_name}-backups"
|
83
83
|
|
84
|
+
# OPTIONAL: Define a VPC to deploy to. The alias can be thought of as a
|
85
|
+
# unique Rubber-specific Id. If vpc_alias and vpc_addr are absent, Rubber
|
86
|
+
# will instead assume we're deploying to EC2 Classic
|
87
|
+
# vpc_alias: "#{app_name}_#{Rubber.env == 'production' ? 'production' : 'development'}"
|
88
|
+
# vpc_cidr: 10.0.0.0/16
|
89
|
+
|
90
|
+
# VPCs will typically have two subnets - one for instances that need a
|
91
|
+
# direct internet connection (load balancers, etc.), and one for instances
|
92
|
+
# that don't (database servers, app servers, etc.). At the very least,
|
93
|
+
# we'll need a public subnet. Rubber will detect the instance's private_nic
|
94
|
+
# configuration, and auto-create a subnet if appropriate. Any instances on
|
95
|
+
# the public subnet will need the following configuration. It is also
|
96
|
+
# important to note that AWS VPC Subnets are availability zone-specific,
|
97
|
+
# meaning you probably want to specify an availability zone for your
|
98
|
+
# instance. You will also have to specify a different subnet_cidr for each
|
99
|
+
# availability zone, since subnets cannot overlap.
|
100
|
+
# private_nic:
|
101
|
+
# subnet_cidr: '10.0.0.0/24'
|
102
|
+
# gateway: public
|
103
|
+
|
104
|
+
# For a private subnet, you will need to configure a nat_gateway instance in
|
105
|
+
# the public subnet so that machines can still reach the outside world for
|
106
|
+
# things like software updates. After configuring a NAT gateway, you can
|
107
|
+
# set up a separate private subnet. You will also need to set your :gateway
|
108
|
+
# Capistrano configuration value to the full hostname of the nat gateway in
|
109
|
+
# order to communicate with instances on private subnets. Instances which
|
110
|
+
# are on a private subnet will need the following configuration
|
111
|
+
# private_nic:
|
112
|
+
# subnet_cidr: '10.0.1.0/24'
|
113
|
+
# gateway: "#{rubber_instances.for_role('nat_gateway').first.instance_id}"
|
114
|
+
|
84
115
|
# REQUIRED: the ami and instance type for creating instances
|
85
|
-
# The Ubuntu images at http://alestic.com/ work well
|
116
|
+
# The Ubuntu images at http://old.alestic.com/ work well
|
86
117
|
# Ubuntu 14.04.1 Trusty instance-store 64-bit: ami-92f569fa
|
87
118
|
#
|
88
119
|
# m1.small or m1.large or m1.xlarge
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<%
|
2
|
+
@perms = 0744
|
3
|
+
@path = '/etc/init.d/nat'
|
4
|
+
@post = 'ln -sf /etc/init.d/nat /etc/rc2.d/S90nat && service nat start'
|
5
|
+
|
6
|
+
vpc_cidr = Rubber.config.cloud_providers.aws.vpc_cidr
|
7
|
+
%>
|
8
|
+
echo -e "\n\nLoading simple rc.firewall-iptables version $FWVER..\n"
|
9
|
+
DEPMOD=/sbin/depmod
|
10
|
+
MODPROBE=/sbin/modprobe
|
11
|
+
|
12
|
+
#======================================================================
|
13
|
+
#== No editing beyond this line is required for initial MASQ testing ==
|
14
|
+
echo -en " loading modules: "
|
15
|
+
echo " - Verifying that all kernel modules are ok"
|
16
|
+
$DEPMOD -a
|
17
|
+
echo "----------------------------------------------------------------------"
|
18
|
+
echo -en "ip_tables, "
|
19
|
+
$MODPROBE ip_tables
|
20
|
+
echo -en "nf_conntrack, "
|
21
|
+
$MODPROBE nf_conntrack
|
22
|
+
echo -en "nf_conntrack_ftp, "
|
23
|
+
$MODPROBE nf_conntrack_ftp
|
24
|
+
echo -en "nf_conntrack_irc, "
|
25
|
+
$MODPROBE nf_conntrack_irc
|
26
|
+
echo -en "iptable_nat, "
|
27
|
+
$MODPROBE iptable_nat
|
28
|
+
echo -en "nf_nat_ftp, "
|
29
|
+
$MODPROBE nf_nat_ftp
|
30
|
+
echo "----------------------------------------------------------------------"
|
31
|
+
echo -e " Done loading modules.\n"
|
32
|
+
echo " Enabling forwarding.."
|
33
|
+
echo "1" > /proc/sys/net/ipv4/ip_forward
|
34
|
+
echo " Enabling DynamicAddr.."
|
35
|
+
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
|
36
|
+
echo " Disabling redirects.."
|
37
|
+
echo "0" > /proc/sys/net/ipv4/conf/eth0/send_redirects
|
38
|
+
echo " Clearing any existing NAT rules and setting default policy.."
|
39
|
+
|
40
|
+
# Share public Internet connection.
|
41
|
+
iptables --table nat --flush
|
42
|
+
iptables -t nat -C POSTROUTING -o eth0 -s <%= vpc_cidr %> -j MASQUERADE 2> /dev/null || iptables -t nat -A POSTROUTING -o eth0 -s <%= vpc_cidr %> -j MASQUERADE
|
43
|
+
|
44
|
+
echo -e "\nrc.firewall-iptables v$FWVER done.\n"
|
45
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.expand_path(File.join(__FILE__, '../../..', 'test_helper'))
|
2
|
+
require 'rubber/cloud/aws/classic'
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
class AwsClassicTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
context "aws" do
|
8
|
+
|
9
|
+
setup do
|
10
|
+
env = {'access_key' => "XXX", 'secret_access_key' => "YYY", 'region' => "us-east-1"}
|
11
|
+
env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
|
12
|
+
@cloud = Rubber::Cloud::Aws::Classic.new(env, nil)
|
13
|
+
end
|
14
|
+
|
15
|
+
should "instantiate" do
|
16
|
+
assert @cloud.compute_provider
|
17
|
+
assert @cloud.storage_provider
|
18
|
+
end
|
19
|
+
|
20
|
+
should "provide storage" do
|
21
|
+
assert @cloud.storage('mybucket')
|
22
|
+
end
|
23
|
+
|
24
|
+
should "provide table store" do
|
25
|
+
assert @cloud.table_store('somekey')
|
26
|
+
end
|
27
|
+
|
28
|
+
should "create instance" do
|
29
|
+
assert @cloud.create_instance('', '', '', '', '', '')
|
30
|
+
end
|
31
|
+
|
32
|
+
should "create instance with opts" do
|
33
|
+
assert @cloud.create_instance('', '', '', '', '', '', :ebs_optimized => true)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "aws with alternative region" do
|
38
|
+
|
39
|
+
setup do
|
40
|
+
@region = "ap-southeast-2"
|
41
|
+
env = {'access_key' => "XXX", 'secret_access_key' => "YYY", 'region' => @region}
|
42
|
+
env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
|
43
|
+
@cloud = Rubber::Cloud::Aws::Classic.new(env, nil)
|
44
|
+
end
|
45
|
+
|
46
|
+
should "set region on compute provider" do
|
47
|
+
assert_equal @cloud.compute_provider.region, @region
|
48
|
+
end
|
49
|
+
|
50
|
+
should "set region on storage provider" do
|
51
|
+
assert_equal @cloud.storage_provider.region, @region
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require File.expand_path(File.join(__FILE__, '
|
2
|
-
require 'rubber/cloud/
|
1
|
+
require File.expand_path(File.join(__FILE__, '../../..', 'test_helper'))
|
2
|
+
require 'rubber/cloud/aws/table_store'
|
3
3
|
|
4
4
|
class AwsTableStoreTest < Test::Unit::TestCase
|
5
5
|
|
@@ -10,34 +10,34 @@ class AwsTableStoreTest < Test::Unit::TestCase
|
|
10
10
|
:aws_secret_access_key => 'YYY')
|
11
11
|
@table = 'mytable'
|
12
12
|
@provider.create_domain(@table)
|
13
|
-
@table_store = Rubber::Cloud::
|
13
|
+
@table_store = Rubber::Cloud::Aws::TableStore.new(@provider, @table)
|
14
14
|
end
|
15
15
|
|
16
16
|
should "require a table" do
|
17
17
|
|
18
18
|
assert_raise do
|
19
|
-
Rubber::Cloud::
|
19
|
+
Rubber::Cloud::Aws::TableStore.new(@provider, nil)
|
20
20
|
end
|
21
21
|
|
22
22
|
assert_raise do
|
23
|
-
Rubber::Cloud::
|
23
|
+
Rubber::Cloud::Aws::TableStore.new(@provider, "")
|
24
24
|
end
|
25
25
|
|
26
|
-
assert Rubber::Cloud::
|
26
|
+
assert Rubber::Cloud::Aws::TableStore.new(@provider, @table)
|
27
27
|
end
|
28
28
|
|
29
29
|
context "ensure_table" do
|
30
30
|
|
31
31
|
should "created table if not there" do
|
32
32
|
assert_raises { @provider.domain_metadata('sometable') }
|
33
|
-
@table_store = Rubber::Cloud::
|
33
|
+
@table_store = Rubber::Cloud::Aws::TableStore.new(@provider, 'sometable')
|
34
34
|
assert @provider.domain_metadata('sometable')
|
35
35
|
end
|
36
36
|
|
37
37
|
should "still work if table already exists" do
|
38
38
|
@provider.create_domain('sometable')
|
39
39
|
assert @provider.domain_metadata('sometable')
|
40
|
-
@table_store = Rubber::Cloud::
|
40
|
+
@table_store = Rubber::Cloud::Aws::TableStore.new(@provider, 'sometable')
|
41
41
|
assert @provider.domain_metadata('sometable')
|
42
42
|
end
|
43
43
|
|
@@ -1,15 +1,15 @@
|
|
1
|
-
require File.expand_path(File.join(__FILE__, '
|
2
|
-
require 'rubber/cloud/aws'
|
1
|
+
require File.expand_path(File.join(__FILE__, '../../..', 'test_helper'))
|
2
|
+
require 'rubber/cloud/aws/vpc'
|
3
3
|
require 'ostruct'
|
4
4
|
|
5
|
-
class
|
5
|
+
class AwsVpcTest < Test::Unit::TestCase
|
6
6
|
|
7
7
|
context "aws" do
|
8
8
|
|
9
9
|
setup do
|
10
10
|
env = {'access_key' => "XXX", 'secret_access_key' => "YYY", 'region' => "us-east-1"}
|
11
11
|
env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
|
12
|
-
@cloud = Rubber::Cloud::Aws.new(env, nil)
|
12
|
+
@cloud = Rubber::Cloud::Aws::Vpc.new(env, nil)
|
13
13
|
end
|
14
14
|
|
15
15
|
should "instantiate" do
|
@@ -40,7 +40,7 @@ class AwsTest < Test::Unit::TestCase
|
|
40
40
|
@region = "ap-southeast-2"
|
41
41
|
env = {'access_key' => "XXX", 'secret_access_key' => "YYY", 'region' => @region}
|
42
42
|
env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
|
43
|
-
@cloud = Rubber::Cloud::Aws.new(env, nil)
|
43
|
+
@cloud = Rubber::Cloud::Aws::Vpc.new(env, nil)
|
44
44
|
end
|
45
45
|
|
46
46
|
should "set region on compute provider" do
|
@@ -8,13 +8,21 @@ class DigitalOceanTest < Test::Unit::TestCase
|
|
8
8
|
|
9
9
|
setup do
|
10
10
|
env = {
|
11
|
-
'
|
12
|
-
'
|
13
|
-
'
|
14
|
-
'
|
11
|
+
'digital_ocean_token' => "XYZ",
|
12
|
+
'region' => 'nyc1',
|
13
|
+
'key_file' => "#{File.dirname(__FILE__)}/../fixtures/basic/test.pem",
|
14
|
+
'key_name' => 'test'
|
15
15
|
}
|
16
16
|
env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
|
17
17
|
@cloud = Rubber::Cloud::DigitalOcean.new(env, nil)
|
18
|
+
|
19
|
+
@cloud.compute_provider.ssh_keys.each do |key|
|
20
|
+
@cloud.compute_provider.delete_ssh_key(key.id)
|
21
|
+
end
|
22
|
+
|
23
|
+
# This is currently (as of 11/2/15) the only valid image name in
|
24
|
+
# Fog's mocked digital ocean images request
|
25
|
+
@valid_image_name = 'Nifty New Snapshot'
|
18
26
|
end
|
19
27
|
|
20
28
|
should 'instantiate' do
|
@@ -24,36 +32,36 @@ class DigitalOceanTest < Test::Unit::TestCase
|
|
24
32
|
|
25
33
|
context '#create_instance' do
|
26
34
|
should 'create instance' do
|
27
|
-
assert @cloud.create_instance('my-instance',
|
35
|
+
assert @cloud.create_instance('my-instance', @valid_image_name, '512MB', [], '', 'nyc1')
|
28
36
|
end
|
29
37
|
|
30
38
|
should 'create instance with private networking enabled' do
|
31
39
|
env = {
|
32
|
-
'
|
33
|
-
'api_key' => "YYY",
|
40
|
+
'digital_ocean_token' => "XYZ",
|
34
41
|
'key_file' => "#{File.dirname(__FILE__)}/../fixtures/basic/test.pem",
|
42
|
+
'key_name' => 'test',
|
35
43
|
'private_networking' => true
|
36
44
|
}
|
37
45
|
|
38
46
|
env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
|
39
47
|
|
40
|
-
assert Rubber::Cloud::DigitalOcean.new(env, nil).create_instance('my-instance',
|
48
|
+
assert Rubber::Cloud::DigitalOcean.new(env, nil).create_instance('my-instance', @valid_image_name, '512MB', [], '', 'nyc2')
|
41
49
|
end
|
42
50
|
|
43
51
|
should 'raise error if region does not support private networking but private networking is enabled' do
|
44
52
|
env = {
|
45
|
-
'
|
46
|
-
'api_key' => "YYY",
|
53
|
+
'digital_ocean_token' => "XYZ",
|
47
54
|
'key_file' => "#{File.dirname(__FILE__)}/../fixtures/basic/test.pem",
|
55
|
+
'key_name' => 'test',
|
48
56
|
'private_networking' => true
|
49
57
|
}
|
50
58
|
|
51
59
|
env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
|
52
60
|
|
53
61
|
begin
|
54
|
-
Rubber::Cloud::DigitalOcean.new(env, nil).create_instance('my-instance',
|
62
|
+
Rubber::Cloud::DigitalOcean.new(env, nil).create_instance('my-instance', @valid_image_name, '512MB', [], '', 'nyc1')
|
55
63
|
rescue => e
|
56
|
-
assert_equal 'Private networking is enabled, but region
|
64
|
+
assert_equal 'Private networking is enabled, but region nyc1 does not support it', e.message
|
57
65
|
else
|
58
66
|
fail 'Did not raise exception for region that does not support private networking'
|
59
67
|
end
|
@@ -61,9 +69,9 @@ class DigitalOceanTest < Test::Unit::TestCase
|
|
61
69
|
|
62
70
|
should 'raise error if invalid region' do
|
63
71
|
begin
|
64
|
-
@cloud.create_instance('my-instance',
|
72
|
+
@cloud.create_instance('my-instance', @valid_image_name, '512MB', [], '', 'mars1')
|
65
73
|
rescue => e
|
66
|
-
assert_equal 'Invalid region for DigitalOcean:
|
74
|
+
assert_equal 'Invalid region for DigitalOcean: mars1', e.message
|
67
75
|
else
|
68
76
|
fail 'Did not raise exception for invalid region'
|
69
77
|
end
|
@@ -71,7 +79,7 @@ class DigitalOceanTest < Test::Unit::TestCase
|
|
71
79
|
|
72
80
|
should 'raise an error if invalid image type' do
|
73
81
|
begin
|
74
|
-
@cloud.create_instance('my-instance',
|
82
|
+
@cloud.create_instance('my-instance', @valid_image_name, 'm1.small', [], '', 'nyc1')
|
75
83
|
rescue => e
|
76
84
|
assert_equal 'Invalid image type for DigitalOcean: m1.small', e.message
|
77
85
|
else
|
@@ -81,7 +89,7 @@ class DigitalOceanTest < Test::Unit::TestCase
|
|
81
89
|
|
82
90
|
should 'raise an error if invalid image name' do
|
83
91
|
begin
|
84
|
-
@cloud.create_instance('my-instance', 'Windows Server 2003', '512MB', [], '', '
|
92
|
+
@cloud.create_instance('my-instance', 'Windows Server 2003', '512MB', [], '', 'nyc1')
|
85
93
|
rescue => e
|
86
94
|
assert_equal 'Invalid image name for DigitalOcean: Windows Server 2003', e.message
|
87
95
|
else
|
@@ -91,11 +99,15 @@ class DigitalOceanTest < Test::Unit::TestCase
|
|
91
99
|
|
92
100
|
should 'raise an error if no remote SSH key and local key_file is bad' do
|
93
101
|
begin
|
94
|
-
env = {
|
102
|
+
env = {
|
103
|
+
'digital_ocean_token' => "XYZ",
|
104
|
+
'region' => 'nyc1',
|
105
|
+
'key_name' => 'test'
|
106
|
+
}
|
95
107
|
env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
|
96
108
|
cloud = Rubber::Cloud::DigitalOcean.new(env, nil)
|
97
109
|
|
98
|
-
cloud.create_instance('my-instance',
|
110
|
+
cloud.create_instance('my-instance', @valid_image_name, '512MB', [], '', 'New York 1')
|
99
111
|
rescue => e
|
100
112
|
assert_equal 'Missing key_file for DigitalOcean', e.message
|
101
113
|
else
|
@@ -108,7 +120,13 @@ class DigitalOceanTest < Test::Unit::TestCase
|
|
108
120
|
context 'digital ocean with aws storage' do
|
109
121
|
|
110
122
|
setup do
|
111
|
-
env = {
|
123
|
+
env = {
|
124
|
+
'digital_ocean_token' => "xyz",
|
125
|
+
'region' => 'nyc1',
|
126
|
+
'key_file' => "#{File.dirname(__FILE__)}/../fixtures/basic/test.pem",
|
127
|
+
'key_name' => 'test'
|
128
|
+
}
|
129
|
+
|
112
130
|
@aws_region = "ap-southeast-2"
|
113
131
|
env['cloud_providers'] = {'aws' => {'access_key' => "XXX", 'secret_access_key' => "YYY", 'region' => @aws_region}}
|
114
132
|
env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
|
data/test/instance_test.rb
CHANGED
@@ -199,7 +199,7 @@ class InstanceTest < Test::Unit::TestCase
|
|
199
199
|
setup do
|
200
200
|
env = {'access_key' => "XXX", 'secret_access_key' => "YYY", 'region' => "us-east-1"}
|
201
201
|
env = Rubber::Configuration::Environment::BoundEnv.new(env, nil, nil, nil)
|
202
|
-
@cloud = Rubber::Cloud::Aws.new(env, nil)
|
202
|
+
@cloud = Rubber::Cloud::Aws::Classic.new(env, nil)
|
203
203
|
@cloud.storage_provider.put_bucket('bucket')
|
204
204
|
Rubber.stubs(:cloud).returns(@cloud)
|
205
205
|
end
|
metadata
CHANGED
@@ -1,185 +1,163 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
5
|
-
prerelease:
|
4
|
+
version: 3.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Matt Conway
|
9
8
|
- Kevin Menard
|
10
|
-
autorequire:
|
9
|
+
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2016-01-10 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
|
-
name: capistrano
|
17
15
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
16
|
requirements:
|
20
|
-
- - ~>
|
17
|
+
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: '2.12'
|
23
|
-
|
20
|
+
name: capistrano
|
24
21
|
prerelease: false
|
22
|
+
type: :runtime
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- - ~>
|
25
|
+
- - "~>"
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: '2.12'
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
|
-
name: net-ssh
|
33
29
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
30
|
requirements:
|
36
|
-
- - ~>
|
31
|
+
- - "~>"
|
37
32
|
- !ruby/object:Gem::Version
|
38
33
|
version: '2.6'
|
39
|
-
|
34
|
+
name: net-ssh
|
40
35
|
prerelease: false
|
36
|
+
type: :runtime
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
|
-
- - ~>
|
39
|
+
- - "~>"
|
45
40
|
- !ruby/object:Gem::Version
|
46
41
|
version: '2.6'
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
|
-
name: thor
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
44
|
requirements:
|
52
|
-
- -
|
45
|
+
- - ">="
|
53
46
|
- !ruby/object:Gem::Version
|
54
47
|
version: '0'
|
55
|
-
|
48
|
+
name: thor
|
56
49
|
prerelease: false
|
50
|
+
type: :runtime
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
|
-
- -
|
53
|
+
- - ">="
|
61
54
|
- !ruby/object:Gem::Version
|
62
55
|
version: '0'
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
|
-
name: clamp
|
65
57
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
58
|
requirements:
|
68
|
-
- -
|
59
|
+
- - ">="
|
69
60
|
- !ruby/object:Gem::Version
|
70
61
|
version: '0'
|
71
|
-
|
62
|
+
name: clamp
|
72
63
|
prerelease: false
|
64
|
+
type: :runtime
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
66
|
requirements:
|
76
|
-
- -
|
67
|
+
- - ">="
|
77
68
|
- !ruby/object:Gem::Version
|
78
69
|
version: '0'
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
|
-
name: fog
|
81
71
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
72
|
requirements:
|
84
|
-
- -
|
73
|
+
- - "<"
|
85
74
|
- !ruby/object:Gem::Version
|
86
|
-
version: '
|
87
|
-
|
75
|
+
version: '2.0'
|
76
|
+
name: fog
|
88
77
|
prerelease: false
|
78
|
+
type: :runtime
|
89
79
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
80
|
requirements:
|
92
|
-
- -
|
81
|
+
- - "<"
|
93
82
|
- !ruby/object:Gem::Version
|
94
|
-
version: '
|
83
|
+
version: '2.0'
|
95
84
|
- !ruby/object:Gem::Dependency
|
96
|
-
name: rake
|
97
85
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
86
|
requirements:
|
100
|
-
- -
|
87
|
+
- - ">="
|
101
88
|
- !ruby/object:Gem::Version
|
102
89
|
version: '0'
|
103
|
-
|
90
|
+
name: rake
|
104
91
|
prerelease: false
|
92
|
+
type: :development
|
105
93
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
94
|
requirements:
|
108
|
-
- -
|
95
|
+
- - ">="
|
109
96
|
- !ruby/object:Gem::Version
|
110
97
|
version: '0'
|
111
98
|
- !ruby/object:Gem::Dependency
|
112
|
-
name: test-unit
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
100
|
requirements:
|
116
|
-
- -
|
101
|
+
- - ">="
|
117
102
|
- !ruby/object:Gem::Version
|
118
103
|
version: '0'
|
119
|
-
|
104
|
+
name: test-unit
|
120
105
|
prerelease: false
|
106
|
+
type: :development
|
121
107
|
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
108
|
requirements:
|
124
|
-
- -
|
109
|
+
- - ">="
|
125
110
|
- !ruby/object:Gem::Version
|
126
111
|
version: '0'
|
127
112
|
- !ruby/object:Gem::Dependency
|
128
|
-
name: shoulda-context
|
129
113
|
requirement: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
114
|
requirements:
|
132
|
-
- -
|
115
|
+
- - ">="
|
133
116
|
- !ruby/object:Gem::Version
|
134
117
|
version: '0'
|
135
|
-
|
118
|
+
name: shoulda-context
|
136
119
|
prerelease: false
|
120
|
+
type: :development
|
137
121
|
version_requirements: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
122
|
requirements:
|
140
|
-
- -
|
123
|
+
- - ">="
|
141
124
|
- !ruby/object:Gem::Version
|
142
125
|
version: '0'
|
143
126
|
- !ruby/object:Gem::Dependency
|
144
|
-
name: mocha
|
145
127
|
requirement: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
128
|
requirements:
|
148
|
-
- -
|
129
|
+
- - ">="
|
149
130
|
- !ruby/object:Gem::Version
|
150
131
|
version: '0'
|
151
|
-
|
132
|
+
name: mocha
|
152
133
|
prerelease: false
|
134
|
+
type: :development
|
153
135
|
version_requirements: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
136
|
requirements:
|
156
|
-
- -
|
137
|
+
- - ">="
|
157
138
|
- !ruby/object:Gem::Version
|
158
139
|
version: '0'
|
159
140
|
- !ruby/object:Gem::Dependency
|
160
|
-
name: awesome_print
|
161
141
|
requirement: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
142
|
requirements:
|
164
|
-
- -
|
143
|
+
- - ">="
|
165
144
|
- !ruby/object:Gem::Version
|
166
145
|
version: '0'
|
167
|
-
|
146
|
+
name: awesome_print
|
168
147
|
prerelease: false
|
148
|
+
type: :development
|
169
149
|
version_requirements: !ruby/object:Gem::Requirement
|
170
|
-
none: false
|
171
150
|
requirements:
|
172
|
-
- -
|
151
|
+
- - ">="
|
173
152
|
- !ruby/object:Gem::Version
|
174
153
|
version: '0'
|
175
|
-
description:
|
176
|
-
|
177
|
-
capistrano, rubber is role based, so you can define a set
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
in instances that serve only as an 'app' role to handle increased app server load.\n"
|
154
|
+
description: |2
|
155
|
+
The rubber plugin enables relatively complex multi-instance deployments of RubyOnRails applications to
|
156
|
+
Amazon's Elastic Compute Cloud (EC2). Like capistrano, rubber is role based, so you can define a set
|
157
|
+
of configuration files for a role and then assign that role to as many concrete instances as needed. One
|
158
|
+
can also assign multiple roles to a single instance. This lets one start out with a single ec2 instance
|
159
|
+
(belonging to all roles), and add new instances into the mix as needed to scale specific facets of your
|
160
|
+
deployment, e.g. adding in instances that serve only as an 'app' role to handle increased app server load.
|
183
161
|
email:
|
184
162
|
- matt@conwaysplace.com
|
185
163
|
- nirvdrum@gmail.com
|
@@ -188,8 +166,8 @@ executables:
|
|
188
166
|
extensions: []
|
189
167
|
extra_rdoc_files: []
|
190
168
|
files:
|
191
|
-
- .gitignore
|
192
|
-
- .travis.yml
|
169
|
+
- ".gitignore"
|
170
|
+
- ".travis.yml"
|
193
171
|
- CHANGELOG
|
194
172
|
- Gemfile
|
195
173
|
- Gemfile.1.8.7
|
@@ -201,12 +179,16 @@ files:
|
|
201
179
|
- lib/capistrano/find_servers_for_task_fix.rb
|
202
180
|
- lib/capistrano/hostcmd.rb
|
203
181
|
- lib/capistrano/thread_safety_fix.rb
|
182
|
+
- lib/ext/fog/compute/digital_ocean_v2.rb
|
204
183
|
- lib/rubber.rb
|
205
184
|
- lib/rubber/capistrano.rb
|
206
185
|
- lib/rubber/cli.rb
|
207
186
|
- lib/rubber/cloud.rb
|
208
187
|
- lib/rubber/cloud/aws.rb
|
209
|
-
- lib/rubber/cloud/
|
188
|
+
- lib/rubber/cloud/aws/base.rb
|
189
|
+
- lib/rubber/cloud/aws/classic.rb
|
190
|
+
- lib/rubber/cloud/aws/table_store.rb
|
191
|
+
- lib/rubber/cloud/aws/vpc.rb
|
210
192
|
- lib/rubber/cloud/base.rb
|
211
193
|
- lib/rubber/cloud/digital_ocean.rb
|
212
194
|
- lib/rubber/cloud/fog.rb
|
@@ -243,6 +225,7 @@ files:
|
|
243
225
|
- lib/rubber/recipes/rubber/tags.rb
|
244
226
|
- lib/rubber/recipes/rubber/utils.rb
|
245
227
|
- lib/rubber/recipes/rubber/volumes.rb
|
228
|
+
- lib/rubber/recipes/rubber/vpcs.rb
|
246
229
|
- lib/rubber/tag.rb
|
247
230
|
- lib/rubber/thread_safe_proxy.rb
|
248
231
|
- lib/rubber/util.rb
|
@@ -514,6 +497,8 @@ files:
|
|
514
497
|
- templates/mysql_proxy/config/rubber/mysql_proxy/mysql-proxy.lua
|
515
498
|
- templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml
|
516
499
|
- templates/mysql_proxy/templates.yml
|
500
|
+
- templates/nat_gateway/config/rubber/role/nat_gateway/nat.sh
|
501
|
+
- templates/nat_gateway/templates.yml
|
517
502
|
- templates/newrelic/config/rubber/deploy-newrelic.rb
|
518
503
|
- templates/newrelic/config/rubber/role/newrelic/monit-newrelic.conf
|
519
504
|
- templates/newrelic/config/rubber/rubber-newrelic.yml
|
@@ -641,8 +626,9 @@ files:
|
|
641
626
|
- templates/zookeeper/config/rubber/role/zookeeper/zookeeper-upstart.conf
|
642
627
|
- templates/zookeeper/config/rubber/rubber-zookeeper.yml
|
643
628
|
- templates/zookeeper/templates.yml
|
644
|
-
- test/cloud/
|
645
|
-
- test/cloud/
|
629
|
+
- test/cloud/aws/classic_test.rb
|
630
|
+
- test/cloud/aws/table_store_test.rb
|
631
|
+
- test/cloud/aws/vpc_test.rb
|
646
632
|
- test/cloud/digital_ocean_test.rb
|
647
633
|
- test/cloud/fog_storage_test.rb
|
648
634
|
- test/cloud/fog_test.rb
|
@@ -686,30 +672,25 @@ files:
|
|
686
672
|
- test/util_test.rb
|
687
673
|
homepage: https://github.com/rubber/rubber
|
688
674
|
licenses: []
|
689
|
-
|
675
|
+
metadata: {}
|
676
|
+
post_install_message:
|
690
677
|
rdoc_options: []
|
691
678
|
require_paths:
|
692
679
|
- lib
|
693
680
|
required_ruby_version: !ruby/object:Gem::Requirement
|
694
|
-
none: false
|
695
681
|
requirements:
|
696
|
-
- -
|
682
|
+
- - ">="
|
697
683
|
- !ruby/object:Gem::Version
|
698
684
|
version: 1.9.3
|
699
685
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
700
|
-
none: false
|
701
686
|
requirements:
|
702
|
-
- -
|
687
|
+
- - ">="
|
703
688
|
- !ruby/object:Gem::Version
|
704
689
|
version: '0'
|
705
|
-
segments:
|
706
|
-
- 0
|
707
|
-
hash: -1794893249450792958
|
708
690
|
requirements: []
|
709
|
-
rubyforge_project:
|
710
|
-
rubygems_version:
|
711
|
-
signing_key:
|
712
|
-
specification_version:
|
713
|
-
summary: A capistrano plugin for managing multi-instance deployments to the cloud
|
714
|
-
(ec2)
|
691
|
+
rubyforge_project:
|
692
|
+
rubygems_version: 2.4.8
|
693
|
+
signing_key:
|
694
|
+
specification_version: 4
|
695
|
+
summary: A capistrano plugin for managing multi-instance deployments to the cloud (ec2)
|
715
696
|
test_files: []
|