ec2-host 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 71fdb977a6c700081fd8af2f3274b70778854458
4
- data.tar.gz: 380fbcf200f1fb57fca95d1b8a8a1f5f8a431873
3
+ metadata.gz: 111eba0b58ae0c88e7c0c8dc2fa342f8f397d594
4
+ data.tar.gz: cfddfadf8447f1cc751ef005c7173a3b64480cc1
5
5
  SHA512:
6
- metadata.gz: b9deed0d8a1921c188193536c519f3be9f918767c174e4cf2116517a5ae1bc8403d33d5f82d434e0b2d7d62236f8f4a2686be45fab71ba40823289d15e2b991c
7
- data.tar.gz: 901615c730d1a69786586c864a55a53f1e00d6da90c0f8e924cd02f4fedabc3deaf8a4e0e6410f9a9e920b0e5ba5b8f4254772701ec1ce6fd763329e325fecc9
6
+ metadata.gz: 80e09e433370bfd266977ce286de1969dff6137b152745e510937903f0a481b58ef7af01a5d70d97221d0f3912e04d17181cff94e9e18c3ea78a5659f45c806d
7
+ data.tar.gz: 54d9dca3656d00d3f32d35210bc98e7c9ec40ef1e91985edcb20a4d6ded4280515ad2f32f858cb2ab05464da1cc004e7c8e69f8349fec0f03b28db7724661317
@@ -1,3 +1,11 @@
1
+ # 0.2.0 (2015/08/19)
2
+
3
+ Changes:
4
+
5
+ * Use optparse instead of thor
6
+ * Format to specify array option arguments are changed from --option a b c to --option a,b,c
7
+ * --long_option (underscore) is no longer available, only --long-option (dash) is available
8
+
1
9
  # 0.1.1 (2015/08/11)
2
10
 
3
11
  Changes:
data/README.md CHANGED
@@ -44,38 +44,104 @@ See [sampel.conf](./sample.conf)
44
44
 
45
45
  ## CLI Usage
46
46
 
47
+ ### CLI Example
48
+
49
+ ```
50
+ $ ec2-host -j
51
+ {"hostname":"test","roles":["admin:ami","test"],"region":"ap-northeast-1","instance_id":"i-85900780","private_ip_address":"172.31.23.50","public_ip_address":null,"launch_time":"2013-09-16 06:14:20 UTC","state":"stopped","monitoring":"disabled"}
52
+ {"hostname":"ip-172-31-6-194","roles":["isucon4:qual"],"region":"ap-northeast-1","instance_id":"i-f88cc8e1","private_ip_address":"172.31.6.194","public_ip_address":null,"launch_time":"2014-10-20 15:57:23 UTC","state":"stopped","monitoring":"disabled"}
53
+ ```
54
+
55
+ ```
56
+ $ ec2-host
57
+ test
58
+ ip-172-31-6-194 # if Name tag is not available
59
+ ```
60
+
47
61
  ```
48
62
  $ ec2-host --role1 admin
49
- host1
50
- ip-XXX-XXX-XXX-XXX # if Name tag is not assigned
63
+ test
64
+ ```
65
+
66
+ ```
67
+ $ ec2-host --role admin:ami
68
+ test
51
69
  ```
52
70
 
53
- See `ec2-host help get-hosts` for details:
71
+ ```
72
+ $ ec2-host --pretty-json
73
+ [
74
+ {
75
+ "hostname": "test",
76
+ "roles": [
77
+ "admin:ami",
78
+ "test"
79
+ ],
80
+ "region": "ap-northeast-1",
81
+ "instance_id": "i-85900780",
82
+ "private_ip_address": "172.31.23.50",
83
+ "public_ip_address": null,
84
+ "launch_time": "2013-09-16 06:14:20 UTC",
85
+ "state": "stopped",
86
+ "monitoring": "disabled"
87
+ },
88
+ {
89
+ "hostname": "ip-172-31-6-194",
90
+ "roles": [
91
+ "isucon4:qual"
92
+ ],
93
+ "region": "ap-northeast-1",
94
+ "instance_id": "i-f88cc8e1",
95
+ "private_ip_address": "172.31.6.194",
96
+ "public_ip_address": null,
97
+ "launch_time": "2014-10-20 15:57:23 UTC",
98
+ "state": "stopped",
99
+ "monitoring": "disabled"
100
+ }
101
+ ]
102
+ ```
103
+
104
+ ### CLI Help
54
105
 
