engineyard-metadata 0.1.0 → 0.1.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.
- data/README.rdoc +5 -0
- data/VERSION +1 -1
- data/engineyard-metadata.gemspec +2 -2
- data/lib/engineyard-metadata/engine_yard_cloud_api.rb +20 -7
- data/lib/engineyard-metadata/insider.rb +5 -0
- data/lib/engineyard-metadata/metadata.rb +1 -0
- data/spec/metadata_spec.rb +10 -0
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -69,6 +69,11 @@ Metadata getters are defined directly on <tt>EY::Metadata</tt> (which in turn de
|
|
69
69
|
=> [ 'db_master.compute-1.amazonaws.com', 'db_slave_1.compute-1.amazonaws.com' ]
|
70
70
|
[...and many more...]
|
71
71
|
|
72
|
+
== Known issues
|
73
|
+
|
74
|
+
* It's not always clear what environment you're running in. For example, you say <tt>EY::Metadata.something</tt> and you're just supposed to know what environment you're in. You can use <tt>.environment_name=</tt>, but you might not remember.
|
75
|
+
* There are no factory methods. If we fully fleshed this out, it might be like <tt>my_env = EY::Environment.find('my_env')</tt> and <tt>my_app_master = my_env.app_master</tt>. Not sure that complexity would add a lot of value.
|
76
|
+
|
72
77
|
== History
|
73
78
|
|
74
79
|
This is the second generation of http://rubygems.org/gems/ey_cloud_awareness.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/engineyard-metadata.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{engineyard-metadata}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Seamus Abshere"]
|
12
|
-
s.date = %q{2010-10-
|
12
|
+
s.date = %q{2010-10-18}
|
13
13
|
s.description = %q{Pulls metadata from EC2 and EngineYard so that your EngineYard AppCloud (Amazon EC2) instances know about each other.}
|
14
14
|
s.email = %q{seamus@abshere.net}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -112,24 +112,37 @@ module EY
|
|
112
112
|
def repository_uri
|
113
113
|
data['apps'][0]['repository_uri']
|
114
114
|
end
|
115
|
+
|
116
|
+
# A list of all the environment names belonging to this account.
|
117
|
+
def environment_names
|
118
|
+
environments.map { |environment| environment['name'] }
|
119
|
+
end
|
115
120
|
|
121
|
+
# Used internally to determine whether we've decoded the API response yet.
|
116
122
|
def data_loaded?
|
117
123
|
defined?(@data) and @data.is_a? Hash
|
118
124
|
end
|
119
125
|
|
120
|
-
|
121
|
-
|
126
|
+
# Used internally to store the full list of environments that the API gives us.
|
127
|
+
def environments
|
128
|
+
return @environments if @environments.is_a? Array
|
122
129
|
raw_json = REST.get(URL, 'X-EY-Cloud-Token' => EY::Metadata.ey_cloud_token).body
|
123
130
|
raw_data = ActiveSupport::JSON.decode raw_json
|
124
|
-
|
131
|
+
@environments = raw_data['environments']
|
132
|
+
end
|
133
|
+
|
134
|
+
# Used internally to store data about the specific environment we're working with.
|
135
|
+
def data
|
136
|
+
return @data if data_loaded?
|
137
|
+
matching_environments = environments.select do |environment|
|
125
138
|
if EY::Metadata.environment_name
|
126
|
-
|
139
|
+
environment['name'] == EY::Metadata.environment_name
|
127
140
|
else
|
128
|
-
|
141
|
+
environment['apps'].any? { |app| app['repository_uri'] == EY::Metadata.repository_uri }
|
129
142
|
end
|
130
143
|
end
|
131
|
-
raise RuntimeError, "[engineyard-metadata gem] Found too many environments: #{
|
132
|
-
@data =
|
144
|
+
raise RuntimeError, "[engineyard-metadata gem] Found too many environments: #{matching_environments.map { |environment| environments['name'] }.join(', ')}" if matching_environments.length > 1
|
145
|
+
@data = matching_environments[0]
|
133
146
|
raise RuntimeError, "[engineyard-metadata gem] Couldn't find an EngineYard environment with the repository uri #{repository_uri}" unless data_loaded?
|
134
147
|
@data
|
135
148
|
end
|
@@ -26,6 +26,11 @@ module EY
|
|
26
26
|
@amazon_ec2_api = nil
|
27
27
|
end
|
28
28
|
|
29
|
+
# You can't get the list of environment names while you're on the instances themselves.
|
30
|
+
def environment_names
|
31
|
+
raise CannotGetFromHere
|
32
|
+
end
|
33
|
+
|
29
34
|
# An adapter that reads from the EngineYard AppCloud /etc/chef/dna.json file.
|
30
35
|
def chef_dna
|
31
36
|
@chef_dna ||= ChefDna.new
|
data/spec/metadata_spec.rb
CHANGED
@@ -63,6 +63,10 @@ shared_examples_for "it does in all execution environments" do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
shared_examples_for "it's executing outside the cloud" do
|
66
|
+
it 'gets the list of all environment names' do
|
67
|
+
EY::Metadata.environment_names.should == [ 'WRONG_ENVIRONMENT_NAME', 'FAKE_ENVIRONMENT_NAME' ]
|
68
|
+
end
|
69
|
+
|
66
70
|
it 'not get the present instance ID' do
|
67
71
|
lambda {
|
68
72
|
EY::Metadata.present_instance_id
|
@@ -117,6 +121,12 @@ shared_examples_for "it's executing outside the cloud" do
|
|
117
121
|
end
|
118
122
|
|
119
123
|
shared_examples_for "it's executing inside the cloud" do
|
124
|
+
it 'not get the list of all environment names' do
|
125
|
+
lambda {
|
126
|
+
EY::Metadata.environment_names
|
127
|
+
}.should raise_error(EY::Metadata::CannotGetFromHere)
|
128
|
+
end
|
129
|
+
|
120
130
|
it 'get the present instance ID' do
|
121
131
|
EY::Metadata.present_instance_id.should == PRESENT_INSTANCE_ID
|
122
132
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: engineyard-metadata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Seamus Abshere
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-18 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|