takelage 0.9.2 → 0.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f66a9c3c1c62c23deef953a07c15ec08e90325ea20989461836d5fe9bb3827d7
4
- data.tar.gz: 312841983390a8fbcd11e8c51ab591d37b44bec0c745a6f83dd10fbed5dbe358
3
+ metadata.gz: ab8abe1d25c97442acec36bb9ab580d2c49efb64572ececd587f4caa7ab30892
4
+ data.tar.gz: 49253eba927e0091bcc151d6f20424df56436df23c97669f18654202a7d40257
5
5
  SHA512:
6
- metadata.gz: e969702e08c786cb712f9f804a16aa612760c8859faaa3e363eb354308351833369eb79bd2f58d3dac1f1f0301bb7eb9e70f9fdf658eb82289ddb448d85e315c
7
- data.tar.gz: 71f2c1baa7255ae59a0ba15e859db9c04dcde1a33c4f9e90fe58c978f28798b663432ca5018fe17eee1d3b9d44b9f3f3e602be8ece86be6eda018a710d43bd46
6
+ metadata.gz: e8c69a6cbe268b971f2eb07b786cf3b6f4ea8d333dd0e8c047bbdc5394727fc3a6e3b35cbb03bac3676c3b1ce5d4eda64d71c990ffff2d49c43d95967d4cdd8d
7
+ data.tar.gz: f643e564fe3db829fad180f9948cc2381782c5410efa9d2386e05f7bc9cc0d45ff50ff24c7a4586a838e8f3e6c369eac445a2aa6db4bb97609371347060d8bdd
data/README.md CHANGED
@@ -118,8 +118,8 @@ or *tau config*.
118
118
  | *takelage.yml* | highest | Project-specific configuration file next to your main Rakefile. Some projects need special configuration. |
119
119
 
120
120
  ### Configuration Examples
121
-
122
- - You should the following configuration items in your *~/.takelage.yml*
121
+
122
+ - You should add the following configuration items in your *~/.takelage.yml*
123
123
  if you want to use a private bit remote server:
124
124
 
125
125
  ```yaml
@@ -128,6 +128,15 @@ bit_remote: 'ssh://bit@bit.example.com:222:/bit'
128
128
  bit_ssh: 'ssh -p 222 bit@bit.example.com'
129
129
  ```
130
130
 
131
+ - By default, takelage uses bright prompt colors which are best viewed on a
132
+ dark background. If you prefer a light background (or want less bright colors)
133
+ you can add an option to your *~/.takelage.yml*:
134
+
135
+ ```yaml
136
+ ---
137
+ docker_daynight: 'day'
138
+ ```
139
+
131
140
  - If you want to pin a specific docker tag for one of your projects
132
141
  then create an *takelage.yml* file with:
133
142
 
@@ -144,6 +153,8 @@ to overwrite defaults like:
144
153
  docker_repo: takelage-mock
