takelage 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|