ec2ssh 2.0.8 → 3.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,9 +1,11 @@
1
1
  require 'bundler/setup'
2
2
  Bundler.require
3
3
 
4
+ require 'fakefs/spec_helpers'
4
5
  require 'webmock/rspec'
5
6
  require 'pathname'
6
7
  require 'stringio'
8
+ require 'fileutils'
7
9
 
8
10
  RSpec.configure do |config|
9
11
  def capture(stream)
@@ -19,19 +21,19 @@ RSpec.configure do |config|
19
21
  result
20
22
  end
21
23
 
22
- def base_dir
23
- Pathname('../..').expand_path(__FILE__)
24
+ def silence_stdout(&block)
25
+ capture(:stdout, &block)
24
26
  end
25
27
 
26
28
  def tmp_dir
27
- base_dir.join('tmp')
29
+ @tmp_dir ||= begin
30
+ Pathname('/fakefs/ec2ssh').tap do |path|
31
+ FileUtils.mkdir_p path
32
+ end
33
+ end
28
34
  end
29
35
 
30
36
  alias :silence :capture
31
37
 
32
- config.before(:all) do
33
- unless tmp_dir.directory?
34
- tmp_dir.mkdir
35
- end
36
- end
38
+ config.include FakeFS::SpecHelpers
37
39
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ec2ssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.8
4
+ version: 3.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Issei Naruta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-02 00:00:00.000000000 Z
11
+ date: 2014-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -68,15 +68,31 @@ files:
68
68
  - Guardfile
69
69
  - MIT-LICENSE
70
70
  - README.md
71
+ - Rakefile
71
72
  - bin/ec2ssh
72
73
  - ec2ssh.gemspec
74
+ - example/example.ec2ssh
73
75
  - lib/ec2ssh.rb
76
+ - lib/ec2ssh/builder.rb
74
77
  - lib/ec2ssh/cli.rb
75
- - lib/ec2ssh/dotfile.rb
76
- - lib/ec2ssh/hosts.rb
78
+ - lib/ec2ssh/command.rb
79
+ - lib/ec2ssh/command/init.rb
80
+ - lib/ec2ssh/command/migrate.rb
81
+ - lib/ec2ssh/command/remove.rb
82
+ - lib/ec2ssh/command/update.rb
83
+ - lib/ec2ssh/dsl.rb
84
+ - lib/ec2ssh/ec2_instances.rb
85
+ - lib/ec2ssh/exceptions.rb
86
+ - lib/ec2ssh/migrator.rb
77
87
  - lib/ec2ssh/ssh_config.rb
78
88
  - lib/ec2ssh/version.rb
79
- - spec/lib/ec2ssh/cli_spec.rb
89
+ - spec/lib/ec2ssh/builder_spec.rb
90
+ - spec/lib/ec2ssh/command/init_spec.rb
91
+ - spec/lib/ec2ssh/command/migrate_spec.rb
92
+ - spec/lib/ec2ssh/command/remove_spec.rb
93
+ - spec/lib/ec2ssh/command/update_spec.rb
94
+ - spec/lib/ec2ssh/dsl_spec.rb
95
+ - spec/lib/ec2ssh/migrator_spec.rb
80
96
  - spec/lib/ec2ssh/ssh_config_spec.rb
81
97
  - spec/spec_helper.rb
82
98
  homepage: http://github.com/mirakui/ec2ssh
@@ -93,9 +109,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
109
  version: '0'
94
110
  required_rubygems_version: !ruby/object:Gem::Requirement
95
111
  requirements:
96
- - - ">="
112
+ - - ">"
97
113
  - !ruby/object:Gem::Version
98
- version: '0'
114
+ version: 1.3.1
99
115
  requirements: []
100
116
  rubyforge_project: ec2ssh
101
117
  rubygems_version: 2.2.2
@@ -103,6 +119,12 @@ signing_key:
103
119
  specification_version: 4
104
120
  summary: A ssh_config manager for AWS EC2
105
121
  test_files:
106
- - spec/lib/ec2ssh/cli_spec.rb
122
+ - spec/lib/ec2ssh/builder_spec.rb
123
+ - spec/lib/ec2ssh/command/init_spec.rb
124
+ - spec/lib/ec2ssh/command/migrate_spec.rb
125
+ - spec/lib/ec2ssh/command/remove_spec.rb
126
+ - spec/lib/ec2ssh/command/update_spec.rb
127
+ - spec/lib/ec2ssh/dsl_spec.rb
128
+ - spec/lib/ec2ssh/migrator_spec.rb
107
129
  - spec/lib/ec2ssh/ssh_config_spec.rb
108
130
  - spec/spec_helper.rb
