aws-cli 0.0.1.pre4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/README ADDED
@@ -0,0 +1,17 @@
1
+ AWS-CLI
2
+ =======
3
+
4
+ A command-line interface to Amazon Web Services.
5
+
6
+ Installation
7
+ ------------
8
+
9
+ Either download the source and build it yourself, or install as a prerelease
10
+ gem:
11
+
12
+ gem install aws-cli --pre
13
+
14
+ Usage
15
+ -----
16
+
17
+ aws --help
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,26 @@
1
+ $:.push File.expand_path( "../lib", __FILE__ )
2
+ require "aws/cli/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "aws-cli"
6
+ s.version = Aws::Cli::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Rick Fletcher"]
9
+ s.email = ["fletch@pobox.com"]
10
+ s.homepage = "http://github.com/baseballdb/aws-cli"
11
+ s.summary = %{A command-line interface to AWS.}
12
+ s.description = %{This gem contains a command-line "aws" script, which provides an interface to certain Amazon web services.}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_runtime_dependency "aws", "~> 2.5.3"
20
+ s.add_runtime_dependency "baseballdb-commander"
21
+ s.add_runtime_dependency "highline"
22
+ s.add_runtime_dependency "json_pure"
23
+ s.add_runtime_dependency "terminal-table"
24
+
25
+ # s.add_development_dependency "rspec", "~> 2.5.0"
26
+ end
data/bin/aws ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ##
4
+ # AWS: A general purpose script for Amamzon AWS
5
+ #
6
+
7
+ require "rubygems"
8
+ require "bundler/setup"
9
+
10
+ require "aws/cli"
@@ -0,0 +1,15 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ require "commander"
5
+ require "highline"
6
+
7
+ # output formats
8
+ require "json"
9
+ require "terminal-table"
10
+ require "yaml"
11
+
12
+ require "aws"
13
+ require "aws/cli/ext/core"
14
+ require "aws/cli/ext/highline"
15
+ require "aws/cli/app"
@@ -0,0 +1,60 @@
1
+ require "commander/import"
2
+
3
+ module Aws
4
+ module Cli
5
+ module App
6
+ $verbosity = 0
7
+
8
+ program :version, "0.1"
9
+ program :description, "A general purpose script for Amazon AWS"
10
+
11
+ option "-k", "--access-key KEY", "Your AWS Access Key ID"
12
+ option "-s", "--secret-key KEY", "Your AWS Secret Access Key"
13
+ option "-f", "--format FORMAT", "Output format"
14
+ option "-v", "--verbose", "Be verbose. Use more than once for increased verbosity.",
15
+ &Proc.new { $verbosity += 1 }
16
+
17
+ # require_options "--access-key", "--secret-key"
18
+
19
+ command :"ec2 list" do |c|
20
+ c.description = "List EC2 instances"
21
+
22
+ c.action do |args, options|
23
+ options.default :format => "table"
24
+
25
+ @ec2 = Aws::Ec2.new( options.access_key, options.secret_key, :logger => Logger.new( File.open( "/dev/null", "w" ) ) )
26
+
27
+ mappings = [{
28
+ :aws_instance_id => :id,
29
+ :aws_image_id => :ami,
30
+ :aws_availability_zone => :zone,
31
+ :private_dns_name => :internal_dns,
32
+ :dns_name => :external_dns
33
+ }]
34
+
35
+ instances = @ec2.describe_instances.map do |instance|
36
+ formatted_instance = {}
37
+ formatted_instance[:name] = instance[:tags].find { |k, v| k.downcase == "name" }[1] rescue nil
38
+
39
+ # pull in attributes by group
40
+ [mappings.size, ($verbosity + 1)].min.times do |i|
41
+ mappings[i].keys.inject( formatted_instance ) { |acc, k|
42
+ acc.merge!( mappings[i][k] => instance.delete( k ) )
43
+ }
44
+ end
45
+
46
+ # append everything else if $verbosity calls for more groups than we've mapped
47
+ formatted_instance.merge!( instance ) if ($verbosity + 1) > mappings.size
48
+ formatted_instance
49
+ end
50
+
51
+ say instances
52
+ end
53
+ end
54
+
55
+ # require "aws/cli/commands/ec2"
56
+ end
57
+ end
58
+ end
59
+
60
+ include Aws::Cli::App
@@ -0,0 +1,37 @@
1
+ command :"ec2 list" do |c|
2
+ c.description = "List EC2 instances"
3
+
4
+ c.action do |args, options|
5
+ options.default :format => "table"
6
+
7
+ puts options.inspect
8
+
9
+ # @ec2 = Aws::Ec2.new( options.access_key, options.secret_key, :logger => Logger.new( File.open( "/dev/null", "w" ) ) )
10
+ #
11
+ # mappings = [{
12
+ # :aws_instance_id => :id,
13
+ # :aws_image_id => :ami,
14
+ # :aws_availability_zone => :zone,
15
+ # :private_dns_name => :internal_dns,
16
+ # :dns_name => :external_dns
17
+ # }]
18
+ #
19
+ # intances = @ec2.describe_instances.map do |instance|
20
+ # formatted_instance = {}
21
+ # formatted_instance[:name] = instance[:tags].find { |k, v| k.downcase == "name" }[1] rescue nil
22
+ #
23
+ # # pull in attributes by group
24
+ # [mappings.size, ($verbosity + 1)].min.times do |i|
25
+ # mappings[i].keys.inject( formatted_instance ) { |acc, k|
26
+ # acc.merge!( mappings[i][k] => instance.delete( k ) )
27
+ # }
28
+ # end
29
+ #
30
+ # # append everything else if $verbosity calls for more groups than we've mapped
31
+ # formatted_instance.merge!( instance ) if ($verbosity + 1) > mappings.size
32
+ # formatted_instance
33
+ # end
34
+ #
35
+ # say intances
36
+ end
37
+ end
@@ -0,0 +1,25 @@
1
+ class Array
2
+ def to_table
3
+ if self.first.is_a?( Hash )
4
+ headings = self.first.keys
5
+ Terminal::Table.new(
6
+ :headings => headings,
7
+ :rows => self.map { |r| headings.map { |h| r[h] } }
8
+ ).to_s
9
+ else
10
+ Terminal::Table.new( :rows => self.map { |r| r.is_a?( Array ) ? r : [r] } ).to_s
11
+ end
12
+ end
13
+ end
14
+
15
+ class Hash
16
+ def to_table
17
+ Terminal::Table.new( :headings => self.keys, :rows => [self.values] ).to_s
18
+ end
19
+ end
20
+
21
+ class Object
22
+ def to_table
23
+ Terminal::Table.new( :rows => [[self]] ).to_s
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ class HighLine
2
+ alias_method :orig_say, :say
3
+ def say( statement )
4
+ format = ::Commander::Runner.instance.active_command.option_struct.format rescue nil
5
+ orig_say( statement.respond_to?( :"to_#{format}" ) ? statement.send( :"to_#{format}" ) : statement )
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Aws
2
+ module Cli
3
+ VERSION = "0.0.1.pre4"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aws-cli
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: 6
5
+ version: 0.0.1.pre4
6
+ platform: ruby
7
+ authors:
8
+ - Rick Fletcher
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-25 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: aws
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 2.5.3
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: baseballdb-commander
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: highline
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: json_pure
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :runtime
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: terminal-table
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ type: :runtime
70
+ version_requirements: *id005
71
+ description: This gem contains a command-line "aws" script, which provides an interface to certain Amazon web services.
72
+ email:
73
+ - fletch@pobox.com
74
+ executables:
75
+ - aws
76
+ extensions: []
77
+
78
+ extra_rdoc_files: []
79
+
80
+ files:
81
+ - .gitignore
82
+ - Gemfile
83
+ - README
84
+ - Rakefile
85
+ - aws-cli.gemspec
86
+ - bin/aws
87
+ - lib/aws/cli.rb
88
+ - lib/aws/cli/app.rb
89
+ - lib/aws/cli/commands/ec2.rb
90
+ - lib/aws/cli/ext/core.rb
91
+ - lib/aws/cli/ext/highline.rb
92
+ - lib/aws/cli/version.rb
93
+ has_rdoc: true
94
+ homepage: http://github.com/baseballdb/aws-cli
95
+ licenses: []
96
+
97
+ post_install_message:
98
+ rdoc_options: []
99
+
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: "0"
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">"
112
+ - !ruby/object:Gem::Version
113
+ version: 1.3.1
114
+ requirements: []
115
+
116
+ rubyforge_project:
117
+ rubygems_version: 1.6.2
118
+ signing_key:
119
+ specification_version: 3
120
+ summary: A command-line interface to AWS.
121
+ test_files: []
122
+