fucking_shell_scripts 1.0 → 1.1

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: c05b1d90cd1b92a78231e67b153532b29b54024a
4
- data.tar.gz: c8706137b7ac4f46d8f8498ff07db9d06db9b23b
3
+ metadata.gz: cfaa228c38443797804d539ab63ad3a197e7ebce
4
+ data.tar.gz: ea89afabcdd4f99e2bbd6a8044eae1ac2f4de1f1
5
5
  SHA512:
6
- metadata.gz: adf82e3996b4c1fdbebfe60218c6566eb79057f7bc479524c5e11d3c7664c452b943b4aa0b6ae75e96b18fc463d718482d5356953928910dbe017c2236f655e5
7
- data.tar.gz: fb5aed54b314a49cebd5f0574b851525ab62a9adf7d32fdadcb2e748194d75426540d9863f9429ff64da26256604e5c1dd0f02b26796b0dd797904306d422ebc
6
+ metadata.gz: 06191dd2a421a302608dab1ad2e8cd307cf8145d1a2c14cba9caf678dde92822137f0e3a2bfb27b04f9392f9d423fdbbbbbb24071c9123ad5cda9515c3a8da33
7
+ data.tar.gz: 354e24319fb9afe6bee357c39b52f8749acb8433c4a4e2874ec9f82789c985eba03531b5b50f16ec896380d03c4c97309ce4bf2f73ebab8c4921d1533d62612d
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .rspec-local
data/README.md CHANGED
@@ -108,8 +108,8 @@ availability_zone: us-east-1d
108
108
  key_name: global-key
109
109
  cloud:
110
110
  provider: AWS
111
- aws_access_key_id: <=% ENV[AWS_ACCESS_KEY] %>
112
- aws_secret_access_key: <%= ENV[AWS_SECRET_ACCESS_KEY] %>
111
+ aws_access_key_id: <%= ENV["AWS_ACCESS_KEY"] %>
112
+ aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
113
113
  region: us-east-1
114
114
 
