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.
- checksums.yaml +4 -4
- data/lib/takelage.rb +37 -14
- data/lib/takelage/bit/check/cli.rb +1 -1
- data/lib/takelage/bit/check/{module.rb → workspace.rb} +2 -2
- data/lib/takelage/bit/clipboard/cli.rb +9 -3
- data/lib/takelage/bit/clipboard/copy.rb +140 -0
- data/lib/takelage/bit/clipboard/lib.rb +153 -0
- data/lib/takelage/bit/clipboard/paste.rb +58 -0
- data/lib/takelage/bit/clipboard/pull.rb +38 -0
- data/lib/takelage/bit/clipboard/push.rb +37 -0
- data/lib/takelage/bit/scope/add.rb +55 -0
- data/lib/takelage/bit/scope/cli.rb +7 -3
- data/lib/takelage/bit/scope/inbit.rb +13 -0
- data/lib/takelage/bit/scope/list.rb +41 -0
- data/lib/takelage/bit/scope/new.rb +44 -0
- data/lib/takelage/default.yml +4 -3
- data/lib/takelage/docker/check/cli.rb +1 -1
- data/lib/takelage/docker/check/{module.rb → running.rb} +2 -2
- data/lib/takelage/docker/container/check/cli.rb +4 -2
- data/lib/takelage/docker/container/check/existing.rb +31 -0
- data/lib/takelage/docker/container/check/network.rb +31 -0
- data/lib/takelage/docker/container/check/orphaned.rb +31 -0
- data/lib/takelage/docker/container/cli.rb +35 -34
- data/lib/takelage/docker/container/command.rb +33 -0
- data/lib/takelage/docker/container/daemon.rb +13 -0
- data/lib/takelage/docker/container/lib.rb +149 -0
- data/lib/takelage/docker/container/login.rb +46 -0
- data/lib/takelage/docker/container/nuke.rb +39 -0
- data/lib/takelage/docker/container/purge.rb +30 -0
- data/lib/takelage/docker/image/check/cli.rb +4 -4
- data/lib/takelage/docker/image/check/{module.rb → outdated.rb} +4 -5
- data/lib/takelage/docker/image/cli.rb +4 -4
- data/lib/takelage/docker/image/tag/check/cli.rb +4 -3
- data/lib/takelage/docker/image/tag/check/{module.rb → local.rb} +2 -34
- data/lib/takelage/docker/image/tag/check/remote.rb +38 -0
- data/lib/takelage/docker/image/tag/latest/cli.rb +5 -3
- data/lib/takelage/docker/image/tag/latest/local.rb +20 -0
- data/lib/takelage/docker/image/tag/latest/{module.rb → remote.rb} +2 -18
- data/lib/takelage/docker/image/tag/list/cli.rb +3 -2
- data/lib/takelage/docker/image/tag/list/local.rb +19 -0
- data/lib/takelage/docker/image/tag/list/{module.rb → remote.rb} +2 -17
- data/lib/takelage/docker/image/{module.rb → update.rb} +2 -2
- data/lib/takelage/docker/socket/cli.rb +6 -2
- data/lib/takelage/docker/socket/host.rb +25 -0
- data/lib/takelage/docker/socket/lib.rb +88 -0
- data/lib/takelage/docker/socket/scheme.rb +46 -0
- data/lib/takelage/docker/socket/start.rb +34 -0
- data/lib/takelage/docker/socket/stop.rb +55 -0
- data/lib/takelage/git/check/clean.rb +46 -0
- data/lib/takelage/git/check/cli.rb +3 -1
- data/lib/takelage/git/check/master.rb +26 -0
- data/lib/takelage/git/check/workspace.rb +33 -0
- data/lib/takelage/self/cli.rb +1 -1
- data/lib/takelage/self/{module.rb → list.rb} +2 -2
- data/lib/takelage/version +1 -1
- metadata +38 -15
- data/lib/takelage/bit/clipboard/module.rb +0 -401
- data/lib/takelage/bit/scope/module.rb +0 -122
- data/lib/takelage/docker/container/check/module.rb +0 -81
- data/lib/takelage/docker/container/module.rb +0 -295
- data/lib/takelage/docker/socket/module.rb +0 -227
- data/lib/takelage/git/check/module.rb +0 -93
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker container command
|
4
|
+
module DockerContainerCommand
|
5
|
+
# Backend method for docker container command.
|
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
|
+
return false unless _docker_container_lib_create_net_and_ctr @hostname
|
13
|
+
|
14
|
+
_docker_container_command_run_command @hostname, command
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# Prepare run command in container command.
|
20
|
+
def _docker_container_command_run_command(container, command)
|
21
|
+
log.debug "Running command \"#{command}\" in container \"#{container}\""
|
22
|
+
|
23
|
+
cmd_docker_run_command =
|
24
|
+
format(
|
25
|
+
config.active['cmd_docker_container_docker_exec'],
|
26
|
+
container: container,
|
27
|
+
username: @username,
|
28
|
+
command: command
|
29
|
+
)
|
30
|
+
|
31
|
+
run_and_exit cmd_docker_run_command
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker container daemon
|
4
|
+
module DockerContainerDaemon
|
5
|
+
# Backend method for docker container daemon.
|
6
|
+
def docker_container_daemon
|
7
|
+
log.debug 'Starting docker container as daemon'
|
8
|
+
|
9
|
+
return false unless docker_check_running
|
10
|
+
|
11
|
+
_docker_container_lib_create_net_and_ctr @hostname
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker container lib
|
4
|
+
module DockerContainerLib
|
5
|
+
private
|
6
|
+
|
7
|
+
# Create docker container and network.
|
8
|
+
def _docker_container_lib_create_net_and_ctr(name)
|
9
|
+
unless docker_container_check_network name
|
10
|
+
_docker_container_lib_create_network name
|
11
|
+
end
|
12
|
+
|
13
|
+
return true if docker_container_check_existing name
|
14
|
+
|
15
|
+
_docker_container_lib_create_container name
|
16
|
+
end
|
17
|
+
|
18
|
+
# Remove docker networks.
|
19
|
+
def _docker_container_lib_remove_networks(networks)
|
20
|
+
networks.each do |network|
|
21
|
+
if docker_container_check_network network
|
22
|
+
_docker_container_lib_remove_network network
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Create docker network.
|
28
|
+
def _docker_container_lib_create_network(network)
|
29
|
+
log.debug "Create network \"#{network}\""
|
30
|
+
|
31
|
+
cmd_create_network = format(
|
32
|
+
config.active['cmd_docker_container_create_network'],
|
33
|
+
network: network
|
34
|
+
)
|
35
|
+
|
36
|
+
run cmd_create_network
|
37
|
+
end
|
38
|
+
|
39
|
+
# Remove docker network.
|
40
|
+
def _docker_container_lib_remove_network(network)
|
41
|
+
log.debug "Remove network \"#{network}\""
|
42
|
+
|
43
|
+
cmd_remove_network = format(
|
44
|
+
config.active['cmd_docker_container_remove_network'],
|
45
|
+
network: network
|
46
|
+
)
|
47
|
+
|
48
|
+
run cmd_remove_network
|
49
|
+
end
|
50
|
+
|
51
|
+
# Create docker container.
|
52
|
+
# rubocop:disable Metrics/MethodLength
|
53
|
+
def _docker_container_lib_create_container(container)
|
54
|
+
log.debug "Creating container \"#{container}\""
|
55
|
+
|
56
|
+
image = "#{@docker_user}/#{@docker_repo}:#{@docker_tag}"
|
57
|
+
|
58
|
+
return false unless _docker_container_lib_image_available? image
|
59
|
+
|
60
|
+
log.debug "Using docker image \"#{image}\""
|
61
|
+
|
62
|
+
unless @socket_host == '127.0.0.1'
|
63
|
+
addhost = "--add-host host.docker.internal:#{@socket_host}"
|
64
|
+
end
|
65
|
+
|
66
|
+
entrypoint = '/entrypoint.py '
|
67
|
+
volume_dev = ''
|
68
|
+
if options[:development]
|
69
|
+
entrypoint += ' --debug '
|
70
|
+
volume_dev = "--volume #{@workdir}/#{@docker_debug}:/debug "
|
71
|
+
end
|
72
|
+
|
73
|
+
cmd_docker_create = format(
|
74
|
+
config.active['cmd_docker_container_create'],
|
75
|
+
workdir: @workdir,
|
76
|
+
timezone: @timezone,
|
77
|
+
container: container,
|
78
|
+
dockersock: @dockersock,
|
79
|
+
homedir: @homedir,
|
80
|
+
volume_dev: volume_dev,
|
81
|
+
image: image,
|
82
|
+
addhost: addhost,
|
83
|
+
dockerrun_options: @dockerrun_options,
|
84
|
+
entrypoint: entrypoint,
|
85
|
+
gid: @gid,
|
86
|
+
uid: @uid,
|
87
|
+
username: @username,
|
88
|
+
gpg_agent_port: @gpg_agent_port,
|
89
|
+
gpg_ssh_agent_port: @gpg_ssh_agent_port,
|
90
|
+
extra: @entrypoint_extra,
|
91
|
+
entrypoint_options: @entrypoint_options
|
92
|
+
)
|
93
|
+
|
94
|
+
try cmd_docker_create
|
95
|
+
end
|
96
|
+
|
97
|
+
# rubocop:enable Metrics/MethodLength
|
98
|
+
|
99
|
+
# Check if docker image is available
|
100
|
+
def _docker_container_lib_image_available?(image)
|
101
|
+
return true if docker_image_tag_list_local.include? @docker_tag
|
102
|
+
|
103
|
+
log.error "No local image \"#{image}\" available"
|
104
|
+
log.info "Try: docker pull #{image}"
|
105
|
+
false
|
106
|
+
end
|
107
|
+
|
108
|
+
# Get container name by id.
|
109
|
+
def _docker_container_lib_get_container_name_by_id(container)
|
110
|
+
log.debug "Getting name of container \"#{container}\""
|
111
|
+
|
112
|
+
cmd_get_container_name_by_id = format(
|
113
|
+
config.active['cmd_docker_container_get_container_name'],
|
114
|
+
container: container
|
115
|
+
)
|
116
|
+
|
117
|
+
name = (run cmd_get_container_name_by_id).chomp
|
118
|
+
|
119
|
+
log.debug "Container #{container} has name \"#{name}\""
|
120
|
+
|
121
|
+
name
|
122
|
+
end
|
123
|
+
|
124
|
+
# Get all docker containers.
|
125
|
+
# @return [Array] list of docker containers
|
126
|
+
def _docker_container_lib_get_containers
|
127
|
+
log.debug "Getting all containers of image \"#{@docker_repo}\""
|
128
|
+
|
129
|
+
cmd_docker_get = format(
|
130
|
+
config.active['cmd_docker_container_get_containers'],
|
131
|
+
docker_repo: @docker_repo
|
132
|
+
)
|
133
|
+
|
134
|
+
# convert stdout lines to array and return array
|
135
|
+
(run cmd_docker_get).split(/\n+/)
|
136
|
+
end
|
137
|
+
|
138
|
+
# Stop container.
|
139
|
+
def _docker_container_lib_stop_container(container)
|
140
|
+
log.debug "Stopping container \"#{container}\""
|
141
|
+
|
142
|
+
cmd_docker_stop = format(
|
143
|
+
config.active['cmd_docker_container_stop_container'],
|
144
|
+
container: container
|
145
|
+
)
|
146
|
+
|
147
|
+
run cmd_docker_stop
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker container login
|
4
|
+
module DockerContainerLogin
|
5
|
+
# Backend method for docker container login.
|
6
|
+
def docker_container_login
|
7
|
+
log.debug 'Logging in to docker container'
|
8
|
+
|
9
|
+
return false unless docker_check_running
|
10
|
+
|
11
|
+
_docker_container_login_check_outdated
|
12
|
+
docker_socket_start
|
13
|
+
return false unless _docker_container_lib_create_net_and_ctr @hostname
|
14
|
+
|
15
|
+
run_and_exit _docker_container_login_enter_container @hostname
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# Check if newer docker container is available.
|
21
|
+
def _docker_container_login_check_outdated
|
22
|
+
return if @docker_tag == 'latest'
|
23
|
+
|
24
|
+
outdated = docker_image_check_outdated @docker_tag
|
25
|
+
return unless outdated
|
26
|
+
|
27
|
+
tag_latest = docker_image_tag_latest_remote
|
28
|
+
log.warn "#{@docker_user}/#{@docker_repo}:#{@docker_tag} is outdated"
|
29
|
+
log.warn "#{@docker_user}/#{@docker_repo}:#{tag_latest} is available"
|
30
|
+
end
|
31
|
+
|
32
|
+
# Prepare enter existing container command.
|
33
|
+
def _docker_container_login_enter_container(container)
|
34
|
+
log.debug "Entering container \"#{container}\""
|
35
|
+
|
36
|
+
loginpoint = '/loginpoint.py'
|
37
|
+
loginpoint += ' --debug ' if options[:development]
|
38
|
+
|
39
|
+
format(
|
40
|
+
config.active['cmd_docker_container_enter_container'],
|
41
|
+
container: container,
|
42
|
+
loginpoint: loginpoint,
|
43
|
+
username: @username
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker container nuke
|
4
|
+
module DockerContainerNuke
|
5
|
+
# Backend method for docker container nuke.
|
6
|
+
def docker_container_nuke
|
7
|
+
log.debug 'Removing all docker containers'
|
8
|
+
|
9
|
+
return false unless docker_check_running
|
10
|
+
|
11
|
+
return false if _docker_container_nuke_harakiri?
|
12
|
+
|
13
|
+
networks = _docker_container_nuke_kill_existing_containers
|
14
|
+
_docker_container_lib_remove_networks networks
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# Check if we are running tau nuke inside a takelage container
|
20
|
+
def _docker_container_nuke_harakiri?
|
21
|
+
hostname = ENV['HOSTNAME'] || ''
|
22
|
+
return false unless hostname.start_with? "#{@docker_repo}_"
|
23
|
+
|
24
|
+
log.error "Please run \"tau nuke\" outside of #{@docker_repo} containers"
|
25
|
+
log.info "Run \"tau purge\" to remove orphaned #{@docker_repo} containers"
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
# Kill all docker containers and return list of networks
|
30
|
+
def _docker_container_nuke_kill_existing_containers
|
31
|
+
networks = []
|
32
|
+
_docker_container_lib_get_containers.each do |container|
|
33
|
+
name = _docker_container_lib_get_container_name_by_id container
|
34
|
+
_docker_container_lib_stop_container container
|
35
|
+
networks << name unless networks.include? name
|
36
|
+
end
|
37
|
+
networks
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker container purge
|
4
|
+
module DockerContainerPurge
|
5
|
+
# Backend method for docker container purge.
|
6
|
+
def docker_container_purge
|
7
|
+
log.debug 'Removing orphaned docker containers'
|
8
|
+
|
9
|
+
return false unless docker_check_running
|
10
|
+
|
11
|
+
networks = _docker_container_purge_kill_orphaned_containers
|
12
|
+
_docker_container_lib_remove_networks networks
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
# Kill orphaned docker containers and return list of networks
|
18
|
+
def _docker_container_purge_kill_orphaned_containers
|
19
|
+
networks = []
|
20
|
+
|
21
|
+
_docker_container_lib_get_containers.each do |container|
|
22
|
+
next unless docker_container_check_orphaned container
|
23
|
+
|
24
|
+
name = _docker_container_lib_get_container_name_by_id container
|
25
|
+
_docker_container_lib_stop_container container
|
26
|
+
networks << name unless networks.include? name
|
27
|
+
end
|
28
|
+
networks
|
29
|
+
end
|
30
|
+
end
|
@@ -6,10 +6,10 @@ module Takelage
|
|
6
6
|
include LoggingModule
|
7
7
|
include SystemModule
|
8
8
|
include ConfigModule
|
9
|
-
include
|
10
|
-
include
|
11
|
-
include
|
12
|
-
include
|
9
|
+
include DockerCheckRunning
|
10
|
+
include DockerImageTagListRemote
|
11
|
+
include DockerImageTagLatestRemote
|
12
|
+
include DockerImageCheckOutdated
|
13
13
|
|
14
14
|
# Initialize takelage docker image check
|
15
15
|
def initialize(args = [], local_options = {}, configuration = {})
|
@@ -1,10 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# takelage docker image check
|
4
|
-
module
|
3
|
+
# takelage docker image check outdated
|
4
|
+
module DockerImageCheckOutdated
|
5
5
|
# Backend method for docker image check outdated.
|
6
6
|
# @return [Boolean] is docker image tag older than latest remote image tag?
|
7
|
-
# rubocop:disable Style/RedundantSort
|
8
7
|
def docker_image_check_outdated(tag)
|
9
8
|
log.debug "Check if docker image version \"#{tag}\" is outdated"
|
10
9
|
|
@@ -14,15 +13,15 @@ module DockerImageCheckModule
|
|
14
13
|
|
15
14
|
tag_latest_remote = docker_image_tag_latest_remote
|
16
15
|
tags = [tag, docker_image_tag_latest_remote]
|
16
|
+
# rubocop:disable Style/RedundantSort
|
17
17
|
outdated = (tag != VersionSorter.sort(tags).last)
|
18
|
+
# rubocop:enable Style/RedundantSort
|
18
19
|
|
19
20
|
_docker_outdated_log_info tag, tag_latest_remote if outdated
|
20
21
|
|
21
22
|
outdated
|
22
23
|
end
|
23
24
|
|
24
|
-
# rubocop:enable Style/RedundantSort
|
25
|
-
|
26
25
|
private
|
27
26
|
|
28
27
|
# Check if the tag is "latest".
|
@@ -6,10 +6,10 @@ module Takelage
|
|
6
6
|
include LoggingModule
|
7
7
|
include SystemModule
|
8
8
|
include ConfigModule
|
9
|
-
include
|
10
|
-
include
|
11
|
-
include
|
12
|
-
include
|
9
|
+
include DockerCheckRunning
|
10
|
+
include DockerImageTagListRemote
|
11
|
+
include DockerImageTagLatestRemote
|
12
|
+
include DockerImageUpdate
|
13
13
|
|
14
14
|
# Initialize takelage docker image
|
15
15
|
def initialize(args = [], local_options = {}, configuration = {})
|
@@ -6,9 +6,10 @@ module Takelage
|
|
6
6
|
include LoggingModule
|
7
7
|
include SystemModule
|
8
8
|
include ConfigModule
|
9
|
-
include
|
10
|
-
include
|
11
|
-
include
|
9
|
+
include DockerCheckRunning
|
10
|
+
include DockerImageTagListRemote
|
11
|
+
include DockerImageTagCheckLocal
|
12
|
+
include DockerImageTagCheckRemote
|
12
13
|
|
13
14
|
# Initialize takelage docker image tag check
|
14
15
|
def initialize(args = [], local_options = {}, configuration = {})
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# takelage docker image tag check
|
4
|
-
module
|
3
|
+
# takelage docker image tag check local
|
4
|
+
module DockerImageTagCheckLocal
|
5
5
|
# Backend method for docker image check tag local.
|
6
6
|
# @return [Boolean] does local docker image tag exist?
|
7
7
|
def docker_image_tag_check_local(tag)
|
@@ -22,26 +22,6 @@ module DockerImageTagCheckModule
|
|
22
22
|
true
|
23
23
|
end
|
24
24
|
|
25
|
-
# Backend method for docker image check tag remote.
|
26
|
-
# @return [Boolean] does remote docker image tag exist?
|
27
|
-
def docker_image_tag_check_remote(tag)
|
28
|
-
log.debug "Check if remote image tag \"#{tag}\" exists"
|
29
|
-
|
30
|
-
return false unless docker_check_running
|
31
|
-
|
32
|
-
if tag.to_s.strip.empty?
|
33
|
-
log.warn 'No remote docker image tag specified'
|
34
|
-
return false
|
35
|
-
end
|
36
|
-
|
37
|
-
image = "#{@docker_user}/#{@docker_repo}:#{tag}"
|
38
|
-
|
39
|
-
return false unless _docker_iamge_check_remote_image? image, tag
|
40
|
-
|
41
|
-
log.debug "Found remote docker image \"#{image}\""
|
42
|
-
true
|
43
|
-
end
|
44
|
-
|
45
25
|
private
|
46
26
|
|
47
27
|
# Check if local image exists.
|
@@ -59,16 +39,4 @@ module DockerImageTagCheckModule
|
|
59
39
|
|
60
40
|
true
|
61
41
|
end
|
62
|
-
|
63
|
-
# Check if remote image exists.
|
64
|
-
def _docker_iamge_check_remote_image?(image, tag)
|
65
|
-
tags = docker_image_tag_list_remote
|
66
|
-
|
67
|
-
unless tags != false && tags.include?(tag)
|
68
|
-
log.debug "No remote docker image \"#{image}\" found"
|
69
|
-
return false
|
70
|
-
end
|
71
|
-
|
72
|
-
true
|
73
|
-
end
|
74
42
|
end
|