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
@@ -1,122 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # takelage bit scope module
4
- module BitScopeModule
5
- # Backend method for bit scope add.
6
- def bit_scope_add(scope)
7
- log.debug "Adding bit remote scope \"#{scope}\" to local workspace"
8
-
9
- return false unless configured? %w[bit_ssh bit_remote]
10
-
11
- return false unless _bit_scope_add_workspace_ready?
12
-
13
- # check if bit remote scope exists
14
- unless bit_scope_list.include? scope
15
- log.error "The bit remote bit scope \"#{scope}\" doesn't exist"
16
- return false
17
- end
18
-
19
- run "bit remote add #{config.active['bit_remote']}/#{scope}"
20
-
21
- log.info "Added bit remote scope \"#{scope}\" to local bit workspace"
22
- end
23
-
24
- # Backend method for bit scope inbit.
25
- def bit_scope_inbit
26
- log.debug 'Logging in to bit remote server'
27
-
28
- return false unless configured? %w[bit_ssh]
29
-
30
- run_and_exit config.active['bit_ssh']
31
- end
32
-
33
- # Backend method for bit scope list.
34
- # @return [String] list of bit scopes
35
- def bit_scope_list
36
- log.debug 'Listing bit remote scopes'
37
-
38
- return false unless configured? %w[bit_ssh bit_remote]
39
-
40
- # get ssh command from active config
41
- cmd_bit_ssh =
42
- config.active['bit_ssh']
43
-
44
- root = config.active['bit_root']
45
-
46
- cmd_bit_scope_list = _bit_scope_list_cmd root
47
-
48
- # run ssh command with scope list command
49
- scope_list = run "#{cmd_bit_ssh} '#{cmd_bit_scope_list}'"
50
-
51
- # remove bit remote root directory from results
52
- scope_list.gsub!(%r{#{root}/*}, '')
53
-
54
- # remove /scope.json from results
55
- scope_list.gsub!(%r{/scope.json}, '')
56
-
57
- scope_list
58
- end
59
-
60
- # Backend method for bit scope new.
61
- # @return [Int] status of new command
62
- def bit_scope_new(scope)
63
- log.debug "Creating new bit remote scope \"#{scope}\""
64
-
65
- return false unless configured? %w[bit_ssh bit_remote]
66
-
67
- return false if _bit_scope_exists? scope
68
-
69
- cmd_bit_ssh = config.active['bit_ssh']
70
-
71
- cmd_bit_scope_new = _bit_scope_new_cmd scope
72
-
73
- run "#{cmd_bit_ssh} '#{cmd_bit_scope_new}'"
74
-
75
- log.info "Created new bit remote scope \"#{scope}\""
76
- end
77
-
78
- private
79
-
80
- # Check if workspace ready for bit scope add.
81
- def _bit_scope_add_workspace_ready?
82
- unless bit_check_workspace
83
- log.error 'No bit workspace'
84
- return false
85
- end
86
-
87
- return true unless git_check_workspace
88
-
89
- return true if git_check_master
90
-
91
- log.error 'Not on git master branch'
92
- false
93
- end
94
-
95
- # Prepare bit scope list command.
96
- def _bit_scope_list_cmd(root)
97
- format(
98
- config.active['cmd_bit_scope_list_find_scopes'],
99
- root: root
100
- )
101
- end
102
-
103
- # Check if bit scope already exists.
104
- def _bit_scope_exists?(scope)
105
- scope_list = bit_scope_list
106
- return false unless scope_list.include? scope
107
-
108
- log.error "The remote bit scope \"#{scope}\" already exists"
109
- false
110
- end
111
-
112
- # Prepare bit scope new command.
113
- def _bit_scope_new_cmd(scope)
114
- root = config.active['bit_root']
115
-
116
- format(
117
- config.active['cmd_bit_scope_new_bit_init'],
118
- scope: scope,
119
- root: root
120
- )
121
- end
122
- end
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # takelage docker container check module
4
- module DockerContainerCheckModule
5
- # Backend method for docker container check existing.
6
- # @return [Boolean] is container existing?
7
- def docker_container_check_existing(container)
8
- log.debug "Checking if container \"#{container}\" is existing"
9
-
10
- return false unless docker_check_running
11
-
12
- stdout_str = run _docker_container_cmd_check_existing container
13
-
14
- if stdout_str.to_s.strip.empty?
15
- log.debug "Container \"#{container}\" is not existing"
16
- return false
17
- end
18
-
19
- log.debug "Container \"#{container}\" is existing"
20
- true
21
- end
22
-
23
- # Backend method for docker container check network.
24
- # @return [Boolean] is network existing?
25
- def docker_container_check_network(network)
26
- log.debug "Checking if network \"#{network}\" is existing"
27
-
28
- return false unless docker_check_running
29
-
30
- stdout_str = run _docker_container_cmd_check_network network
31
-
32
- if stdout_str.to_s.strip.empty?
33
- log.debug "Network \"#{network}\" is not existing"
34
- return false
35
- end
36
-
37
- log.debug "Network \"#{network}\" is existing"
38
- true
39
- end
40
-
41
- # Backend method for docker container check orphaned.
42
- # @return [Boolean] is container orphaned?
43
- def docker_container_check_orphaned(container)
44
- log.debug "Check if container \"#{container}\" is orphaned"
45
-
46
- return false unless docker_check_running
47
-
48
- stdout_str = run _docker_container_cmd_check_orphaned container
49
-
50
- if stdout_str.include? '/loginpoint.py'
51
- log.debug "Container \"#{container}\" isn't orphaned"
52
- return false
53
- end
54
-
55
- log.debug "Container \"#{container}\" is orphaned"
56
- true
57
- end
58
-
59
- private
60
-
61
- def _docker_container_cmd_check_existing(container)
62
- format(
63
- config.active['cmd_docker_container_check_existing_docker_ps'],
64
- container: container
65
- )
66
- end
67
-
68
- def _docker_container_cmd_check_network(network)
69
- format(
70
- config.active['cmd_docker_container_check_network_docker_network'],
71
- network: network
72
- )
73
- end
74
-
75
- def _docker_container_cmd_check_orphaned(container)
76
- format(
77
- config.active['cmd_docker_container_check_orphaned_docker_exec'],
78
- container: container
79
- )
80
- end
81
- end
@@ -1,295 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # takelage docker container module
4
- module DockerContainerModule
5
- # Backend method for docker container run.
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
-
13
- _create_network @hostname unless docker_container_check_network @hostname
14
-
15
- unless docker_container_check_existing @hostname
16
- return false unless _docker_container_create_container @hostname
17
- end
18
-
19
- _run_command_in_container @hostname, command
20
- end
21
-
22
- # Backend method for docker container daemon.
23
- def docker_container_daemon
24
- log.debug 'Starting docker container as daemon'
25
-
26
- return false unless docker_check_running
27
-
28
- _create_network @hostname unless docker_container_check_network @hostname
29
-
30
- unless docker_container_check_existing @hostname
31
- return false unless _docker_container_create_container @hostname
32
- end
33
-
34
- true
35
- end
36
-
37
- # Backend method for docker container login.
38
- def docker_container_login
39
- log.debug 'Logging in to docker container'
40
-
41
- return false unless docker_check_running
42
-
43
- _docker_container_login_check_outdated
44
- docker_socket_start
45
- _create_network @hostname unless docker_container_check_network @hostname
46
-
47
- unless docker_container_check_existing @hostname
48
- return false unless _docker_container_create_container @hostname
49
- end
50
-
51
- cmd_enter_container = _docker_container_enter_container @hostname
52
-
53
- run_and_exit cmd_enter_container
54
- end
55
-
56
- # Backend method for docker container nuke.
57
- def docker_container_nuke
58
- log.debug 'Removing all docker containers'
59
-
60
- return false unless docker_check_running
61
-
62
- return false if _docker_container_harakiri?
63
-
64
- networks = _docker_container_kill_existing_containers
65
-
66
- networks.each do |network|
67
- _remove_network network if docker_container_check_network network
68
- end
69
- end
70
-
71
- # Backend method for docker container purge.
72
- def docker_container_purge
73
- log.debug 'Removing orphaned docker containers'
74
-
75
- return false unless docker_check_running
76
-
77
- networks = _docker_container_kill_orphaned_containers
78
-
79
- networks.each do |network|
80
- _remove_network network if docker_container_check_network network
81
- end
82
- end
83
-
84
- private
85
-
86
- # Check if newer docker container is available.
87
- def _docker_container_login_check_outdated
88
- return if @docker_tag == 'latest'
89
-
90
- outdated = docker_image_check_outdated @docker_tag
91
- return unless outdated
92
-
93
- tag_latest = docker_image_tag_latest_remote
94
- log.warn "#{@docker_user}/#{@docker_repo}:#{@docker_tag} is outdated"
95
- log.warn "#{@docker_user}/#{@docker_repo}:#{tag_latest} is available"
96
- end
97
-
98
- # Create docker container.
99
- # rubocop:disable Metrics/MethodLength
100
- def _docker_container_create_container(container)
101
- log.debug "Creating container \"#{container}\""
102
-
103
- image = "#{@docker_user}/#{@docker_repo}:#{@docker_tag}"
104
-
105
- return false unless _docker_container_image_available? image
106
-
107
- log.debug "Using docker image \"#{image}\""
108
-
109
- unless @socket_host == '127.0.0.1'
110
- addhost = "--add-host host.docker.internal:#{@socket_host}"
111
- end
112
-
113
- entrypoint = '/entrypoint.py '
114
- volume_dev = ''
115
- if options[:development]
116
- entrypoint += ' --debug '
117
- volume_dev = "--volume #{@workdir}/#{@docker_debug}:/debug "
118
- end
119
-
120
- cmd_docker_create =
121
- format(
122
- config.active['cmd_docker_container_create'],
123
- workdir: @workdir,
124
- timezone: @timezone,
125
- container: container,
126
- dockersock: @dockersock,
127
- homedir: @homedir,
128
- volume_dev: volume_dev,
129
- image: image,
130
- addhost: addhost,
131
- dockerrun_options: @dockerrun_options,
132
- entrypoint: entrypoint,
133
- gid: @gid,
134
- uid: @uid,
135
- username: @username,
136
- gpg_agent_port: @gpg_agent_port,
137
- gpg_ssh_agent_port: @gpg_ssh_agent_port,
138
- extra: @entrypoint_extra,
139
- entrypoint_options: @entrypoint_options
140
- )
141
-
142
- run cmd_docker_create
143
- true
144
- end
145
- # rubocop:enable Metrics/MethodLength
146
-
147
- # Check if docker image is available
148
- def _docker_container_image_available?(image)
149
- return true if docker_image_tag_list_local.include? @docker_tag
150
-
151
- log.error "No local image \"#{image}\" available"
152
- log.info "Try: docker pull #{image}"
153
- false
154
- end
155
-
156
- # Create docker network.
157
- def _create_network(network)
158
- log.debug "Create network \"#{network}\""
159
-
160
- cmd_create_network =
161
- format(
162
- config.active['cmd_docker_container_create_network'],
163
- network: network
164
- )
165
-
166
- run cmd_create_network
167
- end
168
-
169
- # Enter existing docker container.
170
- def _docker_container_enter_container(container)
171
- log.debug "Entering container \"#{container}\""
172
-
173
- loginpoint = '/loginpoint.py'
174
- loginpoint += ' --debug ' if options[:development]
175
-
176
- format(
177
- config.active['cmd_docker_container_enter_container'],
178
- container: container,
179
- loginpoint: loginpoint,
180
- username: @username
181
- )
182
- end
183
-
184
- # Check if we are running tau nuke inside a takelage container
185
- def _docker_container_harakiri?
186
- hostname = ENV['HOSTNAME'] || ''
187
- return false unless hostname.start_with? "#{@docker_repo}_"
188
-
189
- log.error "Please run \"tau nuke\" outside of #{@docker_repo} containers"
190
- log.info "Run \"tau purge\" to remove orphaned #{@docker_repo} containers"
191
- true
192
- end
193
-
194
- # Get container name by id.
195
- def _docker_container_get_container_name_by_id(container)
196
- log.debug "Getting name of container \"#{container}\""
197
-
198
- cmd_get_container_name_by_id =
199
- format(
200
- config.active['cmd_docker_container_get_container_name'],
201
- container: container
202
- )
203
-
204
- stdout_str = run cmd_get_container_name_by_id
205
-
206
- name = stdout_str.chomp
207
-
208
- log.debug "Container #{container} has name \"#{name}\""
209
-
210
- name
211
- end
212
-
213
- # Get all docker containers.
214
- # @return [Array] list of docker containers
215
- def _docker_container_get_containers
216
- log.debug "Getting all containers of image \"#{@docker_repo}\""
217
-
218
- cmd_docker_get =
219
- format(
220
- config.active['cmd_docker_container_get_containers'],
221
- docker_repo: @docker_repo
222
- )
223
-
224
- stdout_str = run cmd_docker_get
225
-
226
- # convert stdout lines to array and return array
227
- stdout_str.split(/\n+/)
228
- end
229
-
230
- # Kill all docker containers and return list of networks
231
- def _docker_container_kill_existing_containers
232
- networks = []
233
- _docker_container_get_containers.each do |container|
234
- name = _docker_container_get_container_name_by_id container
235
- _docker_container_stop_container container
236
- networks << name unless networks.include? name
237
- end
238
- networks
239
- end
240
-
241
- # Kill orphaned docker containers and return list of networks
242
- def _docker_container_kill_orphaned_containers
243
- networks = []
244
-
245
- _docker_container_get_containers.each do |container|
246
- next unless docker_container_check_orphaned container
247
-
248
- name = _docker_container_get_container_name_by_id container
249
- _docker_container_stop_container container
250
- networks << name unless networks.include? name
251
- end
252
- networks
253
- end
254
-
255
- # Remove docker network.
256
- def _remove_network(network)
257
- log.debug "Remove network \"#{network}\""
258
-
259
- cmd_remove_network =
260
- format(
261
- config.active['cmd_docker_container_remove_network'],
262
- network: network
263
- )
264
-
265
- run cmd_remove_network
266
- end
267
-
268
- # Enter existing docker container.
269
- def _run_command_in_container(container, command)
270
- log.debug "Running command \"#{command}\" in container \"#{container}\""
271
-
272
- cmd_docker_run_command =
273
- format(
274
- config.active['cmd_docker_container_docker_exec'],
275
- container: container,
276
- username: @username,
277
- command: command
278
- )
279
-
280
- run_and_exit cmd_docker_run_command
281
- end
282
-
283
- # Stop container.
284
- def _docker_container_stop_container(container)
285
- log.debug "Stopping container \"#{container}\""
286
-
287
- cmd_docker_stop =
288
- format(
289
- config.active['cmd_docker_container_stop_container'],
290
- container: container
291
- )
292
-
293
- run cmd_docker_stop
294
- end
295
- end