gaptool-server 0.7.4 → 0.8.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.
data/lib/routes.rb CHANGED
@@ -3,236 +3,245 @@ require 'securerandom'
3
3
  require 'set'
4
4
  require_relative 'exceptions'
5
5
 
6
- class GaptoolServer < Sinatra::Application
7
-
8
- def require_parameters(required_keys, data)
9
- data = data.delete_if { |k,v| v.nil? }
10
- required_keys = [*required_keys].to_set unless required_keys.is_a? Set
11
- keys = data.keys.to_set
12
- unless keys >= required_keys
13
- raise BadRequest, "Missing required_parameters: #{(required_keys - keys).to_a.join(" ")}"
6
+ module Gaptool
7
+ class Server < Sinatra::Application
8
+ def require_parameters(required_keys, data)
9
+ data = data.delete_if { |_, v| v.nil? }
10
+ required_keys = [*required_keys].to_set unless required_keys.is_a? Set
11
+ keys = data.keys.to_set
12
+ fail(BadRequest, "Missing required_parameters: #{(required_keys - keys).to_a.join(' ')}") \
13
+ unless keys >= required_keys
14
+ data
14
15
  end
15
- data
16
- end
17
16
 
18
- get '/' do
19
- "You must be lost. Read the instructions."
20
- end
17
+ get '/' do
18
+ 'You must be lost. Read the instructions.'
19
+ end
21
20
 
22
- get '/ping' do
23
- "PONG"
24
- end
21
+ get '/ping' do
22
+ 'PONG'
23
+ end
25
24
 
26
- post '/init' do
27
- data = require_parameters(%w(role environment zone itype),
28
- JSON.parse(request.body.read))
29
-
30
- secret = SecureRandom.hex(12)
31
- data['security_group'] = data['security_group'] || Gaptool::Data::get_sg_for_role(data['role'], data['environment'])
32
- sgid = Gaptool::EC2::get_or_create_securitygroup(data['role'], data['environment'], data['zone'], data['security_group'])
33
- image_id = data['ami'] || Gaptool::Data::get_ami_for_role(data['role'], data['zone'].chop)
34
- data['terminable'] = data['terminable'].nil? ? true : !!data['terminable']
35
- data['secret'] = secret
36
-
37
- instance = Gaptool::EC2::create_ec2_instance(
38
- {
39
- :image_id => image_id,
40
- :availability_zone => data['zone'],
41
- :instance_type => data['itype'],
42
- :key_name => "gaptool",
43
- :security_group_ids => sgid,
44
- :user_data => "#!/bin/bash\ncurl --silent -H 'X-GAPTOOL-USER: #{env['HTTP_X_GAPTOOL_USER']}' -H 'X-GAPTOOL-KEY: #{env['HTTP_X_GAPTOOL_KEY']}' #{Gaptool::Data.get_config('url')}/register -X PUT --data '#{data.to_json}' | bash"
45
- }, {
46
- role: data['role'],
47
- env: data['environment'],
48
- zone: data['zone']
49
- }
50
- )
51
-
52
- # Tag instance
53
- role = data['role']
54
- env = data['environment']
55
- name = "#{role}-#{env}-#{instance[:id]}"
56
- {'Name' => name, 'gaptool' => 'yes', 'role' => role, 'environment' => env}.each do |tag, value|
57
- begin
58
- Gaptool::EC2::tag_ec2_instance(instance[:instance], tag, value)
59
- rescue => e
60
- logger.error("Error while tagging: #{e}. Skipping tag")
61
- Airbrake.notify_or_ignore(
62
- e,
63
- error_class: "EC2 Tag failed",
64
- parameters: {instance: instance[:id], name: name, role: role, environment: env}
65
- )
25
+ post '/init' do
26
+ data = require_parameters(%w(role environment zone itype),
27
+ JSON.parse(request.body.read))
28
+
29
+ secret = SecureRandom.hex(12)
30
+ data['security_group'] = data['security_group'] || Gaptool::Data.get_sg_for_role(data['role'], data['environment'])
31
+ sgid = Gaptool::EC2.get_or_create_securitygroup(data['role'], data['environment'], data['zone'], data['security_group'])
32
+ image_id = data['ami'] || Gaptool::Data.get_ami_for_role(data['role'], data['zone'].chop)
33
+ data['terminable'] = data['terminable'].nil? ? true : !!data['terminable']
34
+ data['secret'] = secret
35
+
36
+ instance = Gaptool::EC2.create_ec2_instance(
37
+ {
38
+ image_id: image_id,
39
+ availability_zone: data['zone'],
40
+ instance_type: data['itype'],
41
+ key_name: 'gaptool',
42
+ security_group_ids: sgid,
43
+ user_data: "#!/bin/bash\ncurl --silent -H 'X-GAPTOOL-USER: #{env['HTTP_X_GAPTOOL_USER']}' -H 'X-GAPTOOL-KEY: #{env['HTTP_X_GAPTOOL_KEY']}' #{Gaptool::Data.get_config('url')}/register -X PUT --data '#{data.to_json}' | bash"
44
+ },
45
+ role: data['role'],
46
+ env: data['environment'],
47
+ zone: data['zone']
48
+ )
49
+
50
+ # Tag instance
51
+ role = data['role']
52
+ env = data['environment']
53
+ name = "#{role}-#{env}-#{instance[:id]}"
54
+ { 'Name' => name, 'gaptool' => 'yes', 'role' => role, 'environment' => env }.each do |tag, value|
55
+ begin
56
+ Gaptool::EC2.tag_ec2_instance(instance[:instance], tag, value)
57
+ rescue => e
58
+ logger.error("Error while tagging: #{e}. Skipping tag")
59
+ Airbrake.notify_or_ignore(
60
+ e,
61
+ error_class: 'EC2 Tag failed',
62
+ parameters: { instance: instance[:id], name: name, role: role, environment: env }
63
+ )
64
+ end
66
65
  end
