A bootstrap is a process that installs Chef on a target system so that it can run as a chef-client and communicate with a Chef Server.
The bootstrap subcommand is used run a bootstrap operation that installs Chef on the target system. The bootstrap operation must specify the IP address or FQDN of the target system.
Note
Review the list of common options available to this (and all) Knife subcommands and plugins.
This subcommand has the following options:
Note
See knife.rb for more information about how to add optional settings to the knife.rb file.
The following knife bootstrap settings can be added to the knife.rb file:
Note
The knife bootstrap subcommand relies on a number of SSH-related settings that are handled by the knife ssh subcommand.
To pass an SSH password as part of the command:
$ knife bootstrap 192.168.1.1 -x username -P PASSWORD --sudo
To use a file that contains a private key:
$ knife bootstrap 192.168.1.1 -x username -i ~/.ssh/id_rsa --sudo
The following examples show how to customize the default bootstraps that are included with Chef.
Ubuntu 12.04
The following example shows how to modify the default script for Ubuntu 12.04. First, copy the bootstrap template from the default location. If Chef is installed from a RubyGems, the full path can be found in the gem contents:
% gem contents chef | grep ubuntu12.04-gems
/Users/jtimberman/.rvm/gems/ruby-1.9.2-p180/gems/chef-0.10.2/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb
Copy the template to the Chef repository in the .chef/bootstrap directory:
% cp /Users/jtimberman/.rvm/gems/ruby-1.9.2-p180/gems/chef-0.10.2/
lib/chef/knife/bootstrap/ubuntu12.04-gems.erb ~/chef-repo/.chef/
bootstrap/ubuntu12.04-gems-mine.erb
Modify the template with any editor, then use it with the -d or --distro option in the knife bootstrap operation, or use any of the Knife plug-ins that support cloud computing.
$ knife bootstrap 192.168.1.100 -r 'role[webserver]' -d ubuntu12.04-gems-mine
Alternatively, an example bootstrap template can be found in the Chef source repository: https://github.com/opscode/chef/blob/master/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb. Copy the template to ~/.chef-repo/.chef/bootstrap/ubuntu12.04-apt.erb and modify the template appropriately.
Debian and Apt
The following example shows how to use the knife bootstrap sub-command to create a client configuration file (/etc/chef/client.rb) that uses Hosted Chef as the Chef Server. The configuration file will look something like:
log_level :info
log_location STDOUT
chef_server_url 'https://api.opscode.com/organizations/ORGNAME'
validation_client_name 'ORGNAME-validator'
The knife bootstrap sub-command will look in three locations for the template that is used during the bootstrap operation. The locations are:
If, in the example above, the second location was used, then create the .chef/bootstrap/ directory in the Chef repository, and then create the erb template file by running commands similar to the following:
mkdir ~/.chef/bootstrap
vi ~/.chef/bootstrap/debian5.0-apt.erb
When finished creating the directory and the erb template file, edit the template to run the SSH commands. Then set up the validation certificate and the client configuration file.
Finally, run the chef-client on using a knife bootstrap command that specifies a run-list (the -r option). The bootstrap template can be called using a command similar to the following:
$ knife bootstrap mynode.example.com -r 'role[webserver]','role[production]' --distro debian5.0-apt