ey_cloud_awareness 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/VERSION +1 -1
- data/ey_cloud_awareness.gemspec +1 -2
- data/lib/engine_yard_cloud_instance.rb +38 -17
- data/lib/ey_cloud_awareness.rb +2 -4
- metadata +1 -2
- data/lib/engine_yard_cloud_chef.rb +0 -9
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/ey_cloud_awareness.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ey_cloud_awareness}
|
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"]
|
@@ -24,7 +24,6 @@ Gem::Specification.new do |s|
|
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"ey_cloud_awareness.gemspec",
|
27
|
-
"lib/engine_yard_cloud_chef.rb",
|
28
27
|
"lib/engine_yard_cloud_instance.rb",
|
29
28
|
"lib/ey_cloud_awareness.rb",
|
30
29
|
"spec/ey_cloud_awareness_spec.rb",
|
@@ -1,19 +1,29 @@
|
|
1
1
|
class EngineYardCloudInstance
|
2
|
-
|
2
|
+
CURRENT_INSTANCE_ID_CACHE_PATH = defined?(RAILS_ROOT) ? "#{RAILS_ROOT}/config/engine_yard_cloud_instance_id" : '/etc/engine_yard_cloud_instance_id'
|
3
|
+
INSTANCE_DESCRIPTIONS_CACHE_PATH = defined?(RAILS_ROOT) ? "#{RAILS_ROOT}/config/engine_yard_cloud_instance_descriptions.yml" : '/etc/engine_yard_cloud_instance_descriptions.yml'
|
4
|
+
DNA_PATH = '/etc/chef/dna.json'
|
3
5
|
|
4
|
-
|
6
|
+
attr_reader :instance_id
|
5
7
|
def initialize(instance_id)
|
6
8
|
@instance_id = instance_id.to_sym
|
7
9
|
end
|
8
10
|
|
11
|
+
def valid?
|
12
|
+
data.present?
|
13
|
+
end
|
14
|
+
|
9
15
|
def refresh
|
10
16
|
self.class.refresh
|
11
17
|
end
|
12
18
|
|
19
|
+
def data
|
20
|
+
self.class.data[instance_id]
|
21
|
+
end
|
22
|
+
|
13
23
|
def method_missing(name, *args, &block)
|
14
24
|
name = name.to_sym
|
15
|
-
if
|
16
|
-
|
25
|
+
if data and data.has_key?(name)
|
26
|
+
data[name]
|
17
27
|
else
|
18
28
|
super
|
19
29
|
end
|
@@ -36,12 +46,16 @@ class EngineYardCloudInstance
|
|
36
46
|
data.map { |k, _| new k }
|
37
47
|
end
|
38
48
|
|
49
|
+
def current
|
50
|
+
new cached_current_instance_id
|
51
|
+
end
|
52
|
+
|
39
53
|
def first
|
40
54
|
new data.to_a.first.first
|
41
55
|
end
|
42
56
|
|
43
57
|
def find_by_instance_id(instance_id)
|
44
|
-
new instance_id
|
58
|
+
new instance_id
|
45
59
|
end
|
46
60
|
|
47
61
|
def find_all_by_instance_roles(*args)
|
@@ -51,16 +65,16 @@ class EngineYardCloudInstance
|
|
51
65
|
def refresh
|
52
66
|
@_data = nil
|
53
67
|
@_dna = nil
|
54
|
-
|
68
|
+
cached_instance_descriptions true
|
69
|
+
cached_current_instance_id true
|
55
70
|
end
|
56
71
|
|
57
72
|
def data
|
58
73
|
return @_data if @_data
|
59
74
|
hash = Hash.new
|
60
75
|
cached_instance_descriptions.each do |instance_description|
|
61
|
-
|
62
|
-
hash[
|
63
|
-
current = hash[key]
|
76
|
+
hash[instance_description[:aws_instance_id]] ||= Hash.new
|
77
|
+
current = hash[instance_description[:aws_instance_id]]
|
64
78
|
# using current as a pointer
|
65
79
|
if dna[:db_host] == instance_description[:dns_name] or dna[:db_host] == instance_description[:private_dns_name]
|
66
80
|
current[:instance_role] = :db
|
@@ -73,24 +87,30 @@ class EngineYardCloudInstance
|
|
73
87
|
end
|
74
88
|
current[:private_dns_name] = instance_description[:private_dns_name]
|
75
89
|
current[:dns_name] = instance_description[:dns_name]
|
76
|
-
current[:aws_instance_id] = instance_description[:aws_instance_id]
|
77
90
|
current[:aws_state] = instance_description[:aws_state]
|
78
91
|
end
|
79
92
|
@_data = hash.recursive_symbolize_keys!
|
80
93
|
end
|
81
94
|
|
82
|
-
private
|
83
|
-
|
84
95
|
def dna
|
85
|
-
@_dna ||=
|
96
|
+
@_dna ||= JSON.load(IO.read(DNA_PATH)).recursive_symbolize_keys!
|
86
97
|
end
|
87
98
|
|
88
|
-
|
89
|
-
|
90
|
-
|
99
|
+
private
|
100
|
+
|
101
|
+
def cached_current_instance_id(refresh = false)
|
102
|
+
if refresh or !File.readable?(CURRENT_INSTANCE_ID_CACHE_PATH)
|
103
|
+
@_cached_current_instance_id = open("http://169.254.169.254/latest/meta-data/instance-id").gets
|
104
|
+
begin
|
105
|
+
File.open(CURRENT_INSTANCE_ID_CACHE_PATH, 'w') { |f| f.write @_cached_current_instance_id }
|
106
|
+
rescue Errno::EACCES
|
107
|
+
$stderr.puts "[EY CLOUD AWARENESS GEM] Not caching current instance id because #{CURRENT_INSTANCE_ID_CACHE_PATH} can't be written to"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
@_cached_current_instance_id ||= IO.read(CURRENT_INSTANCE_ID_CACHE_PATH)
|
91
111
|
end
|
92
112
|
|
93
|
-
def
|
113
|
+
def cached_instance_descriptions(refresh = false)
|
94
114
|
if refresh or !File.readable?(INSTANCE_DESCRIPTIONS_CACHE_PATH)
|
95
115
|
ec2 = RightAws::Ec2.new dna[:aws_secret_id], dna[:aws_secret_key]
|
96
116
|
@_cached_instance_descriptions = ec2.describe_instances.map(&:recursive_symbolize_keys!)
|
@@ -100,6 +120,7 @@ class EngineYardCloudInstance
|
|
100
120
|
$stderr.puts "[EY CLOUD AWARENESS GEM] Not caching instance data because #{INSTANCE_DESCRIPTIONS_CACHE_PATH} can't be written to"
|
101
121
|
end
|
102
122
|
end
|
123
|
+
@_cached_instance_descriptions ||= YAML.load(IO.read(INSTANCE_DESCRIPTIONS_CACHE_PATH))
|
103
124
|
end
|
104
125
|
end
|
105
126
|
end
|
data/lib/ey_cloud_awareness.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
|
+
require 'open-uri'
|
1
2
|
require 'active_support'
|
2
3
|
require 'right_aws'
|
3
|
-
|
4
|
-
%w{ engine_yard_cloud_instance engine_yard_cloud_chef }.each do |lib|
|
5
|
-
require File.expand_path(File.join(File.dirname(__FILE__), lib))
|
6
|
-
end
|
4
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'engine_yard_cloud_instance'))
|
7
5
|
|
8
6
|
# http://pragmatig.wordpress.com/2009/04/14/recursive-symbolize_keys/
|
9
7
|
class Hash
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ey_cloud_awareness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seamus Abshere
|
@@ -59,7 +59,6 @@ files:
|
|
59
59
|
- Rakefile
|
60
60
|
- VERSION
|
61
61
|
- ey_cloud_awareness.gemspec
|
62
|
-
- lib/engine_yard_cloud_chef.rb
|
63
62
|
- lib/engine_yard_cloud_instance.rb
|
64
63
|
- lib/ey_cloud_awareness.rb
|
65
64
|
- spec/ey_cloud_awareness_spec.rb
|
@@ -1,9 +0,0 @@
|
|
1
|
-
module EngineYardCloudChef
|
2
|
-
DNA_PATH = '/etc/chef/dna.json'
|
3
|
-
# Load the Chef DNA file from /etc/chef/dna.json
|
4
|
-
# >> JSON.load(IO.read('/etc/chef/dna.json')).keys
|
5
|
-
# => ["aws_secret_key", "db_slaves", "user_ssh_key", "admin_ssh_key", "backup_interval", "instance_role", "mailserver", "utility_instances", "crons", "backup_window", "removed_applications", "alert_email", "applications", "gems_to_install", "members", "reporting_url", "aws_secret_id", "environment", "users", "master_app_server", "db_host", "packages_to_install", "haproxy"]
|
6
|
-
def self.dna
|
7
|
-
JSON.load(IO.read(DNA_PATH)).recursive_symbolize_keys!
|
8
|
-
end
|
9
|
-
end
|