lex-node 0.2.0 → 0.2.3

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +16 -0
  3. data/.rubocop.yml +40 -10
  4. data/CHANGELOG.md +19 -0
  5. data/CLAUDE.md +109 -0
  6. data/Dockerfile +1 -1
  7. data/Gemfile +2 -0
  8. data/Gemfile.lock +87 -0
  9. data/README.md +65 -5
  10. data/docker_deploy.rb +1 -0
  11. data/lex-node.gemspec +4 -1
  12. data/lib/legion/extensions/node/actors/beat.rb +27 -19
  13. data/lib/legion/extensions/node/actors/crypt.rb +12 -4
  14. data/lib/legion/extensions/node/actors/push_key.rb +27 -19
  15. data/lib/legion/extensions/node/actors/vault.rb +27 -19
  16. data/lib/legion/extensions/node/actors/vault_token_request.rb +27 -19
  17. data/lib/legion/extensions/node/data_test/migrations/001_nodes_table.rb +2 -0
  18. data/lib/legion/extensions/node/data_test/migrations/002_node_history_table.rb +2 -1
  19. data/lib/legion/extensions/node/data_test/migrations/003_legion_version_colume.rb +2 -0
  20. data/lib/legion/extensions/node/data_test/migrations/004_node_extensions.rb +2 -1
  21. data/lib/legion/extensions/node/runners/beat.rb +17 -9
  22. data/lib/legion/extensions/node/runners/crypt.rb +60 -52
  23. data/lib/legion/extensions/node/runners/node.rb +109 -52
  24. data/lib/legion/extensions/node/runners/vault.rb +44 -36
  25. data/lib/legion/extensions/node/transport/exchanges/node.rb +12 -6
  26. data/lib/legion/extensions/node/transport/messages/beat.rb +85 -22
  27. data/lib/legion/extensions/node/transport/messages/public_key.rb +24 -14
  28. data/lib/legion/extensions/node/transport/messages/push_cluster_secret.rb +34 -24
  29. data/lib/legion/extensions/node/transport/messages/push_vault_token.rb +34 -24
  30. data/lib/legion/extensions/node/transport/messages/request_cluster_secret.rb +26 -16
  31. data/lib/legion/extensions/node/transport/messages/request_public_keys.rb +23 -13
  32. data/lib/legion/extensions/node/transport/messages/request_vault_token.rb +31 -21
  33. data/lib/legion/extensions/node/transport/messages/update_result.rb +36 -0
  34. data/lib/legion/extensions/node/transport/queues/crypt.rb +14 -4
  35. data/lib/legion/extensions/node/transport/queues/health.rb +14 -4
  36. data/lib/legion/extensions/node/transport/queues/node.rb +18 -7
  37. data/lib/legion/extensions/node/transport/queues/vault.rb +14 -4
  38. data/lib/legion/extensions/node/transport.rb +17 -8
  39. data/lib/legion/extensions/node/version.rb +3 -1
  40. data/lib/legion/extensions/node.rb +2 -0
  41. metadata +10 -9
  42. data/.github/workflows/rspec.yml +0 -69
  43. data/.github/workflows/rubocop.yml +0 -28
@@ -1,21 +1,31 @@
1
- module Legion::Extensions::Node::Transport::Messages
2
- class PublicKey < Legion::Transport::Message
3
- def routing_key
4
- 'node.crypt.update_public_key'
5
- end
1
+ # frozen_string_literal: true
6
2
 
7
- def type
8
- 'task'
9
- end
3
+ module Legion
4
+ module Extensions
5
+ module Node
6
+ module Transport
7
+ module Messages
8
+ class PublicKey < Legion::Transport::Message
9
+ def routing_key
10
+ 'node.crypt.update_public_key'
11
+ end
10
12
 
11
- def encrypt?
12
- false
13
- end
13
+ def type
14
+ 'task'
15
+ end
16
+
17
+ def encrypt?
18
+ false
19
+ end
14
20
 
15
- def validate
16
- raise 'public_key should be a string' unless @options[:public_key].is_a?(String)
21
+ def validate
22
+ raise 'public_key should be a string' unless @options[:public_key].is_a?(String)
17
23
 
18
- @valid = true
24
+ @valid = true
25
+ end
26
+ end
27
+ end
28
+ end
19
29
  end
20
30
  end
21
31
  end