145
154
  ```
146
155
 
156
+ Furthermore, every external command can be reconfigured.
157
+
147
158
  ### Project Files
148
159
 
149
160
  *tau* reads two different YAML project files
@@ -63,7 +63,7 @@ module BitScopeModule
63
63
 
64
64
  # prepare scope list command
65
65
  root =
66
- config.active['bit_scope_root']
66
+ config.active['bit_root']
67
67
 
68
68
  cmd_bit_scope_list =
69
69
  config.active['cmd_bit_scope_list_find_scopes'] % {
@@ -102,7 +102,7 @@ module BitScopeModule
102
102
 
103
103
  # prepare scope list command
104
104
  root =
105
- config.active['bit_scope_root']
105
+ config.active['bit_root']
106
106
 
107
107
  cmd_bit_scope_new =
108
108
  config.active['cmd_bit_scope_new_bit_init'] % {
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  bit_dev_user: 'takelage'
3
3
  bit_remote: ''
4
- bit_scope_root: '/bit'
4
+ bit_root: '/bit'
5
5
  bit_ssh: ''
6
6
  cmd_bit_check_workspace_bit_list: 'bit list'
7
7
  cmd_bit_check_workspace_pwd: 'pwd'
@@ -23,21 +23,21 @@ cmd_docker_check_running_docker_info: 'docker info'
23
23
  cmd_docker_container_check_existing_docker_ps: 'docker ps --filter name=^%{container}$ --quiet'
24
24
  cmd_docker_container_check_network_docker_network: 'docker network ls --quiet --filter name=^%{network}$'
25
25
  cmd_docker_container_check_orphaned_docker_exec: 'docker exec --interactive %{container} ps a'
26
- cmd_docker_create_container_docker_run: 'docker run --detach --env GEOSPIN_PROJECT_BASE_DIR=%{workdir} --env GOOGLE_APPLICATION_CREDENTIALS=/srv/google/default.json --env TAKELAGE_DAYNIGHT=%{daynight} --env TAKELAGE_PROJECT_BASE_DIR=%{workdir} --env TZ=%{timezone} --hostname %{container} --name %{container} --network %{container} --privileged --rm --tty --volume %{dockersock}:/var/run/docker.sock --volume %{homedir}/.config/gcloud:/srv/gcloud --volume %{homedir}/.google:/srv/google --volume %{homedir}:/homedir --volume %{workdir}:/project %{volume_dev} --workdir /project %{image} %{entrypoint} --gid %{gid} --home %{homedir} --uid %{uid} --username %{username} %{entrypoint_options}'
27
- cmd_docker_create_network_docker_network: 'docker network create %{network}'
28
- cmd_docker_enter_container_docker_exec: 'docker exec --interactive --tty %{container} %{loginpoint} --username %{username}'
29
- cmd_docker_get_container_name_by_id: 'docker ps --filter id=%{container} --format "{{.Names}}"'
30
- cmd_docker_get_containers: 'docker ps --all --filter name=^%{docker_repo}_ --quiet'
31
- cmd_docker_remove_network: 'docker network rm %{network}'
32
- cmd_docker_run_command_in_container: 'docker exec %{container} su %{username} -c "LANG=en_US.UTF-8 %{command}"'
33
- cmd_docker_stop_container: 'docker stop %{container}'
26
+ cmd_docker_container_create: 'docker run --detach --env GOOGLE_APPLICATION_CREDENTIALS=/srv/google/default.json --env TAKELAGE_PROJECT_BASE_DIR=%{workdir} --env TZ=%{timezone} --hostname %{container} --name %{container} --network %{container} --privileged --rm --tty --volume %{dockersock}:/var/run/docker.sock --volume %{homedir}/.config/gcloud:/srv/gcloud --volume %{homedir}/.google:/srv/google --volume %{homedir}:/homedir --volume %{workdir}:/project %{volume_dev} --workdir /project %{image} %{entrypoint} --gid %{gid} --home %{homedir} --uid %{uid} --username %{username} %{entrypoint_options}'
27
+ cmd_docker_container_create_network: 'docker network create %{network}'
28
+ cmd_docker_container_enter_container: 'docker exec --interactive --tty %{container} %{loginpoint} --username %{username}'
29
+ cmd_docker_container_get_container_name: 'docker ps --filter id=%{container} --format "{{.Names}}"'
30
+ cmd_docker_container_get_containers: 'docker ps --all --filter name=^%{docker_repo}_ --quiet'
31
+ cmd_docker_container_remove_network: 'docker network rm %{network}'
32
+ cmd_docker_container_docker_exec: 'docker exec %{container} su %{username} -c "LANG=en_US.UTF-8 %{command}"'
33
+ cmd_docker_container_stop_container: 'docker stop %{container}'
34
34
  cmd_docker_image_tag_check_local_docker_images: 'docker images --quiet %{image}'
35
35
  cmd_docker_image_tag_list_local_docker_images: 'docker images %{docker_user}\/%{docker_repo} --format "{{.Tag}}"'
36
36
  cmd_docker_image_update_docker_pull_latest: 'docker pull %{docker_user}/%{docker_repo}:%{tag_latest_remote}'
37
37
  cmd_docker_socket_stop_docker_socket_ps: 'sudo ps a -o pid,command'
38
38
  cmd_docker_socket_stop_docker_socket_kill: 'sudo kill -SIGTERM %{pid}'
39
- cmd_docker_get_socket_start_commands_docker_socket_start: 'sudo socat TCP-LISTEN:%{port},bind=%{host},reuseaddr,fork UNIX-CLIENT:%{path}'
40
- cmd_docker_get_socket_paths_docker_socket_gpgconf: 'gpgconf --list-dirs'
39
+ cmd_docker_socket_get_socket_socat: 'sudo socat TCP-LISTEN:%{port},bind=%{host},reuseaddr,fork UNIX-CLIENT:%{path}'
40
+ cmd_docker_socket_get_socket_gpgconf: 'gpgconf --list-dirs'
41
41
  cmd_docker_socket_start_sudo_true: 'sudo true'
42
42
  cmd_git_check_clean_git_unstaged: 'git diff --exit-code'
43
43
  cmd_git_check_clean_git_uncommitted: 'git diff --cached --exit-code'
@@ -45,16 +45,15 @@ cmd_git_check_clean_git_status: 'git status --porcelain'
45
45
  cmd_git_check_master_git_branch: 'git symbolic-ref HEAD'
46
46
  cmd_git_check_workspace_git_repo: 'git -C . rev-parse'
47
47
  cmd_git_check_workspace_pwd: 'pwd'
48
- docker_daynight: 'night'
49
48
  docker_debug: 'ansible/roles/takel-takelage/files/pyscripts'
50
49
  docker_entrypoint_options: ''
50
+ docker_registry: 'https://registry.hub.docker.com'
51
51
  docker_repo: 'takelage'
52
- docker_user: 'takelage'
53
52
  docker_socket_agent_port: 20000
54
53
  docker_socket_agent_ssh_port: 20001
55
54
  docker_socket_agent_extra_port: 20002
56
55
  docker_socket_agent_browser_port: 20003
57
56
  docker_tag: 'latest'
58
- docker_tagsurl: 'https://hub.docker.com/v2/repositories/takelage/takelage/tags'
57
+ docker_user: 'takelage'
59
58
  info_project_main: 'project.yml'
60
59
  info_project_private: 'private/project.yml'
@@ -28,8 +28,6 @@ module Takelage
28
28
 
29
29
  @entrypoint_options = config.active['docker_entrypoint_options']
30
30
 
31
- @daynight = config.active['docker_daynight']
32
-
33
31
  @dockersock = '/var/run/docker.sock'
34
32
 
35
33
  @username = ENV['USER'] ? ENV['USER'] : 'username'
@@ -7,8 +7,6 @@ module DockerContainerModule
7
7
 
8
8
  return false unless docker_check_running
9
9
 
10
- return false unless configured? %w(docker_user docker_repo docker_tag)
11
-
12
10
  docker_socket_start
13
11
 
14
12
  _create_network @hostname unless docker_container_check_network @hostname
@@ -22,8 +20,6 @@ module DockerContainerModule
22
20
 
23
21
  return false unless docker_check_running
24
22
 
25
- return false unless configured? %w(docker_user docker_repo docker_tag)
26
-
27
23
  _create_network @hostname unless docker_container_check_network @hostname
28
24
  _create_container @hostname unless docker_container_check_existing @hostname
29
25
  end
@@ -34,8 +30,6 @@ module DockerContainerModule
34
30
 
35
31
  return false unless docker_check_running
36
32
 
37
- return false unless configured? %w(docker_user docker_repo docker_tag)
38
-
39
33
  docker_socket_start
40
34
 
41
35
  _create_network @hostname unless docker_container_check_network @hostname
@@ -49,8 +43,6 @@ module DockerContainerModule
49
43
 
50
44
  return false unless docker_check_running
51
45
 
52
- return false unless configured? %w(docker_repo)
53
-
54
46
  networks = []
55
47
 
56
48
  _get_containers.each do |container|
@@ -70,8 +62,6 @@ module DockerContainerModule
70
62
 
71
63
  return false unless docker_check_running
72
64
 
73
- return false unless configured? %w(docker_repo)
74
-
75
65
  networks = []
76
66
 
77
67
  _get_containers.each do |container|
@@ -114,9 +104,8 @@ module DockerContainerModule
114
104
  end
115
105
 
116
106
  cmd_docker_create =
117
- config.active['cmd_docker_create_container_docker_run'] % {
107
+ config.active['cmd_docker_container_create'] % {
118
108
  workdir: @workdir,
119
- daynight: @daynight,
120
109
  timezone: @timezone,
121
110
  container: container,
122
111
  dockersock: @dockersock,
@@ -138,7 +127,7 @@ module DockerContainerModule
138
127
  log.debug "Create network \"#{network}\""
139
128
 
140
129
  cmd_create_network =
141
- config.active['cmd_docker_create_network_docker_network'] % {
130
+ config.active['cmd_docker_container_create_network'] % {
142
131
  network: network
143
132
  }
144
133
 
@@ -155,7 +144,7 @@ module DockerContainerModule
155
144
  end
156
145
 
157
146
  cmd_docker_enter =
158
- config.active['cmd_docker_enter_container_docker_exec'] % {
147
+ config.active['cmd_docker_container_enter_container'] % {
159
148
  container: container,
160
149
  loginpoint: loginpoint,
161
150
  username: @username
@@ -169,7 +158,7 @@ module DockerContainerModule
169
158
  log.debug "Getting name of container \"#{container}\""
170
159
 
171
160
  cmd_get_container_name_by_id =
172
- config.active['cmd_docker_get_container_name_by_id'] % {
161
+ config.active['cmd_docker_container_get_container_name'] % {
173
162
  container: container
174
163
  }
175
164
 
@@ -188,7 +177,7 @@ module DockerContainerModule
188
177
  log.debug "Getting all containers of image \"#{@docker_repo}\""
189
178
 
190
179
  cmd_docker_get =
191
- config.active['cmd_docker_get_containers'] % {
180
+ config.active['cmd_docker_container_get_containers'] % {
192
181
  docker_repo: @docker_repo
193
182
  }
194
183
 
@@ -203,7 +192,7 @@ module DockerContainerModule
203
192
  log.debug "Remove network \"#{network}\""
204
193
 
205
194
  cmd_remove_network =
206
- config.active['cmd_docker_remove_network'] % {
195
+ config.active['cmd_docker_container_remove_network'] % {
207
196
  network: network
208
197
  }
209
198
 
@@ -215,7 +204,7 @@ module DockerContainerModule
215
204
  log.debug "Running command \"#{command}\" in container \"#{container}\""
216
205
 
217
206
  cmd_docker_run_command =
218
- config.active['cmd_docker_run_command_in_container'] % {
207
+ config.active['cmd_docker_container_docker_exec'] % {
219
208
  container: container,
220
209
  username: @username,
221
210
  command: command
@@ -229,7 +218,7 @@ module DockerContainerModule
229
218
  log.debug "Stopping container \"#{container}\""
230
219
 
231
220
  cmd_docker_stop =
232
- config.active['cmd_docker_stop_container'] % {
221
+ config.active['cmd_docker_container_stop_container'] % {
233
222
  container: container
234
223
  }
235
224
 
@@ -19,7 +19,7 @@ module Takelage
19
19
 
20
20
  @docker_user = config.active['docker_user']
21
21
  @docker_repo = config.active['docker_repo']
22
- @docker_tagsurl = config.active['docker_tagsurl']
22
+ @docker_registry = config.active['docker_registry']
23
23
  end
24
24
 
25
25
  desc 'tag [COMMAND]', 'Handle docker image tags'
@@ -5,8 +5,6 @@ module DockerImageModule
5
5
  def docker_image_update
6
6
  return false unless docker_check_running
7
7
 
8
- return false unless configured? %w(docker_user docker_repo docker_tagsurl)
9
-
10
8
  tag_latest_remote = docker_image_tag_latest_remote
11
9
 
12
10
  if tag_latest_remote.to_s.strip.empty?
@@ -18,7 +18,7 @@ module Takelage
18
18
 
19
19
  @docker_user = config.active['docker_user']
20
20
  @docker_repo = config.active['docker_repo']
21
- @docker_tagsurl = config.active['docker_tagsurl']
21
+ @docker_registry = config.active['docker_registry']
22
22
  end
23
23
 
24
24
  #
@@ -8,8 +8,6 @@ module DockerImageTagCheckModule
8
8
 
9
9
  return false unless docker_check_running
10
10
 
11
- return false unless configured? %w(docker_user docker_repo)
12
-
13
11
  if tag.to_s.strip.empty?
14
12
  log.warn "No local docker image tag specified"
15
13
  return false
@@ -40,8 +38,6 @@ module DockerImageTagCheckModule
40
38
 
41
39
  return false unless docker_check_running
42
40
 
43
- return false unless configured? %w(docker_user docker_repo docker_tagsurl)
44
-
45
41
  if tag .to_s.strip.empty?
46
42
  log.warn "No remote docker image tag specified"
47
43
  return false
@@ -18,7 +18,7 @@ module Takelage
18
18
 
19
19
  @docker_user = config.active['docker_user']
20
20
  @docker_repo = config.active['docker_repo']
21
- @docker_tagsurl = config.active['docker_tagsurl']
21
+ @docker_registry = config.active['docker_registry']
22
22
  end
23
23
 
24
24
  #
@@ -17,7 +17,7 @@ module Takelage
17
17
 
18
18
  @docker_user = config.active['docker_user']
19
19
  @docker_repo = config.active['docker_repo']
20
- @docker_tagsurl = config.active['docker_tagsurl']
20
+ @docker_registry = config.active['docker_registry']
21
21
  end
22
22
 
23
23
  #
@@ -22,25 +22,17 @@ module DockerImageTagListModule
22
22
  # Backend method for docker image tag list remote.
23
23
  # @return [Array] remote docker image tags
24
24
  def docker_image_tag_list_remote
25
- log.debug "Getting docker remote tags from \"#{@docker_tagsurl}\""
26
-
27
- begin
28
- @res = Net::HTTP.get_response URI(@docker_tagsurl)
29
- unless @res.code.eql? '200'
30
- log.error "Unable to connect to \"#{@docker_tagsurl}\""
31
- return false
32
- end
33
- rescue SocketError => e
34
- log.debug e
35
- return false
36
- end
37
-
38
- begin
39
- tags = JSON.parse @res.body
40
- rescue JSON::ParserError
41
- log.error 'Unable to parse JSON'
42
- return false
43
- end
25
+ log.debug "Getting docker remote tags " +
26
+ "of \"#{@docker_user}/#{@docker_repo}\" " +
27
+ "from \"#{@docker_registry}\""
28
+
29
+ registry = DockerRegistry2.connect(@docker_registry)
30
+
31
+ log.debug ("Connected to registry \"#{@docker_registry}\"")
32
+
33
+ user = File.basename @docker_user
34
+
35
+ tags = registry.tags("#{user}/#{@docker_repo}")
44
36
 
45
37
  VersionSorter.sort(tags['tags'])
46
38
  end
@@ -76,7 +76,7 @@ module DockerSocketModule
76
76
  # loop over sockets
77
77
  @sockets.each do |socket, socket_config|
78
78
  cmd_start_socket =
79
- config.active['cmd_docker_get_socket_start_commands_docker_socket_start'] % {
79
+ config.active['cmd_docker_socket_get_socket_socat'] % {
80
80
  host: socket_config[:host],
81
81
  port: socket_config[:port],
82
82
  path: socket_config[:path],
@@ -99,7 +99,7 @@ module DockerSocketModule
99
99
  # get socket paths
100
100
  def _get_socket_paths
101
101
  cmd_gpgconf_listdirs =
102
- config.active['cmd_docker_get_socket_paths_docker_socket_gpgconf']
102
+ config.active['cmd_docker_socket_get_socket_gpgconf']
103
103
 
104
104
  stdout_str = run cmd_gpgconf_listdirs
105
105
 
data/lib/takelage/version CHANGED
@@ -1 +1 @@
1
- 0.9.2
1
+ 0.10.0
data/lib/takelage.rb CHANGED
@@ -1,9 +1,9 @@
1
+ require 'docker_registry2'
1
2
  require 'etc'
2
3
  require 'fileutils'
3
4
  require 'fylla'
4
5
  require 'json'
5
6
  require 'logger'
6
- require 'net/http'
7
7
  require 'rake'
8
8
  require 'socket'
9
9
  require 'thor'
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.9.2
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geospin
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2019-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: docker_registry2
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: fylla
15
29
  requirement: !ruby/object:Gem::Requirement