toquen 0.0.6 → 0.0.7

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.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