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
@@ -1,169 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
https://github.com/acrmp/chefspec
|
4
|
-
|
5
|
-
|
6
|
-
pre-testing -- converge machine
|
7
|
-
https://github.com/acrmp/chefspec
|
8
|
-
|
9
|
-
http://wiki.opscode.com/display/chef/Knife#Knife-test
|
10
|
-
|
11
|
-
benchmarks
|
12
|
-
|
13
|
-
bonnie++
|
14
|
-
hdparm -t
|
15
|
-
iozone
|
16
|
-
|
17
|
-
|
18
|
-
in-machine
|
19
|
-
|
20
|
-
* x ports on x interfaces open
|
21
|
-
* daemon is running
|
22
|
-
* file exists and has string
|
23
|
-
|
24
|
-
* log file is accumulating lines at rate X
|
25
|
-
* script x runs successfully
|
26
|
-
|
27
|
-
in-chef
|
28
|
-
|
29
|
-
* runlist is X
|
30
|
-
* chef attribute X should be Y
|
31
|
-
|
32
|
-
meta
|
33
|
-
|
34
|
-
* chef run was idempotent
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
__________________________________________________________________________
|
41
|
-
|
42
|
-
## Notes from around the web
|
43
|
-
|
44
|
-
|
45
|
-
* ...
|
46
|
-
|
47
|
-
> I'm thinking that the useful thing to test is NOT did chef install
|
48
|
-
> some package or setup a user, but rather after chef has run can I
|
49
|
-
> interact with the system as I would expect from an external
|
50
|
-
> perspective. For example:
|
51
|
-
>
|
52
|
-
> * Is the website accessible?
|
53
|
-
> * Are unused ports blocked?
|
54
|
-
> * When I send an email thorough the website does it end up in my inbox?
|
55
|
-
>
|
56
|
-
> Capybara (http://github.com/jnicklas/capybara) enforces this external
|
57
|
-
> perspective for webapp testing:
|
58
|
-
>
|
59
|
-
> "Access to session, request and response from the test is not
|
60
|
-
> possible. Maybe we’ll do response headers at some point in the future,
|
61
|
-
> but the others really shouldn’t be touched in an integration test
|
62
|
-
> anyway. "
|
63
|
-
>
|
64
|
-
> They only let you interact with screen elements that a user could
|
65
|
-
> interact with. It makes sense because the things that users interact
|
66
|
-
> with are what provides the business value
|
67
|
-
|
68
|
-
* Andrew Shafer < andrew@cloudscaling.com>
|
69
|
-
|
70
|
-
> Here's my thinking at this point... which could be wrong on every level.
|
71
|
-
> There is really no good way to TDD/BDD configuration management for several
|
72
|
-
> reasons:
|
73
|
-
> The recipes are already relatively declarative
|
74
|
-
> Mocking is useless because it may not reflect 'ground truth'
|
75
|
-
> The cycle times to really test convergence are relatively long
|
76
|
-
> Trying to test if a package is installed or not is testing the framework,
|
77
|
-
> not the recipe IMHO.
|
78
|
-
> I agree with the general sentiment that the functional service is the true
|
79
|
-
> test.
|
80
|
-
> I'm leaning towards 'testing' at that level, ideally with (a superset of?)
|
81
|
-
> what should be used for the production monitoring system.
|
82
|
-
> So the CI builds services, runs all the checks in test, green can go live
|
83
|
-
> and that's that.
|
84
|
-
|
85
|
-
|
86
|
-
* Jeremy Deininger < jeremy@rightscale.com>
|
87
|
-
|
88
|
-
> Thought I'd chime in with my experience testing system configuration code @ RightScale so far. What we've been building are integration style cucumber tests to run a cookbook through it's paces on all platforms and OSs that we support.
|
89
|
-
> First we use our API to spin up 'fresh' server clusters in EC2, one for every platform/OS (variation) that the cookbook will be supporting. The same could be done using other cloud APIs (anyone else doing this with VMware or etc?) Starting from scratch is important because of chef's idempotent nature.
|
90
|
-
> Then a cucumber test is run against every variation in parallel. The cucumber test runs a series of recipes on the cluster then uses what we call 'spot checks' to ensure the cluster is configured and functional. The spot checks are updated when we find a bug, to cover the bug. An example spot check would be, sshing to every server and checking the mysql.err file for bad strings.
|
91
|
-
> These high level integration tests are long running but have been very useful flushing out bugs.
|
92
|
-
> ...
|
93
|
-
> If you stop by the #rightscale channel on Freenode I'd be happy to embarrass myself by giving you a sneak peak at the features etc.. Would love to bounce ideas around and collaborate if you're interested. jeremydei on Freenode IRC
|
94
|
-
|
95
|
-
Ranjib Dey < ranjibd@th...s.com>
|
96
|
-
|
97
|
-
> So far, what we've done for testing is to use rspec for implementing tests. Here's an example:
|
98
|
-
>
|
99
|
-
> it "should respond on port 80" do
|
100
|
-
> lambda {
|
101
|
-
> TCPSocket.open(@server, 'http')
|
102
|
-
> }.should_not raise_error
|
103
|
-
> end
|
104
|
-
>
|
105
|
-
> Before running the tests, I have to manually bootstrap a node using knife. If my instance is the only one in its environment, the spec can find it using knife's search feature. The bootstrap takes a few minutes, and the 20 or so tests take about half a minute to run.
|
106
|
-
>
|
107
|
-
> While I'm iteratively developing a recipe, my work cycle is to edit source, upload a cookbook, and rerun chef-client (usually by rerunning knife boostrap, because the execution environment is different from invoking chef-client directly). This feels a bit slower than the cycle I'm used to when coding in Ruby because of the upload and bootstrap steps.
|
108
|
-
>
|
109
|
-
> I like rspec over other testing tools because of how it generates handy reports, such as this one, which displays an English list of covered test cases:
|
110
|
-
>
|
111
|
-
> $ rspec spec/ -f doc
|
112
|
-
>
|
113
|
-
> Foo role
|
114
|
-
> should respond on port 80
|
115
|
-
> should run memcached
|
116
|
-
> should accept memcached connections
|
117
|
-
> should have mysql account
|
118
|
-
> should allow passwordless sudo to user foo as user bar
|
119
|
-
> should allow passwordless sudo to root as a member of sysadmin
|
120
|
-
> should allow key login as user bar
|
121
|
-
> should mount homedirs on ext4, not NFS
|
122
|
-
> should rotate production.log
|
123
|
-
> should have baz as default vhost
|
124
|
-
> ...
|
125
|
-
>
|
126
|
-
> That sample report also gives a feel for sort of things we check. So far, nearly all of our checks are non-intrusive enough to run on a production system. (The exception is testing of local email delivery configurations.)
|
127
|
-
>
|
128
|
-
> Areas I'd love to see improvement:
|
129
|
-
>
|
130
|
-
> * Shortening the edit-upload-bootstrap-test cycle
|
131
|
-
> * Automating the bootstrap in the context of testing
|
132
|
-
> * Adding rspec primitives for Chef-related testing, which might
|
133
|
-
> include support for multiple platforms
|
134
|
-
>
|
135
|
-
> As an example of rspec primitives, instead of:
|
136
|
-
>
|
137
|
-
> it "should respond on port 80" do
|
138
|
-
> lambda {
|
139
|
-
> TCPSocket.open(@server, 'http')
|
140
|
-
> }.should_not raise_error
|
141
|
-
> end
|
142
|
-
>
|
143
|
-
> I'd like to write:
|
144
|
-
>
|
145
|
-
> it { should respond_on_port(80) }
|
146
|
-
>
|
147
|
-
> Rspec supports the the syntactic sugar; it's just a matter of adding some "matcher" plugins.
|
148
|
-
>
|
149
|
-
> How do other chef users verify that recipes work as expected?
|
150
|
-
>
|
151
|
-
> I'm not sure how applicable my approach is to opscode/cookbooks because it relies on having a specific server configuration and can only test a cookbook in the context of that single server. If we automated the boostrap step so it could be embedded into the rspec setup blocks, it would be possible to test a cookbook in several sample contexts, but the time required to setup each server instance might be prohibitive.
|
152
|
-
>
|
153
|
-
|
154
|
-
|
155
|
-
Andrew Crump < acrump@gmail.com>
|
156
|
-
|
157
|
-
> Integration tests that exercise the service you are building definitely give you the most bang for buck.
|
158
|
-
>
|
159
|
-
> We found the feedback cycle slow as well so I wrote chefspec which builds on RSpec to support unit testing cookbooks:
|
160
|
-
>
|
161
|
-
> https://github.com/acrmp/chefspec
|
162
|
-
>
|
163
|
-
> This basically fakes a convergence and allows you to make assertions about the created resources. At first glance Chef's declarative nature makes this less useful, but once you start introducing conditional execution I've found this to be a time saver.
|
164
|
-
>
|
165
|
-
> If you're looking to do CI (which you should be) converging twice goes some way to verifying that your recipes are idempotent.
|
166
|
-
>
|
167
|
-
> knife cookbook test is a useful first gate for CI:
|
168
|
-
>
|
169
|
-
> http://wiki.opscode.com/display/chef/Knife#Knife-test
|
@@ -1,249 +0,0 @@
|
|
1
|
-
# Cookbook event ordering
|
2
|
-
|
3
|
-
|
4
|
-
Most cookbooks have some set of the following
|
5
|
-
|
6
|
-
* base configuration
|
7
|
-
* announce component
|
8
|
-
- before discovery so it can be found
|
9
|
-
- currently done in converge stage -- some aspects might be incompletely defined?
|
10
|
-
|
11
|
-
* register apt repository if any
|
12
|
-
* create daemon user
|
13
|
-
- before directories so we can set permissions
|
14
|
-
- before package install so uid is stable
|
15
|
-
* install, as package, git deploy or install from release
|
16
|
-
- often have to halt legacy services -- config files don't exist
|
17
|
-
* create any remaining directories
|
18
|
-
- after package install so it has final say
|
19
|
-
* install plugins
|
20
|
-
- after directories, before config files
|
21
|
-
* define service
|
22
|
-
- before config file creation so we can notify
|
23
|
-
- can't start it yet because no config files
|
24
|
-
* discover component (own or other, same or other machines)
|
25
|
-
* write config files (notify service of changes)
|
26
|
-
- must follow everything so info is current
|
27
|
-
* register a minidash dashboard
|
28
|
-
* trigger start (or restart) of service
|
29
|
-
|
30
|
-
## Proposal:
|
31
|
-
|
32
|
-
kill `role`s, in favor of `stack`s.
|
33
|
-
|
34
|
-
A runlist is assembled in the following phases:
|
35
|
-
|
36
|
-
* `initial` configuration
|
37
|
-
* `before_install`
|
38
|
-
- `account`
|
39
|
-
* `install`
|
40
|
-
- `plugin` install
|
41
|
-
- `directories`
|
42
|
-
* `announcement`
|
43
|
-
- `service` definition
|
44
|
-
- `discovery`
|
45
|
-
* `commit`
|
46
|
-
- `config_files`: write config files to disk
|
47
|
-
* `finalize`
|
48
|
-
* `launch`
|
49
|
-
|
50
|
-
As you can see, most layers have semantic names (`plugin`, `user`, etc); if you name your recipe correctly, they will be assigned to the correct phase. Otherwise, you can attach them explicitly to a semantic or non-semantic phase.
|
51
|
-
|
52
|
-
elasticsearch_datanode component:
|
53
|
-
|
54
|
-
elasticsearch::default # initial
|
55
|
-
elasticsearch::install_from_release #install phase
|
56
|
-
elasticsearch::plugins # plugin phase
|
57
|
-
|
58
|
-
elasticsearch::server # service definition; includes announcement
|
59
|
-
elasticsearch::config_files # config_files; includes discovery
|
60
|
-
|
61
|
-
I'm not clear on how much the phases should be strictly broken out into one-recipe-per-phase.
|
62
|
-
|
63
|
-
It's also possible to instead define a chef resource that let you defer a block to a given phase from within a callback. It would be similar to a ruby block, but have more explicit timing. This may involve jacking around inside Chef, something we've avoided to now.
|
64
|
-
|
65
|
-
__________________________________________________________________________
|
66
|
-
|
67
|
-
Run List is
|
68
|
-
|
69
|
-
[role[systemwide], role[chef_client], role[ssh], role[nfs_client],
|
70
|
-
role[volumes], role[package_set], role[org_base], role[org_users],
|
71
|
-
|
72
|
-
role[hadoop],
|
73
|
-
role[hadoop_s3_keys],
|
74
|
-
role[cassandra_server], role[zookeeper_server],
|
75
|
-
role[flume_master], role[flume_agent],
|
76
|
-
role[ganglia_master],
|
77
|
-
role[ganglia_agent], role[hadoop_namenode], role[hadoop_datanode],
|
78
|
-
role[hadoop_jobtracker], role[hadoop_secondarynn], role[hadoop_tasktracker],
|
79
|
-
role[hbase_master], role[hbase_regionserver], role[hbase_stargate],
|
80
|
-
role[redis_server], role[mysql_client], role[redis_client],
|
81
|
-
role[cassandra_client], role[elasticsearch_client], role[jruby], role[pig],
|
82
|
-
recipe[ant], recipe[bluepill], recipe[boost], recipe[build-essential],
|
83
|
-
recipe[cron], recipe[git], recipe[hive], recipe[java::sun], recipe[jpackage],
|
84
|
-
recipe[jruby], recipe[nodejs], recipe[ntp], recipe[openssh], recipe[openssl],
|
85
|
-
recipe[rstats], recipe[runit], recipe[thrift], recipe[xfs], recipe[xml],
|
86
|
-
recipe[zabbix], recipe[zlib], recipe[apache2], recipe[nginx],
|
87
|
-
role[el_ridiculoso_cluster], role[el_ridiculoso_gordo], role[minidash],
|
88
|
-
role[org_final], recipe[hadoop_cluster::config_files], role[tuning]]
|
89
|
-
|
90
|
-
Run List expands to
|
91
|
-
|
92
|
-
build-essential, motd, zsh, emacs, ntp, nfs, nfs::client, xfs,
|
93
|
-
volumes::mount, volumes::resize, package_set,
|
94
|
-
|
95
|
-
hadoop_cluster,
|
96
|
-
hadoop_cluster::minidash,
|
97
|
-
|
98
|
-
cassandra, cassandra::install_from_release,
|
99
|
-
cassandra::autoconf, cassandra::server, cassandra::jna_support,
|
100
|
-
cassandra::config_files, zookeeper::default, zookeeper::server,
|
101
|
-
zookeeper::config_files, flume, flume::master, flume::agent,
|
102
|
-
flume::jruby_plugin, flume::hbase_sink_plugin, ganglia, ganglia::server,
|
103
|
-
ganglia::monitor,
|
104
|
-
|
105
|
-
hadoop_cluster::namenode,
|
106
|
-
hadoop_cluster::datanode,
|
107
|
-
hadoop_cluster::jobtracker,
|
108
|
-
hadoop_cluster::secondarynn,
|
109
|
-
hadoop_cluster::tasktracker,
|
110
|
-
|
111
|
-
zookeeper::client,
|
112
|
-
hbase::master,
|
113
|
-
hbase::minidash,
|
114
|
-
|
115
|
-
minidash::server,
|
116
|
-
hbase::regionserver,
|
117
|
-
hbase::stargate,
|
118
|
-
redis, redis::install_from_release, redis::server,
|
119
|
-
mysql, mysql::client,
|
120
|
-
cassandra::client, elasticsearch::default,
|
121
|
-
|
122
|
-
elasticsearch::install_from_release,
|
123
|
-
elasticsearch::plugins,
|
124
|
-
elasticsearch::client,
|
125
|
-
|
126
|
-
jruby, jruby::gems,
|
127
|
-
|
128
|
-
pig,
|
129
|
-
pig::install_from_package,
|
130
|
-
pig::piggybank,
|
131
|
-
pig::integration,
|
132
|
-
|
133
|
-
zookeeper,
|
134
|
-
ant, bluepill, boost, cron,
|
135
|
-
git, hive,
|
136
|
-
java::sun, jpackage, nodejs, openssh, openssl, rstats, runit,
|
137
|
-
thrift, xml, zabbix, zlib, apache2, nginx, hadoop_cluster::config_files,
|
138
|
-
tuning::default
|
139
|
-
|
140
|
-
|
141
|
-
From an actual run of el_ridiculoso-gordo:
|
142
|
-
|
143
|
-
2 nfs::client
|
144
|
-
1 java::sun
|
145
|
-
1 aws::default
|
146
|
-
5 build-essential::default
|
147
|
-
3 motd::default
|
148
|
-
2 zsh::default
|
149
|
-
1 emacs::default
|
150
|
-
8 ntp::default
|
151
|
-
1 nfs::default
|
152
|
-
2 nfs::client
|
153
|
-
3 xfs::default
|
154
|
-
46 package_set::default
|
155
|
-
4 java::sun
|
156
|
-
8 tuning::ubuntu
|
157
|
-
6 apt::default
|
158
|
-
1 hadoop_cluster::add_cloudera_repo
|
159
|
-
44 hadoop_cluster::default
|
160
|
-
4 minidash::default
|
161
|
-
2 /srv/chef/file_store/cookbooks/minidash/providers/dashboard.rb
|
162
|
-
1 hadoop_cluster::minidash
|
163
|
-
2 /srv/chef/file_store/cookbooks/minidash/providers/dashboard.rb
|
164
|
-
1 boost::default
|
165
|
-
2 python::package
|
166
|
-
2 python::pip
|
167
|
-
1 python::virtualenv
|
168
|
-
2 install_from::default
|
169
|
-
7 thrift::default
|
170
|
-
9 cassandra::default
|
171
|
-
1 cassandra::install_from_release
|
172
|
-
6 /srv/chef/file_store/cookbooks/install_from/providers/release.rb
|
173
|
-
3 cassandra::install_from_release
|
174
|
-
1 cassandra::bintools
|
175
|
-
3 runit::default
|
176
|
-
11 cassandra::server
|
177
|
-
2 cassandra::jna_support
|
178
|
-
2 cassandra::config_files
|
179
|
-
6 zookeeper::default
|
180
|
-
15 zookeeper::server
|
181
|
-
3 zookeeper::config_files
|
182
|
-
18 flume::default
|
183
|
-
2 flume::master
|
184
|
-
3 flume::agent
|
185
|
-
2 flume::jruby_plugin
|
186
|
-
1 flume::hbase_sink_plugin
|
187
|
-
21 ganglia::server
|
188
|
-
20 ganglia::monitor
|
189
|
-
13 hadoop_cluster::namenode
|
190
|
-
11 hadoop_cluster::datanode
|
191
|
-
11 hadoop_cluster::jobtracker
|
192
|
-
11 hadoop_cluster::secondarynn
|
193
|
-
11 hadoop_cluster::tasktracker
|
194
|
-
14 hbase::default
|
195
|
-
11 hbase::master
|
196
|
-
1 hbase::minidash
|
197
|
-
2 /srv/chef/file_store/cookbooks/minidash/providers/dashboard.rb
|
198
|
-
13 minidash::server
|
199
|
-
11 hbase::regionserver
|
200
|
-
10 hbase::stargate
|
201
|
-
2 redis::default
|
202
|
-
2 redis::install_from_release
|
203
|
-
2 redis::default
|
204
|
-
16 redis::server
|
205
|
-
3 mysql::client
|
206
|
-
1 aws::default
|
207
|
-
7 elasticsearch::default
|
208
|
-
1 elasticsearch::install_from_release
|
209
|
-
6 /srv/chef/file_store/cookbooks/install_from/providers/release.rb
|
210
|
-
2 elasticsearch::plugins
|
211
|
-
3 elasticsearch::client
|
212
|
-
3 elasticsearch::config
|
213
|
-
1 jruby::default
|
214
|
-
9 /srv/chef/file_store/cookbooks/install_from/providers/release.rb
|
215
|
-
7 jruby::default
|
216
|
-
18 jruby::gems
|
217
|
-
2 pig::install_from_package
|
218
|
-
5 pig::piggybank
|
219
|
-
8 pig::integration
|
220
|
-
6 zookeeper::default
|
221
|
-
3 ant::default
|
222
|
-
5 bluepill::default
|
223
|
-
2 cron::default
|
224
|
-
1 git::default
|
225
|
-
1 hive::default
|
226
|
-
2 nodejs::default
|
227
|
-
4 openssh::default
|
228
|
-
7 rstats::default
|
229
|
-
1 xml::default
|
230
|
-
11 zabbix::default
|
231
|
-
1 zlib::default
|
232
|
-
10 apache2::default
|
233
|
-
2 apache2::mod_status
|
234
|
-
2 apache2::mod_alias
|
235
|
-
1 apache2::mod_auth_basic
|
236
|
-
1 apache2::mod_authn_file
|
237
|
-
1 apache2::mod_authz_default
|
238
|
-
1 apache2::mod_authz_groupfile
|
239
|
-
1 apache2::mod_authz_host
|
240
|
-
1 apache2::mod_authz_user
|
241
|
-
2 apache2::mod_autoindex
|
242
|
-
2 apache2::mod_dir
|
243
|
-
1 apache2::mod_env
|
244
|
-
2 apache2::mod_mime
|
245
|
-
2 apache2::mod_negotiation
|
246
|
-
2 apache2::mod_setenvif
|
247
|
-
1 apache2::default
|
248
|
-
8 nginx::default
|
249
|
-
9 hadoop_cluster::config_files
|
@@ -1,59 +0,0 @@
|
|
1
|
-
@temujin9 has proposed, and it's a good propose, that there should exist such a thing as an 'integration cookbook'.
|
2
|
-
|
3
|
-
The hadoop_cluster cookbook should describe the hadoop_cluster, the ganglia cookbook ganglia, and the zookeeper cookbook zookeeper. Each should provide hooks that are neighborly but not exhibitionist, but should mind its own business.
|
4
|
-
|
5
|
-
The job of tying those components together should belong to a separate concern. It should know how and when to copy hbase jars into the pig home dir, or what cluster service_provide'r a redis client should reference.
|
6
|
-
|
7
|
-
## Practical implications
|
8
|
-
|
9
|
-
* I'm going to revert out the `node[:zookeeper][:cluster_name]` attributes -- services should always announce under their cluster.
|
10
|
-
|
11
|
-
* Until we figure out how and when to separate integrations, I'm going to isolate entanglements into their own recipes within cookbooks: so, the ganglia part of hadoop will become `ganglia_integration` or somesuch.
|
12
|
-
|
13
|
-
## Example integrations
|
14
|
-
|
15
|
-
### Copying jars
|
16
|
-
|
17
|
-
Pig needs jars from hbase and zookeeper. They should announce they have jars; pig should announce its home directory; the integration should decide how and where to copy the jars.
|
18
|
-
|
19
|
-
### Reference a service
|
20
|
-
|
21
|
-
Right now in several places we have attributes like `node[:zookeeper][:cluster_name]`, used to specify the cluster that provides_service zookeeper.
|
22
|
-
|
23
|
-
* Server recipes should never use `node[:zookeeper][:cluster_name]` -- they should always announce under their native cluster. (I'd kinda like to give `provides_service` some sugar to assume the cluster name, but need to find something backwards-compatible to use)
|
24
|
-
|
25
|
-
* Need to take a better survey of usage among clients to determine how to do this.
|
26
|
-
|
27
|
-
* cases:
|
28
|
-
- hbase cookbook refs: hadoop, zookeeper, ganglia
|
29
|
-
- flume cookbook refs: zookeeper, ganglia.
|
30
|
-
- flume agents may reference several different flume provides_service'rs
|
31
|
-
- API using two different elasticsearch clusters
|
32
|
-
|
33
|
-
### Logging, monitoring
|
34
|
-
|
35
|
-
* tell flume you have logs to pick up
|
36
|
-
* tell ganglia to monitor you
|
37
|
-
|
38
|
-
### Service Dashboard
|
39
|
-
|
40
|
-
Let everything with a dashboard say so, and then let one resource create a page that links to each.
|
41
|
-
|
42
|
-
|
43
|
-
________________________
|
44
|
-
|
45
|
-
These are still forming, ideas welcome.
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
Sometimes we want
|
51
|
-
|
52
|
-
* if there are volumes marked for 'mysql-table_data', use that; otherwise, the 'persistent' datastore, if any; else the 'bulk' datastore, if any; else the 'fallback' datastore (which is guaranteed to exist).
|
53
|
-
|
54
|
-
* IP addresses (or hostnames):
|
55
|
-
- `[:private_ip, :public_ip]`
|
56
|
-
- `[:private_ip]`
|
57
|
-
- `:primary_ip`
|
58
|
-
|
59
|
-
* .
|
@@ -1,69 +0,0 @@
|
|
1
|
-
## Compute Costs
|
2
|
-
|
3
|
-
|
4
|
-
code $/mo $/day $/hr CPU/$ Mem/$ mem cpu cores cpcore storage bits IO type name
|
5
|
-
t1.micro 15 0.48 .02 13 13 0.61 0.25 0.25 1 0 32 Low Micro Micro
|
6
|
-
m1.small 58 1.92 .08 13 21 1.7 1 1 1 160 32 Moderate Standard Small
|
7
|
-
m1.medium 116 3.84 .165 13 13 3.75 2 2 1 410 32 Moderate Standard Medium
|
8
|
-
c1.medium 120 3.96 .17 30 10 1.7 5 2 2.5 350 32 Moderate High-CPU Medium
|
9
|
-
m1.large 232 7.68 .32 13 23 7.5 4 2 2 850 64 High Standard Large
|
10
|
-
m2.xlarge 327 10.80 .45 14 38 17.1 6.5 2 3.25 420 64 Moderate High-Memory Extra Large
|
11
|
-
m1.xlarge 465 15.36 .64 13 23 15 8 4 2 1690 64 High Standard Extra Large
|
12
|
-
c1.xlarge 479 15.84 .66 30 11 7 20 8 2.5 1690 64 High High-CPU Extra Large
|
13
|
-
m2.2xlarge 653 21.60 .90 14 38 34.2 13 4 3.25 850 64 High High-Memory Double Extra Large
|
14
|
-
cc1.4xlarge 944 31.20 1.30 26 18 23 33.5 2 16.75 1690 64 10GB Compute Quadruple Extra Large
|
15
|
-
m2.4xlarge 1307 43.20 1.80 14 38 68.4 26 8 3.25 1690 64 High High-Memory Quadruple Extra Large
|
16
|
-
cg1.4xlarge 1525 50.40 2.10 16 10 22 33.5 2 16.75 1690 64 10GB Cluster GPU Quadruple Extra Large
|
17
|
-
cc2.8xlarge 1742 57.60 2.40 37 25 60.5 88 2 44 3370 64 10GB Compute Eight Extra Large
|
18
|
-
|
19
|
-
dummy header ln 15 0.48 0.02 12345 12345 0.61 0.25 0.25 1.00 6712345 32123 Low Micro Micro
|
20
|
-
|
21
|
-
|
22
|
-
## Storage Costs
|
23
|
-
|
24
|
-
$/GB..mo $/GB.mo $/Mio
|
25
|
-
EBS Volume $0.10
|
26
|
-
EBS I/O $0.10
|
27
|
-
EBS Snapshot S3 $0.083
|
28
|
-
|
29
|
-
Std $/GB.mo Red.Red. $/GB.mo
|
30
|
-
S3 1st tb $0.125 $0.093
|
31
|
-
S3 next 49tb $0.110 $0.083
|
32
|
-
S3 next 450tb $0.095 $0.073
|
33
|
-
|
34
|
-
### Storing 1TB data
|
35
|
-
|
36
|
-
(Cost of storage, neglecting I/O costs, and assuming the ratio of EBS volume size to snapshot size is as given)
|
37
|
-
|
38
|
-
* http://aws.amazon.com/ec2/instance-types/
|
39
|
-
* http://aws.amazon.com/ec2/#pricing
|
40
|
-
|
41
|
-
### How much does EBS cost?
|
42
|
-
|
43
|
-
The costs of EBS will be similar to the pricing structure of data storage on S3. There are three types of costs associated with EBS.
|
44
|
-
|
45
|
-
Storage Cost + Transaction Cost + S3 Snapshot Cost = Total Cost of EBS
|
46
|
-
|
47
|
-
NOTE: For current pricing information, be sure to check Amazon EC2 Pricing.
|
48
|
-
|
49
|
-
#### Storage Costs
|
50
|
-
|
51
|
-
The cost of an EBS Volume is $0.10/GB per month. You are responsible for paying for the amount of disk space that you reserve, not for the amount of the disk space that you actually use. If you reserve a 1TB volume, but only use 1GB, you will be paying for 1TB.
|
52
|
-
* $0.10/GB per month of provisioned storage
|
53
|
-
* $0.10/GB per 1 million I/O requests
|
54
|
-
|
55
|
-
#### Transaction Costs
|
56
|
-
|
57
|
-
In addition to the storage cost for EBS Volumes, you will also be charged for I/O transactions. The cost is $0.10 per million I/O transactions, where one transaction is equivalent to one read or write. This number may be smaller than the actual number of transactions performed by your application because of the Linux cache for all file systems.
|
58
|
-
$0.10 per 1 million I/O requests
|
59
|
-
|
60
|
-
#### S3 Snapshot Costs
|
61
|
-
|
62
|
-
Snapshot costs are compressed and based on altered blocks from the previous snapshot backup. Files that have altered blocks on the disk and then been deleted will add cost to the Snapshots for example. Remember, snapshots are at the data block level.
|
63
|
-
$0.15 per GB-month of data stored
|
64
|
-
$0.01 per 1,000 PUT requests (when saving a snapshot)
|
65
|
-
$0.01 per 10,000 GET requests (when loading a snapshot)
|
66
|
-
|
67
|
-
NOTE: Payment charges stop the moment you delete a volume. If you delete a volume and the status appears as "deleting" for an extended period of time, you will not be charged for the time needed to complete the deletion.
|
68
|
-
|
69
|
-
|
Binary file
|
data/notes/homebase-layout.txt
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
Ironfan Homebase Layout
|
2
|
-
=======================
|
3
|
-
|
4
|
-
Your Chef Homebase contains several directories, and each contains a README.md file describing its purpose and use in greater detail.
|
5
|
-
|
6
|
-
This directory structure came out of a *lot* of trial and error, and is working very well where many others didn't. This homebase makes it easy to pull in third-party pantries (cookbook collections) and track upstream changes without being locked in.
|
7
|
-
|
8
|
-
## Main Directories
|
9
|
-
|
10
|
-
The main assets you'll use are:
|
11
|
-
|
12
|
-
* `clusters/` - Clusters fully describe your machines, from its construction ('an 8-core machine on the Amazon EC2 cloud') to its roles ('install Cassandra, Ganglia for monitoring, and silverware to manage its logs and firewall').
|
13
|
-
* `cookbooks/` - Cookbooks you download or create. Cookbooks install components, for example `cassandra` or `java`.
|
14
|
-
* `roles/` - Roles organize cookbooks and attribute overrides to describe the specific composition of your system. For example, you install Cassandra attaching the `cassandra_server` role to your machine. (.rb or .json files)
|
15
|
-
|
16
|
-
These folders hold supporting files. You're less likely to visit here regularly.
|
17
|
-
|
18
|
-
* `knife/` - Chef and cloud configuration, and their myriad attendant credentials.
|
19
|
-
* `environments/` - Organization-wide attribute values. (.json or .rb files)
|
20
|
-
* `data_bags/` - Data bags are an occasionally-useful alternative to node metadata for distributing information to your machines. (.json files)
|
21
|
-
* `certificates/` - SSL certificates generated by `rake ssl_cert` live here.
|
22
|
-
* `tasks/` - Rake tasks for common administrative tasks.
|
23
|
-
* `vendor/` - cookbooks are checked out to `vendor`; symlinks in the `cookbooks/` directory select which ones will be deployed to chef server. The vendor directory comes with the Ironfan, Opscode and (should you be a lucky customer) Ironfan Enterprise chef pantries.
|
24
|
-
* `notes/` - a submoduled copy of the [ironfan wiki](http://github.com/infochimps-labs/ironfan/wiki`
|
25
|
-
|
26
|
-
## Directory setup
|
27
|
-
|
28
|
-
The core structure of the homebase is as follows ("├─*" means "git submodule'd"):
|
29
|
-
|
30
|
-
homebase
|
31
|
-
├── clusters - cluster definition files
|
32
|
-
│ └── ( clusters )
|
33
|
-
├── cookbooks - symlinks to cookbooks
|
34
|
-
│ ├── @vendor/ironfan-pantry/cookbooks/...
|
35
|
-
│ ├── @vendor/opscode/cookbooks/...
|
36
|
-
│ └── @vendor/org-pantry/cookbooks/...
|
37
|
-
├── environments - environment definition files
|
38
|
-
│ └── ( environments )
|
39
|
-
├── data_bags - symlinks to data_bags
|
40
|
-
│ ├── @vendor/ironfan-pantry/roles/...
|
41
|
-
│ └── @vendor/org-pantry/roles/...
|
42
|
-
├── roles - symlinks to roles
|
43
|
-
│ ├── @vendor/ironfan-pantry/roles/...
|
44
|
-
│ └── @vendor/org-pantry/roles/...
|
45
|
-
├── vendor
|
46
|
-
│ ├─* ironfan-pantry - git submodule of https://github.com/infochimps-labs/ironfan-pantry
|
47
|
-
│ │ ├── cookbooks
|
48
|
-
│ │ ├── data_bags
|
49
|
-
│ │ ├── roles
|
50
|
-
│ │ └── tasks
|
51
|
-
│ ├─* ironfan-enterprise - git submodule of ironfan-enterprise, if you're a lucky customer
|
52
|
-
│ │ ├── cookbooks
|
53
|
-
│ │ ├── data_bags
|
54
|
-
│ │ ├── roles
|
55
|
-
│ │ └── tasks
|
56
|
-
│ ├── opscode
|
57
|
-
│ │ └─* cookbooks - git submodule of https://github.com/infochimps-labs/opscode_cookbooks; itself a closely-tracked fork of https://github.com/opscode/cookbooks
|
58
|
-
│ └── org-pantry - organization specific roles, cookbooks, etc.
|
59
|
-
│ ├── cookbooks
|
60
|
-
│ ├── data_bags
|
61
|
-
│ ├── roles
|
62
|
-
│ └── tasks
|
63
|
-
├── knife - credentials (see below)
|
64
|
-
├── certificates
|
65
|
-
├── config
|
66
|
-
├─* notes
|
67
|
-
├── tasks
|
68
|
-
└── vagrants - vagrant files (when using ironfan-ci)
|
69
|
-
|
70
|
-
The `vendor/opscode/cookbooks` and `vendor/ironfan-pantry` directories are actually [git submodules](http://help.github.com/submodules/). This makes it easy to track upstream changes in each collection while still maintaining your own modifications.
|
71
|
-
|
72
|
-
We recommend you place your cookbooks in `vendor/org-pantry`. If you have cookbooks &c from other pantries that have significant changes, you can duplicate it into this `vendor/org-pantry` and simply change the symlink in homebase/cookbooks/.
|
73
|
-
|
74
|
-
## Knife dir setup
|
75
|
-
|
76
|
-
We recommend you version your credentials directory separately from your homebase. You will want to place it under version control, but you should not place it into a central git repository -- this holds the keys to the kingdom.
|
77
|
-
|
78
|
-
We exclude the chef user key (`(user).pem`) and user-specific knife settings (`knife-user-(user).rb`) from the repo as well. Each user has their own revokable client key, and their own cloud credentials set, and those live nowhere but their own computers.
|
79
|
-
|
80
|
-
knife/
|
81
|
-
├── knife.rb
|
82
|
-
├── credentials -> (organization)-credentials
|
83
|
-
├── (organization)-credentials
|
84
|
-
│ ├── knife-org.rb - org-specific stuff, and cloud assets (elastic IPs, AMI image ids, etc)
|
85
|
-
│ ├── (user).pem - your chef client key *GITIGNORED*
|
86
|
-
│ ├── knife-user-(user).rb - your user-specific knife customizations *GITIGNORED*
|
87
|
-
│ ├── (organization)-validator.pem- chef validator key, used to create client keys
|
88
|
-
│ ├── client_keys
|
89
|
-
│ │ └── (transient client keys) - you can delete these at will; only useful if you're debugging a bad bootstrap
|
90
|
-
│ ├── ec2_keys
|
91
|
-
│ │ └── (transient client keys) - ssh keys for cloud machines (in EC2 parlance, the private half of your keypair)
|
92
|
-
│ ├── certificates
|
93
|
-
│ ├── data_bag_keys
|
94
|
-
│ └── ec2_certs
|
95
|
-
├── bootstrap - knife cluster bootstrap scripts
|
96
|
-
├── plugins
|
97
|
-
│ └── knife
|
98
|
-
│ └── (knife plugins) - knife plugins
|
99
|
-
└── .gitignore - make sure not to version the secret/user-specific stuff (*-keypairs, *-credentials.rb, knife-user-*.rb)
|
100
|
-
|
101
|
-
|
102
|
-
(You can safely ignore the directories above that aren't annotated; they're useful in certain advanced contexts but not immediately)
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# Ironfan Knife Commands
|
2
|
-
|
3
|
-
Available cluster subcommands: (for details, `knife SUB-COMMAND --help`)
|
4
|
-
|
5
|
-
knife cluster list (options) - show available clusters
|
6
|
-
knife cluster bootstrap CLUSTER-[FACET-[INDEXES]] (options) - bootstrap all servers described by given cluster slice
|
7
|
-
knife cluster kick CLUSTER-[FACET-[INDEXES]] (options) - start a run of chef-client on each server, tailing the logs and exiting when the run completes.
|
8
|
-
knife cluster kill CLUSTER-[FACET-[INDEXES]] (options) - kill all servers described by given cluster slice
|
9
|
-
knife cluster launch CLUSTER-[FACET-[INDEXES]] (options) - Creates chef node and chef apiclient, pre-populates chef node, and instantiates in parallel their cloud machines. With --bootstrap flag, will ssh in to machines as they become ready and launch the bootstrap process
|
10
|
-
knife cluster proxy CLUSTER-[FACET-[INDEXES]] (options) - Runs the ssh command to open a SOCKS proxy to the given host, and writes a PAC (automatic proxy config) file to /tmp/ironfan_proxy-YOURNAME.pac. Only the first host is used, even if multiple match.
|
11
|
-
knife cluster show CLUSTER-[FACET-[INDEXES]] (options) - a helpful display of cluster's cloud and chef state
|
12
|
-
knife cluster ssh CLUSTER-[FACET-[INDEXES]] COMMAND (options) - run an interactive ssh session, or execuse the given command, across a cluster slice
|
13
|
-
knife cluster start CLUSTER-[FACET-[INDEXES]] (options) - start all servers described by given cluster slice
|
14
|
-
knife cluster stop CLUSTER-[FACET-[INDEXES]] (options) - stop all servers described by given cluster slice
|
15
|
-
knife cluster sync CLUSTER-[FACET-[INDEXES]] (options) - Update chef server and cloud machines with current cluster definition
|
16
|
-
knife cluster vagrant CMD CLUSTER-[FACET-[INDEXES]] (options) - runs the given command against a vagrant environment created from your cluster definition. EARLY, use at your own risk
|
17
|
-
|
18
|
-
|