aws-cli 0.0.1.pre4

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