EndlessWaffleCLI 0.1.4 → 0.1.5
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.
- 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
|