ironfan 3.1.7 → 3.2.2
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/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
|