aether 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,6 +1,7 @@
1
1
  *.gem
2
2
  *.rbc
3
3
  .bundle
4
+ .chef
4
5
  .config
5
6
  .rvmrc
6
7
  .yardoc
@@ -13,6 +14,7 @@ lib/bundler/man
13
14
  pkg
14
15
  rdoc
15
16
  spec/reports
17
+ spec/chef_server.yml
16
18
  test/tmp
17
19
  test/version_tmp
18
20
  tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/README.md CHANGED
@@ -14,5 +14,4 @@ Sample Usage
14
14
  :client_key => '/path/to/.chef/foo.pem', :organization => 'foo', :environment => 'production')
15
15
 
16
16
  webservers = chef_server.find_webservers # returns an array of Ridley::Node
17
-
18
17
  any_servers = chef_server.find_servers(:role => 'a-chef-role') # returns an array of Ridley::Node
@@ -5,6 +5,8 @@ require 'aether/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
7
  gem.add_development_dependency('rake', '>= 0.8')
8
+ gem.add_development_dependency('rspec', '~> 2.11')
9
+ gem.add_development_dependency('hashie', '~> 1.2')
8
10
 
9
11
  gem.add_dependency('ridley', '~> 0.2')
10
12
 
@@ -1,39 +1,5 @@
1
- require 'aether/version'
2
1
  require 'ridley'
3
2
 
4
-
5
- module Aether
6
- class Chef
7
-
8
- attr_reader :connection, :environment
9
-
10
- def initialize(options = {})
11
- @connection = Ridley::Connection.new(
12
- :server_url => options[:server_url],
13
- :client_name => options[:client_name],
14
- :client_key => options[:client_key],
15
- :organization => options[:organization]
16
- )
17
-
18
- @environment = options[:environment]
19
- end
20
-
21
- def find_servers(options)
22
- role = options[:role]
23
- connection.search(:node, "chef_environment:#{environment} AND role:#{role}")
24
- end
25
-
26
- def find_web_servers(role = 'web-server')
27
- @web_servers ||= find_servers(:role => role)
28
- end
29
-
30
- def find_db_migration_server(role = 'db-migration-server')
31
- @db_migration_server ||= find_servers(:role => role).first
32
- end
33
-
34
- def find_data_bag_item(bag_name, item_name)
35
- @data_bag_item ||= connection.data_bag.all.find{ |bag| bag.name == bag_name }.item.find(item_name).attributes
36
- end
37
-
38
- end
39
- end
3
+ require 'aether/version'
4
+ require 'aether/server'
5
+ require 'aether/chef'
@@ -0,0 +1,40 @@
1
+ module Aether
2
+ class Chef
3
+
4
+ attr_reader :connection, :environment
5
+
6
+ def initialize(options = {})
7
+ @connection = Ridley::Connection.new(
8
+ :server_url => options[:server_url],
9
+ :client_name => options[:client_name],
10
+ :client_key => options[:client_key],
11
+ :organization => options[:organization]
12
+ )
13
+
14
+ @environment = options[:environment]
15
+ end
16
+
17
+ def find_servers(options = {})
18
+ role = options[:role]
19
+ results = []
20
+ connection.search(:node, "chef_environment:#{environment} AND role:#{role}").each do |node|
21
+ results << Aether::Server.new(:node => node)
22
+ end
23
+
24
+ results
25
+ end
26
+
27
+ def find_web_servers(role = 'web-server')
28
+ find_servers(:role => role)
29
+ end
30
+
31
+ def find_db_migration_server(role = 'db-migration-server')
32
+ find_servers(:role => role).first
33
+ end
34
+
35
+ def find_data_bag_item(bag_name, item_name)
36
+ connection.data_bag.all.find{ |bag| bag.name == bag_name }.item.find(item_name).attributes
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,22 @@
1
+ module Aether
2
+ class Server
3
+
4
+ attr_reader :name, :attributes, :raw
5
+
6
+ def initialize(options = {})
7
+ node = options[:node]
8
+ @name = node.name
9
+ @attributes = node.attributes
10
+ @raw = node
11
+ end
12
+
13
+ def ipaddress
14
+ @ipaddress ||= attributes[:automatic][:ipaddress]
15
+ end
16
+
17
+ def hostname
18
+ @hostname ||= attributes[:automatic][:fqdn]
19
+ end
20
+
21
+ end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module Aether
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Aether::Chef do
4
+ # TODO: mock the response; right now the tests connect to a real chef server :p
5
+
6
+ describe "#new" do
7
+ let(:chef_server) { Aether::Chef.new(chef_server_info) }
8
+
9
+ it "sets the connection" do
10
+ expect(chef_server.connection).to be_an_instance_of(Ridley::Connection)
11
+ end
12
+
13
+ it "sets the environment" do
14
+ expect(chef_server.environment).to eq('staging')
15
+ end
16
+ end
17
+
18
+ describe "#find_servers" do
19
+ let(:chef_server) { Aether::Chef.new(chef_server_info) }
20
+
21
+ it "returns an array of Chef::Server" do
22
+ results = chef_server.find_servers(:role => 'web-server')
23
+ expect(results).to be_an_instance_of(Array)
24
+ expect(results.first).to be_an_instance_of(Aether::Server)
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Aether::Server do
4
+ let(:server) { Aether::Server.new(:node => mock_node_results) }
5
+
6
+ describe "#ipaddress" do
7
+ it "returns the ip address" do
8
+ expect(server.ipaddress).to_not be_blank
9
+ expect(server.ipaddress).to eq(mock_node_results.attributes.automatic.ipaddress)
10
+ end
11
+ end
12
+
13
+ describe "#hostname" do
14
+ it "returns the fqdn" do
15
+ expect(server.hostname).to_not be_blank
16
+ expect(server.hostname).to eq(mock_node_results.attributes.automatic.fqdn)
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,5 @@
1
+ server_url: 'https://api.opscode.com/organizations/xxx'
2
+ client_name: 'xxx_client'
3
+ client_key: '/absolute/path/to/.chef/xxx_client.pem'
4
+ organization: 'xxx'
5
+ environment: 'test'
@@ -0,0 +1,35 @@
1
+ require 'aether'
2
+
3
+ require 'hashie'
4
+
5
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
6
+ RSpec.configure do |config|
7
+ config.treat_symbols_as_metadata_keys_with_true_values = true
8
+ config.run_all_when_everything_filtered = true
9
+ config.filter_run :focus
10
+
11
+ # Run specs in random order to surface order dependencies. If you find an
12
+ # order dependency and want to debug it, you can fix the order by providing
13
+ # the seed, which is printed after each run.
14
+ # --seed 1234
15
+ config.order = 'random'
16
+ end
17
+
18
+
19
+ ### Helper Methods
20
+
21
+ def chef_server_info
22
+ @chef_server_info ||= YAML.load_file(File.expand_path(File.join(File.dirname(__FILE__), 'chef_server.yml'))).symbolize_keys
23
+ end
24
+
25
+ def mock_node_results
26
+ @mock_node_results ||= Hashie::Mash.new(
27
+ :name => 'web01.staging.foo.com',
28
+ :attributes => {
29
+ :automatic => {
30
+ :fqdn => 'web01.staging.foo.com',
31
+ :ipaddress => '10.0.10.15'
32
+ }
33
+ }
34
+ )
35
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aether
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-13 00:00:00.000000000 Z
12
+ date: 2012-10-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -27,6 +27,38 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0.8'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.11'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.11'
46
+ - !ruby/object:Gem::Dependency
47
+ name: hashie
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.2'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
30
62
  - !ruby/object:Gem::Dependency
