Envme
Envme is a Ruby wrapper around hashicorp’s envconsul. It fetches k/v data from Consul using a user specified prefix which can then be used to configure your app with the returned enviroment variables. It can be useful for building AWS user data or generating systemd service files. Currently works with envconsul v0.5.0.
Installation
shell
$ gem install envme
Or add to your Gemfile
```ruby source ‘https://rubygems.org’
gem ‘envme’, ‘>=0.2.0’ ```
Usage
### Configuration
ruby
Envme.configure do |config|
config.url = "localhost:8500"
config.acl_token = "xxxxxxxx-yyyy-zzzz-1111-222222222222"
end
Get
Grab everything at specified prefix:
ruby
Envme::Vars.get('test/prefix')
# => ["DB_ENDPOINT=db.endpoint.com", "DB_PASSWD=p@s$W0rd", "DB_USERNAME=dbuser", "REST_ENDPOINT=rest.endpoint.com"]
Limit return by passing in a search string:
```ruby Envme::Vars.get(‘test/prefix’, ‘rest’) # => [“REST_ENDPOINT=rest.endpoint.com”]
Envme::Vars.get(‘test/prefix’, ‘db’) # => [“DB_ENDPOINT=db.endpoint.com”, “DB_PASSWD=p@s$W0rd”, “DB_USERNAME=dbuser”] ```
Using multiple search strings:
ruby
Envme::Vars.get('test/prefix', 'db', 'rest')
# => ["DB_PASSWD=p@s$W0rd", "DB_USERNAME=dbuser", "REST_ENDPOINT=rest.endpoint.com", "DB_ENDPOINT=db.endpoint.com"]
Sanitizing return values
```ruby vars = Envme::Vars.get(‘test’, ‘db’) # => [“PREFIX_DB_ENDPOINT=db.endpoint.com”, “PREFIX_DB_PASSWD=p@s$W0rd”, “PREFIX_DB_USERNAME=dbuser”]
Envme::Vars.sanitize(vars, ‘prefix’) # => [“DB_ENDPOINT=db.endpoint.com”, “DB_PASSWD=p@s$W0rd”, “DB_USERNAME=dbuser”] ```
Building scripts
Exports for script:
```ruby vars = Envme::Vars.get(‘test/prefix’, ‘db’) # => [“DB_ENDPOINT=db.endpoint.com”, “DB_PASSWD=p@s$W0rd”, “DB_USERNAME=dbuser”]
exports = Envme.build_exports(vars) # => “export DB_ENDPOINT=db.endpoint.com\nexport DB_PASSWD=p@s$W0rd\nexport DB_USERNAME=dbuser”
start_script = «-eos #!/bin/bash #exports ruby app.rb eos # => “#!/bin/bash\nexport DB_ENDPOINT=db.endpoint.com\nexport DB_PASSWD=p@s$W0rd\nexport DB_USERNAME=dbuser\nruby app.rb\n”
puts start_script
!/bin/bash
export DB_ENDPOINT=db.endpoint.com export DB_PASSWD=p@s$W0rd export DB_USERNAME=dbuser ruby app.rb => nil ```
Populate a systemd EnvironmentFile:
```ruby vars = Envme::Vars.get(‘test/prefix’, ‘rest’, ‘db’) # => [“DB_PASSWD=p@s$W0rd”, “DB_USERNAME=dbuser”, “REST_ENDPOINT=rest.endpoint.com”, “DB_ENDPOINT=db.endpoint.com”]
file_builder = Envme.file_builder(vars, ‘/etc/sysconfig/my_service.service’) # => “echo DB_ENDPOINT=db.endpoint.com » /etc/sysconfig/my_service.service\necho DB_PASSWD=p@s$W0rd » /etc/sysconfig/my_service.service\necho DB_USERNAME=dbuser » /etc/sysconfig/my_service.service\necho REST_ENDPOINT=rest.endpoint.com » /etc/sysconfig/my_service.service”
user_data = «-eos #!/bin/bash #file_builder systemctl my_service start eos => “#!/bin/bash\necho DB_ENDPOINT=db.endpoint.com » /etc/sysconfig/my_service.service\necho DB_PASSWD=p@s$W0rd » /etc/sysconfig/my_service.service\necho DB_USERNAME=dbuser » /etc/sysconfig/my_service.service\necho REST_ENDPOINT=rest.endpoint.com » /etc/sysconfig/my_service.service\nsystemctl my_service start\n”
puts user_data
!/bin/bash
echo DB_ENDPOINT=db.endpoint.com » /etc/sysconfig/my_service.service echo DB_PASSWD=p@s$W0rd » /etc/sysconfig/my_service.service echo DB_USERNAME=dbuser » /etc/sysconfig/my_service.service echo REST_ENDPOINT=rest.endpoint.com » /etc/sysconfig/my_service.service systemctl my_service start => nil ```
Inspired by Diplomat