ironfan 3.1.7 → 3.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +11 -0
- data/Gemfile +15 -12
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/config/ubuntu10.04-ironfan.erb +10 -0
- data/config/ubuntu11.10-ironfan.erb +10 -0
- data/ironfan.gemspec +29 -54
- data/lib/chef/knife/bootstrap/centos6.2-ironfan.erb +10 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-ironfan.erb +10 -0
- data/lib/chef/knife/bootstrap/ubuntu11.10-ironfan.erb +10 -0
- data/lib/chef/knife/cluster_kick.rb +7 -2
- data/lib/chef/knife/cluster_launch.rb +3 -0
- data/lib/chef/knife/cluster_ssh.rb +3 -3
- data/lib/chef/knife/ironfan_knife_common.rb +21 -0
- data/lib/chef/knife/ironfan_script.rb +2 -0
- data/lib/ironfan/chef_layer.rb +9 -9
- data/lib/ironfan/cloud.rb +232 -360
- data/lib/ironfan/cluster.rb +3 -3
- data/lib/ironfan/compute.rb +26 -40
- data/lib/ironfan/deprecated.rb +45 -10
- data/lib/ironfan/discovery.rb +1 -1
- data/lib/ironfan/dsl_builder.rb +99 -0
- data/lib/ironfan/facet.rb +2 -3
- data/lib/ironfan/fog_layer.rb +14 -10
- data/lib/ironfan/private_key.rb +1 -1
- data/lib/ironfan/security_group.rb +46 -44
- data/lib/ironfan/server.rb +26 -52
- data/lib/ironfan/server_slice.rb +13 -19
- data/lib/ironfan/volume.rb +47 -59
- data/lib/ironfan.rb +5 -4
- metadata +116 -122
- data/lib/ironfan/dsl_object.rb +0 -124
- data/notes/Backup of ec2-pricing_and_capacity.numbers +0 -0
- data/notes/Home.md +0 -45
- data/notes/INSTALL-cloud_setup.md +0 -103
- data/notes/INSTALL.md +0 -134
- data/notes/Ironfan-Roadmap.md +0 -70
- data/notes/advanced-superpowers.md +0 -16
- data/notes/aws_servers.jpg +0 -0
- data/notes/aws_user_key.png +0 -0
- data/notes/cookbook-versioning.md +0 -11
- data/notes/core_concepts.md +0 -200
- data/notes/declaring_volumes.md +0 -3
- data/notes/design_notes-aspect_oriented_devops.md +0 -36
- data/notes/design_notes-ci_testing.md +0 -169
- data/notes/design_notes-cookbook_event_ordering.md +0 -249
- data/notes/design_notes-meta_discovery.md +0 -59
- data/notes/ec2-pricing_and_capacity.md +0 -69
- data/notes/ec2-pricing_and_capacity.numbers +0 -0
- data/notes/homebase-layout.txt +0 -102
- data/notes/knife-cluster-commands.md +0 -18
- data/notes/named-cloud-objects.md +0 -11
- data/notes/opscode_org_key.png +0 -0
- data/notes/opscode_user_key.png +0 -0
- data/notes/philosophy.md +0 -13
- data/notes/rake_tasks.md +0 -24
- data/notes/renamed-recipes.txt +0 -142
- data/notes/silverware.md +0 -85
- data/notes/style_guide.md +0 -300
- data/notes/tips_and_troubleshooting.md +0 -92
- data/notes/version-3_2.md +0 -273
- data/notes/walkthrough-hadoop.md +0 -168
- data/notes/walkthrough-web.md +0 -166
data/lib/ironfan/server_slice.rb
CHANGED
@@ -5,32 +5,26 @@ module Ironfan
|
|
5
5
|
# The idea is we want to be able to smoothly roll up settings
|
6
6
|
#
|
7
7
|
#
|
8
|
-
class ServerSlice < Ironfan::
|
9
|
-
|
8
|
+
class ServerSlice < Ironfan::DslBuilderCollection
|
9
|
+
attr_accessor :name
|
10
|
+
attr_accessor :cluster
|
10
11
|
|
11
12
|
def initialize cluster, servers
|
13
|
+
@item_type = Ironfan::Server
|
14
|
+
@key_method = :name
|
12
15
|
super()
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
+
self.name = "#{cluster.name} slice"
|
17
|
+
self.cluster = cluster
|
18
|
+
receive!(servers)
|
16
19
|
end
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
#
|
21
|
-
include Enumerable
|
22
|
-
def each(&block)
|
23
|
-
@servers.each(&block)
|
24
|
-
end
|
25
|
-
def length
|
26
|
-
@servers.length
|
27
|
-
end
|
28
|
-
def empty?
|
29
|
-
length == 0
|
21
|
+
def servers
|
22
|
+
@clxn.values
|
30
23
|
end
|
24
|
+
|
31
25
|
[:select, :find_all, :reject, :detect, :find, :drop_while].each do |method|
|
32
26
|
define_method(method) do |*args, &block|
|
33
|
-
ServerSlice.new cluster,
|
27
|
+
ServerSlice.new cluster, servers.send(method, *args, &block)
|
34
28
|
end
|
35
29
|
end
|
36
30
|
# true if slice contains a server with the given fullname (if arg is a
|
@@ -197,7 +191,7 @@ module Ironfan
|
|
197
191
|
hsh["State"] = "not running"
|
198
192
|
end
|
199
193
|
hsh['Volumes'] = []
|
200
|
-
svr.
|
194
|
+
svr.volumes.each_pair do |name, vol|
|
201
195
|
if vol.ephemeral_device? then next
|
202
196
|
elsif vol.volume_id then hsh['Volumes'] << vol.volume_id
|
203
197
|
elsif vol.create_at_launch? then hsh['Volumes'] << vol.snapshot_id
|
data/lib/ironfan/volume.rb
CHANGED
@@ -2,33 +2,31 @@ module Ironfan
|
|
2
2
|
#
|
3
3
|
# Internal or external storage
|
4
4
|
#
|
5
|
-
class Volume < Ironfan::
|
6
|
-
|
5
|
+
class Volume < Ironfan::DslBuilder
|
6
|
+
field :parent, String
|
7
7
|
attr_accessor :fog_volume
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
}
|
31
|
-
def self.defaults(hsh) VOLUME_DEFAULTS.merge(hsh) ; end
|
8
|
+
|
9
|
+
# mountable volume attributes
|
10
|
+
magic :device, String
|
11
|
+
magic :mount_point, String
|
12
|
+
magic :mount_options, String, :default => 'defaults,nouuid,noatime'
|
13
|
+
magic :fstype, String, :default => 'xfs'
|
14
|
+
magic :mount_dump, String
|
15
|
+
magic :mount_pass, String
|
16
|
+
magic :mountable, Whatever, :default => true
|
17
|
+
magic :formattable, Whatever, :default => false
|
18
|
+
magic :resizable, Whatever, :default => false
|
19
|
+
magic :in_raid, Whatever, :default => false
|
20
|
+
# cloud volume attributes
|
21
|
+
magic :attachable, Whatever, :default => :ebs
|
22
|
+
magic :create_at_launch, Whatever, :default => false
|
23
|
+
magic :volume_id, String
|
24
|
+
magic :snapshot_id, String
|
25
|
+
magic :size, String
|
26
|
+
magic :keep, Whatever, :default => true
|
27
|
+
magic :availability_zone, String
|
28
|
+
# arbitrary tags
|
29
|
+
magic :tags, Hash, :default => {}
|
32
30
|
|
33
31
|
# Snapshot for snapshot_name method.
|
34
32
|
# Set your own by adding
|
@@ -52,18 +50,14 @@ module Ironfan
|
|
52
50
|
# :tags => {}, :keep => true )
|
53
51
|
#
|
54
52
|
def initialize attrs={}
|
55
|
-
|
53
|
+
parent = attrs.delete(:owner)
|
56
54
|
super(attrs)
|
57
|
-
@settings[:tags] ||= {}
|
58
55
|
end
|
59
56
|
|
60
57
|
# human-readable description for logging messages and such
|
61
58
|
def desc
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
def defaults
|
66
|
-
self.configure(VOLUME_DEFAULTS)
|
59
|
+
container = parent.name rescue nil
|
60
|
+
"#{name} on #{container} (#{volume_id} @ #{device})"
|
67
61
|
end
|
68
62
|
|
69
63
|
def ephemeral_device?
|
@@ -94,11 +88,11 @@ module Ironfan
|
|
94
88
|
in_cloud? && fog_volume.server_id.present?
|
95
89
|
end
|
96
90
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
91
|
+
# def reverse_merge!(other_hsh)
|
92
|
+
# super(other_hsh)
|
93
|
+
# self.tags.reverse_merge!(other_hsh.tags) if other_hsh.respond_to?(:tags) && other_hsh.tags.present?
|
94
|
+
# self
|
95
|
+
# end
|
102
96
|
|
103
97
|
# An array of hashes with dorky-looking keys, just like Fog wants it.
|
104
98
|
def block_device_mapping
|
@@ -128,31 +122,25 @@ module Ironfan
|
|
128
122
|
# * http://stu.mp/2009/12/disk-io-and-throughput-benchmarks-on-amazons-ec2.html
|
129
123
|
#
|
130
124
|
class RaidGroup < Volume
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
125
|
+
# volumes that comprise this raid group
|
126
|
+
magic :sub_volumes, Array, :default => []
|
127
|
+
# RAID level (http://en.wikipedia.org/wiki/RAID#Standard_levels)
|
128
|
+
magic :level, String
|
129
|
+
# Raid chunk size (https://raid.wiki.kernel.org/articles/r/a/i/RAID_setup_cbb2.html)
|
130
|
+
magic :chunk, String
|
131
|
+
# read-ahead buffer
|
132
|
+
magic :read_ahead, String
|
133
|
+
|
134
|
+
# Overrides of Volume field defaults
|
135
|
+
magic :attachable, Whatever, :default => false
|
136
|
+
magic :formattable, Whatever, :default => true
|
137
|
+
magic :mount_options, String, :default => 'defaults,nobootwait,noatime,nouuid,comment=ironfan'
|
137
138
|
|
138
139
|
def desc
|
139
140
|
"#{name} on #{parent.fullname} (#{volume_id} @ #{device} from #{sub_volumes.join(',')})"
|
140
141
|
end
|
141
142
|
|
142
|
-
|
143
|
-
|
144
|
-
fstype 'xfs'
|
145
|
-
mount_options "defaults,nobootwait,noatime,nouuid,comment=ironfan"
|
146
|
-
attachable false
|
147
|
-
create_at_launch false
|
148
|
-
#
|
149
|
-
mountable true
|
150
|
-
resizable false
|
151
|
-
formattable true
|
152
|
-
#
|
153
|
-
in_raid false
|
154
|
-
#
|
155
|
-
sub_volumes []
|
156
|
-
end
|
143
|
+
# attr_reader :parent
|
144
|
+
attr_accessor :fog_volume
|
157
145
|
end
|
158
146
|
end
|
data/lib/ironfan.rb
CHANGED
@@ -5,11 +5,12 @@ require 'gorillib/metaprogramming/class_attribute'
|
|
5
5
|
require 'gorillib/hash/reverse_merge'
|
6
6
|
require 'gorillib/object/blank'
|
7
7
|
require 'gorillib/hash/compact'
|
8
|
+
require 'gorillib/builder'
|
8
9
|
require 'set'
|
9
10
|
|
10
|
-
require 'ironfan/
|
11
|
-
require 'ironfan/cloud'
|
11
|
+
require 'ironfan/dsl_builder'
|
12
12
|
require 'ironfan/security_group'
|
13
|
+
require 'ironfan/cloud'
|
13
14
|
require 'ironfan/compute' # base class for machine attributes
|
14
15
|
require 'ironfan/facet' # similar machines within a cluster
|
15
16
|
require 'ironfan/cluster' # group of machines with a common mission
|
@@ -70,8 +71,8 @@ module Ironfan
|
|
70
71
|
#
|
71
72
|
def self.cluster(name, attrs={}, &block)
|
72
73
|
name = name.to_sym
|
73
|
-
cl = ( self.clusters[name] ||= Ironfan::Cluster.new(name
|
74
|
-
cl.
|
74
|
+
cl = ( self.clusters[name] ||= Ironfan::Cluster.new(name) )
|
75
|
+
cl.receive!(attrs, &block)
|
75
76
|
cl
|
76
77
|
end
|
77
78
|
|
metadata
CHANGED
@@ -1,124 +1,148 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ironfan
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.7
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 3.2.2
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Infochimps
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2012-09-10 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: chef
|
16
|
-
requirement: &
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
21
22
|
version: 0.10.4
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
26
27
|
name: fog
|
27
|
-
requirement: &
|
28
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
29
|
none: false
|
29
|
-
requirements:
|
30
|
+
requirements:
|
30
31
|
- - ~>
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "1.2"
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
37
38
|
name: formatador
|
38
|
-
requirement: &
|
39
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
40
|
none: false
|
40
|
-
requirements:
|
41
|
+
requirements:
|
41
42
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version:
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "0.2"
|
44
45
|
type: :runtime
|
45
46
|
prerelease: false
|
46
|
-
version_requirements: *
|
47
|
-
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
48
49
|
name: gorillib
|
49
|
-
requirement: &
|
50
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
51
|
none: false
|
51
|
-
requirements:
|
52
|
+
requirements:
|
52
53
|
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.4.2
|
55
56
|
type: :runtime
|
56
57
|
prerelease: false
|
57
|
-
version_requirements: *
|
58
|
-
- !ruby/object:Gem::Dependency
|
58
|
+
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
59
60
|
name: bundler
|
60
|
-
requirement: &
|
61
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
61
62
|
none: false
|
62
|
-
requirements:
|
63
|
-
- -
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
version:
|
63
|
+
requirements:
|
64
|
+
- - ~>
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "1.1"
|
66
67
|
type: :development
|
67
68
|
prerelease: false
|
68
|
-
version_requirements: *
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
71
|
-
requirement: &
|
69
|
+
version_requirements: *id005
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rake
|
72
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
72
73
|
none: false
|
73
|
-
requirements:
|
74
|
-
- -
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version:
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: "0"
|
77
78
|
type: :development
|
78
79
|
prerelease: false
|
79
|
-
version_requirements: *
|
80
|
-
- !ruby/object:Gem::Dependency
|
80
|
+
version_requirements: *id006
|
81
|
+
- !ruby/object:Gem::Dependency
|
81
82
|
name: rspec
|
82
|
-
requirement: &
|
83
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
83
84
|
none: false
|
84
|
-
requirements:
|
85
|
+
requirements:
|
85
86
|
- - ~>
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version:
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: "2.8"
|
88
89
|
type: :development
|
89
90
|
prerelease: false
|
90
|
-
version_requirements: *
|
91
|
-
- !ruby/object:Gem::Dependency
|
91
|
+
version_requirements: *id007
|
92
|
+
- !ruby/object:Gem::Dependency
|
92
93
|
name: yard
|
93
|
-
requirement: &
|
94
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
94
95
|
none: false
|
95
|
-
requirements:
|
96
|
-
- -
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version:
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: "0.7"
|
99
100
|
type: :development
|
100
101
|
prerelease: false
|
101
|
-
version_requirements: *
|
102
|
-
- !ruby/object:Gem::Dependency
|
102
|
+
version_requirements: *id008
|
103
|
+
- !ruby/object:Gem::Dependency
|
103
104
|
name: redcarpet
|
104
|
-
requirement: &
|
105
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
105
106
|
none: false
|
106
|
-
requirements:
|
107
|
-
- -
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version:
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: "2.1"
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: *id009
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: oj
|
116
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: "1.2"
|
122
|
+
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: *id010
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: json
|
127
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: "0"
|
110
133
|
type: :development
|
111
134
|
prerelease: false
|
112
|
-
version_requirements: *
|
113
|
-
description: Ironfan allows you to orchestrate not just systems but clusters of machines.
|
114
|
-
It includes a powerful layer on top of knife and a collection of cloud cookbooks.
|
135
|
+
version_requirements: *id011
|
136
|
+
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.
|
115
137
|
email: coders@infochimps.com
|
116
138
|
executables: []
|
139
|
+
|
117
140
|
extensions: []
|
118
|
-
|
141
|
+
|
142
|
+
extra_rdoc_files:
|
119
143
|
- LICENSE.md
|
120
144
|
- README.md
|
121
|
-
files:
|
145
|
+
files:
|
122
146
|
- .gitignore
|
123
147
|
- .rspec
|
124
148
|
- .yardopts
|
@@ -164,7 +188,7 @@ files:
|
|
164
188
|
- lib/ironfan/compute.rb
|
165
189
|
- lib/ironfan/deprecated.rb
|
166
190
|
- lib/ironfan/discovery.rb
|
167
|
-
- lib/ironfan/
|
191
|
+
- lib/ironfan/dsl_builder.rb
|
168
192
|
- lib/ironfan/facet.rb
|
169
193
|
- lib/ironfan/fog_layer.rb
|
170
194
|
- lib/ironfan/private_key.rb
|
@@ -173,37 +197,6 @@ files:
|
|
173
197
|
- lib/ironfan/server.rb
|
174
198
|
- lib/ironfan/server_slice.rb
|
175
199
|
- lib/ironfan/volume.rb
|
176
|
-
- notes/Backup of ec2-pricing_and_capacity.numbers
|
177
|
-
- notes/Home.md
|
178
|
-
- notes/INSTALL-cloud_setup.md
|
179
|
-
- notes/INSTALL.md
|
180
|
-
- notes/Ironfan-Roadmap.md
|
181
|
-
- notes/advanced-superpowers.md
|
182
|
-
- notes/aws_servers.jpg
|
183
|
-
- notes/aws_user_key.png
|
184
|
-
- notes/cookbook-versioning.md
|
185
|
-
- notes/core_concepts.md
|
186
|
-
- notes/declaring_volumes.md
|
187
|
-
- notes/design_notes-aspect_oriented_devops.md
|
188
|
-
- notes/design_notes-ci_testing.md
|
189
|
-
- notes/design_notes-cookbook_event_ordering.md
|
190
|
-
- notes/design_notes-meta_discovery.md
|
191
|
-
- notes/ec2-pricing_and_capacity.md
|
192
|
-
- notes/ec2-pricing_and_capacity.numbers
|
193
|
-
- notes/homebase-layout.txt
|
194
|
-
- notes/knife-cluster-commands.md
|
195
|
-
- notes/named-cloud-objects.md
|
196
|
-
- notes/opscode_org_key.png
|
197
|
-
- notes/opscode_user_key.png
|
198
|
-
- notes/philosophy.md
|
199
|
-
- notes/rake_tasks.md
|
200
|
-
- notes/renamed-recipes.txt
|
201
|
-
- notes/silverware.md
|
202
|
-
- notes/style_guide.md
|
203
|
-
- notes/tips_and_troubleshooting.md
|
204
|
-
- notes/version-3_2.md
|
205
|
-
- notes/walkthrough-hadoop.md
|
206
|
-
- notes/walkthrough-web.md
|
207
200
|
- spec/ironfan/cluster_spec.rb
|
208
201
|
- spec/ironfan/facet_spec.rb
|
209
202
|
- spec/ironfan/server_slice_spec.rb
|
@@ -214,40 +207,41 @@ files:
|
|
214
207
|
- spec/test_config.rb
|
215
208
|
- tasks/chef_config.rake
|
216
209
|
homepage: http://infochimps.com/labs
|
217
|
-
licenses:
|
210
|
+
licenses:
|
218
211
|
- apachev2
|
219
212
|
post_install_message:
|
220
213
|
rdoc_options: []
|
221
|
-
|
214
|
+
|
215
|
+
require_paths:
|
222
216
|
- lib
|
223
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
217
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
224
218
|
none: false
|
225
|
-
requirements:
|
226
|
-
- -
|
227
|
-
- !ruby/object:Gem::Version
|
228
|
-
|
229
|
-
segments:
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
hash: 1629322618717092090
|
223
|
+
segments:
|
230
224
|
- 0
|
231
|
-
|
232
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
225
|
+
version: "0"
|
226
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
233
227
|
none: false
|
234
|
-
requirements:
|
235
|
-
- -
|
236
|
-
- !ruby/object:Gem::Version
|
237
|
-
version:
|
228
|
+
requirements:
|
229
|
+
- - ">="
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
version: "0"
|
238
232
|
requirements: []
|
233
|
+
|
239
234
|
rubyforge_project:
|
240
|
-
rubygems_version: 1.8.
|
235
|
+
rubygems_version: 1.8.24
|
241
236
|
signing_key:
|
242
237
|
specification_version: 3
|
243
|
-
summary: Ironfan allows you to orchestrate not just systems but clusters of machines.
|
244
|
-
|
245
|
-
|
238
|
+
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.
|
239
|
+
test_files:
|
240
|
+
- spec/ironfan_spec.rb
|
241
|
+
- spec/spec_helper/dummy_chef.rb
|
246
242
|
- spec/ironfan/cluster_spec.rb
|
247
|
-
- spec/ironfan/facet_spec.rb
|
248
243
|
- spec/ironfan/server_slice_spec.rb
|
249
244
|
- spec/ironfan/server_spec.rb
|
250
|
-
- spec/
|
251
|
-
- spec/spec_helper/dummy_chef.rb
|
245
|
+
- spec/ironfan/facet_spec.rb
|
252
246
|
- spec/spec_helper.rb
|
253
247
|
- spec/test_config.rb
|
data/lib/ironfan/dsl_object.rb
DELETED
@@ -1,124 +0,0 @@
|
|
1
|
-
Mash.class_eval do
|
2
|
-
def reverse_merge!(other_hash)
|
3
|
-
# stupid mash doesn't take a block arg, which breaks the implementation of
|
4
|
-
# reverse_merge!
|
5
|
-
other_hash.each_pair do |key, value|
|
6
|
-
key = convert_key(key)
|
7
|
-
regular_writer(key, convert_value(value)) unless has_key?(key)
|
8
|
-
end
|
9
|
-
self
|
10
|
-
end
|
11
|
-
def to_mash
|
12
|
-
self.dup
|
13
|
-
end unless method_defined?(:to_mash)
|
14
|
-
end
|
15
|
-
|
16
|
-
Hash.class_eval do
|
17
|
-
def to_mash
|
18
|
-
Mash.new(self)
|
19
|
-
end unless method_defined?(:to_mash)
|
20
|
-
end
|
21
|
-
|
22
|
-
module Ironfan
|
23
|
-
#
|
24
|
-
# Provides magic methods, defined with has_keys
|
25
|
-
#
|
26
|
-
# @example
|
27
|
-
# class Mom < Ironfan::DslObject
|
28
|
-
# has_keys(:college, :combat_boots, :fat, :so_fat)
|
29
|
-
# end
|
30
|
-
#
|
31
|
-
# class Person
|
32
|
-
# def momma &block
|
33
|
-
# @momma ||= Mom.new
|
34
|
-
# @momma.configure(&block) if block
|
35
|
-
# end
|
36
|
-
# end
|
37
|
-
#
|
38
|
-
# yo = Person.new
|
39
|
-
# yo.mamma.combat_boots :wears
|
40
|
-
# yo.momma do
|
41
|
-
# fat true
|
42
|
-
# so_fat 'When she sits around the house, she sits *AROUND* the house'
|
43
|
-
# end
|
44
|
-
#
|
45
|
-
class DslObject
|
46
|
-
class_attribute :keys
|
47
|
-
self.keys = []
|
48
|
-
|
49
|
-
def initialize(attrs={}, &block)
|
50
|
-
@settings = Mash.new
|
51
|
-
configure(attrs, &block)
|
52
|
-
end
|
53
|
-
|
54
|
-
#
|
55
|
-
# Defines DSL attributes
|
56
|
-
#
|
57
|
-
# @param [Array(String)] key_names DSL attribute names
|
58
|
-
#
|
59
|
-
# @example
|
60
|
-
# class Mom < Ironfan::DslObject
|
61
|
-
# has_keys(:fat, :so_fat)
|
62
|
-
# end
|
63
|
-
# yer_mom = Mom.new
|
64
|
-
# yer_mom.fat :quite
|
65
|
-
#
|
66
|
-
def self.has_keys(*key_names)
|
67
|
-
key_names.map!(&:to_sym)
|
68
|
-
self.keys += key_names
|
69
|
-
self.keys.uniq!
|
70
|
-
key_names.each do |key|
|
71
|
-
next if method_defined?(key)
|
72
|
-
define_method(key){|*args| set(key, *args) }
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
#
|
77
|
-
# Sets the DSL attribute, unless the given value is nil.
|
78
|
-
#
|
79
|
-
def set(key, val=nil)
|
80
|
-
@settings[key.to_s] = val unless val.nil?
|
81
|
-
@settings[key.to_s]
|
82
|
-
end
|
83
|
-
|
84
|
-
def to_hash
|
85
|
-
@settings.to_hash
|
86
|
-
end
|
87
|
-
|
88
|
-
def to_mash
|
89
|
-
@settings.dup
|
90
|
-
end
|
91
|
-
|
92
|
-
def to_s
|
93
|
-
"<#{self.class} #{to_hash.inspect}>"
|
94
|
-
end
|
95
|
-
|
96
|
-
def reverse_merge!(hsh)
|
97
|
-
@settings.reverse_merge!(hsh.to_hash)
|
98
|
-
end
|
99
|
-
|
100
|
-
def configure(hsh={}, &block)
|
101
|
-
@settings.merge!(hsh.to_hash)
|
102
|
-
instance_eval(&block) if block
|
103
|
-
self
|
104
|
-
end
|
105
|
-
|
106
|
-
# delegate to the knife ui presenter
|
107
|
-
def ui() Ironfan.ui ; end
|
108
|
-
# delegate to the knife ui presenter
|
109
|
-
def self.ui() Ironfan.ui ; end
|
110
|
-
|
111
|
-
def step(desc, *style)
|
112
|
-
ui.info(" #{"%-15s" % (name.to_s+":")}\t#{ui.color(desc.to_s, *style)}")
|
113
|
-
end
|
114
|
-
|
115
|
-
# helper method for bombing out of a script
|
116
|
-
def die(*args) Ironfan.die(*args) ; end
|
117
|
-
|
118
|
-
# helper method for turning exceptions into warnings
|
119
|
-
def safely(*args, &block) Ironfan.safely(*args, &block) ; end
|
120
|
-
|
121
|
-
# helper method for debugging only
|
122
|
-
def dump(*args) args.each{|arg| Chef::Log.debug( arg.inspect ) } end
|
123
|
-
end
|
124
|
-
end
|
Binary file
|