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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50395eba362047b268d82769ca10eb86abbbc30c
4
- data.tar.gz: f0d5e95918e01a2519a766ffa38eb67146d1d390
3
+ metadata.gz: 285c5dd61b48867ea4d8acfdb5bbedd0f61c0629
4
+ data.tar.gz: 2cfd1f41858c840ca53772258f7ca941fafdaf40
5
5
  SHA512:
6
- metadata.gz: 5cfc9e8e1edb918bcac89c746a221e90fa8aa4f034176cdb7d9b678f9852ac87d3a42203c3aa937eae8214cd49c441cd5a6b05ceb01c47c1ad1a6f51491f92a3
7
- data.tar.gz: cbde355ead948b9267ce4fbb4f22fdc2c7d43ac2c115728fb236dbffa366376e4554d87b17c83b0ef632e167f79c24b4ffae16289fc5a66e3610353d989a4e4f
6
+ metadata.gz: 5f7c7a76172570daecd1951afd9da562f74c0ee5327b02030412255464abcca65c5d2accae025f2bd8294a863d70b07fad81d22e75a86846bd1430ff253b0207
7
+ data.tar.gz: cac3f3ccbe8efa6561565c0165e4dedf698d0491cbbbcaee4ec8532bd7103488da207558547c8450d9b181f73f3f6fc11f83801224a2e34e40bcc5dcc978132b
@@ -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=>10, :title=>"AMI"},
95
- {:key=>:aki_id, :size=>10, :title=>"AKI"}
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module EndlessWaffleCLI
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  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
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-20 00:00:00.000000000 Z
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