takelage 0.13.3 → 0.14.0

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