66
+
67
+ # Add host tag
68
+ data.merge!(Hash[instance.reject { |k, _| [:id, :instance].include?(k) }.map { |k, v| [k.to_s, v] }])
69
+ Gaptool::Data.addserver(instance[:id], data, secret)
70
+ json(
71
+ instance: instance[:id],
72
+ ami: image_id,
73
+ role: data['role'],
74
+ hostname: instance[:hostname],
75
+ launch_time: instance[:launch_time],
76
+ environment: data['environment'],
77
+ secret: secret,
78
+ terminable: data['terminable'],
79
+ security_group: sgid
80
+ )
67
81
  end
68
82
 
69
- # Add host tag
70
- data.merge!(Hash[instance.reject { |k, v| [:id, :instance].include?(k) }.map {|k, v| [k.to_s, v]}])
71
- Gaptool::Data::addserver(instance[:id], data, secret)
72
- json({instance: instance[:id],
73
- ami: image_id,
74
- role: data['role'],
75
- hostname: instance[:hostname],
76
- launch_time: instance[:launch_time],
77
- environment: data['environment'],
78
- secret: secret,
79
- terminable: data['terminable'],
80
- security_group: sgid})
81
- end
83
+ post '/terminate' do
84
+ data = require_parameters('id',
85
+ JSON.parse(request.body.read))
86
+ host_data = Gaptool::Data.get_server_data data['id']
87
+ fail NotFound, "No such instance: #{data['id']}" if host_data.nil?
88
+ fail Conflict, "Instance #{data['id']} cannot be terminated" if host_data['terminable'] == false
82
89
 
83
- post '/terminate' do
84
- data = require_parameters("id",
85
- JSON.parse(request.body.read))
86
- host_data = Gaptool::Data::get_server_data data['id']
87
- raise NotFound, "No such instance: #{data['id']}" if host_data.nil?
88
- raise Conflict, "Instance #{data['id']} cannot be terminated" if host_data['terminable'] == false
90
+ Gaptool::EC2.terminate_ec2_instance(data['zone'], data['id'])
91
+ Gaptool::Data.rmserver(data['id'])
92
+ json data['id'] => { 'status' => 'terminated' }
93
+ end
89
94
 
90
- Gaptool::EC2::terminate_ec2_instance(data['zone'], data['id'])
91
- Gaptool::Data::rmserver(data['id'])
92
- json data['id'] => {'status' => 'terminated'}
93
- end
95
+ put '/register' do
96
+ data = JSON.parse request.body.read
97
+ data = require_parameters(%w(role zone environment secret), data)
98
+ instance_id = Gaptool::Data.register_server data['role'], data['environment'], data['secret']
99
+
100
+ fail Forbidden, "Can't register instance: wrong secret or missing role/environment" unless instance_id
101
+
102
+ hostname = Gaptool::EC2.get_ec2_instance_data(data['zone'].chop, instance_id)[:hostname]
103
+ Gaptool::Data.set_server_data_attr(instance_id, 'hostname', hostname)
104
+ initkey = Gaptool::Data.get_config('initkey')
105
+ jdata = Gaptool::Data.server_chef_json(instance_id, env,
106
+ 'identity': initkey)
107
+
108
+ erb :init, locals: {
109
+ initkey: initkey,
110
+ chef_branch: jdata['chefbranch'],
111
+ chef_repo: jdata['chefrepo'],
112
+ chef_environment: jdata['environment'],
113
+ chef_version: Gaptool::Data.ensure_config('chef_version', '11.16.4'),
114
+ json: jdata.to_json
115
+ }
116
+ end
94
117
 
