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,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage 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_running
10
+
11
+ docker_socket_start
12
+ return false unless _docker_container_lib_create_net_and_ctr @hostname
13
+
14
+ _docker_container_command_run_command @hostname, command
15
+ end
16
+
17
+ private
18
+
19
+ # Prepare run command in container command.
20
+ def _docker_container_command_run_command(container, command)
21
+ log.debug "Running command \"#{command}\" in container \"#{container}\""
22
+
23
+ cmd_docker_run_command =
24
+ format(
25
+ config.active['cmd_docker_container_docker_exec'],
26
+ container: container,
27
+ username: @username,
28
+ command: command
29
+ )
30
+
31
+ run_and_exit cmd_docker_run_command
32
+ end
33
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage 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_running
10
+
11
+ _docker_container_lib_create_net_and_ctr @hostname
12
+ end
13
+ end
@@ -0,0 +1,149 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage docker container lib
4
+ module DockerContainerLib
5
+ private
6
+
7
+ # Create docker container and network.
8
+ def _docker_container_lib_create_net_and_ctr(name)
9
+ unless docker_container_check_network name
10
+ _docker_container_lib_create_network name
11
+ end
12
+
13
+ return true if docker_container_check_existing name
14
+
15
+ _docker_container_lib_create_container name
16
+ end
17
+
18
+ # Remove docker networks.
19
+ def _docker_container_lib_remove_networks(networks)
20
+ networks.each do |network|
21
+ if docker_container_check_network network
22
+ _docker_container_lib_remove_network network
23
+ end
24
+ end
25
+ end
26
+
27
+ # Create docker network.
28
+ def _docker_container_lib_create_network(network)
29
+ log.debug "Create network \"#{network}\""
30
+
31
+ cmd_create_network = format(
32
+ config.active['cmd_docker_container_create_network'],
33
+ network: network
34
+ )
35
+
36
+ run cmd_create_network
37
+ end
38
+
39
+ # Remove docker network.
40
+ def _docker_container_lib_remove_network(network)
41
+ log.debug "Remove network \"#{network}\""
42
+
43
+ cmd_remove_network = format(
44
+ config.active['cmd_docker_container_remove_network'],
45
+ network: network
46
+ )
47
+
48
+ run cmd_remove_network
49
+ end
50
+
51
+ # Create docker container.
52
+ # rubocop:disable Metrics/MethodLength
53
+ def _docker_container_lib_create_container(container)
54
+ log.debug "Creating container \"#{container}\""
55
+
56
+ image = "#{@docker_user}/#{@docker_repo}:#{@docker_tag}"
57
+
58
+ return false unless _docker_container_lib_image_available? image
59
+
60
+ log.debug "Using docker image \"#{image}\""
61
+
62
+ unless @socket_host == '127.0.0.1'
63
+ addhost = "--add-host host.docker.internal:#{@socket_host}"
64
+ end
65
+
66
+ entrypoint = '/entrypoint.py '
67
+ volume_dev = ''
68
+ if options[:development]
69
+ entrypoint += ' --debug '
70
+ volume_dev = "--volume #{@workdir}/#{@docker_debug}:/debug "
71
+ end
72
+
73
+ cmd_docker_create = format(
74
+ config.active['cmd_docker_container_create'],
75
+ workdir: @workdir,
76
+ timezone: @timezone,
77
+ container: container,
78
+ dockersock: @dockersock,
79
+ homedir: @homedir,
80
+ volume_dev: volume_dev,
81
+ image: image,
82
+ addhost: addhost,
83
+ dockerrun_options: @dockerrun_options,
84
+ entrypoint: entrypoint,
85
+ gid: @gid,
86
+ uid: @uid,
87
+ username: @username,
88
+ gpg_agent_port: @gpg_agent_port,
89
+ gpg_ssh_agent_port: @gpg_ssh_agent_port,
90
+ extra: @entrypoint_extra,
91
+ entrypoint_options: @entrypoint_options
92
+ )
93
+
94
+ try cmd_docker_create
95
+ end
96
+
97
+ # rubocop:enable Metrics/MethodLength
98
+
99
+ # Check if docker image is available
100
+ def _docker_container_lib_image_available?(image)
101
+ return true if docker_image_tag_list_local.include? @docker_tag
102
+
103
+ log.error "No local image \"#{image}\" available"
104
+ log.info "Try: docker pull #{image}"
105
+ false
106
+ end
107
+
108
+ # Get container name by id.
109
+ def _docker_container_lib_get_container_name_by_id(container)
110
+ log.debug "Getting name of container \"#{container}\""
111
+
112
+ cmd_get_container_name_by_id = format(
113
+ config.active['cmd_docker_container_get_container_name'],
114
+ container: container
115
+ )
116
+
117
+ name = (run cmd_get_container_name_by_id).chomp
118
+
119
+ log.debug "Container #{container} has name \"#{name}\""
120
+
121
+ name
122
+ end
123
+
124
+ # Get all docker containers.
125
+ # @return [Array] list of docker containers
126
+ def _docker_container_lib_get_containers
127
+ log.debug "Getting all containers of image \"#{@docker_repo}\""
128
+
129
+ cmd_docker_get = format(
130
+ config.active['cmd_docker_container_get_containers'],
131
+ docker_repo: @docker_repo
132
+ )
133
+
134
+ # convert stdout lines to array and return array
135
+ (run cmd_docker_get).split(/\n+/)
136
+ end
137
+
138
+ # Stop container.
139
+ def _docker_container_lib_stop_container(container)
140
+ log.debug "Stopping container \"#{container}\""
141
+
142
+ cmd_docker_stop = format(
143
+ config.active['cmd_docker_container_stop_container'],
144
+ container: container
145
+ )
146
+
147
+ run cmd_docker_stop
148
+ end
149
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage 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_running
10
+
11
+ _docker_container_login_check_outdated
12
+ docker_socket_start
13
+ return false unless _docker_container_lib_create_net_and_ctr @hostname
14
+
15
+ run_and_exit _docker_container_login_enter_container @hostname
16
+ end
17
+
18
+ private
19
+
20
+ # Check if newer docker container is available.
21
+ def _docker_container_login_check_outdated
22
+ return if @docker_tag == 'latest'
23
+
24
+ outdated = docker_image_check_outdated @docker_tag
25
+ return unless outdated
26
+
27
+ tag_latest = docker_image_tag_latest_remote
28
+ log.warn "#{@docker_user}/#{@docker_repo}:#{@docker_tag} is outdated"
29
+ log.warn "#{@docker_user}/#{@docker_repo}:#{tag_latest} is available"
30
+ end
31
+
32
+ # Prepare enter existing container command.
33
+ def _docker_container_login_enter_container(container)
34
+ log.debug "Entering container \"#{container}\""
35
+
36
+ loginpoint = '/loginpoint.py'
37
+ loginpoint += ' --debug ' if options[:development]
38
+
39
+ format(
40
+ config.active['cmd_docker_container_enter_container'],
41
+ container: container,
42
+ loginpoint: loginpoint,
43
+ username: @username
44
+ )
45
+ end
46
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage docker container nuke
4
+ module DockerContainerNuke
5
+ # Backend method for docker container nuke.
6
+ def docker_container_nuke
7
+ log.debug 'Removing all docker containers'
8
+
9
+ return false unless docker_check_running
10
+
11
+ return false if _docker_container_nuke_harakiri?
12
+
13
+ networks = _docker_container_nuke_kill_existing_containers
14
+ _docker_container_lib_remove_networks networks
15
+ end
16
+
17
+ private
18
+
19
+ # Check if we are running tau nuke inside a takelage container
20
+ def _docker_container_nuke_harakiri?
21
+ hostname = ENV['HOSTNAME'] || ''
22
+ return false unless hostname.start_with? "#{@docker_repo}_"
23
+
24
+ log.error "Please run \"tau nuke\" outside of #{@docker_repo} containers"
25
+ log.info "Run \"tau purge\" to remove orphaned #{@docker_repo} containers"
26
+ true
27
+ end
28
+
29
+ # Kill all docker containers and return list of networks
30
+ def _docker_container_nuke_kill_existing_containers
31
+ networks = []
32
+ _docker_container_lib_get_containers.each do |container|
33
+ name = _docker_container_lib_get_container_name_by_id container
34
+ _docker_container_lib_stop_container container
35
+ networks << name unless networks.include? name
36
+ end
37
+ networks
38
+ end
39
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage docker container purge
4
+ module DockerContainerPurge
5
+ # Backend method for docker container purge.
6
+ def docker_container_purge
7
+ log.debug 'Removing orphaned docker containers'
8
+
9
+ return false unless docker_check_running
10
+
11
+ networks = _docker_container_purge_kill_orphaned_containers
12
+ _docker_container_lib_remove_networks networks
13
+ end
14
+
15
+ private
16
+
17
+ # Kill orphaned docker containers and return list of networks
18
+ def _docker_container_purge_kill_orphaned_containers
19
+ networks = []
20
+
21
+ _docker_container_lib_get_containers.each do |container|
22
+ next unless docker_container_check_orphaned container
23
+
24
+ name = _docker_container_lib_get_container_name_by_id container
25
+ _docker_container_lib_stop_container container
26
+ networks << name unless networks.include? name
27
+ end
28
+ networks
29
+ end
30
+ end
@@ -6,10 +6,10 @@ module Takelage
6
6
  include LoggingModule
