elzar 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. data/.chef/knife.rb +3 -0
  2. data/.gitignore +1 -0
  3. data/.rvmrc +1 -0
  4. data/Gemfile +11 -0
  5. data/Gemfile.lock +96 -0
  6. data/README.md +42 -0
  7. data/Rakefile +1 -0
  8. data/Vagrantfile +16 -0
  9. data/cookbooks/.gitkeep +0 -0
  10. data/cookbooks/apt/README.md +122 -0
  11. data/cookbooks/apt/files/default/apt-cacher +9 -0
  12. data/cookbooks/apt/files/default/apt-cacher.conf +144 -0
  13. data/cookbooks/apt/files/default/apt-proxy-v2.conf +50 -0
  14. data/cookbooks/apt/metadata.rb +13 -0
  15. data/cookbooks/apt/providers/repository.rb +73 -0
  16. data/cookbooks/apt/recipes/cacher-client.rb +44 -0
  17. data/cookbooks/apt/recipes/cacher.rb +45 -0
  18. data/cookbooks/apt/recipes/default.rb +50 -0
  19. data/cookbooks/apt/resources/repository.rb +30 -0
  20. data/cookbooks/build-essential/README.md +24 -0
  21. data/cookbooks/build-essential/metadata.rb +10 -0
  22. data/cookbooks/build-essential/recipes/default.rb +45 -0
  23. data/cookbooks/database/README.md +403 -0
  24. data/cookbooks/database/libraries/provider_database_mysql.rb +97 -0
  25. data/cookbooks/database/libraries/provider_database_mysql_user.rb +76 -0
  26. data/cookbooks/database/libraries/provider_database_postgresql.rb +126 -0
  27. data/cookbooks/database/libraries/provider_database_postgresql_user.rb +78 -0
  28. data/cookbooks/database/libraries/provider_database_sql_server.rb +109 -0
  29. data/cookbooks/database/libraries/provider_database_sql_server_user.rb +106 -0
  30. data/cookbooks/database/libraries/resource_database.rb +111 -0
  31. data/cookbooks/database/libraries/resource_database_user.rb +90 -0
  32. data/cookbooks/database/libraries/resource_mysql_database.rb +34 -0
  33. data/cookbooks/database/libraries/resource_mysql_database_user.rb +34 -0
  34. data/cookbooks/database/libraries/resource_postgresql_database.rb +35 -0
  35. data/cookbooks/database/libraries/resource_postgresql_database_user.rb +35 -0
  36. data/cookbooks/database/libraries/resource_sql_server_database.rb +34 -0
  37. data/cookbooks/database/libraries/resource_sql_server_database_user.rb +34 -0
  38. data/cookbooks/database/metadata.rb +21 -0
  39. data/cookbooks/database/recipes/default.rb +20 -0
  40. data/cookbooks/database/recipes/ebs_backup.rb +89 -0
  41. data/cookbooks/database/recipes/ebs_volume.rb +196 -0
  42. data/cookbooks/database/recipes/master.rb +78 -0
  43. data/cookbooks/database/recipes/snapshot.rb +62 -0
  44. data/cookbooks/database/templates/default/app_grants.sql.erb +8 -0
  45. data/cookbooks/database/templates/default/aws_config.erb +3 -0
  46. data/cookbooks/database/templates/default/chef-solo-database-snapshot.cron.erb +10 -0
  47. data/cookbooks/database/templates/default/chef-solo-database-snapshot.json.erb +1 -0
  48. data/cookbooks/database/templates/default/chef-solo-database-snapshot.rb.erb +6 -0
  49. data/cookbooks/database/templates/default/ebs-backup-cron.erb +2 -0
  50. data/cookbooks/database/templates/default/ebs-db-backup.sh.erb +8 -0
  51. data/cookbooks/database/templates/default/ebs-db-restore.sh.erb +10 -0
  52. data/cookbooks/database/templates/default/s3cfg.erb +27 -0
  53. data/cookbooks/mysql/README.md +148 -0
  54. data/cookbooks/mysql/attributes/server.rb +68 -0
  55. data/cookbooks/mysql/libraries/database.rb +19 -0
  56. data/cookbooks/mysql/libraries/helpers.rb +33 -0
  57. data/cookbooks/mysql/metadata.rb +90 -0
  58. data/cookbooks/mysql/recipes/client.rb +51 -0
  59. data/cookbooks/mysql/recipes/default.rb +20 -0
  60. data/cookbooks/mysql/recipes/server.rb +133 -0
  61. data/cookbooks/mysql/recipes/server_ec2.rb +49 -0
  62. data/cookbooks/mysql/templates/default/debian.cnf.erb +12 -0
  63. data/cookbooks/mysql/templates/default/grants.sql.erb +15 -0
  64. data/cookbooks/mysql/templates/default/my.cnf.erb +176 -0
  65. data/cookbooks/mysql/templates/default/mysql-server.seed.erb +10 -0
  66. data/cookbooks/mysql/templates/default/port_mysql.erb +3 -0
  67. data/cookbooks/openssl/README.md +37 -0
  68. data/cookbooks/openssl/libraries/secure_password.rb +37 -0
  69. data/cookbooks/openssl/metadata.rb +8 -0
  70. data/cookbooks/openssl/recipes/default.rb +19 -0
  71. data/cookbooks/passenger_enterprise/README.rdoc +8 -0
  72. data/cookbooks/passenger_enterprise/attributes/default.rb +28 -0
  73. data/cookbooks/passenger_enterprise/cc.gemspec +36 -0
  74. data/cookbooks/passenger_enterprise/metadata.json +44 -0
  75. data/cookbooks/passenger_enterprise/metadata.rb +16 -0
  76. data/cookbooks/passenger_enterprise/recipes/apache2.rb +54 -0
  77. data/cookbooks/passenger_enterprise/recipes/default.rb +30 -0
  78. data/cookbooks/passenger_enterprise/recipes/nginx.rb +50 -0
  79. data/cookbooks/passenger_enterprise/templates/default/passenger.conf.erb +2 -0
  80. data/cookbooks/passenger_enterprise/templates/default/passenger.load.erb +1 -0
  81. data/cookbooks/passenger_enterprise/templates/default/passenger_nginx.conf.erb +2 -0
  82. data/cookbooks/ruby_enterprise/README.rdoc +55 -0
  83. data/cookbooks/ruby_enterprise/attributes/default.rb +33 -0
  84. data/cookbooks/ruby_enterprise/cc.gemspec +36 -0
  85. data/cookbooks/ruby_enterprise/definitions/ree_gem.rb +28 -0
  86. data/cookbooks/ruby_enterprise/metadata.json +45 -0
  87. data/cookbooks/ruby_enterprise/metadata.rb +13 -0
  88. data/cookbooks/ruby_enterprise/recipes/default.rb +67 -0
  89. data/data_bags/deploy/authorized_keys.json +9 -0
  90. data/dna.json +25 -0
  91. data/elzar.gemspec +22 -0
  92. data/lib/elzar.rb +21 -0
  93. data/lib/elzar/assistant.rb +77 -0
  94. data/lib/elzar/chef_dna.rb +48 -0
  95. data/lib/elzar/template.rb +24 -0
  96. data/lib/elzar/templates/Gemfile +11 -0
  97. data/lib/elzar/templates/Vagrantfile.erb +16 -0
  98. data/lib/elzar/templates/dna.json +25 -0
  99. data/lib/elzar/templates/solo.rb.erb +6 -0
  100. data/lib/elzar/version.rb +3 -0
  101. data/roles/enterprise_appstack.rb +4 -0
  102. data/roles/plumbing.rb +11 -0
  103. data/roles/postgres_database.rb +4 -0
  104. data/roles/ruby_appstack.rb +4 -0
  105. data/script/install_cookbook +6 -0
  106. data/script/new_cookbook +5 -0
  107. data/site-cookbooks/.gitkeep +0 -0
  108. data/site-cookbooks/curl/README.md +17 -0
  109. data/site-cookbooks/curl/metadata.rb +6 -0
  110. data/site-cookbooks/curl/recipes/default.rb +11 -0
  111. data/site-cookbooks/nginx/CHANGELOG.md +11 -0
  112. data/site-cookbooks/nginx/CONTRIBUTING +29 -0
  113. data/site-cookbooks/nginx/LICENSE +201 -0
  114. data/site-cookbooks/nginx/README.md +76 -0
  115. data/site-cookbooks/nginx/attributes/default.rb +65 -0
  116. data/site-cookbooks/nginx/definitions/nginx_site.rb +35 -0
  117. data/site-cookbooks/nginx/files/default/mime.types +73 -0
  118. data/site-cookbooks/nginx/metadata.rb +89 -0
  119. data/site-cookbooks/nginx/recipes/default.rb +57 -0
  120. data/site-cookbooks/nginx/recipes/source.rb +126 -0
  121. data/site-cookbooks/nginx/templates/default/default-site.erb +11 -0
  122. data/site-cookbooks/nginx/templates/default/nginx.conf.erb +42 -0
  123. data/site-cookbooks/nginx/templates/default/nginx.init.erb +91 -0
  124. data/site-cookbooks/nginx/templates/default/nxdissite.erb +29 -0
  125. data/site-cookbooks/nginx/templates/default/nxensite.erb +38 -0
  126. data/site-cookbooks/passenger/README.md +12 -0
  127. data/site-cookbooks/passenger/attributes/default.rb +3 -0
  128. data/site-cookbooks/passenger/metadata.rb +6 -0
  129. data/site-cookbooks/passenger/recipes/default.rb +39 -0
  130. data/site-cookbooks/passenger/templates/default/passenger_nginx.conf.erb +2 -0
  131. data/site-cookbooks/postgresql/README.md +150 -0
  132. data/site-cookbooks/postgresql/attributes/default.rb +72 -0
  133. data/site-cookbooks/postgresql/metadata.rb +21 -0
  134. data/site-cookbooks/postgresql/recipes/client.rb +40 -0
  135. data/site-cookbooks/postgresql/recipes/default.rb +20 -0
  136. data/site-cookbooks/postgresql/recipes/server.rb +74 -0
  137. data/site-cookbooks/postgresql/recipes/server_debian.rb +62 -0
  138. data/site-cookbooks/postgresql/recipes/server_redhat.rb +82 -0
  139. data/site-cookbooks/postgresql/templates/default/debian.postgresql.conf.erb +499 -0
  140. data/site-cookbooks/postgresql/templates/default/pg_hba.conf.erb +83 -0
  141. data/site-cookbooks/postgresql/templates/default/redhat.postgresql.conf.erb +501 -0
  142. data/site-cookbooks/rails_app/README.md +15 -0
  143. data/site-cookbooks/rails_app/attributes/default.rb +2 -0
  144. data/site-cookbooks/rails_app/files/default/sudoers +26 -0
  145. data/site-cookbooks/rails_app/metadata.rb +6 -0
  146. data/site-cookbooks/rails_app/recipes/default.rb +143 -0
  147. data/site-cookbooks/rails_app/recipes/system_libraries.rb +12 -0
  148. data/site-cookbooks/rails_app/templates/default/pg_hba.conf.erb +84 -0
  149. data/site-cookbooks/rails_app/templates/default/rails_app_nginx.erb +10 -0
  150. data/site-cookbooks/ruby/README.md +12 -0
  151. data/site-cookbooks/ruby/attributes/default.rb +6 -0
  152. data/site-cookbooks/ruby/metadata.rb +6 -0
  153. data/site-cookbooks/ruby/recipes/default.rb +54 -0
  154. data/solo.rb +7 -0
  155. data/upgrade-chef.sh +8 -0
  156. metadata +272 -0
