Desi (Developper ElasticSearch Installer) is very simple tool to quickly set up an Elastic Search local install for development purposes.
It can:
- download and install ElasticSearch (the latest release by default)
- start/stop/restart it.
- do basic indices management (list, delete, empty a given set of indices)
It can be used both as a command-line tool and as a library.
$ desi list # List locally installed ElasticSearch releases
$ desi releases # List all upstream Elastic Search releases (latest 5 by default)
$ desi install [VERSION] # Install a specific version (latest by default)
$ desi start # Start a local 1-node cluster (noop if active)
$ desi restart # (Re)start cluster (even if active)
$ desi stop # Stop cluster
$ desi status [--host HOST] # Show running cluster info
$ desi indices "^foo" # List all indices whose name match /^foo/
$ desi indices "^foo" --delete # Delete all matching indices
$ desi indices "bar$" --empty # Remove all records from the matching indices
$ # The latest version will be installed by default
$ desi install
* No release specified, will fetch latest.
* fetching release elasticsearch-0.19.9.tar.gz
[…]
$ # You can also give a specific release name
$ desi install 0.19.6 # ("v0.19.6" or "elasticsearch-0.19.6" would also work)
* fetching release elasticsearch-0.19.6.tar.gz
[…]
The current version is the one symlinked to $HOME/elasticsearch/current
, that
will be spun up by (desi start
)
- command-line
$ desi list
Local ES installs (current one is tagged with '*'):
* elasticsearch-0.19.9 (/home/me/elasticsearch/elasticsearch-0.19.9)
- elasticsearch-0.19.8 (/home/me/elasticsearch/elasticsearch-0.19.8)
- library
Desi::LocalInstall.new.releases.map(&:name) #=> ["elasticsearch-0.19.8", "elasticsearch-0.19.9"]
Desi::LocalInstall.new.releases.detect(&:current?).version #=> "0.19.9"
- command-line
$ desi start
* Elastic Search 0.19.9 started
$ desi status
OK. Elastic Search cluster 'elasticsearch' (v0.19.9) is running on 1 node(s) with status yellow
- library
Desi::ProcessManager.new.start.status #=> "OK. Elastic Search cluster 'elasticsearch' (v0.19.9) is running on 1 node(s) with status green"
- command-line
$ # List all local indices
$ desi indices
Indices from host http://127.0.0.1:9200 matching the pattern /.*/
foo
bar
baz
$ # List all indices with "foo" in their name on remote cluster 129.168.1.42, port 9800
$ desi indices --host 129.168.1.42:9800 foo
Indices from host http://192.168.1.42:9800 matching the pattern /foo/
remotefoo1
remotefoo2
$ # Remove all indices whose name starts with "ba"
$ desi indices --delete "^ba"
The following indices from host http://127.0.0.1:9200 are now deleted
* bar
* baz
- library
# All local indices
Desi::IndexManager.new.list #=> ["foo", "bar", "baz"]
# All local indices whose name starts with "b"
Desi::IndexManager.new.list("^b") #=> ["bar", "baz"]
# All indices from distant cluster
Desi::IndexManager.new(host: "192.168.1.42:9800").list #=> ["remotefoo1", "remotefoo2"]
# Delete all local indices whose name starts with "ba"
Desi::IndexManager.new.delete!("^ba") #=> nil
# The indices actually disappeared! \o/
Desi::IndexManager.new.list #=> ["foo"]
Add this line to your application's Gemfile:
gem 'desi'
And then execute:
$ bundle
Or install it yourself as:
$ gem install desi
-
add more tests
-
desi upgrade
(Upgrade to latest version and migrate data) -
desi switch VERSION
(Switch currently active ES version to VERSION) -
plugin management ? (list, install, remove ES plugins)
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request