takelage 0.13.3 → 0.14.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.
- checksums.yaml +4 -4
- data/lib/takelage.rb +37 -14
- data/lib/takelage/bit/check/cli.rb +1 -1
- data/lib/takelage/bit/check/{module.rb → workspace.rb} +2 -2
- data/lib/takelage/bit/clipboard/cli.rb +9 -3
- data/lib/takelage/bit/clipboard/copy.rb +140 -0
- data/lib/takelage/bit/clipboard/lib.rb +153 -0
- data/lib/takelage/bit/clipboard/paste.rb +58 -0
- data/lib/takelage/bit/clipboard/pull.rb +38 -0
- data/lib/takelage/bit/clipboard/push.rb +37 -0
- data/lib/takelage/bit/scope/add.rb +55 -0
- data/lib/takelage/bit/scope/cli.rb +7 -3
- data/lib/takelage/bit/scope/inbit.rb +13 -0
- data/lib/takelage/bit/scope/list.rb +41 -0
- data/lib/takelage/bit/scope/new.rb +44 -0
- data/lib/takelage/default.yml +4 -3
- data/lib/takelage/docker/check/cli.rb +1 -1
- data/lib/takelage/docker/check/{module.rb → running.rb} +2 -2
- data/lib/takelage/docker/container/check/cli.rb +4 -2
- data/lib/takelage/docker/container/check/existing.rb +31 -0
- data/lib/takelage/docker/container/check/network.rb +31 -0
- data/lib/takelage/docker/container/check/orphaned.rb +31 -0
- data/lib/takelage/docker/container/cli.rb +35 -34
- data/lib/takelage/docker/container/command.rb +33 -0
- data/lib/takelage/docker/container/daemon.rb +13 -0
- data/lib/takelage/docker/container/lib.rb +149 -0
- data/lib/takelage/docker/container/login.rb +46 -0
- data/lib/takelage/docker/container/nuke.rb +39 -0
- data/lib/takelage/docker/container/purge.rb +30 -0
- data/lib/takelage/docker/image/check/cli.rb +4 -4
- data/lib/takelage/docker/image/check/{module.rb → outdated.rb} +4 -5
- data/lib/takelage/docker/image/cli.rb +4 -4
- data/lib/takelage/docker/image/tag/check/cli.rb +4 -3
- data/lib/takelage/docker/image/tag/check/{module.rb → local.rb} +2 -34
- data/lib/takelage/docker/image/tag/check/remote.rb +38 -0
- data/lib/takelage/docker/image/tag/latest/cli.rb +5 -3
- data/lib/takelage/docker/image/tag/latest/local.rb +20 -0
- data/lib/takelage/docker/image/tag/latest/{module.rb → remote.rb} +2 -18
- data/lib/takelage/docker/image/tag/list/cli.rb +3 -2
- data/lib/takelage/docker/image/tag/list/local.rb +19 -0
- data/lib/takelage/docker/image/tag/list/{module.rb → remote.rb} +2 -17
- data/lib/takelage/docker/image/{module.rb → update.rb} +2 -2
- data/lib/takelage/docker/socket/cli.rb +6 -2
- data/lib/takelage/docker/socket/host.rb +25 -0
- data/lib/takelage/docker/socket/lib.rb +88 -0
- data/lib/takelage/docker/socket/scheme.rb +46 -0
- data/lib/takelage/docker/socket/start.rb +34 -0
- data/lib/takelage/docker/socket/stop.rb +55 -0
- data/lib/takelage/git/check/clean.rb +46 -0
- data/lib/takelage/git/check/cli.rb +3 -1
- data/lib/takelage/git/check/master.rb +26 -0
- data/lib/takelage/git/check/workspace.rb +33 -0
- data/lib/takelage/self/cli.rb +1 -1
- data/lib/takelage/self/{module.rb → list.rb} +2 -2
- data/lib/takelage/version +1 -1
- metadata +38 -15
- data/lib/takelage/bit/clipboard/module.rb +0 -401
- data/lib/takelage/bit/scope/module.rb +0 -122
- data/lib/takelage/docker/container/check/module.rb +0 -81
- data/lib/takelage/docker/container/module.rb +0 -295
- data/lib/takelage/docker/socket/module.rb +0 -227
- data/lib/takelage/git/check/module.rb +0 -93
@@ -1,122 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# takelage bit scope module
|
4
|
-
module BitScopeModule
|
5
|
-
# Backend method for bit scope add.
|
6
|
-
def bit_scope_add(scope)
|
7
|
-
log.debug "Adding bit remote scope \"#{scope}\" to local workspace"
|
8
|
-
|
9
|
-
return false unless configured? %w[bit_ssh bit_remote]
|
10
|
-
|
11
|
-
return false unless _bit_scope_add_workspace_ready?
|
12
|
-
|
13
|
-
# check if bit remote scope exists
|
14
|
-
unless bit_scope_list.include? scope
|
15
|
-
log.error "The bit remote bit scope \"#{scope}\" doesn't exist"
|
16
|
-
return false
|
17
|
-
end
|
18
|
-
|
19
|
-
run "bit remote add #{config.active['bit_remote']}/#{scope}"
|
20
|
-
|
21
|
-
log.info "Added bit remote scope \"#{scope}\" to local bit workspace"
|
22
|
-
end
|
23
|
-
|
24
|
-
# Backend method for bit scope inbit.
|
25
|
-
def bit_scope_inbit
|
26
|
-
log.debug 'Logging in to bit remote server'
|
27
|
-
|
28
|
-
return false unless configured? %w[bit_ssh]
|
29
|
-
|
30
|
-
run_and_exit config.active['bit_ssh']
|
31
|
-
end
|
32
|
-
|
33
|
-
# Backend method for bit scope list.
|
34
|
-
# @return [String] list of bit scopes
|
35
|
-
def bit_scope_list
|
36
|
-
log.debug 'Listing bit remote scopes'
|
37
|
-
|
38
|
-
return false unless configured? %w[bit_ssh bit_remote]
|
39
|
-
|
40
|
-
# get ssh command from active config
|
41
|
-
cmd_bit_ssh =
|
42
|
-
config.active['bit_ssh']
|
43
|
-
|
44
|
-
root = config.active['bit_root']
|
45
|
-
|
46
|
-
cmd_bit_scope_list = _bit_scope_list_cmd root
|
47
|
-
|
48
|
-
# run ssh command with scope list command
|
49
|
-
scope_list = run "#{cmd_bit_ssh} '#{cmd_bit_scope_list}'"
|
50
|
-
|
51
|
-
# remove bit remote root directory from results
|
52
|
-
scope_list.gsub!(%r{#{root}/*}, '')
|
53
|
-
|
54
|
-
# remove /scope.json from results
|
55
|
-
scope_list.gsub!(%r{/scope.json}, '')
|
56
|
-
|
57
|
-
scope_list
|
58
|
-
end
|
59
|
-
|
60
|
-
# Backend method for bit scope new.
|
61
|
-
# @return [Int] status of new command
|
62
|
-
def bit_scope_new(scope)
|
63
|
-
log.debug "Creating new bit remote scope \"#{scope}\""
|
64
|
-
|
65
|
-
return false unless configured? %w[bit_ssh bit_remote]
|
66
|
-
|
67
|
-
return false if _bit_scope_exists? scope
|
68
|
-
|
69
|
-
cmd_bit_ssh = config.active['bit_ssh']
|
70
|
-
|
71
|
-
cmd_bit_scope_new = _bit_scope_new_cmd scope
|
72
|
-
|
73
|
-
run "#{cmd_bit_ssh} '#{cmd_bit_scope_new}'"
|
74
|
-
|
75
|
-
log.info "Created new bit remote scope \"#{scope}\""
|
76
|
-
end
|
77
|
-
|
78
|
-
private
|
79
|
-
|
80
|
-
# Check if workspace ready for bit scope add.
|
81
|
-
def _bit_scope_add_workspace_ready?
|
82
|
-
unless bit_check_workspace
|
83
|
-
log.error 'No bit workspace'
|
84
|
-
return false
|
85
|
-
end
|
86
|
-
|
87
|
-
return true unless git_check_workspace
|
88
|
-
|
89
|
-
return true if git_check_master
|
90
|
-
|
91
|
-
log.error 'Not on git master branch'
|
92
|
-
false
|
93
|
-
end
|
94
|
-
|
95
|
-
# Prepare bit scope list command.
|
96
|
-
def _bit_scope_list_cmd(root)
|
97
|
-
format(
|
98
|
-
config.active['cmd_bit_scope_list_find_scopes'],
|
99
|
-
root: root
|
100
|
-
)
|
101
|
-
end
|
102
|
-
|
103
|
-
# Check if bit scope already exists.
|
104
|
-
def _bit_scope_exists?(scope)
|
105
|
-
scope_list = bit_scope_list
|
106
|
-
return false unless scope_list.include? scope
|
107
|
-
|
108
|
-
log.error "The remote bit scope \"#{scope}\" already exists"
|
109
|
-
false
|
110
|
-
end
|
111
|
-
|
112
|
-
# Prepare bit scope new command.
|
113
|
-
def _bit_scope_new_cmd(scope)
|
114
|
-
root = config.active['bit_root']
|
115
|
-
|
116
|
-
format(
|
117
|
-
config.active['cmd_bit_scope_new_bit_init'],
|
118
|
-
scope: scope,
|
119
|
-
root: root
|
120
|
-
)
|
121
|
-
end
|
122
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# takelage docker container check module
|
4
|
-
module DockerContainerCheckModule
|
5
|
-
# Backend method for docker container check existing.
|
6
|
-
# @return [Boolean] is container existing?
|
7
|
-
def docker_container_check_existing(container)
|
8
|
-
log.debug "Checking if container \"#{container}\" is existing"
|
9
|
-
|
10
|
-
return false unless docker_check_running
|
11
|
-
|
12
|
-
stdout_str = run _docker_container_cmd_check_existing container
|
13
|
-
|
14
|
-
if stdout_str.to_s.strip.empty?
|
15
|
-
log.debug "Container \"#{container}\" is not existing"
|
16
|
-
return false
|
17
|
-
end
|
18
|
-
|
19
|
-
log.debug "Container \"#{container}\" is existing"
|
20
|
-
true
|
21
|
-
end
|
22
|
-
|
23
|
-
# Backend method for docker container check network.
|
24
|
-
# @return [Boolean] is network existing?
|
25
|
-
def docker_container_check_network(network)
|
26
|
-
log.debug "Checking if network \"#{network}\" is existing"
|
27
|
-
|
28
|
-
return false unless docker_check_running
|
29
|
-
|
30
|
-
stdout_str = run _docker_container_cmd_check_network network
|
31
|
-
|
32
|
-
if stdout_str.to_s.strip.empty?
|
33
|
-
log.debug "Network \"#{network}\" is not existing"
|
34
|
-
return false
|
35
|
-
end
|
36
|
-
|
37
|
-
log.debug "Network \"#{network}\" is existing"
|
38
|
-
true
|
39
|
-
end
|
40
|
-
|
41
|
-
# Backend method for docker container check orphaned.
|
42
|
-
# @return [Boolean] is container orphaned?
|
43
|
-
def docker_container_check_orphaned(container)
|
44
|
-
log.debug "Check if container \"#{container}\" is orphaned"
|
45
|
-
|
46
|
-
return false unless docker_check_running
|
47
|
-
|
48
|
-
stdout_str = run _docker_container_cmd_check_orphaned container
|
49
|
-
|
50
|
-
if stdout_str.include? '/loginpoint.py'
|
51
|
-
log.debug "Container \"#{container}\" isn't orphaned"
|
52
|
-
return false
|
53
|
-
end
|
54
|
-
|
55
|
-
log.debug "Container \"#{container}\" is orphaned"
|
56
|
-
true
|
57
|
-
end
|
58
|
-
|
59
|
-
private
|
60
|
-
|
61
|
-
def _docker_container_cmd_check_existing(container)
|
62
|
-
format(
|
63
|
-
config.active['cmd_docker_container_check_existing_docker_ps'],
|
64
|
-
container: container
|
65
|
-
)
|
66
|
-
end
|
67
|
-
|
68
|
-
def _docker_container_cmd_check_network(network)
|
69
|
-
format(
|
70
|
-
config.active['cmd_docker_container_check_network_docker_network'],
|
71
|
-
network: network
|
72
|
-
)
|
73
|
-
end
|
74
|
-
|
75
|
-
def _docker_container_cmd_check_orphaned(container)
|
76
|
-
format(
|
77
|
-
config.active['cmd_docker_container_check_orphaned_docker_exec'],
|
78
|
-
container: container
|
79
|
-
)
|
80
|
-
end
|
81
|
-
end
|
@@ -1,295 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# takelage docker container module
|
4
|
-
module DockerContainerModule
|
5
|
-
# Backend method for docker container run.
|
6
|
-
def docker_container_command(command)
|
7
|
-
log.debug 'Running command in container'
|
8
|
-
|
9
|
-
return false unless docker_check_running
|
10
|
-
|
11
|
-
docker_socket_start
|
12
|
-
|
13
|
-
_create_network @hostname unless docker_container_check_network @hostname
|
14
|
-
|
15
|
-
unless docker_container_check_existing @hostname
|
16
|
-
return false unless _docker_container_create_container @hostname
|
17
|
-
end
|
18
|
-
|
19
|
-
_run_command_in_container @hostname, command
|
20
|
-
end
|
21
|
-
|
22
|
-
# Backend method for docker container daemon.
|
23
|
-
def docker_container_daemon
|
24
|
-
log.debug 'Starting docker container as daemon'
|
25
|
-
|
26
|
-
return false unless docker_check_running
|
27
|
-
|
28
|
-
_create_network @hostname unless docker_container_check_network @hostname
|
29
|
-
|
30
|
-
unless docker_container_check_existing @hostname
|
31
|
-
return false unless _docker_container_create_container @hostname
|
32
|
-
end
|
33
|
-
|
34
|
-
true
|
35
|
-
end
|
36
|
-
|
37
|
-
# Backend method for docker container login.
|
38
|
-
def docker_container_login
|
39
|
-
log.debug 'Logging in to docker container'
|
40
|
-
|
41
|
-
return false unless docker_check_running
|
42
|
-
|
43
|
-
_docker_container_login_check_outdated
|
44
|
-
docker_socket_start
|
45
|
-
_create_network @hostname unless docker_container_check_network @hostname
|
46
|
-
|
47
|
-
unless docker_container_check_existing @hostname
|
48
|
-
return false unless _docker_container_create_container @hostname
|
49
|
-
end
|
50
|
-
|
51
|
-
cmd_enter_container = _docker_container_enter_container @hostname
|
52
|
-
|
53
|
-
run_and_exit cmd_enter_container
|
54
|
-
end
|
55
|
-
|
56
|
-
# Backend method for docker container nuke.
|
57
|
-
def docker_container_nuke
|
58
|
-
log.debug 'Removing all docker containers'
|
59
|
-
|
60
|
-
return false unless docker_check_running
|
61
|
-
|
62
|
-
return false if _docker_container_harakiri?
|
63
|
-
|
64
|
-
networks = _docker_container_kill_existing_containers
|
65
|
-
|
66
|
-
networks.each do |network|
|
67
|
-
_remove_network network if docker_container_check_network network
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# Backend method for docker container purge.
|
72
|
-
def docker_container_purge
|
73
|
-
log.debug 'Removing orphaned docker containers'
|
74
|
-
|
75
|
-
return false unless docker_check_running
|
76
|
-
|
77
|
-
networks = _docker_container_kill_orphaned_containers
|
78
|
-
|
79
|
-
networks.each do |network|
|
80
|
-
_remove_network network if docker_container_check_network network
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
private
|
85
|
-
|
86
|
-
# Check if newer docker container is available.
|
87
|
-
def _docker_container_login_check_outdated
|
88
|
-
return if @docker_tag == 'latest'
|
89
|
-
|
90
|
-
outdated = docker_image_check_outdated @docker_tag
|
91
|
-
return unless outdated
|
92
|
-
|
93
|
-
tag_latest = docker_image_tag_latest_remote
|
94
|
-
log.warn "#{@docker_user}/#{@docker_repo}:#{@docker_tag} is outdated"
|
95
|
-
log.warn "#{@docker_user}/#{@docker_repo}:#{tag_latest} is available"
|
96
|
-
end
|
97
|
-
|
98
|
-
# Create docker container.
|
99
|
-
# rubocop:disable Metrics/MethodLength
|
100
|
-
def _docker_container_create_container(container)
|
101
|
-
log.debug "Creating container \"#{container}\""
|
102
|
-
|
103
|
-
image = "#{@docker_user}/#{@docker_repo}:#{@docker_tag}"
|
104
|
-
|
105
|
-
return false unless _docker_container_image_available? image
|
106
|
-
|
107
|
-
log.debug "Using docker image \"#{image}\""
|
108
|
-
|
109
|
-
unless @socket_host == '127.0.0.1'
|
110
|
-
addhost = "--add-host host.docker.internal:#{@socket_host}"
|
111
|
-
end
|
112
|
-
|
113
|
-
entrypoint = '/entrypoint.py '
|
114
|
-
volume_dev = ''
|
115
|
-
if options[:development]
|
116
|
-
entrypoint += ' --debug '
|
117
|
-
volume_dev = "--volume #{@workdir}/#{@docker_debug}:/debug "
|
118
|
-
end
|
119
|
-
|
120
|
-
cmd_docker_create =
|
121
|
-
format(
|
122
|
-
config.active['cmd_docker_container_create'],
|
123
|
-
workdir: @workdir,
|
124
|
-
timezone: @timezone,
|
125
|
-
container: container,
|
126
|
-
dockersock: @dockersock,
|
127
|
-
homedir: @homedir,
|
128
|
-
volume_dev: volume_dev,
|
129
|
-
image: image,
|
130
|
-
addhost: addhost,
|
131
|
-
dockerrun_options: @dockerrun_options,
|
132
|
-
entrypoint: entrypoint,
|
133
|
-
gid: @gid,
|
134
|
-
uid: @uid,
|
135
|
-
username: @username,
|
136
|
-
gpg_agent_port: @gpg_agent_port,
|
137
|
-
gpg_ssh_agent_port: @gpg_ssh_agent_port,
|
138
|
-
extra: @entrypoint_extra,
|
139
|
-
entrypoint_options: @entrypoint_options
|
140
|
-
)
|
141
|
-
|
142
|
-
run cmd_docker_create
|
143
|
-
true
|
144
|
-
end
|
145
|
-
# rubocop:enable Metrics/MethodLength
|
146
|
-
|
147
|
-
# Check if docker image is available
|
148
|
-
def _docker_container_image_available?(image)
|
149
|
-
return true if docker_image_tag_list_local.include? @docker_tag
|
150
|
-
|
151
|
-
log.error "No local image \"#{image}\" available"
|
152
|
-
log.info "Try: docker pull #{image}"
|
153
|
-
false
|
154
|
-
end
|
155
|
-
|
156
|
-
# Create docker network.
|
157
|
-
def _create_network(network)
|
158
|
-
log.debug "Create network \"#{network}\""
|
159
|
-
|
160
|
-
cmd_create_network =
|
161
|
-
format(
|
162
|
-
config.active['cmd_docker_container_create_network'],
|
163
|
-
network: network
|
164
|
-
)
|
165
|
-
|
166
|
-
run cmd_create_network
|
167
|
-
end
|
168
|
-
|
169
|
-
# Enter existing docker container.
|
170
|
-
def _docker_container_enter_container(container)
|
171
|
-
log.debug "Entering container \"#{container}\""
|
172
|
-
|
173
|
-
loginpoint = '/loginpoint.py'
|
174
|
-
loginpoint += ' --debug ' if options[:development]
|
175
|
-
|
176
|
-
format(
|
177
|
-
config.active['cmd_docker_container_enter_container'],
|
178
|
-
container: container,
|
179
|
-
loginpoint: loginpoint,
|
180
|
-
username: @username
|
181
|
-
)
|
182
|
-
end
|
183
|
-
|
184
|
-
# Check if we are running tau nuke inside a takelage container
|
185
|
-
def _docker_container_harakiri?
|
186
|
-
hostname = ENV['HOSTNAME'] || ''
|
187
|
-
return false unless hostname.start_with? "#{@docker_repo}_"
|
188
|
-
|
189
|
-
log.error "Please run \"tau nuke\" outside of #{@docker_repo} containers"
|
190
|
-
log.info "Run \"tau purge\" to remove orphaned #{@docker_repo} containers"
|
191
|
-
true
|
192
|
-
end
|
193
|
-
|
194
|
-
# Get container name by id.
|
195
|
-
def _docker_container_get_container_name_by_id(container)
|
196
|
-
log.debug "Getting name of container \"#{container}\""
|
197
|
-
|
198
|
-
cmd_get_container_name_by_id =
|
199
|
-
format(
|
200
|
-
config.active['cmd_docker_container_get_container_name'],
|
201
|
-
container: container
|
202
|
-
)
|
203
|
-
|
204
|
-
stdout_str = run cmd_get_container_name_by_id
|
205
|
-
|
206
|
-
name = stdout_str.chomp
|
207
|
-
|
208
|
-
log.debug "Container #{container} has name \"#{name}\""
|
209
|
-
|
210
|
-
name
|
211
|
-
end
|
212
|
-
|
213
|
-
# Get all docker containers.
|
214
|
-
# @return [Array] list of docker containers
|
215
|
-
def _docker_container_get_containers
|
216
|
-
log.debug "Getting all containers of image \"#{@docker_repo}\""
|
217
|
-
|
218
|
-
cmd_docker_get =
|
219
|
-
format(
|
220
|
-
config.active['cmd_docker_container_get_containers'],
|
221
|
-
docker_repo: @docker_repo
|
222
|
-
)
|
223
|
-
|
224
|
-
stdout_str = run cmd_docker_get
|
225
|
-
|
226
|
-
# convert stdout lines to array and return array
|
227
|
-
stdout_str.split(/\n+/)
|
228
|
-
end
|
229
|
-
|
230
|
-
# Kill all docker containers and return list of networks
|
231
|
-
def _docker_container_kill_existing_containers
|
232
|
-
networks = []
|
233
|
-
_docker_container_get_containers.each do |container|
|
234
|
-
name = _docker_container_get_container_name_by_id container
|
235
|
-
_docker_container_stop_container container
|
236
|
-
networks << name unless networks.include? name
|
237
|
-
end
|
238
|
-
networks
|
239
|
-
end
|
240
|
-
|
241
|
-
# Kill orphaned docker containers and return list of networks
|
242
|
-
def _docker_container_kill_orphaned_containers
|
243
|
-
networks = []
|
244
|
-
|
245
|
-
_docker_container_get_containers.each do |container|
|
246
|
-
next unless docker_container_check_orphaned container
|
247
|
-
|
248
|
-
name = _docker_container_get_container_name_by_id container
|
249
|
-
_docker_container_stop_container container
|
250
|
-
networks << name unless networks.include? name
|
251
|
-
end
|
252
|
-
networks
|
253
|
-
end
|
254
|
-
|
255
|
-
# Remove docker network.
|
256
|
-
def _remove_network(network)
|
257
|
-
log.debug "Remove network \"#{network}\""
|
258
|
-
|
259
|
-
cmd_remove_network =
|
260
|
-
format(
|
261
|
-
config.active['cmd_docker_container_remove_network'],
|
262
|
-
network: network
|
263
|
-
)
|
264
|
-
|
265
|
-
run cmd_remove_network
|
266
|
-
end
|
267
|
-
|
268
|
-
# Enter existing docker container.
|
269
|
-
def _run_command_in_container(container, command)
|
270
|
-
log.debug "Running command \"#{command}\" in container \"#{container}\""
|
271
|
-
|
272
|
-
cmd_docker_run_command =
|
273
|
-
format(
|
274
|
-
config.active['cmd_docker_container_docker_exec'],
|
275
|
-
container: container,
|
276
|
-
username: @username,
|
277
|
-
command: command
|
278
|
-
)
|
279
|
-
|
280
|
-
run_and_exit cmd_docker_run_command
|
281
|
-
end
|
282
|
-
|
283
|
-
# Stop container.
|
284
|
-
def _docker_container_stop_container(container)
|
285
|
-
log.debug "Stopping container \"#{container}\""
|
286
|
-
|
287
|
-
cmd_docker_stop =
|
288
|
-
format(
|
289
|
-
config.active['cmd_docker_container_stop_container'],
|
290
|
-
container: container
|
291
|
-
)
|
292
|
-
|
293
|
-
run cmd_docker_stop
|
294
|
-
end
|
295
|
-
end
|