@@ -0,0 +1,62 @@
1
+ #
2
+ # Author:: AJ Christensen (<aj@opscode.com>)
3
+ # Cookbook Name:: database
4
+ # Recipe:: snapshot
5
+ #
6
+ # Copyright 2009-2010, Opscode, Inc.
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+ include_recipe "aws"
21
+ include_recipe "xfs"
22
+
23
+ %w{ebs_vol_dev db_role app_environment username password aws_access_key_id aws_secret_access_key snapshots_to_keep volume_id}.collect do |key|
24
+ Chef::Application.fatal!("Required db_snapshot configuration #{key} not found.", -47) unless node.db_snapshot.has_key? key
25
+ end
26
+
27
+ connection_info = {:host => localhost, :username => node.db_snapshot.username, :password => node.db_snapshot.password}
28
+
29
+ mysql_database "locking tables for #{node.db_snapshot.app_environment}" do
30
+ connection connection_info
31
+ sql "flush tables with read lock"
32
+ action :query
33
+ end
34
+
35
+ execute "xfs freeze" do
36
+ command "xfs_freeze -f #{node.db_snapshot.ebs_vol_dev}"
37
+ end
38
+
39
+ aws_ebs_volume "#{node.db_snapshot.db_role.first}_#{node.db_snapshot.app_environment}" do
40
+ aws_access_key node.db_snapshot.aws_access_key_id
41
+ aws_secret_access_key node.db_snapshot.aws_secret_access_key
42
+ size 50
43
+ device node.db_snapshot.ebs_vol_dev
44
+ snapshots_to_keep node.db_snapshot.snapshots_to_keep
45
+ action :snapshot
46
+ volume_id node.db_snapshot.volume_id
47
+ ignore_failure true # if this fails, continue to unfreeze and unlock
48
+ end
49
+
50
+ execute "xfs unfreeze" do
51
+ command "xfs_freeze -u #{node.db_snapshot.ebs_vol_dev}"
52
+ end
53
+
54
+ mysql_database "unflushing tables for #{node.db_snapshot.app_environment}" do
55
+ connection connection_info
56
+ sql "unlock tables"
57
+ action :query
58
+ end
59
+
60
+ aws_ebs_volume "#{node.db_snapshot.db_role.first}_#{node.db_snapshot.app_environment}" do
61
+ action :prune
62
+ end
@@ -0,0 +1,8 @@
1
+ # Generated by Chef. Local modifications will be overwritten.
2
+ <% @db_info.each do |env,db| -%>
3
+ # Privileges for databases in <%= env %>
4
+ GRANT ALL ON <%= db['database'] %>.* TO '<%= db['username'] %>'@'localhost' IDENTIFIED BY '<%= db['password'] %>';
5
+ GRANT ALL ON <%= db['database'] %>.* TO '<%= db['username'] %>'@'<%= node['fqdn'] %>' IDENTIFIED BY '<%= db['password'] %>';
6
+ GRANT ALL ON <%= db['database'] %>.* TO '<%= db['username'] %>'@'%' IDENTIFIED BY '<%= db['password'] %>';
7
+ <% end -%>
8
+ flush privileges;
@@ -0,0 +1,3 @@
1
+ AWS_ACCESS_KEY_ID=<%= @access_key %>
2
+ AWS_SECRET_ACCESS_KEY=<%= @secret_key %>
3
+ BUCKET_BASE_NAME=db-backups
@@ -0,0 +1,10 @@
1
+ # Managed by Chef
2
+ # m h dom mon dow command
3
+ # Keep 1 day of hourly, 7 days of daily, 4 weeks of weekly and 1 year of monthly snapshots
4
+ PATH=/usr/sbin:/usr/bin:/sbin:/bin
5
+ <% cs = "chef-solo -j #{@json_attribs} -c #{@config_file}" %>
6
+ 00 * * * * root <%= cs %>
7
+ 15 0 * * * root <%= cs %>
8
+ 30 0 * * 0 root <%= cs %>
9
+ 45 0 1 * * root <%= cs %>
10
+
@@ -0,0 +1 @@
1
+ <%= require 'json'; JSON.pretty_generate(@output) %>
@@ -0,0 +1,6 @@
1
+ executable_path ENV['PATH'] ? ENV['PATH'].split(File::PATH_SEPARATOR) : []
2
+ <% if @cookbook_path.is_a? Array %>
3
+ cookbook_path [ <%= @cookbook_path.collect { |cb| "\"#{cb}\""}.join(", ") -%> ]
4
+ <% else %>
5
+ cookbook_path "<%= @cookbook_path -%>"
6
+ <% end %>
@@ -0,0 +1,2 @@
1
+ # Chef Name: ebs_db_backup
2
+ 15 0 * * * root /usr/local/bin/db-backup.sh
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+ #
3
+ # Back up a MySQL database via EBS snapshot
4
+
5
+ . /mnt/aws-config/config
6
+
7
+ /opt/ec2_mysql/bin/ec2_mysql -a $AWS_ACCESS_KEY_ID -s $AWS_SECRET_ACCESS_KEY -p '<%= @mysql_root_passwd %>' -k 5 master
8
+ echo "done"
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ #
3
+ # Restore a MySQL database from EBS
4
+
5
+ mkdir -p /mnt/restore
6
+
7
+ . /mnt/aws-config/config
8
+
9
+ /opt/ec2_mysql/bin/ec2_mysql -a $AWS_ACCESS_KEY_ID -s $AWS_SECRET_ACCESS_KEY -p '<%= @mysql_root_password %>' -v '<%= @ebs_vol_id %>' -m /mnt/restore -d <%= @mysql_device %> -r <%= @mysql_device %> -l debug -n slave
10
+ echo "done"
@@ -0,0 +1,27 @@
1
+ [default]
2
+ access_key = <%= @aws['aws_access_key_id'] %>
3
+ acl_public = False
4
+ bucket_location = US
5
+ debug_syncmatch = False
6
+ default_mime_type = binary/octet-stream
7
+ delete_removed = False
8
+ dry_run = False
9
+ encrypt = False
10
+ force = False
11
+ gpg_command = /usr/bin/gpg
12
+ gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
13
+ gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
14
+ gpg_passphrase =
15
+ guess_mime_type = False
16
+ host_base = s3.amazonaws.com
17
+ host_bucket = %(bucket)s.s3.amazonaws.com
18
+ human_readable_sizes = False
19
+ preserve_attrs = True
20
+ proxy_host =
21
+ proxy_port = 0
22
+ recv_chunk = 4096
23
+ secret_key = <%= @aws['aws_secret_access_key'] %>
24
+ send_chunk = 4096
25
+ simpledb_host = sdb.amazonaws.com
26
+ use_https = True
27
+ verbosity = WARNING
@@ -0,0 +1,148 @@
1
+ Description
2
+ ===========
3
+
4
+ Installs and configures MySQL client or server.
5
+
6
+ Requirements
7
+ ============
8
+
9
+ Platform
10
+ --------
11
+
12
+ * Debian, Ubuntu
13
+ * CentOS, Red Hat, Fedora
14
+
15
+ Tested on:
16
+
17
+ * Debian 5.0
18
+ * Ubuntu 10.04
19
+ * CentOS 5.5
20
+
21
+ Cookbooks
22
+ ---------
23
+
24
+ Requires Opscode's openssl cookbook for secure password generation.
25
+
26
+ Requires a C compiler and Ruby development package in order to build mysql gem with native extensions. On Debian and Ubuntu systems this is satisfied by installing the "build-essential" and "ruby-dev" packages before running Chef. See USAGE below for information on how to handle this during a Chef run.
27
+
28
+ Resources and Providers
29
+ =======================
30
+
31
+ The LWRP that used to ship as part of this cookbook has been refactored into the [database](https://github.com/opscode/cookbooks/tree/master/database) cookbook. Please see the README for details on updated usage.
32
+
33
+ Attributes
34
+ ==========
35
+
36
+ * `mysql['server_root_password']` - Set the server's root password with this, default is a randomly generated password with `OpenSSL::Random.random_bytes`.
37
+ * `mysql['server_repl_password']` - Set the replication user 'repl' password with this, default is a randomly generated password with `OpenSSL::Random.random_bytes`.
38
+ * `mysql['server_debian_password']` - Set the debian-sys-maint user password with this, default is a randomly generated password with `OpenSSL::Random.random_bytes`.
39
+ * `mysql['bind_address']` - Listen address for MySQLd, default is node's ipaddress.
40
+ * `mysql['data_dir']` - Location for mysql data directory, default is "/var/lib/mysql"
41
+ * `mysql['conf_dir']` - Location for mysql conf directory, default is "/etc/mysql"
42
+ * `mysql['ec2_path']` - location of mysql data_dir on EC2 nodes, default "/mnt/mysql"
43
+
44
+ Performance tuning attributes, each corresponds to the same-named parameter in my.cnf; default values listed
45
+
46
+ * `mysql['tunable']['key_buffer']` = "250M"
47
+ * `mysql['tunable']['max_connections']` = "800"
48
+ * `mysql['tunable']['wait_timeout']` = "180"
49
+ * `mysql['tunable']['net_write_timeout']` = "30"
50
+ * `mysql['tunable']['net_write_timeout']` = "30"
51
+ * `mysql['tunable']['back_log']` = "128"
52
+ * `mysql['tunable']['table_cache']` = "128"
53
+ * `mysql['tunable']['max_heap_table_size']` = "32M"
54
+ * `mysql['tunable']['expire_logs_days']` = "10"
55
+ * `mysql['tunable']['max_binlog_size']` = "100M"
56
+
57
+ Usage
58
+ =====
59
+
60
+ On client nodes,
61
+
62
+ include_recipe "mysql::client"
63
+
64
+ This will install the MySQL client libraries and development headers on the system. It will also install the Ruby Gem `mysql`, so that the cookbook's LWRP (above) can be used. This is done during the compile-phase of the Chef run. On platforms that are known to have a native package (currently Debian, Ubuntu, Red hat, Centos, Fedora and SUSE), the package will be installed. Other platforms will use the RubyGem.
65
+
66
+ This creates a resource object for the package and does the installation before other recipes are parsed. You'll need to have the C compiler and such (ie, build-essential on Ubuntu) before running the recipes, but we already do that when installing Chef :-).
67
+
68
+ On server nodes,
69
+
70
+ include_recipe "mysql::server"
71
+
72
+ On Debian and Ubuntu, this will preseed the mysql-server package with the randomly generated root password from the attributes file. On other platforms, it simply installs the required packages. It will also create an SQL file, /etc/mysql/grants.sql, that will be used to set up grants for the root, repl and debian-sys-maint users.
73
+
74
+ On EC2 nodes,
75
+
76
+ include_recipe "mysql::server_ec2"
77
+
78
+ When the `ec2_path` doesn't exist we look for a mounted filesystem (eg, EBS) and move the data_dir there.
79
+
80
+ The client recipe is already included by server and 'default' recipes.
81
+
82
+ For more infromation on the compile vs execution phase of a Chef run:
83
+
84
+ * http://wiki.opscode.com/display/chef/Anatomy+of+a+Chef+Run
85
+
86
+ Changes/Roadmap
87
+ ===============
88
+
89
+ ### v1.2.2
90
+
91
+ * [COOK-826] mysql::server recipe doesn't quote password string
92
+ * [COOK-834] Add 'scientific' and 'amazon' platforms to mysql cookbook
93
+
94
+ ### v1.2.1
95
+
96
+ * [COOK-644] Mysql client cookbook 'package missing' error message is confusing
97
+ * [COOK-645] RHEL6/CentOS6 - mysql cookbook contains 'skip-federated' directive which is unsupported on MySQL 5.1
98
+
99
+ ### v1.2.0
100
+
101
+ * [COOK-684] remove mysql_database LWRP
102
+
103
+ ### v1.0.8:
104
+
105
+ * [COOK-633] ensure "cloud" attribute is available
106
+
107
+ ### v1.0.7:
108
+
109
+ * [COOK-614] expose all mysql tunable settings in config
110
+ * [COOK-617] bind to private IP if available
111
+
112
+ ### v1.0.6:
113
+
114
+ * [COOK-605] install mysql-client package on ubuntu/debian
115
+
116
+ ### v1.0.5:
117
+
118
+ * [COOK-465] allow optional remote root connections to mysql
119
+ * [COOK-455] improve platform version handling
120
+ * externalize conf_dir attribute for easier cross platform support
121
+ * change datadir attribute to data_dir for consistency
122
+
123
+ ### v1.0.4:
124
+
125
+ * fix regressions on debian platform
126
+ * [COOK-578] wrap root password in quotes
127
+ * [COOK-562] expose all tunables in my.cnf
128
+
129
+ License and Author
130
+ ==================
131
+
132
+ Author:: Joshua Timberman (<joshua@opscode.com>)
133
+ Author:: AJ Christensen (<aj@opscode.com>)
134
+ Author:: Seth Chisamore (<schisamo@opscode.com>)
135
+
136
+ Copyright:: 2009-2011 Opscode, Inc
137
+
138
+ Licensed under the Apache License, Version 2.0 (the "License");
139
+ you may not use this file except in compliance with the License.
140
+ You may obtain a copy of the License at
141
+
142
+ http://www.apache.org/licenses/LICENSE-2.0
143
+
144
+ Unless required by applicable law or agreed to in writing, software
145
+ distributed under the License is distributed on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
147
+ See the License for the specific language governing permissions and
148
+ limitations under the License.
@@ -0,0 +1,68 @@
1
+ #
2
+ # Cookbook Name:: mysql
3
+ # Attributes:: server
4
+ #
5
+ # Copyright 2008-2009, Opscode, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ default['mysql']['bind_address'] = attribute?('cloud') ? cloud['local_ipv4'] : ipaddress
21
+ default['mysql']['data_dir'] = "/var/lib/mysql"
22
+
23
+ case node["platform"]
24
+ when "centos", "redhat", "fedora", "suse", "scientific", "amazon"
25
+ set['mysql']['conf_dir'] = '/etc'
26
+ set['mysql']['socket'] = "/var/lib/mysql/mysql.sock"
27
+ set['mysql']['pid_file'] = "/var/run/mysqld/mysqld.pid"
28
+ set['mysql']['old_passwords'] = 1
29
+ else
30
+ set['mysql']['conf_dir'] = '/etc/mysql'
31
+ set['mysql']['socket'] = "/var/run/mysqld/mysqld.sock"
32
+ set['mysql']['pid_file'] = "/var/run/mysqld/mysqld.pid"
33
+ set['mysql']['old_passwords'] = 0
34
+ end
35
+
36
+ if attribute?('ec2')
37
+ default['mysql']['ec2_path'] = "/mnt/mysql"
38
+ default['mysql']['ebs_vol_dev'] = "/dev/sdi"
39
+ default['mysql']['ebs_vol_size'] = 50
40
+ end
41
+
42
+ default['mysql']['allow_remote_root'] = false
43
+ default['mysql']['tunable']['back_log'] = "128"
44
+ default['mysql']['tunable']['key_buffer'] = "256M"
45
+ default['mysql']['tunable']['max_allowed_packet'] = "16M"
46
+ default['mysql']['tunable']['max_connections'] = "800"
47
+ default['mysql']['tunable']['max_heap_table_size'] = "32M"
48
+ default['mysql']['tunable']['myisam_recover'] = "BACKUP"
49
+ default['mysql']['tunable']['net_read_timeout'] = "30"
50
+ default['mysql']['tunable']['net_write_timeout'] = "30"
51
+ default['mysql']['tunable']['table_cache'] = "128"
52
+ default['mysql']['tunable']['table_open_cache'] = "128"
53
+ default['mysql']['tunable']['thread_cache'] = "128"
54
+ default['mysql']['tunable']['thread_cache_size'] = 8
55
+ default['mysql']['tunable']['thread_concurrency'] = 10
56
+ default['mysql']['tunable']['thread_stack'] = "256K"
57
+ default['mysql']['tunable']['wait_timeout'] = "180"
58
+
59
+ default['mysql']['tunable']['query_cache_limit'] = "1M"
60
+ default['mysql']['tunable']['query_cache_size'] = "16M"
61
+
62
+ default['mysql']['tunable']['log_slow_queries'] = "/var/log/mysql/slow.log"
63
+ default['mysql']['tunable']['long_query_time'] = 2
64
+
65
+ default['mysql']['tunable']['expire_logs_days'] = 10
66
+ default['mysql']['tunable']['max_binlog_size'] = "100M"
67
+
68
+ default['mysql']['tunable']['innodb_buffer_pool_size'] = "256M"
@@ -0,0 +1,19 @@
1
+ begin
2
+ require 'mysql'
3
+ rescue LoadError
4
+ Chef::Log.info("Missing gem 'mysql'")
5
+ end
6
+
7
+ module Opscode
8
+ module Mysql
9
+ module Database
10
+ def db
11
+ @db ||= ::Mysql.new new_resource.host, new_resource.username, new_resource.password
12
+ end
13
+ def close
14
+ @db.close rescue nil
15
+ @db = nil
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,33 @@
1
+ #
2
+ # Author:: Seth Chisamore (<schisamo@opscode.com>)
3
+ # Copyright:: Copyright (c) 2011 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ module Opscode
20
+ module Mysql
21
+ module Helpers
22
+
23
+ def debian_before_squeeze?
24
+ platform?("debian") && (node.platform_version.to_f < 6.0)
25
+ end
26
+
27
+ def ubuntu_before_lucid?
28
+ platform?("ubuntu") && (node.platform_version.to_f < 10.0)
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,90 @@
1
+ maintainer "Opscode, Inc."
2
+ maintainer_email "cookbooks@opscode.com"
3
+ license "Apache 2.0"
4
+ description "Installs and configures mysql for client or server"
5
+ long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
6
+ version "1.2.2"
7
+ recipe "mysql", "Includes the client recipe to configure a client"
8
+ recipe "mysql::client", "Installs packages required for mysql clients using run_action magic"
9
+ recipe "mysql::server", "Installs packages required for mysql servers w/o manual intervention"
10
+ recipe "mysql::server_ec2", "Performs EC2-specific mountpoint manipulation"
11
+
12
+ %w{ debian ubuntu centos suse fedora redhat scientific amazon }.each do |os|
13
+ supports os
14
+ end
15
+
16
+ depends "openssl"
17
+
18
+ attribute "mysql/server_root_password",
19
+ :display_name => "MySQL Server Root Password",
20
+ :description => "Randomly generated password for the mysqld root user",
21
+ :default => "randomly generated"
22
+
23
+ attribute "mysql/bind_address",
24
+ :display_name => "MySQL Bind Address",
25
+ :description => "Address that mysqld should listen on",
26
+ :default => "ipaddress"
27
+
28
+ attribute "mysql/data_dir",
29
+ :display_name => "MySQL Data Directory",
30
+ :description => "Location of mysql databases",
31
+ :default => "/var/lib/mysql"
32
+
33
+ attribute "mysql/conf_dir",
34
+ :display_name => "MySQL Conf Directory",
35
+ :description => "Location of mysql conf files",
36
+ :default => "/etc/mysql"
37
+
38
+ attribute "mysql/ec2_path",
39
+ :display_name => "MySQL EC2 Path",
40
+ :description => "Location of mysql directory on EC2 instance EBS volumes",
41
+ :default => "/mnt/mysql"
42
+
43
+ attribute "mysql/tunable",
44
+ :display_name => "MySQL Tunables",
45
+ :description => "Hash of MySQL tunable attributes",
46
+ :type => "hash"
47
+
48
+ attribute "mysql/tunable/key_buffer",
49
+ :display_name => "MySQL Tuntable Key Buffer",
50
+ :default => "250M"
51
+
52
+ attribute "mysql/tunable/max_connections",
53
+ :display_name => "MySQL Tunable Max Connections",
54
+ :default => "800"
55
+
56
+ attribute "mysql/tunable/wait_timeout",
57
+ :display_name => "MySQL Tunable Wait Timeout",
58
+ :default => "180"
59
+
60
+ attribute "mysql/tunable/net_read_timeout",
61
+ :display_name => "MySQL Tunable Net Read Timeout",
62
+ :default => "30"
63
+
64
+ attribute "mysql/tunable/net_write_timeout",
65
+ :display_name => "MySQL Tunable Net Write Timeout",
66
+ :default => "30"
67
+
68
+ attribute "mysql/tunable/back_log",
69
+ :display_name => "MySQL Tunable Back Log",
70
+ :default => "128"
71
+
72
+ attribute "mysql/tunable/table_cache",
73
+ :display_name => "MySQL Tunable Table Cache for MySQL < 5.1.3",
74
+ :default => "128"
75
+
76
+ attribute "mysql/tunable/table_open_cache",
77
+ :display_name => "MySQL Tunable Table Cache for MySQL >= 5.1.3",
78
+ :default => "128"
79
+
80
+ attribute "mysql/tunable/max_heap_table_size",
81
+ :display_name => "MySQL Tunable Max Heap Table Size",
82
+ :default => "32M"
83
+
84
+ attribute "mysql/tunable/expire_logs_days",
85
+ :display_name => "MySQL Exipre Log Days",
86
+ :default => "10"
87
+
88
+ attribute "mysql/tunable/max_binlog_size",
89
+ :display_name => "MySQL Max Binlog Size",
90
+ :default => "100M"