shelly 0.0.57 → 0.0.58
Sign up to get free protection for your applications and to get access to all the features.
- data/Guardfile +1 -0
- data/lib/shelly/cli/backup.rb +13 -14
- data/lib/shelly/cli/config.rb +43 -55
- data/lib/shelly/cli/deploys.rb +8 -10
- data/lib/shelly/cli/main.rb +80 -93
- data/lib/shelly/cli/user.rb +36 -49
- data/lib/shelly/cloudfile.rb +1 -2
- data/lib/shelly/helpers.rb +11 -3
- data/lib/shelly/version.rb +1 -1
- data/spec/shelly/cli/backup_spec.rb +35 -33
- data/spec/shelly/cli/config_spec.rb +53 -135
- data/spec/shelly/cli/deploys_spec.rb +20 -59
- data/spec/shelly/cli/main_spec.rb +106 -186
- data/spec/shelly/cli/user_spec.rb +23 -27
- metadata +147 -163
data/Guardfile
CHANGED
data/lib/shelly/cli/backup.rb
CHANGED
@@ -9,14 +9,13 @@ module Shelly
|
|
9
9
|
include Helpers
|
10
10
|
|
11
11
|
before_hook :logged_in?, :only => [:list, :get, :create, :restore]
|
12
|
-
before_hook :cloudfile_present?, :only => [:list]
|
13
12
|
|
14
13
|
class_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
15
14
|
|
16
15
|
desc "list", "List available database backups"
|
17
16
|
def list
|
18
|
-
multiple_clouds(options[:cloud], "backup list")
|
19
|
-
backups =
|
17
|
+
app = multiple_clouds(options[:cloud], "backup list")
|
18
|
+
backups = app.database_backups
|
20
19
|
if backups.present?
|
21
20
|
to_display = [["Filename", "| Size"]]
|
22
21
|
backups.each do |backup|
|
@@ -31,7 +30,7 @@ module Shelly
|
|
31
30
|
end
|
32
31
|
rescue Client::NotFoundException => e
|
33
32
|
raise unless e.resource == :cloud
|
34
|
-
say_error "You have no access to '#{
|
33
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
35
34
|
end
|
36
35
|
|
37
36
|
desc "get [FILENAME]", "Download database backup"
|
@@ -40,9 +39,9 @@ module Shelly
|
|
40
39
|
If filename is not specyfied, latest database backup will be downloaded.
|
41
40
|
}
|
42
41
|
def get(handler = "last")
|
43
|
-
multiple_clouds(options[:cloud], "backup get #{handler}")
|
42
|
+
app = multiple_clouds(options[:cloud], "backup get #{handler}")
|
44
43
|
|
45
|
-
backup =
|
44
|
+
backup = app.database_backup(handler)
|
46
45
|
bar = Shelly::DownloadProgressBar.new(backup.size)
|
47
46
|
backup.download(bar.progress_callback)
|
48
47
|
|
@@ -51,7 +50,7 @@ module Shelly
|
|
51
50
|
rescue Client::NotFoundException => e
|
52
51
|
case e.resource
|
53
52
|
when :cloud
|
54
|
-
say_error "You have no access to '#{
|
53
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
55
54
|
when :database_backup
|
56
55
|
say_error "Backup not found", :with_exit => false
|
57
56
|
say "You can list available backups with `shelly backup list` command"
|
@@ -65,31 +64,31 @@ module Shelly
|
|
65
64
|
If database kind is not specified, backup of all configured databases will be performed.
|
66
65
|
}
|
67
66
|
def create(kind = nil)
|
68
|
-
multiple_clouds(options[:cloud], "backup create [DB_KIND]")
|
69
|
-
|
67
|
+
app = multiple_clouds(options[:cloud], "backup create [DB_KIND]")
|
68
|
+
app.request_backup(kind)
|
70
69
|
say "Backup requested. It can take up to several minutes for " +
|
71
70
|
"the backup process to finish and the backup to show up in backups list.", :green
|
72
71
|
rescue Client::ValidationException => e
|
73
72
|
say_error e[:message]
|
74
73
|
rescue Client::NotFoundException => e
|
75
74
|
raise unless e.resource == :cloud
|
76
|
-
say_error "You have no access to '#{
|
75
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
77
76
|
end
|
78
77
|
|
79
78
|
desc "restore FILENAME", "Restore database to state from given backup"
|
80
79
|
def restore(filename)
|
81
|
-
multiple_clouds(options[:cloud], "backup restore FILENAME")
|
82
|
-
backup =
|
80
|
+
app = multiple_clouds(options[:cloud], "backup restore FILENAME")
|
81
|
+
backup = app.database_backup(filename)
|
83
82
|
say "You are about restore database #{backup.kind} for cloud #{backup.code_name} to state from #{backup.filename}"
|
84
83
|
say_new_line
|
85
84
|
ask_to_restore_database
|
86
|
-
|
85
|
+
app.restore_backup(filename)
|
87
86
|
say_new_line
|
88
87
|
say "Restore has been scheduled. Wait a few minutes till database is restored."
|
89
88
|
rescue Client::NotFoundException => e
|
90
89
|
case e.resource
|
91
90
|
when :cloud
|
92
|
-
say_error "You have no access to '#{
|
91
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
93
92
|
when :database_backup
|
94
93
|
say_error "Backup not found", :with_exit => false
|
95
94
|
say "You can list available backups with `shelly backup list` command"
|
data/lib/shelly/cli/config.rb
CHANGED
@@ -6,98 +6,87 @@ module Shelly
|
|
6
6
|
include Thor::Actions
|
7
7
|
include Helpers
|
8
8
|
|
9
|
-
before_hook :logged_in?, :only => [:list, :show, :create, :edit, :delete]
|
10
|
-
|
9
|
+
before_hook :logged_in?, :only => [:list, :show, :create, :new, :edit, :update, :delete]
|
10
|
+
class_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
11
11
|
|
12
12
|
desc "list", "List configuration files"
|
13
13
|
def list
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
print_configs(user_configs)
|
25
|
-
else
|
26
|
-
say "You have no custom configuration files."
|
27
|
-
end
|
28
|
-
shelly_configs = @app.shelly_generated_configs
|
29
|
-
unless shelly_configs.empty?
|
30
|
-
say "Following files are created by Shelly Cloud:"
|
31
|
-
print_configs(shelly_configs)
|
32
|
-
end
|
33
|
-
else
|
34
|
-
say "Cloud #{cloud} has no configuration files"
|
35
|
-
end
|
36
|
-
rescue Client::NotFoundException => e
|
37
|
-
raise unless e.resource == :cloud
|
38
|
-
say_error "You have no access to '#{@app}' cloud defined in Cloudfile"
|
14
|
+
app = multiple_clouds(options[:cloud], "list")
|
15
|
+
configs = app.configs
|
16
|
+
unless configs.empty?
|
17
|
+
say "Configuration files for #{app}", :green
|
18
|
+
user_configs = app.user_configs
|
19
|
+
unless user_configs.empty?
|
20
|
+
say "Custom configuration files:"
|
21
|
+
print_configs(user_configs)
|
22
|
+
else
|
23
|
+
say "You have no custom configuration files."
|
39
24
|
end
|
25
|
+
shelly_configs = app.shelly_generated_configs
|
26
|
+
unless shelly_configs.empty?
|
27
|
+
say "Following files are created by Shelly Cloud:"
|
28
|
+
print_configs(shelly_configs)
|
29
|
+
end
|
30
|
+
else
|
31
|
+
say "Cloud #{cloud} has no configuration files"
|
40
32
|
end
|
33
|
+
rescue Client::NotFoundException => e
|
34
|
+
raise unless e.resource == :cloud
|
35
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
41
36
|
end
|
42
37
|
|
43
|
-
# FIXME: Check if path argument is present via Thor (mandatory arguments)
|
44
|
-
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
45
38
|
desc "show PATH", "View configuration file"
|
46
|
-
def show(path
|
47
|
-
|
48
|
-
|
49
|
-
config = @app.config(path)
|
39
|
+
def show(path)
|
40
|
+
app = multiple_clouds(options[:cloud], "show #{path}")
|
41
|
+
config = app.config(path)
|
50
42
|
say "Content of #{config["path"]}:", :green
|
51
43
|
say config["content"]
|
52
44
|
rescue Client::NotFoundException => e
|
53
45
|
case e.resource
|
54
46
|
when :cloud
|
55
|
-
say_error "You have no access to '#{
|
47
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
56
48
|
when :config
|
57
49
|
say_error "Config '#{path}' not found", :with_exit => false
|
58
|
-
say_error "You can list available config files with `shelly config list --cloud #{
|
50
|
+
say_error "You can list available config files with `shelly config list --cloud #{app}`"
|
59
51
|
else raise
|
60
52
|
end
|
61
53
|
end
|
62
54
|
|
63
55
|
map "new" => :create
|
64
|
-
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
65
56
|
desc "create PATH", "Create configuration file"
|
66
|
-
def create(path
|
67
|
-
say_error "No path specified" unless path
|
57
|
+
def create(path)
|
68
58
|
output = open_editor(path)
|
69
|
-
multiple_clouds(options[:cloud], "create #{path}")
|
70
|
-
|
59
|
+
app = multiple_clouds(options[:cloud], "create #{path}")
|
60
|
+
app.create_config(path, output)
|
71
61
|
say "File '#{path}' created.", :green
|
72
62
|
say "To make changes to running application redeploy it using:"
|
73
|
-
say "`shelly redeploy --cloud #{
|
63
|
+
say "`shelly redeploy --cloud #{app}`"
|
74
64
|
rescue Client::NotFoundException => e
|
75
65
|
raise unless e.resource == :cloud
|
76
|
-
say_error "You have no access to '#{
|
66
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
77
67
|
rescue Client::ValidationException => e
|
78
68
|
e.each_error { |error| say_error error, :with_exit => false }
|
79
69
|
exit 1
|
80
70
|
end
|
81
71
|
|
82
72
|
map "update" => :edit
|
83
|
-
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
84
73
|
desc "edit PATH", "Edit configuration file"
|
85
74
|
def edit(path = nil)
|
86
75
|
say_error "No configuration file specified" unless path
|
87
|
-
multiple_clouds(options[:cloud], "edit #{path}")
|
88
|
-
config =
|
76
|
+
app = multiple_clouds(options[:cloud], "edit #{path}")
|
77
|
+
config = app.config(path)
|
89
78
|
content = open_editor(config["path"], config["content"])
|
90
|
-
|
79
|
+
app.update_config(path, content)
|
91
80
|
say "File '#{config["path"]}' updated.", :green
|
92
81
|
say "To make changes to running application redeploy it using:"
|
93
|
-
say "`shelly redeploy --cloud #{
|
82
|
+
say "`shelly redeploy --cloud #{app}`"
|
94
83
|
rescue Client::NotFoundException => e
|
95
84
|
case e.resource
|
96
85
|
when :cloud
|
97
|
-
say_error "You have no access to '#{
|
86
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
98
87
|
when :config
|
99
88
|
say_error "Config '#{path}' not found", :with_exit => false
|
100
|
-
say_error "You can list available config files with `shelly config list --cloud #{
|
89
|
+
say_error "You can list available config files with `shelly config list --cloud #{app}`"
|
101
90
|
else raise
|
102
91
|
end
|
103
92
|
rescue Client::ValidationException => e
|
@@ -105,27 +94,26 @@ module Shelly
|
|
105
94
|
exit 1
|
106
95
|
end
|
107
96
|
|
108
|
-
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
109
97
|
desc "delete PATH", "Delete configuration file"
|
110
98
|
def delete(path = nil)
|
111
99
|
say_error "No configuration file specified" unless path
|
112
|
-
multiple_clouds(options[:cloud], "delete #{path}")
|
100
|
+
app = multiple_clouds(options[:cloud], "delete #{path}")
|
113
101
|
answer = yes?("Are you sure you want to delete 'path' (yes/no): ")
|
114
102
|
if answer
|
115
|
-
|
103
|
+
app.delete_config(path)
|
116
104
|
say "File '#{path}' deleted.", :green
|
117
105
|
say "To make changes to running application redeploy it using:"
|
118
|
-
say "`shelly redeploy --cloud #{
|
106
|
+
say "`shelly redeploy --cloud #{app}`"
|
119
107
|
else
|
120
108
|
say "File not deleted"
|
121
109
|
end
|
122
110
|
rescue Client::NotFoundException => e
|
123
111
|
case e.resource
|
124
112
|
when :cloud
|
125
|
-
say_error "You have no access to '#{
|
113
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
126
114
|
when :config
|
127
115
|
say_error "Config '#{path}' not found", :with_exit => false
|
128
|
-
say_error "You can list available config files with `shelly config list --cloud #{
|
116
|
+
say_error "You can list available config files with `shelly config list --cloud #{app}`"
|
129
117
|
else raise
|
130
118
|
end
|
131
119
|
end
|
data/lib/shelly/cli/deploys.rb
CHANGED
@@ -8,13 +8,12 @@ module Shelly
|
|
8
8
|
include Helpers
|
9
9
|
|
10
10
|
before_hook :logged_in?, :only => [:list, :show]
|
11
|
-
|
11
|
+
class_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
12
12
|
|
13
13
|
desc "list", "Lists deploy logs"
|
14
|
-
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
15
14
|
def list
|
16
|
-
multiple_clouds(options[:cloud], "deploys list")
|
17
|
-
logs =
|
15
|
+
app = multiple_clouds(options[:cloud], "deploys list")
|
16
|
+
logs = app.deploy_logs
|
18
17
|
unless logs.empty?
|
19
18
|
say "Available deploy logs", :green
|
20
19
|
logs.each do |log|
|
@@ -25,15 +24,14 @@ module Shelly
|
|
25
24
|
end
|
26
25
|
rescue Client::NotFoundException => e
|
27
26
|
raise unless e.resource == :cloud
|
28
|
-
say_error "You have no access to '#{
|
27
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
29
28
|
end
|
30
29
|
|
31
30
|
desc "show LOG", "Show specific deploy log"
|
32
|
-
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
33
31
|
def show(log = nil)
|
34
32
|
specify_log(log)
|
35
|
-
multiple_clouds(options[:cloud], "deploys show #{log}")
|
36
|
-
content =
|
33
|
+
app = multiple_clouds(options[:cloud], "deploys show #{log}")
|
34
|
+
content = app.deploy_log(log)
|
37
35
|
say "Log for deploy done on #{content["created_at"]}", :green
|
38
36
|
if content["bundle_install"]
|
39
37
|
say("Starting bundle install", :green); say(content["bundle_install"])
|
@@ -53,9 +51,9 @@ module Shelly
|
|
53
51
|
rescue Client::NotFoundException => e
|
54
52
|
case e.resource
|
55
53
|
when :cloud
|
56
|
-
say_error "You have no access to '#{
|
54
|
+
say_error "You have no access to '#{app.code_name}' cloud defined in Cloudfile"
|
57
55
|
when :log
|
58
|
-
say_error "Log not found, list all deploy logs using `shelly deploys list --cloud=#{
|
56
|
+
say_error "Log not found, list all deploy logs using `shelly deploys list --cloud=#{app.code_name}`"
|
59
57
|
else raise
|
60
58
|
end
|
61
59
|
end
|
data/lib/shelly/cli/main.rb
CHANGED
@@ -18,7 +18,6 @@ module Shelly
|
|
18
18
|
# FIXME: it should be possible to pass single symbol, instead of one element array
|
19
19
|
before_hook :logged_in?, :only => [:add, :status, :list, :start, :stop, :logs, :delete, :ip, :logout, :execute, :rake, :setup]
|
20
20
|
before_hook :inside_git_repository?, :only => [:add, :setup]
|
21
|
-
before_hook :cloudfile_present?, :only => [:logs, :stop, :start, :ip, :execute, :rake, :setup]
|
22
21
|
|
23
22
|
map %w(-v --version) => :version
|
24
23
|
desc "version", "Display shelly version"
|
@@ -79,39 +78,38 @@ module Shelly
|
|
79
78
|
desc "add", "Add a new cloud"
|
80
79
|
def add
|
81
80
|
check_options(options)
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
if overwrite_remote?(
|
89
|
-
say "Adding remote #{
|
90
|
-
|
81
|
+
app = Shelly::App.new
|
82
|
+
app.code_name = options["code-name"] || ask_for_code_name
|
83
|
+
app.databases = options["databases"] || ask_for_databases
|
84
|
+
app.size = options["size"] || "large"
|
85
|
+
app.create
|
86
|
+
|
87
|
+
if overwrite_remote?(app)
|
88
|
+
say "Adding remote #{app} #{app.git_url}", :green
|
89
|
+
app.add_git_remote
|
91
90
|
else
|
92
91
|
say "You have to manually add git remote:"
|
93
|
-
say "`git remote add NAME #{
|
92
|
+
say "`git remote add NAME #{app.git_url}`"
|
94
93
|
end
|
95
94
|
|
96
95
|
say "Creating Cloudfile", :green
|
97
|
-
|
98
|
-
if
|
96
|
+
app.create_cloudfile
|
97
|
+
if app.attributes["trial"]
|
99
98
|
say_new_line
|
100
99
|
say "Billing information", :green
|
101
100
|
say "Cloud created with 20 Euro credit."
|
102
101
|
say "Remember to provide billing details before trial ends."
|
103
|
-
|
104
|
-
say url
|
102
|
+
say app.edit_billing_url
|
105
103
|
end
|
106
104
|
|
107
105
|
info_adding_cloudfile_to_repository
|
108
|
-
info_deploying_to_shellycloud(
|
106
|
+
info_deploying_to_shellycloud(app)
|
109
107
|
|
110
108
|
rescue Client::ValidationException => e
|
111
109
|
e.each_error { |error| say_error error, :with_exit => false }
|
112
110
|
say_new_line
|
113
111
|
say_error "Fix erros in the below command and type it again to create your cloud" , :with_exit => false
|
114
|
-
say_error "shelly add --code-name=#{
|
112
|
+
say_error "shelly add --code-name=#{app.code_name} --databases=#{app.databases.join(',')} --size=#{app.size}"
|
115
113
|
end
|
116
114
|
|
117
115
|
desc "list", "List available clouds"
|
@@ -134,146 +132,136 @@ module Shelly
|
|
134
132
|
end
|
135
133
|
|
136
134
|
map "status" => :list
|
137
|
-
|
135
|
+
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
138
136
|
desc "ip", "List cloud's IP addresses"
|
139
137
|
def ip
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
raise unless e.resource == :cloud
|
149
|
-
say_error "You have no access to '#{cloud}' cloud defined in Cloudfile", :with_exit => false
|
150
|
-
end
|
151
|
-
end
|
138
|
+
app = multiple_clouds(options[:cloud], "ip")
|
139
|
+
web_server_ip = app.web_server_ip
|
140
|
+
say "Cloud #{app}:", :green
|
141
|
+
print_wrapped "Web server IP: #{web_server_ip}", :ident => 2
|
142
|
+
print_wrapped "Mail server IP: #{app.mail_server_ip}", :ident => 2
|
143
|
+
rescue Client::NotFoundException => e
|
144
|
+
raise unless e.resource == :cloud
|
145
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
152
146
|
end
|
153
147
|
|
154
148
|
desc "start", "Start the cloud"
|
155
149
|
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
156
150
|
def start
|
157
|
-
multiple_clouds(options[:cloud], "start")
|
158
|
-
|
159
|
-
say "Starting cloud #{
|
151
|
+
app = multiple_clouds(options[:cloud], "start")
|
152
|
+
app.start
|
153
|
+
say "Starting cloud #{app}.", :green
|
160
154
|
say "This can take up to 10 minutes."
|
161
155
|
say "Check status with: `shelly list`"
|
162
156
|
rescue Client::ConflictException => e
|
163
157
|
case e[:state]
|
164
158
|
when "running"
|
165
|
-
say_error "Not starting: cloud '#{
|
159
|
+
say_error "Not starting: cloud '#{app}' is already running"
|
166
160
|
when "deploying", "configuring"
|
167
|
-
say_error "Not starting: cloud '#{
|
161
|
+
say_error "Not starting: cloud '#{app}' is currently deploying"
|
168
162
|
when "no_code"
|
169
163
|
say_error "Not starting: no source code provided", :with_exit => false
|
170
164
|
say_error "Push source code using:", :with_exit => false
|
171
|
-
say " git push #{
|
165
|
+
say " git push #{app} master"
|
172
166
|
when "deploy_failed", "configuration_failed"
|
173
167
|
say_error "Not starting: deployment failed", :with_exit => false
|
174
168
|
say_error "Support has been notified", :with_exit => false
|
175
|
-
say_error "Check `shelly deploys show last --cloud #{
|
169
|
+
say_error "Check `shelly deploys show last --cloud #{app}` for reasons of failure"
|
176
170
|
when "not_enough_resources"
|
177
171
|
say_error %{Sorry, There are no resources for your servers.
|
178
172
|
We have been notified about it. We will be adding new resources shortly}
|
179
173
|
when "no_billing"
|
180
|
-
say_error "Please fill in billing details to start #{
|
181
|
-
say_error "Visit: #{
|
174
|
+
say_error "Please fill in billing details to start #{app}.", :with_exit => false
|
175
|
+
say_error "Visit: #{app.edit_billing_url}", :with_exit => false
|
182
176
|
when "payment_declined"
|
183
|
-
say_error "Not starting. Invoice for cloud '#{
|
177
|
+
say_error "Not starting. Invoice for cloud '#{app}' was declined."
|
184
178
|
end
|
185
179
|
exit 1
|
186
180
|
rescue Client::NotFoundException => e
|
187
181
|
raise unless e.resource == :cloud
|
188
|
-
say_error "You have no access to '#{
|
182
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
189
183
|
end
|
190
184
|
|
191
185
|
desc "setup", "Set up clouds"
|
186
|
+
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
192
187
|
def setup
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
say "You have to manually add remote:"
|
209
|
-
say "`git remote add #{app} #{app.git_url}`"
|
210
|
-
say "`git fetch production`"
|
211
|
-
say "`git checkout -b #{app} --track #{app}/master`"
|
212
|
-
end
|
213
|
-
|
214
|
-
say_new_line
|
215
|
-
rescue Client::NotFoundException => e
|
216
|
-
raise unless e.resource == :cloud
|
217
|
-
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
218
|
-
end
|
188
|
+
app = multiple_clouds(options[:cloud], "setup")
|
189
|
+
say "Setting up #{app} cloud", :green
|
190
|
+
app.git_url = app.attributes["git_info"]["repository_url"]
|
191
|
+
if overwrite_remote?(app)
|
192
|
+
say "git remote add #{app} #{app.git_url}"
|
193
|
+
app.add_git_remote
|
194
|
+
say "git fetch production"
|
195
|
+
app.git_fetch_remote
|
196
|
+
say "git checkout -b #{app} --track #{app}/master"
|
197
|
+
app.git_add_tracking_branch
|
198
|
+
else
|
199
|
+
say "You have to manually add remote:"
|
200
|
+
say "`git remote add #{app} #{app.git_url}`"
|
201
|
+
say "`git fetch production`"
|
202
|
+
say "`git checkout -b #{app} --track #{app}/master`"
|
219
203
|
end
|
220
204
|
|
205
|
+
say_new_line
|
221
206
|
say "Your application is set up.", :green
|
207
|
+
rescue Client::NotFoundException => e
|
208
|
+
raise unless e.resource == :cloud
|
209
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
222
210
|
end
|
223
211
|
|
224
212
|
desc "stop", "Shutdown the cloud"
|
225
213
|
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
226
214
|
def stop
|
227
|
-
multiple_clouds(options[:cloud], "stop")
|
215
|
+
app = multiple_clouds(options[:cloud], "stop")
|
228
216
|
ask_to_stop_application
|
229
|
-
|
217
|
+
app.stop
|
230
218
|
say_new_line
|
231
|
-
say "Cloud '#{
|
219
|
+
say "Cloud '#{app}' stopped"
|
232
220
|
rescue Client::NotFoundException => e
|
233
221
|
raise unless e.resource == :cloud
|
234
|
-
say_error "You have no access to '#{
|
222
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
235
223
|
end
|
236
224
|
|
237
225
|
desc "delete", "Delete the cloud"
|
238
226
|
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
239
227
|
def delete
|
240
|
-
multiple_clouds(options[:cloud], "delete")
|
241
|
-
say "You are about to delete application: #{
|
228
|
+
app = multiple_clouds(options[:cloud], "delete")
|
229
|
+
say "You are about to delete application: #{app}."
|
242
230
|
say "Press Control-C at any moment to cancel."
|
243
231
|
say "Please confirm each question by typing yes and pressing Enter."
|
244
232
|
say_new_line
|
245
233
|
ask_to_delete_files
|
246
234
|
ask_to_delete_database
|
247
235
|
ask_to_delete_application
|
248
|
-
|
236
|
+
app.delete
|
249
237
|
say_new_line
|
250
238
|
say "Scheduling application delete - done"
|
251
239
|
if App.inside_git_repository?
|
252
|
-
|
240
|
+
app.remove_git_remote
|
253
241
|
say "Removing git remote - done"
|
254
242
|
else
|
255
243
|
say "Missing git remote"
|
256
244
|
end
|
257
245
|
rescue Client::NotFoundException => e
|
258
246
|
raise unless e.resource == :cloud
|
259
|
-
say_error "You have no access to '#{
|
247
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
260
248
|
end
|
261
249
|
|
262
250
|
desc "logs", "Show latest application logs"
|
263
251
|
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
264
252
|
def logs
|
265
253
|
cloud = options[:cloud]
|
266
|
-
multiple_clouds(cloud, "logs")
|
254
|
+
app = multiple_clouds(cloud, "logs")
|
267
255
|
begin
|
268
|
-
logs =
|
269
|
-
say "Cloud #{
|
256
|
+
logs = app.application_logs
|
257
|
+
say "Cloud #{app}:", :green
|
270
258
|
logs.each_with_index do |log, i|
|
271
259
|
say "Instance #{i+1}:", :green
|
272
260
|
say log
|
273
261
|
end
|
274
262
|
rescue Client::NotFoundException => e
|
275
263
|
raise unless e.resource == :cloud
|
276
|
-
say_error "You have no access to '#{cloud ||
|
264
|
+
say_error "You have no access to '#{cloud || app}' cloud defined in Cloudfile"
|
277
265
|
end
|
278
266
|
end
|
279
267
|
|
@@ -291,15 +279,14 @@ We have been notified about it. We will be adding new resources shortly}
|
|
291
279
|
If a file name is given, run contents of that file."
|
292
280
|
}
|
293
281
|
def execute(file_name_or_code)
|
294
|
-
|
295
|
-
multiple_clouds(cloud, "execute")
|
282
|
+
app = multiple_clouds(options[:cloud], "execute #{file_name_or_code}")
|
296
283
|
|
297
|
-
result =
|
284
|
+
result = app.run(file_name_or_code)
|
298
285
|
say result
|
299
286
|
|
300
287
|
rescue Client::APIException => e
|
301
288
|
if e[:message] == "App not running"
|
302
|
-
say_error "Cloud #{
|
289
|
+
say_error "Cloud #{app} is not running. Cannot run code."
|
303
290
|
else
|
304
291
|
raise
|
305
292
|
end
|
@@ -309,34 +296,34 @@ We have been notified about it. We will be adding new resources shortly}
|
|
309
296
|
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
310
297
|
def rake(task = nil)
|
311
298
|
task = rake_args.join(" ")
|
312
|
-
multiple_clouds(options[:cloud], "rake #{task}")
|
313
|
-
result =
|
299
|
+
app = multiple_clouds(options[:cloud], "rake #{task}")
|
300
|
+
result = app.rake(task)
|
314
301
|
say result
|
315
302
|
rescue Client::APIException => e
|
316
303
|
raise unless e[:message] == "App not running"
|
317
|
-
say_error "Cloud #{
|
304
|
+
say_error "Cloud #{app} is not running. Cannot run rake task."
|
318
305
|
end
|
319
306
|
|
320
307
|
desc "redeploy", "Redeploy application"
|
321
308
|
method_option :cloud, :type => :string, :aliases => "-c",
|
322
309
|
:desc => "Specify which cloud to redeploy application for"
|
323
310
|
def redeploy
|
324
|
-
multiple_clouds(options[:cloud], "redeploy")
|
325
|
-
|
326
|
-
say "Redeploying your application for cloud '#{
|
311
|
+
app = multiple_clouds(options[:cloud], "redeploy")
|
312
|
+
app.redeploy
|
313
|
+
say "Redeploying your application for cloud '#{app}'", :green
|
327
314
|
rescue Client::ConflictException => e
|
328
315
|
case e[:state]
|
329
316
|
when "deploying", "configuring"
|
330
317
|
say_error "Your application is being redeployed at the moment"
|
331
318
|
when "no_code", "no_billing", "turned_off"
|
332
|
-
say_error "Cloud #{
|
333
|
-
say "Start your cloud with `shelly start --cloud #{
|
319
|
+
say_error "Cloud #{app} is not running", :with_exit => false
|
320
|
+
say "Start your cloud with `shelly start --cloud #{app}`"
|
334
321
|
exit 1
|
335
322
|
else raise
|
336
323
|
end
|
337
324
|
rescue Client::NotFoundException => e
|
338
325
|
raise unless e.resource == :cloud
|
339
|
-
say_error "You have no access to '#{
|
326
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
340
327
|
end
|
341
328
|
|
342
329
|
# FIXME: move to helpers
|