95
- put '/register' do
96
- data = JSON.parse request.body.read
97
- data = require_parameters(%w(role zone environment secret), data)
98
- instance_id = Gaptool::Data::register_server data['role'], data['environment'], data['secret']
99
-
100
- raise Forbidden, "Can't register instance: wrong secret or missing role/environment" unless instance_id
101
-
102
- hostname = Gaptool::EC2::get_ec2_instance_data(data['zone'].chop, instance_id)[:hostname]
103
- Gaptool::Data.set_server_data_attr(instance_id, "hostname", hostname)
104
- host_data = Gaptool::Data::get_server_data instance_id, initkey: true, force_runlist: true
105
-
106
- chef_repo = host_data['chef_repo']
107
- chef_branch = host_data['chef_branch']
108
- chef_environment = host_data['environment']
109
- # FIXME: remove init key from redis
110
- initkey = Gaptool::Data::get_config("initkey")
111
- run_list = host_data['chef_runlist']
112
-
113
- jdata = {
114
- 'hostname' => hostname,
115
- 'recipe' => 'init',
116
- 'number' => instance_id,
117
- 'instance' => instance_id,
118
- 'run_list' => run_list,
119
- 'role' => data['role'],
120
- 'environment' => data['environment'],
121
- 'chefrepo' => chef_repo,
122
- 'chefbranch' => chef_branch,
123
- 'identity' => initkey,
124
- 'appuser' => Gaptool::Data::get_config('appuser'),
125
- 'apps' => host_data['apps']
126
- }.to_json
127
-
128
- erb :init, locals: {
129
- initkey: initkey,
130
- chef_branch: chef_branch,
131
- chef_repo: chef_repo,
132
- chef_environment: chef_environment,
133
- chef_version: Gaptool::Data::ensure_config("chef_version", "11.16.4"),
134
- json: jdata
135
- }
136
- end
118
+ get '/hosts' do
119
+ filter = if params['hidden']
120
+ proc { |s| !s['registered'] }
121
+ else
122
+ proc { |s| !s['registered'] && !s['hidden'] == true }
123
+ end
124
+ json(Gaptool::Data.servers.map do |inst|
125
+ Gaptool::Data.get_server_data inst
126
+ end.select(&filter))
127
+ end
137
128
 
138
- get '/hosts' do
139
- filter = !!params['hidden'] ? Proc.new {|s| !s['registered']} : Proc.new { |s| !s['registered'] && !s['hidden'] == true}
140
- json(Gaptool::Data::servers.map do |inst|
141
- Gaptool::Data::get_server_data inst
142
- end.select(&filter))
143
- end
129
+ get '/apps' do
130
+ json(Hash[Gaptool::Data.apps.map { |a| ["app:#{a}", Gaptool::Data.get_app_data(a)] }])
131
+ end
144
132
 
145
- get '/apps' do
146
- json(Hash[Gaptool::Data.apps.map {|a| ["app:#{a}", Gaptool::Data::get_app_data(a)]}])
147
- end
133
+ get '/app/:app/:environment/hosts' do
134
+ app_data = Gaptool::Data.get_app_data(params[:app])
135
+ unless app_data
136
+ status 404
137
+ error_response "app '#{params[:apps]}' not found"
138
+ end
148
139
 
149
- get '/app/:app/:environment/hosts' do
150
- app_data = Gaptool::Data::get_app_data(params[:app])
151
- unless app_data
152
- status 404
153
- error_response "app '#{params[:apps]}' not found"
140
+ role = app_data[params[:environment]]
141
+ list = Gaptool::Data.servers_in_role_env role, params[:environment]
142
+ filter = if params['hidden']
143
+ proc { |_| false }
144
+ else
145
+ proc { |s| s['hidden'] }
146
+ end
147
+ json(list.map do |inst|
148
+ data = Gaptool::Data.get_server_data(inst)
149
+ Gaptool::Data.stringify_apps(data, client_version)
150
+ end.delete_if(&filter))
154
151
  end
