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,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