31
63
  name: ridley
32
64
  requirement: !ruby/object:Gem::Requirement
@@ -51,13 +83,20 @@ extensions: []
51
83
  extra_rdoc_files: []
52
84
  files:
53
85
  - .gitignore
86
+ - .rspec
54
87
  - Gemfile
55
88
  - LICENSE.txt
56
89
  - README.md
57
90
  - Rakefile
58
91
  - aether.gemspec
59
92
  - lib/aether.rb
93
+ - lib/aether/chef.rb
94
+ - lib/aether/server.rb
60
95
  - lib/aether/version.rb
96
+ - spec/aether/chef_spec.rb
97
+ - spec/aether/server_spec.rb
98
+ - spec/chef_server.yml.example
99
+ - spec/spec_helper.rb
61
100
  homepage: https://github.com/bitium/aether
62
101
  licenses: []
63
102
  post_install_message:
@@ -72,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
111
  version: '0'
73
112
  segments:
74
113
  - 0
75
- hash: 57900475441158562
114
+ hash: 1696241638785372526
76
115
  required_rubygems_version: !ruby/object:Gem::Requirement
77
116
  none: false
78
117
  requirements:
@@ -81,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
120
  version: '0'
82
121
  segments:
83
122
  - 0
84
- hash: 57900475441158562
123
+ hash: 1696241638785372526
85
124
  requirements: []
86
125
  rubyforge_project:
87
126
  rubygems_version: 1.8.24
@@ -89,4 +128,8 @@ signing_key:
89
128
  specification_version: 3
90
129
  summary: Provides helper methods to be used in Capistrano recipes to retrieve server
91
130
  info from a Chef Server
92
- test_files: []
131
+ test_files:
132
+ - spec/aether/chef_spec.rb
133
+ - spec/aether/server_spec.rb
134
+ - spec/chef_server.yml.example
135
+ - spec/spec_helper.rb