ironfan 4.1.0 → 4.1.1
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.
- data/.rspec +1 -2
- data/CHANGELOG.md +4 -0
- data/Rakefile +1 -3
- data/VERSION +1 -1
- data/ironfan.gemspec +4 -7
- data/lib/chef/knife/cluster_proxy.rb +2 -2
- data/lib/ironfan.rb +1 -0
- data/spec/ironfan/cluster_spec.rb +18 -8
- data/spec/ironfan/ec2/security_group_spec.rb +57 -0
- data/spec/spec_helper.rb +1 -36
- metadata +5 -11
- data/spec/ironfan/facet_spec.rb +0 -69
- data/spec/ironfan/server_slice_spec.rb +0 -19
- data/spec/ironfan/server_spec.rb +0 -112
- data/spec/ironfan_spec.rb +0 -193
data/.rspec
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
# v4.1.1: fixing 'rake spec'
|
2
|
+
* Remove all defunct tests and start fresh (fixes #137)
|
3
|
+
* Failing spec for #158
|
4
|
+
|
1
5
|
# v4.1.0: several bug-fixes and code cleanup
|
2
6
|
* Splat the args to DSL::Volume.snapshot_id so we can call it properly (fixes #161)
|
3
7
|
* cloud(:ec2) lets you declare bitness (fixes #147)
|
data/Rakefile
CHANGED
@@ -64,9 +64,7 @@ Jeweler::RubygemsDotOrgTasks.new
|
|
64
64
|
#
|
65
65
|
# RSpec -- testing
|
66
66
|
#
|
67
|
-
RSpec::Core::RakeTask.new(:spec)
|
68
|
-
spec.pattern = FileList['spec/**/*_spec.rb']
|
69
|
-
end
|
67
|
+
RSpec::Core::RakeTask.new(:spec)
|
70
68
|
|
71
69
|
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
72
70
|
spec.pattern = 'spec/**/*_spec.rb'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.1.
|
1
|
+
4.1.1
|
data/ironfan.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ironfan"
|
8
|
-
s.version = "4.1.
|
8
|
+
s.version = "4.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Infochimps"]
|
12
|
-
s.date = "2012-09-
|
12
|
+
s.date = "2012-09-27"
|
13
13
|
s.description = "Ironfan allows you to orchestrate not just systems but clusters of machines. It includes a powerful layer on top of knife and a collection of cloud cookbooks."
|
14
14
|
s.email = "coders@infochimps.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -85,10 +85,7 @@ Gem::Specification.new do |s|
|
|
85
85
|
"lib/ironfan/provider/virtualbox/machine.rb",
|
86
86
|
"lib/ironfan/requirements.rb",
|
87
87
|
"spec/ironfan/cluster_spec.rb",
|
88
|
-
"spec/ironfan/
|
89
|
-
"spec/ironfan/server_slice_spec.rb",
|
90
|
-
"spec/ironfan/server_spec.rb",
|
91
|
-
"spec/ironfan_spec.rb",
|
88
|
+
"spec/ironfan/ec2/security_group_spec.rb",
|
92
89
|
"spec/spec_helper.rb",
|
93
90
|
"spec/spec_helper/dummy_chef.rb",
|
94
91
|
"spec/test_config.rb",
|
@@ -99,7 +96,7 @@ Gem::Specification.new do |s|
|
|
99
96
|
s.require_paths = ["lib"]
|
100
97
|
s.rubygems_version = "1.8.24"
|
101
98
|
s.summary = "Ironfan allows you to orchestrate not just systems but clusters of machines. It includes a powerful layer on top of knife and a collection of cloud cookbooks."
|
102
|
-
s.test_files = ["spec/
|
99
|
+
s.test_files = ["spec/spec_helper/dummy_chef.rb", "spec/ironfan/cluster_spec.rb", "spec/ironfan/ec2/security_group_spec.rb", "spec/spec_helper.rb", "spec/test_config.rb"]
|
103
100
|
|
104
101
|
if s.respond_to? :specification_version then
|
105
102
|
s.specification_version = 3
|
@@ -48,7 +48,7 @@ class Chef
|
|
48
48
|
:default => '6666'
|
49
49
|
|
50
50
|
def relevant?(server)
|
51
|
-
server.
|
51
|
+
server.machine.running?
|
52
52
|
end
|
53
53
|
|
54
54
|
def perform_execution(target)
|
@@ -62,7 +62,7 @@ class Chef
|
|
62
62
|
def command_for_target(svr)
|
63
63
|
config[:attribute] ||= Chef::Config[:knife][:ssh_address_attribute] || "fqdn"
|
64
64
|
config[:ssh_user] ||= Chef::Config[:knife][:ssh_user]
|
65
|
-
config[:identity_file] ||= svr.cloud.ssh_identity_file
|
65
|
+
config[:identity_file] ||= svr.server.cloud.ssh_identity_file
|
66
66
|
config[:host_key_verify] ||= Chef::Config[:knife][:host_key_verify] || (not config[:no_host_key_verify]) # pre-vs-post 0.10.4
|
67
67
|
|
68
68
|
address = svr.public_hostname
|
data/lib/ironfan.rb
CHANGED
@@ -1,13 +1,23 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'ironfan'
|
4
4
|
|
5
|
-
describe Ironfan::Cluster do
|
6
|
-
describe '
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
describe Ironfan::Dsl::Cluster do
|
6
|
+
describe 'run lists' do
|
7
|
+
subject do
|
8
|
+
Ironfan.cluster 'foo' do
|
9
|
+
environment :dev
|
10
|
+
|
11
|
+
role :systemwide
|
12
|
+
|
13
|
+
facet :bar do
|
14
|
+
instances 1
|
15
|
+
role :nfs_client, :first
|
16
|
+
end
|
17
|
+
end
|
11
18
|
end
|
19
|
+
|
20
|
+
its(:environment) { should eql :dev }
|
21
|
+
its(:run_list) { should eql ["role[systemwide]"] }
|
12
22
|
end
|
13
23
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'ironfan'
|
4
|
+
|
5
|
+
describe Ironfan::Dsl::Cluster do
|
6
|
+
let (:cluster) do
|
7
|
+
Ironfan.cluster "sparky" do
|
8
|
+
cloud(:ec2).security_group(:ssh).authorize_port_range 22..22
|
9
|
+
facet :web do
|
10
|
+
cloud(:ec2).security_group("sparky-web").authorize_port_range(80)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'cluster definition' do
|
16
|
+
subject { cluster }
|
17
|
+
|
18
|
+
its(:name) { should eql "sparky" }
|
19
|
+
its(:environment) { should eql :_default }
|
20
|
+
its(:run_list) { should eql [] }
|
21
|
+
|
22
|
+
describe 'facets' do
|
23
|
+
before { @facets = cluster.facets }
|
24
|
+
subject { @facets.values }
|
25
|
+
its(:length) { should eql 1 }
|
26
|
+
|
27
|
+
describe 'web facet' do
|
28
|
+
before { @facet = @facets.values.first }
|
29
|
+
subject { @facet }
|
30
|
+
its(:name) { should eql "web" }
|
31
|
+
|
32
|
+
describe 'security groups' do
|
33
|
+
before { @groups = @facet.clouds.values.first.security_groups.values }
|
34
|
+
subject { @groups }
|
35
|
+
|
36
|
+
its(:length) { should eql 2 }
|
37
|
+
|
38
|
+
it 'authorizes ssh on port 22 from anywhere' do
|
39
|
+
ssh_auth = @groups.first
|
40
|
+
ssh_auth.range_authorizations.first.should eql [22..22, "0.0.0.0/0", "tcp"]
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'authorizes HTTP on port 80 from anywhere' do
|
44
|
+
http_auth = @groups.last
|
45
|
+
http_auth.range_authorizations.first.should eql [80..80, "0.0.0.0/0", "tcp"]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'clouds' do
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -1,42 +1,7 @@
|
|
1
|
-
|
2
|
-
require 'bundler'
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
|
11
|
-
require 'rspec'
|
1
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
12
2
|
require 'chef'
|
13
3
|
require 'chef/knife'
|
14
4
|
require 'fog'
|
15
5
|
|
16
|
-
unless defined?(IRONFAN_DIR)
|
17
|
-
IRONFAN_DIR = File.expand_path(File.dirname(__FILE__)+'/..')
|
18
|
-
def IRONFAN_DIR(*paths) File.join(IRONFAN_DIR, *paths); end
|
19
|
-
# load from vendored libraries, if present
|
20
|
-
Dir[IRONFAN_DIR("vendor/*/lib")].each{|dir| p dir ; $LOAD_PATH.unshift(File.expand_path(dir)) } ; $LOAD_PATH.uniq!
|
21
|
-
end
|
22
|
-
|
23
6
|
Fog.mock!
|
24
7
|
Fog::Mock.delay = 0
|
25
|
-
|
26
|
-
CHEF_CONFIG_FILE = File.expand_path(IRONFAN_DIR('spec/test_config.rb')) unless defined?(CHEF_CONFIG_FILE)
|
27
|
-
Chef::Config.from_file(CHEF_CONFIG_FILE)
|
28
|
-
|
29
|
-
# Requires custom matchers & macros, etc from files in ./spec_helper/
|
30
|
-
Dir[IRONFAN_DIR("spec/spec_helper/*.rb")].each {|f| require f}
|
31
|
-
|
32
|
-
def load_example_cluster(name)
|
33
|
-
require(IRONFAN_DIR('clusters', "#{name}.rb"))
|
34
|
-
end
|
35
|
-
def get_example_cluster name
|
36
|
-
load_example_cluster(name)
|
37
|
-
Ironfan.cluster(name)
|
38
|
-
end
|
39
|
-
|
40
|
-
# Configure rspec
|
41
|
-
RSpec.configure do |config|
|
42
|
-
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: ironfan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 4.1.
|
5
|
+
version: 4.1.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Infochimps
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-09-
|
13
|
+
date: 2012-09-27 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: chef
|
@@ -211,10 +211,7 @@ files:
|
|
211
211
|
- lib/ironfan/provider/virtualbox/machine.rb
|
212
212
|
- lib/ironfan/requirements.rb
|
213
213
|
- spec/ironfan/cluster_spec.rb
|
214
|
-
- spec/ironfan/
|
215
|
-
- spec/ironfan/server_slice_spec.rb
|
216
|
-
- spec/ironfan/server_spec.rb
|
217
|
-
- spec/ironfan_spec.rb
|
214
|
+
- spec/ironfan/ec2/security_group_spec.rb
|
218
215
|
- spec/spec_helper.rb
|
219
216
|
- spec/spec_helper/dummy_chef.rb
|
220
217
|
- spec/test_config.rb
|
@@ -232,7 +229,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
232
229
|
requirements:
|
233
230
|
- - ">="
|
234
231
|
- !ruby/object:Gem::Version
|
235
|
-
hash:
|
232
|
+
hash: 481284130132022925
|
236
233
|
segments:
|
237
234
|
- 0
|
238
235
|
version: "0"
|
@@ -250,11 +247,8 @@ signing_key:
|
|
250
247
|
specification_version: 3
|
251
248
|
summary: Ironfan allows you to orchestrate not just systems but clusters of machines. It includes a powerful layer on top of knife and a collection of cloud cookbooks.
|
252
249
|
test_files:
|
253
|
-
- spec/ironfan_spec.rb
|
254
250
|
- spec/spec_helper/dummy_chef.rb
|
255
251
|
- spec/ironfan/cluster_spec.rb
|
256
|
-
- spec/ironfan/
|
257
|
-
- spec/ironfan/server_spec.rb
|
258
|
-
- spec/ironfan/facet_spec.rb
|
252
|
+
- spec/ironfan/ec2/security_group_spec.rb
|
259
253
|
- spec/spec_helper.rb
|
260
254
|
- spec/test_config.rb
|
data/spec/ironfan/facet_spec.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
require IRONFAN_DIR("lib/ironfan")
|
4
|
-
|
5
|
-
describe Ironfan::Facet do
|
6
|
-
let(:cluster){ Ironfan.cluster(:gibbon) }
|
7
|
-
let(:facet){
|
8
|
-
cluster.facet(:namenode) do
|
9
|
-
instances 5
|
10
|
-
end
|
11
|
-
}
|
12
|
-
|
13
|
-
describe 'slicing' do
|
14
|
-
it 'has servers' do
|
15
|
-
facet.indexes.should == [0, 1, 2, 3, 4]
|
16
|
-
facet.valid_indexes.should == [0, 1, 2, 3, 4]
|
17
|
-
facet.server(3){ name(:bob) }
|
18
|
-
svrs = facet.servers
|
19
|
-
svrs.length.should == 5
|
20
|
-
svrs.map{|svr| svr.name }.should == ["gibbon-namenode-0", "gibbon-namenode-1", "gibbon-namenode-2", :bob, "gibbon-namenode-4"]
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'servers have bogosity if out of range' do
|
24
|
-
facet.server(69).should be_bogus
|
25
|
-
facet.servers.select(&:bogus?).map(&:facet_index).should == [69]
|
26
|
-
facet.indexes.should == [0, 1, 2, 3, 4, 69]
|
27
|
-
facet.valid_indexes.should == [0, 1, 2, 3, 4]
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'returns all on nil or "", but [] means none' do
|
31
|
-
facet.server(69)
|
32
|
-
facet.slice('' ).map(&:facet_index).should == [0, 1, 2, 3, 4, 69]
|
33
|
-
facet.slice(nil).map(&:facet_index).should == [0, 1, 2, 3, 4, 69]
|
34
|
-
facet.slice([] ).map(&:facet_index).should == []
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'slice returns all by default' do
|
38
|
-
facet.server(69)
|
39
|
-
facet.slice().map(&:facet_index).should == [0, 1, 2, 3, 4, 69]
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'with an array returns specified indexes (bogus or not) in sorted order' do
|
43
|
-
facet.server(69)
|
44
|
-
facet.slice( [3, 1, 0] ).map(&:facet_index).should == [0, 1, 3]
|
45
|
-
facet.slice( [3, 1, 69, 0] ).map(&:facet_index).should == [0, 1, 3, 69]
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'with an array does not create new dummy servers' do
|
49
|
-
facet.server(69)
|
50
|
-
facet.slice( [3, 1, 69, 0, 75, 123] ).map(&:facet_index).should == [0, 1, 3, 69]
|
51
|
-
facet.has_server?(75).should be_false
|
52
|
-
facet.has_server?(69).should be_true
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'with a string, converts to intervals' do
|
56
|
-
facet.slice('1' ).map(&:facet_index).should == [1]
|
57
|
-
facet.slice('5' ).map(&:facet_index).should == []
|
58
|
-
facet.slice('1-1' ).map(&:facet_index).should == [1]
|
59
|
-
facet.slice('0-1' ).map(&:facet_index).should == [0,1]
|
60
|
-
facet.slice('0-1,3-4').map(&:facet_index).should == [0,1,3,4]
|
61
|
-
facet.slice('0-1,69' ).map(&:facet_index).should == [0,1,69]
|
62
|
-
facet.slice('0-2,1-3').map(&:facet_index).should == [0,1,2,3]
|
63
|
-
facet.slice('3-1' ).map(&:facet_index).should == []
|
64
|
-
facet.slice('2-5' ).map(&:facet_index).should == [2,3,4]
|
65
|
-
facet.slice(1).map(&:facet_index).should == [1]
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
require IRONFAN_DIR("lib/ironfan")
|
3
|
-
|
4
|
-
describe Ironfan::ServerSlice do
|
5
|
-
before do
|
6
|
-
@slice = Ironfan.slice('webserver_demo')
|
7
|
-
end
|
8
|
-
|
9
|
-
describe 'attributes' do
|
10
|
-
it 'security groups' do
|
11
|
-
@slice.security_groups.keys.sort.should == [
|
12
|
-
"default",
|
13
|
-
"webserver_demo", "webserver_demo-awesome_website", "webserver_demo-dbnode", "webserver_demo-esnode",
|
14
|
-
"webserver_demo-redis_client", "webserver_demo-redis_server",
|
15
|
-
"webserver_demo-webnode", "nfs_client", "ssh"
|
16
|
-
]
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/spec/ironfan/server_spec.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
require IRONFAN_DIR("lib/ironfan")
|
3
|
-
|
4
|
-
describe Ironfan::Server do
|
5
|
-
include_context 'dummy_chef'
|
6
|
-
|
7
|
-
Ironfan::Server.class_eval do
|
8
|
-
def chef_node
|
9
|
-
Chef::Node.new
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
Ironfan::DryRunnable.class_eval do
|
14
|
-
def unless_dry_run
|
15
|
-
puts "Not doing that"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
before do
|
20
|
-
Ironfan::Server.stub!(:chef_node).and_return( "HI" )
|
21
|
-
Chef::Config.stub!(:validation_key).and_return("I_AM_VALID")
|
22
|
-
|
23
|
-
foo = Ironfan::Server.new(Ironfan::Facet.new(Ironfan::Cluster.new('hi'),'there'),0)
|
24
|
-
puts foo.inspect
|
25
|
-
puts foo.chef_node
|
26
|
-
@cluster = get_example_cluster('webserver_demo')
|
27
|
-
@cluster.resolve!
|
28
|
-
@facet = @cluster.facet(:dbnode)
|
29
|
-
@server = @facet.server(0)
|
30
|
-
end
|
31
|
-
|
32
|
-
describe 'volumes' do
|
33
|
-
describe '#composite_volumes' do
|
34
|
-
it 'assembles cluster, facet and server volumes' do
|
35
|
-
@server.composite_volumes.length.should == 5
|
36
|
-
@cluster.volumes.length.should == 4
|
37
|
-
@facet.volumes.length.should == 1
|
38
|
-
@server.volumes.length.should == 1
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'composites server attributes onto a volume defined in the facet' do
|
42
|
-
vol = @server.composite_volumes[:data]
|
43
|
-
vol.to_hash.should == {
|
44
|
-
:name => :data,
|
45
|
-
:tags => {},
|
46
|
-
:snapshot_id => "snap-d9c1edb1",
|
47
|
-
:size => 50,
|
48
|
-
:keep => true,
|
49
|
-
:device => "/dev/sdi",
|
50
|
-
:mount_point => "/data/db",
|
51
|
-
:mount_options => "defaults,nouuid,noatime",
|
52
|
-
:fs_type => "xfs",
|
53
|
-
:availability_zone => "us-east-1d"
|
54
|
-
}
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'makes block_device_mapping for non-ephemeral storage' do
|
58
|
-
vol = @server.composite_volumes[:data]
|
59
|
-
vol.block_device_mapping.should == {
|
60
|
-
"DeviceName" => "/dev/sdi",
|
61
|
-
"Ebs.SnapshotId" => "snap-d9c1edb1",
|
62
|
-
"Ebs.VolumeSize" => 50,
|
63
|
-
"Ebs.DeleteOnTermination" => "false"
|
64
|
-
}
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'skips block_device_mapping for non-ephemeral storage if volume id is present' do
|
68
|
-
vol = @facet.server(1).composite_volumes[:data]
|
69
|
-
vol.block_device_mapping.should be_nil
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
describe 'launch' do
|
76
|
-
describe '#fog_launch_description' do
|
77
|
-
it 'has right attributes' do
|
78
|
-
|
79
|
-
hsh = @server.fog_launch_description
|
80
|
-
hsh.delete(:user_data)
|
81
|
-
hsh.should == {
|
82
|
-
:image_id => "ami-08f40561",
|
83
|
-
:flavor_id => "m1.large",
|
84
|
-
:groups => ["webserver_demo-redis_client", "webserver_demo-dbnode", "default", "ssh", "nfs_client", "webserver_demo"],
|
85
|
-
:key_name => :webserver_demo,
|
86
|
-
:tags => {:cluster=>:webserver_demo, :facet=>:dbnode, :index=>0},
|
87
|
-
:block_device_mapping => [
|
88
|
-
{"DeviceName"=>"/dev/sdi", "Ebs.SnapshotId"=>"snap-d9c1edb1", "Ebs.VolumeSize"=>50, "Ebs.DeleteOnTermination"=>"false"},
|
89
|
-
{"DeviceName"=>"/dev/sdb", "VirtualName"=>"ephemeral0"},
|
90
|
-
{"DeviceName"=>"/dev/sdc", "VirtualName"=>"ephemeral1"},
|
91
|
-
{"DeviceName"=>"/dev/sdd", "VirtualName"=>"ephemeral2"},
|
92
|
-
{"DeviceName"=>"/dev/sde", "VirtualName"=>"ephemeral3"},
|
93
|
-
],
|
94
|
-
:availability_zone => "us-east-1d",
|
95
|
-
:monitoring => nil
|
96
|
-
}
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'has right user_data' do
|
100
|
-
hsh = @server.fog_launch_description
|
101
|
-
user_data_hsh = JSON.parse( hsh[:user_data] )
|
102
|
-
user_data_hsh.keys.should == ["chef_server", "validation_client_name", "validation_key", "attributes"]
|
103
|
-
user_data_hsh["attributes"].keys.sort.should == [
|
104
|
-
"cluster_name", "facet_name", "facet_index",
|
105
|
-
"node_name",
|
106
|
-
"webnode_count",
|
107
|
-
]
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
data/spec/ironfan_spec.rb
DELETED
@@ -1,193 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
require IRONFAN_DIR("lib/ironfan")
|
4
|
-
|
5
|
-
describe "ironfan" do
|
6
|
-
describe 'successfuly runs example' do
|
7
|
-
|
8
|
-
describe 'webserver_demo:' do
|
9
|
-
before :all do
|
10
|
-
@cluster = get_example_cluster(:webserver_demo)
|
11
|
-
@cluster.resolve!
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'loads successfuly' do
|
15
|
-
@cluster.should be_a(Ironfan::Cluster)
|
16
|
-
@cluster.name.should == :webserver_demo
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'cluster is right' do
|
20
|
-
@cluster.to_hash.should == {
|
21
|
-
:name => :webserver_demo,
|
22
|
-
:run_list => ["role[base_role]", "role[chef_client]", "role[ssh]", "role[nfs_client]", "role[big_package]", "role[webserver_demo_cluster]"],
|
23
|
-
:chef_attributes => { :webnode_count => 6 },
|
24
|
-
:facet_name => "webserver_demo_cluster",
|
25
|
-
}
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'defaults cluster' do
|
29
|
-
defaults_cluster = Ironfan.cluster(:defaults)
|
30
|
-
cloud_hash = defaults_cluster.cloud.to_hash
|
31
|
-
[:security_groups, :user_data].each{|k| cloud_hash.delete k }
|
32
|
-
cloud_hash.should == {
|
33
|
-
:availability_zones => ['us-east-1d'],
|
34
|
-
:region => "us-east-1",
|
35
|
-
:flavor => "m1.small",
|
36
|
-
:image_name => "lucid",
|
37
|
-
:backing => "ebs",
|
38
|
-
:disable_api_termination => false,
|
39
|
-
:public_ip => false,
|
40
|
-
:bootstrap_distro => "ubuntu10.04-ironfan",
|
41
|
-
}
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'cluster cloud is right' do
|
45
|
-
cloud_hash = @cluster.cloud.to_hash
|
46
|
-
[:security_groups, :user_data].each{|k| cloud_hash.delete k }
|
47
|
-
cloud_hash.should == {
|
48
|
-
:availability_zones => ['us-east-1d'],
|
49
|
-
:region => "us-east-1",
|
50
|
-
:flavor => "t1.micro",
|
51
|
-
:image_name => "maverick",
|
52
|
-
:backing => "instance",
|
53
|
-
:disable_api_termination => false,
|
54
|
-
:public_ip => false,
|
55
|
-
:bootstrap_distro => "ubuntu10.04-ironfan",
|
56
|
-
:keypair => :webserver_demo,
|
57
|
-
}
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'facet cloud is right' do
|
61
|
-
cloud_hash = @cluster.facet(:webnode).cloud.to_hash
|
62
|
-
[:security_groups, :user_data].each{|k| cloud_hash.delete k }
|
63
|
-
cloud_hash.should == {
|
64
|
-
:backing => "ebs",
|
65
|
-
}
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'webnode facets are right' do
|
69
|
-
@cluster.facets.length.should == 3
|
70
|
-
fct = @cluster.facet(:webnode)
|
71
|
-
fct.to_hash.should == {
|
72
|
-
:name => :webnode,
|
73
|
-
:run_list => ["role[nginx]", "role[redis_client]", "role[mysql_client]", "role[elasticsearch_client]", "role[awesome_website]", "role[webserver_demo_webnode]"],
|
74
|
-
:chef_attributes => {:split_testing=>{:group=>"A"}},
|
75
|
-
:facet_role => "webserver_demo_webnode",
|
76
|
-
:instances => 6,
|
77
|
-
}
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'dbnode facets are right' do
|
81
|
-
fct = @cluster.facet(:dbnode)
|
82
|
-
fct.to_hash.should == {
|
83
|
-
:name => :dbnode,
|
84
|
-
:run_list => ["role[mysql_server]", "role[redis_client]", "role[webserver_demo_dbnode]" ],
|
85
|
-
:chef_attributes => {},
|
86
|
-
:facet_role => "webserver_demo_dbnode",
|
87
|
-
:instances => 2,
|
88
|
-
}
|
89
|
-
fct.cloud.flavor.should == 'c1.xlarge'
|
90
|
-
fct.server(0).cloud.flavor.should == 'm1.large'
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'esnode facets are right' do
|
94
|
-
fct = @cluster.facet(:esnode)
|
95
|
-
fct.to_hash.should == {
|
96
|
-
:name => :esnode,
|
97
|
-
:run_list => ["role[nginx]", "role[redis_server]", "role[elasticsearch_datanode]", "role[elasticsearch_httpnode]", "role[webserver_demonode]"],
|
98
|
-
:chef_attributes => {},
|
99
|
-
:facet_role => "webserver_demonode",
|
100
|
-
:instances => 1,
|
101
|
-
}
|
102
|
-
fct.cloud.flavor.should == 'm1.large'
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'cluster security groups are right' do
|
106
|
-
gg = @cluster.security_groups
|
107
|
-
gg.keys.should == ['default', 'ssh', 'nfs_client', 'webserver_demo']
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'facet webnode security groups are right' do
|
111
|
-
gg = @cluster.facet(:webnode).security_groups
|
112
|
-
gg.keys.sort.should == ["default", "webserver_demo", "webserver_demo-awesome_website", "webserver_demo-redis_client", "webserver_demo-webnode", "nfs_client", "ssh"]
|
113
|
-
gg['webserver_demo-awesome_website'].range_authorizations.should == [[80..80, "0.0.0.0/0", "tcp"], [443..443, "0.0.0.0/0", "tcp"]]
|
114
|
-
end
|
115
|
-
|
116
|
-
it 'facet dbnode security groups are right' do
|
117
|
-
gg = @cluster.facet(:dbnode).security_groups
|
118
|
-
gg.keys.sort.should == ["default", "webserver_demo", "webserver_demo-dbnode", "webserver_demo-redis_client", "nfs_client", "ssh"]
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'facet esnode security groups are right' do
|
122
|
-
gg = @cluster.facet(:esnode).security_groups
|
123
|
-
gg.keys.sort.should == ["default", "webserver_demo", "webserver_demo-esnode", "webserver_demo-redis_server", "nfs_client", "ssh"]
|
124
|
-
gg['webserver_demo-redis_server'][:name].should == "webserver_demo-redis_server"
|
125
|
-
gg['webserver_demo-redis_server'][:description].should == "ironfan generated group webserver_demo-redis_server"
|
126
|
-
gg['webserver_demo-redis_server'].group_authorizations.should == [['webserver_demo-redis_client', nil]]
|
127
|
-
end
|
128
|
-
|
129
|
-
it 'has servers' do
|
130
|
-
@cluster.servers.map(&:fullname).should == [
|
131
|
-
"webserver_demo-dbnode-0", "webserver_demo-dbnode-1",
|
132
|
-
"webserver_demo-esnode-0",
|
133
|
-
"webserver_demo-webnode-0", "webserver_demo-webnode-1", "webserver_demo-webnode-2", "webserver_demo-webnode-3", "webserver_demo-webnode-4", "webserver_demo-webnode-5"
|
134
|
-
]
|
135
|
-
end
|
136
|
-
|
137
|
-
describe 'resolving servers gets right' do
|
138
|
-
before do
|
139
|
-
@server = @cluster.slice(:webnode, 5).first
|
140
|
-
@server.cloud.stub!(:validation_key).and_return("I_AM_VALID")
|
141
|
-
@server.resolve!
|
142
|
-
end
|
143
|
-
|
144
|
-
it 'attributes' do
|
145
|
-
@server.to_hash.should == {
|
146
|
-
:name => 'webserver_demo-webnode-5',
|
147
|
-
:run_list => ["role[base_role]", "role[chef_client]", "role[ssh]", "role[nfs_client]", "role[big_package]", "role[webserver_demo_cluster]", "role[nginx]", "role[redis_client]", "role[mysql_client]", "role[elasticsearch_client]", "role[awesome_website]", "role[webserver_demo_webnode]"],
|
148
|
-
:instances => 6,
|
149
|
-
:chef_attributes => {
|
150
|
-
:split_testing => {:group=>"B"},
|
151
|
-
:webnode_count => 6,
|
152
|
-
:node_name => "webserver_demo-webnode-5",
|
153
|
-
:cluster_name => :webserver_demo, :facet_name => :webnode, :facet_index => 5,
|
154
|
-
},
|
155
|
-
}
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'security groups' do
|
159
|
-
@server.security_groups.keys.sort.should == ['default', 'webserver_demo', 'webserver_demo-awesome_website', 'webserver_demo-redis_client', 'webserver_demo-webnode', 'nfs_client', 'ssh']
|
160
|
-
end
|
161
|
-
it 'run list' do
|
162
|
-
@server.run_list.should == ["role[base_role]", "role[chef_client]", "role[ssh]", "role[nfs_client]", "role[big_package]", "role[webserver_demo_cluster]", "role[nginx]", "role[redis_client]", "role[mysql_client]", "role[elasticsearch_client]", "role[awesome_website]", "role[webserver_demo_webnode]"]
|
163
|
-
end
|
164
|
-
|
165
|
-
it 'user_data' do
|
166
|
-
@server.cloud.user_data.should == {
|
167
|
-
"chef_server" => "https://api.opscode.com/organizations/infochimps",
|
168
|
-
"validation_client_name" => "chef-validator",
|
169
|
-
"validation_key" => "I_AM_VALID",
|
170
|
-
}
|
171
|
-
end
|
172
|
-
|
173
|
-
it 'cloud settings' do
|
174
|
-
hsh = @server.cloud.to_hash
|
175
|
-
hsh.delete(:security_groups)
|
176
|
-
hsh.delete(:user_data)
|
177
|
-
hsh.should == {
|
178
|
-
:availability_zones => ["us-east-1c"],
|
179
|
-
:region => "us-east-1",
|
180
|
-
:flavor => "t1.micro",
|
181
|
-
:image_name => "maverick",
|
182
|
-
:backing => "ebs",
|
183
|
-
:disable_api_termination => false,
|
184
|
-
:public_ip => false,
|
185
|
-
:bootstrap_distro => "ubuntu10.04-ironfan",
|
186
|
-
:keypair => :webserver_demo,
|
187
|
-
}
|
188
|
-
end
|
189
|
-
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|