55
106
  ```
56
- Usage:
57
- ec2-host get-hosts
58
-
59
- Options:
60
- -h, [--hostname=one two three] # name or private_dns_name
61
- -r, --usage, -u, [--role=one two three] # role
62
- --r1, --usage1, --u1, [--role1=one two three] # role1, the 1st part of role delimited by :
63
- --r2, --usage2, --u2, [--role2=one two three] # role2, the 2nd part of role delimited by :
64
- --r3, --usage3, --u3, [--role3=one two three] # role3, the 3rd part of role delimited by :
65
- [--instance-id=one two three] # instance_id
66
- [--state=one two three] # state
67
- [--monitoring=one two three] # monitoring
68
- --ip, [--private-ip], [--no-private-ip] # show private ip address instead of hostname
69
- [--public-ip], [--no-public-ip] # show public ip address instead of hostname
70
- -i, [--info], [--no-info] # show host info, not only hostname
71
- -j, [--json], [--no-json] # show detailed host info in json
72
- [--debug], [--no-debug] # debug mode
73
-
74
- Search EC2 hosts
107
+ $ bin/ec2-host --help
108
+ Usage: ec2-host [options]
109
+ --hostname one,two,three name or private_dns_name
110
+ -r, --role one,two,three role
111
+ --r1, --role1 one,two,three role1, the 1st part of role delimited by :
112
+ --r2, --role2 one,two,three role2, the 2st part of role delimited by :
113
+ --r3, --role3 one,two,three role3, the 3st part of role delimited by :
114
+ --instance-id one,two,three instance_id
115
+ --state one,two,three state
116
+ --monitoring one,two,three monitoring
117
+ --tag one,two,three tag
118
+ --service one,two,three service
119
+ --status one,two,three status
120
+ --private-ip, --ip show private ip address instead of hostname
121
+ --public-ip show public ip address instead of hostname
122
+ -i, --info show host info
123
+ -j, --line-delimited-json show host info in line delimited json
124
+ --json show host info in json
125
+ --pretty-json show host info in pretty json
126
+ --debug debug mode
127
+ -h, --help show help
75
128
  ```
76
129
 
77
130
  ## Library Usage
78
131
 
132
+ ### Library Example
133
+
134
+ ```ruby
135
+ require 'ec2-host'
136
+
137
+ hosts = EC2::Host.new(role: 'admin:ami')
138
+ hosts.each do |host|
139
+ puts host
140
+ end
141
+ ```
142
+
143
+ ### Library Reference
144
+
79
145
  See http://sonots.github.io/ec2-host/doc/frames.html.
80
146
 
81
147
  ## ChangeLog
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative '../lib/ec2/host/cli'
4
- EC2::Host::CLI.start(ARGV)
4
+ EC2::Host::CLI.new(ARGV).run
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "ec2-host"
3
- gem.version = '0.1.1'
3
+ gem.version = '0.2.0'
4
4
  gem.author = ['Naotoshi Seo']
5
5
  gem.email = ['sonots@gmail.com']
6
6
  gem.homepage = 'https://github.com/sonots/ec2-host'
@@ -15,7 +15,6 @@ Gem::Specification.new do |gem|
15
15
 
16
16
  gem.add_runtime_dependency 'aws-sdk'
17
17
  gem.add_runtime_dependency 'hashie'
18
- gem.add_runtime_dependency 'thor'
19
18
  gem.add_runtime_dependency 'dotenv'
20
19
 
21
20
  gem.add_development_dependency 'yard'
@@ -1,69 +1,96 @@
1
- require 'thor'
2
1
  require 'ec2-host'
2
+ require 'optparse'
3
3
 
4
4
  class EC2
5
5
  class Host
6
- class CLI < Thor
7
- default_command :get_hosts
6
+ class CLI
7
+ attr_reader :options
8
8
 
9
- desc 'get-hosts', 'Search EC2 hosts (default)'
10
- option :hostname,
11
- :aliases => '-h',
12
- :type => :array,
13
- :desc => "name or private_dns_name"
14
- option :role,
15
- :aliases => %w[-r --usage -u],
16
- :type => :array,
17
- :desc => "role"
18
- option :role1,
19
- :aliases => %w[--r1 --usage1 --u1], # hmm, -r1 is not suppored by thor
20
- :type => :array,
21
- :desc => "role1, the 1st part of role delimited by #{Config.role_tag_delimiter}"
22
- option :role2,
23
- :aliases => %w[--r2 --usage2 --u2],
24
- :type => :array,
25
- :desc => "role2, the 2nd part of role delimited by #{Config.role_tag_delimiter}"
26
- option :role3,
27
- :aliases => %w[--r3 --usage3 --u3],
28
- :type => :array,
29
- :desc => "role3, the 3rd part of role delimited by #{Config.role_tag_delimiter}"
30
- option :instance_id,
31
- :type => :array,
32
- :desc => "instance_id"
33
- option :state,
34
- :type => :array,
35
- :desc => "state"
36
- option :monitoring,
37
- :type => :array,
38
- :desc => "monitoring"
39
- Config.optional_options.each do |opt, tag|
40
- option opt, :type => :array, :desc => opt
9
+ def initialize(argv = ARGV)
10
+ @options = parse_options(argv)
41
11
  end
