takelage 0.4.5 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/takelage/bit/check/module.rb +2 -2
- data/lib/takelage/bit/clipboard/module.rb +3 -3
- data/lib/takelage/bit/scope/module.rb +1 -1
- data/lib/takelage/docker/check/cli.rb +23 -0
- data/lib/takelage/docker/check/module.rb +21 -0
- data/lib/takelage/docker/cli.rb +3 -0
- data/lib/takelage/docker/container/check/cli.rb +1 -0
- data/lib/takelage/docker/container/check/module.rb +9 -3
- data/lib/takelage/docker/container/cli.rb +1 -0
- data/lib/takelage/docker/container/module.rb +12 -2
- data/lib/takelage/docker/image/cli.rb +1 -0
- data/lib/takelage/docker/image/module.rb +9 -10
- data/lib/takelage/docker/image/tag/check/cli.rb +1 -0
- data/lib/takelage/docker/image/tag/check/module.rb +5 -1
- data/lib/takelage/docker/image/tag/latest/cli.rb +1 -0
- data/lib/takelage/docker/image/tag/latest/module.rb +9 -0
- data/lib/takelage/docker/image/tag/list/cli.rb +1 -0
- data/lib/takelage/docker/image/tag/list/module.rb +6 -5
- data/lib/takelage/docker/socket/cli.rb +1 -0
- data/lib/takelage/docker/socket/module.rb +6 -2
- data/lib/takelage/git/check/module.rb +6 -6
- data/lib/takelage/lib/system.rb +11 -29
- data/lib/takelage/version +1 -1
- data/lib/takelage.rb +2 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e94a030afd607b722c46cdb7672eab62d2164b979a667f81adbacf5cfc62fe41
|
4
|
+
data.tar.gz: 0a69ac6c28f9212278be3801153eef5e7b15ed746936f02b16bb1d346df2a1d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36a7abc07a493f918c12355bad5b84fea6488993e32cf78d5e8bb1b0d530beb12825d4cba651e03b9a84e2285f40ebd9667eb9c7e66a0fb990785e26da3754cd
|
7
|
+
data.tar.gz: dadcb5a7aaf475e143477bca61af6edccbc2e029aefd91c46c100b5bc9d5f369eb4fb881aab02ac73e136dbb503e4225b5b6fa72608705f3c3b3c5adcf10e8f9
|
@@ -7,10 +7,10 @@ module BitCheckModule
|
|
7
7
|
log.debug 'Check if this is a bit workspace'
|
8
8
|
|
9
9
|
cmd_bit_repo = config.active['bit_repo']
|
10
|
-
|
10
|
+
status_repo = try cmd_bit_repo
|
11
11
|
|
12
12
|
cmd_pwd = config.active['pwd']
|
13
|
-
stdout_str_dir
|
13
|
+
stdout_str_dir = run cmd_pwd
|
14
14
|
|
15
15
|
dir = stdout_str_dir.strip
|
16
16
|
|
@@ -31,7 +31,7 @@ module BitClipboardModule
|
|
31
31
|
|
32
32
|
# check if bit.dev remote scope exists
|
33
33
|
cmd_bit_list_scope = config.active['bit_list_scope'] % {scope: scope}
|
34
|
-
|
34
|
+
status = try cmd_bit_list_scope
|
35
35
|
|
36
36
|
unless status.exitstatus.zero?
|
37
37
|
log.error "No bit.dev remote scope \"#{scope}\" found"
|
@@ -42,7 +42,7 @@ module BitClipboardModule
|
|
42
42
|
|
43
43
|
# check if bit remote scope is added to local workspace
|
44
44
|
cmd_bit_list_remotes = config.active['bit_list_remotes']
|
45
|
-
stdout_str
|
45
|
+
stdout_str = run cmd_bit_list_remotes
|
46
46
|
|
47
47
|
unless /.*\s+#{scope}\s+.*/m.match? stdout_str
|
48
48
|
log.error "No bit remote scope \"#{scope}\" found in local bit workspace"
|
@@ -113,7 +113,7 @@ module BitClipboardModule
|
|
113
113
|
|
114
114
|
_remove_bit_artifacts
|
115
115
|
|
116
|
-
log.info "Pasted bit component \"#{cid}\"" +
|
116
|
+
log.info "Pasted bit component \"#{cid}\" " +
|
117
117
|
"to directory \"#{dir}\""
|
118
118
|
end
|
119
119
|
|
@@ -48,7 +48,7 @@ module BitScopeModule
|
|
48
48
|
cmd_bit_scope_list = config.active['bit_scope_list'] % {root: root}
|
49
49
|
|
50
50
|
# run ssh command with scope list command
|
51
|
-
scope_list
|
51
|
+
scope_list = run "#{cmd_bit_ssh} '#{cmd_bit_scope_list}'"
|
52
52
|
|
53
53
|
# remove bit remote root directory from results
|
54
54
|
scope_list.gsub!(/#{root}\/*/, '')
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Takelage
|
2
|
+
|
3
|
+
# takelage docker check
|
4
|
+
class DockerCheck < SubCommandBase
|
5
|
+
|
6
|
+
include LoggingModule
|
7
|
+
include SystemModule
|
8
|
+
include DockerCheckModule
|
9
|
+
|
10
|
+
#
|
11
|
+
# docker check running
|
12
|
+
#
|
13
|
+
desc 'running [TAG]', 'Check if docker daemon is running'
|
14
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
15
|
+
Check if docker daemon is running
|
16
|
+
LONGDESC
|
17
|
+
# Check if docker daemon is running.
|
18
|
+
def running
|
19
|
+
exit docker_check_running
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# takelage docker check module
|
2
|
+
module DockerCheckModule
|
3
|
+
|
4
|
+
# Backend method for docker check running.
|
5
|
+
# @return [Boolean] is the docker daemon running?
|
6
|
+
def docker_check_running
|
7
|
+
log.debug "Check if the docker daemon is running"
|
8
|
+
|
9
|
+
cmd_docker_info = 'docker info'
|
10
|
+
|
11
|
+
status = try cmd_docker_info
|
12
|
+
|
13
|
+
unless status.exitstatus.zero?
|
14
|
+
log.error "The docker daemon is not running"
|
15
|
+
return false
|
16
|
+
end
|
17
|
+
|
18
|
+
log.debug "The docker daemon is running"
|
19
|
+
true
|
20
|
+
end
|
21
|
+
end
|
data/lib/takelage/docker/cli.rb
CHANGED
@@ -6,11 +6,13 @@ module DockerContainerCheckModule
|
|
6
6
|
def docker_container_check_existing(container)
|
7
7
|
log.debug "Checking if container \"#{container}\" is existing"
|
8
8
|
|
9
|
+
exit false unless docker_check_running
|
10
|
+
|
9
11
|
cmd_docker_existing = 'docker ps ' +
|
10
12
|
"--filter name=^#{container}$ " +
|
11
13
|
'--quiet'
|
12
14
|
|
13
|
-
stdout_str
|
15
|
+
stdout_str = run cmd_docker_existing
|
14
16
|
|
15
17
|
if stdout_str.to_s.strip.empty?
|
16
18
|
log.debug "Container \"#{container}\" is not existing"
|
@@ -26,11 +28,13 @@ module DockerContainerCheckModule
|
|
26
28
|
def docker_container_check_network(network)
|
27
29
|
log.debug "Checking if network \"#{network}\" is existing"
|
28
30
|
|
31
|
+
exit false unless docker_check_running
|
32
|
+
|
29
33
|
cmd_docker_network = 'docker network ls ' +
|
30
34
|
'--quiet ' +
|
31
35
|
"--filter name=^#{network}$"
|
32
36
|
|
33
|
-
stdout_str
|
37
|
+
stdout_str = run cmd_docker_network
|
34
38
|
|
35
39
|
if stdout_str.to_s.strip.empty?
|
36
40
|
log.debug "Network \"#{network}\" is not existing"
|
@@ -46,12 +50,14 @@ module DockerContainerCheckModule
|
|
46
50
|
def docker_container_check_orphaned(container)
|
47
51
|
log.debug "Check if container \"#{container}\" is orphaned"
|
48
52
|
|
53
|
+
exit false unless docker_check_running
|
54
|
+
|
49
55
|
cmd_docker_orphaned = 'docker exec ' +
|
50
56
|
'--interactive ' +
|
51
57
|
"#{container} " +
|
52
58
|
'ps a'
|
53
59
|
|
54
|
-
stdout_str
|
60
|
+
stdout_str = run cmd_docker_orphaned
|
55
61
|
|
56
62
|
if stdout_str.include? '/loginpoint.py'
|
57
63
|
log.debug "Container \"#{container}\" isn't orphaned"
|
@@ -5,6 +5,8 @@ module DockerContainerModule
|
|
5
5
|
def docker_container_command(command)
|
6
6
|
log.debug "Running command in container"
|
7
7
|
|
8
|
+
exit false unless docker_check_running
|
9
|
+
|
8
10
|
exit false unless configured? %w(docker_repo docker_image docker_tag)
|
9
11
|
|
10
12
|
docker_socket_start
|
@@ -18,6 +20,8 @@ module DockerContainerModule
|
|
18
20
|
def docker_container_daemon
|
19
21
|
log.debug 'Starting docker container as daemon'
|
20
22
|
|
23
|
+
exit false unless docker_check_running
|
24
|
+
|
21
25
|
exit false unless configured? %w(docker_repo docker_image docker_tag)
|
22
26
|
|
23
27
|
_create_network @hostname unless docker_container_check_network @hostname
|
@@ -28,6 +32,8 @@ module DockerContainerModule
|
|
28
32
|
def docker_container_login
|
29
33
|
log.debug 'Logging in to docker container'
|
30
34
|
|
35
|
+
exit false unless docker_check_running
|
36
|
+
|
31
37
|
exit false unless configured? %w(docker_repo docker_image docker_tag)
|
32
38
|
|
33
39
|
docker_socket_start
|
@@ -41,6 +47,8 @@ module DockerContainerModule
|
|
41
47
|
def docker_container_nuke
|
42
48
|
log.debug 'Removing all docker containers'
|
43
49
|
|
50
|
+
exit false unless docker_check_running
|
51
|
+
|
44
52
|
exit false unless configured? %w(docker_image)
|
45
53
|
|
46
54
|
networks = []
|
@@ -60,6 +68,8 @@ module DockerContainerModule
|
|
60
68
|
def docker_container_purge
|
61
69
|
log.debug 'Removing orphaned docker containers'
|
62
70
|
|
71
|
+
exit false unless docker_check_running
|
72
|
+
|
63
73
|
exit false unless configured? %w(docker_image)
|
64
74
|
|
65
75
|
networks = []
|
@@ -169,7 +179,7 @@ module DockerContainerModule
|
|
169
179
|
"--filter id=#{container} " +
|
170
180
|
'--format "{{.Names}}"'
|
171
181
|
|
172
|
-
stdout_str
|
182
|
+
stdout_str = run cmd_get_container_name_by_id
|
173
183
|
|
174
184
|
name = stdout_str.chomp
|
175
185
|
|
@@ -188,7 +198,7 @@ module DockerContainerModule
|
|
188
198
|
"--filter name=^#{@docker_image}_ " +
|
189
199
|
'--quiet'
|
190
200
|
|
191
|
-
stdout_str
|
201
|
+
stdout_str = run cmd_docker_get
|
192
202
|
|
193
203
|
# convert stdout lines to array and return array
|
194
204
|
stdout_str.split(/\n+/)
|
@@ -3,14 +3,9 @@ module DockerImageModule
|
|
3
3
|
|
4
4
|
# Backend method for docker image update.
|
5
5
|
def docker_image_update
|
6
|
-
exit false unless
|
7
|
-
|
8
|
-
tag_latest_local = docker_image_tag_latest_local
|
6
|
+
exit false unless docker_check_running
|
9
7
|
|
10
|
-
|
11
|
-
log.error "Unable to get latest local tag"
|
12
|
-
exit false
|
13
|
-
end
|
8
|
+
exit false unless configured? %w(docker_repo docker_image docker_tagsurl)
|
14
9
|
|
15
10
|
tag_latest_remote = docker_image_tag_latest_remote
|
16
11
|
|
@@ -19,9 +14,13 @@ module DockerImageModule
|
|
19
14
|
exit false
|
20
15
|
end
|
21
16
|
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
tag_latest_local = docker_image_tag_latest_local
|
18
|
+
|
19
|
+
unless tag_latest_local.to_s.strip.empty?
|
20
|
+
if Gem::Version.new(tag_latest_local) >= Gem::Version.new(tag_latest_remote)
|
21
|
+
log.info 'Already up to date.'
|
22
|
+
exit
|
23
|
+
end
|
25
24
|
end
|
26
25
|
|
27
26
|
cmd_docker_pull_latest = "docker pull #{@docker_repo}/#{@docker_image}:#{tag_latest_remote}"
|
@@ -6,6 +6,8 @@ module DockerImageTagCheckModule
|
|
6
6
|
def docker_image_tag_check_local(tag)
|
7
7
|
log.debug "Check if local docker image tag \"#{tag}\" exists"
|
8
8
|
|
9
|
+
exit false unless docker_check_running
|
10
|
+
|
9
11
|
exit false unless configured? %w(docker_repo docker_image)
|
10
12
|
|
11
13
|
if tag.to_s.strip.empty?
|
@@ -18,7 +20,7 @@ module DockerImageTagCheckModule
|
|
18
20
|
cmd_docker_images = 'docker images --quiet ' +
|
19
21
|
image
|
20
22
|
|
21
|
-
stdout_str
|
23
|
+
stdout_str = run cmd_docker_images
|
22
24
|
|
23
25
|
if stdout_str.to_s.strip.empty?
|
24
26
|
log.debug "No local docker image \"#{image}\" found"
|
@@ -34,6 +36,8 @@ module DockerImageTagCheckModule
|
|
34
36
|
def docker_image_tag_check_remote(tag)
|
35
37
|
log.debug "Check if remote image tag \"#{tag}\" exists"
|
36
38
|
|
39
|
+
exit false unless docker_check_running
|
40
|
+
|
37
41
|
exit false unless configured? %w(docker_repo docker_image docker_tagsurl)
|
38
42
|
|
39
43
|
if tag .to_s.strip.empty?
|
@@ -6,6 +6,8 @@ module DockerImageTagLatestModule
|
|
6
6
|
def docker_image_tag_latest_local
|
7
7
|
log.debug "Getting latest local docker image tag"
|
8
8
|
|
9
|
+
exit false unless docker_check_running
|
10
|
+
|
9
11
|
tags = docker_image_tag_list_local
|
10
12
|
|
11
13
|
tag_latest_local = tags[-1]
|
@@ -20,8 +22,15 @@ module DockerImageTagLatestModule
|
|
20
22
|
def docker_image_tag_latest_remote
|
21
23
|
log.debug "Getting latest remote docker image tag"
|
22
24
|
|
25
|
+
exit false unless docker_check_running
|
26
|
+
|
23
27
|
tags = docker_image_tag_list_remote
|
24
28
|
|
29
|
+
if tags.nil?
|
30
|
+
log.debug "No latest docker remote tag"
|
31
|
+
return ''
|
32
|
+
end
|
33
|
+
|
25
34
|
tag_latest_remote = tags[-1]
|
26
35
|
|
27
36
|
log.debug "Latest docker remote tag: #{tag_latest_remote}"
|
@@ -6,12 +6,13 @@ module DockerImageTagListModule
|
|
6
6
|
def docker_image_tag_list_local
|
7
7
|
tags = []
|
8
8
|
|
9
|
-
cmd_docker_images = 'docker images'
|
10
|
-
|
9
|
+
cmd_docker_images = 'docker images ' +
|
10
|
+
"#{@docker_repo}\/#{@docker_image} " +
|
11
|
+
' --format "{{.Tag}}"'
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
stdout_str = run cmd_docker_images
|
14
|
+
|
15
|
+
tags = stdout_str.split("\n")
|
15
16
|
|
16
17
|
tags.sort_by(&Gem::Version.method(:new))
|
17
18
|
end
|
@@ -5,6 +5,8 @@ module DockerSocketModule
|
|
5
5
|
def docker_socket_start
|
6
6
|
log.debug 'Starting sockets for docker container'
|
7
7
|
|
8
|
+
exit false unless docker_check_running
|
9
|
+
|
8
10
|
cmds_start_socket = _get_socket_start_commands sockets_up = false
|
9
11
|
|
10
12
|
unless cmds_start_socket.empty?
|
@@ -24,11 +26,13 @@ module DockerSocketModule
|
|
24
26
|
def docker_socket_stop
|
25
27
|
log.debug 'Stopping sockets for docker container'
|
26
28
|
|
29
|
+
exit false unless docker_check_running
|
30
|
+
|
27
31
|
cmd_ps = config.active['docker_socket_ps']
|
28
32
|
|
29
33
|
# get process list
|
30
34
|
# assuming format: "pid command"
|
31
|
-
stdout_str
|
35
|
+
stdout_str = run cmd_ps
|
32
36
|
|
33
37
|
cmds_start_socket = _get_socket_start_commands sockets_up = true
|
34
38
|
|
@@ -85,7 +89,7 @@ module DockerSocketModule
|
|
85
89
|
# get socket paths
|
86
90
|
def _get_socket_paths
|
87
91
|
cmd_gpgconf_listdirs = config.active['docker_socket_gpgconf']
|
88
|
-
stdout_str
|
92
|
+
stdout_str = run cmd_gpgconf_listdirs
|
89
93
|
|
90
94
|
stdout_str.split(/\n+/).each do |gpg_path|
|
91
95
|
@sockets.each do |socket, socket_config|
|
@@ -12,9 +12,9 @@ module GitCheckModule
|
|
12
12
|
cmd_git_uncommitted = config.active['git_uncommitted']
|
13
13
|
cmd_git_status = config.active['git_status']
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
stdout_str_status
|
15
|
+
status_unstaged = try cmd_git_unstaged
|
16
|
+
status_uncommitted = try cmd_git_uncommitted
|
17
|
+
stdout_str_status = run cmd_git_status
|
18
18
|
|
19
19
|
# only return true if neither unstaged nor uncommitted nor empty files
|
20
20
|
sum = status_unstaged.exitstatus +
|
@@ -32,7 +32,7 @@ module GitCheckModule
|
|
32
32
|
return false unless git_check_workspace
|
33
33
|
|
34
34
|
cmd_get_branch = config.active['git_branch']
|
35
|
-
stdout_str
|
35
|
+
stdout_str = run cmd_get_branch
|
36
36
|
|
37
37
|
branch = stdout_str.strip.split('/')[-1]
|
38
38
|
|
@@ -47,10 +47,10 @@ module GitCheckModule
|
|
47
47
|
log.debug 'Check if this is a git workspace'
|
48
48
|
|
49
49
|
cmd_git_repo = config.active['git_repo']
|
50
|
-
|
50
|
+
status_repo = try cmd_git_repo
|
51
51
|
|
52
52
|
cmd_pwd = config.active['pwd']
|
53
|
-
stdout_str_dir
|
53
|
+
stdout_str_dir = run cmd_pwd
|
54
54
|
|
55
55
|
dir = stdout_str_dir.strip
|
56
56
|
|
data/lib/takelage/lib/system.rb
CHANGED
@@ -6,14 +6,6 @@ require 'yaml'
|
|
6
6
|
# Interaction with the operating system
|
7
7
|
module SystemModule
|
8
8
|
|
9
|
-
# Run a command and return the result.
|
10
|
-
# @return [Boolean] success of command run
|
11
|
-
def run_and_check(command)
|
12
|
-
log.debug "Running command \"#{command}\""
|
13
|
-
stdout_str, stderr_str, status = Open3.capture3 command
|
14
|
-
return stdout_str, stderr_str, status
|
15
|
-
end
|
16
|
-
|
17
9
|
# Print hash as yaml.
|
18
10
|
def hash_to_yaml(hash)
|
19
11
|
if hash == {}
|
@@ -62,30 +54,12 @@ module SystemModule
|
|
62
54
|
Pathname.new(directory).rmtree
|
63
55
|
end
|
64
56
|
|
65
|
-
# Run a command.
|
57
|
+
# Run a command and return the standard output.
|
66
58
|
# @return [String] stdout of command
|
67
59
|
def run(command, realtime=false)
|
68
60
|
log.debug "Running command \"#{command}\""
|
69
|
-
stdout_str =
|
70
|
-
|
71
|
-
status = ''
|
72
|
-
exitstatus = -1
|
73
|
-
Open3.popen3 command do |stdin, stdout, stderr, thread|
|
74
|
-
stdout.each do |line|
|
75
|
-
say line if realtime
|
76
|
-
stdout_str += line
|
77
|
-
end
|
78
|
-
stderr_str = stderr
|
79
|
-
status = thread.value
|
80
|
-
exitstatus = thread.value.exitstatus
|
81
|
-
end
|
82
|
-
unless status.success?
|
83
|
-
log.error "Command \"#{command}\" failed!"
|
84
|
-
log.debug "status: #{status}"
|
85
|
-
log.debug "stdout: #{stdout_str}"
|
86
|
-
log.debug "stderr: #{stderr_str}"
|
87
|
-
exit exitstatus
|
88
|
-
end
|
61
|
+
stdout_str, stderr_str, status = Open3.capture3 command
|
62
|
+
log.debug "Command \"#{command}\" has stdout:\"\n#{stdout_str}\""
|
89
63
|
stdout_str
|
90
64
|
end
|
91
65
|
|
@@ -104,4 +78,12 @@ module SystemModule
|
|
104
78
|
Process.detach(job)
|
105
79
|
end
|
106
80
|
|
81
|
+
# Run a command and return the result.
|
82
|
+
# @return [Boolean] success of command run
|
83
|
+
def try(command)
|
84
|
+
log.debug "Running command \"#{command}\""
|
85
|
+
stdout_str, stderr_str, status = Open3.capture3 command
|
86
|
+
log.debug "Command \"#{command}\" has exit status \"#{status.exitstatus}\""
|
87
|
+
status
|
88
|
+
end
|
107
89
|
end
|
data/lib/takelage/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/lib/takelage.rb
CHANGED
@@ -27,6 +27,8 @@ require_relative 'takelage/bit/clipboard/module'
|
|
27
27
|
require_relative 'takelage/bit/clipboard/cli'
|
28
28
|
require_relative 'takelage/bit/cli'
|
29
29
|
require_relative 'takelage/completion/cli'
|
30
|
+
require_relative 'takelage/docker/check/module'
|
31
|
+
require_relative 'takelage/docker/check/cli'
|
30
32
|
require_relative 'takelage/docker/socket/module'
|
31
33
|
require_relative 'takelage/docker/socket/cli'
|
32
34
|
require_relative 'takelage/docker/image/tag/list/module'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: takelage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geospin
|
@@ -186,6 +186,8 @@ files:
|
|
186
186
|
- lib/takelage/bit/scope/module.rb
|
187
187
|
- lib/takelage/completion/cli.rb
|
188
188
|
- lib/takelage/default.yml
|
189
|
+
- lib/takelage/docker/check/cli.rb
|
190
|
+
- lib/takelage/docker/check/module.rb
|
189
191
|
- lib/takelage/docker/cli.rb
|
190
192
|
- lib/takelage/docker/container/check/cli.rb
|
191
193
|
- lib/takelage/docker/container/check/module.rb
|