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 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