155
152
 
156
- role = app_data[params[:environment]]
157
- list = Gaptool::Data::servers_in_role_env role, params[:environment]
158
- filter = !!params['hidden'] ? Proc.new {|s| false } : Proc.new { |s| s['hidden']}
159
- json(list.map do |inst|
160
- data = Gaptool::Data::get_server_data(inst)
161
- Gaptool::Data::stringify_apps(data)
162
- end.delete_if(&filter))
163
- end
164
-
165
- get '/hosts/:role' do
166
- filter = !!params['hidden'] ? Proc.new {|s| !s['registered']} : Proc.new { |s| !s['registered'] && !s['hidden'] == true}
167
- servers = Gaptool::Data::servers_in_role(params[:role]).map do |inst|
168
- Gaptool::Data::get_server_data(inst)
169
- end.select(&filter)
170
- json servers
171
- end
153
+ get '/hosts/:role' do
154
+ filter = if params['hidden']
155
+ proc { |s| !s['registered'] }
156
+ else
157
+ proc { |s| !s['registered'] && !s['hidden'] == true }
158
+ end
159
+ servers = Gaptool::Data.servers_in_role(params[:role]).map do |inst|
160
+ Gaptool::Data.get_server_data(inst)
161
+ end.select(&filter)
162
+ json servers
163
+ end
172
164
 
173
- get '/instance/:id' do
174
- rs = Gaptool::Data::get_server_data(params[:id])
175
- if rs.nil?
176
- status 404
177
- error_response "instance with id '#{params[:id]}' not found"
178
- else
179
- json Gaptool::Data::stringify_apps(rs)
165
+ get '/instance/:id' do
166
+ rs = Gaptool::Data.get_server_data(params[:id])
167
+ if rs.nil?
168
+ status 404
169
+ error_response "instance with id '#{params[:id]}' not found"
170
+ else
171
+ json Gaptool::Data.stringify_apps(rs, client_version)
172
+ end
180
173
  end
181
- end
182
174
 
183
- patch '/instance/:id' do
184
- rs = Gaptool::Data::get_server_data(params[:id])
185
- if rs.nil?
186
- status 404
187
- error_response "instance with id '#{params[:id]}' not found"
188
- else
189
- data = JSON.parse(request.body.read)
190
- if !data['hidden'].nil?
191
- hidden = !!data['hidden']
192
- rs["hidden"] = hidden if hidden == true
193
- rs.delete("hidden") if hidden == false
175
+ get '/instance/:id/attrs' do
176
+ begin
177
+ data = JSON.parse(request.body.read.to_s)
178
+ rescue
179
+ data = {}
194
180
  end
195
- if !data['terminable'].nil?
196
- rs["terminable"] = !!data['terminable']
181
+ rs = Gaptool::Data.server_chef_json(params[:id], env, data)
182
+ if rs.nil?
183
+ status 404
184
+ error_response "instance with id '#{params[:id]}' not found"
185
+ else
186
+ json rs
197
187
  end
198
- Gaptool::Data::save_server_data params[:id], rs
199
- json Gaptool::Data::stringify_apps(rs)
200
188
  end
201
- end
202
189
 
203
- get '/hosts/:role/:environment' do
204
- if params[:role] == 'ALL'
205
- list = Gaptool::Data::servers_in_env params[:environment]
206
- else
207
- list = Gaptool::Data::servers_in_role_env params[:role], params[:environment]
190
+ patch '/instance/:id' do
191
+ rs = Gaptool::Data.get_server_data(params[:id])
192
+ if rs.nil?
193
+ status 404
194
+ error_response "instance with id '#{params[:id]}' not found"
195
+ else
196
+ data = JSON.parse(request.body.read)
197
+ unless data['hidden'].nil?
198
+ hidden = !!data['hidden']
199
+ rs['hidden'] = hidden if hidden == true
200
+ rs.delete('hidden') if hidden == false
201
+ end
202
+ rs['terminable'] = !!data['terminable'] unless data['terminable'].nil?
203
+ Gaptool::Data.save_server_data params[:id], rs
204
+ json Gaptool::Data.stringify_apps(rs, client_version)
205
+ end
208
206
  end
209
- filter = !!params['hidden'] ? Proc.new {|s| false } : Proc.new { |s| s['hidden']}
210
- servers = list.map do |inst|
211
- data = Gaptool::Data::get_server_data(inst)
212
- Gaptool::Data::stringify_apps(data)
213
- end.delete_if(&filter)
214
207
 
