takeltau 0.34.9
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 +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
|