rake_docker 2.18.0.pre.3 → 2.18.0.pre.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +31 -4
- data/Rakefile +67 -45
- data/bin/console +4 -3
- data/lib/rake_docker/authentication/ecr.rb +43 -18
- data/lib/rake_docker/authentication.rb +3 -1
- data/lib/rake_docker/container.rb +79 -56
- data/lib/rake_docker/exceptions.rb +3 -1
- data/lib/rake_docker/kernel_extensions.rb +2 -0
- data/lib/rake_docker/output.rb +82 -25
- data/lib/rake_docker/task_sets/container.rb +3 -1
- data/lib/rake_docker/task_sets/image.rb +2 -0
- data/lib/rake_docker/task_sets.rb +2 -0
- data/lib/rake_docker/tasks/build.rb +23 -16
- data/lib/rake_docker/tasks/clean.rb +6 -4
- data/lib/rake_docker/tasks/destroy.rb +9 -6
- data/lib/rake_docker/tasks/prepare.rb +22 -10
- data/lib/rake_docker/tasks/provision.rb +14 -11
- data/lib/rake_docker/tasks/publish.rb +4 -2
- data/lib/rake_docker/tasks/push.rb +8 -6
- data/lib/rake_docker/tasks/tag.rb +11 -9
- data/lib/rake_docker/tasks.rb +2 -0
- data/lib/rake_docker/version.rb +3 -1
- data/lib/rake_docker.rb +2 -0
- data/rake_docker.gemspec +61 -0
- metadata +65 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a932921ad25b056f1a6511de649ac1d33001808f709a04f12e4b489da651f9c
|
4
|
+
data.tar.gz: d651071a7bf66207d7fd3f4746f845e6834d768e8710b78e2b0433bc92e0240e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6aa7afc73ba5467db5ef310f504a2700ac780db71c163fa472258acdaf161703cbb722ce2a40ed06d3749dc4eac7f0eba8c7506cdcfccb7116551d967850cd40
|
7
|
+
data.tar.gz: 5649029539578dceb8ffd07dc7e4f73bafd683477c0d4afdbaa3418b52bdb5bbedd3ccf20a44015b0faae584f1c667b57f4fd8fbd8fba9d0d3e26d14162a9978
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rake_docker (2.18.0.pre.
|
4
|
+
rake_docker (2.18.0.pre.4)
|
5
5
|
aws-sdk-ecr (~> 1.2)
|
6
6
|
colored2 (~> 3.1)
|
7
7
|
docker-api (>= 1.34, < 3.0)
|
@@ -17,14 +17,15 @@ GEM
|
|
17
17
|
tzinfo (~> 2.0)
|
18
18
|
addressable (2.8.0)
|
19
19
|
public_suffix (>= 2.0.2, < 5.0)
|
20
|
+
ast (2.4.2)
|
20
21
|
aws-eventstream (1.2.0)
|
21
|
-
aws-partitions (1.
|
22
|
+
aws-partitions (1.568.0)
|
22
23
|
aws-sdk-core (3.130.0)
|
23
24
|
aws-eventstream (~> 1, >= 1.0.2)
|
24
25
|
aws-partitions (~> 1, >= 1.525.0)
|
25
26
|
aws-sigv4 (~> 1.1)
|
26
27
|
jmespath (~> 1.0)
|
27
|
-
aws-sdk-ecr (1.
|
28
|
+
aws-sdk-ecr (1.56.0)
|
28
29
|
aws-sdk-core (~> 3, >= 3.127.0)
|
29
30
|
aws-sigv4 (~> 1.1)
|
30
31
|
aws-sigv4 (1.4.0)
|
@@ -77,7 +78,11 @@ GEM
|
|
77
78
|
faraday (>= 0.9)
|
78
79
|
sawyer (~> 0.8.0, >= 0.5.3)
|
79
80
|
open4 (1.3.4)
|
81
|
+
parallel (1.22.1)
|
82
|
+
parser (3.1.1.0)
|
83
|
+
ast (~> 2.4.1)
|
80
84
|
public_suffix (4.0.6)
|
85
|
+
rainbow (3.1.1)
|
81
86
|
rake (13.0.6)
|
82
87
|
rake_circle_ci (0.9.0)
|
83
88
|
colored2 (~> 3.1)
|
@@ -99,6 +104,8 @@ GEM
|
|
99
104
|
colored2 (~> 3.1)
|
100
105
|
rake_factory (~> 0.23)
|
101
106
|
sshkey (~> 2.0)
|
107
|
+
regexp_parser (2.2.1)
|
108
|
+
rexml (3.2.5)
|
102
109
|
rspec (3.11.0)
|
103
110
|
rspec-core (~> 3.11.0)
|
104
111
|
rspec-expectations (~> 3.11.0)
|
@@ -112,6 +119,22 @@ GEM
|
|
112
119
|
diff-lcs (>= 1.2.0, < 2.0)
|
113
120
|
rspec-support (~> 3.11.0)
|
114
121
|
rspec-support (3.11.0)
|
122
|
+
rubocop (1.26.1)
|
123
|
+
parallel (~> 1.10)
|
124
|
+
parser (>= 3.1.0.0)
|
125
|
+
rainbow (>= 2.2.2, < 4.0)
|
126
|
+
regexp_parser (>= 1.8, < 3.0)
|
127
|
+
rexml
|
128
|
+
rubocop-ast (>= 1.16.0, < 2.0)
|
129
|
+
ruby-progressbar (~> 1.7)
|
130
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
131
|
+
rubocop-ast (1.16.0)
|
132
|
+
parser (>= 3.1.1.0)
|
133
|
+
rubocop-rake (0.6.0)
|
134
|
+
rubocop (~> 1.0)
|
135
|
+
rubocop-rspec (2.9.0)
|
136
|
+
rubocop (~> 1.19)
|
137
|
+
ruby-progressbar (1.11.0)
|
115
138
|
ruby2_keywords (0.0.5)
|
116
139
|
ruby_gpg2 (0.8.0)
|
117
140
|
lino (>= 1.5)
|
@@ -127,6 +150,7 @@ GEM
|
|
127
150
|
sshkey (2.0.0)
|
128
151
|
tzinfo (2.0.4)
|
129
152
|
concurrent-ruby (~> 1.0)
|
153
|
+
unicode-display_width (2.1.0)
|
130
154
|
|
131
155
|
PLATFORMS
|
132
156
|
ruby
|
@@ -143,7 +167,10 @@ DEPENDENCIES
|
|
143
167
|
rake_gpg
|
144
168
|
rake_ssh
|
145
169
|
rspec
|
170
|
+
rubocop
|
171
|
+
rubocop-rake
|
172
|
+
rubocop-rspec
|
146
173
|
simplecov
|
147
174
|
|
148
175
|
BUNDLED WITH
|
149
|
-
2.3.
|
176
|
+
2.3.10
|
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'yaml'
|
2
4
|
require 'rake_circle_ci'
|
3
5
|
require 'rake_github'
|
@@ -5,17 +7,20 @@ require 'rake_ssh'
|
|
5
7
|
require 'rake_gpg'
|
6
8
|
require 'securerandom'
|
7
9
|
require 'rspec/core/rake_task'
|
10
|
+
require 'rubocop/rake_task'
|
8
11
|
|
9
|
-
task :
|
10
|
-
|
11
|
-
|
12
|
+
task default: %i[
|
13
|
+
library:fix
|
14
|
+
test:unit
|
15
|
+
]
|
12
16
|
|
13
17
|
namespace :encryption do
|
14
18
|
namespace :passphrase do
|
19
|
+
desc 'Generate encryption passphrase for CI GPG key'
|
15
20
|
task :generate do
|
16
|
-
|
17
|
-
|
18
|
-
|
21
|
+
FileUtils.mkdir_p('config/secrets/ci/')
|
22
|
+
File.write('config/secrets/ci/encryption.passphrase',
|
23
|
+
SecureRandom.base64(36))
|
19
24
|
end
|
20
25
|
end
|
21
26
|
end
|
@@ -23,85 +28,102 @@ end
|
|
23
28
|
namespace :keys do
|
24
29
|
namespace :deploy do
|
25
30
|
RakeSSH.define_key_tasks(
|
26
|
-
|
27
|
-
|
31
|
+
path: 'config/secrets/ci/',
|
32
|
+
comment: 'maintainers@infrablocks.io'
|
33
|
+
)
|
28
34
|
end
|
29
35
|
|
30
36
|
namespace :gpg do
|
31
37
|
RakeGPG.define_generate_key_task(
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
38
|
+
output_directory: 'config/secrets/ci',
|
39
|
+
name_prefix: 'gpg',
|
40
|
+
owner_name: 'InfraBlocks Maintainers',
|
41
|
+
owner_email: 'maintainers@infrablocks.io',
|
42
|
+
owner_comment: 'rake_docker CI Key'
|
43
|
+
)
|
37
44
|
end
|
38
45
|
end
|
39
46
|
|
47
|
+
RuboCop::RakeTask.new
|
48
|
+
|
49
|
+
namespace :library do
|
50
|
+
desc 'Run all checks of the library'
|
51
|
+
task check: [:rubocop]
|
52
|
+
|
53
|
+
desc 'Attempt to automatically fix issues with the library'
|
54
|
+
task fix: [:'rubocop:auto_correct']
|
55
|
+
end
|
56
|
+
|
57
|
+
namespace :test do
|
58
|
+
RSpec::Core::RakeTask.new(:unit)
|
59
|
+
end
|
60
|
+
|
40
61
|
RakeCircleCI.define_project_tasks(
|
41
|
-
|
42
|
-
|
62
|
+
namespace: :circle_ci,
|
63
|
+
project_slug: 'github/infrablocks/rake_docker'
|
43
64
|
) do |t|
|
44
65
|
circle_ci_config =
|
45
|
-
|
66
|
+
YAML.load_file('config/secrets/circle_ci/config.yaml')
|
46
67
|
|
47
|
-
t.api_token = circle_ci_config[
|
68
|
+
t.api_token = circle_ci_config['circle_ci_api_token']
|
48
69
|
t.environment_variables = {
|
49
|
-
|
50
|
-
|
51
|
-
|
70
|
+
ENCRYPTION_PASSPHRASE:
|
71
|
+
File.read('config/secrets/ci/encryption.passphrase')
|
72
|
+
.chomp
|
52
73
|
}
|
53
74
|
t.checkout_keys = []
|
54
75
|
t.ssh_keys = [
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
76
|
+
{
|
77
|
+
hostname: 'github.com',
|
78
|
+
private_key: File.read('config/secrets/ci/ssh.private')
|
79
|
+
}
|
59
80
|
]
|
60
81
|
end
|
61
82
|
|
62
83
|
RakeGithub.define_repository_tasks(
|
63
|
-
|
64
|
-
|
84
|
+
namespace: :github,
|
85
|
+
repository: 'infrablocks/rake_docker'
|
65
86
|
) do |t, args|
|
66
87
|
github_config =
|
67
|
-
|
88
|
+
YAML.load_file('config/secrets/github/config.yaml')
|
68
89
|
|
69
|
-
t.access_token = github_config[
|
90
|
+
t.access_token = github_config['github_personal_access_token']
|
70
91
|
t.deploy_keys = [
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
92
|
+
{
|
93
|
+
title: 'CircleCI',
|
94
|
+
public_key: File.read('config/secrets/ci/ssh.public')
|
95
|
+
}
|
75
96
|
]
|
76
97
|
t.branch_name = args.branch_name
|
77
98
|
t.commit_message = args.commit_message
|
78
99
|
end
|
79
100
|
|
80
101
|
namespace :pipeline do
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
102
|
+
desc 'Prepare CircleCI Pipeline'
|
103
|
+
task prepare: %i[
|
104
|
+
circle_ci:project:follow
|
105
|
+
circle_ci:env_vars:ensure
|
106
|
+
circle_ci:checkout_keys:ensure
|
107
|
+
circle_ci:ssh_keys:ensure
|
108
|
+
github:deploy_keys:ensure
|
87
109
|
]
|
88
110
|
end
|
89
111
|
|
90
112
|
namespace :version do
|
91
|
-
desc
|
113
|
+
desc 'Bump version for specified type (pre, major, minor, patch)'
|
92
114
|
task :bump, [:type] do |_, args|
|
93
115
|
bump_version_for(args.type)
|
94
116
|
end
|
95
117
|
end
|
96
118
|
|
97
|
-
desc
|
119
|
+
desc 'Release gem'
|
98
120
|
task :release do
|
99
|
-
sh
|
121
|
+
sh 'gem release --tag --push'
|
100
122
|
end
|
101
123
|
|
102
124
|
def bump_version_for(version_type)
|
103
|
-
sh "gem bump --version #{version_type} "
|
104
|
-
|
105
|
-
|
106
|
-
|
125
|
+
sh "gem bump --version #{version_type} " \
|
126
|
+
'&& bundle install ' \
|
127
|
+
'&& export LAST_MESSAGE="$(git log -1 --pretty=%B)" ' \
|
128
|
+
'&& git commit -a --amend -m "${LAST_MESSAGE} [ci skip]"'
|
107
129
|
end
|
data/bin/console
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
require
|
4
|
-
require
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'rake_docker'
|
5
6
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +11,5 @@ require "rake_docker"
|
|
10
11
|
# require "pry"
|
11
12
|
# Pry.start
|
12
13
|
|
13
|
-
require
|
14
|
+
require 'irb'
|
14
15
|
IRB.start(__FILE__)
|
@@ -1,13 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'aws-sdk-ecr'
|
2
|
-
require 'ostruct'
|
3
4
|
|
4
5
|
module RakeDocker
|
5
6
|
module Authentication
|
6
7
|
class ECR
|
7
|
-
def initialize
|
8
|
-
@config =
|
9
|
-
|
10
|
-
|
8
|
+
def initialize(&block)
|
9
|
+
@config =
|
10
|
+
Struct.new(:region, :registry_id)
|
11
|
+
.new(nil, nil)
|
11
12
|
block.call(@config)
|
12
13
|
|
13
14
|
@ecr_client = Aws::ECR::Client.new(region: @config.region)
|
@@ -18,23 +19,47 @@ module RakeDocker
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def call
|
21
|
-
registry_id = @config.registry_id.respond_to?(:call) ?
|
22
|
-
@config.registry_id.call :
|
23
|
-
@config.registry_id
|
24
|
-
|
25
|
-
token_response = @ecr_client.get_authorization_token(
|
26
|
-
registry_ids: [registry_id])
|
27
|
-
token_data = token_response.authorization_data[0]
|
28
|
-
proxy_endpoint = token_data.proxy_endpoint
|
29
22
|
email = 'none'
|
30
|
-
|
31
|
-
|
23
|
+
registry_id = resolve_registry_id
|
24
|
+
token = get_authorization_token(registry_id)
|
25
|
+
proxy_endpoint = extract_proxy_endpoint(token)
|
26
|
+
username, password = extract_credentials(token)
|
27
|
+
|
28
|
+
make_credentials_hash(email, password, username, proxy_endpoint)
|
29
|
+
end
|
32
30
|
|
31
|
+
private
|
32
|
+
|
33
|
+
def make_credentials_hash(email, password, username, proxy_endpoint)
|
33
34
|
{
|
34
|
-
|
35
|
-
|
35
|
+
username: username,
|
36
|
+
password: password,
|
37
|
+
email: email,
|
38
|
+
serveraddress: proxy_endpoint
|
36
39
|
}
|
37
40
|
end
|
41
|
+
|
42
|
+
def resolve_registry_id
|
43
|
+
if @config.registry_id.respond_to?(:call)
|
44
|
+
@config.registry_id.call
|
45
|
+
else
|
46
|
+
@config.registry_id
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_authorization_token(registry_id)
|
51
|
+
@ecr_client
|
52
|
+
.get_authorization_token(registry_ids: [registry_id])
|
53
|
+
.authorization_data[0]
|
54
|
+
end
|
55
|
+
|
56
|
+
def extract_proxy_endpoint(token)
|
57
|
+
token.proxy_endpoint
|
58
|
+
end
|
59
|
+
|
60
|
+
def extract_credentials(token)
|
61
|
+
Base64.decode64(token.authorization_token).split(':')
|
62
|
+
end
|
38
63
|
end
|
39
64
|
end
|
40
|
-
end
|
65
|
+
end
|
@@ -1,34 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'docker'
|
2
4
|
|
3
5
|
module RakeDocker
|
4
6
|
module Container
|
5
|
-
REPORTER_MESSAGES = [
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
]
|
7
|
+
REPORTER_MESSAGES = %i[
|
8
|
+
checking_if_container_exists
|
9
|
+
container_exists
|
10
|
+
container_does_not_exist
|
11
|
+
checking_if_image_available
|
12
|
+
image_available
|
13
|
+
image_not_available
|
14
|
+
pulling_image
|
15
|
+
image_pulled
|
16
|
+
creating_container
|
17
|
+
container_created
|
18
|
+
checking_if_container_running
|
19
|
+
container_running
|
20
|
+
container_not_running
|
21
|
+
starting_container
|
22
|
+
container_started
|
23
|
+
waiting_for_container_to_be_ready
|
24
|
+
container_ready
|
25
|
+
stopping_container
|
26
|
+
container_stopped
|
27
|
+
deleting_container
|
28
|
+
container_deleted
|
29
|
+
done
|
30
|
+
].freeze
|
29
31
|
|
30
32
|
class NullReporter
|
31
|
-
REPORTER_MESSAGES.each
|
33
|
+
REPORTER_MESSAGES.each do |message|
|
34
|
+
define_method(message, proc { |*_| })
|
35
|
+
end
|
32
36
|
end
|
33
37
|
|
34
38
|
class PrintingReporter
|
@@ -123,11 +127,9 @@ module RakeDocker
|
|
123
127
|
|
124
128
|
module Utilities
|
125
129
|
def find_container(name)
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
nil
|
130
|
-
end
|
130
|
+
enhance_with_name(Docker::Container.get(name), name)
|
131
|
+
rescue Docker::Error::NotFoundError
|
132
|
+
nil
|
131
133
|
end
|
132
134
|
|
133
135
|
def enhance_with_name(container, name)
|
@@ -138,6 +140,7 @@ module RakeDocker
|
|
138
140
|
end
|
139
141
|
end
|
140
142
|
|
143
|
+
# rubocop:disable Metrics/ClassLength
|
141
144
|
class Provisioner
|
142
145
|
include Utilities
|
143
146
|
|
@@ -152,6 +155,7 @@ module RakeDocker
|
|
152
155
|
@reporter = opts[:reporter] || NullReporter.new
|
153
156
|
end
|
154
157
|
|
158
|
+
# rubocop:disable Metrics/AbcSize
|
155
159
|
def execute
|
156
160
|
reporter.checking_if_container_exists(name)
|
157
161
|
container = find_container(name)
|
@@ -160,14 +164,19 @@ module RakeDocker
|
|
160
164
|
ensure_container_running(container)
|
161
165
|
else
|
162
166
|
reporter.container_does_not_exist(name)
|
163
|
-
|
164
|
-
create_and_start_container(name, image, ports, environment)
|
167
|
+
start_new_container(name, image, ports, environment)
|
165
168
|
end
|
166
169
|
reporter.done
|
167
170
|
end
|
171
|
+
# rubocop:enable Metrics/AbcSize
|
168
172
|
|
169
173
|
private
|
170
174
|
|
175
|
+
def start_new_container(name, image, ports, environment)
|
176
|
+
ensure_image_available(image)
|
177
|
+
create_and_start_container(name, image, ports, environment)
|
178
|
+
end
|
179
|
+
|
171
180
|
def ensure_image_available(image)
|
172
181
|
reporter.checking_if_image_available(image)
|
173
182
|
matching_images = Docker::Image.all(filter: image)
|
@@ -188,11 +197,11 @@ module RakeDocker
|
|
188
197
|
def ensure_container_running(container)
|
189
198
|
reporter.checking_if_container_running(container)
|
190
199
|
container = find_container(name)
|
191
|
-
if
|
200
|
+
if container_running?(container)
|
201
|
+
reporter.container_running(container)
|
202
|
+
else
|
192
203
|
reporter.container_not_running(container)
|
193
204
|
start_container(container)
|
194
|
-
else
|
195
|
-
reporter.container_running(container)
|
196
205
|
end
|
197
206
|
end
|
198
207
|
|
@@ -204,23 +213,32 @@ module RakeDocker
|
|
204
213
|
exposed_ports, port_bindings = process_ports(ports)
|
205
214
|
reporter.creating_container(name, image)
|
206
215
|
container = Docker::Container.create(
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
PortBindings: port_bindings
|
212
|
-
},
|
213
|
-
Env: environment)
|
216
|
+
make_container_options(
|
217
|
+
name, image, exposed_ports, port_bindings, environment
|
218
|
+
)
|
219
|
+
)
|
214
220
|
container = enhance_with_name(container, name)
|
215
221
|
reporter.container_created(container)
|
216
222
|
container
|
217
223
|
end
|
218
224
|
|
225
|
+
def make_container_options(
|
226
|
+
name, image, exposed_ports, port_bindings, environment
|
227
|
+
)
|
228
|
+
{
|
229
|
+
name: name,
|
230
|
+
Image: image,
|
231
|
+
ExposedPorts: exposed_ports,
|
232
|
+
HostConfig: { PortBindings: port_bindings },
|
233
|
+
Env: environment
|
234
|
+
}
|
235
|
+
end
|
236
|
+
|
219
237
|
def start_container(container)
|
220
238
|
reporter.starting_container(container)
|
221
239
|
container.start
|
222
240
|
reporter.container_started(container)
|
223
|
-
if ready
|
241
|
+
if ready.respond_to?(:call)
|
224
242
|
reporter.waiting_for_container_to_be_ready(container)
|
225
243
|
ready.call(container)
|
226
244
|
reporter.container_ready(container)
|
@@ -237,19 +255,18 @@ module RakeDocker
|
|
237
255
|
end
|
238
256
|
|
239
257
|
def process_ports(ports)
|
240
|
-
port_config = ports.
|
241
|
-
|
242
|
-
|
243
|
-
}) do |accumulator, port|
|
258
|
+
port_config = ports.each_with_object(
|
259
|
+
{ exposed_ports: {}, port_bindings: {} }
|
260
|
+
) do |port, accumulator|
|
244
261
|
host_port, container_port = port.split(':')
|
245
262
|
accumulator[:exposed_ports]["#{container_port}/tcp"] = {}
|
246
263
|
accumulator[:port_bindings]["#{container_port}/tcp"] =
|
247
|
-
|
248
|
-
accumulator
|
264
|
+
[{ HostPort: host_port }]
|
249
265
|
end
|
250
266
|
[port_config[:exposed_ports], port_config[:port_bindings]]
|
251
267
|
end
|
252
268
|
end
|
269
|
+
# rubocop:enable Metrics/ClassLength
|
253
270
|
|
254
271
|
class Destroyer
|
255
272
|
include Utilities
|
@@ -266,18 +283,24 @@ module RakeDocker
|
|
266
283
|
container = find_container(name)
|
267
284
|
if container
|
268
285
|
reporter.container_exists(container)
|
269
|
-
|
270
|
-
container.stop
|
271
|
-
container.wait
|
272
|
-
reporter.container_stopped(container)
|
273
|
-
reporter.deleting_container(container)
|
274
|
-
container.delete
|
275
|
-
reporter.container_deleted(container)
|
286
|
+
destroy_container(container)
|
276
287
|
else
|
277
288
|
reporter.container_does_not_exist(name)
|
278
289
|
end
|
279
290
|
reporter.done
|
280
291
|
end
|
292
|
+
|
293
|
+
private
|
294
|
+
|
295
|
+
def destroy_container(container)
|
296
|
+
reporter.stopping_container(container)
|
297
|
+
container.stop
|
298
|
+
container.wait
|
299
|
+
reporter.container_stopped(container)
|
300
|
+
reporter.deleting_container(container)
|
301
|
+
container.delete
|
302
|
+
reporter.container_deleted(container)
|
303
|
+
end
|
281
304
|
end
|
282
305
|
end
|
283
306
|
end
|