215
- json servers
216
- end
208
+ get '/hosts/:role/:environment' do
209
+ if params[:role] == 'ALL'
210
+ list = Gaptool::Data.servers_in_env params[:environment]
211
+ else
212
+ list = Gaptool::Data.servers_in_role_env params[:role], params[:environment]
213
+ end
214
+ filter = if params['hidden']
215
+ proc { |_| false }
216
+ else
217
+ proc { |s| s['hidden'] }
218
+ end
219
+ servers = list.map do |inst|
220
+ data = Gaptool::Data.get_server_data(inst)
221
+ Gaptool::Data.stringify_apps(data, client_version)
222
+ end.delete_if(&filter)
223
+
224
+ json servers
225
+ end
217
226
 
218
- get '/host/:role/:environment/:instance' do
219
- json Gaptool::Data::stringify_apps(Gaptool::Data::get_server_data(params[:instance]))
220
- end
227
+ get '/host/:role/:environment/:instance' do
228
+ json Gaptool::Data.stringify_apps(Gaptool::Data.get_server_data(params[:instance]), client_version)
229
+ end
221
230
 
222
- get '/ssh/:role/:environment/:instance' do
223
- data = Gaptool::Data::get_server_data params[:instance]
224
- host = data['hostname']
225
- key, pubkey = Gaptool::EC2::putkey(host)
226
- json hostname: host, key: key, pubkey: pubkey
227
- end
231
+ get '/ssh/:role/:environment/:instance' do
232
+ data = Gaptool::Data.get_server_data params[:instance]
233
+ host = data['hostname']
234
+ key, pubkey = Gaptool::EC2.putkey(host)
235
+ json hostname: host, key: key, pubkey: pubkey
236
+ end
228
237
 
229
- get '/version' do
230
- version = settings.version
231
- json server_version: version, api: {v0: "/"}
232
- end
238
+ get '/version' do
239
+ version = settings.version
240
+ json server_version: version, api: { v0: '/' }
241
+ end
233
242
 
234
- post '/rehash' do
235
- json Gaptool::EC2::rehash()
243
+ post '/rehash' do
244
+ json Gaptool::EC2.rehash
245
+ end
236
246
  end
237
-
238
247
  end
data/tasks/app.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  namespace :app do
2
- desc "Add an application"
3
- task :add, [:app, :role, :environment] do |t, args|
2
+ desc 'Add an application'
3
+ task :add, [:app, :role, :environment] do |_t, args|
4
4
  [:app, :role, :environment].each do |arg|
5
5
  abort("Missing parameter #{arg}") if args[arg].nil? || args[arg].empty?
6
6
  end
@@ -17,26 +17,26 @@ namespace :app do
17
17
  puts "Added app #{args[:app]}, role #{args[:role]}, environment: #{args[:environment]}"
18
18
  end
19
19
 
20
- desc "Remove an application"
21
- task :del, [:app] do |t, args|
20
+ desc 'Remove an application'
21
+ task :del, [:app] do |_t, args|
22
22
  unless args[:app].nil? || args[:app].empty?
23
23
  DH.remove_app(args[:app])
24
24
  puts "Removed app #{args[:app]}"
25
25
  end
26
26
  end
27
27
 
28
- desc "Print app info"
29
- task :info, [:app] do |t, args|
28
+ desc 'Print app info'
29
+ task :info, [:app] do |_t, args|
30
30
  info = DH.get_app_data(args[:app])
31
31
  if info.nil? || info.empty?
32
32
  puts "No such app #{args[:app]}"
33
33
  else
34
- puts " * #{app} #{info.map {|k,v| "#{k}: #{v}"}.join(", ")}"
34
+ puts " * #{app} #{info.map { |k, v| "#{k}: #{v}" }.join(', ')}"
35
35
  end
36
36
  end
37
37
 
38
- desc "Copy all apps for a role to a new env"
39
- task :newenv, [:role, :oldenv, :newenv, :newrole] do |t, args|
38
+ desc 'Copy all apps for a role to a new env'
39
+ task :newenv, [:role, :oldenv, :newenv, :newrole] do |_t, args|
40
40
  [:role, :oldenv, :newenv].each do |k|
41
41
  abort "Missing parameter #{k}" if args[k].nil?
42
42
  end
@@ -48,11 +48,11 @@ namespace :app do
48
48
  end
49
49
  end
50
50
 
51
- desc "List apps"
51
+ desc 'List apps'
52
52
  task :app do