@@ -1,32 +1,42 @@
1
- module Legion::Extensions::Node::Transport::Messages
2
- class PushClusterSecret < Legion::Transport::Message
3
- def routing_key
4
- @options[:queue_name]
5
- end
1
+ # frozen_string_literal: true
6
2
 
7
- def exchange
8
- Legion::Transport::Exchanges::Node
9
- end
3
+ module Legion
4
+ module Extensions
5
+ module Node
6
+ module Transport
7
+ module Messages
8
+ class PushClusterSecret < Legion::Transport::Message
9
+ def routing_key
10
+ @options[:queue_name]
11
+ end
10
12
 
11
- def message
12
- { function: 'receive_cluster_secret',
13
- runner_class: 'Legion::Extensions::Node::Runners::Crypt',
14
- message: @options[:message],
15
- validation_string: @options[:validation_string] || nil,
16
- encrypted_string: @options[:encrypted_string] || nil,
17
- public_key: Base64.encode64(Legion::Crypt.public_key) }
18
- end
13
+ def exchange
14
+ Legion::Transport::Exchanges::Node
15
+ end
19
16
 
20
- def type
21
- 'task'
22
- end
17
+ def message
18
+ { function: 'receive_cluster_secret',
19
+ runner_class: 'Legion::Extensions::Node::Runners::Crypt',
20
+ message: @options[:message],
21
+ validation_string: @options[:validation_string] || nil,
22
+ encrypted_string: @options[:encrypted_string] || nil,
23
+ public_key: Base64.encode64(Legion::Crypt.public_key) }
24
+ end
23
25
 
24
- def encrypt?
25
- false
26
- end
26
+ def type
27
+ 'task'
28
+ end
29
+
30
+ def encrypt?
31
+ false
32
+ end
27
33
 
28
- def validate
29
- @valid = true
34
+ def validate
35
+ @valid = true
36
+ end
37
+ end
38
+ end
39
+ end
30
40
  end
31
41
  end
32
42
  end
@@ -1,32 +1,42 @@
1
- module Legion::Extensions::Node::Transport::Messages
2
- class PushVaultToken < Legion::Transport::Message
3
- def routing_key
4
- "node.#{@options[:queue_name]}"
5
- end
1
+ # frozen_string_literal: true
6
2
 
7
- def exchange
8
- Legion::Transport::Exchanges::Node
9
- end
3
+ module Legion
4
+ module Extensions
5
+ module Node
6
+ module Transport
7
+ module Messages
8
+ class PushVaultToken < Legion::Transport::Message
9
+ def routing_key
10
+ "node.#{@options[:queue_name]}"
11
+ end
10
12
 
11
- def message
12
- {
13
- function: 'receive_vault_token',
14
- runner_class: 'Legion::Extensions::Node::Runners::Vault',
15
- message: @options[:token],
16
- public_key: Base64.encode64(Legion::Crypt.public_key)
17
- }
18
- end
13
+ def exchange
14
+ Legion::Transport::Exchanges::Node
15
+ end
19
16
 
20
- def type
21
- 'task'
22
- end
17
+ def message
18
+ {
19
+ function: 'receive_vault_token',
20
+ runner_class: 'Legion::Extensions::Node::Runners::Vault',
21
+ message: @options[:token],
22
+ public_key: Base64.encode64(Legion::Crypt.public_key)
23
+ }
24
+ end
23
25
 
24
- def encrypt?
25
- false
26
- end
26
+ def type
27
+ 'task'
28
+ end
29
+
30
+ def encrypt?
31
+ false
32
+ end
27
33
 
28
- def validate
29
- @valid = true
34
+ def validate
35
+ @valid = true
36
+ end
37
+ end
38
+ end
39
+ end
30
40
  end
31
41
  end
32
42
  end
@@ -1,23 +1,33 @@
1
- module Legion::Extensions::Node::Transport::Messages
2
- class RequestClusterSecret < Legion::Transport::Message
3
- def routing_key
4
- 'node.crypt.push_cluster_secret'
5
- end
1
+ # frozen_string_literal: true
6
2
 
7
- def message
8
- { function: 'push_cluster_secret', node_name: Legion::Settings[:client][:name] }
9
- end
3
+ module Legion
4
+ module Extensions
5
+ module Node
6
+ module Transport
7
+ module Messages
8
+ class RequestClusterSecret < Legion::Transport::Message
9
+ def routing_key
10
+ 'node.crypt.push_cluster_secret'
11
+ end
10
12
 
