cloud_info 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/TODO +26 -0
- data/bin/cloud_info +5 -0
- data/config/cloud_info.yml +4 -3
- data/gemspec.rb +3 -1
- data/lib/cloud_info.rb +15 -1
- data/lib/cloud_info/cli.rb +85 -0
- data/lib/cloud_info/instances.rb +16 -16
- data/lib/cloud_info/version.rb +3 -0
- metadata +5 -3
data/TODO
CHANGED
@@ -1,2 +1,28 @@
|
|
1
|
+
0.1.6
|
2
|
+
* dont overwrite cache if the hosts is empty
|
3
|
+
|
4
|
+
TODO:
|
5
|
+
* support regex filter
|
6
|
+
* port rake br:setup -> cloud_info --update-ssh-config
|
1
7
|
* clean up the messy code
|
2
8
|
* write real specs
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
CloudInfo::Instances outline
|
13
|
+
1. connect to ec2
|
14
|
+
|
15
|
+
2. find instances that are in the ey-env
|
16
|
+
find ey instances from ey-recipes for specific environment
|
17
|
+
grab aws_group from one of the instances in the ey-env
|
18
|
+
instances in group
|
19
|
+
I can simply also just grab the instances from ey-recipes instead of working back from the aws_group..
|
20
|
+
|
21
|
+
3. connect to instances (ssh) and build info
|
22
|
+
connect to servers
|
23
|
+
download json and store in dictionary lookup
|
24
|
+
at this point we have enough data about the servers to build up the info we want
|
25
|
+
|
26
|
+
4. hosts
|
27
|
+
{:prod_app0 => 'xx.xx.xx.xx', :prod_app1 => 'xx.xx.xx.xx'}
|
28
|
+
|
data/bin/cloud_info
CHANGED
data/config/cloud_info.yml
CHANGED
@@ -5,8 +5,9 @@ prod_br:
|
|
5
5
|
prod_br_memcached0: ec2-204-236-244-26.compute-1.amazonaws.com
|
6
6
|
prod_br_util1: ec2-174-129-111-60.compute-1.amazonaws.com
|
7
7
|
prod_br_memcached1: ec2-184-73-18-219.compute-1.amazonaws.com
|
8
|
-
prod_br_app1: ec2-
|
9
|
-
prod_br_app2: ec2-
|
10
|
-
prod_br_app3: ec2-
|
8
|
+
prod_br_app1: ec2-75-101-183-44.compute-1.amazonaws.com
|
9
|
+
prod_br_app2: ec2-184-73-92-49.compute-1.amazonaws.com
|
10
|
+
prod_br_app3: ec2-174-129-48-17.compute-1.amazonaws.com
|
11
11
|
prod_br_db0: ec2-174-129-47-164.compute-1.amazonaws.com
|
12
12
|
prod_br_db1: ec2-72-44-44-156.compute-1.amazonaws.com
|
13
|
+
prod_br_dj0: ec2-184-73-13-18.compute-1.amazonaws.com
|
data/gemspec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'lib/cloud_info/version'
|
2
|
+
|
1
3
|
GEM_NAME = 'cloud_info'
|
2
4
|
GEM_FILES = FileList['**/*'] - FileList['coverage', 'coverage/**/*', 'pkg', 'pkg/**/*']
|
3
5
|
GEM_SPEC = Gem::Specification.new do |s|
|
@@ -16,5 +18,5 @@ GEM_SPEC = Gem::Specification.new do |s|
|
|
16
18
|
s.name = GEM_NAME
|
17
19
|
s.platform = Gem::Platform::RUBY
|
18
20
|
s.require_path = "lib"
|
19
|
-
s.version =
|
21
|
+
s.version = CloudInfo::Version
|
20
22
|
end
|
data/lib/cloud_info.rb
CHANGED
@@ -1,8 +1,19 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'yaml'
|
3
3
|
require 'pp'
|
4
|
+
require File.join(%W/#{File.dirname(__FILE__)} cloud_info version/)
|
4
5
|
require File.join(%W/#{File.dirname(__FILE__)} cloud_info instances/)
|
6
|
+
require File.join(%W/#{File.dirname(__FILE__)} cloud_info cli/)
|
5
7
|
|
8
|
+
# usage:
|
9
|
+
# require "cloud_info"
|
10
|
+
# irb(main):003:0> cloud_info = CloudInfo.new("prod",:private_key => "~/.ssh/id_rsa-private-key")
|
11
|
+
# irb(main):005:0> pp cloud_info.apps
|
12
|
+
# [["prod_app0", "xxx.xxx.xxx.xxx"],
|
13
|
+
# ["prod_app1", "xxx.xxx.xxx.xxx"],
|
14
|
+
# ["prod_app2", "xxx.xxx.xxx.xxx"],
|
15
|
+
# ["prod_app3", "xxx.xxx.xxx.xxx"]]
|
16
|
+
#
|
6
17
|
class CloudInfo
|
7
18
|
attr_reader :env_name
|
8
19
|
def initialize(env_name, options = {})
|
@@ -28,7 +39,7 @@ class CloudInfo
|
|
28
39
|
else
|
29
40
|
all_hosts = {}
|
30
41
|
end
|
31
|
-
all_hosts[env_name] = @hosts
|
42
|
+
all_hosts[env_name] = @hosts unless @hosts.empty? # do not replace cached version if its empty
|
32
43
|
CloudInfo.write_yaml(@cache_path, all_hosts)
|
33
44
|
end
|
34
45
|
@hosts
|
@@ -43,6 +54,9 @@ class CloudInfo
|
|
43
54
|
def utils
|
44
55
|
utils = hosts.select{|k,v| k =~ Regexp.new("#{@env_name}_util")}.sort {|a,b| a[0] <=> b[0] }
|
45
56
|
end
|
57
|
+
def djs
|
58
|
+
utils = hosts.select{|k,v| k =~ Regexp.new("#{@env_name}_dj")}.sort {|a,b| a[0] <=> b[0] }
|
59
|
+
end
|
46
60
|
|
47
61
|
def self.all_hosts(options = {})
|
48
62
|
all_hosts = {}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'logger'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
class CloudInfo
|
6
|
+
class CLI
|
7
|
+
|
8
|
+
def self.run(args)
|
9
|
+
cli = new(args)
|
10
|
+
cli.parse_options!
|
11
|
+
cli.run
|
12
|
+
end
|
13
|
+
|
14
|
+
# The array of (unparsed) command-line options
|
15
|
+
attr_reader :args
|
16
|
+
# The hash of (parsed) command-line options
|
17
|
+
attr_reader :options
|
18
|
+
|
19
|
+
def initialize(args)
|
20
|
+
@args = args.dup
|
21
|
+
end
|
22
|
+
|
23
|
+
# Return an OptionParser instance that defines the acceptable command
|
24
|
+
# line switches for cloud_info, and what their corresponding behaviors
|
25
|
+
# are.
|
26
|
+
def option_parser
|
27
|
+
# @logger = Logger.new
|
28
|
+
@option_parser ||= OptionParser.new do |opts|
|
29
|
+
opts.banner = "Usage: #{File.basename($0)} [options] action ..."
|
30
|
+
|
31
|
+
opts.on("-d", "--debug",
|
32
|
+
"Debug mode, more output"
|
33
|
+
) { |value| options[:debug] = true }
|
34
|
+
|
35
|
+
opts.on("-u", "--user USER",
|
36
|
+
"ssh user"
|
37
|
+
) { |value| options[:user] = value }
|
38
|
+
|
39
|
+
opts.on("-h", "--help", "Display this help message.") do
|
40
|
+
puts opts
|
41
|
+
exit
|
42
|
+
end
|
43
|
+
|
44
|
+
opts.on("-V", "--version",
|
45
|
+
"Display the cloud_info version, and exit."
|
46
|
+
) do
|
47
|
+
require 'cloud_info/version'
|
48
|
+
puts "CloudInfo v#{CloudInfo::Version}"
|
49
|
+
exit
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def parse_options!
|
56
|
+
@options = {:actions => []}
|
57
|
+
|
58
|
+
if args.empty?
|
59
|
+
warn "Please specifiy an action to execute."
|
60
|
+
warn option_parser
|
61
|
+
exit 1
|
62
|
+
end
|
63
|
+
|
64
|
+
option_parser.parse!(args)
|
65
|
+
coerce_variable_types!
|
66
|
+
extract_environment_variables!
|
67
|
+
|
68
|
+
options[:actions].concat(args)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Extracts name=value pairs from the remaining command-line arguments
|
72
|
+
# and assigns them as environment variables.
|
73
|
+
def extract_environment_variables! #:nodoc:
|
74
|
+
args.delete_if do |arg|
|
75
|
+
next unless arg.match(/^(\w+)=(.*)$/)
|
76
|
+
ENV[$1] = $2
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def run
|
81
|
+
puts "TODO FINISH LOGIC"
|
82
|
+
pp options
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/lib/cloud_info/instances.rb
CHANGED
@@ -129,22 +129,6 @@ class CloudInfo
|
|
129
129
|
h
|
130
130
|
end
|
131
131
|
|
132
|
-
module Aws
|
133
|
-
def aws_instances
|
134
|
-
@@aws_instances ||= @ec2.describe_instances
|
135
|
-
end
|
136
|
-
|
137
|
-
def aws_groups
|
138
|
-
@@aws_groups ||= aws_instances.collect{|x| x[:aws_groups]}.flatten.uniq
|
139
|
-
end
|
140
|
-
|
141
|
-
def aws_group_for_instance_id(instance_id)
|
142
|
-
instance = aws_instances.find{|x| x[:aws_instance_id] == instance_id}
|
143
|
-
aws_group = instance[:aws_groups].first
|
144
|
-
end
|
145
|
-
end
|
146
|
-
include Aws
|
147
|
-
|
148
132
|
def self.ey_recipes
|
149
133
|
@@ey_recipes ||= `ey-recipes`
|
150
134
|
end
|
@@ -179,6 +163,22 @@ class CloudInfo
|
|
179
163
|
instance_ids
|
180
164
|
end
|
181
165
|
|
166
|
+
module Aws
|
167
|
+
def aws_instances
|
168
|
+
@@aws_instances ||= @ec2.describe_instances
|
169
|
+
end
|
170
|
+
|
171
|
+
def aws_groups
|
172
|
+
@@aws_groups ||= aws_instances.collect{|x| x[:aws_groups]}.flatten.uniq
|
173
|
+
end
|
174
|
+
|
175
|
+
def aws_group_for_instance_id(instance_id)
|
176
|
+
instance = aws_instances.find{|x| x[:aws_instance_id] == instance_id}
|
177
|
+
aws_group = instance[:aws_groups].first
|
178
|
+
end
|
179
|
+
end
|
180
|
+
include Aws
|
181
|
+
|
182
182
|
end
|
183
183
|
end
|
184
184
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 6
|
9
|
+
version: 0.1.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Tung Nguyen
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-24 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -71,7 +71,9 @@ files:
|
|
71
71
|
- bin/cloud_info
|
72
72
|
- config/cloud_info.yml
|
73
73
|
- gemspec.rb
|
74
|
+
- lib/cloud_info/cli.rb
|
74
75
|
- lib/cloud_info/instances.rb
|
76
|
+
- lib/cloud_info/version.rb
|
75
77
|
- lib/cloud_info.rb
|
76
78
|
- MIT-LICENSE
|
77
79
|
- Rakefile
|