mulder 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: 44712c7a381d8ee15b33ed9d69b946568d5b3f2d
4
+ data.tar.gz: e2b50b9c6d9e3ceb02be3330d9069808d18ecaad
5
+ SHA512:
6
+ metadata.gz: 614965a919802992a0910ea806fc4e73d2df8a54272e842eeed056fac43fa65d5c6d7030854174801cb9301c2b376abc44e2527dd6af9e26508e00a3af199813
7
+ data.tar.gz: 3859cfc374268011ba7b9607c29b9efbbe8a18030b0e130f86e2f4c8fca83f83508202de8465dc9be51b327cacf0a715b535e55bf840d1bad37aa00854484533
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ _yardoc
7
+ coverage
8
+ config/aws.yml
9
+ doc/
10
+ Gemfile.lock
11
+ InstalledFiles
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ mulder
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.0.0-p247
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 ShopKeep POS
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,60 @@
1
+ # Mulder
2
+
3
+ A deploy-time helper for your AWS AutoScaling groups, and servers. Discover the IP addresses of your instances by AutoScalingGroup.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'mulder'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install mulder
18
+
19
+ ## Usage
20
+
21
+ ### Capistrano
22
+
23
+ At the top of your `deploy.rb` file, add:
24
+
25
+ require 'mulder/capistrano'
26
+
27
+ Configure some variables for later use:
28
+
29
+ set :application, 'banana_sandwich'
30
+ set :environment, 'production'
31
+ set :aws_creds, '/foo/config/aws.yml'
32
+ set :mulder, { Mulder::Capistrano.new(aws_creds, environment, application) }
33
+
34
+ Setting up your `worker` role:
35
+
36
+ role :worker, *mulder.ips('WorkerServerGroup')
37
+
38
+ And your `app` role:
39
+
40
+ role(:app, *mulder.ips('AppServerGroup')
41
+
42
+ And your `web` role:
43
+
44
+ role :web, *mulder.ips('WebServerGroup')
45
+
46
+ And your `db` role:
47
+
48
+ role :db, mulder.ips('WorkerServerGroup').first, primary: true
49
+
50
+ You can ask for private IPs as well:
51
+
52
+ role :app, *mulder.ips('WorkerServerGroup', true)
53
+
54
+ ## Contributing
55
+
56
+ 1. Fork it
57
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
58
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
59
+ 4. Push to the branch (`git push origin my-new-feature`)
60
+ 5. Create new Pull Request
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/bin/.gitkeep ADDED
File without changes
@@ -0,0 +1,2 @@
1
+ aws_access_key_id: TEST
2
+ aws_secret_access_key: TEST
data/lib/mulder.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Mulder
2
+
3
+ require_relative 'mulder/client'
4
+ require_relative 'mulder/config'
5
+ require_relative 'mulder/connection'
6
+ require_relative 'mulder/instance'
7
+ require_relative 'mulder/version'
8
+
9
+ end
@@ -0,0 +1,23 @@
1
+ require 'mulder'
2
+
3
+ module Mulder
4
+ class Capistrano
5
+
6
+ def initialize(config_file, application, environment)
7
+ config = ::Mulder::Config.from(:yaml, file: config_file)
8
+ @connection = ::Mulder::Connection.new(config)
9
+ @application = application
10
+ @environment = environment
11
+ end
12
+
13
+ def client(role)
14
+ @client ||= ::Mulder::Client.new(@connection, @application, @environment, role)
15
+ end
16
+
17
+ def ips(role, use_private = false)
18
+ type_of_ips = use_private ? :private_ip_address : :public_ip_address
19
+
20
+ client(role).instances.collect(&type_of_ips).compact
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ module Mulder
2
+ class Client
3
+
4
+ attr_reader :app, :role, :environment
5
+
6
+ def initialize(connection, app, environment, role)
7
+ @connection = connection
8
+ @app = app
9
+ @environment = environment
10
+ @role = role
11
+ end
12
+
13
+ def group
14
+ @connection.group_by_id_regexp(id_regexp)
15
+ end
16
+
17
+ def instances
18
+ @connection.instances_by_group(group)
19
+ end
20
+
21
+ private
22
+
23
+ def id_regexp
24
+ /^#{@app}-#{@environment}-#{@role}-.*$/i
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,8 @@
1
+ require 'isomer'
2
+
3
+ module Mulder
4
+ class Config < Isomer::Base
5
+ parameter :aws_access_key_id
6
+ parameter :aws_secret_access_key
7
+ end
8
+ end
@@ -0,0 +1,44 @@
1
+ require 'fog'
2
+
3
+ module Mulder
4
+ class Connection
5
+
6
+ attr_reader :config
7
+
8
+ def initialize(config)
9
+ @config = config
10
+ end
11
+
12
+ def group_by_id_regexp(id_regexp)
13
+ autoscaler.groups.find_all do |group|
14
+ group.id =~ id_regexp
15
+ end.last
16
+ end
17
+
18
+ def instances_by_group(group)
19
+ group.instances.collect do |instance|
20
+ compute_instance = server_by_instance_id(instance.id)
21
+ Mulder::Instance.new(compute_instance)
22
+ end
23
+ end
24
+
25
+ def server_by_instance_id(instance_id)
26
+ compute.servers.get(instance_id)
27
+ end
28
+
29
+ def autoscaler
30
+ @autoscaler ||= ::Fog::AWS::AutoScaling.new(
31
+ :aws_access_key_id => @config.aws_access_key_id,
32
+ :aws_secret_access_key => @config.aws_secret_access_key
33
+ )
34
+ end
35
+
36
+ def compute
37
+ @compute ||= ::Fog::Compute::AWS.new(
38
+ :aws_access_key_id => @config.aws_access_key_id,
39
+ :aws_secret_access_key => @config.aws_secret_access_key
40
+ )
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,47 @@
1
+ require 'json'
2
+
3
+ module Mulder
4
+ class Instance
5
+
6
+ attr_reader :fog_compute_instance
7
+
8
+ def initialize(fog_compute_instance)
9
+ @fog_compute_instance = fog_compute_instance
10
+ end
11
+
12
+ def id
13
+ @fog_compute_instance.id
14
+ end
15
+
16
+ def dns_name
17
+ @fog_compute_instance.dns_name
18
+ end
19
+
20
+ def public_ip_address
21
+ @fog_compute_instance.public_ip_address
22
+ end
23
+
24
+ def private_ip_address
25
+ @fog_compute_instance.private_ip_address
26
+ end
27
+
28
+ def vpc_id
29
+ @fog_compute_instance.vpc_id
30
+ end
31
+
32
+ def created_at
33
+ @fog_compute_instance.created_at
34
+ end
35
+
36
+ def as_hash
37
+ @as_hash ||= {
38
+ id: id,
39
+ dns_name: dns_name,
40
+ public_ip_address: public_ip_address,
41
+ private_ip_address: private_ip_address,
42
+ vpc_id: vpc_id,
43
+ created_at: created_at
44
+ }.delete_if { |_, value| value == '' || value == nil }
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,3 @@
1
+ module Mulder
2
+ VERSION = "0.0.1"
3
+ end
data/mulder.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mulder/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'mulder'
8
+ spec.version = Mulder::VERSION
9
+ spec.authors = ['Duncan Grazier']
10
+ spec.email = ['itsmeduncan@gmail.com']
11
+ spec.description = %q{Discover information about AWS Autoscaling Groups}
12
+ spec.summary = %q{Autoscaling groups, and their metadata}
13
+ spec.homepage = 'https://www.github.com/shopkeep/mulder'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.3'
22
+ spec.add_development_dependency 'mocha', '~> 0.14.0'
23
+ spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'rspec', '~> 2.14.1'
25
+ spec.add_development_dependency 'simplecov', '~> 0.7.1'
26
+
27
+ spec.add_dependency 'fog', '~> 1.15.0'
28
+ spec.add_dependency 'isomer', '~> 0.1.3'
29
+ spec.add_dependency 'thor', '~> 0.18.1'
30
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+ require 'mulder/capistrano'
3
+
4
+ describe Mulder::Capistrano do
5
+
6
+ describe '#client' do
7
+ it 'instantiates a new client with the correct role' do
8
+ mocked_connection = mock
9
+ mocked_config = mock
10
+ Mulder::Config.expects(:from).returns(mocked_config)
11
+ Mulder::Connection.expects(:new).returns(mocked_connection)
12
+
13
+ capistrano = described_class.new('foo', 'bar', 'widget')
14
+ ::Mulder::Client.expects(:new).with(mocked_connection, 'bar', 'widget', 'ROLE')
15
+
16
+ capistrano.client('ROLE')
17
+ end
18
+ end
19
+
20
+ describe '.ips' do
21
+ it 'it returns the public ips for the client' do
22
+ mocked_connection = mock
23
+ mocked_config = mock
24
+ Mulder::Config.expects(:from).returns(mocked_config)
25
+ Mulder::Connection.expects(:new).returns(mocked_connection)
26
+
27
+ capistrano = described_class.new('foo', 'bar', 'widget')
28
+ capistrano.expects(:client).with('bananas').returns(mock(instances: [mock(public_ip_address: 'foo')]))
29
+
30
+ capistrano.ips('bananas').should == ['foo']
31
+ end
32
+
33
+ it 'returns the private ips for the client' do
34
+ mocked_connection = mock
35
+ mocked_config = mock
36
+ Mulder::Config.expects(:from).returns(mocked_config)
37
+ Mulder::Connection.expects(:new).returns(mocked_connection)
38
+
39
+ capistrano = described_class.new('foo', 'bar', 'widget')
40
+ capistrano.expects(:client).with('bananas').returns(mock(instances: [mock(private_ip_address: 'foo')]))
41
+
42
+ capistrano.ips('bananas', true).should == ['foo']
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mulder::Client do
4
+
5
+ describe '.initialize' do
6
+ let(:mocked_connection) { mock }
7
+
8
+ it 'stores the app' do
9
+ described_class.new(mocked_connection, 'foo', 'bar', 'worker').app.should == 'foo'
10
+ end
11
+
12
+ it 'stores the environment' do
13
+ described_class.new(mocked_connection, 'foo', 'bar', 'worker').environment.should == 'bar'
14
+ end
15
+ end
16
+
17
+ describe '#group' do
18
+ it 'finds the correct group based on the given attributes' do
19
+ mocked_connection = mock
20
+ mocked_connection.expects(:group_by_id_regexp).with(/^foo-bar-WorkerGroup-.*$/i)
21
+ client = described_class.new(mocked_connection, 'foo', 'bar', 'WorkerGroup')
22
+
23
+ client.group
24
+ end
25
+ end
26
+
27
+ describe '#instances' do
28
+ it 'finds the instances for the group' do
29
+ mocked_connection = mock
30
+ mocked_group = mock
31
+ mocked_connection.expects(:instances_by_group).with(mocked_group)
32
+ client = described_class.new(mocked_connection, 'foo', 'bar', 'worker')
33
+ client.expects(:group).returns(mocked_group)
34
+
35
+ client.instances
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mulder::Connection do
4
+
5
+ let(:config) { stub(aws_access_key_id: 'foo', aws_secret_access_key: 'bar') }
6
+ let(:connection) { described_class.new(config) }
7
+
8
+ describe ".new" do
9
+ it 'stores the config' do
10
+ connection.config.should == config
11
+ end
12
+ end
13
+
14
+ describe "#autoscaler" do
15
+ it 'initializes a Fog::AWS::AutoScaling' do
16
+ Fog::AWS::AutoScaling.expects(:new)
17
+ connection.autoscaler
18
+ end
19
+
20
+ it 'memoizes the initalized Fog::AWS::AutoScaling' do
21
+ Fog::AWS::AutoScaling.expects(:new).once.returns(mock)
22
+ 2.times { connection.autoscaler }
23
+ end
24
+ end
25
+
26
+ describe "#compute" do
27
+ it 'initializes a Fog::Compute::AWS' do
28
+ Fog::Compute::AWS.expects(:new)
29
+ connection.compute
30
+ end
31
+
32
+ it 'memoizes the initalized Fog::Compute::AWS' do
33
+ ::Fog::Compute::AWS.expects(:new).once.returns(mock)
34
+ 2.times { connection.compute }
35
+ end
36
+ end
37
+
38
+ describe "#group_by_id_regexp" do
39
+ it 'finds all of the groups whose id matches the regexp' do
40
+ mocked_group = mock(id: 'foo-bar')
41
+ connection = described_class.new(config)
42
+ connection.expects(:autoscaler).returns(mock(groups: [mocked_group]))
43
+
44
+ connection.group_by_id_regexp(/foo-bar/).should == mocked_group
45
+ end
46
+ end
47
+
48
+ describe "#instances_by_group" do
49
+ it 'finds the instances for the group and returns Mulder::Instances' do
50
+ mocked_instance = mock(id: 'foo')
51
+ compute_instance = mock
52
+ mocked_group = mock(instances: [mocked_instance])
53
+ connection = described_class.new(config)
54
+ connection.expects(:server_by_instance_id).with('foo').returns(compute_instance)
55
+ Mulder::Instance.expects(:new).with(compute_instance)
56
+ connection.instances_by_group(mocked_group)
57
+ end
58
+ end
59
+
60
+ describe "#server_by_instance_id" do
61
+ it 'finds the compute connections server by the given id' do
62
+ mocked_compute = mock
63
+ mocked_servers = mock
64
+
65
+ connection = described_class.new(config)
66
+ connection.expects(:compute).returns(mocked_compute)
67
+ mocked_compute.expects(:servers).returns(mocked_servers)
68
+ mocked_servers.expects(:get).with('foo').returns('bar')
69
+ connection.server_by_instance_id('foo').should == 'bar'
70
+ end
71
+ end
72
+
73
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mulder::Instance do
4
+
5
+ let(:attributes) { { id: "i-f17bf19e", dns_name: 'foo.example.org', public_ip_address: '10.0.0.2', private_ip_address: '10.1.1.1', vpc_id: 'vpc-e9663d87', created_at: DateTime.parse('2013-09-10 19:39:26 UTC').to_s } }
6
+
7
+ describe '.new' do
8
+ it 'stores the fog computer instance' do
9
+ fog_compute_instance = mock
10
+ described_class.new(fog_compute_instance).fog_compute_instance.should == fog_compute_instance
11
+ end
12
+ end
13
+
14
+ describe '#as_hash' do
15
+ let(:instance) { mock(attributes) }
16
+
17
+ it 'has the expected attributes' do
18
+ described_class.new(instance).as_hash.should == attributes
19
+ end
20
+
21
+ it 'rejects blank values' do
22
+ instance = mock(attributes.merge(id: ''))
23
+ described_class.new(instance).as_hash.should ==
24
+ attributes.reject { |key, _| key == :id }
25
+ end
26
+
27
+ it 'rejects nil values' do
28
+ instance = mock(attributes.merge(id: nil))
29
+ described_class.new(instance).as_hash.should ==
30
+ attributes.reject { |key, _| key == :id }
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mulder do
4
+
5
+ end
@@ -0,0 +1,23 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
5
+ require 'mulder'
6
+ require 'mocha/api'
7
+
8
+ RSpec.configure do |config|
9
+
10
+ config.treat_symbols_as_metadata_keys_with_true_values = true
11
+
12
+ config.run_all_when_everything_filtered = true
13
+
14
+ config.filter_run :focus
15
+
16
+ config.mock_with :mocha
17
+
18
+ config.order = 'random'
19
+
20
+ config.before(:suite) do
21
+ Fog.mock!
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mulder
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Duncan Grazier
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mocha
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.14.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.14.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.14.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 2.14.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 0.7.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 0.7.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: fog
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 1.15.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 1.15.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: isomer
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.1.3
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.1.3
111
+ - !ruby/object:Gem::Dependency
112
+ name: thor
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.18.1
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 0.18.1
125
+ description: Discover information about AWS Autoscaling Groups
126
+ email:
127
+ - itsmeduncan@gmail.com
128
+ executables:
129
+ - .gitkeep
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - .rspec
135
+ - .ruby-gemset
136
+ - .ruby-version
137
+ - .travis.yml
138
+ - Gemfile
139
+ - LICENSE.txt
140
+ - README.markdown
141
+ - Rakefile
142
+ - bin/.gitkeep
143
+ - config/aws.example.yml
144
+ - lib/mulder.rb
145
+ - lib/mulder/capistrano.rb
146
+ - lib/mulder/client.rb
147
+ - lib/mulder/config.rb
148
+ - lib/mulder/connection.rb
149
+ - lib/mulder/instance.rb
150
+ - lib/mulder/version.rb
151
+ - mulder.gemspec
152
+ - spec/lib/mulder/capistrano_spec.rb
153
+ - spec/lib/mulder/client_spec.rb
154
+ - spec/lib/mulder/connection_spec.rb
155
+ - spec/lib/mulder/instance_spec.rb
156
+ - spec/lib/mulder_spec.rb
157
+ - spec/spec_helper.rb
158
+ homepage: https://www.github.com/shopkeep/mulder
159
+ licenses:
160
+ - MIT
161
+ metadata: {}
162
+ post_install_message:
163
+ rdoc_options: []
164
+ require_paths:
165
+ - lib
166
+ required_ruby_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - '>='
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements: []
177
+ rubyforge_project:
178
+ rubygems_version: 2.0.6
179
+ signing_key:
180
+ specification_version: 4
181
+ summary: Autoscaling groups, and their metadata
182
+ test_files:
183
+ - spec/lib/mulder/capistrano_spec.rb
184
+ - spec/lib/mulder/client_spec.rb
185
+ - spec/lib/mulder/connection_spec.rb
186
+ - spec/lib/mulder/instance_spec.rb
187
+ - spec/lib/mulder_spec.rb
188
+ - spec/spec_helper.rb