etcd-env 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f6e8e985054b8b3c0fb87b7eafbe064bd2c808d6
4
+ data.tar.gz: 14cfc948d891bbfec9d43fb842d8d535076220e4
5
+ SHA512:
6
+ metadata.gz: 82acb643d95f74f7dac4c2f83baa1e20e120c5fe58b9f85fa8c1b74bb865dd8c0298f41d2ba5dad2b076dd4d50479a93feb59cc612269e4e218ff89ae60cb771
7
+ data.tar.gz: c4e9bc2f6b0559d22bdf2d3d1c047e379fcf11c6e97a9328b09c9c6757cfc80ae6cd5873c4dfa791692c615fdcfe6c5bdbe52a0434113f5f1d857e6cfcf379fe
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ /.bundle/
2
+ /Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Dependencies specified in etcd-env.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,53 @@
1
+ etcd-env
2
+ ========
3
+
4
+ Runs the wrapped command with envronment variables taken from etcd.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'etcd-env'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install etcd-env
21
+
22
+ ## Usage
23
+
24
+ etcd-env <etcd key> <command>
25
+
26
+ ### Environment variables
27
+
28
+ - `ETCD_HOST`
29
+ - `ETCD_PORT`
30
+
31
+ If `ETCD_HOST` is not specified, the script will assume it is running inside a
32
+ docker container and will try to reach the etcd server running on the docker
33
+ host.
34
+
35
+ ## Development
36
+
37
+ You will need etcd installed to run the tests.
38
+
39
+ To install this gem onto your local machine, run `bundle exec rake install`. To
40
+ release a new version, update the version number in `etcd-env.gemspec`, and then
41
+ run `bundle exec rake release` to create a git tag for the version, push git
42
+ commits and tags, and push the `.gem` file to [rubygems.org][1].
43
+
44
+ ## Contributing
45
+
46
+ 1. Fork it ( https://github.com/[my-github-username]/etcd-env/fork )
47
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
48
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
49
+ 4. Push to the branch (`git push origin my-new-feature`)
50
+ 5. Create a new Pull Request
51
+
52
+
53
+ [1]: https://rubygems.org/
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
data/circle.yml ADDED
@@ -0,0 +1,12 @@
1
+ dependencies:
2
+ pre:
3
+ - wget https://github.com/coreos/etcd/releases/download/v0.4.6/etcd-v0.4.6-linux-amd64.tar.gz
4
+ - tar xzvf etcd-v0.4.6-linux-amd64.tar.gz
5
+ - sudo cp etcd-v0.4.6-linux-amd64/etcd* /usr/local/bin/
6
+ override:
7
+ - 'rvm-exec 2.1.5 bundle install'
8
+
9
+
10
+ test:
11
+ override:
12
+ - etcd --data-dir /tmp/etcd --name test & sleep 2 && rvm-exec 2.1.5 bundle exec rspec
data/etcd-env.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+ Gem::Specification.new do |spec|
3
+ spec.name = 'etcd-env'
4
+ spec.version = '0.0.1'
5
+ spec.authors = ['Charles Martinot', 'Omar Khan']
6
+ spec.email = ['techadmin@playlab.com']
7
+ spec.summary = 'Run a command with environment variables from etcd'
8
+ spec.homepage = 'https://github.com/pocket-playlab/etcd-env'
9
+
10
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
11
+ f.match(/^(test|spec|features)\//)
12
+ end
13
+
14
+ spec.bindir = 'exe'
15
+ spec.executables = spec.files.grep(/^exe\//) { |f| File.basename(f) }
16
+
17
+ spec.add_development_dependency 'bundler', '~> 1.7'
18
+ spec.add_development_dependency 'rake', '~> 10.0'
19
+ spec.add_development_dependency 'rspec'
20
+ end
data/exe/etcd-env ADDED
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+ # Runs the wrapped command with envronment variables taken from etcd.
3
+
4
+ require 'json'
5
+ require 'net/http'
6
+
7
+ def usage
8
+ puts "Usage: #{$PROGRAM_NAME} <etcd key> [ <etcd key> ... ] -- <command>"
9
+ end
10
+
11
+ def env_vars(keys)
12
+ var = Array.new
13
+ keys.each do |key|
14
+ response = fetch "http://#{etcd_host}:#{etcd_port}/v2/keys#{key}"
15
+ var << (JSON.parse(response)['node']['nodes'] || [])
16
+ .map { |var| [var['key'].split('/').last, var['value']] }
17
+ .to_h
18
+ end
19
+ var
20
+ end
21
+
22
+ def etcd_host
23
+ host = (ENV['ETCD_HOST'] || `ip route | awk '/default/ { print $3 }'`).strip rescue ''
24
+ raise 'etcd host not found' if host.empty?
25
+ fetch "http://#{host}:#{etcd_port}/v2/keys/"
26
+ host
27
+ end
28
+
29
+ def etcd_port
30
+ ENV['ETCD_PORT'] || 4001
31
+ end
32
+
33
+ def fetch(uri_str, limit = 10)
34
+ raise 'Too many HTTP redirects' if limit == 0
35
+ response = Net::HTTP.get_response(URI(uri_str))
36
+ case response
37
+ when Net::HTTPSuccess then
38
+ response.body
39
+ when Net::HTTPRedirection then
40
+ fetch(response['location'], limit - 1)
41
+ else
42
+ response.value
43
+ end
44
+ end
45
+
46
+ if __FILE__ == $PROGRAM_NAME
47
+ key_str, *commands = ARGV.join(" ").split(" -- ")
48
+ keys = key_str.split(" ")
49
+ if commands.empty?
50
+ usage
51
+ exit 1
52
+ end
53
+ exec env_vars(keys).reduce({}, :merge), *commands
54
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: etcd-env
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Charles Martinot
8
+ - Omar Khan
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2015-03-31 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.7'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.7'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ description:
57
+ email:
58
+ - techadmin@playlab.com
59
+ executables:
60
+ - etcd-env
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".gitignore"
65
+ - ".rspec"
66
+ - Gemfile
67
+ - README.md
68
+ - Rakefile
69
+ - circle.yml
70
+ - etcd-env.gemspec
71
+ - exe/etcd-env
72
+ homepage: https://github.com/pocket-playlab/etcd-env
73
+ licenses: []
74
+ metadata: {}
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 2.4.3
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: Run a command with environment variables from etcd
95
+ test_files: []
96
+ has_rdoc: