takelage 0.13.3 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|