takelage 0.1.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.
- checksums.yaml +7 -0
- data/LICENSE +674 -0
- data/README.md +159 -0
- data/bin/tau +5 -0
- data/lib/Thorfile +1 -0
- data/lib/takelage/bit/cli.rb +18 -0
- data/lib/takelage/bit/clipboard/cli.rb +68 -0
- data/lib/takelage/bit/clipboard/module.rb +174 -0
- data/lib/takelage/bit/scope/cli.rb +58 -0
- data/lib/takelage/bit/scope/module.rb +81 -0
- data/lib/takelage/completion/cli.rb +21 -0
- data/lib/takelage/default.yml +30 -0
- data/lib/takelage/docker/cli.rb +16 -0
- data/lib/takelage/docker/container/check/cli.rb +40 -0
- data/lib/takelage/docker/container/check/module.rb +44 -0
- data/lib/takelage/docker/container/cli.rb +127 -0
- data/lib/takelage/docker/container/module.rb +168 -0
- data/lib/takelage/docker/image/cli.rb +41 -0
- data/lib/takelage/docker/image/module.rb +33 -0
- data/lib/takelage/docker/image/tag/check/cli.rb +47 -0
- data/lib/takelage/docker/image/tag/check/module.rb +56 -0
- data/lib/takelage/docker/image/tag/cli.rb +16 -0
- data/lib/takelage/docker/image/tag/latest/cli.rb +49 -0
- data/lib/takelage/docker/image/tag/latest/module.rb +31 -0
- data/lib/takelage/docker/image/tag/list/cli.rb +46 -0
- data/lib/takelage/docker/image/tag/list/module.rb +44 -0
- data/lib/takelage/docker/socket/cli.rb +61 -0
- data/lib/takelage/docker/socket/module.rb +137 -0
- data/lib/takelage/git/check/cli.rb +46 -0
- data/lib/takelage/git/check/module.rb +64 -0
- data/lib/takelage/git/cli.rb +10 -0
- data/lib/takelage/info/cli.rb +10 -0
- data/lib/takelage/info/project/cli.rb +47 -0
- data/lib/takelage/lib/config.rb +80 -0
- data/lib/takelage/lib/logging.rb +30 -0
- data/lib/takelage/lib/project.rb +57 -0
- data/lib/takelage/lib/subcmd.rb +13 -0
- data/lib/takelage/lib/system.rb +107 -0
- data/lib/takelage/self/cli.rb +40 -0
- data/lib/takelage/self/config/cli.rb +70 -0
- data/lib/takelage/self/module.rb +26 -0
- data/lib/takelage/version +1 -0
- data/lib/takelage.rb +198 -0
- metadata +185 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
# takelage docker container check module
|
2
|
+
module DockerContainerCheckModule
|
3
|
+
|
4
|
+
# Backend method for docker container check existing.
|
5
|
+
# @return [Boolean] is container existing?
|
6
|
+
def docker_container_check_existing(container)
|
7
|
+
log.debug "Checking if container \"#{container}\" is existing"
|
8
|
+
|
9
|
+
cmd_docker_existing = 'docker ps ' +
|
10
|
+
"--filter name=^#{container}$ " +
|
11
|
+
'--quiet'
|
12
|
+
|
13
|
+
stdout_str, stderr_str, status = run_and_check cmd_docker_existing
|
14
|
+
|
15
|
+
if stdout_str.to_s.strip.empty?
|
16
|
+
log.debug "Container \"#{container}\" is not existing"
|
17
|
+
return false
|
18
|
+
end
|
19
|
+
|
20
|
+
log.debug "Container \"#{container}\" is existing"
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
# Backend method for docker container check orphaned.
|
25
|
+
# @return [Boolean] is container orphaned?
|
26
|
+
def docker_container_check_orphaned(container)
|
27
|
+
log.debug "Check if container \"#{container}\" is orphaned"
|
28
|
+
|
29
|
+
cmd_docker_orphaned = 'docker exec ' +
|
30
|
+
'--interactive ' +
|
31
|
+
"#{container} " +
|
32
|
+
'ps a'
|
33
|
+
|
34
|
+
stdout_str, stderr_str, status = run_and_check cmd_docker_orphaned
|
35
|
+
|
36
|
+
if stdout_str.include? '/loginpoint.py'
|
37
|
+
log.debug "Container \"#{container}\" isn't orphaned"
|
38
|
+
return false
|
39
|
+
end
|
40
|
+
|
41
|
+
log.debug "Container \"#{container}\" is orphaned"
|
42
|
+
true
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
module Takelage
|
2
|
+
|
3
|
+
# takelage docker container
|
4
|
+
class DockerContainer < SubCommandBase
|
5
|
+
|
6
|
+
include LoggingModule
|
7
|
+
include SystemModule
|
8
|
+
include ConfigModule
|
9
|
+
include DockerContainerCheckModule
|
10
|
+
include DockerContainerModule
|
11
|
+
include DockerImageTagLatestModule
|
12
|
+
include DockerImageTagListModule
|
13
|
+
include DockerImageTagCheckModule
|
14
|
+
include DockerSocketModule
|
15
|
+
|
16
|
+
# Initialize takelage docker container
|
17
|
+
def initialize(args=[], local_options={}, configuration={})
|
18
|
+
|
19
|
+
# initialize thor parent class
|
20
|
+
super args, local_options, configuration
|
21
|
+
|
22
|
+
@docker_repo = config.active['docker_repo']
|
23
|
+
@docker_image = config.active['docker_image']
|
24
|
+
@docker_tag = config.active['docker_tag']
|
25
|
+
|
26
|
+
@dockersock = '/var/run/docker.sock'
|
27
|
+
|
28
|
+
@username = ENV['USER'] ? ENV['USER'] : 'username'
|
29
|
+
@gid = Etc.getpwnam(@username).gid
|
30
|
+
@uid = Etc.getpwnam(@username).uid
|
31
|
+
|
32
|
+
@homedir = ENV['HOME'] ? ENV['HOME'] : ''
|
33
|
+
@workdir = Dir.getwd
|
34
|
+
@hostname = "#{@docker_image}_#{File.basename(@workdir)}"
|
35
|
+
|
36
|
+
@hostsystem = 'macos'
|
37
|
+
@timezone = 'Europe/Berlin'
|
38
|
+
|
39
|
+
@sockets = {
|
40
|
+
:'agent-socket' => {
|
41
|
+
:path => nil,
|
42
|
+
:host => '127.0.0.1',
|
43
|
+
:port => config.active['docker_socket_agent_port']},
|
44
|
+
:'agent-ssh-socket' => {
|
45
|
+
:path => nil,
|
46
|
+
:host => '127.0.0.1',
|
47
|
+
:port => config.active['docker_socket_agent_ssh_port']},
|
48
|
+
:'agent-extra-socket' => {
|
49
|
+
:path => nil,
|
50
|
+
:host => '127.0.0.1',
|
51
|
+
:port => config.active['docker_socket_agent_extra_port']},
|
52
|
+
:'agent-browser-socket' => {
|
53
|
+
:path => nil,
|
54
|
+
:host => '127.0.0.1',
|
55
|
+
:port => config.active['docker_socket_agent_browser_port']}}
|
56
|
+
_get_socket_paths
|
57
|
+
end
|
58
|
+
|
59
|
+
desc 'check [COMMAND]', 'Check docker container'
|
60
|
+
subcommand 'check', DockerContainerCheck
|
61
|
+
|
62
|
+
#
|
63
|
+
# docker container daemon
|
64
|
+
#
|
65
|
+
desc 'daemon', 'Run docker container in daemon mode'
|
66
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
67
|
+
Run docker container in daemon mode
|
68
|
+
LONGDESC
|
69
|
+
# Run docker container in daemon mode.
|
70
|
+
def daemon
|
71
|
+
docker_container_daemon
|
72
|
+
end
|
73
|
+
|
74
|
+
#
|
75
|
+
# docker container login
|
76
|
+
#
|
77
|
+
option :development,
|
78
|
+
:aliases => 'd',
|
79
|
+
:type => :boolean,
|
80
|
+
:default => false,
|
81
|
+
:desc => 'Log in to docker container in debug mode'
|
82
|
+
desc 'login', 'Log in to latest local docker container'
|
83
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
84
|
+
Log in to latest local docker container
|
85
|
+
LONGDESC
|
86
|
+
# Log in to latest local docker container.
|
87
|
+
def login
|
88
|
+
docker_container_login
|
89
|
+
end
|
90
|
+
|
91
|
+
#
|
92
|
+
# docker container nuke
|
93
|
+
#
|
94
|
+
desc 'nuke', 'Remove all docker containers'
|
95
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
96
|
+
Remove all docker containers
|
97
|
+
LONGDESC
|
98
|
+
# Remove all docker containers.
|
99
|
+
def nuke
|
100
|
+
docker_container_nuke
|
101
|
+
end
|
102
|
+
|
103
|
+
#
|
104
|
+
# docker container purge
|
105
|
+
#
|
106
|
+
desc 'purge', 'Remove orphaned docker containers'
|
107
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
108
|
+
Remove orphaned docker containers
|
109
|
+
LONGDESC
|
110
|
+
# Remove orphaned docker containers.
|
111
|
+
def purge
|
112
|
+
docker_container_purge
|
113
|
+
end
|
114
|
+
|
115
|
+
#
|
116
|
+
# docker container run
|
117
|
+
#
|
118
|
+
desc 'command [CMD]', 'Run [CMD] in a docker container'
|
119
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
120
|
+
Run command in docker container
|
121
|
+
LONGDESC
|
122
|
+
# Run command in docker container.
|
123
|
+
def command(command)
|
124
|
+
docker_container_command(command)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
# takelage docker container module
|
2
|
+
module DockerContainerModule
|
3
|
+
|
4
|
+
# Backend method for docker container run.
|
5
|
+
def docker_container_command(command)
|
6
|
+
log.debug "Running command in container"
|
7
|
+
|
8
|
+
exit false unless configured? %w(docker_repo docker_image docker_tag)
|
9
|
+
|
10
|
+
docker_socket_start
|
11
|
+
|
12
|
+
_create_container @hostname unless docker_container_check_existing @hostname
|
13
|
+
_run_command_in_container @hostname, command
|
14
|
+
end
|
15
|
+
|
16
|
+
# Backend method for docker container daemon.
|
17
|
+
def docker_container_daemon
|
18
|
+
log.debug 'Starting docker container as daemon'
|
19
|
+
|
20
|
+
exit false unless configured? %w(docker_repo docker_image docker_tag)
|
21
|
+
|
22
|
+
_create_container @hostname unless docker_container_check_existing @hostname
|
23
|
+
end
|
24
|
+
|
25
|
+
# Backend method for docker container login.
|
26
|
+
def docker_container_login
|
27
|
+
log.debug 'Logging in to docker container'
|
28
|
+
|
29
|
+
exit false unless configured? %w(docker_repo docker_image docker_tag)
|
30
|
+
|
31
|
+
docker_socket_start
|
32
|
+
|
33
|
+
_create_container @hostname unless docker_container_check_existing @hostname
|
34
|
+
_enter_container @hostname
|
35
|
+
end
|
36
|
+
|
37
|
+
# Backend method for docker container nuke.
|
38
|
+
def docker_container_nuke
|
39
|
+
log.debug 'Removing all docker containers'
|
40
|
+
|
41
|
+
exit false unless configured? %w(docker_image)
|
42
|
+
|
43
|
+
_get_containers.each do |container|
|
44
|
+
_stop_container container
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Backend method for docker container purge.
|
49
|
+
def docker_container_purge
|
50
|
+
log.debug 'Removing orphaned docker containers'
|
51
|
+
|
52
|
+
exit false unless configured? %w(docker_image)
|
53
|
+
|
54
|
+
_get_containers.each do |container|
|
55
|
+
_stop_container container if docker_container_check_orphaned container
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Create docker container.
|
60
|
+
def _create_container(container)
|
61
|
+
log.debug "Creating container \"#{container}\""
|
62
|
+
|
63
|
+
if @docker_tag == 'latest'
|
64
|
+
tag = docker_image_tag_latest_local
|
65
|
+
else
|
66
|
+
tag = @docker_tag
|
67
|
+
end
|
68
|
+
|
69
|
+
image = "#{@docker_repo}/#{@docker_image}:#{tag}"
|
70
|
+
|
71
|
+
log.debug "Using docker image \"#{image}\""
|
72
|
+
|
73
|
+
unless docker_image_tag_check_local tag
|
74
|
+
log.error "Image \"#{image}\" does not exist"
|
75
|
+
exit false
|
76
|
+
end
|
77
|
+
|
78
|
+
entrypoint = '/entrypoint.py '
|
79
|
+
volume_dev = ''
|
80
|
+
if options[:development]
|
81
|
+
entrypoint = '/debug/entrypoint.py --debug '
|
82
|
+
volume_dev = "--volume #{@workdir}/ansible/roles/geospin-ansible-devel/files:/debug "
|
83
|
+
end
|
84
|
+
|
85
|
+
cmd_docker_create = 'docker run ' +
|
86
|
+
'--detach ' +
|
87
|
+
"--env GEOSPIN_PROJECT_BASE_DIR=#{@workdir} " +
|
88
|
+
'--env GOOGLE_APPLICATION_CREDENTIALS=/srv/google/default.json ' +
|
89
|
+
"--env TZ=#{@timezone} " +
|
90
|
+
"--hostname #{container} " +
|
91
|
+
"--name #{container} " +
|
92
|
+
'--privileged ' +
|
93
|
+
'--rm ' +
|
94
|
+
'--tty ' +
|
95
|
+
"--volume #{@dockersock}:/var/run/docker.sock " +
|
96
|
+
"--volume #{@homedir}/.config/gcloud:/srv/gcloud " +
|
97
|
+
"--volume #{@homedir}/.google:/srv/google " +
|
98
|
+
"--volume #{@homedir}:/homedir " +
|
99
|
+
"--volume #{@workdir}:/project " +
|
100
|
+
volume_dev +
|
101
|
+
'--workdir /project ' +
|
102
|
+
"#{image} " +
|
103
|
+
entrypoint +
|
104
|
+
"--gid #{@gid} " +
|
105
|
+
"--hostsystem #{@hostsystem} " +
|
106
|
+
"--uid #{@uid} " +
|
107
|
+
"--username #{@username}"
|
108
|
+
|
109
|
+
run cmd_docker_create
|
110
|
+
end
|
111
|
+
|
112
|
+
# Enter existing docker container.
|
113
|
+
def _enter_container(container)
|
114
|
+
log.debug "Entering container \"#{container}\""
|
115
|
+
|
116
|
+
loginpoint = '/loginpoint.py '
|
117
|
+
if options[:development]
|
118
|
+
loginpoint = '/loginpoint.py --debug '
|
119
|
+
end
|
120
|
+
|
121
|
+
cmd_docker_enter = 'docker exec ' +
|
122
|
+
'--interactive ' +
|
123
|
+
'--tty ' +
|
124
|
+
"#{container} " +
|
125
|
+
loginpoint +
|
126
|
+
"--username #{@username}"
|
127
|
+
|
128
|
+
run_and_exit cmd_docker_enter
|
129
|
+
end
|
130
|
+
|
131
|
+
# Get all docker containers.
|
132
|
+
# @return [Array] list of docker containers
|
133
|
+
def _get_containers
|
134
|
+
log.debug "Getting all #{@docker_image} containers"
|
135
|
+
|
136
|
+
cmd_docker_get = 'docker ps ' +
|
137
|
+
'--all ' +
|
138
|
+
"--filter name=^#{@docker_image}_ " +
|
139
|
+
'--quiet'
|
140
|
+
|
141
|
+
stdout_str, stderr_str, status = run_and_check cmd_docker_get
|
142
|
+
|
143
|
+
# convert stdout lines to array and return array
|
144
|
+
stdout_str.split(/\n+/)
|
145
|
+
end
|
146
|
+
|
147
|
+
# Remove container.
|
148
|
+
def _stop_container(container)
|
149
|
+
log.debug "Stopping container \"#{container}\""
|
150
|
+
|
151
|
+
cmd_docker_stop = 'docker stop ' +
|
152
|
+
"#{container}"
|
153
|
+
|
154
|
+
run cmd_docker_stop
|
155
|
+
end
|
156
|
+
|
157
|
+
# Enter existing docker container.
|
158
|
+
def _run_command_in_container(container, command)
|
159
|
+
log.debug "Running command \"#{command}\" in container \"#{container}\""
|
160
|
+
|
161
|
+
cmd_docker_run_command = 'docker exec ' +
|
162
|
+
"#{container} " +
|
163
|
+
"su #{@username} " +
|
164
|
+
"-c 'LANG=en_US.UTF-8 #{command}'"
|
165
|
+
|
166
|
+
run_and_exit cmd_docker_run_command
|
167
|
+
end
|
168
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Takelage
|
2
|
+
|
3
|
+
# takelage docker image
|
4
|
+
class DockerImage < SubCommandBase
|
5
|
+
|
6
|
+
include LoggingModule
|
7
|
+
include SystemModule
|
8
|
+
include ConfigModule
|
9
|
+
include DockerImageTagListModule
|
10
|
+
include DockerImageTagLatestModule
|
11
|
+
include DockerImageModule
|
12
|
+
|
13
|
+
# Initialize takelage docker image
|
14
|
+
def initialize(args=[], local_options={}, configuration={})
|
15
|
+
|
16
|
+
# initialize thor parent class
|
17
|
+
super args, local_options, configuration
|
18
|
+
|
19
|
+
@docker_repo = config.active['docker_repo']
|
20
|
+
@docker_image = config.active['docker_image']
|
21
|
+
@docker_tagsurl = config.active['docker_tagsurl']
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'tag [COMMAND]', 'Handle docker image tags'
|
25
|
+
subcommand 'tag', DockerImageTag
|
26
|
+
|
27
|
+
#
|
28
|
+
# docker image update
|
29
|
+
#
|
30
|
+
desc 'update', 'Get latest remote docker container'
|
31
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
32
|
+
Get latest remote docker container
|
33
|
+
This command will download the latest remote version of the takelage docker container.
|
34
|
+
When you start the environment the latest locally available container will be used.
|
35
|
+
LONGDESC
|
36
|
+
# Get latest remote docker container.
|
37
|
+
def update
|
38
|
+
docker_image_update
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# takelage docker image module
|
2
|
+
module DockerImageModule
|
3
|
+
|
4
|
+
# Backend method for docker image update.
|
5
|
+
def docker_image_update
|
6
|
+
exit false unless configured? %w(docker_repo docker_image docker_tagsurl)
|
7
|
+
|
8
|
+
tag_latest_local = docker_image_tag_latest_local
|
9
|
+
|
10
|
+
if tag_latest_local.to_s.strip.empty?
|
11
|
+
log.error "Unable to get latest local tag"
|
12
|
+
exit false
|
13
|
+
end
|
14
|
+
|
15
|
+
tag_latest_remote = docker_image_tag_latest_remote
|
16
|
+
|
17
|
+
if tag_latest_remote.to_s.strip.empty?
|
18
|
+
log.error "Unable to get latest remote tag"
|
19
|
+
exit false
|
20
|
+
end
|
21
|
+
|
22
|
+
if Gem::Version.new(tag_latest_local) >= Gem::Version.new(tag_latest_remote)
|
23
|
+
log.info 'Already up to date.'
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
cmd_docker_pull_latest = "docker pull #{@docker_repo}/#{@docker_image}:#{tag_latest_remote}"
|
28
|
+
|
29
|
+
log.info "Updating to docker image \"#{@docker_repo}/#{@docker_image}:#{tag_latest_remote}\""
|
30
|
+
|
31
|
+
run_and_exit cmd_docker_pull_latest
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Takelage
|
2
|
+
|
3
|
+
# takelage docker image tag check
|
4
|
+
class DockerImageTagCheck < SubCommandBase
|
5
|
+
|
6
|
+
include LoggingModule
|
7
|
+
include SystemModule
|
8
|
+
include ConfigModule
|
9
|
+
include DockerImageTagListModule
|
10
|
+
include DockerImageTagCheckModule
|
11
|
+
|
12
|
+
# Initialize takelage docker image tag check
|
13
|
+
def initialize(args = [], local_options = {}, configuration = {})
|
14
|
+
|
15
|
+
# initialize thor parent class
|
16
|
+
super args, local_options, configuration
|
17
|
+
|
18
|
+
@docker_repo = config.active['docker_repo']
|
19
|
+
@docker_image = config.active['docker_image']
|
20
|
+
@docker_tagsurl = config.active['docker_tagsurl']
|
21
|
+
end
|
22
|
+
|
23
|
+
#
|
24
|
+
# docker image tag check local
|
25
|
+
#
|
26
|
+
desc 'local [TAG]', 'Check if local docker image [TAG] exists'
|
27
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
28
|
+
Check if local docker image tag exists
|
29
|
+
LONGDESC
|
30
|
+
# Check if local docker image tag exists.
|
31
|
+
def local(tag)
|
32
|
+
exit docker_image_tag_check_local tag
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# docker image tag check remote
|
37
|
+
#
|
38
|
+
desc 'remote [TAG]', 'Check if remote docker image [TAG] exists'
|
39
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
40
|
+
Check if remote docker image tag exists
|
41
|
+
LONGDESC
|
42
|
+
# Check if remote docker image tag exists.
|
43
|
+
def remote(tag)
|
44
|
+
exit docker_image_tag_check_remote tag
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# takelage docker image tag check module
|
2
|
+
module DockerImageTagCheckModule
|
3
|
+
|
4
|
+
# Backend method for docker image check tag local.
|
5
|
+
# @return [Boolean] does local docker image tag exist?
|
6
|
+
def docker_image_tag_check_local(tag)
|
7
|
+
log.debug "Check if local docker image tag \"#{tag}\" exists"
|
8
|
+
|
9
|
+
exit false unless configured? %w(docker_repo docker_image)
|
10
|
+
|
11
|
+
if tag.to_s.strip.empty?
|
12
|
+
log.warn "No local docker image tag specified"
|
13
|
+
return false
|
14
|
+
end
|
15
|
+
|
16
|
+
image = "#{@docker_repo}/#{@docker_image}:#{tag}"
|
17
|
+
|
18
|
+
cmd_docker_images = 'docker images --quiet ' +
|
19
|
+
image
|
20
|
+
|
21
|
+
stdout_str, stderr_str, status = run_and_check cmd_docker_images
|
22
|
+
|
23
|
+
if stdout_str.to_s.strip.empty?
|
24
|
+
log.debug "No local docker image \"#{image}\" found"
|
25
|
+
return false
|
26
|
+
end
|
27
|
+
|
28
|
+
log.debug "Found local docker image \"#{image}\""
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
32
|
+
# Backend method for docker image check tag remote.
|
33
|
+
# @return [Boolean] does remote docker image tag exist?
|
34
|
+
def docker_image_tag_check_remote(tag)
|
35
|
+
log.debug "Check if remote image tag \"#{tag}\" exists"
|
36
|
+
|
37
|
+
exit false unless configured? %w(docker_repo docker_image docker_tagsurl)
|
38
|
+
|
39
|
+
if tag .to_s.strip.empty?
|
40
|
+
log.warn "No remote docker image tag specified"
|
41
|
+
return false
|
42
|
+
end
|
43
|
+
|
44
|
+
image = "#{@docker_repo}/#{@docker_image}:#{tag}"
|
45
|
+
|
46
|
+
tags = docker_image_tag_list_remote
|
47
|
+
|
48
|
+
unless tags.include? tag
|
49
|
+
log.debug "No remote docker image \"#{image}\" found"
|
50
|
+
return false
|
51
|
+
end
|
52
|
+
|
53
|
+
log.debug "Found remote docker image \"#{image}\""
|
54
|
+
true
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Takelage
|
2
|
+
|
3
|
+
# takelage docker image tag
|
4
|
+
class DockerImageTag < SubCommandBase
|
5
|
+
|
6
|
+
desc 'check [COMMAND]', 'Check docker image tag'
|
7
|
+
subcommand 'check', DockerImageTagCheck
|
8
|
+
|
9
|
+
desc 'latest [COMMAND]', 'Print latest local or remote docker image tag'
|
10
|
+
subcommand 'latest', DockerImageTagLatest
|
11
|
+
|
12
|
+
desc 'list [COMMAND]', 'Print local or remote docker image tags'
|
13
|
+
subcommand 'list', DockerImageTagList
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Takelage
|
2
|
+
|
3
|
+
# takelage docker image tag latest
|
4
|
+
class DockerImageTagLatest < SubCommandBase
|
5
|
+
|
6
|
+
include LoggingModule
|
7
|
+
include SystemModule
|
8
|
+
include ConfigModule
|
9
|
+
include DockerImageTagListModule
|
10
|
+
include DockerImageTagLatestModule
|
11
|
+
|
12
|
+
# Initialize takelage docker image tag latest
|
13
|
+
def initialize(args = [], local_options = {}, configuration = {})
|
14
|
+
|
15
|
+
# initialize thor parent class
|
16
|
+
super args, local_options, configuration
|
17
|
+
|
18
|
+
@docker_repo = config.active['docker_repo']
|
19
|
+
@docker_image = config.active['docker_image']
|
20
|
+
@docker_tagsurl = config.active['docker_tagsurl']
|
21
|
+
end
|
22
|
+
|
23
|
+
#
|
24
|
+
# docker image tag latest local
|
25
|
+
#
|
26
|
+
desc 'local', 'Print latest local docker image tag'
|
27
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
28
|
+
Print latest local docker image tag
|
29
|
+
Print the tag of the local docker image with the highest tag.
|
30
|
+
LONGDESC
|
31
|
+
# Print latest local docker image tag.
|
32
|
+
def local
|
33
|
+
say docker_image_tag_latest_local
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# docker image tag latest remote
|
38
|
+
#
|
39
|
+
desc 'remote', 'Print latest remote docker image tag'
|
40
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
41
|
+
Print latest remote docker image tag
|
42
|
+
Print the tag of the remote docker image with the highest tag.
|
43
|
+
LONGDESC
|
44
|
+
# Print latest remote docker image tag.
|
45
|
+
def remote
|
46
|
+
say docker_image_tag_latest_remote
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# takelage docker image tag latest module
|
2
|
+
module DockerImageTagLatestModule
|
3
|
+
|
4
|
+
# Backend method for docker image tag latest local.
|
5
|
+
# @return [String] latest local docker image tag
|
6
|
+
def docker_image_tag_latest_local
|
7
|
+
log.debug "Getting latest local docker image tag"
|
8
|
+
|
9
|
+
tags = docker_image_tag_list_local
|
10
|
+
|
11
|
+
tag_latest_local = tags[-1]
|
12
|
+
|
13
|
+
log.debug "Latest docker local tag: #{tag_latest_local}"
|
14
|
+
|
15
|
+
tag_latest_local
|
16
|
+
end
|
17
|
+
|
18
|
+
# Backend method for docker image tag latest remote.
|
19
|
+
# @return [String] latest remote docker image tag
|
20
|
+
def docker_image_tag_latest_remote
|
21
|
+
log.debug "Getting latest remote docker image tag"
|
22
|
+
|
23
|
+
tags = docker_image_tag_list_remote
|
24
|
+
|
25
|
+
tag_latest_remote = tags[-1]
|
26
|
+
|
27
|
+
log.debug "Latest docker remote tag: #{tag_latest_remote}"
|
28
|
+
|
29
|
+
tag_latest_remote
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Takelage
|
2
|
+
|
3
|
+
# takelage docker image tag list
|
4
|
+
class DockerImageTagList < SubCommandBase
|
5
|
+
|
6
|
+
include LoggingModule
|
7
|
+
include SystemModule
|
8
|
+
include ConfigModule
|
9
|
+
include DockerImageTagListModule
|
10
|
+
|
11
|
+
# Initialize takelage docker image tag list
|
12
|
+
def initialize(args = [], local_options = {}, configuration = {})
|
13
|
+
|
14
|
+
# initialize thor parent class
|
15
|
+
super args, local_options, configuration
|
16
|
+
|
17
|
+
@docker_repo = config.active['docker_repo']
|
18
|
+
@docker_image = config.active['docker_image']
|
19
|
+
@docker_tagsurl = config.active['docker_tagsurl']
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
# docker image tag list local
|
24
|
+
#
|
25
|
+
desc 'local', 'Print local docker image tags'
|
26
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
27
|
+
Print local docker image tags
|
28
|
+
LONGDESC
|
29
|
+
# Print local docker image tags.
|
30
|
+
def local
|
31
|
+
say docker_image_tag_list_local
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# docker image tag list remote
|
36
|
+
#
|
37
|
+
desc 'remote', 'Print remote docker image tags'
|
38
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
39
|
+
Print remote docker image tags
|
40
|
+
LONGDESC
|
41
|
+
# Print latest remote docker image tag.
|
42
|
+
def remote
|
43
|
+
say docker_image_tag_list_remote
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|