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 +2 -0
- data/.rspec +2 -0
- data/README.md +0 -1
- data/aether.gemspec +2 -0
- data/lib/aether.rb +3 -37
- data/lib/aether/chef.rb +40 -0
- data/lib/aether/server.rb +22 -0
- data/lib/aether/version.rb +1 -1
- data/spec/aether/chef_spec.rb +28 -0
- data/spec/aether/server_spec.rb +20 -0
- data/spec/chef_server.yml.example +5 -0
- data/spec/spec_helper.rb +35 -0
- metadata +48 -5
data/.gitignore
CHANGED
data/.rspec
ADDED
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
|
data/aether.gemspec
CHANGED
data/lib/aether.rb
CHANGED
|
@@ -1,39 +1,5 @@
|
|
|
1
|
-
require 'aether/version'
|
|
2
1
|
require 'ridley'
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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'
|
data/lib/aether/chef.rb
ADDED
|
@@ -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
|
data/lib/aether/version.rb
CHANGED
|
@@ -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
|
data/spec/spec_helper.rb
ADDED
|
@@ -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.
|
|
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-
|
|
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:
|
|
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:
|
|
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
|