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
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker image tag check remote
|
4
|
+
module DockerImageTagCheckRemote
|
5
|
+
# Backend method for docker image check tag remote.
|
6
|
+
# @return [Boolean] does remote docker image tag exist?
|
7
|
+
def docker_image_tag_check_remote(tag)
|
8
|
+
log.debug "Check if remote image tag \"#{tag}\" exists"
|
9
|
+
|
10
|
+
return false unless docker_check_running
|
11
|
+
|
12
|
+
if tag.to_s.strip.empty?
|
13
|
+
log.warn 'No remote docker image tag specified'
|
14
|
+
return false
|
15
|
+
end
|
16
|
+
|
17
|
+
image = "#{@docker_user}/#{@docker_repo}:#{tag}"
|
18
|
+
|
19
|
+
return false unless _docker_iamge_check_remote_image? image, tag
|
20
|
+
|
21
|
+
log.debug "Found remote docker image \"#{image}\""
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# Check if remote image exists.
|
28
|
+
def _docker_iamge_check_remote_image?(image, tag)
|
29
|
+
tags = docker_image_tag_list_remote
|
30
|
+
|
31
|
+
unless tags != false && tags.include?(tag)
|
32
|
+
log.debug "No remote docker image \"#{image}\" found"
|
33
|
+
return false
|
34
|
+
end
|
35
|
+
|
36
|
+
true
|
37
|
+
end
|
38
|
+
end
|
@@ -6,9 +6,11 @@ module Takelage
|
|
6
6
|
include LoggingModule
|
7
7
|
include SystemModule
|
8
8
|
include ConfigModule
|
9
|
-
include
|
10
|
-
include
|
11
|
-
include
|
9
|
+
include DockerCheckRunning
|
10
|
+
include DockerImageTagListLocal
|
11
|
+
include DockerImageTagListRemote
|
12
|
+
include DockerImageTagLatestLocal
|
13
|
+
include DockerImageTagLatestRemote
|
12
14
|
|
13
15
|
# Initialize takelage docker image tag latest
|
14
16
|
def initialize(args = [], local_options = {}, configuration = {})
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker image tag latest local
|
4
|
+
module DockerImageTagLatestLocal
|
5
|
+
# Backend method for docker image tag latest local.
|
6
|
+
# @return [String] latest local docker image tag
|
7
|
+
def docker_image_tag_latest_local
|
8
|
+
log.debug 'Getting latest local docker image tag'
|
9
|
+
|
10
|
+
return false unless docker_check_running
|
11
|
+
|
12
|
+
tags = docker_image_tag_list_local
|
13
|
+
|
14
|
+
tag_latest_local = tags[-1]
|
15
|
+
|
16
|
+
log.debug "Latest docker local tag: #{tag_latest_local}"
|
17
|
+
|
18
|
+
tag_latest_local
|
19
|
+
end
|
20
|
+
end
|
@@ -1,23 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# takelage docker image tag latest
|
4
|
-
module
|
5
|
-
# Backend method for docker image tag latest local.
|
6
|
-
# @return [String] latest local docker image tag
|
7
|
-
def docker_image_tag_latest_local
|
8
|
-
log.debug 'Getting latest local docker image tag'
|
9
|
-
|
10
|
-
return false unless docker_check_running
|
11
|
-
|
12
|
-
tags = docker_image_tag_list_local
|
13
|
-
|
14
|
-
tag_latest_local = tags[-1]
|
15
|
-
|
16
|
-
log.debug "Latest docker local tag: #{tag_latest_local}"
|
17
|
-
|
18
|
-
tag_latest_local
|
19
|
-
end
|
20
|
-
|
3
|
+
# takelage docker image tag latest remote
|
4
|
+
module DockerImageTagLatestRemote
|
21
5
|
# Backend method for docker image tag latest remote.
|
22
6
|
# @return [String] latest remote docker image tag
|
23
7
|
def docker_image_tag_latest_remote
|
@@ -6,8 +6,9 @@ module Takelage
|
|
6
6
|
include LoggingModule
|
7
7
|
include SystemModule
|
8
8
|
include ConfigModule
|
9
|
-
include
|
10
|
-
include
|
9
|
+
include DockerCheckRunning
|
10
|
+
include DockerImageTagListLocal
|
11
|
+
include DockerImageTagListRemote
|
11
12
|
|
12
13
|
# Initialize takelage docker image tag list
|
13
14
|
def initialize(args = [], local_options = {}, configuration = {})
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker image tag list local
|
4
|
+
module DockerImageTagListLocal
|
5
|
+
# Backend method for docker image tag list local.
|
6
|
+
# @return [Array] local docker image tags
|
7
|
+
def docker_image_tag_list_local
|
8
|
+
cmd_docker_tags =
|
9
|
+
format(
|
10
|
+
config.active['cmd_docker_image_tag_list_local_docker_images'],
|
11
|
+
docker_user: @docker_user,
|
12
|
+
docker_repo: @docker_repo
|
13
|
+
)
|
14
|
+
|
15
|
+
tags = (run cmd_docker_tags).split("\n")
|
16
|
+
|
17
|
+
VersionSorter.sort(tags)
|
18
|
+
end
|
19
|
+
end
|
@@ -1,22 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# takelage docker image tag list
|
4
|
-
module
|
5
|
-
# Backend method for docker image tag list local.
|
6
|
-
# @return [Array] local docker image tags
|
7
|
-
def docker_image_tag_list_local
|
8
|
-
cmd_docker_tags =
|
9
|
-
format(
|
10
|
-
config.active['cmd_docker_image_tag_list_local_docker_images'],
|
11
|
-
docker_user: @docker_user,
|
12
|
-
docker_repo: @docker_repo
|
13
|
-
)
|
14
|
-
|
15
|
-
tags = (run cmd_docker_tags).split("\n")
|
16
|
-
|
17
|
-
VersionSorter.sort(tags)
|
18
|
-
end
|
19
|
-
|
3
|
+
# takelage docker image tag list remote
|
4
|
+
module DockerImageTagListRemote
|
20
5
|
# Backend method for docker image tag list remote.
|
21
6
|
# @return [Array] remote docker image tags
|
22
7
|
def docker_image_tag_list_remote
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# takelage docker image
|
4
|
-
module
|
3
|
+
# takelage docker image uppdate
|
4
|
+
module DockerImageUpdate
|
5
5
|
# Backend method for docker image update.
|
6
6
|
def docker_image_update
|
7
7
|
return false unless docker_check_running
|
@@ -6,8 +6,12 @@ module Takelage
|
|
6
6
|
include LoggingModule
|
7
7
|
include SystemModule
|
8
8
|
include ConfigModule
|
9
|
-
include
|
10
|
-
include
|
9
|
+
include DockerCheckRunning
|
10
|
+
include DockerSocketLib
|
11
|
+
include DockerSocketHost
|
12
|
+
include DockerSocketScheme
|
13
|
+
include DockerSocketStart
|
14
|
+
include DockerSocketStop
|
11
15
|
|
12
16
|
# Initialize docker socket
|
13
17
|
def initialize(args = [], local_options = {}, configuration = {})
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker socket host
|
4
|
+
module DockerSocketHost
|
5
|
+
# Backend method for docker socket host.
|
6
|
+
def docker_socket_host
|
7
|
+
log.debug 'Getting docker socket host ip address'
|
8
|
+
|
9
|
+
socket_host = '127.0.0.1'
|
10
|
+
|
11
|
+
addr_infos = Socket.getifaddrs
|
12
|
+
|
13
|
+
# if interface docker0 exists (== linux host)
|
14
|
+
# then return the ip address
|
15
|
+
addr_infos.each do |addr_info|
|
16
|
+
if addr_info.name == 'docker0'
|
17
|
+
socket_host = addr_info.addr.ip_address if addr_info.addr.ipv4?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
log.debug "Docker socket host ip address is \"#{socket_host}\""
|
22
|
+
|
23
|
+
socket_host
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker socket lib
|
4
|
+
module DockerSocketLib
|
5
|
+
private
|
6
|
+
|
7
|
+
# Get socket start commands.
|
8
|
+
# sockets_up is a boolean which defines if the sockets need to be up
|
9
|
+
# to be included in the resulting array of socket start commands
|
10
|
+
def _docker_socket_lib_get_socket_start_commands(mode)
|
11
|
+
cmds_start_socket = []
|
12
|
+
|
13
|
+
# loop over sockets
|
14
|
+
@sockets.each do |socket, socket_config|
|
15
|
+
host = socket_config['host']
|
16
|
+
port = socket_config['port']
|
17
|
+
path = socket_config['path']
|
18
|
+
|
19
|
+
cmd = _docker_socket_lib_get_start_cmd(mode, socket, host, port, path)
|
20
|
+
cmds_start_socket.push cmd if cmd
|
21
|
+
end
|
22
|
+
|
23
|
+
cmds_start_socket
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get socket start command
|
27
|
+
def _docker_socket_lib_get_start_cmd(mode, socket, host, port, path)
|
28
|
+
if mode == 'start'
|
29
|
+
unless _docker_socket_lib_socket_up? socket, host, port, path
|
30
|
+
return _docker_socket_lib_start_cmd(host, port, path)
|
31
|
+
end
|
32
|
+
elsif _docker_socket_lib_socket_up? socket, host, port, path
|
33
|
+
return _docker_socket_lib_start_cmd(host, port, path)
|
34
|
+
end
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
|
38
|
+
# Get socket start command.
|
39
|
+
def _docker_socket_lib_start_cmd(host, port, path)
|
40
|
+
format(
|
41
|
+
config.active['cmd_docker_socket_get_start'],
|
42
|
+
host: host,
|
43
|
+
port: port,
|
44
|
+
path: path
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Check if a socket is available by trying to connect to it via TCP
|
49
|
+
def _docker_socket_lib_socket_up?(socket, host, port, path)
|
50
|
+
error_message = _docker_socket_lib_error_msg socket, host, port, path
|
51
|
+
begin
|
52
|
+
Timeout.timeout(1) do
|
53
|
+
_docker_socket_lib_socket_reachable? socket, host, port, error_message
|
54
|
+
end
|
55
|
+
rescue Timeout::Error
|
56
|
+
log.debug "Timeout: #{error_message}"
|
57
|
+
false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Create error message.
|
62
|
+
def _docker_socket_lib_error_msg(socket, host, port, path)
|
63
|
+
'failed to connect to ' \
|
64
|
+
"socket \"#{socket}\" " \
|
65
|
+
"using host \"#{host}\", " \
|
66
|
+
"port \"#{port}\", " \
|
67
|
+
"path \"#{path}\""
|
68
|
+
end
|
69
|
+
|
70
|
+
# Test socket.
|
71
|
+
# rubocop:disable Metrics/MethodLength
|
72
|
+
def _docker_socket_lib_socket_reachable?(socket, host, port, error_message)
|
73
|
+
begin
|
74
|
+
s = TCPSocket.new host, port
|
75
|
+
s.close
|
76
|
+
log.debug "Socket \"#{socket}\" up"
|
77
|
+
return true
|
78
|
+
rescue Errno::ECONNREFUSED
|
79
|
+
log.debug "Connection refused: #{error_message}"
|
80
|
+
rescue Errno::EHOSTUNREACH
|
81
|
+
log.debug "Host unreachable: #{error_message}"
|
82
|
+
rescue SocketError
|
83
|
+
log.debug "Socket error: #{error_message}"
|
84
|
+
end
|
85
|
+
false
|
86
|
+
end
|
87
|
+
# rubocop:enable Metrics/MethodLength
|
88
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker socket scheme
|
4
|
+
module DockerSocketScheme
|
5
|
+
# Backend method for docker socket scheme.
|
6
|
+
def docker_socket_scheme
|
7
|
+
log.debug 'Getting docker socket scheme'
|
8
|
+
|
9
|
+
gpg_path = _socket_get_agent_socket_path
|
10
|
+
gpg_port = config.active['docker_socket_gpg_agent_port']
|
11
|
+
ssh_path = _socket_get_agent_ssh_socket_path
|
12
|
+
ssh_port = config.active['docker_socket_gpg_ssh_agent_port']
|
13
|
+
|
14
|
+
socket_scheme = _socket_get_scheme gpg_path, gpg_port, ssh_path, ssh_port
|
15
|
+
log.debug 'Docker socket scheme is ' \
|
16
|
+
"\n\"\"\"\n#{hash_to_yaml socket_scheme}\"\"\""
|
17
|
+
|
18
|
+
socket_scheme
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
# Get gpg agent socket path.
|
24
|
+
def _socket_get_agent_socket_path
|
25
|
+
cmd_agent_socket_path =
|
26
|
+
config.active['cmd_docker_socket_config_agent_socket_path']
|
27
|
+
(run cmd_agent_socket_path).chomp
|
28
|
+
end
|
29
|
+
|
30
|
+
# Get gpg ssh agent socket path.
|
31
|
+
def _socket_get_agent_ssh_socket_path
|
32
|
+
cmd_agent_ssh_socket_path =
|
33
|
+
config.active['cmd_docker_socket_config_agent_ssh_socket_path']
|
34
|
+
(run cmd_agent_ssh_socket_path).chomp
|
35
|
+
end
|
36
|
+
|
37
|
+
# Create socket scheme.
|
38
|
+
def _socket_get_scheme(gpg_path, gpg_port, ssh_path, ssh_port)
|
39
|
+
{ 'agent-socket' => { 'path' => gpg_path,
|
40
|
+
'host' => @socket_host,
|
41
|
+
'port' => gpg_port },
|
42
|
+
'agent-ssh-socket' => { 'path' => ssh_path,
|
43
|
+
'host' => @socket_host,
|
44
|
+
'port' => ssh_port } }
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker socket start
|
4
|
+
module DockerSocketStart
|
5
|
+
# Backend method for docker socket start.
|
6
|
+
def docker_socket_start
|
7
|
+
log.debug 'Starting sockets for docker container'
|
8
|
+
|
9
|
+
return false unless docker_check_running
|
10
|
+
|
11
|
+
cmds_start_socket = _docker_socket_lib_get_socket_start_commands 'start'
|
12
|
+
|
13
|
+
return true if cmds_start_socket.empty?
|
14
|
+
|
15
|
+
_docker_socket_start_get_sudo
|
16
|
+
|
17
|
+
cmds_start_socket.each do |cmd_start_socket|
|
18
|
+
run_and_fork cmd_start_socket
|
19
|
+
end
|
20
|
+
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# Get sudo.
|
27
|
+
def _docker_socket_start_get_sudo
|
28
|
+
log.debug 'Request sudo so that ' \
|
29
|
+
'subsequent background tasks run without delay'
|
30
|
+
cmd_sudo_true =
|
31
|
+
config.active['cmd_docker_socket_start_sudo_true']
|
32
|
+
run cmd_sudo_true
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker socket stop
|
4
|
+
module DockerSocketStop
|
5
|
+
# Backend method for docker socket stop.
|
6
|
+
def docker_socket_stop
|
7
|
+
log.debug 'Stopping sockets for docker container'
|
8
|
+
|
9
|
+
return false unless docker_check_running
|
10
|
+
|
11
|
+
# get process list
|
12
|
+
# assuming format: "pid command"
|
13
|
+
cmd_ps =
|
14
|
+
config.active['cmd_docker_socket_stop_docker_socket_ps']
|
15
|
+
|
16
|
+
stdout_str = run cmd_ps
|
17
|
+
|
18
|
+
cmds_start_socket = _docker_socket_lib_get_socket_start_commands 'stop'
|
19
|
+
|
20
|
+
# loop over process list
|
21
|
+
stdout_str.split(/\n+/).each do |process|
|
22
|
+
_docker_socket_stop_kill_process process, cmds_start_socket
|
23
|
+
end
|
24
|
+
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# Stop process.
|
31
|
+
def _docker_socket_stop_kill_process(process, cmds_start_socket)
|
32
|
+
# split processes in process id and process command
|
33
|
+
pid_command = process.strip.split(/ /, 2)
|
34
|
+
pid = pid_command[0]
|
35
|
+
command = pid_command[1]
|
36
|
+
|
37
|
+
# loop over socket start commands
|
38
|
+
cmds_start_socket.each do |cmd_start_socket|
|
39
|
+
next unless command == cmd_start_socket
|
40
|
+
|
41
|
+
_docker_socket_stop_kill_pid pid
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Kill process.
|
46
|
+
def _docker_socket_stop_kill_pid(pid)
|
47
|
+
log.debug "Killing PID #{pid}"
|
48
|
+
cmd_kill =
|
49
|
+
format(
|
50
|
+
config.active['cmd_docker_socket_stop_docker_socket_kill'],
|
51
|
+
pid: pid
|
52
|
+
)
|
53
|
+
run cmd_kill
|
54
|
+
end
|
55
|
+
end
|