Adoptable Cookbooks List

Looking for a cookbook to adopt? You can now see a list of cookbooks available for adoption!
List of Adoptable Cookbooks

Supermarket Belongs to the Community

Supermarket belongs to the community. While Chef has the responsibility to keep it running and be stewards of its functionality, what it does and how it works is driven by the community. The chef/supermarket repository will continue to be where development of the Supermarket application takes place. Come be part of shaping the direction of Supermarket by opening issues and pull requests or by joining us on the Chef Mailing List.

Select Badges

Select Supported Platforms

Select Status


percona-tools (2) Versions 0.5.0

Installs/Configures percona-tools

cookbook 'percona-tools', '= 0.5.0', :supermarket
cookbook 'percona-tools', '= 0.5.0'
knife supermarket install percona-tools
knife supermarket download percona-tools
Quality 100%

percona-tools Cookbook

The percona-tools cookbook does the following:
- Installs Percona yum repository
- Installs and configures percona-toolkit package
- Installs and configures percona-xtrabackup package


  • Chef 11 or higher
  • Ruby 1.9 or higher (preferably from the Chef full-stack installer)
  • Network accessible package repositories

Platform Support

The following platforms are supported:
* CentOS
* Red Hat

The following 64-bit platforms have been tested:
* CentOS 6.4
* CentOS 6.5
* CentOS 7.0

Cookbook Dependencies

  • yum
  • mysql-chef_gem
  • database
  • openssl


Just include mysql-sys in your node's run_list:

  "run_list": [

Or, place a dependency on the percona-tools cookbook in your cookbook's metadata.rb

depends "percona-tools", "~> 0.5"

Then, in a recipe:

include_recipe "percona-tools"

MySQL versions supported

MySQL versions 5.1, 5.5 and 5.6 are supported

MySQL users used by the cookbook

The cookbook requires the MySQL root user password and the password for two separate users that are setup for use by percona-toolkit. By default the usernames used are "ptro" for user with read-only privileges and "ptrw" for user with read-write privileges. You can change the usernames used by setting the below attributes:
node.set["percona_tools"]["read_only_user"]["username"] = "some_other_read_only_username"
node.set["percona_tools"]["read_write_user"]["username"] = "some_other_read_write_username"

If data bags are not being used to store the passwords for the users then the following attribute must store the "root" user password:
node.set["mysql"]["root_password"] = "changeme"

And the following attribute must store the passwords for the two additional users used by percona-toolkit:
node.set["percona_tools"]["read_only_user"]["password"] = "changeme"
node.set["percona_tools"]["read_write_user"]["password"] = "changeme"

If you do not set the password then they are randomly generated using OpenSSL and stored in the attributes mentioned above.

Using encrypted data bag for storing MySQL credentials

It is recommended though to store the user passwords in encrypted data bag.
If encrypted data bag is being used then the following attribute must be set:
node.set["percona_tools"]["use_encrypted_databag"] = true
node.set["percona_tools"]["databag_name"] = "passwords"
node.set["percona_tools"]["databag_item"] = "mysql_users"

The above assumes that a data bag was created as follows:

knife data bag create passwords mysql_users --secret-file /path/to/databag_encryption_key

An example data bag item json is shown below:
"id": "mysql_users",
"root": "some_secure_password",
"ptro": "another_secure_password",
"ptrw": "yet_another_secure_password"

The above example assumes that the default users "ptro" and "ptrw" are being used.


The following attributes are set by default:
default["percona_tools"]["yum"]["description"] = "CentOS $releasever - Percona"
default["percona_tools"]["yum"]["baseurl"] = "$releasever/os/$basearch/"
default["percona_tools"]["yum"]["gpgkey"] = ""
default["percona_tools"]["yum"]["gpgcheck"] = true
default["percona_tools"]["xtrabackup"]["version"] = "2.2.5-5027"
default["percona_tools"]["toolkit"]["version"] = "2.2.11-1"
default["percona_tools"]["read_only_user"] = {
"username" => "ptro",
"allowed_hosts" => ["%", "#{node['fqdn']}", "localhost"]
default["percona_tools"]["read_write_user"] = {
"username" => "ptrw",
"allowed_hosts" => ["%", "#{node['fqdn']}", "localhost"]
default["percona_tools"]["use_encrypted_databag"] = false
default["percona_tools"]["databag_name"] = "passwords"
default["percona_tools"]["databag_item"] = "mysql_users"

The other attribute that is needed and not set by default is:


  1. Fork the repository on Github
  2. Create a named feature branch (like add_component_x)
  3. Write your change
  4. Write tests for your change (if applicable)
  5. Run the tests, ensuring they all pass
  6. Submit a Pull Request using Github

License & Authors

(c) 2014, Ovais Tariq <>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <>.

Dependent cookbooks

yum ~> 3.0
mysql-chef_gem >= 0.0.0
database ~> 2.1
openssl >= 0.0.0

Contingent cookbooks

There are no cookbooks that are contingent upon this one.

Foodcritic Metric

0.5.0 passed this metric