judo 0.0.3 → 0.0.4
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/VERSION +1 -1
- data/bin/judo +8 -5
- data/lib/config.rb +3 -4
- data/lib/group.rb +1 -2
- data/lib/server.rb +16 -37
- data/lib/setup.rb +3 -8
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/bin/judo
CHANGED
@@ -12,6 +12,13 @@ class CLI < Thor
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
desc "dump", "start one or more servers"
|
16
|
+
def dump
|
17
|
+
require 'pp'
|
18
|
+
pp Judo::Config.sdb.select("SELECT * FROM judo_servers")[:items]
|
19
|
+
pp Judo::Config.sdb.select("SELECT * FROM judo_config")[:items]
|
20
|
+
end
|
21
|
+
|
15
22
|
desc "ssh [NAMES]", "ssh to a specified server or first available"
|
16
23
|
def ssh(*names)
|
17
24
|
servers(*names) do |server|
|
@@ -123,11 +130,7 @@ class CLI < Thor
|
|
123
130
|
desc "console [NAMES]", "get console output for server or first available"
|
124
131
|
def console(*names)
|
125
132
|
servers(*names) do |server|
|
126
|
-
|
127
|
-
puts "Not running: #{server.name}"
|
128
|
-
else
|
129
|
-
puts server.console_output if server.running?
|
130
|
-
end
|
133
|
+
puts server.console_output
|
131
134
|
end
|
132
135
|
end
|
133
136
|
|
data/lib/config.rb
CHANGED
@@ -15,7 +15,7 @@ module Judo
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def check_version
|
18
|
-
|
18
|
+
abort "judo db is newer than the current gem - upgrade judo and try again" if get_db_version > db_version
|
19
19
|
end
|
20
20
|
|
21
21
|
def repo_dir
|
@@ -77,13 +77,12 @@ module Judo
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def get_sdb(aws_id, aws_key)
|
80
|
-
puts "GET SDB #{aws_id} #{aws_key}"
|
81
80
|
Aws::SdbInterface.new(aws_id, aws_key, :logger => Logger.new(nil))
|
82
81
|
end
|
83
82
|
|
84
83
|
def sdb
|
85
84
|
@sdb ||= get_sdb(access_id, access_secret)
|
86
|
-
@version_ok ||= check_version
|
85
|
+
# @version_ok ||= check_version
|
87
86
|
@sdb
|
88
87
|
end
|
89
88
|
|
@@ -92,7 +91,7 @@ module Judo
|
|
92
91
|
end
|
93
92
|
|
94
93
|
def s3_url(k)
|
95
|
-
s3.get_object_url(judo_config["s3_bucket"], k,Time.now.to_i + 100_000_000)
|
94
|
+
s3.get_object_url(judo_config["s3_bucket"], k, Time.now.to_i + 100_000_000)
|
96
95
|
end
|
97
96
|
|
98
97
|
def s3_put(k, file)
|
data/lib/group.rb
CHANGED
@@ -54,7 +54,6 @@ module Judo
|
|
54
54
|
|
55
55
|
def version
|
56
56
|
@version ||= (Judo::Config.sdb.get_attributes("judo_config", "group_versions")[:attributes][@name] || ["0"]).first.to_i
|
57
|
-
@version ||= (Judo::Config.sdb.get_attributes("judo_config", "group_versions")[:attributes][@name] || ["0"]).first.to_i
|
58
57
|
end
|
59
58
|
|
60
59
|
def set_version(new_version)
|
@@ -132,7 +131,7 @@ module Judo
|
|
132
131
|
end
|
133
132
|
|
134
133
|
def keypair_file
|
135
|
-
(
|
134
|
+
extract_file(:keypair, config["key_name"] + ".pem" , {}).first
|
136
135
|
end
|
137
136
|
|
138
137
|
def attachments
|
data/lib/server.rb
CHANGED
@@ -10,8 +10,8 @@
|
|
10
10
|
### [X] compile and put in s3
|
11
11
|
### [X] attach and increment version number
|
12
12
|
### [X] list version number on "judo list"
|
13
|
-
### [
|
14
|
-
### [
|
13
|
+
### [X] update kuzushi to pull down a compiled tar.gz
|
14
|
+
### [X] error if version is blank
|
15
15
|
### [ ] two phase delete (1 hr)
|
16
16
|
### [-] refactor availability_zone (2 hrs)
|
17
17
|
### [ ] pick availability zone from config "X":"Y" or "X":["Y","Z"]
|
@@ -24,6 +24,10 @@
|
|
24
24
|
### [ ] user a logger service (1 hr)
|
25
25
|
### [ ] write specs (5 hr)
|
26
26
|
|
27
|
+
### Error Handling
|
28
|
+
### [ ] no availability zone before making disks
|
29
|
+
### [ ] security group does not exists
|
30
|
+
|
27
31
|
### Do Later
|
28
32
|
### [ ] use amazon's new conditional write tools so we never have problems from concurrent updates
|
29
33
|
### [ ] is thor really what we want to use here?
|
@@ -46,33 +50,6 @@ module Judo
|
|
46
50
|
@group = group
|
47
51
|
end
|
48
52
|
|
49
|
-
### Getting things in and out of SimpleDB - would be nice if it were a plugin so we could use another store if need db (couchdb/mongo/sql)
|
50
|
-
|
51
|
-
def self.migrate
|
52
|
-
require 'pp'
|
53
|
-
x = {}
|
54
|
-
Judo::Config.sdb.delete_domain("judo_servers")
|
55
|
-
Judo::Config.sdb.create_domain("judo_servers")
|
56
|
-
Judo::Config.sdb.delete_domain("judo_config")
|
57
|
-
Judo::Config.sdb.create_domain("judo_config")
|
58
|
-
Judo::Config.sdb.select("SELECT * FROM sumo_server").items.each do |chunk|
|
59
|
-
chunk.each do |uid,item|
|
60
|
-
name = item["name"] || "missing_#{rand(2**32).to_s(36)}"
|
61
|
-
group = (item["group"] || "default")
|
62
|
-
data = {
|
63
|
-
"group" => (item["group"] || "default" ), "name" => name,
|
64
|
-
"secret" => item["secret"], "elastic_ip" => item["elastic_ip"],
|
65
|
-
"volumes" => (item["volumes_flat"] || JSON.parse(item["volumes_json"] || "[]").map { |k,v| "#{k}:#{v}" }),
|
66
|
-
"instance_id" => item["instance_id"], "virgin" => item["virgin"]
|
67
|
-
}.delete_if { |k,v| v == [] or v == nil or v == [nil] }
|
68
|
-
pp data
|
69
|
-
Judo::Config.sdb.put_attributes("judo_servers", name, data, :replace)
|
70
|
-
Judo::Config.sdb.put_attributes("judo_config", "groups", group => name)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
"ok"
|
74
|
-
end
|
75
|
-
|
76
53
|
def domain
|
77
54
|
"judo_servers"
|
78
55
|
end
|
@@ -106,7 +83,8 @@ module Judo
|
|
106
83
|
end
|
107
84
|
|
108
85
|
def version_desc
|
109
|
-
|
86
|
+
return "" unless running?
|
87
|
+
if version == group.version
|
110
88
|
"v#{version}"
|
111
89
|
else
|
112
90
|
"v#{version}/#{group.version}"
|
@@ -114,7 +92,7 @@ module Judo
|
|
114
92
|
end
|
115
93
|
|
116
94
|
def version
|
117
|
-
get
|
95
|
+
get("version").to_i
|
118
96
|
end
|
119
97
|
|
120
98
|
def virgin?
|
@@ -192,7 +170,7 @@ module Judo
|
|
192
170
|
begin
|
193
171
|
if config["elastic_ip"] and not elastic_ip
|
194
172
|
### EC2 allocate_address
|
195
|
-
task("Adding an elastic ip") do
|
173
|
+
task("Adding an elastic ip") do
|
196
174
|
ip = Judo::Config.ec2.allocate_address
|
197
175
|
add_ip(ip)
|
198
176
|
end
|
@@ -265,6 +243,7 @@ module Judo
|
|
265
243
|
|
266
244
|
def start
|
267
245
|
abort "Already running" if running?
|
246
|
+
abort "No config has been commited yet, type 'judo commit'" unless group.version > 0
|
268
247
|
task("Starting server #{name}") { launch_ec2 }
|
269
248
|
task("Acquire hostname") { wait_for_hostname }
|
270
249
|
task("Wait for ssh") { wait_for_ssh }
|
@@ -290,7 +269,7 @@ module Judo
|
|
290
269
|
## EC2 terminate_isntaces
|
291
270
|
task("Terminating instance") { Config.ec2.terminate_instances([ instance_id ]) }
|
292
271
|
task("Wait for volumes to detach") { wait_for_volumes_detached } if volumes.size > 0
|
293
|
-
remove "instance_id"
|
272
|
+
remove "instance_id"
|
294
273
|
end
|
295
274
|
|
296
275
|
def launch_ec2
|
@@ -305,7 +284,6 @@ module Judo
|
|
305
284
|
:user_data => user_data).first
|
306
285
|
|
307
286
|
update "instance_id" => result[:aws_instance_id], "virgin" => false, "version" => group.version
|
308
|
-
# remove "virgin"
|
309
287
|
end
|
310
288
|
|
311
289
|
def security_groups
|
@@ -313,7 +291,7 @@ module Judo
|
|
313
291
|
end
|
314
292
|
|
315
293
|
def console_output
|
316
|
-
|
294
|
+
abort "not running" unless running?
|
317
295
|
Config.ec2.get_console_output(instance_id)[:aws_output]
|
318
296
|
end
|
319
297
|
|
@@ -458,12 +436,13 @@ apt-get update
|
|
458
436
|
apt-get install ruby rubygems ruby-dev irb libopenssl-ruby libreadline-ruby -y
|
459
437
|
gem install kuzushi --no-rdoc --no-ri
|
460
438
|
GEM_BIN=`ruby -r rubygems -e "puts Gem.bindir"`
|
461
|
-
$GEM_BIN/kuzushi #{virgin? && "init" || "start"} #{url}
|
439
|
+
echo "$GEM_BIN/kuzushi #{virgin? && "init" || "start"} '#{url}'" > /var/log/kuzushi.log
|
440
|
+
$GEM_BIN/kuzushi #{virgin? && "init" || "start"} '#{url}' >> /var/log/kuzushi.log 2>&1
|
462
441
|
USER_DATA
|
463
442
|
end
|
464
443
|
|
465
444
|
def url
|
466
|
-
group.s3_url
|
445
|
+
@url ||= group.s3_url
|
467
446
|
end
|
468
447
|
|
469
448
|
def validate
|
data/lib/setup.rb
CHANGED
@@ -27,14 +27,9 @@ DEFAULT
|
|
27
27
|
input.empty? and default or input
|
28
28
|
end
|
29
29
|
|
30
|
-
def failure(msg)
|
31
|
-
puts msg
|
32
|
-
exit 1
|
33
|
-
end
|
34
|
-
|
35
30
|
def check_setup
|
36
|
-
|
37
|
-
|
31
|
+
abort "you are already inside a judo repository" if Judo::Config.find_judo_dir(Dir.pwd)
|
32
|
+
abort "./.git not found - judo configurations must be kept in a git repo. type 'git init' to setup the git repo." unless File.exists? "./.git"
|
38
33
|
end
|
39
34
|
|
40
35
|
def init
|
@@ -71,7 +66,7 @@ DEFAULT
|
|
71
66
|
sdb.create_domain("judo_servers")
|
72
67
|
sdb.create_domain("judo_config")
|
73
68
|
olddb = sdb.get_attributes("judo_config", "judo")[:attributes]["dbversion"]
|
74
|
-
|
69
|
+
abort "There is an existing judo database of a newer version - upgrade judo and try again" if olddb and olddb.first.to_i > Judo::Config.db_version
|
75
70
|
sdb.put_attributes("judo_config", "judo", { "dbversion" => Judo::Config.db_version }, :replace)
|
76
71
|
end
|
77
72
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Orion Henry
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-11 00:00:00 -05:00
|
18
18
|
default_executable: judo
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|