11
- def type
12
- 'task'
13
- end
13
+ def message
14
+ { function: 'push_cluster_secret', node_name: Legion::Settings[:client][:name] }
15
+ end
14
16
 
15
- def encrypt?
16
- false
17
- end
17
+ def type
18
+ 'task'
19
+ end
20
+
21
+ def encrypt?
22
+ false
23
+ end
18
24
 
19
- def validate
20
- @valid = true
25
+ def validate
26
+ @valid = true
27
+ end
28
+ end
29
+ end
30
+ end
21
31
  end
22
32
  end
23
33
  end
@@ -1,19 +1,29 @@
1
- module Legion::Extensions::Node::Transport::Messages
2
- class RequestPublicKeys < Legion::Transport::Message
3
- def routing_key
4
- 'node'
5
- end
1
+ # frozen_string_literal: true
6
2
 
7
- def type
8
- 'task'
9
- end
3
+ module Legion
4
+ module Extensions
5
+ module Node
6
+ module Transport
7
+ module Messages
8
+ class RequestPublicKeys < Legion::Transport::Message
9
+ def routing_key
10
+ 'node'
11
+ end
10
12
 
11
- def encrypt?
12
- false
13
- end
13
+ def type
14
+ 'task'
15
+ end
16
+
17
+ def encrypt?
18
+ false
19
+ end
14
20
 
15
- def validate
16
- @valid = true
21
+ def validate
22
+ @valid = true
23
+ end
24
+ end
25
+ end
26
+ end
17
27
  end
18
28
  end
19
29
  end
@@ -1,28 +1,38 @@
1
- module Legion::Extensions::Node::Transport::Messages
2
- class RequestVaultToken < Legion::Transport::Message
3
- def routing_key
4
- 'vault'
5
- end
1
+ # frozen_string_literal: true
6
2
 
7
- def message
8
- {
9
- function: 'push_vault_token',
10
- node_name: Legion::Settings[:client][:name],
11
- runner_class: 'Legion::Extensions::Node::Runners::Vault',
12
- public_key: Legion::Crypt.public_key
13
- }
14
- end
3
+ module Legion
4
+ module Extensions
5
+ module Node
6
+ module Transport
7
+ module Messages
8
+ class RequestVaultToken < Legion::Transport::Message
9
+ def routing_key
10
+ 'vault'
11
+ end
15
12
 
16
- def type
17
- 'task'
18
- end
13
+ def message
14
+ {
15
+ function: 'push_vault_token',
16
+ node_name: Legion::Settings[:client][:name],
17
+ runner_class: 'Legion::Extensions::Node::Runners::Vault',
18
+ public_key: Legion::Crypt.public_key
19
+ }
20
+ end
19
21
 
20
- def encrypt?
21
- false
22
- end
22
+ def type
23
+ 'task'
24
+ end
25
+
26
+ def encrypt?
27
+ false
28
+ end
23
29
 
24
- def validate
25
- @valid = true
30
+ def validate
31
+ @valid = true
32
+ end
33
+ end
34
+ end
35
+ end
26
36
  end
27
37
  end
28
38
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Node
6
+ module Transport
7
+ module Messages
8
+ class UpdateResult < Legion::Transport::Message
9
+ def routing_key
10
+ "node.#{Legion::Settings[:client][:name]}.update_result"
11
+ end
12
+
13
+ def exchange
14
+ Legion::Transport::Exchanges::Node
15
+ end
16
+
17
+ def type
18
+ 'task'
19
+ end
20
+
21
+ def encrypt?
22
+ false
23
+ end
24
+
25
+ def validate
26
+ raise 'action is required' unless @options[:action].is_a?(String)
27
+ raise 'status is required' unless @options[:status].is_a?(String)
28
+
29
+ @valid = true
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,7 +1,17 @@
1
- module Legion::Extensions::Node::Transport::Queues
2
- class Crypt < Legion::Transport::Queue
3
- def queue_options
4
- { auto_delete: false }
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Node
6
+ module Transport
7
+ module Queues
8
+ class Crypt < Legion::Transport::Queue
9
+ def queue_options
10
+ { auto_delete: false }
11
+ end
12
+ end
13
+ end
14
+ end
5
15
  end
