takelage 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +674 -0
  3. data/README.md +159 -0
  4. data/bin/tau +5 -0
  5. data/lib/Thorfile +1 -0
  6. data/lib/takelage/bit/cli.rb +18 -0
  7. data/lib/takelage/bit/clipboard/cli.rb +68 -0
  8. data/lib/takelage/bit/clipboard/module.rb +174 -0
  9. data/lib/takelage/bit/scope/cli.rb +58 -0
  10. data/lib/takelage/bit/scope/module.rb +81 -0
  11. data/lib/takelage/completion/cli.rb +21 -0
  12. data/lib/takelage/default.yml +30 -0
  13. data/lib/takelage/docker/cli.rb +16 -0
  14. data/lib/takelage/docker/container/check/cli.rb +40 -0
  15. data/lib/takelage/docker/container/check/module.rb +44 -0
  16. data/lib/takelage/docker/container/cli.rb +127 -0
  17. data/lib/takelage/docker/container/module.rb +168 -0
  18. data/lib/takelage/docker/image/cli.rb +41 -0
  19. data/lib/takelage/docker/image/module.rb +33 -0
  20. data/lib/takelage/docker/image/tag/check/cli.rb +47 -0
  21. data/lib/takelage/docker/image/tag/check/module.rb +56 -0
  22. data/lib/takelage/docker/image/tag/cli.rb +16 -0
  23. data/lib/takelage/docker/image/tag/latest/cli.rb +49 -0
  24. data/lib/takelage/docker/image/tag/latest/module.rb +31 -0
  25. data/lib/takelage/docker/image/tag/list/cli.rb +46 -0
  26. data/lib/takelage/docker/image/tag/list/module.rb +44 -0
  27. data/lib/takelage/docker/socket/cli.rb +61 -0
  28. data/lib/takelage/docker/socket/module.rb +137 -0
  29. data/lib/takelage/git/check/cli.rb +46 -0
  30. data/lib/takelage/git/check/module.rb +64 -0
  31. data/lib/takelage/git/cli.rb +10 -0
  32. data/lib/takelage/info/cli.rb +10 -0
  33. data/lib/takelage/info/project/cli.rb +47 -0
  34. data/lib/takelage/lib/config.rb +80 -0
  35. data/lib/takelage/lib/logging.rb +30 -0
  36. data/lib/takelage/lib/project.rb +57 -0
  37. data/lib/takelage/lib/subcmd.rb +13 -0
  38. data/lib/takelage/lib/system.rb +107 -0
  39. data/lib/takelage/self/cli.rb +40 -0
  40. data/lib/takelage/self/config/cli.rb +70 -0
  41. data/lib/takelage/self/module.rb +26 -0
  42. data/lib/takelage/version +1 -0
  43. data/lib/takelage.rb +198 -0
  44. 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