skewer 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.idea/encodings.xml +5 -0
- data/.idea/misc.xml +8 -0
- data/.idea/modules.xml +9 -0
- data/.idea/skewer.iml +61 -0
- data/.idea/vcs.xml +7 -0
- data/.rvmrc +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +146 -0
- data/LICENSE +13 -0
- data/README.md +77 -0
- data/Rakefile +59 -0
- data/Vagrantfile +5 -0
- data/assets/Gemfile +5 -0
- data/assets/rubygems.sh +39 -0
- data/bin/skewer +101 -0
- data/features/aws.feature +45 -0
- data/features/bootstrapper.feature +14 -0
- data/features/configuration.feature +15 -0
- data/features/delete.feature +22 -0
- data/features/hooks.feature +15 -0
- data/features/interface.feature +61 -0
- data/features/provision.feature +38 -0
- data/features/rackspace.feature +34 -0
- data/features/step_definitions/cucumber_steps.rb +43 -0
- data/features/step_definitions/delete.rb +32 -0
- data/features/support/env.rb +6 -0
- data/features/support/puppetcode/manifests/classes/foobar.pp +4 -0
- data/features/support/puppetcode/manifests/classes/foobroken.pp +4 -0
- data/features/support/puppetcode/manifests/classes/role.pp +3 -0
- data/features/support/puppetcode/manifests/site.pp +2 -0
- data/features/support/puppetcode/modules/foo/manifests/bar.pp +3 -0
- data/features/support/puppetcode/modules/foo/manifests/broken.pp +8 -0
- data/features/support/puppetcode/modules/puppet/manifests/munge.pp +5 -0
- data/features/update.feature +29 -0
- data/lib/aws/node.rb +52 -0
- data/lib/aws/security_group.rb +37 -0
- data/lib/aws/service.rb +21 -0
- data/lib/bootstrapper.rb +112 -0
- data/lib/cli.rb +96 -0
- data/lib/config.rb +67 -0
- data/lib/cuke.rb +26 -0
- data/lib/ersatz/ersatz_node.rb +31 -0
- data/lib/ersatz/ssh_result.rb +15 -0
- data/lib/eucalyptus.rb +15 -0
- data/lib/hooks.rb +22 -0
- data/lib/node.erb +5 -0
- data/lib/node.rb +43 -0
- data/lib/parser.rb +92 -0
- data/lib/puppet.rb +53 -0
- data/lib/puppet_node.rb +26 -0
- data/lib/puppet_runtime_error.rb +6 -0
- data/lib/rackspace/images.rb +25 -0
- data/lib/rackspace/node.rb +60 -0
- data/lib/skewer.rb +13 -0
- data/lib/skewer/version.rb +3 -0
- data/lib/source.rb +54 -0
- data/lib/stub_node.rb +25 -0
- data/lib/util.rb +17 -0
- data/skewer.gemspec +30 -0
- data/spec/aws/node_spec.rb +70 -0
- data/spec/aws/security_group_spec.rb +20 -0
- data/spec/aws/service_spec.rb +31 -0
- data/spec/bootstrapper_spec.rb +116 -0
- data/spec/cli_spec.rb +71 -0
- data/spec/config_spec.rb +68 -0
- data/spec/cuke_spec.rb +46 -0
- data/spec/ersatz_node_spec.rb +9 -0
- data/spec/ersatz_ssh_result_spec.rb +16 -0
- data/spec/hooks_spec.rb +19 -0
- data/spec/logger_spec.rb +22 -0
- data/spec/parser_spec.rb +93 -0
- data/spec/puppet.rb +47 -0
- data/spec/puppet_node_spec.rb +31 -0
- data/spec/rackspace/images_spec.rb +37 -0
- data/spec/rackspace/node_spec.rb +30 -0
- data/spec/source_spec.rb +45 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/support/features/example.feature +9 -0
- data/spec/support/features/step_definitions/example.rb +8 -0
- data/spec/util_spec.rb +27 -0
- metadata +288 -0
data/lib/source.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'util'
|
2
|
+
|
3
|
+
module Skewer
|
4
|
+
# responsible for moving source to remote nodes
|
5
|
+
class Source
|
6
|
+
def initialize(path = nil)
|
7
|
+
@util = Util.new
|
8
|
+
raise "I can't see the path #{path}" unless File.exists?(path)
|
9
|
+
@path = path.sub(/\/$/, '')
|
10
|
+
end
|
11
|
+
|
12
|
+
def excludes
|
13
|
+
'--exclude Gemfile --exclude Gemfile.lock --exclude ' + ['.git'].join(' ')
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_destination(node)
|
17
|
+
begin
|
18
|
+
node.ssh('mkdir -p infrastructure')
|
19
|
+
rescue
|
20
|
+
location = @util.get_location(node)
|
21
|
+
raise "Couldn't SSH to #{location} with #{node.username}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def rsync_command(node)
|
26
|
+
location = @util.get_location(node)
|
27
|
+
"rsync #{self.excludes} --delete -arpze ssh #{@path}/. #{node.username}@#{location}:infrastructure/."
|
28
|
+
end
|
29
|
+
|
30
|
+
def mock_rsync(command)
|
31
|
+
Skewer.logger.debug "MOCK: #{command}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def real_rsync(node, command)
|
35
|
+
location = @util.get_location(node)
|
36
|
+
raise "Failed to rsync to #{location} with #{node.username}" unless system(command)
|
37
|
+
end
|
38
|
+
|
39
|
+
def rsync(node)
|
40
|
+
Skewer.logger.debug rsync_command(node)
|
41
|
+
location = @util.get_location(node)
|
42
|
+
Skewer.logger.debug "Copying code to #{location} ..."
|
43
|
+
create_destination(node)
|
44
|
+
command = self.rsync_command(node)
|
45
|
+
|
46
|
+
if node.class.to_s =~ /StubNode/
|
47
|
+
mock_rsync(command)
|
48
|
+
else
|
49
|
+
real_rsync(node, command)
|
50
|
+
end
|
51
|
+
Skewer.logger.debug " Done."
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/stub_node.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Skewer
|
2
|
+
# test stub for pretending to be a real node
|
3
|
+
class StubNode
|
4
|
+
attr_reader :dns_name, :username, :public_ip_address
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@dns_name = 'com.doodoo'
|
8
|
+
@public_ip_address = '192.168.0.1'
|
9
|
+
@username = 'imabirdbrain'
|
10
|
+
@debug = false
|
11
|
+
end
|
12
|
+
|
13
|
+
def announce(return_type)
|
14
|
+
Skewer.logger.debug "#{self.class} will return #{return_type}" if @debug
|
15
|
+
return_type
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_missing(name, *args)
|
19
|
+
require 'ersatz/ssh_result.rb'
|
20
|
+
Skewer.logger.debug "#{self.class}.#{name} called with #{args.join(',')}" if @debug
|
21
|
+
return announce([ErsatzSSHResult.new('foo', 'success', 0)]) if name == :ssh
|
22
|
+
announce true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/util.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Skewer
|
2
|
+
# A utility class to handle common cloud operations that we'll
|
3
|
+
# encounter amongst different providers.
|
4
|
+
class Util
|
5
|
+
# Get the location (dns name, or IP) for a given Fog server. Cloud
|
6
|
+
# provider agnostic.
|
7
|
+
def get_location(server = nil)
|
8
|
+
# Negative case.
|
9
|
+
return nil if server.nil?
|
10
|
+
return nil if not server.respond_to?(:dns_name) and not server.respond_to?(:public_ip_address)
|
11
|
+
|
12
|
+
# Positive case.
|
13
|
+
return server.dns_name if server.respond_to? :dns_name
|
14
|
+
server.public_ip_address if server.respond_to? :public_ip_address
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/skewer.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "skewer/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "skewer"
|
7
|
+
s.version = Skewer::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Julian Simpson", "Kushal Pisavadia"]
|
10
|
+
s.email = ["julian@build-doctor.com"]
|
11
|
+
s.homepage = "http://www.build-doctor.com/skewer"
|
12
|
+
s.summary = "skewer-#{s.version}"
|
13
|
+
s.description = "Runs masterless puppet code on cloud machines"
|
14
|
+
|
15
|
+
s.rubyforge_project = "skewer"
|
16
|
+
|
17
|
+
s.add_runtime_dependency 'fog', '~> 1.1.2'
|
18
|
+
|
19
|
+
s.add_development_dependency 'aruba'
|
20
|
+
s.add_development_dependency 'jeweler'
|
21
|
+
s.add_development_dependency 'metric_fu'
|
22
|
+
s.add_development_dependency 'rcov', '~> 1.0.0'
|
23
|
+
s.add_development_dependency 'rspec'
|
24
|
+
s.add_development_dependency 'vagrant', '~> 0.9.0'
|
25
|
+
|
26
|
+
s.files = `git ls-files`.split("\n").reject {|path| path =~ /\.gitignore$/ }
|
27
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
28
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
29
|
+
s.require_paths = ["lib"]
|
30
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'fog'
|
3
|
+
require 'aws/node'
|
4
|
+
require 'config'
|
5
|
+
|
6
|
+
describe Skewer::AWS::Node do
|
7
|
+
it "should have an optional SSH key" do
|
8
|
+
lambda {
|
9
|
+
Fog.mock!
|
10
|
+
Skewer::AWS::Node.new('ami-123456', ['default']).node
|
11
|
+
}.should raise_exception Fog::Errors::MockNotImplemented
|
12
|
+
|
13
|
+
begin
|
14
|
+
Skewer::AWS::Node.new('ami-123456', ['default'], {:key_name => 'FOO_BAR_KEY'})
|
15
|
+
rescue Fog::Compute::AWS::NotFound => e
|
16
|
+
e.message.should == "The key pair 'FOO_BAR_KEY' does not exist"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should get the SSH key via config" do
|
21
|
+
Skewer::SkewerConfig.set('key_name', 'FRONT_DOOR')
|
22
|
+
begin
|
23
|
+
Skewer::AWS::Node.new('ami-123456', ['default']).inspect
|
24
|
+
rescue Fog::Compute::AWS::NotFound => e
|
25
|
+
e.message.should == "The key pair 'FRONT_DOOR' does not exist"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should be able to find the node by name" do
|
30
|
+
options = {}
|
31
|
+
service = stub('aws_service')
|
32
|
+
servers = stub('aws_servers')
|
33
|
+
service.should_receive(:servers).and_return(servers)
|
34
|
+
servers.should_receive(:select).and_return([])
|
35
|
+
Skewer::AWS::Node.find_by_name('foobar', service)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should be able in inject the AWS service" do
|
39
|
+
options = {}
|
40
|
+
service = stub('aws_service')
|
41
|
+
servers = stub('aws_servers')
|
42
|
+
|
43
|
+
service.should_receive(:servers).and_return(servers)
|
44
|
+
servers.should_receive(:bootstrap)
|
45
|
+
|
46
|
+
options[:service] = service
|
47
|
+
Skewer::AWS::Node.new('ami-goo', ['default'], options)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should have a delete method" do
|
51
|
+
options = {}
|
52
|
+
service = stub('aws_service')
|
53
|
+
servers = stub('aws_servers')
|
54
|
+
node = stub('aws_node')
|
55
|
+
|
56
|
+
service.should_receive(:servers).and_return(servers)
|
57
|
+
servers.should_receive(:bootstrap).and_return(node)
|
58
|
+
node.should_receive(:delete).and_return(true)
|
59
|
+
|
60
|
+
options[:service] = service
|
61
|
+
Skewer::AWS::Node.new('ami-goo', ['default'], options).node.delete.should == true
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should have a static find_service method" do
|
65
|
+
options = {}
|
66
|
+
service = stub('aws_service')
|
67
|
+
options[:service] = service
|
68
|
+
Skewer::AWS::Node.find_service(options).should == service
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'aws/security_group'
|
2
|
+
require 'fog'
|
3
|
+
|
4
|
+
describe Skewer::AWS::SecurityGroup do
|
5
|
+
Fog.mock!
|
6
|
+
it "should use an existing AWS service if it exists" do
|
7
|
+
service = Skewer::AWS::Service.service
|
8
|
+
group = Skewer::AWS::SecurityGroup.new('foo','bar', {})
|
9
|
+
group.service.should == service
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should not open any extra ports if we don't ask" do
|
13
|
+
Skewer::AWS::SecurityGroup.new('foo1','bar1', {}).group.ip_permissions.should == []
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should open SSH by default" do
|
17
|
+
default_group = Skewer::AWS::Service.service.security_groups.select {|group| group.name == 'default'}[0]
|
18
|
+
default_group.ip_permissions.select {|dg| dg['fromPort'] == 22 && dg['toPort'] == 22 }.length.should == 1
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'config'
|
2
|
+
require 'aws/service'
|
3
|
+
require 'fog'
|
4
|
+
|
5
|
+
describe Skewer::AWS::Service do
|
6
|
+
it "should return an AWS instance" do
|
7
|
+
Fog.mock!
|
8
|
+
Skewer::AWS::Service.service.class.should == Fog::Compute::AWS::Mock
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should register itself for reuse" do
|
12
|
+
service = Skewer::AWS::Service.service
|
13
|
+
Skewer::SkewerConfig.get('aws_service').should == service
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should take zone param from SkewerConfig, and raise exception if not supported" do
|
17
|
+
Skewer::SkewerConfig.set 'region', 'unknown region'
|
18
|
+
|
19
|
+
lambda {
|
20
|
+
service = Skewer::AWS::Service.service
|
21
|
+
}.should raise_exception(ArgumentError, 'Unknown region: "unknown region"')
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should take zone param from SkewerConfig" do
|
25
|
+
Fog.mock!
|
26
|
+
Skewer::SkewerConfig.set 'region', 'eu-west-1'
|
27
|
+
service = Skewer::AWS::Service.service
|
28
|
+
service.nil?.should == false
|
29
|
+
service.class.should == Fog::Compute::AWS::Mock
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'bootstrapper'
|
2
|
+
require 'source'
|
3
|
+
require 'config'
|
4
|
+
|
5
|
+
describe Skewer::Bootstrapper do
|
6
|
+
it "should barf if the file doesn't exist" do
|
7
|
+
lambda {
|
8
|
+
Skewer::Bootstrapper.new(nil, {}).execute('oberon.sh')
|
9
|
+
}.should raise_exception RuntimeError
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should copy the rubygems profile.d script over" do
|
13
|
+
node = mock('node')
|
14
|
+
node.should_receive(:scp)
|
15
|
+
node.should_receive(:ssh).with('sudo bash /var/tmp/rubygems.sh')
|
16
|
+
Skewer::Bootstrapper.new(node, {}).execute('rubygems.sh')
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should install rubygems on the remote machine" do
|
20
|
+
node = mock('node')
|
21
|
+
node.should_receive(:scp).with(File.expand_path("./lib/../assets/Gemfile"), "infrastructure")
|
22
|
+
node.should_receive(:ssh).with('. /etc/profile.d/rubygems.sh && cd infrastructure && bundle install')
|
23
|
+
Skewer::Bootstrapper.new(node, {}).install_gems
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should make a node file if it can't find one" do
|
27
|
+
FileUtils.mkdir_p('target/manifests')
|
28
|
+
s = Skewer::Source.new('target')
|
29
|
+
node = stub('node')
|
30
|
+
node.should_receive(:username).at_least(1).times
|
31
|
+
node.should_receive(:dns_name).at_least(1).times
|
32
|
+
node.should_receive(:ssh).at_least(1).times
|
33
|
+
Skewer::SkewerConfig.instance.set(:puppet_repo, 'target')
|
34
|
+
lambda {
|
35
|
+
Skewer::Bootstrapper.new(node, {:role => 'foo'}).sync_source
|
36
|
+
}.should raise_exception RuntimeError
|
37
|
+
Skewer::SkewerConfig.instance.set(:puppet_repo, '../infrastructure')
|
38
|
+
File.exist?('target/manifests/nodes.pp').should == true
|
39
|
+
FileUtils
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should make an attempt to load the key so that we can rsync the code over" do
|
43
|
+
kernel = stub('kernel')
|
44
|
+
node = stub('node')
|
45
|
+
kernel.should_receive(:system).and_return(true)
|
46
|
+
faux_homedir = 'tmp/foo/.ssh'
|
47
|
+
|
48
|
+
config = Skewer::SkewerConfig.instance
|
49
|
+
|
50
|
+
config.set(:key_name, 'my_great_test_key' )
|
51
|
+
FileUtils.mkdir_p(faux_homedir)
|
52
|
+
FileUtils.touch("#{faux_homedir}/my_great_test_key.pem")
|
53
|
+
|
54
|
+
bootstrapper = Skewer::Bootstrapper.new(node, {})
|
55
|
+
bootstrapper.add_key_to_agent(kernel, 'tmp/foo')
|
56
|
+
Skewer::SkewerConfig.set(:key_name, nil)
|
57
|
+
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should always run if there is no lock file" do
|
62
|
+
node = stub('node')
|
63
|
+
node.should_receive(:dns_name).at_least(1).times.and_return('foo.bar.com')
|
64
|
+
|
65
|
+
bootstrapper = Skewer::Bootstrapper.new(node, {:role => 'foo'})
|
66
|
+
bootstrapper.destroy_lock_file
|
67
|
+
|
68
|
+
bootstrapper.should_i_run?.should == true
|
69
|
+
File.unlink(bootstrapper.lock_file)
|
70
|
+
bootstrapper.should_i_run?.should == true
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should let me know if it has just run" do
|
75
|
+
node = stub('node')
|
76
|
+
node.should_receive(:dns_name).at_least(1).times.and_return('foo.bar.com')
|
77
|
+
|
78
|
+
bootstrapper = Skewer::Bootstrapper.new(node, {:role => 'foo'})
|
79
|
+
bootstrapper.destroy_lock_file
|
80
|
+
|
81
|
+
bootstrapper.should_i_run?.should == true
|
82
|
+
bootstrapper.should_i_run?.should == false
|
83
|
+
bootstrapper.should_i_run?.should == false
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should not bother bootstrapping again if it has bootstrapped recently" do
|
87
|
+
node = stub('node')
|
88
|
+
node.should_receive(:scp).at_least(1).times
|
89
|
+
node.should_receive(:ssh).at_least(1).times
|
90
|
+
node.should_receive(:dns_name).at_least(1).times.and_return('foo.bar.com')
|
91
|
+
bootstrapper = Skewer::Bootstrapper.new(node, {:role => 'foo'})
|
92
|
+
bootstrapper.destroy_lock_file
|
93
|
+
bootstrapper.mock = true
|
94
|
+
bootstrapper.go
|
95
|
+
sleep 1
|
96
|
+
bootstrapper.go
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should allow mocking out of the source step" do
|
100
|
+
node = stub('node')
|
101
|
+
node.should_not_receive(:username)
|
102
|
+
bootstrapper = Skewer::Bootstrapper.new(node, {:role => 'foo'})
|
103
|
+
bootstrapper.mock = true
|
104
|
+
bootstrapper.sync_source
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should actually run the source step" do
|
108
|
+
node = stub('node')
|
109
|
+
node.should_receive(:username).at_least(3).times
|
110
|
+
node.should_receive(:ssh)
|
111
|
+
bootstrapper = Skewer::Bootstrapper.new(node, {:role => 'foo'})
|
112
|
+
lambda {
|
113
|
+
bootstrapper.sync_source
|
114
|
+
}.should raise_exception RuntimeError
|
115
|
+
end
|
116
|
+
end
|
data/spec/cli_spec.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'cli'
|
2
|
+
|
3
|
+
describe Skewer::CLI do
|
4
|
+
before(:each) do
|
5
|
+
config = Skewer::SkewerConfig.instance
|
6
|
+
config.reset
|
7
|
+
end
|
8
|
+
|
9
|
+
Fog.mock!
|
10
|
+
it "shouldn't barf if you instantiate it wthout options" do
|
11
|
+
lambda {
|
12
|
+
Skewer::CLI.new({:kind => :nil})
|
13
|
+
}.should_not raise_exception
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should blow up if you ask for Linode as it's not done" do
|
17
|
+
lambda {
|
18
|
+
Skewer::CLI.new({:kind => :nil}).select_node(:linode)
|
19
|
+
}.should raise_exception RuntimeError
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return a node of type eucalytus if you ask for one" do
|
23
|
+
lambda {
|
24
|
+
Skewer::CLI.new({:kind => :nil}).select_node(:eucalyptus)
|
25
|
+
}.should raise_exception Fog::Errors::MockNotImplemented
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should return a node of type local if you ask for vagrant" do
|
29
|
+
Skewer::CLI.new({:kind => :nil}).select_node(:vagrant).class.should == Skewer::ErsatzNode
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return a node of type AWS if you ask for one" do
|
33
|
+
lambda {
|
34
|
+
Skewer::CLI.new({:kind => :nil}).select_node(:ec2)
|
35
|
+
}.should raise_exception Fog::Errors::MockNotImplemented
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should be able to parse the options as they're given" do
|
39
|
+
config = Skewer::SkewerConfig.instance
|
40
|
+
config.get(:region).should == 'us-east-1'
|
41
|
+
cli = Skewer::CLI.new({:kind => :nil, :region => 'eu-west-1'})
|
42
|
+
config.get(:region).should == 'eu-west-1'
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should be able to pass the region through to the AWS service" do
|
46
|
+
config = Skewer::SkewerConfig.instance
|
47
|
+
config.get(:region).should == 'us-east-1'
|
48
|
+
cli = Skewer::CLI.new({:kind => :nil, :region => 'eu-west-1'})
|
49
|
+
config.get(:region).should == 'eu-west-1'
|
50
|
+
lambda {
|
51
|
+
cli.select_node(:ec2)
|
52
|
+
}.should raise_exception Fog::Errors::MockNotImplemented
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should be able to pass the flavor_id through to the AWS service" do
|
56
|
+
config = Skewer::SkewerConfig.instance
|
57
|
+
config.get(:flavor_id).should == 'm1.large'
|
58
|
+
cli = Skewer::CLI.new({:kind => :nil, :flavor_id => 'm1.small'})
|
59
|
+
config.get(:flavor_id).should == 'm1.small'
|
60
|
+
lambda {
|
61
|
+
cli.select_node(:ec2)
|
62
|
+
}.should raise_exception Fog::Errors::MockNotImplemented
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should be able to provide a cuke directory" do
|
66
|
+
config = Skewer::SkewerConfig.instance
|
67
|
+
config.get(:cuke_dir).should == nil
|
68
|
+
cli = Skewer::CLI.new({:kind => :nil, :cuke_dir => 'spec'})
|
69
|
+
config.get(:cuke_dir).should == 'spec'
|
70
|
+
end
|
71
|
+
end
|