takelage 0.27.1 → 0.28.5

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: 689104aead67286437fded2a138c0a043f9eb9604a7a44375df45a5f9d66de68
4
- data.tar.gz: 91fe52a44bfc3025b284ae155879a1c5d948a34baba5fc2a903c376c8996062e
3
+ metadata.gz: c9cbafaa5bcc3f8d74cf010208562a6a117e2051878031c723591ab3b11ec382
4
+ data.tar.gz: '087322623aab1f24da511744d2e5f28377077593bc48e10c433ac7f8406c413b'
5
5
  SHA512:
6
- metadata.gz: 948586185c0cf2b448d3ad14d49c80742e73e5517d545cbd951908d062ceb2a1aec0e2404c86deec18e8b916c597dc246e2129b21e165986ed5cb55b367f1c89
7
- data.tar.gz: 82c8e74a3e9673707f0ca2ce1cb865e73bff2282208ac0d76b8ba21eed04e6cefc07b84080faeaafa10bd34e324beafb2e5537ebd7a6a6e809e40dd0342bad43
6
+ metadata.gz: 5998e3c792f0173950380450329100d039802219b48d7b1d88f07985a3df6f3510f30943a7becbd78a966837a93a0927ae30cc8e32b940e785952b10094e7708
7
+ data.tar.gz: 8ec3aa7a7fb9737915ee4cbbeb541483aa2cb97871423f415df66213675fc86d7ba24c45bc53d4b666360397e5265f48a896bb9506aa127ab9470e4f98fb8af5
data/README.md CHANGED
@@ -102,11 +102,15 @@ tau [info project active](features/cucumber/features/info/info.project.active.fe
102
102
  tau [info project dir](features/cucumber/features/info/info.project.dir.feature) | Print project root directory
103
103
  tau [info project main](features/cucumber/features/info/info.project.main.feature) | Print main project info
104
104
  tau [info project private](features/cucumber/features/info/info.project.private.feature) | Print private project info
105
- tau [info status git](features/cucumber/features/info/info.status.git.feature) | Check git status info
106
- tau [info status gopass](features/cucumber/features/info/info.status.gopass.feature) | Check gopass status info
107
- tau [info status gpg](features/cucumber/features/info/info.status.gpg.feature) | Check gpg status info
108
- tau [info status bar](features/cucumber/features/info/info.status.bar.feature) | Print status info bar
109
- tau [info status ssh](features/cucumber/features/info/info.status.ssh.feature) | Check ssh status info
105
+ tau [info status bar](features/cucumber/features/info/info.status.bar.feature) | Print status bar
106
+ tau [info status git](features/cucumber/features/info/info.status.git.feature) | Check git status
107
+ tau [info status gopass](features/cucumber/features/info/info.status.gopass.feature) | Check gopass status
108
+ tau [info status gpg](features/cucumber/features/info/info.status.gpg.feature) | Check gpg status
109
+ tau [info status ssh](features/cucumber/features/info/info.status.ssh.feature) | Check ssh status
110
+ tau [mutagen socket check](features/cucumber/features/mutagen/mutagen.socket.check.feature) [SOCKET] | Check if mutagen [SOCKET] exists
111
+ tau [mutagen socket create](features/cucumber/features/mutagen/mutagen.socket.create.feature) [IN] [OUT] | Create a mutagen socket from [IN] to [OUT] of the container
112
+ tau [mutagen socket list](features/cucumber/features/mutagen/mutagen.socket.list.feature) | List mutagen sockets
113
+ tau [mutagen socket terminate](features/cucumber/features/mutagen/mutagen.socket.terminate.feature) | Terminate a mutagen socket
110
114
  tau [self config active](features/cucumber/features/self/self.config.active.feature) | Print active takelage configuration
111
115
  tau [self config default](features/cucumber/features/self/self.config.default.feature) | Print takelage default configuration
112
116
  tau [self config home](features/cucumber/features/self/self.config.home.feature) | Print takelage home config file configuration
data/lib/takelage.rb CHANGED
@@ -59,6 +59,8 @@ require_relative 'takelage/docker/image/tag/check'
59
59
  require_relative 'takelage/docker/image/tag/cli'
60
60
  require_relative 'takelage/docker/image/update'
61
61
  require_relative 'takelage/docker/image/cli'
62
+ require_relative 'takelage/mutagen/socket/create'
63
+ require_relative 'takelage/mutagen/socket/terminate'
62
64
  require_relative 'takelage/docker/container/check/existing'
63
65
  require_relative 'takelage/docker/container/check/network'
64
66
  require_relative 'takelage/docker/container/check/orphaned'
@@ -80,6 +82,10 @@ require_relative 'takelage/info/status/bar'
80
82
  require_relative 'takelage/info/status/cli'
81
83
  require_relative 'takelage/info/project/cli'
82
84
  require_relative 'takelage/info/cli'
85
+ require_relative 'takelage/mutagen/socket/check'
86
+ require_relative 'takelage/mutagen/socket/list'
87
+ require_relative 'takelage/mutagen/socket/cli'
88
+ require_relative 'takelage/mutagen/cli'
83
89
  require_relative 'takelage/self/config/cli'
84
90
  require_relative 'takelage/self/list'
85
91
  require_relative 'takelage/self/cli'
@@ -143,6 +149,9 @@ module Takelage
143
149
  desc 'info [COMMAND] ', 'Get information'
144
150
  subcommand 'info', Info
145
151
 
152
+ desc 'mutagen [COMMAND] ', 'Manage mutagen'
153
+ subcommand 'mutagen', Mutagen
154
+
146
155
  desc 'self [COMMAND] ', 'Manage takelage tools'
147
156
  subcommand 'self', Self
148
157
 
@@ -66,6 +66,11 @@ cmd_info_status_gopass_root_store: 'gopass config | grep "path" | cut -d " " -f
66
66
  cmd_info_status_gpg_agent: 'gpg-connect-agent /bye'
67
67
  cmd_info_status_gpg_keys: 'gpg --list-keys'
68
68
  cmd_info_status_ssh_keys: 'ssh-add -l'
69
+ cmd_mutagen_forward_socket_create: 'mutagen forward create --name=%{socketname} --label=%{hostlabel} --label=%{takellabel} docker://%{username}@%{container}:unix:%{containersock} unix:%{hostsock}'
70
+ cmd_mutagen_forward_socket_check: 'mutagen forward list %{socketname}'
71
+ cmd_mutagen_forward_socket_terminate: 'mutagen forward terminate %{socketname}'
72
+ cmd_mutagen_forward_socket_remove: 'rm -f ~/.mutagen/daemon/*'
73
+ cmd_mutagen_forward_socket_list: 'mutagen forward list --label-selector="%{takellabel}"'
69
74
  docker_debug: 'ansible/roles/takel-takelage/files/takelscripts'
70
75
  docker_entrypoint_extra: '.config/gcloud'
71
76
  docker_entrypoint_options: ''
@@ -12,6 +12,7 @@ module DockerContainerClean
12
12
 
13
13
  networks = _docker_container_clean_kill_existing_containers
14
14
  _docker_container_lib_remove_networks networks
15
+ mutagen_socket_terminate @takellabel
15
16
  end
16
17
 
17
18
  private
@@ -24,9 +24,12 @@ module Takelage
24
24
  include DockerSocketHost
25
25
  include DockerSocketScheme
26
26
  include DockerSocketStart
27
+ include MutagenSocketCreate
28
+ include MutagenSocketTerminate
27
29
 
28
30
  # Initialize docker container
29
31
  # rubocop:disable Metrics/AbcSize
32
+ # rubocop:disable Metrics/MethodLength
30
33
  def initialize(args = [], local_options = {}, configuration = {})
31
34
  # initialize thor parent class
32
35
  super args, local_options, configuration
@@ -38,9 +41,12 @@ module Takelage
38
41
  @username = ENV['USER'] || 'noname'
39
42
  @workdir = Dir.getwd
40
43
  @hostname = _docker_container_lib_hostname
44
+ @hostlabel = "hostname=#{@hostname}"
45
+ @takellabel = 'type=takelage-socket'
41
46
  @socket_host = docker_socket_host
42
47
  @sockets = docker_socket_scheme
43
48
  end
49
+ # rubocop:enable Metrics/MethodLength
44
50
  # rubocop:enable Metrics/AbcSize
45
51
 
46
52
  desc 'check [COMMAND]', 'Check docker container'
@@ -11,6 +11,8 @@ module DockerContainerCommand
11
11
  docker_socket_start
12
12
  return false unless _docker_container_lib_create_net_and_ctr @hostname
13
13
 
14
+ mutagen_socket_create '~/.mutagen/daemon/daemon.sock', '~/.mutagen/daemon/daemon.sock'
15
+
14
16
  _docker_container_command_run_command @hostname, command
15
17
  end
16
18
 
@@ -8,6 +8,10 @@ module DockerContainerDaemon
8
8
 
9
9
  return false unless docker_check_daemon
10
10
 
11
- _docker_container_lib_create_net_and_ctr @hostname
11
+ result = _docker_container_lib_create_net_and_ctr @hostname
12
+
13
+ mutagen_socket_create '~/.mutagen/daemon/daemon.sock', '~/.mutagen/daemon/daemon.sock'
14
+
15
+ result
12
16
  end
13
17
  end
@@ -16,7 +16,10 @@ module DockerContainerLib
16
16
 
17
17
  # Create docker container and network.
18
18
  def _docker_container_lib_create_net_and_ctr(name)
19
- return false if _docker_container_lib_check_matrjoschka
19
+ if _docker_container_lib_check_matrjoschka
20
+ log.error 'You cannot log in to takelage from within takelage'
21
+ return false
22
+ end
20
23
 
21
24
  unless docker_container_check_network name
22
25
  _docker_container_lib_create_network name
@@ -108,6 +111,7 @@ module DockerContainerLib
108
111
 
109
112
  try cmd_docker_create
110
113
  end
114
+
111
115
  # rubocop:enable Metrics/AbcSize
112
116
  # rubocop:enable Metrics/MethodLength
113
117
 
@@ -117,7 +121,7 @@ module DockerContainerLib
117
121
 
118
122
  return false unless ENV.keys.include? 'TAKELAGE_PROJECT_BASE_DIR'
119
123
 
120
- log.error 'You cannot log in to takelage from within takelage'
124
+ log.debug 'We are already inside a takelage container'
121
125
 
122
126
  # wait or the github workflow will fail
123
127
  sleep 1
@@ -9,8 +9,11 @@ module DockerContainerLogin
9
9
  return false unless docker_check_daemon
10
10
 
11
11
  docker_socket_start
12
+
12
13
  return false unless _docker_container_lib_create_net_and_ctr @hostname
13
14
 
15
+ mutagen_socket_create '~/.mutagen/daemon/daemon.sock', '~/.mutagen/daemon/daemon.sock'
16
+
14
17
  run_and_exit _docker_container_login_enter_container @hostname
15
18
  end
16
19
 
@@ -23,6 +23,7 @@ module DockerContainerPrune
23
23
 
24
24
  name = _docker_container_lib_get_container_name_by_id container
25
25
  _docker_container_lib_stop_container container
26
+ mutagen_socket_terminate "hostname=#{container}"
26
27
  networks << name unless networks.include? name
27
28
  end
28
29
  networks
@@ -51,8 +51,9 @@ module SystemModule
51
51
  # @return [String] stdout of command
52
52
  def run(command)
53
53
  log.debug "Running command \"#{command}\""
54
- stdout_str, = Open3.capture3 command
54
+ stdout_str, stderr_str = Open3.capture3 command
55
55
  log.debug "Command \"#{command}\" has stdout:\n\"\"\"\n#{stdout_str}\"\"\""
56
+ log.debug "Command \"#{command}\" has stderr:\n\"\"\"\n#{stderr_str}\"\"\""
56
57
  stdout_str
57
58
  end
58
59
 
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage git
5
+ class Mutagen < SubCommandBase
6
+ desc 'socket [COMMAND]', 'Manage mutagen socket'
7
+ subcommand 'socket', MutagenSocket
8
+ end
9
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage mutagen socket check
4
+ module MutagenSocketCheck
5
+ # Backend method for mutagen socket check.
6
+ # @return [Boolean] Does a mutagen socket exist?
7
+ def mutagen_socket_check(socket)
8
+ log.debug "Check if the mutagen socket \"#{socket}\" exists"
9
+
10
+ socket_exists = _mutagen_socket_check_socket(socket)
11
+
12
+ unless socket_exists.exitstatus.zero?
13
+ log.debug "A mutagen socket \"#{socket}\" does not exist"
14
+ return false
15
+ end
16
+
17
+ log.debug "The mutagen socket \"#{socket}\" does exist"
18
+ true
19
+ end
20
+
21
+ private
22
+
23
+ # Get git branch.
24
+ def _mutagen_socket_check_socket(socketname)
25
+ cmd_check_socket = format(
26
+ config.active['cmd_mutagen_forward_socket_check'],
27
+ socketname: socketname
28
+ )
29
+ try cmd_check_socket
30
+ end
31
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage mutagen socket
5
+ class MutagenSocket < SubCommandBase
6
+ include LoggingModule
7
+ include SystemModule
8
+ include ConfigModule
9
+ include DockerCheckDaemon
10
+ include DockerCheckSocat
11
+ include DockerContainerCheckExisting
12
+ include DockerContainerCheckNetwork
13
+ include DockerContainerCommand
14
+ include DockerContainerLib
15
+ include DockerSocketLib
16
+ include DockerSocketScheme
17
+ include DockerSocketStart
18
+ include MutagenSocketCheck
19
+ include MutagenSocketCreate
20
+ include MutagenSocketList
21
+ include MutagenSocketTerminate
22
+
23
+ # Initialize mtagen socket
24
+ def initialize(args = [], local_options = {}, configuration = {})
25
+ # initialize thor parent class
26
+ super args, local_options, configuration
27
+
28
+ @docker_repo = config.active['docker_repo']
29
+ @username = ENV['USER'] || 'noname'
30
+ @workdir = Dir.getwd
31
+ inside = _docker_container_lib_check_matrjoschka
32
+ @hostname = inside ? ENV['HOSTNAME'] : _docker_container_lib_hostname
33
+ @hostlabel = "hostname=#{@hostname}"
34
+ @takellabel = 'type=takelage-socket'
35
+ @sockets = docker_socket_scheme
36
+ end
37
+
38
+ #
39
+ # mutagen socket check
40
+ #
41
+ desc 'check [SOCKET]', 'Check if mutagen [SOCKET] exists'
42
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
43
+ Check if mutagen [SOCKET] exists
44
+ LONGDESC
45
+ # Check if mutagen [SOCKET] exists.
46
+ def check(socket)
47
+ exit mutagen_socket_check socket
48
+ end
49
+
50
+ #
51
+ # mutagen socket create
52
+ #
53
+ desc 'create [IN] [OUT]', 'Create a mutagen socket from [IN] to [OUT] of the container'
54
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
55
+ Create a mutagen socket from [IN] to [OUT] of the container
56
+ LONGDESC
57
+ # Create a mutagen socket from [IN] to [OUT] of the container.
58
+ def create(containersock, hostsock)
59
+ exit mutagen_socket_create containersock, hostsock
60
+ end
61
+
62
+ #
63
+ # mutagen socket list
64
+ #
65
+ desc 'list', 'List mutagen sockets'
66
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
67
+ List mutagen sockets
68
+ LONGDESC
69
+ # List mutagen sockets.
70
+ def list
71
+ socket_list = mutagen_socket_list
72
+ exit false if socket_list == false
73
+ say socket_list
74
+ true
75
+ end
76
+
77
+ #
78
+ # mutagen socket terminate
79
+ #
80
+ desc 'terminate', 'Terminate a mutagen socket'
81
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
82
+ Terminate a mutagen socket
83
+ LONGDESC
84
+ # Terminate a mutagen socket.
85
+ def terminate(socket)
86
+ exit mutagen_socket_terminate socket
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage mutagen socket create
4
+ module MutagenSocketCreate
5
+ # Backend method for mutagen socket create.
6
+ def mutagen_socket_create(containersock, hostsock)
7
+ socketname = @hostname[-11..-1]
8
+ log.debug "Create the mutagen socket \"#{socketname}\" in the container" \
9
+ "at \"#{containersock}\" pointing to the host at \"#{hostsock}\""
10
+
11
+ socket_created = _mutagen_socket_create_socket(socketname, containersock, hostsock)
12
+
13
+ unless socket_created.include? 'Created session'
14
+ log.debug "Unable to create mutagen socket \"#{socketname}\""
15
+ return false
16
+ end
17
+
18
+ log.debug "Created the mutagen socket \"#{socketname}\""
19
+ true
20
+ end
21
+
22
+ private
23
+
24
+ # Get git branch.
25
+ # rubocop:disable Metrics/MethodLength
26
+ def _mutagen_socket_create_socket(socketname, containersock, hostsock)
27
+ cmd_create_socket = format(
28
+ config.active['cmd_mutagen_forward_socket_create'],
29
+ socketname: socketname,
30
+ containersock: containersock,
31
+ hostsock: hostsock,
32
+ username: @username,
33
+ container: @hostname,
34
+ hostlabel: @hostlabel,
35
+ takellabel: @takellabel
36
+ )
37
+ run cmd_create_socket
38
+ end
39
+ # rubocop:enable Metrics/MethodLength
40
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage mutagen socket list
4
+ module MutagenSocketList
5
+ # Backend method for mutagen socket list.
6
+ # @return [String] List of takelage sockets
7
+ def mutagen_socket_list
8
+ log.debug 'List the mutagen takelage sockets'
9
+
10
+ sockets = _mutagen_socket_list
11
+
12
+ if sockets.to_s.empty?
13
+ log.debug 'No mutagen takelage sockets found'
14
+ return false
15
+ end
16
+
17
+ log.debug "Found mutagen takelage sockets: \n\"\"\"\n#{sockets}\"\"\""
18
+ sockets.to_s
19
+ end
20
+
21
+ private
22
+
23
+ # Get git branch.
24
+ def _mutagen_socket_list
25
+ cmd_list_socket = format(
26
+ config.active['cmd_mutagen_forward_socket_list'],
27
+ takellabel: @takellabel
28
+ )
29
+ run cmd_list_socket
30
+ end
31
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage mutagen socket terminate
4
+ module MutagenSocketTerminate
5
+ # Backend method for mutagen socket terminate.
6
+ def mutagen_socket_terminate(socket)
7
+ log.debug "Terminate the mutagen socket \"#{socket}\""
8
+
9
+ socket_terminated = _mutagen_socket_terminate_socket socket
10
+
11
+ cmd_remove = config.active['cmd_mutagen_forward_socket_remove']
12
+ docker_container_command cmd_remove if cmd_remove && socket_terminated.exitstatus.zero?
13
+
14
+ unless socket_terminated.exitstatus.zero?
15
+ log.debug "Unable to terminated mutagen socket \"#{socket}\""
16
+ return false
17
+ end
18
+
19
+ log.debug "Terminated the mutagen socket \"#{socket}\""
20
+ true
21
+ end
22
+
23
+ private
24
+
25
+ # Get git branch.
26
+ def _mutagen_socket_terminate_socket(socketname)
27
+ cmd_terminate_socket = format(
28
+ config.active['cmd_mutagen_forward_socket_terminate'],
29
+ socketname: socketname
30
+ )
31
+ try cmd_terminate_socket
32
+ end
33
+ end
data/lib/takelage/version CHANGED
@@ -1 +1 @@
1
- 0.27.1
1
+ 0.28.5
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.27.1
4
+ version: 0.28.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geospin
@@ -271,6 +271,12 @@ files:
271
271
  - lib/takelage/lib/project.rb
272
272
  - lib/takelage/lib/subcmd.rb
273
273
  - lib/takelage/lib/system.rb
274
+ - lib/takelage/mutagen/cli.rb
275
+ - lib/takelage/mutagen/socket/check.rb
276
+ - lib/takelage/mutagen/socket/cli.rb
277
+ - lib/takelage/mutagen/socket/create.rb
278
+ - lib/takelage/mutagen/socket/list.rb
279
+ - lib/takelage/mutagen/socket/terminate.rb
274
280
  - lib/takelage/self/cli.rb
275
281
  - lib/takelage/self/config/cli.rb
276
282
  - lib/takelage/self/list.rb