hugo 0.1.6 → 0.1.9
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/Rakefile +4 -0
- data/lib/hugo/app.rb +26 -56
- data/spec/lib/hugo/app_spec.rb +21 -0
- data/spec/spec_helper.rb +2 -2
- metadata +32 -2
data/Rakefile
CHANGED
@@ -4,6 +4,10 @@ require 'rake'
|
|
4
4
|
begin
|
5
5
|
require 'jeweler'
|
6
6
|
Jeweler::Tasks.new do |gemspec|
|
7
|
+
gemspec.add_dependency('amazon-ec2')
|
8
|
+
gemspec.add_dependency('net-ssh')
|
9
|
+
gemspec.add_dependency('json')
|
10
|
+
|
7
11
|
gemspec.name = "hugo"
|
8
12
|
gemspec.summary = "Deploy Your Rack Apps to Cloud"
|
9
13
|
gemspec.description = "A easy to understand DSL that makes it dirt simple to deploy to the cloud."
|
data/lib/hugo/app.rb
CHANGED
@@ -4,7 +4,8 @@ class Hugo::App
|
|
4
4
|
include Singleton
|
5
5
|
include Hugo::Mixin::ParamsValidate
|
6
6
|
|
7
|
-
|
7
|
+
attr_accessor :dna
|
8
|
+
|
8
9
|
def servers(instances=1)
|
9
10
|
if lb
|
10
11
|
if instances > lb.instances.length
|
@@ -34,6 +35,16 @@ class Hugo::App
|
|
34
35
|
end
|
35
36
|
|
36
37
|
|
38
|
+
def add_recipe(name, options=nil)
|
39
|
+
run_list [] if run_list.nil?
|
40
|
+
run_list << "recipe[#{name}]"
|
41
|
+
if options
|
42
|
+
empty_hash = {}
|
43
|
+
self.dna = {} if self.dna.nil?
|
44
|
+
self.dna.merge!(options)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
37
48
|
def name(arg=nil)
|
38
49
|
set_or_return(:name, arg, :kind_of => [String])
|
39
50
|
end
|
@@ -62,14 +73,6 @@ class Hugo::App
|
|
62
73
|
set_or_return(:image_id, arg, :kind_of => [String])
|
63
74
|
end
|
64
75
|
|
65
|
-
def port(arg=nil)
|
66
|
-
set_or_return(:port, arg, :kind_of => [String])
|
67
|
-
end
|
68
|
-
|
69
|
-
def ssl(arg=nil)
|
70
|
-
set_or_return(:ssl, arg, :kind_of => [String])
|
71
|
-
end
|
72
|
-
|
73
76
|
def application(arg=nil)
|
74
77
|
set_or_return(:application, arg, :kind_of => [String])
|
75
78
|
end
|
@@ -90,34 +93,10 @@ class Hugo::App
|
|
90
93
|
set_or_return(:cookbook, arg, :kind_of => [String])
|
91
94
|
end
|
92
95
|
|
93
|
-
def
|
96
|
+
def key_path(arg=nil)
|
94
97
|
set_or_return(:key_pair_file, arg, :kind_of => [String])
|
95
98
|
end
|
96
|
-
|
97
|
-
def port(arg=nil)
|
98
|
-
set_or_return(:port, arg, :kind_of => [String])
|
99
|
-
end
|
100
|
-
|
101
|
-
def github_url(arg=nil)
|
102
|
-
set_or_return(:github_url, arg, :kind_of => [String])
|
103
|
-
end
|
104
|
-
|
105
|
-
def privatekey(arg=nil)
|
106
|
-
set_or_return(:privatekey, arg, :kind_of => [String])
|
107
|
-
end
|
108
|
-
|
109
|
-
def publickey(arg=nil)
|
110
|
-
set_or_return(:publickey, arg, :kind_of => [String])
|
111
|
-
end
|
112
|
-
|
113
|
-
def gem_list(arg=nil)
|
114
|
-
set_or_return(:gem_list, arg, :kind_of => [Array])
|
115
|
-
end
|
116
|
-
|
117
|
-
def package_list(arg=nil)
|
118
|
-
set_or_return(:package_list, arg, :kind_of => [Array])
|
119
|
-
end
|
120
|
-
|
99
|
+
|
121
100
|
def run_list(arg=nil)
|
122
101
|
set_or_return(:run_list, arg, :kind_of => [Array])
|
123
102
|
end
|
@@ -176,7 +155,7 @@ private
|
|
176
155
|
commands << 'if [ -d "./hugo-repos" ]; then echo "setup already run"; else sudo gem install chef-deploy --no-ri --no-rdoc; fi'
|
177
156
|
commands << 'if [ -d "./hugo-repos" ]; then echo "setup already run"; else sudo gem install git --no-ri --no-rdoc; fi'
|
178
157
|
commands << "if [ -d \"./hugo-repos\" ]; then echo \"setup already run\"; else git clone #{self.cookbook} ~/hugo-repos; fi"
|
179
|
-
Hugo::Aws::Ec2.find(instance_id).ssh(commands, nil,
|
158
|
+
Hugo::Aws::Ec2.find(instance_id).ssh(commands, nil, File.join(key_path, key_name))
|
180
159
|
end
|
181
160
|
|
182
161
|
def deploy_ec2
|
@@ -184,37 +163,28 @@ private
|
|
184
163
|
commands = []
|
185
164
|
commands << "cd hugo-repos && git pull"
|
186
165
|
commands << 'sudo chef-solo -c /home/ubuntu/hugo-repos/config/solo.rb -j /home/ubuntu/dna.json'
|
187
|
-
|
188
|
-
ports = [port]
|
189
|
-
ports << ssl unless ssl.nil?
|
190
|
-
|
191
|
-
database_info = {}
|
166
|
+
|
192
167
|
database_info = {
|
193
168
|
:uri => db.uri,
|
194
169
|
:name => db.db,
|
195
170
|
:user => db.user,
|
196
171
|
:password => db.password } unless db.nil?
|
197
|
-
|
198
|
-
dna = {
|
199
|
-
|
200
|
-
:gem_list => gem_list,
|
201
|
-
|
202
|
-
:application => name,
|
203
|
-
:customer => cloud_name,
|
204
|
-
:database => database_info,
|
205
|
-
:web => { :port => port, :ssl => ssl },
|
172
|
+
|
173
|
+
self.dna = {} if self.dna.nil?
|
174
|
+
self.dna.merge!(:run_list => run_list,
|
206
175
|
:git => cookbook,
|
207
|
-
:github => { :url => github_url,
|
208
|
-
:publickey => publickey,
|
209
|
-
:privatekey => privatekey},
|
210
176
|
:access_key => Hugo::Aws::Ec2::ACCESS_KEY,
|
211
177
|
:secret_key => Hugo::Aws::Ec2::SECRET_KEY,
|
212
|
-
:
|
178
|
+
:database => database_info,
|
179
|
+
|
180
|
+
:application => name,
|
181
|
+
:customer => cloud_name,
|
182
|
+
|
213
183
|
:app => deploy_info
|
214
|
-
|
184
|
+
)
|
215
185
|
|
216
186
|
lb.instances.each do |i|
|
217
|
-
Hugo::Aws::Ec2.find(i).ssh(commands, dna,
|
187
|
+
Hugo::Aws::Ec2.find(i).ssh(commands, dna, File.join(key_path, key_name))
|
218
188
|
end
|
219
189
|
end
|
220
190
|
|
data/spec/lib/hugo/app_spec.rb
CHANGED
@@ -20,6 +20,27 @@ describe "Hugo App" do
|
|
20
20
|
Hugo &block
|
21
21
|
end.should_not raise_error
|
22
22
|
end
|
23
|
+
|
24
|
+
it "should save dna" do
|
25
|
+
block = lambda do
|
26
|
+
cloud "my_cloud" do
|
27
|
+
balancer
|
28
|
+
app "testapp" do
|
29
|
+
add_recipe "s3fs", :s3 => {:bucket => "samIam"}
|
30
|
+
servers 0
|
31
|
+
puts run_list
|
32
|
+
puts dna.inspect
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
lambda do
|
38
|
+
Hugo &block
|
39
|
+
end.should_not raise_error
|
40
|
+
|
41
|
+
#puts @app.dna
|
42
|
+
end
|
43
|
+
|
23
44
|
|
24
45
|
it "should raise error for database block not wrapped in cloud block" do
|
25
46
|
block = lambda do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hugo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Wilson
|
@@ -10,9 +10,39 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2010-
|
13
|
+
date: 2010-02-02 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: amazon-ec2
|
18
|
+
type: :runtime
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
version:
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: net-ssh
|
28
|
+
type: :runtime
|
29
|
+
version_requirement:
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
35
|
+
version:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: json
|
38
|
+
type: :runtime
|
39
|
+
version_requirement:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "0"
|
45
|
+
version:
|
16
46
|
- !ruby/object:Gem::Dependency
|
17
47
|
name: amazon-ec2
|
18
48
|
type: :runtime
|