legionio 0.3.1 → 0.4.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/.circleci/config.yml +27 -10
- data/.gitignore +1 -0
- data/.rubocop.yml +7 -2
- data/CHANGELOG.md +21 -0
- data/Dockerfile +9 -0
- data/Gemfile +0 -11
- data/README.md +158 -42
- data/Rakefile +0 -6
- data/bitbucket-pipelines.yml +17 -52
- data/docker_deploy.rb +8 -0
- data/exe/legion +3 -49
- data/{bin/legion → exe/legionio} +5 -42
- data/exe/lex_gen +5 -0
- data/{legion.gemspec → legionio.gemspec} +25 -20
- data/lib/legion.rb +4 -0
- data/lib/legion/cli.rb +56 -0
- data/lib/legion/cli/chain.rb +35 -0
- data/lib/legion/cli/cohort.rb +10 -0
- data/lib/legion/cli/function.rb +41 -0
- data/lib/legion/cli/lex/actor.rb +31 -0
- data/lib/legion/cli/lex/exchange.rb +32 -0
- data/lib/legion/cli/lex/message.rb +32 -0
- data/lib/legion/cli/lex/queue.rb +45 -0
- data/lib/legion/cli/lex/runner.rb +70 -0
- data/lib/legion/cli/lex/templates/actor.erb +6 -0
- data/lib/legion/cli/lex/templates/actor_spec.erb +0 -0
- data/lib/legion/cli/lex/templates/base/bitbucket.yml.erb +69 -0
- data/lib/legion/cli/lex/templates/base/gemfile.erb +3 -0
- data/lib/legion/cli/lex/templates/base/gemspec.erb +26 -0
- data/lib/legion/cli/lex/templates/base/gitignore.erb +11 -0
- data/lib/legion/cli/lex/templates/base/lex.erb +9 -0
- data/lib/legion/cli/lex/templates/base/lex_spec.erb +5 -0
- data/lib/legion/cli/lex/templates/base/lic.erb +21 -0
- data/lib/legion/cli/lex/templates/base/rakefile.erb +6 -0
- data/lib/legion/cli/lex/templates/base/readme.md.erb +2 -0
- data/lib/legion/cli/lex/templates/base/rubocop.yml.erb +15 -0
- data/lib/legion/cli/lex/templates/base/spec_helper.rb.erb +11 -0
- data/lib/legion/cli/lex/templates/base/version.erb +7 -0
- data/lib/legion/cli/lex/templates/exchange.erb +11 -0
- data/lib/legion/cli/lex/templates/exchange_spec.erb +0 -0
- data/lib/legion/cli/lex/templates/message.erb +23 -0
- data/lib/legion/cli/lex/templates/message_spec.erb +0 -0
- data/lib/legion/cli/lex/templates/queue.erb +12 -0
- data/lib/legion/cli/lex/templates/queue_helper.erb +24 -0
- data/lib/legion/cli/lex/templates/queue_spec.erb +11 -0
- data/lib/legion/cli/lex/templates/runner.erb +11 -0
- data/lib/legion/cli/lex/templates/runner_spec.erb +11 -0
- data/lib/legion/cli/relationship.rb +22 -0
- data/lib/legion/cli/task.rb +49 -0
- data/lib/legion/cli/trigger.rb +88 -0
- data/lib/legion/cli/version.rb +5 -0
- data/lib/legion/extensions.rb +57 -62
- data/lib/legion/extensions/actors/base.rb +0 -2
- data/lib/legion/extensions/actors/poll.rb +0 -1
- data/lib/legion/extensions/actors/subscription.rb +1 -0
- data/lib/legion/extensions/builders/runners.rb +5 -0
- data/lib/legion/extensions/core.rb +9 -4
- data/lib/legion/extensions/helpers/base.rb +3 -3
- data/lib/legion/extensions/helpers/lex.rb +29 -1
- data/lib/legion/extensions/helpers/logger.rb +3 -6
- data/lib/legion/extensions/helpers/task.rb +1 -1
- data/lib/legion/extensions/transport.rb +9 -7
- data/lib/legion/lex.rb +89 -0
- data/lib/legion/service.rb +55 -4
- data/lib/legion/version.rb +1 -1
- metadata +196 -51
- data/bin/console +0 -16
- data/bin/setup +0 -8
- data/bin/test +0 -32
- data/lib/legion/exceptions/handled_task.rb +0 -6
- data/lib/legion/exceptions/invalidjson.rb +0 -5
- data/lib/legion/exceptions/missingargument.rb +0 -6
- data/lib/legion/exceptions/wrongtype.rb +0 -10
- data/lib/legion/exceptions/wrongtypes/array.rb +0 -8
- data/lib/legion/exceptions/wrongtypes/hash.rb +0 -8
- data/lib/legion/exceptions/wrongtypes/integer.rb +0 -8
- data/lib/legion/exceptions/wrongtypes/string.rb +0 -8
- data/settings/client.json +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7990b0c192a08c1fd8569cc2a08718c695814136f39c8df08e2b7b4753bfd216
|
4
|
+
data.tar.gz: 3f2bd0e6d8b7108d5ad17a069927bd7d6e5b4e1ba2dc6746ffac3582f11b9cdc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '05488db705432fec76ee9c07cc5655871e37abfbe02db5319fd2fb9ca60ad637c4d16eb44572f4f8cbac38b54ffbee75c49d3ccfadd7b4c9357996779a21f4fa'
|
7
|
+
data.tar.gz: 80fc575ff7e64dc60c60510aebb158c0e0cae2608158f1722e15e64718da43111efc760e4dc8891fc014c42dede039b66bcb99e3ef8ff0b0a80c735d79172f5c
|
data/.circleci/config.yml
CHANGED
@@ -5,16 +5,15 @@ jobs:
|
|
5
5
|
- image: circleci/ruby:2.5-node
|
6
6
|
steps:
|
7
7
|
- checkout
|
8
|
-
- run: gem install rubocop
|
8
|
+
- run: gem install rubocop rubocop-rspec rubocop-rake
|
9
9
|
- run:
|
10
10
|
name: Run Rubocop
|
11
11
|
command: rubocop
|
12
12
|
- store_test_results:
|
13
13
|
path: test_results
|
14
|
-
|
15
|
-
"ruby-two-seven":
|
14
|
+
"ruby-three":
|
16
15
|
docker:
|
17
|
-
- image: circleci/ruby:
|
16
|
+
- image: circleci/ruby:3-node
|
18
17
|
- image: mysql:5.7
|
19
18
|
environment:
|
20
19
|
MYSQL_DATABASE: 'legion'
|
@@ -24,6 +23,9 @@ jobs:
|
|
24
23
|
- image: rabbitmq:3.7
|
25
24
|
steps:
|
26
25
|
- checkout
|
26
|
+
- run:
|
27
|
+
name: bundle update
|
28
|
+
command: gem update bundler
|
27
29
|
- run:
|
28
30
|
name: Bundle Install
|
29
31
|
command: bundle install
|
@@ -33,9 +35,9 @@ jobs:
|
|
33
35
|
when: always
|
34
36
|
- store_test_results:
|
35
37
|
path: test-results
|
36
|
-
"ruby-two-
|
38
|
+
"ruby-two-seven":
|
37
39
|
docker:
|
38
|
-
- image: circleci/ruby:2.
|
40
|
+
- image: circleci/ruby:2.7-node
|
39
41
|
- image: mysql:5.7
|
40
42
|
environment:
|
41
43
|
MYSQL_DATABASE: 'legion'
|
@@ -45,6 +47,9 @@ jobs:
|
|
45
47
|
- image: rabbitmq:3.7
|
46
48
|
steps:
|
47
49
|
- checkout
|
50
|
+
- run:
|
51
|
+
name: bundle update
|
52
|
+
command: gem update bundler
|
48
53
|
- run:
|
49
54
|
name: Bundle Install
|
50
55
|
command: bundle install
|
@@ -54,9 +59,9 @@ jobs:
|
|
54
59
|
when: always
|
55
60
|
- store_test_results:
|
56
61
|
path: test-results
|
57
|
-
"ruby-two-
|
62
|
+
"ruby-two-five":
|
58
63
|
docker:
|
59
|
-
- image: circleci/ruby:2.
|
64
|
+
- image: circleci/ruby:2.5-node
|
60
65
|
- image: mysql:5.7
|
61
66
|
environment:
|
62
67
|
MYSQL_DATABASE: 'legion'
|
@@ -66,6 +71,9 @@ jobs:
|
|
66
71
|
- image: rabbitmq:3.7
|
67
72
|
steps:
|
68
73
|
- checkout
|
74
|
+
- run:
|
75
|
+
name: bundle update
|
76
|
+
command: gem update bundler
|
69
77
|
- run:
|
70
78
|
name: Bundle Install
|
71
79
|
command: bundle install
|
@@ -75,9 +83,9 @@ jobs:
|
|
75
83
|
when: always
|
76
84
|
- store_test_results:
|
77
85
|
path: test-results
|
78
|
-
"
|
86
|
+
"ruby-two-six":
|
79
87
|
docker:
|
80
|
-
- image: circleci/
|
88
|
+
- image: circleci/ruby:2.6-node
|
81
89
|
- image: mysql:5.7
|
82
90
|
environment:
|
83
91
|
MYSQL_DATABASE: 'legion'
|
@@ -87,6 +95,9 @@ jobs:
|
|
87
95
|
- image: rabbitmq:3.7
|
88
96
|
steps:
|
89
97
|
- checkout
|
98
|
+
- run:
|
99
|
+
name: bundle update
|
100
|
+
command: gem update bundler
|
90
101
|
- run:
|
91
102
|
name: Bundle Install
|
92
103
|
command: bundle install
|
@@ -117,3 +128,9 @@ workflows:
|
|
117
128
|
filters:
|
118
129
|
branches:
|
119
130
|
only: /\bdevelop\b|\bmaster\b/
|
131
|
+
- ruby-three:
|
132
|
+
requires:
|
133
|
+
- ruby-two-five
|
134
|
+
filters:
|
135
|
+
branches:
|
136
|
+
only: /\bdevelop\b|\bmaster\b/
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-rspec
|
3
|
+
|
4
|
+
RSpec/FilePath:
|
5
|
+
Enabled: false
|
1
6
|
Layout/LineLength:
|
2
7
|
Max: 160
|
3
8
|
IgnoredPatterns:
|
@@ -19,7 +24,7 @@ Metrics:
|
|
19
24
|
- .trace
|
20
25
|
Metrics/MethodLength:
|
21
26
|
Max: 50
|
22
|
-
|
27
|
+
IgnoredMethods:
|
23
28
|
- .unknown
|
24
29
|
- .fatal
|
25
30
|
- .error
|
@@ -33,7 +38,7 @@ Metrics/ModuleLength:
|
|
33
38
|
Max: 1500
|
34
39
|
Metrics/BlockLength:
|
35
40
|
Max: 40
|
36
|
-
|
41
|
+
IgnoredMethods:
|
37
42
|
- .unknown
|
38
43
|
- .fatal
|
39
44
|
- .error
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# Legion Changelog
|
2
2
|
|
3
|
+
## v0.4.0
|
4
|
+
* Moving all legion-cli code to inside the legion gem instead of a seperate gem
|
5
|
+
* Removing bundled Legion::Data gem from LegionIO(must be installed with gem install legion-data)
|
6
|
+
* Removing JRuby support
|
7
|
+
* Removing the following gems from gemspec, hashdiff, legion-data, mysql2, sequel, bunny, bundler, codecov
|
8
|
+
* Skipping auto install if using bundler. It only works with the binary
|
9
|
+
* Adding new docker_deploy.rb script to automatically push a new docker tag with a deployment
|
10
|
+
* Adding multiple version dependencies to previously open ended gems
|
11
|
+
* Updating Dockerfile to have `--no-document --no-prerelease` flags
|
12
|
+
* Updating README
|
13
|
+
* Enabling rubocop-rspec
|
14
|
+
* Adding support to specify a LEX version to automatically install
|
15
|
+
* Updating `legion-transport` gem min version to 1.1.8
|
16
|
+
|
17
|
+
## v0.3.6
|
18
|
+
* Updating executables to use Legion::CLI
|
19
|
+
* Updating bitbucket-pipelines
|
20
|
+
* Changing base legion command to legionio and updating Dockerfile
|
21
|
+
* Blocking truffleruby from using Legion:Data as it's slow for unknown reasons
|
22
|
+
* Changing task update reverting to RMQ message to level debug
|
23
|
+
|
3
24
|
## v0.3.0
|
4
25
|
* Updating dependencies based on if we are using `JRUBY` or not
|
5
26
|
* Cleaning up some files and rubocop errors
|
data/Dockerfile
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
FROM ruby:2.7-alpine
|
2
|
+
LABEL maintainer="Matthew Iverson <matthewdiverson@gmail.com>"
|
3
|
+
|
4
|
+
RUN mkdir /etc/legionio
|
5
|
+
RUN apk update && apk add build-base postgresql-dev mysql-client mariadb-dev tzdata gcc git
|
6
|
+
|
7
|
+
COPY . ./
|
8
|
+
RUN gem install legionio legion-data tzinfo-data tzinfo --no-document --no-prerelease
|
9
|
+
CMD legionio
|
data/Gemfile
CHANGED
@@ -1,14 +1,3 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
gemspec
|
4
|
-
|
5
|
-
gem 'lex-conditioner'
|
6
|
-
gem 'lex-esphome'
|
7
|
-
gem 'lex-health'
|
8
|
-
gem 'lex-http'
|
9
|
-
gem 'lex-influxdb'
|
10
|
-
gem 'lex-lex'
|
11
|
-
gem 'lex-log'
|
12
|
-
gem 'lex-scheduler', path: '../../lex/lex-scheduler'
|
13
|
-
gem 'lex-tasker'
|
14
|
-
gem 'lex-transformer'
|
data/README.md
CHANGED
@@ -1,46 +1,162 @@
|
|
1
|
-
#
|
1
|
+
# LegionIO
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
LegionIO is a framework for automated and connecting things. You can see all the docs inside confluence
|
4
|
+
https://legionio.atlassian.net/wiki/spaces/LEGION/overview
|
5
|
+
https://legionio.atlassian.net/wiki/spaces/LEX/pages/7864551/Extensions
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
```ruby
|
13
|
-
gem 'legion'
|
7
|
+
### What does it do?
|
8
|
+
LegionIO is an async job engine designed for scheduling tasks and creating relationships between things that wouldn't
|
9
|
+
otherwise be connected. Relationships do not have to be a single path. Both of these would work
|
10
|
+
* `foo → bar → cat → dog`
|
14
11
|
```
|
12
|
+
a → b → c
|
13
|
+
b → e → z
|
14
|
+
e → g
|
15
|
+
```
|
16
|
+
In the second scenario, when a runs, it causes b to run which then causes both c and e to run in parallel
|
17
|
+
|
18
|
+
It supports both conditions and transformation. The idea of a transformation is you can't connect two indepedent services
|
19
|
+
and expect them to know how to talk to each other.
|
20
|
+
|
21
|
+
### Running
|
22
|
+
Run `gem install legionio` to install legion. If you want to use database features, you will need to
|
23
|
+
run `gem install legion-data` also.
|
24
|
+
|
25
|
+
After installing gem you can use the commands `legionio` to start legion, `legion` to access things
|
26
|
+
and `lex_gen` to generate a new legion extension
|
27
|
+
|
28
|
+
### Example Legion Extensions(LEX)
|
29
|
+
* [lex-http](https://bitbucket.org/legion-io/lex-http/src/master/) - Gives legion the ability to make http requests, [docs](https://legionio.atlassian.net/wiki/spaces/LEX/pages/12910593/Lex+Http)
|
30
|
+
* [lex-influxdb](https://bitbucket.org/legion-io/lex-influxdb/src/master/) - Write, read, and manage influxdb nodes, [docs](https://legionio.atlassian.net/wiki/spaces/LEX/pages/614891774/Lex+Influxdb)
|
31
|
+
* [lex-log](https://bitbucket.org/legion-io/lex-log/src/master/) - Send log items to either stdout or a file with lex-log, [docs](https://legionio.atlassian.net/wiki/spaces/LEX/pages/614858995/Lex+Log)
|
32
|
+
* [lex-memcache](https://bitbucket.org/legion-io/lex-memcached/src/master/) - run memcached commands like set, add, append, delete, flush, reset_stats against memcached servers, [docs](https://legionio.atlassian.net/wiki/spaces/LEX/pages/614858753/Lex+Memcached)
|
33
|
+
* [lex-pihole](https://bitbucket.org/legion-io/lex-pihole/src/master/) - Allows Legion to interact with [Pi-Hole](https://pi-hole.net/). Can do things like get status, add/remove domains from the list, etc
|
34
|
+
* [lex-ping](https://bitbucket.org/legion-io/lex-ping/src/master/) - You can ping things?, [docs](https://legionio.atlassian.net/wiki/spaces/LEX/pages/631373895/Lex+Ping)
|
35
|
+
* [lex-pushover](https://bitbucket.org/legion-io/lex-pushover/src/master/) - Connects Legion to [Pushover](https://pushover.net/), [docs]()
|
36
|
+
* [lex-redis](https://bitbucket.org/legion-io/lex-redis/src/master/) - similiar to lex-memcached but for redis
|
37
|
+
* [lex-sleepiq](https://bitbucket.org/legion-io/lex-sleepiq/src/master/) - Control your SleepIQ bed with Legion!
|
38
|
+
* [lex-ssh](https://bitbucket.org/legion-io/lex-ssh/src/master/) - Send commands to a server via SSH in an async fashion, [docs](https://legionio.atlassian.net/wiki/spaces/LEX/pages/614891551/Lex+SSH)
|
39
|
+
|
40
|
+
Bitbucket repos for extensions that are active or being worked on
|
41
|
+
[lex list](https://bitbucket.org/legion-io/workspace/projects/LEX)
|
42
|
+
A nice list in the wiki to view all the extensions, their docs and status
|
43
|
+
[Legion Extensions](https://legionio.atlassian.net/wiki/spaces/LEX/pages/7864551/Extensions)
|
44
|
+
|
45
|
+
### Scheduling Tasks
|
46
|
+
1) Ensure you have the Legion::Data gem installed and configured
|
47
|
+
2) Make sure to have `lex-scheduler` extension installed so that it generates the schedules table in the database
|
48
|
+
3) From there you can add a function to be run at a given cron syntax or interval
|
49
|
+
4) Setting the interval column will make the job run X seconds after the last time it is completed and will ignore the cron colum
|
50
|
+
5) Setting the cron column will ensure the job runs at the given times regardless of when it was run last, only works if interval is null
|
51
|
+
6) Cron supports both `*/5 * * * *` style and verbose like `every minute` and `every day at noon`
|
52
|
+
|
53
|
+
|
54
|
+
### Creating Relationships
|
55
|
+
To be populated
|
56
|
+
|
57
|
+
### Conditions
|
58
|
+
You can create complex conditional statements to ensure that when a triggers b, b only runs if certain conditions
|
59
|
+
are met. Example conditional statement
|
60
|
+
```json
|
61
|
+
{
|
62
|
+
"all": [{
|
63
|
+
"fact": "pet.type",
|
64
|
+
"value": "dog",
|
65
|
+
"operator": "equal"
|
66
|
+
},{
|
67
|
+
"fact":"pet.hungry",
|
68
|
+
"operator":"is_true"
|
69
|
+
}]
|
70
|
+
}
|
15
71
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
72
|
+
```
|
73
|
+
You can nest conditions in an unlimited fashion to create and/or scenarios to meet your needs
|
74
|
+
```json
|
75
|
+
{
|
76
|
+
"all": [
|
77
|
+
"any":[
|
78
|
+
{"fact":"pet.type", "value":"dog","operator":"equal"},
|
79
|
+
{"fact":"pet.type", "value":"cat","operator":"equal"}
|
80
|
+
],
|
81
|
+
{
|
82
|
+
"fact": "pet.hungry",
|
83
|
+
"operator": "is_true"
|
84
|
+
},{
|
85
|
+
"fact":"pet.overweight",
|
86
|
+
"operator":"is_false"
|
87
|
+
}]
|
88
|
+
}
|
89
|
+
```
|
90
|
+
*Conditions are supported by the `lex-conditioner` extension and are not required to be run inside the legion framework*
|
91
|
+
You can read the docs with more examples in the [wiki](https://legionio.atlassian.net/wiki/spaces/LEX/pages/614957181/Lex+Conditioner)
|
92
|
+
|
93
|
+
|
94
|
+
### Transformations
|
95
|
+
Transformations are a critical piece of interconnecting two independent items. Without it, service B doesn't know what
|
96
|
+
to do with the result from service A
|
97
|
+
`lex-conditioner` uses a combination of the [tilt](https://rubygems.org/gems/tilt) gem and erb style syntax.
|
98
|
+
##### Examples
|
99
|
+
Creating a new pagerduty incident
|
100
|
+
```json
|
101
|
+
{"message":"New PagerDuty incident assigned to <%= assignee %> with a priority of <%= severity %>","from":"PagerDuty"}
|
102
|
+
```
|
103
|
+
Example transformation to make the `lex-log` extension output a message
|
104
|
+
```json
|
105
|
+
{"message":"transform2","level":"fatal"}
|
106
|
+
```
|
107
|
+
You can also call Legion services to get the data you need, example sending a pushover message
|
108
|
+
```json
|
109
|
+
{"message":"This is my pushover body", "title": "this is my title", "token":"<%= Legion::Settings['lex']['pushover']['token'] %>" }
|
110
|
+
```
|
111
|
+
Or if you wanted to make a real time call via `Legion::Crypt` to get a [Hashicorp Vault](https://www.vaultproject.io/) value
|
112
|
+
```json
|
113
|
+
{"message":"this is another body", "title":"vault token example", "token":"<%= Legion::Crypt.read('pushover/token') %> "}
|
114
|
+
```
|
115
|
+
*Transformations are supported by the `lex-transformation` extension and are not "technically" required to be run inside the legion framework*
|
116
|
+
You can read the docs with more examples in the [wiki](https://legionio.atlassian.net/wiki/spaces/LEX/pages/612270222/Lex+Transformer)
|
117
|
+
|
118
|
+
## FAQ
|
119
|
+
### Does it scale?
|
120
|
+
Yes. Actually quite well. The framework uses RabbitMQ to ensure jobs are scheduled and run in a FIFO order. As you add
|
121
|
+
more works, it just subscribes to the queues the workers can support and does more work. It is really geared towards a
|
122
|
+
docker/K8 type of environment however it can be run locally, on a VM, etc.
|
123
|
+
|
124
|
+
As of right now, it has been tested to around 100 workers running in docker without any performance issues. You will
|
125
|
+
likely see performance issues on the DB or RabbitMQ side before Legion has issues.
|
126
|
+
|
127
|
+
Another benefit is that you can run multiple LEXs in one worker or you could have dedicated workers that only run a single LEX.
|
128
|
+
In example if you have to make a ton of ssh connections via `lex-ssh`, maybe you want to run 10 pods with no other extensions in them
|
129
|
+
but then run a pod with `lex-pagerduty`, `lex-log` and `lex-http` to send out notifications after each ssh task is completed
|
130
|
+
|
131
|
+
### High Availability
|
132
|
+
Because you can run this thing with multiple processes and it will distribute the work, it is naturally HA oriented.
|
133
|
+
if a worker goes down for some reason, another one should pick it up(assuming another work has that LEX enabled). There
|
134
|
+
are no hidden features, pay walls, etc to get HA. Just run more instances of LegionIO
|
135
|
+
|
136
|
+
### Price and License
|
137
|
+
LegionIO is completely free. It was build using free time. There are no features held back, no private repos.
|
138
|
+
Everything is under an MIT license to keep it as open as possible. With that, the devs can't always help with support,
|
139
|
+
well because it's free.
|
140
|
+
|
141
|
+
### Who is it geared for?
|
142
|
+
Anyone? Everyone? It could be used in a homelab to automate updating VMs. It could be used by someone to take ESPHome
|
143
|
+
sensor data and pipe it to influxdb. At least that is what @Esity does. It could also be used by a company or enterprise looking
|
144
|
+
to replace other tools.
|
145
|
+
|
146
|
+
### But it is written in ruby
|
147
|
+
Yep.
|
148
|
+
|
149
|
+
### Similiar projects
|
150
|
+
There are multiple projects that are similiar. Some things like IFTTT are great(but is it?) but then again, cost money.
|
151
|
+
* [Node-Red](https://nodered.org/) - No HA but has some good features and a great drag and drop interface
|
152
|
+
* [n8n.io](https://n8n.io/) - Working on HA but [not there yet](https://github.com/n8n-io/n8n/pull/1294)
|
153
|
+
* [StackStorm](https://stackstorm.com/) - Written in Python, has potential but I feel they are removing features to convince you to pay for it
|
154
|
+
* [Jenkins](https://www.jenkins.io/) - It's jenkins. I don't need to say anything else
|
155
|
+
* [Huginn]() - Another IFTTT style app written in ruby. Not sure on this one but it doesn't have HA from what I can tell [github issue](https://github.com/huginn/huginn/issues/2198)
|
156
|
+
|
157
|
+
### Other fun facts
|
158
|
+
* Supports Hashicorp vault for storing secrets/settings/etc
|
159
|
+
* Can enable global message encryption so that all messages going through RMQ are encrypted with aes-256-cbc
|
160
|
+
* Each worker generates a private/public key that can be used for internode communication, it also will generate a cluster secret
|
161
|
+
for all nodes to have so they can share data accross the entire cluster. The cluster secret by default is stored only in memory and
|
162
|
+
and is generated when the first worker starts
|
data/Rakefile
CHANGED
data/bitbucket-pipelines.yml
CHANGED
@@ -1,55 +1,20 @@
|
|
1
|
-
image: ruby:2.
|
1
|
+
image: ruby:2.7
|
2
2
|
|
3
3
|
pipelines:
|
4
4
|
tags:
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- gem install bundle rubocop
|
22
|
-
- bundle install
|
23
|
-
- rubocop
|
24
|
-
- rake
|
25
|
-
services:
|
26
|
-
- mysql
|
27
|
-
- broker
|
28
|
-
default:
|
29
|
-
- step:
|
30
|
-
caches:
|
31
|
-
- bundler
|
32
|
-
script:
|
33
|
-
- gem install bundle rubocop
|
34
|
-
- bundle install
|
35
|
-
- rubocop
|
36
|
-
- rake
|
37
|
-
services:
|
38
|
-
- mysql
|
39
|
-
- broker
|
40
|
-
definitions:
|
41
|
-
caches:
|
42
|
-
bundler: vendor/bundle
|
43
|
-
services:
|
44
|
-
mysql:
|
45
|
-
image: mysql:5.7
|
46
|
-
environment:
|
47
|
-
MYSQL_DATABASE: 'legion'
|
48
|
-
MYSQL_ROOT_PASSWORD: 'legion'
|
49
|
-
MYSQL_USER: 'legion'
|
50
|
-
MYSQL_PASSWORD: 'legion'
|
51
|
-
broker:
|
52
|
-
image: rabbitmq:3
|
53
|
-
environment:
|
54
|
-
RABBITMQ_DEFAULT_USER: guest
|
55
|
-
RABBITMQ_DEFAULT_PASS: guest
|
5
|
+
"v*":
|
6
|
+
- step:
|
7
|
+
name: Push to RubyGems
|
8
|
+
deployment: RubyGems
|
9
|
+
script:
|
10
|
+
- gem install gem-release
|
11
|
+
- (umask 077 ; echo $gem_creds | base64 --decode > ~/.gem/credentials)
|
12
|
+
- gem release
|
13
|
+
- sleep(2)
|
14
|
+
artifacts:
|
15
|
+
- pkg/**
|
16
|
+
- step:
|
17
|
+
name: Push to Docker
|
18
|
+
deployment: Docker
|
19
|
+
script:
|
20
|
+
- './docker_deploy.rb'
|