Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pyr/warp
simple controller for parallel script execution
https://github.com/pyr/warp
Last synced: about 1 month ago
JSON representation
simple controller for parallel script execution
- Host: GitHub
- URL: https://github.com/pyr/warp
- Owner: pyr
- License: other
- Created: 2014-02-12T22:20:04.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2020-04-24T13:23:57.000Z (over 4 years ago)
- Last Synced: 2024-08-02T15:07:06.698Z (3 months ago)
- Language: Clojure
- Size: 2.02 MB
- Stars: 28
- Watchers: 6
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
warp: distributed workflow management
=====================================warp distributes scenarios across any number of machines.
> hubot: deploy to production, engage!
![build status](https://travis-ci.org/pyr/warp.svg)
## The story
Your applications span a large group of hosts and deployment
involves several separate steps.Let's say that you have a web application deployment process
that involves:- Updating a git repository
- Restarting a serviceThis process is likely the same for several profiles such as
*test*, *staging* and *production*.![warp scenarios](http://i.imgur.com/6svdQH9.png)
Warp provides a DSL for writing scenarios and schedules
executions over a pub-sub system, streaming the results
to the controller which makes results available through
an API and web viewCommand executions can be scheduled through the following means:
- The web interface exposed by the controller
- API queries to the controller
- IRC/Campfire/Hipchat through a [hubot](http://hubot.github.io) script## A sample scenario
```clj
{:timeout 2
:name "ping"
:matcher {:type :none}
:profiles {:everyone {:type :all}
:platform {:type :and :clauses [{:type :fact :fact "facter.sp_environment" :value "{{0}}"}
{:type :fact :fact "facter.platform" :value "{{1}}"}]}
:prod {:type :fact :fact "facter.sp_environment" :value "prod"}
:preprod {:type :fact :fact "facter.sp_environment" :value "preprod"}
:host {:type :host :host "{{0}}"}}
:commands [{:type :ping}]}
```## More screenshots
![warp index](http://i.imgur.com/qawWTTX.png)
![warp output](http://i.imgur.com/sYVRCHf.png)## Pub-Sub support
Scenario execution happens through an HTTP api.
Warp and [warp-agent](https://github.com/pyr/warp-agent) borrow
from [mcollective](http://puppetlabs.com/mcollective) and my first
implementation within [amiral](https://github.com/pyr/amiral)Warp aims to improve on amiral in the following ways:
- Bundle matchers, timeouts and a list of commands (a script) options
in named "scenarios"
- Extract out of the IRC bot framework and display extended execution
results in a web view
- Deprecate signing requests with ssh-keys and move to SSL
- Provide a lighter-weight agent
- Support arguments## Development
To build and run the controller:
lein cljsbuild
lein run -- -f doc/controller.cljWhen working on the ClojureScript part, you can automatically rebuild
it when a change happens:lein cljsbuild auto
You can run the agent with:
./agent/warp-agent doc/warp-agent.json