dew 0.1.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.
- data/LICENSE +22 -0
- data/README.md +38 -0
- data/Rakefile +26 -0
- data/bin/dew +87 -0
- data/config/cucumber.yaml +4 -0
- data/features/create-ami.feature +16 -0
- data/features/create-environments.feature +46 -0
- data/features/deploy-puge.feature +16 -0
- data/features/step_definitions/aws-steps.rb +101 -0
- data/features/step_definitions/deploy-puge-steps.rb +27 -0
- data/features/support/env.rb +38 -0
- data/features/support/hooks.rb +10 -0
- data/lib/dew.rb +7 -0
- data/lib/dew/aws_resources.yaml +122 -0
- data/lib/dew/base_command.rb +24 -0
- data/lib/dew/cloud.rb +79 -0
- data/lib/dew/commands.rb +6 -0
- data/lib/dew/commands/ami.rb +67 -0
- data/lib/dew/commands/console.rb +17 -0
- data/lib/dew/commands/console/irb_override.rb +24 -0
- data/lib/dew/commands/deploy.rb +114 -0
- data/lib/dew/commands/deploy/templates/apache.conf.erb +28 -0
- data/lib/dew/commands/deploy/templates/known_hosts +2 -0
- data/lib/dew/commands/deploy/templates/rvmrc +2 -0
- data/lib/dew/commands/environments.rb +110 -0
- data/lib/dew/commands/tidy.rb +35 -0
- data/lib/dew/controllers.rb +3 -0
- data/lib/dew/controllers/amis_controller.rb +82 -0
- data/lib/dew/controllers/deploy_controller.rb +10 -0
- data/lib/dew/controllers/environments_controller.rb +48 -0
- data/lib/dew/models.rb +7 -0
- data/lib/dew/models/account.rb +30 -0
- data/lib/dew/models/database.rb +32 -0
- data/lib/dew/models/deploy.rb +2 -0
- data/lib/dew/models/deploy/puge.rb +61 -0
- data/lib/dew/models/deploy/run.rb +19 -0
- data/lib/dew/models/environment.rb +199 -0
- data/lib/dew/models/fog_model.rb +23 -0
- data/lib/dew/models/profile.rb +60 -0
- data/lib/dew/models/server.rb +134 -0
- data/lib/dew/password.rb +7 -0
- data/lib/dew/tasks/spec.rake +14 -0
- data/lib/dew/validations.rb +8 -0
- data/lib/dew/version.rb +3 -0
- data/lib/dew/view.rb +39 -0
- data/lib/tasks/spec.rake +14 -0
- data/spec/dew/cloud_spec.rb +90 -0
- data/spec/dew/controllers/amis_controller_spec.rb +137 -0
- data/spec/dew/controllers/deploy_controller_spec.rb +38 -0
- data/spec/dew/controllers/environments_controller_spec.rb +133 -0
- data/spec/dew/models/account_spec.rb +47 -0
- data/spec/dew/models/database_spec.rb +58 -0
- data/spec/dew/models/deploy/puge_spec.rb +72 -0
- data/spec/dew/models/deploy/run_spec.rb +38 -0
- data/spec/dew/models/environment_spec.rb +374 -0
- data/spec/dew/models/fog_model_spec.rb +24 -0
- data/spec/dew/models/profile_spec.rb +85 -0
- data/spec/dew/models/server_spec.rb +190 -0
- data/spec/dew/password_spec.rb +11 -0
- data/spec/dew/spec_helper.rb +22 -0
- data/spec/dew/view_spec.rb +38 -0
- metadata +284 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../spec_helper'))
|
2
|
+
|
3
|
+
describe FogModel do
|
4
|
+
let (:fog_object) { double('Fog Object', :id => 'i-12345') }
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
@model = FogModel.new(fog_object)
|
8
|
+
end
|
9
|
+
|
10
|
+
it { @model.id.should == fog_object.id }
|
11
|
+
|
12
|
+
describe :wait_until_ready do
|
13
|
+
it "should call Fog's wait_for method to check that the object is ready" do
|
14
|
+
fog_object.should_receive(:wait_for)
|
15
|
+
@model.wait_until_ready
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should pass unrecognized methods on to its child object" do
|
20
|
+
fog_object.should_receive(:wibble).with('hello').and_return('goodbye')
|
21
|
+
@model.wibble('hello').should == 'goodbye'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../spec_helper'))
|
2
|
+
|
3
|
+
describe Profile do
|
4
|
+
|
5
|
+
it "should look for profile file in the profiles dir" do
|
6
|
+
File.should_receive(:read).with("#{ENV['HOME']}/.dew/profiles/puge.yaml").and_return("---")
|
7
|
+
Profile.read('puge')
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "parsing yaml" do
|
11
|
+
|
12
|
+
# TODO: This can be refactored to use subject to reduce lines of code.
|
13
|
+
|
14
|
+
let (:yaml) { "blank: blank" }
|
15
|
+
|
16
|
+
before :each do
|
17
|
+
File.stub(:read).and_return(yaml)
|
18
|
+
Cloud.stub(:region => 'ap-southeast-1')
|
19
|
+
Cloud.stub_chain(:compute, :flavors, :detect => double(:flavor, :ram => 1.7, :cores => 5, :disk => 350, :bits => 32 ))
|
20
|
+
end
|
21
|
+
|
22
|
+
subject { Profile.read('development') }
|
23
|
+
|
24
|
+
describe "with an instances section" do
|
25
|
+
let (:yaml) {
|
26
|
+
"
|
27
|
+
instances:
|
28
|
+
amis:
|
29
|
+
ap-southeast-1: ami-ccf405a5
|
30
|
+
size: c1.medium
|
31
|
+
count: 2
|
32
|
+
security-groups:
|
33
|
+
- non_default
|
34
|
+
keypair: id_revo
|
35
|
+
"
|
36
|
+
}
|
37
|
+
|
38
|
+
it { subject.ami.should == 'ami-ccf405a5' }
|
39
|
+
it { subject.count.should == 2 }
|
40
|
+
it { subject.size.should == 'c1.medium' }
|
41
|
+
it { subject.security_groups.should == %w{non_default} }
|
42
|
+
it { subject.keypair.should == 'id_revo' }
|
43
|
+
|
44
|
+
it "should have a to_s" do
|
45
|
+
subject.to_s.should == <<EOF
|
46
|
+
+-----------------+----------------------------------------------------------------------------------------------------+
|
47
|
+
| 2 instances | "c1.medium" (1.7 GB memory, 5 ECUs processor, 350 GB storage, 32-bit platform, ?? I/O performance) |
|
48
|
+
| disk image | "ami-ccf405a5" |
|
49
|
+
| security groups | ["non_default"] |
|
50
|
+
| keypair | "id_revo" |
|
51
|
+
+-----------------+----------------------------------------------------------------------------------------------------+
|
52
|
+
EOF
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "without an elb or RDS section" do
|
57
|
+
it { subject.has_elb?.should be_false }
|
58
|
+
it { subject.has_rds?.should be_false }
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "with an elb section" do
|
62
|
+
let (:yaml) {
|
63
|
+
"
|
64
|
+
elb:
|
65
|
+
listener_ports:
|
66
|
+
- 80
|
67
|
+
- 443
|
68
|
+
"
|
69
|
+
}
|
70
|
+
it { subject.has_elb?.should be_true }
|
71
|
+
it { subject.elb_listener_ports.should == [80, 443] }
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "with an RDS section" do
|
75
|
+
let (:yaml) {
|
76
|
+
"
|
77
|
+
rds:
|
78
|
+
size: db.m1.small
|
79
|
+
"
|
80
|
+
}
|
81
|
+
it { subject.has_rds?.should be_true }
|
82
|
+
it { subject.rds_size.should == 'db.m1.small' }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,190 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../spec_helper'))
|
2
|
+
|
3
|
+
describe Server do
|
4
|
+
|
5
|
+
let (:compute) { double('Compute', :servers => double('ComputeServers'), :images => double('ComputeImages'), :tags => double('ComputeTags')) }
|
6
|
+
let (:id) { 'i-12345' }
|
7
|
+
let (:endpoint) { '10.4.5.6' }
|
8
|
+
let (:key_name) { 'mykey'}
|
9
|
+
let (:fog_server) { double('FogServer', :id => id, :public_ip_address => endpoint, :key_name => key_name, :state => 'running', :tags => { 'Creator' => 'foo'} )}
|
10
|
+
|
11
|
+
before :each do
|
12
|
+
compute.servers.stub(:create => fog_server)
|
13
|
+
Cloud.stub(:compute => compute)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe ".create!" do
|
17
|
+
it "should ask Fog to create a new server with the provided AMI, size and keypair" do
|
18
|
+
compute.servers.should_receive(:create).with(:image_id => 'ami', :flavor_id => 'size', :key_name => key_name, :groups => %(non_default))
|
19
|
+
Server.create!('ami', 'size', key_name, %(non_default))
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return a new server object with an ID" do
|
23
|
+
server = Server.create!('ami', 'size', key_name, %(non_default))
|
24
|
+
server.id.should == id
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe ".find" do
|
29
|
+
it "should return an instance for each server return from fog matching our tag" do
|
30
|
+
compute.servers.should_receive(:all).with('tag:Environment' => 'hello').and_return([fog_server])
|
31
|
+
Server.should_receive(:new).with(fog_server).and_return('server')
|
32
|
+
Server.find('Environment', 'hello').should == ['server']
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should filter out servers that are not running or pending" do
|
36
|
+
terminated_fog_server = double('Terminated Fog Server', :state => 'terminated')
|
37
|
+
Server.should_receive(:new).with(fog_server).and_return('server')
|
38
|
+
compute.servers.stub(:all => [fog_server, terminated_fog_server])
|
39
|
+
Server.find('Environment', 'hello').should == ['server']
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "with an already created server" do
|
44
|
+
let (:ssh) { double('SSH') }
|
45
|
+
|
46
|
+
before :each do
|
47
|
+
@server = Server.create!('ami', 'size', key_name, %(non_default))
|
48
|
+
Gofer::Host.stub(:new => ssh)
|
49
|
+
Cloud.stub(:keyfile_path => '')
|
50
|
+
File.stub(:read => nil)
|
51
|
+
end
|
52
|
+
|
53
|
+
describe :username do
|
54
|
+
it "should always be 'ubuntu'" do
|
55
|
+
@server.username.should == 'ubuntu'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe :creator do
|
60
|
+
it "should return the creator from the fog_object's tags" do
|
61
|
+
@server.creator.should == 'foo'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe :add_tag do
|
66
|
+
it "should ask our compute handler to tag an instance with each key value pair provided" do
|
67
|
+
compute.tags.should_receive(:create).with(:resource_id => id, :key => 'A', :value => 'b')
|
68
|
+
@server.add_tag('A', 'b')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe :credentials do
|
73
|
+
context "server has no key" do
|
74
|
+
let(:key_name) { nil }
|
75
|
+
|
76
|
+
it { @server.credentials.should be_false }
|
77
|
+
end
|
78
|
+
|
79
|
+
context "server has a key" do
|
80
|
+
before do
|
81
|
+
@path = '/key/path'
|
82
|
+
Cloud.should_receive(:keyfile_path).with(key_name).and_return(@path)
|
83
|
+
end
|
84
|
+
|
85
|
+
context "key file exists" do
|
86
|
+
let(:file_stat) { double(:stat, :mode => 600, :uid => Process.euid) }
|
87
|
+
before do
|
88
|
+
File.should_receive(:stat).with(@path).and_return(file_stat)
|
89
|
+
File.should_receive(:chmod).with(0600, @path).and_return(true)
|
90
|
+
end
|
91
|
+
|
92
|
+
it { @server.credentials.should == "-i /key/path -o StrictHostKeyChecking=no ubuntu@10.4.5.6" }
|
93
|
+
end
|
94
|
+
|
95
|
+
context "key file does not exist" do
|
96
|
+
let(:file_stat) { double(:stat, :mode => 600, :uid => Process.euid) }
|
97
|
+
before do
|
98
|
+
File.should_receive(:stat).with(@path).and_raise(Errno::ENOENT)
|
99
|
+
end
|
100
|
+
|
101
|
+
it { lambda { @server.credentials }.should raise_error /Can't find keyfile/ }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should delegate some methods to our fog object" do
|
107
|
+
%w{availability_zone public_ip_address}.each do |method_name|
|
108
|
+
fog_server.should_receive(method_name).with('args').and_return('hello')
|
109
|
+
@server.send(method_name, 'args').should == 'hello'
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# TODO: AMI should be refactored out in to its own class.
|
114
|
+
describe :create_ami do
|
115
|
+
let (:ami_name) { 'my-new-ami' }
|
116
|
+
let (:ami) { double('AMI', :id => 'ami-12345', :wait_for => nil)}
|
117
|
+
let (:ami_create_response) {double('response', :body => {'imageId' => ami.id})}
|
118
|
+
|
119
|
+
before :each do
|
120
|
+
compute.stub(:create_image => ami_create_response)
|
121
|
+
compute.images.stub(:get => ami)
|
122
|
+
Account.stub(:user_ids => [])
|
123
|
+
end
|
124
|
+
|
125
|
+
after :each do
|
126
|
+
@server.create_ami ami_name
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should create an AMI from the server image" do
|
130
|
+
compute.should_receive(:create_image).with(@server.id, ami_name, //).and_return(ami_create_response)
|
131
|
+
compute.images.should_receive(:get).with(ami.id).and_return(ami)
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should wait for the AMI to become ready" do
|
135
|
+
ami.should_receive(:wait_for)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should share the AMI with the other known accounts" do
|
139
|
+
Account.should_receive(:user_ids).and_return(['11', '22'])
|
140
|
+
compute.should_receive(:modify_image_attributes).with(ami.id, 'launchPermission', 'add', 'UserId' => '11')
|
141
|
+
compute.should_receive(:modify_image_attributes).with(ami.id, 'launchPermission', 'add', 'UserId' => '22')
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
|
146
|
+
describe :ssh do
|
147
|
+
it "should open a new Gofer::Host connection using the hostname, default username and key data" do
|
148
|
+
Cloud.should_receive(:keyfile_path).with(key_name).and_return('/key/path')
|
149
|
+
File.should_receive(:read).with('/key/path').and_return('key data')
|
150
|
+
Gofer::Host.should_receive(:new).with(endpoint, 'ubuntu', hash_including(:key_data => ['key data'])).and_return 'ssh'
|
151
|
+
@server.ssh.should == 'ssh'
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe :configure_for_database do
|
156
|
+
it "should open up an SSH connection and populate /etc/environment with database credentials" do
|
157
|
+
database = double('Database')
|
158
|
+
database.should_receive(:db_environment_file).with('password').and_return('environment file contents')
|
159
|
+
ssh.should_receive(:write).with('environment file contents', '/tmp/envfile')
|
160
|
+
ssh.should_receive(:run).with('sudo mv /tmp/envfile /etc/environment')
|
161
|
+
@server.configure_for_database database, 'password'
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe :wait_until_ready do
|
166
|
+
let (:gofer) { double('Gofer::Host') }
|
167
|
+
|
168
|
+
before :each do
|
169
|
+
fog_server.stub(:wait_for => nil)
|
170
|
+
Gofer::Host.stub(:new).and_return(gofer)
|
171
|
+
end
|
172
|
+
|
173
|
+
context "with SSH responding correctly" do
|
174
|
+
it "should return successfully" do
|
175
|
+
gofer.should_receive(:run)
|
176
|
+
@server.wait_until_ready
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
context "with SSH timing out" do
|
181
|
+
it "should return the underlying error" do
|
182
|
+
# Use a very low timeout to avoid the test taking forever.
|
183
|
+
gofer.should_receive(:run).at_least(1).and_raise Timeout::Error
|
184
|
+
lambda {@server.wait_until_ready(1)}.should raise_error /SSH Timeout/
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
|
+
|
3
|
+
describe Password do
|
4
|
+
|
5
|
+
describe :random do
|
6
|
+
it "should return a random string of characters each time it is called" do
|
7
|
+
Password.random.should_not == Password.random
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
# From https://github.com/colszowka/simplecov#readme
|
3
|
+
if ENV['RSPEC_COVERED']
|
4
|
+
require 'simplecov'
|
5
|
+
SimpleCov.start 'rails' do
|
6
|
+
# bug: changing the coverage_dir here breaks coverage recording.
|
7
|
+
add_filter "/commands/"
|
8
|
+
add_filter "/base_command.rb"
|
9
|
+
|
10
|
+
at_exit do
|
11
|
+
SimpleCov.result.format!
|
12
|
+
if SimpleCov.result.covered_percent < 100
|
13
|
+
$stderr.puts "Coverage not 100%, build failed."
|
14
|
+
exit 1
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
#require File.expand_path(File.join(File.dirname(__FILE__), '..', 'env'))
|
21
|
+
require 'dew'
|
22
|
+
Inform.level = :error
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
|
+
|
3
|
+
describe String do
|
4
|
+
describe :indent do
|
5
|
+
it { "Hi there\nHow are you?\n".indent(2).should == " Hi there\n How are you?\n" }
|
6
|
+
it { " Hi there\n How are you?\n".indent(-2).should == "Hi there\nHow are you?\n" }
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe View do
|
11
|
+
subject {
|
12
|
+
View.new('Test', [double(:id => 1, :name => 'one'), double(:id => 2, :name => 'two')], [:id, :name]) }
|
13
|
+
|
14
|
+
describe :index do
|
15
|
+
it { subject.index.should == <<EOF
|
16
|
+
Test:
|
17
|
+
+----+-------+
|
18
|
+
| id | name |
|
19
|
+
+----+-------+
|
20
|
+
| 1 | "one" |
|
21
|
+
| 2 | "two" |
|
22
|
+
+----+-------+
|
23
|
+
EOF
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
describe :show do
|
28
|
+
it {
|
29
|
+
subject.show(0).should == <<EOF
|
30
|
+
Test:
|
31
|
+
+------+-------+
|
32
|
+
| id | 1 |
|
33
|
+
| name | "one" |
|
34
|
+
+------+-------+
|
35
|
+
EOF
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,284 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dew
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- PlayUp Devops
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-06-17 00:00:00 +10:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: inform
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ~>
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.0.1
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: clamp
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ~>
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.2.0
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: fog
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.8.2
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: gofer
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ~>
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 0.2.5
|
58
|
+
type: :runtime
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: highline
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.6.2
|
69
|
+
type: :runtime
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: terminal-table
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ~>
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.4.2
|
80
|
+
type: :runtime
|
81
|
+
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: nokogiri
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: "0"
|
91
|
+
type: :runtime
|
92
|
+
version_requirements: *id007
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rake
|
95
|
+
prerelease: false
|
96
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.8.7
|
102
|
+
type: :development
|
103
|
+
version_requirements: *id008
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: rspec
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ~>
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 2.6.0
|
113
|
+
type: :development
|
114
|
+
version_requirements: *id009
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: cucumber
|
117
|
+
prerelease: false
|
118
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ~>
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 0.10.3
|
124
|
+
type: :development
|
125
|
+
version_requirements: *id010
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: simplecov
|
128
|
+
prerelease: false
|
129
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ~>
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: 0.4.0
|
135
|
+
type: :development
|
136
|
+
version_requirements: *id011
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: flay
|
139
|
+
prerelease: false
|
140
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
141
|
+
none: false
|
142
|
+
requirements:
|
143
|
+
- - ~>
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 1.4.2
|
146
|
+
type: :development
|
147
|
+
version_requirements: *id012
|
148
|
+
- !ruby/object:Gem::Dependency
|
149
|
+
name: geminabox
|
150
|
+
prerelease: false
|
151
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
152
|
+
none: false
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: "0"
|
157
|
+
type: :development
|
158
|
+
version_requirements: *id013
|
159
|
+
description: |
|
160
|
+
Dew is a layer between fog and the ground
|
161
|
+
|
162
|
+
email:
|
163
|
+
- devops@playup.com
|
164
|
+
executables:
|
165
|
+
- dew
|
166
|
+
extensions: []
|
167
|
+
|
168
|
+
extra_rdoc_files: []
|
169
|
+
|
170
|
+
files:
|
171
|
+
- lib/dew/commands.rb
|
172
|
+
- lib/dew/controllers/deploy_controller.rb
|
173
|
+
- lib/dew/controllers/environments_controller.rb
|
174
|
+
- lib/dew/controllers/amis_controller.rb
|
175
|
+
- lib/dew/base_command.rb
|
176
|
+
- lib/dew/models/deploy/puge.rb
|
177
|
+
- lib/dew/models/deploy/run.rb
|
178
|
+
- lib/dew/models/deploy.rb
|
179
|
+
- lib/dew/models/server.rb
|
180
|
+
- lib/dew/models/profile.rb
|
181
|
+
- lib/dew/models/environment.rb
|
182
|
+
- lib/dew/models/account.rb
|
183
|
+
- lib/dew/models/database.rb
|
184
|
+
- lib/dew/models/fog_model.rb
|
185
|
+
- lib/dew/password.rb
|
186
|
+
- lib/dew/controllers.rb
|
187
|
+
- lib/dew/commands/ami.rb
|
188
|
+
- lib/dew/commands/deploy/templates/known_hosts
|
189
|
+
- lib/dew/commands/deploy/templates/rvmrc
|
190
|
+
- lib/dew/commands/deploy/templates/apache.conf.erb
|
191
|
+
- lib/dew/commands/deploy.rb
|
192
|
+
- lib/dew/commands/environments.rb
|
193
|
+
- lib/dew/commands/console.rb
|
194
|
+
- lib/dew/commands/tidy.rb
|
195
|
+
- lib/dew/commands/console/irb_override.rb
|
196
|
+
- lib/dew/tasks/spec.rake
|
197
|
+
- lib/dew/view.rb
|
198
|
+
- lib/dew/models.rb
|
199
|
+
- lib/dew/aws_resources.yaml
|
200
|
+
- lib/dew/version.rb
|
201
|
+
- lib/dew/validations.rb
|
202
|
+
- lib/dew/cloud.rb
|
203
|
+
- lib/tasks/spec.rake
|
204
|
+
- lib/dew.rb
|
205
|
+
- README.md
|
206
|
+
- LICENSE
|
207
|
+
- Rakefile
|
208
|
+
- spec/dew/controllers/deploy_controller_spec.rb
|
209
|
+
- spec/dew/controllers/amis_controller_spec.rb
|
210
|
+
- spec/dew/controllers/environments_controller_spec.rb
|
211
|
+
- spec/dew/models/profile_spec.rb
|
212
|
+
- spec/dew/models/deploy/puge_spec.rb
|
213
|
+
- spec/dew/models/deploy/run_spec.rb
|
214
|
+
- spec/dew/models/environment_spec.rb
|
215
|
+
- spec/dew/models/fog_model_spec.rb
|
216
|
+
- spec/dew/models/account_spec.rb
|
217
|
+
- spec/dew/models/server_spec.rb
|
218
|
+
- spec/dew/models/database_spec.rb
|
219
|
+
- spec/dew/password_spec.rb
|
220
|
+
- spec/dew/cloud_spec.rb
|
221
|
+
- spec/dew/spec_helper.rb
|
222
|
+
- spec/dew/view_spec.rb
|
223
|
+
- features/support/hooks.rb
|
224
|
+
- features/support/env.rb
|
225
|
+
- features/deploy-puge.feature
|
226
|
+
- features/step_definitions/deploy-puge-steps.rb
|
227
|
+
- features/step_definitions/aws-steps.rb
|
228
|
+
- features/create-ami.feature
|
229
|
+
- features/create-environments.feature
|
230
|
+
- config/cucumber.yaml
|
231
|
+
- bin/dew
|
232
|
+
has_rdoc: true
|
233
|
+
homepage: http://github.com/playup/dew
|
234
|
+
licenses: []
|
235
|
+
|
236
|
+
post_install_message:
|
237
|
+
rdoc_options: []
|
238
|
+
|
239
|
+
require_paths:
|
240
|
+
- lib
|
241
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
242
|
+
none: false
|
243
|
+
requirements:
|
244
|
+
- - ">="
|
245
|
+
- !ruby/object:Gem::Version
|
246
|
+
version: "0"
|
247
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
248
|
+
none: false
|
249
|
+
requirements:
|
250
|
+
- - ">="
|
251
|
+
- !ruby/object:Gem::Version
|
252
|
+
version: "0"
|
253
|
+
requirements: []
|
254
|
+
|
255
|
+
rubyforge_project:
|
256
|
+
rubygems_version: 1.6.2
|
257
|
+
signing_key:
|
258
|
+
specification_version: 3
|
259
|
+
summary: Uses fog to access the cloud
|
260
|
+
test_files:
|
261
|
+
- Rakefile
|
262
|
+
- spec/dew/controllers/deploy_controller_spec.rb
|
263
|
+
- spec/dew/controllers/amis_controller_spec.rb
|
264
|
+
- spec/dew/controllers/environments_controller_spec.rb
|
265
|
+
- spec/dew/models/profile_spec.rb
|
266
|
+
- spec/dew/models/deploy/puge_spec.rb
|
267
|
+
- spec/dew/models/deploy/run_spec.rb
|
268
|
+
- spec/dew/models/environment_spec.rb
|
269
|
+
- spec/dew/models/fog_model_spec.rb
|
270
|
+
- spec/dew/models/account_spec.rb
|
271
|
+
- spec/dew/models/server_spec.rb
|
272
|
+
- spec/dew/models/database_spec.rb
|
273
|
+
- spec/dew/password_spec.rb
|
274
|
+
- spec/dew/cloud_spec.rb
|
275
|
+
- spec/dew/spec_helper.rb
|
276
|
+
- spec/dew/view_spec.rb
|
277
|
+
- features/support/hooks.rb
|
278
|
+
- features/support/env.rb
|
279
|
+
- features/deploy-puge.feature
|
280
|
+
- features/step_definitions/deploy-puge-steps.rb
|
281
|
+
- features/step_definitions/aws-steps.rb
|
282
|
+
- features/create-ami.feature
|
283
|
+
- features/create-environments.feature
|
284
|
+
- config/cucumber.yaml
|