53
- puts "Apps:"
53
+ puts 'Apps:'
54
54
  DH.apps.each do |app|
55
55
  info = DH.get_app_data(app)
56
- puts " * #{app} #{info.map {|k,v| "#{k}: #{v}"}.join(", ")}"
56
+ puts " * #{app} #{info.map { |k, v| "#{k}: #{v}" }.join(', ')}"
57
57
  end
58
58
  end
data/tasks/config.rb CHANGED
@@ -1,24 +1,24 @@
1
1
  namespace :config do
2
- desc "Add or update a new config key"
3
- task :set, [:key,:value] do |t, args|
2
+ desc 'Add or update a new config key'
3
+ task :set, [:key, :value] do |_t, args|
4
4
  DH.set_config(args[:key], args[:value])
5
5
  end
6
6
 
7
- desc "Delete a key if set"
8
- task :del, [:key] do |t, args|
7
+ desc 'Delete a key if set'
8
+ task :del, [:key] do |_t, args|
9
9
  DH.del_config(args[:key])
10
10
  end
11
11
 
12
- desc "Get a config"
13
- task :get, [:key] do |t,args|
12
+ desc 'Get a config'
13
+ task :get, [:key] do |_t, args|
14
14
  DH.get_config(args[:key])
15
15
  end
16
16
  end
17
17
 
18
- desc "List config"
18
+ desc 'List config'
19
19
  task :config do
20
20
  puts 'Config:'
21
- DH.get_all_configs().keys.each do |k|
21
+ DH.configs.keys.each do |k|
22
22
  puts " - #{k}"
23
23
  end
24
24
  end
data/tasks/docker.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  def printimages
2
- puts %x[docker images | grep '^gild/gaptool']
2
+ puts `docker images | grep '^gild/gaptool'`
3
3
  end
4
4
 
5
- unless File.exists?('/.dockerenv')
5
+ unless File.exist?('/.dockerenv')
6
6
  namespace :docker do
7
7
  namespace :build do
8
8
  task :image do
@@ -10,53 +10,53 @@ unless File.exists?('/.dockerenv')
10
10
  printimages
11
11
  end
12
12
 
13
- task :all => [:image]
13
+ task all: [:image]
14
14
  end
15
15
 
16
16
  desc 'Build the docker image'
17
- task :build => 'build:image'
17
+ task build: 'build:image'
18
18
 
19
- desc "Push the release image to the Docker Hub"
20
- task :push => 'push:release'
19
+ desc 'Push the release image to the Docker Hub'
20
+ task push: 'push:release'
21
21
 
22
- task :up => [:build, :recreate]
22
+ task up: [:build, :recreate]
23
23
 
24
- desc "Run tests w/ docker"
25
- task :test => :build do
24
+ desc 'Run tests w/ docker'
25
+ task test: :build do
26
26
  sys(%w(docker-compose run --rm gaptool bundle exec rake test))
27
27
  end
28
28
 
29
- desc "Stop docker containers"
29
+ desc 'Stop docker containers'
30
30
  task :stop do
31
31
  sys(%w(docker-compose stop))
32
32
  end
33
33
 
34
- desc "Start docker containers"
34
+ desc 'Start docker containers'
35
35
  task :start do
36
36
  sys(%w(docker-compose start))
37
37
  end
38
38
 
39
- desc "Restart docker containers"
40
- task :restart => [:stop, :start]
39
+ desc 'Restart docker containers'
40
+ task restart: [:stop, :start]
41
41
 
42
42
  desc "Stop and remove docker containers (alias 'rm')"
43
- task :remove => :stop do
43
+ task remove: :stop do
44
44
  sys(%w(docker-compose rm --force))
45
45
  end
46
46
 
47
- task :rm => :remove
47
+ task rm: :remove
48
48
 
49
- desc "Recreate docker containers without building"
49
+ desc 'Recreate docker containers without building'
50
50
  task :recreate do
51
51
  sys(%w(docker-compose up -d))
52
52
  end
53
53
 
54
- desc "Run a command in the docker container"
54
+ desc 'Run a command in the docker container'
55
55
  task :run do
56
56
  exit sys(%W(docker-compose run --rm gaptool #{ARGV[1..-1].shelljoin}))
57
57
  end
58
58
  end
59
59
 
60
- desc "Bring up docker containers"
61
- task :docker => 'docker:up'
60
+ desc 'Bring up docker containers'
61
+ task docker: 'docker:up'
62
62
  end