soror 0.0.3 → 0.0.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 99ce1c99d1b38245fc74bfef5dc527df19106ab0
4
- data.tar.gz: 06a1da98ba2918a3be328f7bac98860e06f31e37
3
+ metadata.gz: 42d441c4bd3902be3e288411d4cc568e9e8a1988
4
+ data.tar.gz: 31f9696ef46faf3d88dc5dcd3e8a73300c62ee25
5
5
  SHA512:
6
- metadata.gz: 1a79c6bbcc5956a6bcc0da8164eb73ccf1a8afa3412f698c7177dbd5e94f790c591935baa878ae70ef9f48ed9498655ef7196d6bf8dcac61564b495ca3626a51
7
- data.tar.gz: 9172e10f58adcb37f6e8a5ac0a1670a67393ece4f444f5785bf277fd052e421f32f31e8378a0a3eb62b90840a06e707fd990d00bde01a6e117ee8c060b3267fb
6
+ metadata.gz: eeee8b20d3f49371f18cbc1b6231181138b9d6b0a0a1cd3fdeed4ee44a24c48e669d2a734431c1c865b74ce400049285250ef01a2d9e14ab13b949fc9285371c
7
+ data.tar.gz: 323ee560c02571ffdc90c8cae872fdcdf8c0e1f6f99e02ad8121ac9b63300e36151790aedf0ffd2828f5f2c3ccb889872571412dad04a65a7fd3a5437e6d2157
data/README.md CHANGED
@@ -33,6 +33,34 @@ Soror::EC2::Instance.search_by(name: 'soror') #=> [<AWS::EC2::Instance>, ...]
33
33
  Soror.config(access_key_id: 'xxxxx', secret_access_key: 'xxxxx', region: 'ap-northeast-1')
34
34
  ```
35
35
 
36
+ Or put the configuration file on your home directory as:
37
+
38
+ ```sh
39
+ cat <<EOS >$HOME/.soror
40
+ access_key_id: 'xxxxx'
41
+ secret_access_key: 'xxxxx'
42
+ region: 'ap-northeast-1'
43
+ EOS
44
+ ```
45
+
46
+ ### Memoization
47
+
48
+ ```ruby
49
+ Soror.start_memoizing
50
+ ```
51
+
52
+ ## CLI
53
+
54
+ ```
55
+ Usage: soror [options]
56
+ -t, --tag='KEY=VALUE'
57
+ -a, --attributes=ATTR,ATTR,...
58
+ --[no-]header
59
+ --access-key=KEY
60
+ --secret-key=KEY
61
+ --region=REGION
62
+ ```
63
+
36
64
  ## Required permissions
37
65
 
38
66
  ```js
@@ -43,7 +71,7 @@ Soror.config(access_key_id: 'xxxxx', secret_access_key: 'xxxxx', region: 'ap-nor
43
71
  "Action": "ec2:Describe*",
44
72
  "Resource": "*"
45
73
  }
46
- }
74
+ ]
47
75
  }
48
76
  ```
49
77
 
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'soror'
5
+
6
+ options = { header: true, tag: {}, config: {} }
7
+
8
+ OptionParser.new do |opt|
9
+ opt.on('-t', '--tag=\'KEY=VALUE\'', /\A[^=]+=[^=]+\z/) do |v|
10
+ key, val = v.split('=')
11
+ options[:tag][key] = val
12
+ end
13
+ opt.on('-a', '--attributes=ATTR,ATTR,...', Array) { |v| options[:attributes] = v }
14
+ opt.on('--[no-]header') { |v| options[:header] = v }
15
+ opt.on('--access-key=KEY') { |v| options[:config][:access_key_id] = v }
16
+ opt.on('--secret-key=KEY') { |v| options[:config][:secret_access_key] = v }
17
+ opt.on('--region=REGION') { |v| options[:config][:region] = v }
18
+ opt.parse!(ARGV)
19
+ end
20
+ fail OptionParser::MissingArgument, '--tag' if options[:tag].empty?
21
+ fail OptionParser::MissingArgument, '--attributes' if options[:attributes].nil?
22
+ fail OptionParser::InvalidArgument, '--attributes' if options[:attributes].empty?
23
+
24
+ Soror.config(options[:config])
25
+ Soror.start_memoizing
26
+
27
+ instances = Soror::EC2::Instance.search_by(options[:tag])
28
+ exit! if instances.empty?
29
+
30
+ result = instances.map{ |i| options[:attributes].map{ |a| i.send(a.intern) || '' } }
31
+ result.unshift(options[:attributes]) if options[:header]
32
+
33
+ width = result.transpose.map{ |row| row.map(&:length).max }
34
+ result.each{ |line| puts line.zip(width).map{ |a, w| a.ljust(w) }.join(' ') }
@@ -1,9 +1,16 @@
1
1
  require 'aws-sdk-v1'
2
+ require 'forwardable'
2
3
  require 'soror/ec2'
3
4
  require 'soror/version'
5
+ require 'yaml'
4
6
 
5
7
  module Soror
6
- def self.config(options)
7
- AWS.config(options)
8
+ class << self
9
+ extend Forwardable
10
+ def_delegators AWS, :config, :start_memoizing, :stop_memoizing
8
11
  end
9
12
  end
13
+
14
+ File.expand_path('~/.soror').tap do |path|
15
+ File.exists?(path) && Soror.config(YAML.load_file(path))
16
+ end
@@ -4,6 +4,7 @@ module Soror
4
4
  extend Soror::EC2
5
5
 
6
6
  def self.search_by(tags)
7
+ warn %q{[DEPRECATION] `Soror::EC2::Instance.search_by` won't be memoized. If you want to memoize, use `Soror.start_memoizing`.}
7
8
  AWS.memoize do
8
9
  ec2.instances.
9
10
  filter('instance-state-name', 'running').
@@ -1,3 +1,3 @@
1
1
  module Soror
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soror
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - kirikiriyamama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-29 00:00:00.000000000 Z
11
+ date: 2015-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -55,7 +55,8 @@ dependencies:
55
55
  description: Soror is EC2 instances seacher
56
56
  email:
57
57
  - kirikiriyamama@icloud.com
58
- executables: []
58
+ executables:
59
+ - soror
59
60
  extensions: []
60
61
  extra_rdoc_files: []
61
62
  files:
@@ -64,6 +65,7 @@ files:
64
65
  - LICENSE.txt
65
66
  - README.md
66
67
  - Rakefile
68
+ - bin/soror
67
69
  - lib/soror.rb
68
70
  - lib/soror/ec2.rb
69
71
  - lib/soror/ec2/instance.rb