Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stephenott/vertx-yaml-config-verticle-deployment
Example of vertical deployment based on watched yaml file. Uses Vertx-js-lang and has ability to generate a fatjar
https://github.com/stephenott/vertx-yaml-config-verticle-deployment
vertx vertx-lang-js yaml
Last synced: 19 days ago
JSON representation
Example of vertical deployment based on watched yaml file. Uses Vertx-js-lang and has ability to generate a fatjar
- Host: GitHub
- URL: https://github.com/stephenott/vertx-yaml-config-verticle-deployment
- Owner: StephenOTT
- Created: 2018-03-14T17:32:50.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-03-15T15:41:03.000Z (almost 7 years ago)
- Last Synced: 2024-11-01T04:11:38.556Z (2 months ago)
- Topics: vertx, vertx-lang-js, yaml
- Language: JavaScript
- Homepage:
- Size: 58.6 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Dynamic Verticle Deployment with YAML config
The following is a Entrypoint Verticle (and FatJar) written in Javascript/Nashorn for Vertx.io.
It provides the ability to config *sub-verticles* (verticles that are not the entrypoint verticle) through a YAML configuration file.
```yaml
# Verticle Configurations
verticles:
my_verticle_steve:
path: "verticles/vert1/vert1.js"
worker: false
instances: 1
isolationGroup:
isolatedClasses:
config:
value1: "dog"
value2: "cat"
processing_verticle_ABC:
path: "some/docker/volume/location/verticleABC.js"
worker: true
instances: 10
```The only required field is the `path`.
## ENV Vars:
On entrypoint verticle startup, two ENV variables are assesed:
`YAML_PATH`: provides the path to where the YAML Config file is located. If this ENV is not provided, it will fallback to using `default-config.yam` in the `./app` folder
`YAML_PATH_SCAN_PERIOD`: provides the scan period/frequency (milliseconds) for the YAML config file. If this ENV is not provided, it will fallback to a value of 5000.
## Deployment Change Detection
When a change to the config file is detected, each verticle in the `verticles` object will be compared against the previous configuration. For each verticle that has changed or if it is a new verticle, it will be deployed.
- [ ] TODO: Add detection for removed verticles in config YAML and undeploy those.
# Docker Setup
In practice, when setting up this project with a docker deployment, set the YAML_PATH env of the container for a Docker Volume location
# Console output
Example of console output for the first load and then a change to the number of instances for the my_verticle_steve verticle
```console
Starting vert.x application...
090eba58-623c-4288-9364-a196d8f866b3
YAML_PATH ENV variable is null or a empty string. Falling back to default-config.yaml
YAML_PATH_SCAN_PERIOD ENV variable is null or is not an integer. Falling back to value: 5000
Starting primary verticle
Succeeded in deploying verticle
Detected changed in config yaml
prev conf:
{}
new conf:
{"verticles":{"my_verticle_steve":{"name":"my verticle steve","path":"verticles/vert1/vert1.js","worker":false,"instances":1,"isolationGroup":null,"isolatedClasses":null,"config":{"value1":"dog","value2":"cat"}}}}
Prev conf was empty
Deploying: my_verticle_steve from path verticles/vert1/vert1.js
All verticles in config have been reviewed
vert 1 sending a message
Vert 1 confg: {"value2":"cat","value1":"dog"}
Deployment id is: 82d3a66e-a148-40d7-ad90-41ad99d0386c
Deployments current active: [82d3a66e-a148-40d7-ad90-41ad99d0386c, 37913bdd-9aa6-4524-8e1b-6b8a84f474af]
Detected change in config yaml
prev conf:
{"verticles":{"my_verticle_steve":{"name":"my verticle steve","path":"verticles/vert1/vert1.js","worker":false,"instances":1,"isolationGroup":null,"isolatedClasses":null,"config":{"value1":"dog","value2":"cat"}}}}
new conf:
{"verticles":{"my_verticle_steve":{"name":"my verticle steve","path":"verticles/vert1/vert1.js","worker":false,"instances":2,"isolationGroup":null,"isolatedClasses":null,"config":{"value1":"dog","value2":"cat"}}}}
Reviewing: my_verticle_steve
Change detected with: my_verticle_steve, new conf: {"name":"my verticle steve","path":"verticles/vert1/vert1.js","worker":false,"instances":2,"isolationGroup":null,"isolatedClasses":null,"config":{"value1":"dog","value2":"cat"}}
Deploying: my_verticle_steve from path verticles/vert1/vert1.js
All verticles in config have been reviewed
Verticle my_verticle_steve(82d3a66e-a148-40d7-ad90-41ad99d0386c) has been undeployed
Deployments current active: [37913bdd-9aa6-4524-8e1b-6b8a84f474af]
vert 1 sending a message
Vert 1 confg: {"value2":"cat","value1":"dog"}
vert 1 sending a message
Vert 1 confg: {"value2":"cat","value1":"dog"}
Deployment id is: bf166ca9-bb1c-4808-8c8a-aa616ae8c853
Deployments current active: [bf166ca9-bb1c-4808-8c8a-aa616ae8c853, 37913bdd-9aa6-4524-8e1b-6b8a84f474af]
```# Build and get started
1. Install npm dependencies: `./gradlew npmInstall`
2. Run the project locally: `./gradlew clean run`
3. Build a FatJar for deployment on other systems: `./gradlew clean shadowJar`