toquen 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -96,3 +96,17 @@ You can also manually specify the version of rubygems you want installed (defaul
96
96
  ```ruby
97
97
  set :rubygems_version, "2.1.11"
98
98
  ```
99
+
100
+ ## View Instances
101
+ To see details about your aws instances you can use the **details** cap task.
102
+
103
+ $ cap all details
104
+
105
+ Or for a given role with:
106
+
107
+ $ cap <role name> details
108
+
109
+ Or for a given server with:
110
+
111
+ $ cap server-<server name> details
112
+
data/lib/toquen.rb CHANGED
@@ -3,6 +3,7 @@ require "toquen/aws"
3
3
  require "toquen/local_writer"
4
4
  require "toquen/bootstrapper"
5
5
  require "toquen/capistrano"
6
+ require "toquen/details_table"
6
7
 
7
8
  module Toquen
8
9
  class Config
data/lib/toquen/aws.rb CHANGED
@@ -2,6 +2,8 @@ require 'aws'
2
2
 
3
3
  module Toquen
4
4
  class AWSProxy
5
+ attr_reader :regions
6
+
5
7
  def initialize
6
8
  @key_id = fetch(:aws_access_key_id)
7
9
  @key = fetch(:aws_secret_access_key)
@@ -26,7 +28,10 @@ module Toquen
26
28
  :internal_ip => i.private_ip_address,
27
29
  :external_ip => i.public_ip_address,
28
30
  :name => i.tags["Name"],
29
- :roles => Toquen.config.aws_roles_extractor.call(i)
31
+ :roles => Toquen.config.aws_roles_extractor.call(i),
32
+ :type => i.instance_type,
33
+ :external_dns => i.public_dns_name,
34
+ :internal_dns => i.private_dns_name
30
35
  }
31
36
  end
32
37
  end
@@ -1,5 +1,6 @@
1
1
  require 'capistrano/setup'
2
2
  require 'capistrano/console'
3
+ require 'set'
3
4
 
4
5
  desc "update local cache of servers and roles"
5
6
  task :update_roles do
@@ -94,6 +95,19 @@ task :toquen_install do
94
95
  FileUtils.cp File.expand_path("../templates/deploy.rb", __FILE__), 'config/deploy.rb'
95
96
  end
96
97
  end
98
+
99
+ desc "Show all information about EC2 instances"
100
+ task :details do
101
+ filter_roles = Set.new fetch(:filter)[:roles]
102
+ aws = Toquen::AWSProxy.new
103
+ aws.regions.each do |region|
104
+ instances = aws.server_details_in(region).reject do |instance|
105
+ instance_roles = instance[:roles] + ["all", "server-#{instance[:name]}"]
106
+ (filter_roles.intersection instance_roles.to_set).empty?
107
+ end
108
+ Toquen::DetailsTable.new(instances, region).output unless instances.empty?
109
+ end
110
+ end
97
111
 
98
112
  module Capistrano
99
113
  module TaskEnhancements
@@ -0,0 +1,40 @@
1
+ require 'terminal-table'
2
+ require 'term/ansicolor'
3
+
4
+ module Toquen
5
+ class DetailsTable
6
+
7
+ def initialize(instances, region)
8
+ @instances = instances
9
+ @region = region
10
+ @color = Term::ANSIColor
11
+ end
12
+
13
+ def output
14
+ table = Terminal::Table.new(
15
+ :style => {
16
+ :border_x => "",
17
+ :border_i => "",
18
+ :border_y => ""
19
+ }
20
+ )
21
+ table.title = @color.bold { "Instances in #{@region}" }
22
+ header = [ "Name", "Roles", "Public", "Private", "Type" ]
23
+ table.add_row header.map { |h| @color.underline @color.bold h }
24
+ @instances.each do |instance|
25
+ table.add_row instance_to_row(instance)
26
+ end
27
+ puts table.to_s
28
+ end
29
+
30
+ def instance_to_row(instance)
31
+ [
32
+ @color.green { instance[:name] },
33
+ @color.yellow { instance[:roles].join(",") },
34
+ instance[:external_dns].nil? ? "(N/A)" : @color.cyan(instance[:external_dns]) + " (#{instance[:external_ip]})",
35
+ instance[:internal_dns].nil? ? "(N/A)" : @color.cyan(instance[:internal_dns]) + " (#{instance[:internal_ip]})",
36
+ @color.red { instance[:type] }
37
+ ]
38
+ end
39
+ end
40
+ end
@@ -1,7 +1,9 @@
1
1
  module Toquen
2
2
  module LocalWriter
3
3
  def self.create_databag_item(details)
4
- open("#{fetch(:chef_data_bags_path)}/servers/#{details[:name]}.json", 'w') do |f|
4
+ servers = "#{fetch(:chef_data_bags_path)}/servers"
5
+ FileUtils.mkdir_p servers
6
+ open("#{servers}/#{details[:name]}.json", 'w') do |f|
5
7
  f.write JSON.dump(details)
6
8
  end
7
9
  end
@@ -1,3 +1,3 @@
1
1
  module Toquen
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
data/toquen.gemspec CHANGED
@@ -18,5 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
  gem.add_dependency('capistrano', '~> 3.0.1')
20
20
  gem.add_dependency('aws-sdk')
21
+ gem.add_dependency('terminal-table')
22
+ gem.add_dependency('term-ansicolor')
21
23
  gem.add_development_dependency("rdoc")
22
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toquen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -43,6 +43,38 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: terminal-table
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: term-ansicolor
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
46
78
  - !ruby/object:Gem::Dependency
47
79
  name: rdoc
48
80
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +107,7 @@ files:
75
107
  - lib/toquen/aws.rb
76
108
  - lib/toquen/bootstrapper.rb
77
109
  - lib/toquen/capistrano.rb
110
+ - lib/toquen/details_table.rb
78
111
  - lib/toquen/local_writer.rb
79
112
  - lib/toquen/templates/deploy.rb
80
113
  - lib/toquen/templates/ubuntu_bootstrap.erb
@@ -94,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
127
  version: '0'
95
128
  segments:
96
129
  - 0
97
- hash: -549714515373103353
130
+ hash: 3464588055419203147
98
131
  required_rubygems_version: !ruby/object:Gem::Requirement
99
132
  none: false
100
133
  requirements:
@@ -103,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
136
  version: '0'
104
137
  segments:
105
138
  - 0
106
- hash: -549714515373103353
139
+ hash: 3464588055419203147
107
140
  requirements: []
108
141
  rubyforge_project:
109
142
  rubygems_version: 1.8.25