rubber 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,4 +8,4 @@ module Rubber
8
8
  Rubber.cloud.create_tags(instance_item.instance_id, :Name => instance_alias, :Environment => Rubber.env)
9
9
  end
10
10
  end
11
- end
11
+ end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Rubber
2
- VERSION = '3.1.0'.freeze
2
+ VERSION = '3.2.0'.freeze
3
3
  end
@@ -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', '~> 1.6'
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,2 @@
1
+ description: A NAT gateway tailored to AWS w/ VPC
2
+
@@ -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__, '../..', 'test_helper'))
2
- require 'rubber/cloud/aws_table_store'
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::AwsTableStore.new(@provider, @table)
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::AwsTableStore.new(@provider, nil)
19
+ Rubber::Cloud::Aws::TableStore.new(@provider, nil)
20
20
  end
21
21
 
22
22
  assert_raise do
23
- Rubber::Cloud::AwsTableStore.new(@provider, "")
23
+ Rubber::Cloud::Aws::TableStore.new(@provider, "")
24
24
  end
25
25
 
26
- assert Rubber::Cloud::AwsTableStore.new(@provider, @table)
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::AwsTableStore.new(@provider, 'sometable')
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::AwsTableStore.new(@provider, 'sometable')
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__, '../..', 'test_helper'))
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 AwsTest < Test::Unit::TestCase
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
- 'client_key' => "XXX",
12
- 'api_key' => "YYY",
13
- 'region' => 'New York 1',
14
- 'key_file' => "#{File.dirname(__FILE__)}/../fixtures/basic/test.pem"
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', 'Ubuntu 12.04 x64', '512MB', [], '', 'New York 1')
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
- 'client_key' => "XXX",
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', 'Ubuntu 12.04 x64', '512MB', [], '', 'New York 2')
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
- 'client_key' => "XXX",
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', 'Ubuntu 12.04 x64', '512MB', [], '', 'New York 1')
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 New York 1 does not support it', e.message
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', 'Ubuntu 12.04 x64', '512MB', [], '', 'Mars 1')
72
+ @cloud.create_instance('my-instance', @valid_image_name, '512MB', [], '', 'mars1')
65
73
  rescue => e
66
- assert_equal 'Invalid region for DigitalOcean: Mars 1', e.message
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', 'Ubuntu 12.04 x64', 'm1.small', [], '', 'New York 1')
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', [], '', 'New York 1')
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 = {'client_key' => "XXX", 'api_key' => "YYY", 'region' => 'New York 1'}
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', 'Ubuntu 12.04 x64', '512MB', [], '', 'New York 1')
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 = {'client_key' => "XXX", 'api_key' => "YYY", 'region' => 'New York 1', 'key_file' => "#{File.dirname(__FILE__)}/../fixtures/basic/test.pem"}
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)
@@ -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.1.0
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: 2015-05-31 00:00:00.000000000 Z
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
- type: :runtime
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
- type: :runtime
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
- type: :runtime
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
- type: :runtime
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: '1.6'
87
- type: :runtime
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: '1.6'
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
- type: :development
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
- type: :development
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
- type: :development
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
- type: :development
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
- type: :development
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: ! " The rubber plugin enables relatively complex multi-instance deployments
176
- of RubyOnRails applications to\n Amazon's Elastic Compute Cloud (EC2). Like
177
- capistrano, rubber is role based, so you can define a set\n of configuration
178
- files for a role and then assign that role to as many concrete instances as needed.
179
- One\n can also assign multiple roles to a single instance. This lets one start
180
- out with a single ec2 instance\n (belonging to all roles), and add new instances
181
- into the mix as needed to scale specific facets of your\n deployment, e.g. adding
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/aws_table_store.rb
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/aws_table_store_test.rb
645
- - test/cloud/aws_test.rb
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
- post_install_message:
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: 1.8.23.2
711
- signing_key:
712
- specification_version: 3
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: []