Imperium

Imperium is a Latin word which roughly translates to 'power to command'. It was often applied to official, and unofficial, positions of power. In this case, specifically the office of Consul.

Imperium is a Consul client for Ruby applications, it aims to be as ergonomic as possible for users while giving the flexibility required for complex applications. At first only the KV store will be supported but additional functionality is expected to be added as needed (or as pull requests are submitted).

Motivation.

As Instructure's use of Consul has grown so have our wants and needs in a client library have grown. The goal of this gem is to provide a lightweight, thread safe interface to the full power of Consul's API while not forcing the consumer to use all of it where unnecessary. For now we're focusing on the KV store since most of our use revolves around it.

Installation

Add this line to your application's Gemfile:

gem 'imperium'

And then execute:

$ bundle

Or install it yourself as:

$ gem install imperium

Usage

Configure:

# The following configuration values are used for the default client for each
# service. This isn't the only way to get a client set up but will fill the
# needs of most applications.
Imperium.configure do |config|
  # Connection values can be specified separately
  config.host = 'consul.example.com'
  config.port = 8585
  config.ssl = false

  # Or, as a url (this is equivilant to the example above).
  config.url = 'http://consul.example.com:8585'

  config.token = 'super-sekret-value'
end

# If you want a client that uses some other configuration values without altering
# the default ones you can directly instantiate a Configuration object:

config = Imperium::Configuration.new(url: 'https://other-consul.example.com', token: 'foobar')
# This client will contact other-consul.example.com rather than the one configured above.
kv_client = Imperium::KV.new(config)

GET values from the KV store:

# Get a single value
response = Imperium::KV.get('config/single-value', :stale)
response.values # => 'qux'

# Get a set of nested values
response = Imperium::KV.get('config/complex-value', :recurse)
response.values # => {first: 'value', second: 'value'}

Development

After checking out the repo, run bin/setup to install dependencies. Then, run bin/rspec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/instructure/imperium.