gaptool-server 0.7.4 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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