42
- option :private_ip,
43
- :aliases => %w[--ip],
44
- :type => :boolean,
45
- :desc => 'show private ip address instead of hostname'
46
- option :public_ip,
47
- :type => :boolean,
48
- :desc => 'show public ip address instead of hostname'
49
- option :info,
50
- :aliases => %w[-i],
51
- :type => :boolean,
52
- :desc => "show host info"
53
- option :line_delimited_json,
54
- :aliases => %w[-j],
55
- :type => :boolean,
56
- :desc => "show host info in line delimited json"
57
- option :json,
58
- :type => :boolean,
59
- :desc => "show host info in json"
60
- option :pretty_json,
61
- :type => :boolean,
62
- :desc => "show host info in pretty json"
63
- option :debug,
64
- :type => :boolean,
65
- :desc => "debug mode"
66
- def get_hosts
12
+
13
+ def parse_options(argv = ARGV)
14
+ op = OptionParser.new
15
+
16
+ self.class.module_eval do
17
+ define_method(:usage) do |msg = nil|
18
+ puts op.to_s
19
+ puts "error: #{msg}" if msg
20
+ exit 1
21
+ end
22
+ end
23
+
24
+ opts = {}
25
+
26
+ op.on('--hostname one,two,three', Array, "name or private_dns_name") {|v|
27
+ opts[:hostname] = v
28
+ }
29
+ op.on('-r', '--role one,two,three', Array, "role") {|v|
30
+ opts[:role] = v
31
+ }
32
+ op.on('--r1', '--role1 one,two,three', Array, "role1, the 1st part of role delimited by #{Config.role_tag_delimiter}") {|v|
33
+ opts[:role1] = v
34
+ }
35
+ op.on('--r2', '--role2 one,two,three', Array, "role2, the 2st part of role delimited by #{Config.role_tag_delimiter}") {|v|
36
+ opts[:role2] = v
37
+ }
38
+ op.on('--r3', '--role3 one,two,three', Array, "role3, the 3st part of role delimited by #{Config.role_tag_delimiter}") {|v|
39
+ opts[:role3] = v
40
+ }
41
+ op.on('--instance-id one,two,three', Array, "instance_id") {|v|
42
+ opts[:instance_id] = v
43
+ }
44
+ op.on('--state one,two,three', Array, "state") {|v|
45
+ opts[:state] = v
46
+ }
47
+ op.on('--monitoring one,two,three', Array, "monitoring") {|v|
48
+ opts[:monitoring] = v
49
+ }
50
+ Config.optional_options.each do |opt, tag|
51
+ op.on("--#{opt.to_s.gsub('_', '-')} one,two,three", Array, opt) {|v|
52
+ opts[opt.to_sym] = v
53
+ }
54
+ end
55
+ op.on('--private-ip', '--ip', "show private ip address instead of hostname") {|v|
56
+ opts[:private_ip] = v
57
+ }
58
+ op.on('--public-ip', "show public ip address instead of hostname") {|v|
59
+ opts[:public_ip] = v
60
+ }
61
+ op.on('-i', '--info', "show host info") {|v|
62
+ opts[:info] = v
63
+ }
64
+ op.on('-j', '--line-delimited-json', "show host info in line delimited json") {|v|
65
+ opts[:line_delimited_json] = v
66
+ }
67
+ op.on('--json', "show host info in json") {|v|
68
+ opts[:json] = v
69
+ }
70
+ op.on('--pretty-json', "show host info in pretty json") {|v|
71
+ opts[:pretty_json] = v
72
+ }
73
+ op.on('--debug', "debug mode") {|v|
74
+ opts[:debug] = v
75
+ }
76
+ op.on('-h', '--help', "show help") {|v|
77
+ opts[:help] = v
78
+ }
79
+
80
+ begin
81
+ args = op.parse(argv)
82
+ rescue OptionParser::InvalidOption => e
83
+ usage e.message
84
+ end
85
+
86
+ if opts[:help]
87
+ usage
88
+ end
89
+
90
+ opts
91
+ end
92
+
93
+ def run
67
94
  hosts = EC2::Host.new(condition)
68
95
  if options[:info]
69
96
  hosts.each do |host|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ec2-host
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naotoshi Seo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-12 00:00:00.000000000 Z
11
+ date: 2015-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: thor
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: dotenv
57
43
  requirement: !ruby/object:Gem::Requirement