ironfan 4.3.4 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +7 -0
- data/ELB.md +121 -0
- data/Gemfile +1 -0
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/ironfan.gemspec +48 -3
- data/lib/chef/knife/cluster_launch.rb +5 -0
- data/lib/chef/knife/cluster_proxy.rb +3 -3
- data/lib/chef/knife/cluster_sync.rb +4 -0
- data/lib/chef/knife/ironfan_knife_common.rb +17 -6
- data/lib/chef/knife/ironfan_script.rb +29 -11
- data/lib/ironfan.rb +2 -2
- data/lib/ironfan/broker/computer.rb +8 -3
- data/lib/ironfan/dsl/ec2.rb +133 -2
- data/lib/ironfan/headers.rb +4 -0
- data/lib/ironfan/provider.rb +48 -3
- data/lib/ironfan/provider/ec2.rb +23 -8
- data/lib/ironfan/provider/ec2/elastic_load_balancer.rb +239 -0
- data/lib/ironfan/provider/ec2/iam_server_certificate.rb +101 -0
- data/lib/ironfan/provider/ec2/machine.rb +8 -0
- data/lib/ironfan/provider/ec2/security_group.rb +3 -5
- data/lib/ironfan/requirements.rb +2 -0
- data/notes/Home.md +45 -0
- data/notes/INSTALL-cloud_setup.md +103 -0
- data/notes/INSTALL.md +134 -0
- data/notes/Ironfan-Roadmap.md +70 -0
- data/notes/advanced-superpowers.md +16 -0
- data/notes/aws_servers.jpg +0 -0
- data/notes/aws_user_key.png +0 -0
- data/notes/cookbook-versioning.md +11 -0
- data/notes/core_concepts.md +200 -0
- data/notes/declaring_volumes.md +3 -0
- data/notes/design_notes-aspect_oriented_devops.md +36 -0
- data/notes/design_notes-ci_testing.md +169 -0
- data/notes/design_notes-cookbook_event_ordering.md +249 -0
- data/notes/design_notes-meta_discovery.md +59 -0
- data/notes/ec2-pricing_and_capacity.md +69 -0
- data/notes/ec2-pricing_and_capacity.numbers +0 -0
- data/notes/homebase-layout.txt +102 -0
- data/notes/knife-cluster-commands.md +18 -0
- data/notes/named-cloud-objects.md +11 -0
- data/notes/opscode_org_key.png +0 -0
- data/notes/opscode_user_key.png +0 -0
- data/notes/philosophy.md +13 -0
- data/notes/rake_tasks.md +24 -0
- data/notes/renamed-recipes.txt +142 -0
- data/notes/silverware.md +85 -0
- data/notes/style_guide.md +300 -0
- data/notes/tips_and_troubleshooting.md +92 -0
- data/notes/version-3_2.md +273 -0
- data/notes/walkthrough-hadoop.md +168 -0
- data/notes/walkthrough-web.md +166 -0
- data/spec/fixtures/ec2/elb/snakeoil.crt +35 -0
- data/spec/fixtures/ec2/elb/snakeoil.key +51 -0
- data/spec/integration/minimal-chef-repo/chefignore +41 -0
- data/spec/integration/minimal-chef-repo/environments/_default.json +12 -0
- data/spec/integration/minimal-chef-repo/knife/credentials/knife-org.rb +19 -0
- data/spec/integration/minimal-chef-repo/knife/credentials/knife-user-ironfantester.rb +9 -0
- data/spec/integration/minimal-chef-repo/knife/knife.rb +66 -0
- data/spec/integration/minimal-chef-repo/roles/systemwide.rb +10 -0
- data/spec/integration/spec/elb_build_spec.rb +95 -0
- data/spec/integration/spec_helper.rb +16 -0
- data/spec/integration/spec_helper/launch_cluster.rb +55 -0
- data/spec/ironfan/ec2/elb_spec.rb +95 -0
- data/spec/ironfan/ec2/security_group_spec.rb +0 -6
- metadata +60 -3
@@ -242,6 +242,14 @@ module Ironfan
|
|
242
242
|
SecurityGroup.recall(group_name).group_id
|
243
243
|
end
|
244
244
|
|
245
|
+
description[:iam_server_certificates] = cloud.iam_server_certificates.values.map do |cert|
|
246
|
+
IamServerCertificate.recall(IamServerCertificate.full_name(computer, cert))
|
247
|
+
end.compact.map(&:name)
|
248
|
+
|
249
|
+
description[:elastic_load_balancers] = cloud.elastic_load_balancers.values.map do |elb|
|
250
|
+
ElasticLoadBalancer.recall(ElasticLoadBalancer.full_name(computer, elb))
|
251
|
+
end.compact.map(&:name)
|
252
|
+
|
245
253
|
if cloud.flavor_info[:placement_groupable]
|
246
254
|
ui.warn "1.3.1 and earlier versions of Fog don't correctly support placement groups, so your nodes will land willy-nilly. We're working on a fix"
|
247
255
|
description[:placement] = { 'groupName' => cloud.placement_group.to_s }
|
@@ -11,7 +11,6 @@ module Ironfan
|
|
11
11
|
:requires_one, :revoke_group_and_owner, :revoke_port_range, :save,
|
12
12
|
:symbolize_keys, :vpc_id, :vpc_id=, :wait_for,
|
13
13
|
:to => :adaptee
|
14
|
-
field :ensured, :boolean, :default => false
|
15
14
|
|
16
15
|
def self.shared?() true; end
|
17
16
|
def self.multiple?() true; end
|
@@ -101,7 +100,7 @@ module Ironfan
|
|
101
100
|
create!(computer) # Make sure the security groups exist
|
102
101
|
security_groups = cloud.security_groups.values
|
103
102
|
dsl_groups = security_groups.select do |dsl_group|
|
104
|
-
not (
|
103
|
+
not (recall_with_vpc(dsl_group,cloud.vpc)) and \
|
105
104
|
not (dsl_group.range_authorizations +
|
106
105
|
dsl_group.group_authorized_by +
|
107
106
|
dsl_group.group_authorized).empty?
|
@@ -160,11 +159,10 @@ module Ironfan
|
|
160
159
|
return
|
161
160
|
end
|
162
161
|
|
163
|
-
|
162
|
+
self.patiently(fog_group.name, Fog::Compute::AWS::Error, :ignore => Proc.new { |e| e.message =~ /InvalidPermission\.Duplicate/ }) do
|
164
163
|
fog_group.authorize_port_range(range,options)
|
165
|
-
rescue Fog::Compute::AWS::Error => e # InvalidPermission.Duplicate
|
166
|
-
Chef::Log.info("ignoring #{e}")
|
167
164
|
end
|
165
|
+
|
168
166
|
end
|
169
167
|
end
|
170
168
|
|
data/lib/ironfan/requirements.rb
CHANGED
@@ -35,6 +35,8 @@ require 'ironfan/provider/ec2/machine'
|
|
35
35
|
require 'ironfan/provider/ec2/keypair'
|
36
36
|
require 'ironfan/provider/ec2/placement_group'
|
37
37
|
require 'ironfan/provider/ec2/security_group'
|
38
|
+
require 'ironfan/provider/ec2/elastic_load_balancer'
|
39
|
+
require 'ironfan/provider/ec2/iam_server_certificate'
|
38
40
|
|
39
41
|
require 'ironfan/provider/virtualbox'
|
40
42
|
require 'ironfan/provider/virtualbox/machine'
|
data/notes/Home.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
## Overview
|
2
|
+
|
3
|
+
Ironfan, the foundation of The Infochimps Platform, is an expressive toolset for constructing scalable, resilient architectures. It works in the cloud, in the data center, and on your laptop, and it makes your system diagram visible and inevitable. Inevitable systems coordinate automatically to interconnect, removing the hassle of manual configuration of connection points (and the associated danger of human error). For more information about Ironfan and the Infochimps Platform, visit [infochimps.com](https://www.infochimps.com).
|
4
|
+
|
5
|
+
<a name="getting-started"></a>
|
6
|
+
## Getting Started
|
7
|
+
|
8
|
+
* [Installation Instructions](https://github.com/infochimps-labs/ironfan/wiki/INSTALL)
|
9
|
+
* [Web Walkthrough](https://github.com/infochimps-labs/ironfan/wiki/walkthrough-web)
|
10
|
+
* [Ironfan Screencast](http://bit.ly/ironfan-hadoop-in-20-minutes) -- build a Hadoop cluster from scratch in 20 minutes.
|
11
|
+
|
12
|
+
<a name="toolset"></a>
|
13
|
+
### Tools
|
14
|
+
|
15
|
+
Ironfan consists of the following toolset:
|
16
|
+
|
17
|
+
* [ironfan-homebase](https://github.com/infochimps-labs/ironfan-homebase): centralizes the cookbooks, roles and clusters. A solid foundation for any chef user.
|
18
|
+
* [ironfan gem](https://github.com/infochimps-labs/ironfan):
|
19
|
+
- core models to describe your system diagram with a clean, expressive domain-specific language
|
20
|
+
- knife plugins to orchestrate clusters of machines using simple commands like `knife cluster launch`
|
21
|
+
- logic to coordinate truth among chef server and cloud providers.
|
22
|
+
* [ironfan-pantry](https://github.com/infochimps-labs/ironfan-pantry): Our collection of industrial-strength, cloud-ready recipes for Hadoop, HBase, Cassandra, Elasticsearch, Zabbix and more.
|
23
|
+
* [silverware cookbook](https://github.com/infochimps-labs/ironfan-homebase/tree/master/cookbooks/silverware): coordinate discovery of services ("list all the machines for `awesome_webapp`, that I might load balance them") and aspects ("list all components that write logs, that I might logrotate them, or that I might monitor the free space on their volumes".
|
24
|
+
* [Infochimps Platform](http://www.infochimps.com) -- our scalable enterprise big data platform. Ironfan Enterprise adds dynamic orchestration and zero-configuration logging and monitoring.
|
25
|
+
|
26
|
+
<a name="ironfan-way"></a>
|
27
|
+
### Ironfan Concepts
|
28
|
+
|
29
|
+
* [Core Concepts](https://github.com/infochimps-labs/ironfan/wiki/core_concepts) -- Components, Announcements, Amenities and more.
|
30
|
+
* [Philosophy](https://github.com/infochimps-labs/ironfan/wiki/philosophy) -- best practices and lessons learned behind the Ironfan Way
|
31
|
+
* [Style Guide](https://github.com/infochimps-labs/ironfan/wiki/style_guide) -- common attribute names, how and when to include other cookbooks, and more
|
32
|
+
* [Homebase Layout](https://github.com/infochimps-labs/ironfan/wiki/homebase-layout) -- how this homebase is organized, and why
|
33
|
+
|
34
|
+
<a name="documentation"></a>
|
35
|
+
### Documentation
|
36
|
+
|
37
|
+
* [Index of wiki pages](https://github.com/infochimps-labs/ironfan/wiki/_pages)
|
38
|
+
* [ironfan wiki](https://github.com/infochimps-labs/ironfan/wiki): high-level documentation and install instructions
|
39
|
+
* [ironfan issues](https://github.com/infochimps-labs/ironfan/issues): bugs, questions and feature requests for *any* part of the Ironfan toolset.
|
40
|
+
* [ironfan gem docs](http://rdoc.info/gems/ironfan): rdoc docs for Ironfan
|
41
|
+
|
42
|
+
__________________________________________________________________________
|
43
|
+
__________________________________________________________________________
|
44
|
+
__________________________________________________________________________
|
45
|
+
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
|
@@ -0,0 +1,103 @@
|
|
1
|
+
## Credentials
|
2
|
+
|
3
|
+
* make a credentials repo
|
4
|
+
- copy the knife/example-credentials directory
|
5
|
+
- best to not live on github: use a private server and run
|
6
|
+
|
7
|
+
```
|
8
|
+
repo=ORGANIZATION-credentials ; repodir=/gitrepos/$repo.git ; mkdir -p $repodir ; ( GIT_DIR=$repodir git init --shared=group --bare && cd $repodir && git --bare update-server-info && chmod a+x hooks/post-update )
|
9
|
+
```
|
10
|
+
|
11
|
+
- git submodule it into knife as `knife/yourorg-credentials`
|
12
|
+
- or, if somebody has added it,
|
13
|
+
|
14
|
+
```
|
15
|
+
git pull
|
16
|
+
git submodule update --init
|
17
|
+
find . -iname '*.pem' -exec chmod og-rw {} \;
|
18
|
+
cp knife/${OLD_CHEF_ORGANIZATION}-credentials/knife-user-${CHEF_USER}.rb knife/${CHEF_ORGANIZATION}-credentials
|
19
|
+
cp knife/${OLD_CHEF_ORGANIZATION}-credentials/${CHEF_USER}.pem knife/${CHEF_ORGANIZATION}-credentials/
|
20
|
+
```
|
21
|
+
|
22
|
+
* create AWS account
|
23
|
+
- [sign up for AWS + credit card + password]
|
24
|
+
- make IAM users for admins
|
25
|
+
- add your IAM keys into your `{credentials}/knife-user`
|
26
|
+
|
27
|
+
* create opscode account
|
28
|
+
- download org keys, put in the credentials repo
|
29
|
+
|
30
|
+
## Populate Chef Server
|
31
|
+
|
32
|
+
* create `prod` and `dev` environments by using
|
33
|
+
|
34
|
+
```
|
35
|
+
knife environment create dev
|
36
|
+
knife environment create prod
|
37
|
+
knife environment create stag
|
38
|
+
knife environment from file environments/stag.json
|
39
|
+
knife environment from file environments/dev.json
|
40
|
+
knife environment from file environments/prod.json
|
41
|
+
```
|
42
|
+
|
43
|
+
```
|
44
|
+
knife cookbook upload --all
|
45
|
+
rake roles
|
46
|
+
# if you have data bags, do that too
|
47
|
+
```
|
48
|
+
|
49
|
+
## Create Your Initial Machine Boot-Image (AMI)
|
50
|
+
|
51
|
+
* Start by launching the burninator cluster: `knife cluster launch --bootstrap --yes burninator-trogdor-0`
|
52
|
+
- You may have to specify the template by adding this an anargument: `--template-file ${CHEF_HOMEBASE}/vendor/ironfan/lib/chef/knife/bootstrap/ubuntu10.04-ironfan.erb`
|
53
|
+
- This template makes the machine auto-connect to the server upon launch and teleports the client-key into the machine.
|
54
|
+
- If this fails, bootstrap separately: `knife cluster bootstrap --yes burninator-trogdor-0`
|
55
|
+
|
56
|
+
* Log into the burninator-trogdor and run the script /tmp/burn_ami_prep.sh: `sudo bash /tmp/burn_ami_prep.sh`
|
57
|
+
- You will have to ssh as the ubuntu user and pass in the burninator.pem identity file.
|
58
|
+
- Review the output of this script and ensure the world we have created is sane.
|
59
|
+
|
60
|
+
* Once the script has been run:
|
61
|
+
- Exit the machine.
|
62
|
+
- Go to AWS console.
|
63
|
+
- DO NOT stop the machine.
|
64
|
+
- Do "Create Image (EBS AMI)" from the burninator-trogdor instance (may take a while).
|
65
|
+
|
66
|
+
* Add the AMI id to your `{credentials}/knife-org.rb` in the `ec2_image_info.merge!` section and create a reference name for the image (e.g ironfan-natty).
|
67
|
+
- Add that reference name to the burninator-village facet in the burninator.rb cluster definition: `cloud.image_name 'ironfan_natty'`
|
68
|
+
|
69
|
+
* Launch the burninator-village in order to test your newly created AMI.
|
70
|
+
- The village should launch with no problems, have the correct permissions and be able to complete a chef run: `sudo chef-client`.
|
71
|
+
|
72
|
+
* If all has gone well so far, you may now stop the original burninator: `knife cluster kill burninator-trogdor`
|
73
|
+
- Leave the burninator-village up and stay ssh'ed to assist with the next step.
|
74
|
+
|
75
|
+
## Create an NFS
|
76
|
+
|
77
|
+
* Make a command/control cluster definition file with an nfs facet (see clusters/demo_cnc.rb).
|
78
|
+
- Make sure specify the `image_name` to be the AMI you've created.
|
79
|
+
|
80
|
+
* In the AWS console make yourself a 20GB drive.
|
81
|
+
- Make sure the availability zone matches the one specified in your cnc_cluster definition file.
|
82
|
+
- Don't choose a snapshot.
|
83
|
+
- Set the device name to `/dev/sdh`.
|
84
|
+
- Attach to the burninator-village instance.
|
85
|
+
|
86
|
+
* ssh in to burninator-village to format the nfs drive:
|
87
|
+
```
|
88
|
+
dev=/dev/xvdh ; name='home_drive' ; sudo umount $dev ; ls -l $dev ; sudo mkfs.xfs $dev ; sudo mkdir /mnt/$name ; sudo mount -t xfs $dev /mnt/$name ; sudo bash -c "echo 'snapshot for $name burned on `date`' > /mnt/$name/vol_info.txt "
|
89
|
+
sudo cp -rp /home/ubuntu /mnt/$name/ubuntu
|
90
|
+
sudo umount /dev/xvdh
|
91
|
+
exit
|
92
|
+
```
|
93
|
+
* Back in the AWS console, snapshot the volume and name it `{org}-home_drive`. Delete the original volume as it is not needed anymore.
|
94
|
+
- While you're in there, make `{org}-resizable_1gb` a 'Minimum-sized snapshot, resizable -- use `xfs_growfs` to resize after launch' snapshot.
|
95
|
+
|
96
|
+
* Paste the snapshot id into your cnc_cluster definition file.
|
97
|
+
- ssh into the newly launched cnc_cluster-nfs.
|
98
|
+
- You should restart the machine via the AWS console (may or may not be necessary, do anyway).
|
99
|
+
|
100
|
+
* Manipulate security groups
|
101
|
+
- `nfs_server` group should open all UDP ports and all TCP ports to `nfs_client` group
|
102
|
+
|
103
|
+
* Change /etc/ssh/sshd_config to be passwordful and restart the ssh service
|
data/notes/INSTALL.md
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
# Ironfan Installation Instructions
|
2
|
+
|
3
|
+
First of all, every Chef installation needs a Chef Homebase. Chef Homebase is the place where cookbooks, roles, config files and other artifacts for managing systems with Chef will live. Store this homebase in a version control system such as Git and treat it like source code.
|
4
|
+
|
5
|
+
## Conventions
|
6
|
+
|
7
|
+
In all of the below,
|
8
|
+
|
9
|
+
* `{homebase}`: is the directory that holds your Chef cookbooks, roles and so forth. For example, this file is in `{homebase}/README.md`.
|
10
|
+
* `{username}`: identifies your personal Chef client name: the thing you use to log into the Chef WebUI.
|
11
|
+
* `{organization}`: identifies the credentials set and cloud settings to use. If your Chef server is on the Opscode platform (Try it! It's super-easy), use your organization name (the last segment of your chef_server url). If not, use an identifier you deem sensible.
|
12
|
+
|
13
|
+
<a name="initial_install"></a>
|
14
|
+
## Install Ironfan's Gem and Homebase
|
15
|
+
|
16
|
+
_Before you begin, you may wish to fork homebase repo, as you'll be making changes to personalize it for your platform that you may want to share with teammates. If you do so, replace all references to infochimps-labs/ironfan-homebase with your fork's path._
|
17
|
+
|
18
|
+
1. Install system prerequisites (libXML and libXSLT). The following works under Debian/Ubuntu:
|
19
|
+
|
20
|
+
sudo apt-get install libxml2-dev libxslt1-dev
|
21
|
+
|
22
|
+
1. Install the Ironfan gem (you may need to use `sudo`):
|
23
|
+
|
24
|
+
gem install ironfan
|
25
|
+
|
26
|
+
1. Clone the repo. It will produce the directory we will call `homebase` from now on:
|
27
|
+
|
28
|
+
git clone https://github.com/infochimps-labs/ironfan-homebase homebase
|
29
|
+
cd homebase
|
30
|
+
bundle install
|
31
|
+
git submodule update --init
|
32
|
+
git submodule foreach git checkout master
|
33
|
+
|
34
|
+
<a name="knife-configuration"></a>
|
35
|
+
## Configure Knife and Add Credentials
|
36
|
+
|
37
|
+
Ironfan expands out the traditional singular [knife.rb](http://wiki.opscode.com/display/chef/Knife#Knife-ConfiguringYourSystemForKnife) into several components. This modularity allows for better management of sensitive shared credentials, personal credentials, and organization-wide configuration.
|
38
|
+
|
39
|
+
### Set up
|
40
|
+
|
41
|
+
_Note_: If your local username differs from your Opscode Chef username, then you should `export CHEF_USER={username}` (eg from your `.bashrc`) before you run any knife commands.
|
42
|
+
|
43
|
+
So that Knife finds its configuration files, symlink the `{homebase}/knife` directory (the one holding this file) to be your `~/.chef` folder.
|
44
|
+
|
45
|
+
cd {homebase}
|
46
|
+
ln -sni $CHEF_HOMEBASE/knife ~/.chef
|
47
|
+
|
48
|
+
<a name="credentials"></a>
|
49
|
+
### Credentials Directory
|
50
|
+
|
51
|
+
All the keys and settings specific to your organization are held in a directory named `credentials/`, versioned independently of the homebase.
|
52
|
+
|
53
|
+
To set up your credentials directory, visit `{homebase}/knife` and duplicate the example, naming it `credentials`:
|
54
|
+
|
55
|
+
cd $CHEF_HOMEBASE/knife
|
56
|
+
rm credentials
|
57
|
+
cp -a example-credentials credentials
|
58
|
+
cd credentials
|
59
|
+
git init ; git add .
|
60
|
+
git commit -m "New credentials universe for $CHEF_ORGANIZATION" .
|
61
|
+
|
62
|
+
You will likely want to store the credentials in another remote repository. We recommend erring on the side of caution in its hosting. Setting that up is outside the scope of this guide, but there [good external resources](http://book.git-scm.com/3_distributed_workflows.html) available to get you started.
|
63
|
+
|
64
|
+
<a name="download"></a>
|
65
|
+
### Download Cloud Credentials
|
66
|
+
|
67
|
+
You will need to obtain user keys from your cloud providers. Your AWS access keys can be obtained from [Amazon IAM](https://console.aws.amazon.com/iam/home):
|
68
|
+
|
69
|
+
![Reset AWS User Key](https://github.com/infochimps-labs/ironfan/wiki/aws_user_key.png)
|
70
|
+
|
71
|
+
__________________________________________________________________________
|
72
|
+
|
73
|
+
Your Opscode user key can be obtained from the [Opscode Password settings](https://www.opscode.com/account/password) console:
|
74
|
+
|
75
|
+
![Reset Opscode User Key](https://github.com/infochimps-labs/ironfan/wiki/opscode_user_key.png)
|
76
|
+
|
77
|
+
__________________________________________________________________________
|
78
|
+
|
79
|
+
Your Opscode organization validator key can be obtained from the [Opscode Organization management](https://manage.opscode.com/organizations) console, by choosing the `Regenerate validation key` link:
|
80
|
+
|
81
|
+
![Reset Opscode Organization Key](https://github.com/infochimps-labs/ironfan/wiki/opscode_org_key.png)
|
82
|
+
|
83
|
+
__________________________________________________________________________
|
84
|
+
|
85
|
+
|
86
|
+
<a name="org"></a>
|
87
|
+
### User / Organization-specific config
|
88
|
+
|
89
|
+
Edit the following in your new `credentials`:
|
90
|
+
|
91
|
+
* Organization-specific settings are in `knife/credentials/knife-org.rb`:
|
92
|
+
- _organization_: Your organization name
|
93
|
+
- _chef server url_: Edit the lines for your `chef_server_url` and `validator`. _Note_: If you are an Opscode platform user, you can skip this step -- your `chef_server_url` defaults to `https://api.opscode.com/organizations/#{organization}` and your validator to `{organization}-validator.pem`.
|
94
|
+
- Cloud-specific settings: if you are targeting a cloud provider, add account information and configuration here.
|
95
|
+
|
96
|
+
* User-specific settings are in `knife/credentials/knife-user-{username}.rb`. (You can duplicate and rename the one in `knife/example-credentials/knife-user-example.rb`). For example, if you're using Amazon EC2 you should set your access keys:
|
97
|
+
|
98
|
+
Chef::Config.knife[:aws_access_key_id] = "XXXX"
|
99
|
+
Chef::Config.knife[:aws_secret_access_key] = "XXXX"
|
100
|
+
Chef::Config.knife[:aws_account_id] = "XXXX"
|
101
|
+
|
102
|
+
* Chef user key is in `{credentials_path}/{username}.pem`
|
103
|
+
|
104
|
+
* Organization validator key in `{credentials_path}/{organization}-validator.pem`
|
105
|
+
|
106
|
+
* If you have existing Amazon machines, place their keypairs in `{credentials_path}/ec2_keys`. Ironfan will also automatically populate this with new keys as new clusters are created. Commit the resulting keys back to the credentials repo to share them with your teammates, or they will be unable to make certain calls against the resulting architecture.
|
107
|
+
|
108
|
+
<a name="go_speed_racer"></a>
|
109
|
+
## Try it out
|
110
|
+
|
111
|
+
You should now be able to use Knife to control your clusters:
|
112
|
+
|
113
|
+
$ knife cluster list
|
114
|
+
+--------------------+---------------------------------------------------+
|
115
|
+
| cluster | path |
|
116
|
+
+--------------------+---------------------------------------------------+
|
117
|
+
| burninator | /cloud/clusters/burninator.rb |
|
118
|
+
| el_ridiculoso | /cloud/clusters/el_ridiculoso.rb |
|
119
|
+
| elasticsearch_demo | /cloud/clusters/elasticsearch_demo.rb |
|
120
|
+
| hadoop_demo | /cloud/clusters/hadoop_demo.rb |
|
121
|
+
| sandbox | /cloud/clusters/sandbox.rb |
|
122
|
+
+--------------------+---------------------------------------------------+
|
123
|
+
|
124
|
+
Launching a cluster in the cloud should now be this easy!
|
125
|
+
|
126
|
+
knife cluster launch sandbox-simple --bootstrap
|
127
|
+
|
128
|
+
## Next
|
129
|
+
|
130
|
+
The README file in each of the subdirectories for more information about what goes in those directories. If you are bored of reading, go customize one of the files in the 'clusters/ directory'. Or, if you're a fan of ridiculous things and have ever pondered how many things you can fit in one box, launch el_ridiculoso:. It contains every single recipe we have ever made stacked on top of one another.
|
131
|
+
|
132
|
+
knife cluster launch el_ridiculoso-gordo --bootstrap
|
133
|
+
|
134
|
+
For more information about configuring Knife, see the [Knife documentation](http://wiki.opscode.com/display/chef/knife).
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# Ironfan Roadmap
|
2
|
+
|
3
|
+
## Summary
|
4
|
+
|
5
|
+
- I. Ironfan-ci
|
6
|
+
- II. DSL Undercarriage / OpenStack
|
7
|
+
- III. Cookbook Updates
|
8
|
+
- IV. Keys Handling
|
9
|
+
- V. Silverware Update
|
10
|
+
- VI. Ironfan Knife
|
11
|
+
- VII. Orchestration
|
12
|
+
|
13
|
+
## Detailed Roadmap
|
14
|
+
|
15
|
+
### Ironfan-CI (I)
|
16
|
+
Jenkins on laptop (Done)
|
17
|
+
Jenkins runs VM sees output of test
|
18
|
+
Translate announcement to cucumber lines
|
19
|
+
Implement as necessary new Cuken tests
|
20
|
+
|
21
|
+
### Openstack / Multi-cloud (II)
|
22
|
+
* Learn Openstack
|
23
|
+
* (get accts @ a couple providers + eucalytus)
|
24
|
+
* Fog (library we use, ec2 only?) compatibility with some tear-out
|
25
|
+
* Depends on DSL Object above
|
26
|
+
* Move stuff in Fog_layer to be methods on Cloud Object
|
27
|
+
* cloud(:ec2, ‘us_east’) do
|
28
|
+
* cores 1
|
29
|
+
* end
|
30
|
+
* Cloud Statement is just a layer, not its own object
|
31
|
+
* (Cloud loses to everything else, we think)
|
32
|
+
|
33
|
+
### Ironfanize Rest of Cookbooks (III)
|
34
|
+
* Debugging and updating exercise.
|
35
|
+
* Ironfan-ci accelerates
|
36
|
+
* Zabbix
|
37
|
+
* MySql
|
38
|
+
* Map to order of operations
|
39
|
+
* Clean Separation of tight-bound services
|
40
|
+
* Resque’s Redis
|
41
|
+
* Flume’s Zookeeper
|
42
|
+
|
43
|
+
### DSL Object / Librarification (Mix)
|
44
|
+
* New DSL Object (II)
|
45
|
+
* Unify Models in Silverware/lib & Ironfan/lib (Birth of the Ironfan API Interface) (II)
|
46
|
+
* Birth of the Ironfan API Interface (V)
|
47
|
+
* Clean up Announcment Interface (framework) (V)
|
48
|
+
* Merge Volume (VIII)
|
49
|
+
* Actual Model for a dummy node (VIII)
|
50
|
+
* Refactor deploy code across cookbooks (III)
|
51
|
+
* Discovers component is an aspect endowed upon a component when it discovers another component to find out what depends on a service (V)
|
52
|
+
* Key Databag Rollout (IV)
|
53
|
+
|
54
|
+
### Ironfan-knife (VI)
|
55
|
+
* Separate SSH user as “Machine” or “Me”
|
56
|
+
* Better Error Messages
|
57
|
+
* Verbose vs. Sustained
|
58
|
+
* Clearout Issues
|
59
|
+
* Refactor Cluster into definitions - “Stacks” (Roles that are smarter)
|
60
|
+
* Role Replacement
|
61
|
+
* (Design doc forthcoming)
|
62
|
+
|
63
|
+
### Orchestration (VI/VII)
|
64
|
+
* System diagram /reporting (VII)
|
65
|
+
* Ticketed Worker Queue to run steps (bring up a Hadoop cluster, for instance) (VII)
|
66
|
+
* Rundeck? Juju? (VII)
|
67
|
+
* Activity stream (VII)
|
68
|
+
* Helpers (VII)
|
69
|
+
* API Frontend (VII)
|
70
|
+
* Richer Slice Queries (VI)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
### Set up Knife on your local machine, and a Chef Server in the cloud
|
2
|
+
|
3
|
+
If you already have a working chef installation you can skip this section.
|
4
|
+
|
5
|
+
To get started with knife and chef, follow the "Chef Quickstart,":http://wiki.opscode.com/display/chef/Quick+Start We use the hosted chef service and are very happy, but there are instructions on the wiki to set up a chef server too. Stop when you get to "Bootstrap the Ubuntu system" -- cluster chef is going to make that much easier.
|
6
|
+
|
7
|
+
* [Launch Cloud Instances with Knife](http://wiki.opscode.com/display/chef/Launch+Cloud+Instances+with+Knife)
|
8
|
+
* [EC2 Bootstrap Fast Start Guide](http://wiki.opscode.com/display/chef/EC2+Bootstrap+Fast+Start+Guide)
|
9
|
+
|
10
|
+
### Auto-vivifying machines (no bootstrap required!)
|
11
|
+
|
12
|
+
On EC2, you can make a machine that auto-vivifies -- no bootstrap necessary. Burn an AMI that has the `config/client.rb` file in /etc/chef/client.rb. It will use the ec2 userdata (passed in by knife) to realize its purpose in life, its identity, and the chef server to connect to; everything happens automagically from there. No parallel ssh required!
|
13
|
+
|
14
|
+
### EBS Volumes
|
15
|
+
|
16
|
+
Define a `snapshot_id` for your volumes, and set `create_at_launch` true.
|
Binary file
|
Binary file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Cookbook Versioning and Tracking
|
2
|
+
================================
|
3
|
+
|
4
|
+
@temujin9 please complete and correct
|
5
|
+
|
6
|
+
* git tag labels the *release* of a cookbook version: tag 'cookbooks-elasticsearch-3.1.7' denotes the *last* commit to that tag.
|
7
|
+
* The next commit will be the one that bumps the version number: the `metadata.rb` will then read '3.1.8'.
|
8
|
+
|
9
|
+
Periodically, we will release a 'gold' version set and push those to the opscode cookbook community site.
|
10
|
+
|
11
|
+
*
|