aether 0.0.1 → 0.0.2

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.
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