mozzn 0.2.0 → 0.3.0
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/bin/mozzn +2 -0
- data/lib/mozzn/api.rb +5 -1
- data/lib/mozzn/cli.rb +11 -320
- data/lib/mozzn/commands/app.rb +222 -0
- data/lib/mozzn/commands/auth.rb +102 -0
- data/lib/mozzn/commands/key.rb +56 -0
- data/lib/mozzn/version.rb +1 -1
- data/spec/app_spec.rb +61 -0
- data/spec/auth_spec.rb +184 -0
- data/spec/cli_spec.rb +0 -308
- data/spec/key_spec.rb +52 -0
- data/spec/spec_helper.rb +12 -8
- metadata +12 -12
- data/spec/factories/applications.rb +0 -14
- data/spec/factories/components.rb +0 -10
- data/spec/factories/datastores.rb +0 -10
- data/spec/factories/keys.rb +0 -10
- data/spec/factories/users.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b32a146475f55c41943db377119d126dbca9fd00
|
4
|
+
data.tar.gz: 55019427b77f4474b78092e62919a15ae23ebfce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b02f8b487ed7fc49018937888d143f384ac6b2bdc2d48de869c54d078681920784101989c8f6cffa20e9be194bd0566c0f2c6edc4bd76b16e10fd25a66c8d04
|
7
|
+
data.tar.gz: 928091596f1ae6d18583b198208b6801fa5517ecb37def5be973addd8b278723935e1375c46128ba24f02359a3b50dc2c4f19b1fa276d33fc5d55fb14386b324
|
data/bin/mozzn
CHANGED
data/lib/mozzn/api.rb
CHANGED
@@ -8,7 +8,11 @@ module Mozzn
|
|
8
8
|
attr_accessor :token
|
9
9
|
|
10
10
|
def initialize token = nil
|
11
|
-
|
11
|
+
if ENV['GEM_ENV'] == 'test'
|
12
|
+
@connection = Faraday.new('http://localhost:3000/api/v1/')
|
13
|
+
else
|
14
|
+
@connection = Faraday.new('http://mozzn.com/api/v1/')
|
15
|
+
end
|
12
16
|
@token = token
|
13
17
|
end
|
14
18
|
|
data/lib/mozzn/cli.rb
CHANGED
@@ -5,157 +5,17 @@ require 'rubygems'
|
|
5
5
|
require 'git'
|
6
6
|
require 'mozzn/version'
|
7
7
|
require 'terminal-table'
|
8
|
+
require "mozzn/commands/key"
|
9
|
+
require "mozzn/commands/app"
|
10
|
+
require "mozzn/commands/auth"
|
8
11
|
|
9
12
|
module Mozzn
|
10
13
|
class Cli < Thor
|
11
14
|
include Thor::Actions
|
12
15
|
|
13
|
-
trap(:INT) { exit 1 }
|
14
|
-
|
15
16
|
default_task :help
|
16
17
|
|
17
|
-
desc '
|
18
|
-
# mozzn login
|
19
|
-
method_option :email, :aliases => "-u", :desc => "Mozzn email"
|
20
|
-
method_option :password, :aliases => "-p", :desc => "Mozzn password"
|
21
|
-
def login
|
22
|
-
mozzn = Mozzn::Api.new
|
23
|
-
if options[:email].nil? && options[:password].nil?
|
24
|
-
hl = HighLine.new
|
25
|
-
email = hl.ask 'Mozzn email: '
|
26
|
-
password = hl.ask('Mozzn password (we will not store this): ') { |q| q.echo = "*" }
|
27
|
-
elsif options[:email].nil? || options[:password].nil?
|
28
|
-
raise Thor::Error, "Email and password must be provided!"
|
29
|
-
else
|
30
|
-
email = options[:email]
|
31
|
-
password = options[:password]
|
32
|
-
end
|
33
|
-
params = {
|
34
|
-
user: {
|
35
|
-
email: email,
|
36
|
-
password: password
|
37
|
-
}
|
38
|
-
}
|
39
|
-
response = mozzn.post(:sessions, params)
|
40
|
-
auth_token = response['data']['auth_token']
|
41
|
-
if auth_token == nil
|
42
|
-
raise Thor::Error, response['info']
|
43
|
-
else
|
44
|
-
Mozzn::Config.new.add('token', auth_token)
|
45
|
-
say response['info'], :green
|
46
|
-
git_check
|
47
|
-
ssh_key_check
|
48
|
-
end
|
49
|
-
rescue Mozzn::Disconnected
|
50
|
-
say 'Unable to connect to Mozzn. Please check your internet connection.', :red
|
51
|
-
rescue Mozzn::UnexpectedOutput
|
52
|
-
say 'UnexpectedOutput', :red
|
53
|
-
end
|
54
|
-
|
55
|
-
desc 'add_key', 'Add your SSH Public Key directily or add its path'
|
56
|
-
method_option :public_key, :aliases => "-k", :desc => "RSA/DSA public key"
|
57
|
-
method_option :key_path, :aliases => "-p", :desc => "Path to RSA/DSA public key"
|
58
|
-
# mozzn add_key
|
59
|
-
def add_key
|
60
|
-
mozzn = Mozzn::Api.new(Mozzn::Config.new.read['token'])
|
61
|
-
if options[:key_path].present?
|
62
|
-
key_path = File.expand_path(options[:key_path])
|
63
|
-
elsif options[:public_key].present?
|
64
|
-
public_key = options[:public_key]
|
65
|
-
else
|
66
|
-
raise Thor::Error, "Neither a key path or an SSH key were provided. You must use -p or -k options."
|
67
|
-
end
|
68
|
-
|
69
|
-
if public_key.nil?
|
70
|
-
if File.exist?(key_path)
|
71
|
-
File.open(key_path, "rb") do |f|
|
72
|
-
public_key = f.read
|
73
|
-
end
|
74
|
-
else
|
75
|
-
raise Thor::Error, "Unable to read #{key_path}. File does not exist or not accessible."
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
path = 'keys'
|
80
|
-
params = {
|
81
|
-
key: {
|
82
|
-
public: public_key
|
83
|
-
}
|
84
|
-
}
|
85
|
-
response = mozzn.post(path, params)
|
86
|
-
say response['info'], :green
|
87
|
-
rescue Mozzn::Disconnected
|
88
|
-
say 'Unable to connect to Mozzn check the internet connection!', :red
|
89
|
-
rescue Mozzn::UnexpectedOutput
|
90
|
-
say 'UnexpectedOutput', :red
|
91
|
-
end
|
92
|
-
|
93
|
-
desc 'create_app APPNAME', 'create a new application'
|
94
|
-
# mozzn create_app
|
95
|
-
def create_app name = nil
|
96
|
-
mozzn = Mozzn::Api.new(Mozzn::Config.new.read['token'])
|
97
|
-
if name == nil
|
98
|
-
raise Thor::Error, "You must enter application name."
|
99
|
-
end
|
100
|
-
path = 'applications'
|
101
|
-
params = {
|
102
|
-
application: {
|
103
|
-
name: name
|
104
|
-
}
|
105
|
-
}
|
106
|
-
response = mozzn.post(path, params)
|
107
|
-
say response['info'], :green
|
108
|
-
git = Git.init
|
109
|
-
unless File.exist?('.git')
|
110
|
-
git.add(all: true)
|
111
|
-
begin
|
112
|
-
git.commit('First commit')
|
113
|
-
rescue Git::GitExecuteError => e
|
114
|
-
# Do nothing
|
115
|
-
end
|
116
|
-
end
|
117
|
-
begin
|
118
|
-
git.add_remote("mozzn", "git@git.mozzn.com:#{name}.git")
|
119
|
-
rescue Git::GitExecuteError => e
|
120
|
-
say 'You already have this remote.', :red
|
121
|
-
end
|
122
|
-
rescue Mozzn::Disconnected
|
123
|
-
say 'Unable to connect to Mozzn check the internet connection!', :red
|
124
|
-
rescue Mozzn::UnexpectedOutput
|
125
|
-
say 'UnexpectedOutput'
|
126
|
-
end
|
127
|
-
|
128
|
-
desc 'remove_app APPNAME', 'Remove spcicfic Application.'
|
129
|
-
|
130
|
-
def remove_app name = nil
|
131
|
-
mozzn = Mozzn::Api.new(Mozzn::Config.new.read['token'])
|
132
|
-
if !name.present?
|
133
|
-
raise Thor::Error, "You must enter Application Name!"
|
134
|
-
end
|
135
|
-
params = {
|
136
|
-
name: name
|
137
|
-
}
|
138
|
-
search_path = "applications/search"
|
139
|
-
begin
|
140
|
-
response = mozzn.get(search_path, params)
|
141
|
-
if response.has_key?('info')
|
142
|
-
raise Thor::Error, "#{response['info']}"
|
143
|
-
else
|
144
|
-
id = response['app_id']
|
145
|
-
resources_path = "applications/#{id}/remove"
|
146
|
-
response = mozzn.get(resources_path,nil)
|
147
|
-
say response['info'], :green
|
148
|
-
end
|
149
|
-
rescue JSON::ParserError => e
|
150
|
-
raise Thor::Error,"You do not have an application with the name #{params[:name]}. Please check the application name."
|
151
|
-
end
|
152
|
-
rescue Mozzn::Disconnected
|
153
|
-
say 'Unable to connect to Mozzn. Check your internet connection!', :red
|
154
|
-
rescue Mozzn::UnexpectedOutput
|
155
|
-
say 'UnexpectedOutput', :red
|
156
|
-
end
|
157
|
-
|
158
|
-
desc 'update', 'To show if there is an update for the CLI'
|
18
|
+
desc 'update', 'Check for updates'
|
159
19
|
def update
|
160
20
|
# TODO after gem release https://rubygems.org/api/v1/versions/mozzn.json
|
161
21
|
@connection = Faraday.new('https://rubygems.org/api/v1/versions/coulda.json')
|
@@ -169,164 +29,6 @@ module Mozzn
|
|
169
29
|
end
|
170
30
|
end
|
171
31
|
|
172
|
-
desc 'registration', 'Create an account on mozzn.'
|
173
|
-
method_option :name, :aliases => "-n", :desc => "Username."
|
174
|
-
method_option :email, :aliases => "-u", :desc => "User email used to login."
|
175
|
-
method_option :password, :aliases => "-p", :desc => "User password."
|
176
|
-
method_option :password_confirmation, :aliases => "-c", :desc => "Password_confirmation."
|
177
|
-
|
178
|
-
def registration
|
179
|
-
mozzn = Mozzn::Api.new
|
180
|
-
if options.present?
|
181
|
-
name = options[:name]
|
182
|
-
email = options[:email]
|
183
|
-
password = options[:password]
|
184
|
-
password_confirmation = options[:password_confirmation]
|
185
|
-
else
|
186
|
-
h = HighLine.new
|
187
|
-
name = h.ask("Username: ")
|
188
|
-
email = h.ask("Email: ")
|
189
|
-
password = h.ask("Password: ")
|
190
|
-
password_confirmation = h.ask("password_confirmation: ")
|
191
|
-
end
|
192
|
-
params = {
|
193
|
-
user: {
|
194
|
-
name: name,
|
195
|
-
email: email,
|
196
|
-
password: password,
|
197
|
-
password_confirmation: password_confirmation
|
198
|
-
}
|
199
|
-
}
|
200
|
-
response = mozzn.post(:registrations, params)
|
201
|
-
errors = response['data']['errors']
|
202
|
-
if errors.present?
|
203
|
-
errors = JSON.parse(errors)
|
204
|
-
say "#{response['info']}, the following errors were found:\n * #{errors.map {|e| e.join(' ')}.join("\n * ")}\nPlease try again.", :red
|
205
|
-
# TODO: re-run registration
|
206
|
-
else
|
207
|
-
say response['info'], :green
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
desc 'resources appname', 'To list all instances which a specific application use.'
|
212
|
-
|
213
|
-
def resources appname = nil
|
214
|
-
mozzn = Mozzn::Api.new(Mozzn::Config.new.read['token'])
|
215
|
-
if !appname.present?
|
216
|
-
raise Thor::Error, "You must enter Application Name!"
|
217
|
-
end
|
218
|
-
params = {
|
219
|
-
name: appname
|
220
|
-
}
|
221
|
-
search_path = "applications/search"
|
222
|
-
begin
|
223
|
-
response = mozzn.get(search_path, params)
|
224
|
-
if response.has_key?('info')
|
225
|
-
raise Thor::Error, "#{response['info']}"
|
226
|
-
else
|
227
|
-
id = response['app_id']
|
228
|
-
resources_path = "applications/#{id}/resources"
|
229
|
-
response = mozzn.get(resources_path,nil)
|
230
|
-
if response.has_key?('info')
|
231
|
-
raise Thor::Error, "#{response['info']}"
|
232
|
-
else
|
233
|
-
table1 = Terminal::Table.new(headings: ['Process', 'Command']) do |t|
|
234
|
-
response['resources'].each do |resource|
|
235
|
-
key = (resource.has_key?('command') ? resource['name'] : nil)
|
236
|
-
value = (resource.has_key?('command') ? resource['command'] : nil)
|
237
|
-
if key.present?
|
238
|
-
t.add_row [key, value]
|
239
|
-
end
|
240
|
-
end
|
241
|
-
end
|
242
|
-
table2 = Terminal::Table.new(headings: ['Database', 'Role']) do |t|
|
243
|
-
response['resources'].each do |resource|
|
244
|
-
key = (resource.has_key?('role') ? resource['name'] : nil)
|
245
|
-
value = (resource.has_key?('role') ? resource['role'] : nil)
|
246
|
-
if key.present?
|
247
|
-
t.add_row [key, value]
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
252
|
-
instances_path = "applications/#{id}/instances"
|
253
|
-
response = mozzn.get(instances_path,nil)
|
254
|
-
# say response['instances'].first['data']['ip_address'].inspect, :green
|
255
|
-
if response.has_key?('info')
|
256
|
-
raise Thor::Error, "#{response['info']}"
|
257
|
-
else
|
258
|
-
table3 = Terminal::Table.new(headings: ['Name', 'IP']) do |t|
|
259
|
-
response['instances'].each do |instant|
|
260
|
-
key = instant['data']['name']
|
261
|
-
value = instant['data']['ip_address']
|
262
|
-
if key.present?
|
263
|
-
t.add_row [key, value]
|
264
|
-
end
|
265
|
-
end
|
266
|
-
end
|
267
|
-
end
|
268
|
-
say "Processes:"
|
269
|
-
say "#{table1}"
|
270
|
-
say "Databases:"
|
271
|
-
say "#{table2}"
|
272
|
-
say "Instances:"
|
273
|
-
say "#{table3}"
|
274
|
-
end
|
275
|
-
|
276
|
-
rescue JSON::ParserError => e
|
277
|
-
raise Thor::Error,"You do not have an application with the name #{params[:appname]}. Please check the application name."
|
278
|
-
end
|
279
|
-
rescue Mozzn::Disconnected
|
280
|
-
say 'Unable to connect to Mozzn. Check your internet connection!', :red
|
281
|
-
rescue Mozzn::UnexpectedOutput
|
282
|
-
say 'UnexpectedOutput', :red
|
283
|
-
end
|
284
|
-
|
285
|
-
desc 'console', 'To start a console on your first web server'
|
286
|
-
method_option :name, :aliases => "-c", :desc => "Command to be run in console."
|
287
|
-
def console
|
288
|
-
config_file_path = ".git/config"
|
289
|
-
if File.exists?(config_file_path)
|
290
|
-
File.open(config_file_path, "r") do |f|
|
291
|
-
@data = f.read
|
292
|
-
end
|
293
|
-
else
|
294
|
-
raise Thor::Error,"Unable to find a repository for this directory. You probably not in the application directory or this application does not have git repository yet."
|
295
|
-
end
|
296
|
-
|
297
|
-
url = @data.scan /url =.*/
|
298
|
-
app = url.first.split(":")[1]
|
299
|
-
appname = app.split('.').first
|
300
|
-
mozzn = Mozzn::Api.new(Mozzn::Config.new.read['token'])
|
301
|
-
params = {
|
302
|
-
name: appname
|
303
|
-
}
|
304
|
-
search_path = "applications/search"
|
305
|
-
begin
|
306
|
-
response = mozzn.get(search_path, params)
|
307
|
-
if response.has_key?('info')
|
308
|
-
raise Thor::Error, "#{response['info']}"
|
309
|
-
else
|
310
|
-
id = response['app_id']
|
311
|
-
instances_path = "applications/#{id}/instances"
|
312
|
-
response = mozzn.get(instances_path,nil)
|
313
|
-
ip_address = response['instances'].first['data']['ip_address']
|
314
|
-
if options[:command].present?
|
315
|
-
system( "ssh app@#{ip_address} #{options[:command]}" )
|
316
|
-
else
|
317
|
-
system( "ssh app@#{ip_address}")
|
318
|
-
end
|
319
|
-
status = $?.exitstatus
|
320
|
-
end
|
321
|
-
rescue JSON::ParserError => e
|
322
|
-
raise Thor::Error,"You do not have an application with the name #{params[:name]}. Please check the application name."
|
323
|
-
end
|
324
|
-
rescue Mozzn::Disconnected
|
325
|
-
say 'Unable to connect to Mozzn. Check your internet connection!', :red
|
326
|
-
rescue Mozzn::UnexpectedOutput
|
327
|
-
say 'UnexpectedOutput', :red
|
328
|
-
end
|
329
|
-
|
330
32
|
desc 'help COMMAND', 'For more infromation about spicific COMMAND'
|
331
33
|
def help command = nil
|
332
34
|
puts 'Primary help topics, type "mozzn help COMMAND" for more details.'
|
@@ -334,24 +36,13 @@ module Mozzn
|
|
334
36
|
super command
|
335
37
|
end
|
336
38
|
|
337
|
-
|
338
|
-
|
339
|
-
def git_check
|
340
|
-
line = Cocaine::CommandLine.new("which git")
|
341
|
-
begin
|
342
|
-
output = line.run
|
343
|
-
rescue Cocaine::ExitStatusError => e
|
344
|
-
raise Thor::Error, 'Unable to find git it is either not installed or not in your $PATH. You may need to install it or add it to $PATH.'
|
345
|
-
end
|
346
|
-
end
|
39
|
+
desc "key SUBCOMMAND", "Manage SSH keys"
|
40
|
+
subcommand "key", Mozzn::Commands::Key
|
347
41
|
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
end
|
354
|
-
end
|
355
|
-
end
|
42
|
+
desc "app SUBCOMMAND", "Manage applications"
|
43
|
+
subcommand "app", Mozzn::Commands::App
|
44
|
+
|
45
|
+
desc "auth SUBCOMMAND", "Manage your accountUser registration and login"
|
46
|
+
subcommand "auth", Mozzn::Commands::Auth
|
356
47
|
end
|
357
48
|
end
|
@@ -0,0 +1,222 @@
|
|
1
|
+
module Mozzn
|
2
|
+
module Commands
|
3
|
+
class App < Thor
|
4
|
+
|
5
|
+
desc 'create APPNAME', 'create a new application'
|
6
|
+
|
7
|
+
def create name = nil
|
8
|
+
token = Mozzn::Config.new.read['token']
|
9
|
+
if token.nil?
|
10
|
+
raise Thor::Error,"You need to login in order to continue."
|
11
|
+
end
|
12
|
+
mozzn = Mozzn::Api.new(Mozzn::Config.new.read['token'])
|
13
|
+
if name == nil
|
14
|
+
raise Thor::Error, "You must enter application name."
|
15
|
+
end
|
16
|
+
path = 'applications'
|
17
|
+
params = {
|
18
|
+
application: {
|
19
|
+
name: name
|
20
|
+
}
|
21
|
+
}
|
22
|
+
response = mozzn.post(path, params)
|
23
|
+
if response.has_key?('message')
|
24
|
+
raise Thor::Error, "#{response['message']}"
|
25
|
+
else
|
26
|
+
say response['info'], :green
|
27
|
+
git = Git.init
|
28
|
+
unless File.exist?('.git')
|
29
|
+
git.add(all: true)
|
30
|
+
begin
|
31
|
+
git.commit('First commit')
|
32
|
+
rescue Git::GitExecuteError => e
|
33
|
+
# Do nothing
|
34
|
+
end
|
35
|
+
end
|
36
|
+
begin
|
37
|
+
git.add_remote("mozzn", "git@git.mozzn.com:#{name}.git")
|
38
|
+
rescue Git::GitExecuteError => e
|
39
|
+
say 'Git remote already configured, skipping...'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
rescue Mozzn::Disconnected
|
43
|
+
say 'Unable to connect to Mozzn check the internet connection!', :red
|
44
|
+
rescue Mozzn::UnexpectedOutput
|
45
|
+
say 'UnexpectedOutput', :red
|
46
|
+
end
|
47
|
+
|
48
|
+
method_option :appname, :aliases => "-n", :desc => "Application name"
|
49
|
+
desc 'destroy ', 'Remove spcicfic Application'
|
50
|
+
def destroy
|
51
|
+
token = Mozzn::Config.new.read['token']
|
52
|
+
if token.nil?
|
53
|
+
raise Thor::Error,"You need to login in order to continue."
|
54
|
+
end
|
55
|
+
mozzn = Mozzn::Api.new(Mozzn::Config.new.read['token'])
|
56
|
+
if options['appname'].present?
|
57
|
+
name = options['appname']
|
58
|
+
else
|
59
|
+
name = appname
|
60
|
+
end
|
61
|
+
params = {
|
62
|
+
name: name
|
63
|
+
}
|
64
|
+
search_path = "applications/search"
|
65
|
+
begin
|
66
|
+
response = mozzn.get(search_path, params)
|
67
|
+
if response.has_key?('info')
|
68
|
+
raise Thor::Error, "#{response['info']}"
|
69
|
+
else
|
70
|
+
id = response['app_id']
|
71
|
+
resources_path = "applications/#{id}/remove"
|
72
|
+
response = mozzn.get(resources_path,nil)
|
73
|
+
say response['info'], :green
|
74
|
+
end
|
75
|
+
rescue JSON::ParserError => e
|
76
|
+
raise Thor::Error,"You do not have an application with the name #{params[:name]}. Please check the application name."
|
77
|
+
end
|
78
|
+
rescue Mozzn::Disconnected
|
79
|
+
say 'Unable to connect to Mozzn. Check your internet connection!', :red
|
80
|
+
rescue Mozzn::UnexpectedOutput
|
81
|
+
say 'UnexpectedOutput', :red
|
82
|
+
end
|
83
|
+
desc "list", "List all your Applications."
|
84
|
+
|
85
|
+
def list
|
86
|
+
#TODO
|
87
|
+
end
|
88
|
+
|
89
|
+
method_option :appname, :aliases => "-n", :desc => "Application name"
|
90
|
+
desc 'resources', 'To list all instances which application use'
|
91
|
+
def resources
|
92
|
+
token = Mozzn::Config.new.read['token']
|
93
|
+
if token.nil?
|
94
|
+
raise Thor::Error,"You need to login in order to continue."
|
95
|
+
end
|
96
|
+
mozzn = Mozzn::Api.new(Mozzn::Config.new.read['token'])
|
97
|
+
if options['appname'].present?
|
98
|
+
name = options['appname']
|
99
|
+
else
|
100
|
+
name = appname
|
101
|
+
end
|
102
|
+
params = {
|
103
|
+
name: name
|
104
|
+
}
|
105
|
+
search_path = "applications/search"
|
106
|
+
begin
|
107
|
+
response = mozzn.get(search_path, params)
|
108
|
+
if response.has_key?('info')
|
109
|
+
raise Thor::Error, "#{response['info']}"
|
110
|
+
else
|
111
|
+
id = response['app_id']
|
112
|
+
resources_path = "applications/#{id}/resources"
|
113
|
+
response = mozzn.get(resources_path,nil)
|
114
|
+
if response.has_key?('info')
|
115
|
+
raise Thor::Error, "#{response['info']}"
|
116
|
+
else
|
117
|
+
table1 = Terminal::Table.new(headings: ['Process', 'Command']) do |t|
|
118
|
+
response['resources'].each do |resource|
|
119
|
+
key = (resource.has_key?('command') ? resource['name'] : nil)
|
120
|
+
value = (resource.has_key?('command') ? resource['command'] : nil)
|
121
|
+
if key.present?
|
122
|
+
t.add_row [key, value]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
table2 = Terminal::Table.new(headings: ['Database', 'Role']) do |t|
|
127
|
+
response['resources'].each do |resource|
|
128
|
+
key = (resource.has_key?('role') ? resource['name'] : nil)
|
129
|
+
value = (resource.has_key?('role') ? resource['role'] : nil)
|
130
|
+
if key.present?
|
131
|
+
t.add_row [key, value]
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
instances_path = "applications/#{id}/instances"
|
137
|
+
response = mozzn.get(instances_path,nil)
|
138
|
+
if response.has_key?('info')
|
139
|
+
raise Thor::Error, "#{response['info']}"
|
140
|
+
else
|
141
|
+
table3 = Terminal::Table.new(headings: ['Name', 'IP']) do |t|
|
142
|
+
response['instances'].each do |instant|
|
143
|
+
key = instant['data']['name']
|
144
|
+
value = instant['data']['ip_address']
|
145
|
+
if key.present?
|
146
|
+
t.add_row [key, value]
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
say "Processes:"
|
152
|
+
say "#{table1}"
|
153
|
+
say "Databases:"
|
154
|
+
say "#{table2}"
|
155
|
+
say "Instances:"
|
156
|
+
say "#{table3}"
|
157
|
+
end
|
158
|
+
|
159
|
+
rescue JSON::ParserError => e
|
160
|
+
raise Thor::Error,"You do not have an application with the name #{params[:appname]}. Please check the application name."
|
161
|
+
end
|
162
|
+
rescue Mozzn::Disconnected
|
163
|
+
say 'Unable to connect to Mozzn. Check your internet connection!', :red
|
164
|
+
rescue Mozzn::UnexpectedOutput
|
165
|
+
say 'UnexpectedOutput', :red
|
166
|
+
end
|
167
|
+
|
168
|
+
desc 'console', 'To start a console on your first web server'
|
169
|
+
method_option :name, :aliases => "-c", :desc => "Command to be run in console."
|
170
|
+
def console
|
171
|
+
token = Mozzn::Config.new.read['token']
|
172
|
+
if token.nil?
|
173
|
+
raise Thor::Error,"You need to login in order to continue."
|
174
|
+
end
|
175
|
+
mozzn = Mozzn::Api.new(Mozzn::Config.new.read['token'])
|
176
|
+
params = {
|
177
|
+
name: appname
|
178
|
+
}
|
179
|
+
search_path = "applications/search"
|
180
|
+
begin
|
181
|
+
response = mozzn.get(search_path, params)
|
182
|
+
if response.has_key?('info')
|
183
|
+
raise Thor::Error, "#{response['info']}"
|
184
|
+
else
|
185
|
+
id = response['app_id']
|
186
|
+
instances_path = "applications/#{id}/instances"
|
187
|
+
response = mozzn.get(instances_path,nil)
|
188
|
+
ip_address = response['instances'].first['data']['ip_address']
|
189
|
+
if options[:command].present?
|
190
|
+
system( "ssh app@#{ip_address} #{options[:command]}" )
|
191
|
+
else
|
192
|
+
system( "ssh app@#{ip_address}")
|
193
|
+
end
|
194
|
+
status = $?.exitstatus
|
195
|
+
end
|
196
|
+
rescue JSON::ParserError => e
|
197
|
+
raise Thor::Error,"You do not have an application with the name #{params[:name]}. Please check the application name."
|
198
|
+
end
|
199
|
+
rescue Mozzn::Disconnected
|
200
|
+
say 'Unable to connect to Mozzn. Check your internet connection!', :red
|
201
|
+
rescue Mozzn::UnexpectedOutput
|
202
|
+
say 'UnexpectedOutput', :red
|
203
|
+
end
|
204
|
+
no_commands do
|
205
|
+
desc 'appname', 'Get application name'
|
206
|
+
def appname
|
207
|
+
config_file_path = ".git/config"
|
208
|
+
if File.exists?(config_file_path)
|
209
|
+
File.open(config_file_path, "r") do |f|
|
210
|
+
@data = f.read
|
211
|
+
end
|
212
|
+
else
|
213
|
+
raise Thor::Error,"Unable to find a repository for this directory. You probably not in the application directory or this application does not have git repository yet."
|
214
|
+
end
|
215
|
+
url = @data.scan /url =.*/
|
216
|
+
app = url.first.split(":")[1]
|
217
|
+
appname = app.split('.').first
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|