115
115
  ```
@@ -15,33 +15,38 @@ module FuckingShellScripts
15
15
  end
16
16
 
17
17
  def build
18
- @server = connection.servers.create(
19
- image_id: options.fetch(:image),
20
- flavor_id: options.fetch(:size),
21
- key_name: options.fetch(:key_name),
22
- tags: { "Name" => name },
23
- groups: options.fetch(:security_groups),
18
+ create_server_options = {
19
+ image_id: options.fetch(:image),
20
+ flavor_id: options.fetch(:size),
21
+ key_name: options.fetch(:key_name),
22
+ tags: { "Name" => name },
23
+ groups: options.fetch(:security_groups),
24
24
  private_key_path: options.fetch(:private_key_path)
25
- )
26
- @server.username = options.fetch(:username) if options.fetch(:username)
27
- print "Creating #{options.fetch(:size)} from #{options.fetch(:image)}"
25
+ }
26
+
27
+ create_server_options.merge!({subnet_id: options[:subnet]}) if options.has_key?(:subnet)
28
+ create_server_options.merge!({block_device_mapping: options[:block_device_mapping]}) if options.has_key?(:block_device_mapping)
29
+
30
+ @server = connection.servers.create(create_server_options)
31
+ @server.username = options.fetch(:username) if options[:username]
32
+ $stdout.print "Creating #{options.fetch(:size)} from #{options.fetch(:image)}"
28
33
 
29
34
  server.wait_for do
30
- print "."
35
+ $stdout.print "."
31
36
  ready?
32
37
  end
33
38
 
34
- puts "ready!"
35
- puts ""
39
+ $stdout.puts "ready!"
40
+ $stdout.puts ""
36
41
 
37
- print "Waiting for ssh access"
42
+ $stdout.print "Waiting for ssh access"
38
43
 
39
44
  server.wait_for do
40
- print "."
45
+ $stdout.print "."
41
46
  sshable?
42
47
  end
43
48
 
44
- puts "#{server.dns_name} ready!"
49
+ $stdout.puts "#{server.dns_name} ready!"
45
50
  end
46
51
 
47
52
  def configure
@@ -60,6 +65,7 @@ module FuckingShellScripts
60
65
  raise FuckingShellScripts::Server::MissingInstanceID , "Please specify the instance ID using the --instance-id option." if instance_id.nil?
61
66
  @server = connection.servers.get(instance_id)
62
67
  @server.private_key_path = options.fetch(:private_key_path)
68
+ @server.username = options.fetch(:username) if options[:username]
63
69
  @server
64
70
  end
65
71
 
@@ -1,3 +1,3 @@
1
1
  module FuckingShellScripts
2
- VERSION = "1.0"
2
+ VERSION = "1.1"
3
3
  end
@@ -0,0 +1,87 @@
1
+ require 'spec_helper'
2
+ require 'fog/aws/models/compute/server'
3
+ require 'fog/aws/models/compute/servers'
4
+
5
+ module FuckingShellScripts
6
+ describe Server do
7
+ describe '#build' do
8
+
9
+ let(:image) { 'some image' }
10
+ let(:size) { 'some size' }
11
+ let(:name) { 'some name' }
12
+ let(:key_name) { 'some key_name' }
13
+ let(:security_groups) { 'some security_groups' }
14
+ let(:private_key_path) { 'some private_key_path' }
15
+ let(:connection) { double(Fog::Compute) }
16
+ let!(:time) { Time.now }
17
+
18
+ let(:options) do
19
+ {
20
+ image: image,
21
+ size: size,
22
+ name: name,
23
+ key_name: key_name,
24
+ security_groups: security_groups,
25
+ private_key_path: private_key_path
26
+ }
27
+ end
28
+
29
+ let(:expected_options) do
30
+ {
31
+ image_id: image,
32
+ flavor_id: size,
33
+ key_name: key_name,
34
+ tags: { "Name" => "#{name.downcase.sub(/ /, '-')}-#{time.strftime("%y-%m-%d-%H-%M")}" },
35
+ groups: security_groups,
36
+ private_key_path: private_key_path
37
+ }
38
+ end
39
+
40
+ subject { Server.new(connection, options).build }
41
+
42
+ let(:servers) { double(Fog::Compute::AWS::Servers) }
43
+ let(:server) { double(Fog::Compute::AWS::Server, wait_for: nil, dns_name: nil) }
44
+
45
+ before(:each) do
46
+ allow(connection).to receive(:servers).and_return(servers)
47
+ allow(Time).to receive(:now).and_return(time)
48
+ allow($stdout).to receive(:puts)
49
+ allow($stdout).to receive(:print)
50
+ end
51
+
52
+ it 'creates a server with the passed in options' do
53
+ expect(servers).to receive(:create).with(expected_options).and_return(server)
54
+
55
+ subject
56
+ end
57
+
58
+ context 'when options include subnet' do
59
+ it 'creates a server with the passed in options including the subnet' do
60
+ options.merge!({subnet: 'some subnet'})
61
+ expect(servers).to receive(:create).with(hash_including({subnet_id: 'some subnet'})).and_return(server)
62
+
63
+ Server.new(connection, options).build
64
+ end
65
+ end
66
+
67
+ context 'when options include block_device_mapping' do
68
+ it 'creates a server with the passed in options including the block_device_mapping' do
69
+ block_device_mapping = {
70
+ block_device_mapping: [
71
+ {
72
+ 'DeviceName' => '/dev/sda1',
73
+ 'Ebs.VolumeSize' => '20',
74
+ 'Ebs.VolumeType' => 'gp2'
75
+ }
76
+ ]
77
+ }
78
+ options.merge!(block_device_mapping)
79
+ expect(servers).to receive(:create).with(hash_including(block_device_mapping)).and_return(server)
80
+
81
+ Server.new(connection, options).build
82
+ end
83
+ end
84
+
85
+ end
86
+ end
87
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fucking_shell_scripts
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: '1.1'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Hilkert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-13 00:00:00.000000000 Z
11
+ date: 2014-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -109,6 +109,7 @@ files:
109
109
  - spec/core_ext/hash_spec.rb
110
110
  - spec/fucking_shell_scripts/cli_spec.rb
111
111
  - spec/fucking_shell_scripts/connection_spec.rb
112
+ - spec/fucking_shell_scripts/server_spec.rb
112
113
  - spec/spec_helper.rb
113
114
  - spec/support/servers/test-server.yml
114
115
  homepage: https://github.com/brandonhilkert/fucking_shell_scripts
@@ -140,5 +141,6 @@ test_files:
140
141
  - spec/core_ext/hash_spec.rb
141
142
  - spec/fucking_shell_scripts/cli_spec.rb
142
143
  - spec/fucking_shell_scripts/connection_spec.rb
144
+ - spec/fucking_shell_scripts/server_spec.rb
143
145
  - spec/spec_helper.rb
144
146
  - spec/support/servers/test-server.yml