7
7
  include SystemModule
8
8
  include ConfigModule
9
- include DockerCheckModule
10
- include DockerImageTagListModule
11
- include DockerImageTagLatestModule
12
- include DockerImageCheckModule
9
+ include DockerCheckRunning
10
+ include DockerImageTagListRemote
11
+ include DockerImageTagLatestRemote
12
+ include DockerImageCheckOutdated
13
13
 
14
14
  # Initialize takelage docker image check
15
15
  def initialize(args = [], local_options = {}, configuration = {})
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # takelage docker image check module
4
- module DockerImageCheckModule
3
+ # takelage docker image check outdated
4
+ module DockerImageCheckOutdated
5
5
  # Backend method for docker image check outdated.
6
6
  # @return [Boolean] is docker image tag older than latest remote image tag?
7
- # rubocop:disable Style/RedundantSort
8
7
  def docker_image_check_outdated(tag)
9
8
  log.debug "Check if docker image version \"#{tag}\" is outdated"
10
9
 
@@ -14,15 +13,15 @@ module DockerImageCheckModule
14
13
 
15
14
  tag_latest_remote = docker_image_tag_latest_remote
16
15
  tags = [tag, docker_image_tag_latest_remote]
16
+ # rubocop:disable Style/RedundantSort
17
17
  outdated = (tag != VersionSorter.sort(tags).last)