@@ -1,49 +0,0 @@
1
- require 'yaml'
2
-
3
- module Ec2ssh
4
- class AwsKeyNotFound < StandardError; end
5
- class Dotfile
6
- def initialize(config={})
7
- @config = {
8
- 'path' => "#{ENV['HOME']}/.ssh/config",
9
- 'aws_keys' => {
10
- 'default' => {
11
- 'access_key_id' => ENV['AMAZON_ACCESS_KEY_ID'],
12
- 'secret_access_key' => ENV['AMAZON_SECRET_ACCESS_KEY']
13
- }
14
- },
15
- 'regions' => %w(ap-northeast-1),
16
- }.merge(config)
17
- end
18
-
19
- def self.load(path)
20
- new YAML.load(open(path).read)
21
- end
22
-
23
- def save(path)
24
- open(path, 'w') {|f| f.write @config.to_yaml }
25
- end
26
-
27
- def self.update_or_create(path, config={})
28
- dotfile = if File.exist?(path)
29
- Dotfile.load(path)
30
- else
31
- new
32
- end
33
- dotfile.update(config)
34
- dotfile.save(path)
35
- end
36
-
37
- def [](key)
38
- @config[key]
39
- end
40
-
41
- def aws_key(keyname)
42
- self['aws_keys'][keyname] or raise AwsKeyNotFound
43
- end
44
-
45
- def update(config)
46
- @config = @config.merge config
47
- end
48
- end
49
- end
@@ -1,42 +0,0 @@
1
- require 'aws-sdk'
2
- require 'ec2ssh/dotfile'
3
-
4
- module Ec2ssh
5
- class AwsEnvNotDefined < StandardError; end
6
- class Hosts
7
- def initialize(dotfile, keyname)
8
- @dotfile = dotfile
9
- @ec2 = Hash.new do |h,region|
10
- key = dotfile.aws_key(keyname)
11
- raise AwsEnvNotDefined if key['access_key_id'].nil? || key['secret_access_key'].nil?
12
- h[region] = AWS::EC2.new(
13
- :region => region,
14
- :access_key_id => key['access_key_id'],
15
- :secret_access_key => key['secret_access_key']
16
- )
17
- end
18
- end
19
-
20
- def all
21
- @dotfile['regions'].map {|region|
22
- process_region region
23
- }.flatten
24
- end
25
-
26
- private
27
- def process_region(region)
28
- instances(region).map {|instance|
29
- name_tag = instance[:tag_set].find {|tag| tag[:key] == 'Name' }
30
- next nil if name_tag.nil? || name_tag[:value].nil?
31
- name = name_tag[:value]
32
- dns_name = instance[:dns_name] or next nil
33
- {:host => "#{name}.#{region}", :dns_name => dns_name}
34
- }.compact.sort {|a,b| a[:host] <=> b[:host] }
35
- end
36
-
37
- def instances(region)
38
- response = @ec2[region].instances.tagged('Name').filtered_request(:describe_instances)
39
- response[:instance_index].values
40
- end
41
- end
42
- end
@@ -1,171 +0,0 @@
1
- require 'spec_helper'
2
- require 'ec2ssh/cli'
3
- require 'ec2ssh/dotfile'
4
-
5
- describe Ec2ssh::CLI do
6
- before(:all) do
7
- Ec2ssh::Hosts.tap do |cls|
8
- cls.class_eval do
9
- def all
10
- [
11
- {:host => 'db-01.ap-northeast-1', :dns_name => 'ec2-1-1-1-1.ap-northeast-1.ec2.amazonaws.com'},
12
- {:host => 'db-02.ap-northeast-1', :dns_name => 'ec2-1-1-1-2.ap-northeast-1.ec2.amazonaws.com'},
13
- ]
14
- end
15
- end
16
- end
17
- end
18
- before do
19
- File.delete(dotfile_path) if File.exist?(dotfile_path)
20
- end
21
- let(:cli) { described_class }
22
- let(:ssh_config_path) do
23
- path = tmp_dir.join('ssh_config')
24
- path.open('w') {|f| f.write <<-END }
25
- Host foo.bar.com
26
- HostName 1.2.3.4
27
- END
28
- path
29
- end
30
- let(:ssh_config_string) { ssh_config_path.read }
31
- let(:dotfile_path) do
32
- tmp_dir.join('dot.ec2ssh')
33
- end
34
-
35
- around do |example|
36
- tz = ENV['TZ']
37
- ENV['TZ'] = 'UTC'
38
- Timecop.freeze(Time.local(2013,1,1,0,0,0)) { example.call }
39
- ENV['TZ'] = tz
40
- end
41
-
42
- subject { ssh_config_string }
43
-
44
- describe '#init' do
45
- before do
46
- silence(:stdout) { cli.start %W[init --path #{ssh_config_path} --dotfile #{dotfile_path}] }
47
- end
48
-
49
- it { should eq(<<-END) }
50
- Host foo.bar.com
51
- HostName 1.2.3.4
52
- ### EC2SSH BEGIN ###
53
- # Generated by ec2ssh http://github.com/mirakui/ec2ssh
54
- # DO NOT edit this block!
55
- # Updated 2013-01-01T00:00:00+00:00
56
-
57
- ### EC2SSH END ###
58
- END
59
- end
60
-
61
- describe '#update' do
62
- before do
63
- silence(:stdout) do
64
- cli.start %W[init --path #{ssh_config_path} --dotfile #{dotfile_path}]
65
- cli.start %W[update --path #{ssh_config_path} --dotfile #{dotfile_path}]
66
- end
67
- end
68
-
69
- it { should eq(<<-END) }
70
- Host foo.bar.com
71
- HostName 1.2.3.4
72
- ### EC2SSH BEGIN ###
73
- # Generated by ec2ssh http://github.com/mirakui/ec2ssh
74
- # DO NOT edit this block!
75
- # Updated 2013-01-01T00:00:00+00:00
76
- # section: default
77
- Host db-01.ap-northeast-1
78
- HostName ec2-1-1-1-1.ap-northeast-1.ec2.amazonaws.com
79
- Host db-02.ap-northeast-1
80
- HostName ec2-1-1-1-2.ap-northeast-1.ec2.amazonaws.com
81
-
82
-
83
- ### EC2SSH END ###
84
- END
85
- end
86
-
87
- describe '#update with aws-keys option' do
88
- before do
89
- silence(:stdout) do
90
- cli.start %W[init --path #{ssh_config_path} --dotfile #{dotfile_path}]
91
- end
92
- dotfile = Ec2ssh::Dotfile.load(dotfile_path)
93
- dotfile['aws_keys']['key1'] = {
94
- 'access_key_id' => 'ACCESS_KEY_ID',
95
- 'secret_access_key' => 'SECRET_ACCESS_KEY'
96
- }
97
- @output = capture(:stdout) do
98
- cli.start %W[update --path #{ssh_config_path} --dotfile #{dotfile_path} --aws-key #{keyname}]
99
- end
100
- end
101
-
102
- subject { @output }
103
-
104
- context do
105
- let(:keyname) { 'default' }
106
- it { should =~ /Updated 2 hosts/ }
107
- it { should =~ /# section: default/ }
108
- end
109
-
110
- context do
111
- let(:keyname) { 'key1' }
112
- it { should =~ /Updated 2 hosts/ }
113
- it { should =~ /# section: key1/ }
114
- end
115
-
116
- context do
117
- let(:keyname) { 'key2' }
118
- it { should_not =~ /^Updated 2 hosts/ }
119
- end
120
- end
121
-
122
- describe '#update with aws-keys option in multiple times' do
123
- before do
124
- silence(:stdout) do
125
- cli.start %W[init --path #{ssh_config_path} --dotfile #{dotfile_path}]
126
- end
127
- dotfile = Ec2ssh::Dotfile.load(dotfile_path)
128
- dotfile['aws_keys']['key1'] = {
129
- 'access_key_id' => 'ACCESS_KEY_ID',
130
- 'secret_access_key' => 'SECRET_ACCESS_KEY'
131
- }
132
- dotfile['aws_keys']['key2'] = {
133
- 'access_key_id' => 'ACCESS_KEY_ID',
134
- 'secret_access_key' => 'SECRET_ACCESS_KEY'
135
- }
136
- @output = capture(:stdout) do
137
- cli.start %W[update --path #{ssh_config_path} --dotfile #{dotfile_path} --aws-key key1]
138
- cli.start %W[update --path #{ssh_config_path} --dotfile #{dotfile_path} --aws-key #{keyname}]
139
- end
140
- end
141
-
142
- subject { @output }
143
-
144
- context 'when updated by the same key' do
145
- let(:keyname) { 'key1' }
146
- it { subject.should =~ /# section: key1/ }
147
- it { subject.should_not =~ /# section: key2/ }
148
- end
149
-
150
- context 'when updated by different key' do
151
- let(:keyname) { 'key2' }
152
- it { subject.should =~ /# section: key1/ }
153
- it { subject.should =~ /# section: key2/ }
154
- end
155
- end
156
-
157
- describe '#remove' do
158
- before do
159
- silence(:stdout) do
160
- cli.start %W[init --path #{ssh_config_path} --dotfile #{dotfile_path}]
161
- cli.start %W[update --path #{ssh_config_path} --dotfile #{dotfile_path}]
162
- cli.start %W[remove --path #{ssh_config_path} --dotfile #{dotfile_path}]
163
- end
164
- end
165
-
166
- it { should eq(<<-END) }
167
- Host foo.bar.com
168
- HostName 1.2.3.4
169
- END
170
- end
171
- end