EndlessWaffleCLI 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/EndlessWaffleCLI.gemspec +2 -0
- data/exe/ewami +2 -2
- data/exe/ewbuild +172 -0
- data/lib/EndlessWaffleCLI.rb +27 -0
- data/lib/EndlessWaffleCLI/version.rb +1 -1
- metadata +44 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 285c5dd61b48867ea4d8acfdb5bbedd0f61c0629
|
4
|
+
data.tar.gz: 2cfd1f41858c840ca53772258f7ca941fafdaf40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f7c7a76172570daecd1951afd9da562f74c0ee5327b02030412255464abcca65c5d2accae025f2bd8294a863d70b07fad81d22e75a86846bd1430ff253b0207
|
7
|
+
data.tar.gz: cac3f3ccbe8efa6561565c0165e4dedf698d0491cbbbcaee4ec8532bd7103488da207558547c8450d9b181f73f3f6fc11f83801224a2e34e40bcc5dcc978132b
|
data/EndlessWaffleCLI.gemspec
CHANGED
@@ -41,4 +41,6 @@ Gem::Specification.new do |spec|
|
|
41
41
|
spec.add_dependency 'net-ssh-gateway', '~> 1.2'
|
42
42
|
spec.add_dependency 'net-ssh', '~> 3.2'
|
43
43
|
spec.add_dependency 'highline', '~> 1.7', '>= 1.7.8'
|
44
|
+
spec.add_dependency 'eventmachine', '~> 1.2', '>= 1.2.0.1'
|
45
|
+
spec.add_dependency 'em-http-request', '~> 1.1', '>= 1.1.5'
|
44
46
|
end
|
data/exe/ewami
CHANGED
@@ -91,8 +91,8 @@ def showTable(result)
|
|
91
91
|
{:key=>:availability_zone, :size=>17, :title=>"Zone"},
|
92
92
|
{:key=>:arch, :size=>7, :title=>"Arch"},
|
93
93
|
{:key=>:instance_type, :size=>18, :title=>"Instance Type"},
|
94
|
-
{:key=>:ami_id, :size=>
|
95
|
-
{:key=>:aki_id, :size=>
|
94
|
+
{:key=>:ami_id, :size=>15, :title=>"AMI"},
|
95
|
+
{:key=>:aki_id, :size=>15, :title=>"AKI"}
|
96
96
|
|
97
97
|
]
|
98
98
|
ConsoleTable.define(table_config) do |table|
|
data/exe/ewbuild
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "EndlessWaffleCLI"
|
5
|
+
require 'json'
|
6
|
+
require 'getoptlong'
|
7
|
+
require 'console_table'
|
8
|
+
require 'colorize'
|
9
|
+
require 'eventmachine'
|
10
|
+
require 'em-http'
|
11
|
+
require 'date'
|
12
|
+
|
13
|
+
|
14
|
+
build_config = {}
|
15
|
+
list = false
|
16
|
+
@watch = ""
|
17
|
+
show_logs_uuid = nil
|
18
|
+
|
19
|
+
if ENV['EndlessWaffleURL'].nil?
|
20
|
+
puts "EndlessWaffleCLI requires the 'EndlessWaffleURL' environment variable to be set."
|
21
|
+
exit 1
|
22
|
+
else
|
23
|
+
EndlessWaffleCLI.setServer ENV['EndlessWaffleURL']
|
24
|
+
end
|
25
|
+
|
26
|
+
if ENV['EndlessWaffleToken'].nil?
|
27
|
+
puts "EndlessWaffleCLI requires the 'EndlessWaffleToken' environment variable to be set."
|
28
|
+
exit 1
|
29
|
+
else
|
30
|
+
EndlessWaffleCLI.setToken ENV['EndlessWaffleToken']
|
31
|
+
end
|
32
|
+
|
33
|
+
def colorizeState(state)
|
34
|
+
if state == "running"
|
35
|
+
state.to_s.colorize(:light_green)
|
36
|
+
elsif state == "queued"
|
37
|
+
state.to_s.colorize(:light_yellow)
|
38
|
+
else
|
39
|
+
state.to_s.colorize(:light_cyan)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def showHelp
|
44
|
+
puts
|
45
|
+
puts "Endless Waffle EC2 Build Tool"
|
46
|
+
puts "Usage example: #{$0} -e dev1 -r frontend"
|
47
|
+
puts
|
48
|
+
puts "Options:"
|
49
|
+
puts "-e or --environment".ljust(30) +"-> Specifiy environment"
|
50
|
+
puts "-r or --role".ljust(30) +"-> Specifiy role"
|
51
|
+
puts "-z or --availability_zone".ljust(30) +"-> Specifiy Availability Zone"
|
52
|
+
puts "-l or --list".ljust(30) +"-> List Jobs"
|
53
|
+
puts "-w or --watch".ljust(30) +"-> watch running job"
|
54
|
+
puts "-s or --show_logs".ljust(30) +"-> Find by instanceId"
|
55
|
+
puts "-h or --help".ljust(30) +"-> Show this help message."
|
56
|
+
puts
|
57
|
+
end
|
58
|
+
|
59
|
+
parser = GetoptLong.new
|
60
|
+
parser.set_options(["-e", "--environment", GetoptLong::NO_ARGUMENT],
|
61
|
+
["-r", "--role", GetoptLong::NO_ARGUMENT],
|
62
|
+
["-z", "--availability_zone", GetoptLong::NO_ARGUMENT],
|
63
|
+
["-l", "--list", GetoptLong::NO_ARGUMENT],
|
64
|
+
["-w", "--watch", GetoptLong::NO_ARGUMENT],
|
65
|
+
["-s", "--show_logs", GetoptLong::NO_ARGUMENT],
|
66
|
+
["-h", "--help", GetoptLong::NO_ARGUMENT]
|
67
|
+
)
|
68
|
+
|
69
|
+
begin
|
70
|
+
begin
|
71
|
+
opt,arg = parser.get_option
|
72
|
+
break if not opt
|
73
|
+
case opt
|
74
|
+
when "-h" || "--help"
|
75
|
+
showHelp
|
76
|
+
exit
|
77
|
+
when "-e" || "--environment"
|
78
|
+
build_config.store(:environment, ARGV[0])
|
79
|
+
when "-r" || "--role"
|
80
|
+
build_config.store(:role, ARGV[0])
|
81
|
+
when "-z" || "--availability_zone"
|
82
|
+
build_config.store(:availability_zone, ARGV[0])
|
83
|
+
when "-l" || "--list"
|
84
|
+
list = true
|
85
|
+
when "-w" || "--watch"
|
86
|
+
@watch = ARGV[0].nil? ? "LIVE" : ARGV[0]
|
87
|
+
when "-s" || "--show_logs"
|
88
|
+
show_logs_uuid = ARGV[0]
|
89
|
+
end
|
90
|
+
rescue => err
|
91
|
+
puts "#{err.class()}: #{err.message}"
|
92
|
+
exit 1
|
93
|
+
end
|
94
|
+
end while 1
|
95
|
+
|
96
|
+
|
97
|
+
def listJobs
|
98
|
+
result = EndlessWaffleCLI.ec2provisionShowjobs
|
99
|
+
table_config = [
|
100
|
+
{:key=>:uuid, :size=>37, :title=>"UUID"},
|
101
|
+
{:key=>:name, :size=>10, :title=>"Name"},
|
102
|
+
{:key=>:role, :size=>10, :title=>"Role"},
|
103
|
+
{:key=>:environment, :size=>7, :title=>"Env"},
|
104
|
+
{:key=>:status, :size=>10, :title=>"Status"},
|
105
|
+
{:key=>:created_at, :size=>30, :title=>"Created"}
|
106
|
+
]
|
107
|
+
ConsoleTable.define(table_config) do |table|
|
108
|
+
result["result"].each do |r|
|
109
|
+
formated_date = DateTime.parse(r["created_at"]).strftime('%b %e, %Y %H:%M:%S %z')
|
110
|
+
table << [
|
111
|
+
r["uuid"].colorize(:magenta),
|
112
|
+
r["name"],
|
113
|
+
r["role"],
|
114
|
+
r["environment"],
|
115
|
+
colorizeState(r["status"]),
|
116
|
+
formated_date]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def showLogs uuid
|
122
|
+
result = EndlessWaffleCLI.ec2provisionShowLog uuid
|
123
|
+
result["result"].each do |l|
|
124
|
+
puts l["log"]
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def watchLive uuid
|
129
|
+
http = EM::HttpRequest.new("#{ENV['EndlessWaffleURL']}/ec2provision/watchjob/#{uuid}", :keepalive => true, :connect_timeout => 0, :inactivity_timeout => 0)
|
130
|
+
EventMachine.run do
|
131
|
+
s = http.get
|
132
|
+
s.stream do |data|
|
133
|
+
EventMachine.stop if data == "EOF"
|
134
|
+
puts data
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
def build(az,role,env)
|
142
|
+
puts az,role,env
|
143
|
+
result = EndlessWaffleCLI.ec2provisionBuild(az,role,env)
|
144
|
+
if result.key? "errors"
|
145
|
+
result["errors"].each do |e|
|
146
|
+
puts "ERROR: #{e}".colorize(:light_red)
|
147
|
+
end
|
148
|
+
exit 1
|
149
|
+
end
|
150
|
+
if result.key? "error"
|
151
|
+
puts "ERROR: #{result["error"]}".colorize(:light_red)
|
152
|
+
exit 1
|
153
|
+
end
|
154
|
+
if @watch == "LIVE"
|
155
|
+
watchLive result["uuid"]
|
156
|
+
end
|
157
|
+
|
158
|
+
puts JSON.pretty_generate(result)
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
if list == true
|
163
|
+
listJobs
|
164
|
+
elsif !show_logs_uuid.nil?
|
165
|
+
showLogs show_logs_uuid
|
166
|
+
elsif !build_config.empty?
|
167
|
+
if build_config.key? :availability_zone and build_config.key? :role and build_config.key? :environment
|
168
|
+
build(build_config[:availability_zone],build_config[:role],build_config[:environment])
|
169
|
+
else
|
170
|
+
puts "ERROR: Please specify all 3, availability_zone, role, and environment"
|
171
|
+
end
|
172
|
+
end
|
data/lib/EndlessWaffleCLI.rb
CHANGED
@@ -198,4 +198,31 @@ module EndlessWaffleCLI
|
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
201
|
+
def self.ec2provisionShowjobs
|
202
|
+
begin
|
203
|
+
result = RestClient.post "#{@@server}/ec2provision/showjobs", {}.to_json, :content_type => :json, :Authorization => "Token token=\"#{@@token}\""
|
204
|
+
JSON.parse(result.body)
|
205
|
+
rescue => e
|
206
|
+
raise e
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def self.ec2provisionShowLog(uuid)
|
211
|
+
begin
|
212
|
+
result = RestClient.post "#{@@server}/ec2provision/show", {:uuid=>uuid}.to_json, :content_type => :json, :Authorization => "Token token=\"#{@@token}\""
|
213
|
+
JSON.parse(result.body)
|
214
|
+
rescue => e
|
215
|
+
raise e
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def self.ec2provisionBuild(az,role,env)
|
220
|
+
begin
|
221
|
+
result = RestClient.post "#{@@server}/ec2provision/build", {:environment => env, :availability_zone => az, :role => role}.to_json, :content_type => :json, :Authorization => "Token token=\"#{@@token}\""
|
222
|
+
JSON.parse(result.body)
|
223
|
+
rescue => e
|
224
|
+
raise e
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
201
228
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: EndlessWaffleCLI
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dr. Ogg
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -190,6 +190,46 @@ dependencies:
|
|
190
190
|
- - ">="
|
191
191
|
- !ruby/object:Gem::Version
|
192
192
|
version: 1.7.8
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: eventmachine
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - "~>"
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '1.2'
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: 1.2.0.1
|
203
|
+
type: :runtime
|
204
|
+
prerelease: false
|
205
|
+
version_requirements: !ruby/object:Gem::Requirement
|
206
|
+
requirements:
|
207
|
+
- - "~>"
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
version: '1.2'
|
210
|
+
- - ">="
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: 1.2.0.1
|
213
|
+
- !ruby/object:Gem::Dependency
|
214
|
+
name: em-http-request
|
215
|
+
requirement: !ruby/object:Gem::Requirement
|
216
|
+
requirements:
|
217
|
+
- - "~>"
|
218
|
+
- !ruby/object:Gem::Version
|
219
|
+
version: '1.1'
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: 1.1.5
|
223
|
+
type: :runtime
|
224
|
+
prerelease: false
|
225
|
+
version_requirements: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '1.1'
|
230
|
+
- - ">="
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: 1.1.5
|
193
233
|
description: Command line tools for the Endless Waffle server
|
194
234
|
email:
|
195
235
|
- ogg@sr375.com
|
@@ -197,6 +237,7 @@ executables:
|
|
197
237
|
- enum
|
198
238
|
- enum-ssh
|
199
239
|
- ewami
|
240
|
+
- ewbuild
|
200
241
|
- ewcommand
|
201
242
|
- ewrole
|
202
243
|
- ewsecuritygroups
|
@@ -227,6 +268,7 @@ files:
|
|
227
268
|
- exe/enum
|
228
269
|
- exe/enum-ssh
|
229
270
|
- exe/ewami
|
271
|
+
- exe/ewbuild
|
230
272
|
- exe/ewcommand
|
231
273
|
- exe/ewrole
|
232
274
|
- exe/ewsecuritygroups
|