18
+ # rubocop:enable Style/RedundantSort
18
19
 
19
20
  _docker_outdated_log_info tag, tag_latest_remote if outdated
20
21
 
21
22
  outdated
22
23
  end
23
24
 
24
- # rubocop:enable Style/RedundantSort
25
-
26
25
  private
27
26
 
28
27
  # Check if the tag is "latest".
@@ -6,10 +6,10 @@ module Takelage
6
6
  include LoggingModule
7
7
  include SystemModule
8
8
  include ConfigModule
9
- include DockerCheckModule
10
- include DockerImageTagListModule
11
- include DockerImageTagLatestModule
12
- include DockerImageModule
9
+ include DockerCheckRunning
10
+ include DockerImageTagListRemote
11
+ include DockerImageTagLatestRemote
12
+ include DockerImageUpdate
13
13
 
14
14
  # Initialize takelage docker image
15
15
  def initialize(args = [], local_options = {}, configuration = {})
@@ -6,9 +6,10 @@ module Takelage
6
6
  include LoggingModule
7
7
  include SystemModule
8
8
  include ConfigModule
9
- include DockerCheckModule
10
- include DockerImageTagListModule
11
- include DockerImageTagCheckModule
9
+ include DockerCheckRunning
10
+ include DockerImageTagListRemote
11
+ include DockerImageTagCheckLocal
12
+ include DockerImageTagCheckRemote
12
13
 
13
14
  # Initialize takelage docker image tag check
14
15
  def initialize(args = [], local_options = {}, configuration = {})
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # takelage docker image tag check module
4
- module DockerImageTagCheckModule
3
+ # takelage docker image tag check local
4
+ module DockerImageTagCheckLocal
5
5
  # Backend method for docker image check tag local.
6
6
  # @return [Boolean] does local docker image tag exist?
7
7
  def docker_image_tag_check_local(tag)
@@ -22,26 +22,6 @@ module DockerImageTagCheckModule
22
22
  true
23
23
  end
24
24
 
25
- # Backend method for docker image check tag remote.
26
- # @return [Boolean] does remote docker image tag exist?
27
- def docker_image_tag_check_remote(tag)
28
- log.debug "Check if remote image tag \"#{tag}\" exists"
29
-
30
- return false unless docker_check_running
31
-
32
- if tag.to_s.strip.empty?
33
- log.warn 'No remote docker image tag specified'
34
- return false
35
- end
36
-
37
- image = "#{@docker_user}/#{@docker_repo}:#{tag}"
38
-
39
- return false unless _docker_iamge_check_remote_image? image, tag
40
-
41
- log.debug "Found remote docker image \"#{image}\""
42
- true
43
- end
44
-
45
25
  private
46
26
 
47
27
  # Check if local image exists.
@@ -59,16 +39,4 @@ module DockerImageTagCheckModule
59
39
 
60
40
  true
61
41
  end
62
-
63
- # Check if remote image exists.
64
- def _docker_iamge_check_remote_image?(image, tag)
65
- tags = docker_image_tag_list_remote
66
-
67
- unless tags != false && tags.include?(tag)
68
- log.debug "No remote docker image \"#{image}\" found"
69
- return false
70
- end
71
-
72
- true
73
- end
74
42
  end