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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/lib/takelage.rb +37 -14
  3. data/lib/takelage/bit/check/cli.rb +1 -1
  4. data/lib/takelage/bit/check/{module.rb → workspace.rb} +2 -2
  5. data/lib/takelage/bit/clipboard/cli.rb +9 -3
  6. data/lib/takelage/bit/clipboard/copy.rb +140 -0
  7. data/lib/takelage/bit/clipboard/lib.rb +153 -0
  8. data/lib/takelage/bit/clipboard/paste.rb +58 -0
  9. data/lib/takelage/bit/clipboard/pull.rb +38 -0
  10. data/lib/takelage/bit/clipboard/push.rb +37 -0
  11. data/lib/takelage/bit/scope/add.rb +55 -0
  12. data/lib/takelage/bit/scope/cli.rb +7 -3
  13. data/lib/takelage/bit/scope/inbit.rb +13 -0
  14. data/lib/takelage/bit/scope/list.rb +41 -0
  15. data/lib/takelage/bit/scope/new.rb +44 -0
  16. data/lib/takelage/default.yml +4 -3
  17. data/lib/takelage/docker/check/cli.rb +1 -1
  18. data/lib/takelage/docker/check/{module.rb → running.rb} +2 -2
  19. data/lib/takelage/docker/container/check/cli.rb +4 -2
  20. data/lib/takelage/docker/container/check/existing.rb +31 -0
  21. data/lib/takelage/docker/container/check/network.rb +31 -0
  22. data/lib/takelage/docker/container/check/orphaned.rb +31 -0
  23. data/lib/takelage/docker/container/cli.rb +35 -34
  24. data/lib/takelage/docker/container/command.rb +33 -0
  25. data/lib/takelage/docker/container/daemon.rb +13 -0
  26. data/lib/takelage/docker/container/lib.rb +149 -0
  27. data/lib/takelage/docker/container/login.rb +46 -0
  28. data/lib/takelage/docker/container/nuke.rb +39 -0
  29. data/lib/takelage/docker/container/purge.rb +30 -0
  30. data/lib/takelage/docker/image/check/cli.rb +4 -4
  31. data/lib/takelage/docker/image/check/{module.rb → outdated.rb} +4 -5
  32. data/lib/takelage/docker/image/cli.rb +4 -4
  33. data/lib/takelage/docker/image/tag/check/cli.rb +4 -3
  34. data/lib/takelage/docker/image/tag/check/{module.rb → local.rb} +2 -34
  35. data/lib/takelage/docker/image/tag/check/remote.rb +38 -0
  36. data/lib/takelage/docker/image/tag/latest/cli.rb +5 -3
  37. data/lib/takelage/docker/image/tag/latest/local.rb +20 -0
  38. data/lib/takelage/docker/image/tag/latest/{module.rb → remote.rb} +2 -18
  39. data/lib/takelage/docker/image/tag/list/cli.rb +3 -2
  40. data/lib/takelage/docker/image/tag/list/local.rb +19 -0
  41. data/lib/takelage/docker/image/tag/list/{module.rb → remote.rb} +2 -17
  42. data/lib/takelage/docker/image/{module.rb → update.rb} +2 -2
  43. data/lib/takelage/docker/socket/cli.rb +6 -2
  44. data/lib/takelage/docker/socket/host.rb +25 -0
  45. data/lib/takelage/docker/socket/lib.rb +88 -0
  46. data/lib/takelage/docker/socket/scheme.rb +46 -0
  47. data/lib/takelage/docker/socket/start.rb +34 -0
  48. data/lib/takelage/docker/socket/stop.rb +55 -0
  49. data/lib/takelage/git/check/clean.rb +46 -0
  50. data/lib/takelage/git/check/cli.rb +3 -1
  51. data/lib/takelage/git/check/master.rb +26 -0
  52. data/lib/takelage/git/check/workspace.rb +33 -0
  53. data/lib/takelage/self/cli.rb +1 -1
  54. data/lib/takelage/self/{module.rb → list.rb} +2 -2
  55. data/lib/takelage/version +1 -1
  56. metadata +38 -15
  57. data/lib/takelage/bit/clipboard/module.rb +0 -401
  58. data/lib/takelage/bit/scope/module.rb +0 -122
  59. data/lib/takelage/docker/container/check/module.rb +0 -81
  60. data/lib/takelage/docker/container/module.rb +0 -295
  61. data/lib/takelage/docker/socket/module.rb +0 -227
  62. 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 DockerCheckModule
10
- include DockerImageTagListModule
11
- include DockerImageTagLatestModule
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 module
4
- module DockerImageTagLatestModule
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 DockerCheckModule
10
- include DockerImageTagListModule
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 module
4
- module DockerImageTagListModule
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 module
4
- module DockerImageModule
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 DockerCheckModule
10
- include DockerSocketModule
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