6
16
  end
7
17
  end
@@ -1,7 +1,17 @@
1
- module Legion::Extensions::Node::Transport::Queues
2
- class Health < Legion::Transport::Queue
3
- def queue_options
4
- { arguments: { 'x-single-active-consumer': true }, auto_delete: false }
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Node
6
+ module Transport
7
+ module Queues
8
+ class Health < Legion::Transport::Queue
9
+ def queue_options
10
+ { arguments: { 'x-single-active-consumer': true }, auto_delete: false }
11
+ end
12
+ end
13
+ end
14
+ end
5
15
  end
6
16
  end
7
17
  end
@@ -1,13 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'socket'
2
4
 
3
- module Legion::Extensions::Node::Transport::Queues
4
- class Node < Legion::Transport::Queue
5
- def queue_name
6
- "node.#{Legion::Settings[:client][:name]}"
7
- end
5
+ module Legion
6
+ module Extensions
7
+ module Node
8
+ module Transport
9
+ module Queues
10
+ class Node < Legion::Transport::Queue
11
+ def queue_name
12
+ "node.#{Legion::Settings[:client][:name]}"
13
+ end
8
14
 
9
- def queue_options
10
- { durable: false, exclusive: true, auto_delete: true }
15
+ def queue_options
16
+ { durable: false, exclusive: true, auto_delete: true,
17
+ arguments: { 'x-queue-type': 'classic' } }
18
+ end
19
+ end
20
+ end
21
+ end
11
22
  end
12
23
  end
13
24
  end
@@ -1,7 +1,17 @@
1
- module Legion::Extensions::Node::Transport::Queues
2
- class Vault < Legion::Transport::Queue
3
- def queue_options
4
- { auto_delete: false }
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Node
6
+ module Transport
7
+ module Queues
8
+ class Vault < Legion::Transport::Queue
9
+ def queue_options
10
+ { auto_delete: false }
11
+ end
12
+ end
13
+ end
14
+ end
5
15
  end
6
16
  end
7
17
  end
@@ -1,12 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'legion/extensions/transport'
2
4
 
3
- module Legion::Extensions::Node::Transport
4
- extend Legion::Extensions::Transport
5
- def self.additional_e_to_q
6
- array = [{ from: 'node', to: 'node', routing_key: "node.#{Legion::Settings[:client][:name]}" }]
7
- array.push(from: 'node', to: 'node', routing_key: 'node.data.#') if Legion::Settings[:data][:connected]
8
- array.push(from: 'node', to: 'node', routing_key: 'node.cache.#') if Legion::Settings[:cache][:connected]
9
- array.push(from: 'node', to: 'node', routing_key: 'node.crypt.#')
10
- array
5
+ module Legion
6
+ module Extensions
7
+ module Node
8
+ module Transport
9
+ extend Legion::Extensions::Transport
10
+
11
+ def self.additional_e_to_q
12
+ array = [{ from: 'node', to: 'node', routing_key: "node.#{Legion::Settings[:client][:name]}" }]
13
+ array.push(from: 'node', to: 'node', routing_key: 'node.data.#') if Legion::Settings[:data][:connected]
14
+ array.push(from: 'node', to: 'node', routing_key: 'node.cache.#') if Legion::Settings[:cache][:connected]
15
+ array.push(from: 'node', to: 'node', routing_key: 'node.crypt.#')
16
+ array
17
+ end
18
+ end
19
+ end
11
20
  end
12
21
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Legion
2
4
  module Extensions
3
5
  module Node
4
- VERSION = '0.2.0'.freeze
6
+ VERSION = '0.2.3'
5
7
  end
6
8
  end
7
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'legion/extensions/node/version'
2
4
 
3
5
  module Legion
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-node
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-06-11 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies: []
13
12
  description: This lex is responsible for sending heartbeats, allowing for dynamic
14
13
  config, cluster secret, etc
@@ -18,13 +17,15 @@ executables: []
18
17
  extensions: []
19
18
  extra_rdoc_files: []
20
19
  files:
21
- - ".github/workflows/rspec.yml"
22
- - ".github/workflows/rubocop.yml"
20
+ - ".github/workflows/ci.yml"
23
21
  - ".gitignore"
24
22
  - ".rspec"
25
23
  - ".rubocop.yml"
