shelly 0.0.57 → 0.0.58
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.
- 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
|