takeltau 0.34.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +674 -0
- data/README.md +235 -0
- data/bin/tau +6 -0
- data/lib/Thorfile +3 -0
- data/lib/takeltau.rb +257 -0
- data/lib/takeltau/bit/check/cli.rb +23 -0
- data/lib/takeltau/bit/check/workspace.rb +37 -0
- data/lib/takeltau/bit/cli.rb +18 -0
- data/lib/takeltau/bit/clipboard/cli.rb +73 -0
- data/lib/takeltau/bit/clipboard/copy.rb +142 -0
- data/lib/takeltau/bit/clipboard/lib.rb +143 -0
- data/lib/takeltau/bit/clipboard/paste.rb +60 -0
- data/lib/takeltau/bit/clipboard/pull.rb +37 -0
- data/lib/takeltau/bit/clipboard/push.rb +37 -0
- data/lib/takeltau/bit/require/cli.rb +57 -0
- data/lib/takeltau/bit/require/export.rb +34 -0
- data/lib/takeltau/bit/require/import.rb +133 -0
- data/lib/takeltau/bit/require/lib.rb +19 -0
- data/lib/takeltau/bit/scope/add.rb +55 -0
- data/lib/takeltau/bit/scope/cli.rb +74 -0
- data/lib/takeltau/bit/scope/list.rb +41 -0
- data/lib/takeltau/bit/scope/new.rb +44 -0
- data/lib/takeltau/bit/scope/ssh.rb +13 -0
- data/lib/takeltau/completion/cli.rb +24 -0
- data/lib/takeltau/default.yml +95 -0
- data/lib/takeltau/docker/check/cli.rb +23 -0
- data/lib/takeltau/docker/check/daemon.rb +27 -0
- data/lib/takeltau/docker/cli.rb +15 -0
- data/lib/takeltau/docker/container/check/cli.rb +57 -0
- data/lib/takeltau/docker/container/check/existing.rb +32 -0
- data/lib/takeltau/docker/container/check/network.rb +32 -0
- data/lib/takeltau/docker/container/check/orphaned.rb +32 -0
- data/lib/takeltau/docker/container/clean.rb +40 -0
- data/lib/takeltau/docker/container/cli.rb +118 -0
- data/lib/takeltau/docker/container/command.rb +38 -0
- data/lib/takeltau/docker/container/daemon.rb +17 -0
- data/lib/takeltau/docker/container/lib.rb +181 -0
- data/lib/takeltau/docker/container/login.rb +58 -0
- data/lib/takeltau/docker/container/prune.rb +31 -0
- data/lib/takeltau/docker/image/cli.rb +39 -0
- data/lib/takeltau/docker/image/tag/check.rb +42 -0
- data/lib/takeltau/docker/image/tag/cli.rb +68 -0
- data/lib/takeltau/docker/image/tag/latest.rb +24 -0
- data/lib/takeltau/docker/image/tag/list.rb +19 -0
- data/lib/takeltau/docker/image/update.rb +27 -0
- data/lib/takeltau/git/check/bit.rb +26 -0
- data/lib/takeltau/git/check/clean.rb +46 -0
- data/lib/takeltau/git/check/cli.rb +49 -0
- data/lib/takeltau/git/check/workspace.rb +34 -0
- data/lib/takeltau/git/cli.rb +9 -0
- data/lib/takeltau/info/cli.rb +12 -0
- data/lib/takeltau/info/project/cli.rb +69 -0
- data/lib/takeltau/info/status/bar.rb +112 -0
- data/lib/takeltau/info/status/cli.rb +107 -0
- data/lib/takeltau/info/status/git.rb +47 -0
- data/lib/takeltau/info/status/gopass.rb +37 -0
- data/lib/takeltau/info/status/gpg.rb +39 -0
- data/lib/takeltau/info/status/lib.rb +46 -0
- data/lib/takeltau/info/status/ssh.rb +46 -0
- data/lib/takeltau/init/cli.rb +12 -0
- data/lib/takeltau/init/lib.rb +86 -0
- data/lib/takeltau/init/packer/cli.rb +82 -0
- data/lib/takeltau/init/packer/docker.rb +64 -0
- data/lib/takeltau/init/packer/templates/ansiblelint.tt +3 -0
- data/lib/takeltau/init/packer/templates/bitrequireyml.tt +13 -0
- data/lib/takeltau/init/packer/templates/groupvarsprojectyml.tt +2 -0
- data/lib/takeltau/init/packer/templates/playbooksiteyml.tt +6 -0
- data/lib/takeltau/init/packer/templates/projectyml.tt +19 -0
- data/lib/takeltau/init/takelage/cli.rb +70 -0
- data/lib/takeltau/init/takelage/rake.rb +61 -0
- data/lib/takeltau/init/takelage/templates/bitrequireyml.tt +5 -0
- data/lib/takeltau/init/takelage/templates/projectyml.tt +3 -0
- data/lib/takeltau/init/templates/Rakefile.tt +3 -0
- data/lib/takeltau/init/templates/gitignore.tt +16 -0
- data/lib/takeltau/lib/config.rb +130 -0
- data/lib/takeltau/lib/logging.rb +49 -0
- data/lib/takeltau/lib/project.rb +72 -0
- data/lib/takeltau/lib/subcmd.rb +18 -0
- data/lib/takeltau/lib/system.rb +194 -0
- data/lib/takeltau/mutagen/check/cli.rb +40 -0
- data/lib/takeltau/mutagen/check/daemon.rb +76 -0
- data/lib/takeltau/mutagen/cli.rb +12 -0
- data/lib/takeltau/mutagen/socket/check.rb +33 -0
- data/lib/takeltau/mutagen/socket/cli.rb +103 -0
- data/lib/takeltau/mutagen/socket/create.rb +47 -0
- data/lib/takeltau/mutagen/socket/list.rb +33 -0
- data/lib/takeltau/mutagen/socket/terminate.rb +32 -0
- data/lib/takeltau/mutagen/socket/tidy.rb +21 -0
- data/lib/takeltau/self/cli.rb +43 -0
- data/lib/takeltau/self/config/cli.rb +82 -0
- data/lib/takeltau/self/list.rb +35 -0
- data/lib/takeltau/version +1 -0
- metadata +319 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takeltau docker container clean
|
4
|
+
module DockerContainerClean
|
5
|
+
# Backend method for docker container clean.
|
6
|
+
def docker_container_clean
|
7
|
+
log.debug 'Removing all docker containers'
|
8
|
+
|
9
|
+
return false unless docker_check_daemon
|
10
|
+
|
11
|
+
return false if _docker_container_clean_harakiri?
|
12
|
+
|
13
|
+
mutagen_socket_terminate "--label-selector='#{@takellabel}'"
|
14
|
+
networks = _docker_container_clean_kill_existing_containers
|
15
|
+
_docker_container_lib_remove_networks networks
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# Check if we are running tau clean inside a takelage container.
|
21
|
+
def _docker_container_clean_harakiri?
|
22
|
+
hostname = ENV['HOSTNAME'] || ''
|
23
|
+
return false unless hostname.start_with? "#{@docker_repo}_"
|
24
|
+
|
25
|
+
log.error "Please run \"tau clean\" outside of #{@docker_repo} containers"
|
26
|
+
log.info "Run \"tau prune\" to remove orphaned #{@docker_repo} containers"
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
# Kill all docker containers and return list of networks.
|
31
|
+
def _docker_container_clean_kill_existing_containers
|
32
|
+
networks = []
|
33
|
+
_docker_container_lib_get_containers.each do |container|
|
34
|
+
name = _docker_container_lib_get_container_name_by_id container
|
35
|
+
_docker_container_lib_stop_container container
|
36
|
+
networks << name unless networks.include? name
|
37
|
+
end
|
38
|
+
networks
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Takeltau
|
4
|
+
# takeltau docker container
|
5
|
+
class DockerContainer < SubCommandBase
|
6
|
+
include LoggingModule
|
7
|
+
include SystemModule
|
8
|
+
include ConfigModule
|
9
|
+
include DockerCheckDaemon
|
10
|
+
include DockerContainerCheckExisting
|
11
|
+
include DockerContainerCheckNetwork
|
12
|
+
include DockerContainerCheckOrphaned
|
13
|
+
include DockerContainerLib
|
14
|
+
include DockerContainerCommand
|
15
|
+
include DockerContainerDaemon
|
16
|
+
include DockerContainerLogin
|
17
|
+
include DockerContainerClean
|
18
|
+
include DockerContainerPrune
|
19
|
+
include DockerImageTagLatest
|
20
|
+
include DockerImageTagList
|
21
|
+
include DockerImageTagCheck
|
22
|
+
include MutagenCheckDaemon
|
23
|
+
include MutagenSocketCheck
|
24
|
+
include MutagenSocketCreate
|
25
|
+
include MutagenSocketTerminate
|
26
|
+
|
27
|
+
# Initialize docker container
|
28
|
+
# rubocop:disable Metrics/AbcSize
|
29
|
+
# rubocop:disable Metrics/MethodLength
|
30
|
+
def initialize(args = [], local_options = {}, configuration = {})
|
31
|
+
# initialize thor parent class
|
32
|
+
super args, local_options, configuration
|
33
|
+
|
34
|
+
@docker_user = config.active['docker_user']
|
35
|
+
@docker_repo = config.active['docker_repo']
|
36
|
+
@docker_tag = config.active['docker_tag']
|
37
|
+
@docker_registry = config.active['docker_registry']
|
38
|
+
@username = ENV['USER'] || 'noname'
|
39
|
+
@workdir = Dir.getwd
|
40
|
+
@hostname = _docker_container_lib_hostname
|
41
|
+
@hostlabel = "hostname=#{@hostname}"
|
42
|
+
@takellabel = config.active['mutagen_socket_takelage_label']
|
43
|
+
@mutagensock = config.active['mutagen_socket_path_mutagen']
|
44
|
+
@gpgsock = config.active['mutagen_socket_path_gpg']
|
45
|
+
@sshsock = config.active['mutagen_socket_path_ssh']
|
46
|
+
end
|
47
|
+
# rubocop:enable Metrics/MethodLength
|
48
|
+
# rubocop:enable Metrics/AbcSize
|
49
|
+
|
50
|
+
desc 'check [COMMAND]', 'Check docker container'
|
51
|
+
subcommand 'check', DockerContainerCheck
|
52
|
+
|
53
|
+
#
|
54
|
+
# docker container clean
|
55
|
+
#
|
56
|
+
desc 'clean', 'Remove all docker containers'
|
57
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
58
|
+
Remove all docker containers
|
59
|
+
LONGDESC
|
60
|
+
# Remove all docker containers.
|
61
|
+
def clean
|
62
|
+
docker_container_clean
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# docker container command
|
67
|
+
#
|
68
|
+
desc 'command [CMD]', 'Run [CMD] in a docker container'
|
69
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
70
|
+
Run command in docker container
|
71
|
+
LONGDESC
|
72
|
+
# Run command in docker container.
|
73
|
+
def command(command)
|
74
|
+
docker_container_command(command)
|
75
|
+
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# docker container daemon
|
79
|
+
#
|
80
|
+
desc 'daemon', 'Run docker container in daemon mode'
|
81
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
82
|
+
Run docker container in daemon mode
|
83
|
+
LONGDESC
|
84
|
+
# Run docker container in daemon mode.
|
85
|
+
def daemon
|
86
|
+
docker_container_daemon
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# docker container login
|
91
|
+
#
|
92
|
+
option :debug,
|
93
|
+
aliases: 'd',
|
94
|
+
type: :boolean,
|
95
|
+
default: false,
|
96
|
+
desc: 'Log in to docker container in debug mode'
|
97
|
+
desc 'login', 'Log in to latest local docker container'
|
98
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
99
|
+
Log in to latest local docker container
|
100
|
+
LONGDESC
|
101
|
+
# Log in to latest local docker container.
|
102
|
+
def login
|
103
|
+
docker_container_login
|
104
|
+
end
|
105
|
+
|
106
|
+
#
|
107
|
+
# docker container prune
|
108
|
+
#
|
109
|
+
desc 'prune', 'Remove orphaned docker containers'
|
110
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
111
|
+
Remove orphaned docker containers
|
112
|
+
LONGDESC
|
113
|
+
# Remove orphaned docker containers.
|
114
|
+
def prune
|
115
|
+
docker_container_prune
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takeltau docker container command
|
4
|
+
module DockerContainerCommand
|
5
|
+
# Backend method for docker container command.
|
6
|
+
def docker_container_command(command)
|
7
|
+
log.debug 'Running command in container'
|
8
|
+
|
9
|
+
return false unless docker_check_daemon
|
10
|
+
|
11
|
+
# no matrjoschka test here
|
12
|
+
|
13
|
+
unless docker_container_check_existing @hostname
|
14
|
+
return false unless _docker_container_lib_create_net_and_ctr @hostname
|
15
|
+
|
16
|
+
_docker_container_lib_start_sockets
|
17
|
+
end
|
18
|
+
|
19
|
+
_docker_container_command_run_command @hostname, command
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# Prepare run command in container command.
|
25
|
+
def _docker_container_command_run_command(container, command)
|
26
|
+
log.debug "Running command \"#{command}\" in container \"#{container}\""
|
27
|
+
|
28
|
+
cmd_docker_run_command =
|
29
|
+
format(
|
30
|
+
config.active['cmd_docker_container_docker_exec'],
|
31
|
+
container: container,
|
32
|
+
username: @username,
|
33
|
+
command: command
|
34
|
+
)
|
35
|
+
|
36
|
+
run_and_exit cmd_docker_run_command
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takeltau docker container daemon
|
4
|
+
module DockerContainerDaemon
|
5
|
+
# Backend method for docker container daemon.
|
6
|
+
def docker_container_daemon
|
7
|
+
log.debug 'Starting docker container as daemon'
|
8
|
+
|
9
|
+
return false unless docker_check_daemon
|
10
|
+
|
11
|
+
result = _docker_container_lib_create_net_and_ctr @hostname
|
12
|
+
|
13
|
+
_docker_container_lib_start_sockets
|
14
|
+
|
15
|
+
result
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takeltau docker container lib
|
4
|
+
# rubocop:disable Metrics/ModuleLength
|
5
|
+
# rubocop:disable Style/IfUnlessModifier
|
6
|
+
module DockerContainerLib
|
7
|
+
private
|
8
|
+
|
9
|
+
# Create mutagen sockets
|
10
|
+
def _docker_container_lib_start_sockets
|
11
|
+
return false unless mutagen_check_daemon
|
12
|
+
|
13
|
+
mutagen_socket_create 'mutagen', @mutagensock, @mutagensock
|
14
|
+
mutagen_socket_create 'gpg', @gpgsock, @gpgsock
|
15
|
+
mutagen_socket_create 'ssh', @sshsock, @sshsock
|
16
|
+
end
|
17
|
+
|
18
|
+
# Create unique docker hostname
|
19
|
+
def _docker_container_lib_hostname
|
20
|
+
relative_name = "#{@docker_repo}_#{File.basename(@workdir)}"
|
21
|
+
absolute_name = "#{@docker_repo}_#{@workdir}"
|
22
|
+
digest = Digest::SHA256.bubblebabble absolute_name
|
23
|
+
"#{relative_name}_#{digest[0..10]}"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Create docker container and network.
|
27
|
+
def _docker_container_lib_create_net_and_ctr(name)
|
28
|
+
return true if docker_container_check_existing name
|
29
|
+
|
30
|
+
unless docker_container_check_network name
|
31
|
+
_docker_container_lib_create_network name
|
32
|
+
end
|
33
|
+
|
34
|
+
_docker_container_lib_create_container name
|
35
|
+
end
|
36
|
+
|
37
|
+
# Remove docker networks.
|
38
|
+
def _docker_container_lib_remove_networks(networks)
|
39
|
+
networks.each do |network|
|
40
|
+
if docker_container_check_network network
|
41
|
+
_docker_container_lib_remove_network network
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Create docker network.
|
47
|
+
def _docker_container_lib_create_network(network)
|
48
|
+
log.debug "Create network \"#{network}\""
|
49
|
+
|
50
|
+
cmd_create_network = format(
|
51
|
+
config.active['cmd_docker_container_create_network'],
|
52
|
+
network: network
|
53
|
+
)
|
54
|
+
|
55
|
+
run cmd_create_network
|
56
|
+
end
|
57
|
+
|
58
|
+
# Remove docker network.
|
59
|
+
def _docker_container_lib_remove_network(network)
|
60
|
+
log.debug "Remove network \"#{network}\""
|
61
|
+
|
62
|
+
cmd_remove_network = format(
|
63
|
+
config.active['cmd_docker_container_remove_network'],
|
64
|
+
network: network
|
65
|
+
)
|
66
|
+
|
67
|
+
run cmd_remove_network
|
68
|
+
end
|
69
|
+
|
70
|
+
# Create docker container.
|
71
|
+
# rubocop:disable Metrics/MethodLength
|
72
|
+
# rubocop:disable Metrics/AbcSize
|
73
|
+
def _docker_container_lib_create_container(container)
|
74
|
+
log.debug "Creating container \"#{container}\""
|
75
|
+
|
76
|
+
image = "#{@docker_user}/#{@docker_repo}:#{@docker_tag}"
|
77
|
+
|
78
|
+
return false unless _docker_container_lib_image_available? image
|
79
|
+
|
80
|
+
log.debug "Using docker image \"#{image}\""
|
81
|
+
|
82
|
+
docker_debug = config.active['docker_debug']
|
83
|
+
entrypoint = '/entrypoint.py '
|
84
|
+
volume_dev = ''
|
85
|
+
if options[:debug]
|
86
|
+
entrypoint = '/debug/entrypoint.py --debug '
|
87
|
+
volume_dev = "--volume #{@workdir}/#{docker_debug}:/debug "
|
88
|
+
end
|
89
|
+
|
90
|
+
cmd_docker_create = format(
|
91
|
+
config.active['cmd_docker_container_create'],
|
92
|
+
container: container,
|
93
|
+
docker_run_options: config.active['docker_run_options'],
|
94
|
+
dockersock: '/var/run/docker.sock',
|
95
|
+
entrypoint: entrypoint,
|
96
|
+
entrypoint_options: config.active['docker_entrypoint_options'],
|
97
|
+
extra: config.active['docker_entrypoint_extra'],
|
98
|
+
gid: Etc.getpwnam(@username).gid,
|
99
|
+
homedir: ENV['HOME'] || '/tmp',
|
100
|
+
image: image,
|
101
|
+
shmsize: config.active['docker_shm_size'],
|
102
|
+
timezone: 'Europe/Berlin',
|
103
|
+
uid: Etc.getpwnam(@username).uid,
|
104
|
+
username: @username,
|
105
|
+
volume_dev: volume_dev,
|
106
|
+
workdir: @workdir
|
107
|
+
)
|
108
|
+
|
109
|
+
try cmd_docker_create
|
110
|
+
end
|
111
|
+
|
112
|
+
# rubocop:enable Metrics/AbcSize
|
113
|
+
# rubocop:enable Metrics/MethodLength
|
114
|
+
|
115
|
+
# Check if we are already inside a takelage container
|
116
|
+
def _docker_container_lib_check_matrjoschka
|
117
|
+
log.debug 'Checking if we are already inside a takelage container'
|
118
|
+
|
119
|
+
unless ENV.keys.include? 'TAKELAGE_PROJECT_BASE_DIR'
|
120
|
+
log.debug 'We are not inside a takelage container'
|
121
|
+
return false
|
122
|
+
end
|
123
|
+
|
124
|
+
log.debug 'We are inside a takelage container'
|
125
|
+
|
126
|
+
true
|
127
|
+
end
|
128
|
+
|
129
|
+
# Check if docker image is available
|
130
|
+
def _docker_container_lib_image_available?(image)
|
131
|
+
return true if docker_image_tag_list.include? @docker_tag
|
132
|
+
|
133
|
+
log.error "No local image \"#{image}\" available"
|
134
|
+
log.info "Try: docker pull #{image}"
|
135
|
+
false
|
136
|
+
end
|
137
|
+
|
138
|
+
# Get container name by id.
|
139
|
+
def _docker_container_lib_get_container_name_by_id(container)
|
140
|
+
log.debug "Getting name of container \"#{container}\""
|
141
|
+
|
142
|
+
cmd_get_container_name_by_id = format(
|
143
|
+
config.active['cmd_docker_container_get_container_name'],
|
144
|
+
container: container
|
145
|
+
)
|
146
|
+
|
147
|
+
name = (run cmd_get_container_name_by_id).chomp
|
148
|
+
|
149
|
+
log.debug "Container #{container} has name \"#{name}\""
|
150
|
+
|
151
|
+
name
|
152
|
+
end
|
153
|
+
|
154
|
+
# Get all docker containers.
|
155
|
+
# @return [Array] list of docker containers
|
156
|
+
def _docker_container_lib_get_containers
|
157
|
+
log.debug "Getting all containers of image \"#{@docker_repo}\""
|
158
|
+
|
159
|
+
cmd_docker_get = format(
|
160
|
+
config.active['cmd_docker_container_get_containers'],
|
161
|
+
docker_repo: @docker_repo
|
162
|
+
)
|
163
|
+
|
164
|
+
# convert stdout lines to array and return array
|
165
|
+
(run cmd_docker_get).split(/\n+/)
|
166
|
+
end
|
167
|
+
|
168
|
+
# Stop container.
|
169
|
+
def _docker_container_lib_stop_container(container)
|
170
|
+
log.debug "Stopping container \"#{container}\""
|
171
|
+
|
172
|
+
cmd_docker_stop = format(
|
173
|
+
config.active['cmd_docker_container_stop_container'],
|
174
|
+
container: container
|
175
|
+
)
|
176
|
+
|
177
|
+
run cmd_docker_stop
|
178
|
+
end
|
179
|
+
end
|
180
|
+
# rubocop:enable Style/IfUnlessModifier
|
181
|
+
# rubocop:enable Metrics/ModuleLength
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takeltau docker container login
|
4
|
+
module DockerContainerLogin
|
5
|
+
# Backend method for docker container login.
|
6
|
+
def docker_container_login
|
7
|
+
log.debug 'Logging in to docker container'
|
8
|
+
|
9
|
+
return false unless docker_check_daemon
|
10
|
+
|
11
|
+
if _docker_container_lib_check_matrjoschka
|
12
|
+
log.error 'You cannot log in to takelage from within takelage'
|
13
|
+
return false
|
14
|
+
end
|
15
|
+
|
16
|
+
# rubocop:disable Style/IfUnlessModifier
|
17
|
+
unless docker_container_check_existing @hostname
|
18
|
+
_docker_container_login_create_container @hostname
|
19
|
+
end
|
20
|
+
# rubocop:enable Style/IfUnlessModifier
|
21
|
+
|
22
|
+
run_and_exit _docker_container_login_enter_container @hostname
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# Create container, network and forward sockets
|
28
|
+
def _docker_container_login_create_container(container)
|
29
|
+
return false unless _docker_container_lib_create_net_and_ctr container
|
30
|
+
|
31
|
+
_docker_container_lib_start_sockets
|
32
|
+
_docker_container_wait_for_sockets
|
33
|
+
end
|
34
|
+
|
35
|
+
# Prepare enter existing container command.
|
36
|
+
def _docker_container_login_enter_container(container)
|
37
|
+
log.debug "Entering container \"#{container}\""
|
38
|
+
|
39
|
+
loginpoint = '/loginpoint.py'
|
40
|
+
loginpoint = '/debug/loginpoint.py --debug ' if options[:debug]
|
41
|
+
|
42
|
+
format(
|
43
|
+
config.active['cmd_docker_container_enter_container'],
|
44
|
+
container: container,
|
45
|
+
loginpoint: loginpoint,
|
46
|
+
username: @username
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Wait for the sockets to come up
|
51
|
+
def _docker_container_wait_for_sockets
|
52
|
+
wait_for_sockets = config.active['login_wait_for_sockets'].to_i
|
53
|
+
return if wait_for_sockets.zero?
|
54
|
+
|
55
|
+
log.debug "Waiting for #{wait_for_sockets} #{pluralize(wait_for_sockets, 'second', 'seconds')}"
|
56
|
+
sleep wait_for_sockets
|
57
|
+
end
|
58
|
+
end
|