24
+ - CHANGELOG.md
25
+ - CLAUDE.md
26
26
  - Dockerfile
27
27
  - Gemfile
28
+ - Gemfile.lock
28
29
  - LICENSE
29
30
  - README.md
30
31
  - docker_deploy.rb
@@ -52,6 +53,7 @@ files:
52
53
  - lib/legion/extensions/node/transport/messages/request_cluster_secret.rb
53
54
  - lib/legion/extensions/node/transport/messages/request_public_keys.rb
54
55
  - lib/legion/extensions/node/transport/messages/request_vault_token.rb
56
+ - lib/legion/extensions/node/transport/messages/update_result.rb
55
57
  - lib/legion/extensions/node/transport/queues/crypt.rb
56
58
  - lib/legion/extensions/node/transport/queues/health.rb
57
59
  - lib/legion/extensions/node/transport/queues/node.rb
@@ -67,7 +69,7 @@ metadata:
67
69
  documentation_uri: https://github.com/LegionIO/lex-node
68
70
  changelog_uri: https://github.com/LegionIO/lex-node
69
71
  bug_tracker_uri: https://github.com/LegionIO/lex-node/issues
70
- post_install_message:
72
+ rubygems_mfa_required: 'true'
71
73
  rdoc_options: []
72
74
  require_paths:
73
75
  - lib
@@ -75,15 +77,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
75
77
  requirements:
76
78
  - - ">="
77
79
  - !ruby/object:Gem::Version
78
- version: 2.5.0
80
+ version: '3.4'
79
81
  required_rubygems_version: !ruby/object:Gem::Requirement
80
82
  requirements:
81
83
  - - ">="
82
84
  - !ruby/object:Gem::Version
83
85
  version: '0'
84
86
  requirements: []
85
- rubygems_version: 3.1.6
86
- signing_key:
87
+ rubygems_version: 3.6.9
87
88
  specification_version: 4
88
89
  summary: Does Legion Node things
89
90
  test_files: []
@@ -1,69 +0,0 @@
1
- name: RSpec
2
- on: [push, pull_request]
3
-
4
- jobs:
5
- rspec:
6
- strategy:
7
- fail-fast: false
8
- matrix:
9
- os: [ubuntu-latest]
10
- ruby: [2.7]
11
- runs-on: ${{ matrix.os }}
12
- steps:
13
- - uses: actions/checkout@v2
14
- - uses: ruby/setup-ruby@v1
15
- with:
16
- ruby-version: ${{ matrix.ruby }}
17
- bundler-cache: true
18
- - name: RSpec run
19
- run: |
20
- bash -c "
21
- bundle exec rspec
22
- [[ $? -ne 2 ]]
23
- "
24
- rspec-mri:
25
- needs: rspec
26
- strategy:
27
- fail-fast: false
28
- matrix:
29
- os: [ ubuntu-latest ]
30
- ruby: [2.5, 2.6, '3.0', head]
31
- runs-on: ${{ matrix.os }}
32
- steps:
33
- - uses: actions/checkout@v2
34
- - uses: ruby/setup-ruby@v1
35
- with:
36
- ruby-version: ${{ matrix.ruby }}
37
- bundler-cache: true
38
- - run: bundle exec rspec
39
- rspec-jruby:
40
- needs: rspec
41
- strategy:
42
- fail-fast: false
43
- matrix:
44
- os: [ ubuntu-latest ]
45
- ruby: [ jruby, jruby-head]
46
- runs-on: ${{ matrix.os }}
47
- steps:
48
- - uses: actions/checkout@v2
49
- - uses: ruby/setup-ruby@v1
50
- with:
51
- ruby-version: ${{ matrix.ruby }}
52
- bundler-cache: true
53
- - run: JRUBY_OPTS="--debug" bundle exec rspec
54
- rspec-truffleruby:
55
- needs: rspec
56
- strategy:
57
- fail-fast: false
58
- matrix:
59
- os: [ ubuntu-latest ]
60
- ruby: [truffleruby]
61
- runs-on: ${{ matrix.os }}
62
- steps:
63
- - uses: actions/checkout@v2
64
- - uses: ruby/setup-ruby@v1
65
- with:
66
- ruby-version: ${{ matrix.ruby }}
67
- bundler-cache: true
68
- - run: bundle exec rspec
69
-