server_maint 0.0.3 → 0.0.4
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/.gitmodules +21 -0
- data/lib/cookbooks/aws/CHANGELOG.md +11 -0
- data/lib/cookbooks/aws/CONTRIBUTING +29 -0
- data/lib/cookbooks/aws/LICENSE +201 -0
- data/lib/cookbooks/aws/README.md +271 -0
- data/lib/cookbooks/aws/attributes/default.rb +20 -0
- data/lib/cookbooks/aws/libraries/ec2.rb +58 -0
- data/lib/cookbooks/aws/metadata.rb +7 -0
- data/lib/cookbooks/aws/providers/ebs_volume.rb +236 -0
- data/lib/cookbooks/aws/providers/elastic_ip.rb +90 -0
- data/lib/cookbooks/aws/providers/elastic_lb.rb +24 -0
- data/lib/cookbooks/aws/providers/resource_tag.rb +93 -0
- data/lib/cookbooks/aws/recipes/default.rb +25 -0
- data/lib/cookbooks/aws/resources/ebs_volume.rb +17 -0
- data/lib/cookbooks/aws/resources/elastic_ip.rb +11 -0
- data/lib/cookbooks/aws/resources/elastic_lb.rb +10 -0
- data/lib/cookbooks/aws/resources/resource_tag.rb +11 -0
- data/lib/cookbooks/database/.gitignore +1 -0
- data/lib/cookbooks/database/CHANGELOG.md +51 -0
- data/lib/cookbooks/database/CONTRIBUTING +29 -0
- data/lib/cookbooks/database/LICENSE +201 -0
- data/lib/cookbooks/database/README.md +468 -0
- data/lib/cookbooks/database/libraries/provider_database_mysql.rb +103 -0
- data/lib/cookbooks/database/libraries/provider_database_mysql_user.rb +76 -0
- data/lib/cookbooks/database/libraries/provider_database_postgresql.rb +131 -0
- data/lib/cookbooks/database/libraries/provider_database_postgresql_user.rb +83 -0
- data/lib/cookbooks/database/libraries/provider_database_sql_server.rb +109 -0
- data/lib/cookbooks/database/libraries/provider_database_sql_server_user.rb +106 -0
- data/lib/cookbooks/database/libraries/resource_database.rb +119 -0
- data/lib/cookbooks/database/libraries/resource_database_user.rb +90 -0
- data/lib/cookbooks/database/libraries/resource_mysql_database.rb +34 -0
- data/lib/cookbooks/database/libraries/resource_mysql_database_user.rb +34 -0
- data/lib/cookbooks/database/libraries/resource_postgresql_database.rb +35 -0
- data/lib/cookbooks/database/libraries/resource_postgresql_database_user.rb +35 -0
- data/lib/cookbooks/database/libraries/resource_sql_server_database.rb +34 -0
- data/lib/cookbooks/database/libraries/resource_sql_server_database_user.rb +34 -0
- data/lib/cookbooks/database/metadata.rb +22 -0
- data/lib/cookbooks/database/recipes/default.rb +20 -0
- data/lib/cookbooks/database/recipes/ebs_backup.rb +89 -0
- data/lib/cookbooks/database/recipes/ebs_volume.rb +204 -0
- data/lib/cookbooks/database/recipes/master.rb +78 -0
- data/lib/cookbooks/database/recipes/mysql.rb +20 -0
- data/lib/cookbooks/database/recipes/postgresql.rb +20 -0
- data/lib/cookbooks/database/recipes/snapshot.rb +62 -0
- data/lib/cookbooks/database/templates/default/app_grants.sql.erb +8 -0
- data/lib/cookbooks/database/templates/default/aws_config.erb +3 -0
- data/lib/cookbooks/database/templates/default/chef-solo-database-snapshot.cron.erb +6 -0
- data/lib/cookbooks/database/templates/default/chef-solo-database-snapshot.json.erb +1 -0
- data/lib/cookbooks/database/templates/default/chef-solo-database-snapshot.rb.erb +6 -0
- data/lib/cookbooks/database/templates/default/ebs-backup-cron.erb +2 -0
- data/lib/cookbooks/database/templates/default/ebs-db-backup.sh.erb +8 -0
- data/lib/cookbooks/database/templates/default/ebs-db-restore.sh.erb +10 -0
- data/lib/cookbooks/database/templates/default/s3cfg.erb +27 -0
- data/lib/cookbooks/mysql/.gitignore +5 -0
- data/lib/cookbooks/mysql/CHANGELOG.md +86 -0
- data/lib/cookbooks/mysql/CONTRIBUTING +29 -0
- data/lib/cookbooks/mysql/Gemfile +8 -0
- data/lib/cookbooks/mysql/LICENSE +201 -0
- data/lib/cookbooks/mysql/README.md +227 -0
- data/lib/cookbooks/mysql/attributes/client.rb +50 -0
- data/lib/cookbooks/mysql/attributes/server.rb +153 -0
- data/lib/cookbooks/mysql/files/default/tests/minitest/server_test.rb +36 -0
- data/lib/cookbooks/mysql/files/default/tests/minitest/support/helpers.rb +11 -0
- data/lib/cookbooks/mysql/libraries/helpers.rb +33 -0
- data/lib/cookbooks/mysql/metadata.rb +140 -0
- data/lib/cookbooks/mysql/recipes/client.rb +59 -0
- data/lib/cookbooks/mysql/recipes/default.rb +20 -0
- data/lib/cookbooks/mysql/recipes/ruby.rb +36 -0
- data/lib/cookbooks/mysql/recipes/server.rb +216 -0
- data/lib/cookbooks/mysql/recipes/server_ec2.rb +51 -0
- data/lib/cookbooks/mysql/templates/default/debian.cnf.erb +12 -0
- data/lib/cookbooks/mysql/templates/default/grants.sql.erb +15 -0
- data/lib/cookbooks/mysql/templates/default/my.cnf.erb +211 -0
- data/lib/cookbooks/mysql/templates/default/mysql-server.seed.erb +10 -0
- data/lib/cookbooks/mysql/templates/default/port_mysql.erb +3 -0
- data/lib/cookbooks/mysql/templates/windows/my.cnf.erb +61 -0
- data/lib/cookbooks/mysql/test/features/query_database.feature +26 -0
- data/lib/cookbooks/mysql/test/features/step_definitions/mysql_steps.rb +47 -0
- data/lib/cookbooks/mysql/test/features/support/env.rb +3 -0
- data/lib/cookbooks/mysql/test/features/support/mysql_helpers.rb +51 -0
- data/lib/cookbooks/mysql/test/kitchen/Kitchenfile +5 -0
- data/lib/cookbooks/mysql/test/kitchen/cookbooks/mysql_test/.gitignore +1 -0
- data/lib/cookbooks/mysql/test/kitchen/cookbooks/mysql_test/README.md +63 -0
- data/lib/cookbooks/mysql/test/kitchen/cookbooks/mysql_test/attributes/default.rb +27 -0
- data/lib/cookbooks/mysql/test/kitchen/cookbooks/mysql_test/metadata.rb +10 -0
- data/lib/cookbooks/mysql/test/kitchen/cookbooks/mysql_test/recipes/client.rb +20 -0
- data/lib/cookbooks/mysql/test/kitchen/cookbooks/mysql_test/recipes/server.rb +72 -0
- data/lib/cookbooks/openssl/CHANGELOG.md +0 -0
- data/lib/cookbooks/openssl/CONTRIBUTING +29 -0
- data/lib/cookbooks/openssl/LICENSE +201 -0
- data/lib/cookbooks/openssl/README.md +37 -0
- data/lib/cookbooks/openssl/libraries/secure_password.rb +37 -0
- data/lib/cookbooks/openssl/metadata.rb +8 -0
- data/lib/cookbooks/openssl/recipes/default.rb +19 -0
- data/lib/cookbooks/postgresql/CHANGELOG.md +35 -0
- data/lib/cookbooks/postgresql/CONTRIBUTING +29 -0
- data/lib/cookbooks/postgresql/LICENSE +201 -0
- data/lib/cookbooks/postgresql/README.md +148 -0
- data/lib/cookbooks/postgresql/attributes/default.rb +103 -0
- data/lib/cookbooks/postgresql/metadata.rb +21 -0
- data/lib/cookbooks/postgresql/recipes/client.rb +26 -0
- data/lib/cookbooks/postgresql/recipes/default.rb +20 -0
- data/lib/cookbooks/postgresql/recipes/ruby.rb +40 -0
- data/lib/cookbooks/postgresql/recipes/server.rb +64 -0
- data/lib/cookbooks/postgresql/recipes/server_debian.rb +64 -0
- data/lib/cookbooks/postgresql/recipes/server_redhat.rb +77 -0
- data/lib/cookbooks/postgresql/templates/default/debian.postgresql.conf.erb +499 -0
- data/lib/cookbooks/postgresql/templates/default/pg_hba.conf.erb +83 -0
- data/lib/cookbooks/postgresql/templates/default/redhat.postgresql.conf.erb +501 -0
- data/lib/cookbooks/sqlite/.gitignore +4 -0
- data/lib/cookbooks/sqlite/CHANGELOG.md +3 -0
- data/lib/cookbooks/sqlite/CONTRIBUTING +29 -0
- data/lib/cookbooks/sqlite/Gemfile +2 -0
- data/lib/cookbooks/sqlite/LICENSE +201 -0
- data/lib/cookbooks/sqlite/README.md +36 -0
- data/lib/cookbooks/sqlite/metadata.rb +12 -0
- data/lib/cookbooks/sqlite/recipes/default.rb +30 -0
- data/lib/cookbooks/sqlite/test/kitchen/Kitchenfile +1 -0
- data/lib/cookbooks/xfs/CHANGELOG.md +0 -0
- data/lib/cookbooks/xfs/CONTRIBUTING +29 -0
- data/lib/cookbooks/xfs/LICENSE +201 -0
- data/lib/cookbooks/xfs/README.md +30 -0
- data/lib/cookbooks/xfs/metadata.rb +12 -0
- data/lib/cookbooks/xfs/recipes/default.rb +26 -0
- data/lib/server_maint/version.rb +1 -1
- metadata +127 -4
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Joshua Timberman (<joshua@opscode.com>)
|
|
3
|
+
# Author:: AJ Christensen (<aj@opscode.com>)
|
|
4
|
+
# Cookbook Name:: database
|
|
5
|
+
# Recipe:: ebs_volume
|
|
6
|
+
#
|
|
7
|
+
# Copyright 2009-2010, Opscode, Inc.
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
if node[:ec2]
|
|
23
|
+
include_recipe "aws"
|
|
24
|
+
include_recipe "xfs"
|
|
25
|
+
|
|
26
|
+
begin
|
|
27
|
+
aws = Chef::DataBagItem.load(:aws, :main)
|
|
28
|
+
Chef::Log.info("Loaded AWS information from DataBagItem aws[#{aws['id']}]")
|
|
29
|
+
rescue
|
|
30
|
+
Chef::Log.fatal("Could not find the 'main' item in the 'aws' data bag")
|
|
31
|
+
raise
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
ebs_vol_dev = node['mysql']['ebs_vol_dev']
|
|
35
|
+
if (platform?("ubuntu") && node['platform_version'].to_f >= 11.04)
|
|
36
|
+
ebs_vol_dev_mount = ebs_vol_dev.sub(/^\/dev\/sd/, "/dev/xvd")
|
|
37
|
+
else
|
|
38
|
+
ebs_vol_dev_mount = ebs_vol_dev
|
|
39
|
+
end
|
|
40
|
+
ebs_vol_id = String.new
|
|
41
|
+
db_type = String.new
|
|
42
|
+
db_role = String.new
|
|
43
|
+
master_role = String.new
|
|
44
|
+
slave_role = String.new
|
|
45
|
+
root_pw = String.new
|
|
46
|
+
snapshots_to_keep = String.new
|
|
47
|
+
snapshot_cron_schedule = "00 * * * *" # default to hourly snapshots
|
|
48
|
+
|
|
49
|
+
search(:apps) do |app|
|
|
50
|
+
if (app["database_master_role"] & node.run_list.roles).length == 1 || (app["database_slave_role"] & node.run_list.roles).length == 1
|
|
51
|
+
master_role = app["database_master_role"] & node.run_list.roles
|
|
52
|
+
slave_role = app["database_slave_role"] & node.run_list.roles
|
|
53
|
+
root_pw = app["mysql_root_password"][node.chef_environment]
|
|
54
|
+
snapshots_to_keep = app["snapshots_to_keep"][node.chef_environment]
|
|
55
|
+
snapshot_cron_schedule = app["snapshot_cron_schedule"][node.chef_environment] if app["snapshot_cron_schedule"] && app["snapshot_cron_schedule"][node.chef_environment]
|
|
56
|
+
|
|
57
|
+
if (master_role & node.run_list.roles).length == 1
|
|
58
|
+
db_type = "master"
|
|
59
|
+
db_role = RUBY_VERSION.to_f <= 1.8 ? master_role : master_role.join
|
|
60
|
+
elsif (slave_role & node.run_list.roles).length == 1
|
|
61
|
+
db_type = "slave"
|
|
62
|
+
db_role = RUBY_VERSION.to_f <= 1.8 ? slave_role : slave_role.join
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Chef::Log.info "database::ebs_volume - db_role: #{db_role} db_type: #{db_type}"
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
begin
|
|
70
|
+
ebs_info = Chef::DataBagItem.load(:aws, "ebs_#{db_role}_#{node.chef_environment}")
|
|
71
|
+
Chef::Log.info("Loaded #{ebs_info['volume_id']} from DataBagItem aws[#{ebs_info['id']}]")
|
|
72
|
+
rescue
|
|
73
|
+
Chef::Log.warn("Could not find the 'ebs_#{db_role}_#{node.chef_environment}' item in the 'aws' data bag")
|
|
74
|
+
ebs_info = Hash.new
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
begin
|
|
78
|
+
master_info = Chef::DataBagItem.load(:aws, "ebs_#{master_role}_#{node.chef_environment}")
|
|
79
|
+
Chef::Log.info "Loaded #{master_info['volume_id']} from DataBagItem aws[#{master_info['id']}]"
|
|
80
|
+
rescue
|
|
81
|
+
Chef::Application.fatal! "Could not load replication masters snapshot details", -41 if db_type == "slave"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
ruby_block "store_#{db_role}_#{node.chef_environment}_volid" do
|
|
85
|
+
block do
|
|
86
|
+
ebs_vol_id = node[:aws][:ebs_volume]["#{db_role}_#{node.chef_environment}"][:volume_id]
|
|
87
|
+
|
|
88
|
+
unless ebs_info['volume_id']
|
|
89
|
+
item = {
|
|
90
|
+
"id" => "ebs_#{db_role}_#{node.chef_environment}",
|
|
91
|
+
"volume_id" => ebs_vol_id
|
|
92
|
+
}
|
|
93
|
+
Chef::Log.info "Storing volume_id #{item.inspect}"
|
|
94
|
+
databag_item = Chef::DataBagItem.new
|
|
95
|
+
databag_item.data_bag("aws")
|
|
96
|
+
databag_item.raw_data = item
|
|
97
|
+
databag_item.save
|
|
98
|
+
Chef::Log.info("Created #{item['id']} in #{databag_item.data_bag}")
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
action :nothing
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
aws_ebs_volume "#{db_role}_#{node.chef_environment}" do
|
|
105
|
+
aws_access_key aws['aws_access_key_id']
|
|
106
|
+
aws_secret_access_key aws['aws_secret_access_key']
|
|
107
|
+
size 50
|
|
108
|
+
device ebs_vol_dev
|
|
109
|
+
snapshots_to_keep snapshots_to_keep
|
|
110
|
+
case db_type
|
|
111
|
+
when "master"
|
|
112
|
+
if ebs_info['volume_id'] && ebs_info['volume_id'] =~ /vol/
|
|
113
|
+
volume_id ebs_info['volume_id']
|
|
114
|
+
action :attach
|
|
115
|
+
elsif ebs_info['volume_id'] && ebs_info['volume_id'] =~ /snap/
|
|
116
|
+
snapshot_id ebs_info['volume_id']
|
|
117
|
+
action [ :create, :attach ]
|
|
118
|
+
else
|
|
119
|
+
action [ :create, :attach ]
|
|
120
|
+
end
|
|
121
|
+
notifies :create, resources(:ruby_block => "store_#{db_role}_#{node.chef_environment}_volid")
|
|
122
|
+
when "slave"
|
|
123
|
+
if master_info['volume_id']
|
|
124
|
+
snapshot_id master_info['volume_id']
|
|
125
|
+
action [:create, :attach]
|
|
126
|
+
else
|
|
127
|
+
Chef::Log.warn("Couldn't detect snapshot ID.")
|
|
128
|
+
action :nothing
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
provider "aws_ebs_volume"
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
if db_type == "master"
|
|
135
|
+
Chef::Log.info "Setting up templates for chef-solo snapshots"
|
|
136
|
+
template "/etc/chef/chef-solo-database-snapshot.rb" do
|
|
137
|
+
source "chef-solo-database-snapshot.rb.erb"
|
|
138
|
+
variables :cookbook_path => Chef::Config[:cookbook_path]
|
|
139
|
+
owner "root"
|
|
140
|
+
group "root"
|
|
141
|
+
mode 0600
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
template "/etc/chef/chef-solo-database-snapshot.json" do
|
|
145
|
+
source "chef-solo-database-snapshot.json.erb"
|
|
146
|
+
variables(
|
|
147
|
+
:output => {
|
|
148
|
+
'db_snapshot' => {
|
|
149
|
+
'ebs_vol_dev' => node.mysql.ec2_path,
|
|
150
|
+
'db_role' => db_role,
|
|
151
|
+
'app_environment' => node.chef_environment,
|
|
152
|
+
'username' => 'root',
|
|
153
|
+
'password' => root_pw,
|
|
154
|
+
'aws_access_key_id' => aws['aws_access_key_id'],
|
|
155
|
+
'aws_secret_access_key' => aws['aws_secret_access_key'],
|
|
156
|
+
'snapshots_to_keep' => snapshots_to_keep,
|
|
157
|
+
'volume_id' => ebs_info['volume_id']
|
|
158
|
+
},
|
|
159
|
+
'run_list' => [
|
|
160
|
+
"recipe[database::snapshot]"
|
|
161
|
+
]
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
owner "root"
|
|
165
|
+
group "root"
|
|
166
|
+
mode 0600
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
template "/etc/cron.d/chef-solo-database-snapshot" do
|
|
170
|
+
source "chef-solo-database-snapshot.cron.erb"
|
|
171
|
+
variables(
|
|
172
|
+
:json_attribs => "/etc/chef/chef-solo-database-snapshot.json",
|
|
173
|
+
:config_file => "/etc/chef/chef-solo-database-snapshot.rb",
|
|
174
|
+
:schedule => snapshot_cron_schedule
|
|
175
|
+
)
|
|
176
|
+
owner "root"
|
|
177
|
+
group "root"
|
|
178
|
+
mode 0600
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
execute "mkfs.xfs #{ebs_vol_dev_mount}" do
|
|
183
|
+
only_if "xfs_admin -l #{ebs_vol_dev_mount} 2>&1 | grep -qx 'xfs_admin: #{ebs_vol_dev_mount} is not a valid XFS filesystem (unexpected SB magic number 0x00000000)'"
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
%w{ec2_path data_dir}.each do |dir|
|
|
187
|
+
directory node['mysql'][dir] do
|
|
188
|
+
mode 0755
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
mount node['mysql']['ec2_path'] do
|
|
193
|
+
device ebs_vol_dev_mount
|
|
194
|
+
fstype "xfs"
|
|
195
|
+
action :mount
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
mount node['mysql']['data_dir'] do
|
|
199
|
+
device node['mysql']['ec2_path']
|
|
200
|
+
fstype "none"
|
|
201
|
+
options "bind,rw"
|
|
202
|
+
action :mount
|
|
203
|
+
end
|
|
204
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Joshua Timberman (<joshua@opscode.com>)
|
|
3
|
+
# Cookbook Name:: database
|
|
4
|
+
# Recipe:: master
|
|
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
|
+
# This is potentially destructive to the nodes mysql password attributes, since
|
|
21
|
+
# we iterate over all the app databags. If this database server provides
|
|
22
|
+
# databases for multiple applications, the last app found in the databags
|
|
23
|
+
# will win out, so make sure the databags have the same passwords set for
|
|
24
|
+
# the root, repl, and debian-sys-maint users.
|
|
25
|
+
#
|
|
26
|
+
|
|
27
|
+
db_info = Hash.new
|
|
28
|
+
root_pw = String.new
|
|
29
|
+
|
|
30
|
+
search(:apps) do |app|
|
|
31
|
+
(app['database_master_role'] & node.run_list.roles).each do |dbm_role|
|
|
32
|
+
%w{ root repl debian }.each do |user|
|
|
33
|
+
user_pw = app["mysql_#{user}_password"]
|
|
34
|
+
if !user_pw.nil? and user_pw[node.chef_environment]
|
|
35
|
+
Chef::Log.debug("Saving password for #{user} as node attribute node['mysql']['server_#{user}_password'")
|
|
36
|
+
node.set['mysql']["server_#{user}_password"] = user_pw[node.chef_environment]
|
|
37
|
+
node.save
|
|
38
|
+
else
|
|
39
|
+
log "A password for MySQL user #{user} was not found in DataBag 'apps' item '#{app["id"]}' for environment ' for #{node.chef_environment}'." do
|
|
40
|
+
level :warn
|
|
41
|
+
end
|
|
42
|
+
log "A random password will be generated by the mysql cookbook and added as 'node.mysql.server_#{user}_password'. Edit the DataBag item to ensure it is set correctly on new nodes" do
|
|
43
|
+
level :warn
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
app['databases'].each do |env,db|
|
|
48
|
+
db_info[env] = db
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
include_recipe "mysql::server"
|
|
54
|
+
|
|
55
|
+
connection_info = {:host => "localhost", :username => 'root', :password => node['mysql']['server_root_password']}
|
|
56
|
+
|
|
57
|
+
search(:apps) do |app|
|
|
58
|
+
(app['database_master_role'] & node.run_list.roles).each do |dbm_role|
|
|
59
|
+
app['databases'].each do |env,db|
|
|
60
|
+
if env =~ /#{node.chef_environment}/
|
|
61
|
+
mysql_database "create #{db['database']}" do
|
|
62
|
+
database_name db['database']
|
|
63
|
+
connection connection_info
|
|
64
|
+
action :create
|
|
65
|
+
end
|
|
66
|
+
%W{ % #{node['fqdn']} localhost }.each do |h|
|
|
67
|
+
mysql_database_user db['username'] do
|
|
68
|
+
connection connection_info
|
|
69
|
+
password db['password']
|
|
70
|
+
database_name db['database']
|
|
71
|
+
host h
|
|
72
|
+
action :grant
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Jesse Howarth (<him@jessehowarth.com>)
|
|
3
|
+
#
|
|
4
|
+
# Copyright:: Copyright (c) 2012, Opscode, Inc. (<legal@opscode.com>)
|
|
5
|
+
# License:: Apache License, Version 2.0
|
|
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
|
+
include_recipe "mysql::ruby"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Jesse Howarth (<him@jessehowarth.com>)
|
|
3
|
+
#
|
|
4
|
+
# Copyright:: Copyright (c) 2012, Opscode, Inc. (<legal@opscode.com>)
|
|
5
|
+
# License:: Apache License, Version 2.0
|
|
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
|
+
include_recipe "postgresql::ruby"
|
|
@@ -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 @@
|
|
|
1
|
+
<%= require 'json'; JSON.pretty_generate(@output) %>
|
|
@@ -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,86 @@
|
|
|
1
|
+
## v1.3.0:
|
|
2
|
+
|
|
3
|
+
**Important note for this release**
|
|
4
|
+
|
|
5
|
+
This version no longer installs Ruby bindings in the client recipe by
|
|
6
|
+
default. Use the ruby recipe if you'd like the RubyGem. If you'd like
|
|
7
|
+
packages from your distribution, use them in your application's
|
|
8
|
+
specific cookbook/recipe, or modify the client packages attribute.
|
|
9
|
+
This resolves the following tickets:
|
|
10
|
+
|
|
11
|
+
* COOK-932
|
|
12
|
+
* COOK-1009
|
|
13
|
+
* COOK-1384
|
|
14
|
+
|
|
15
|
+
Additionally, this cookbook now has tests (COOK-1439) for use under
|
|
16
|
+
test-kitchen.
|
|
17
|
+
|
|
18
|
+
The following issues are also addressed in this release.
|
|
19
|
+
|
|
20
|
+
* [COOK-1443] - MySQL (>= 5.1.24) does not support `innodb_flush_method`
|
|
21
|
+
= fdatasync
|
|
22
|
+
* [COOK-1175] - Add Mac OS X support
|
|
23
|
+
* [COOK-1289] - handle additional tunable attributes
|
|
24
|
+
* [COOK-1305] - add auto-increment-increment and auto-increment-offset
|
|
25
|
+
attributes
|
|
26
|
+
* [COOK-1397] - make the port an attribute
|
|
27
|
+
* [COOK-1439] - Add MySQL cookbook tests for test-kitchen support
|
|
28
|
+
* [COOK-1236] - Move package names into attributes to allow percona to
|
|
29
|
+
free-ride
|
|
30
|
+
* [COOK-934] - remove deprecated mysql/libraries/database.rb, use the
|
|
31
|
+
database cookbook instead.
|
|
32
|
+
* [COOK-1475] - fix restart on config change
|
|
33
|
+
|
|
34
|
+
## v1.2.6:
|
|
35
|
+
|
|
36
|
+
* [COOK-1113] - Use an attribute to determine if upstart is used
|
|
37
|
+
* [COOK-1121] - Add support for Windows
|
|
38
|
+
* [COOK-1140] - Fix conf.d on Debian
|
|
39
|
+
* [COOK-1151] - Fix server_ec2 handling /var/lib/mysql bind mount
|
|
40
|
+
* [COOK-1321] - Document setting password attributes for solo
|
|
41
|
+
|
|
42
|
+
## v1.2.4
|
|
43
|
+
|
|
44
|
+
* [COOK-992] - fix FATAL nameerror
|
|
45
|
+
* [COOK-827] - `mysql:server_ec2` recipe can't mount `data_dir`
|
|
46
|
+
* [COOK-945] - FreeBSD support
|
|
47
|
+
|
|
48
|
+
## v1.2.2
|
|
49
|
+
|
|
50
|
+
* [COOK-826] mysql::server recipe doesn't quote password string
|
|
51
|
+
* [COOK-834] Add 'scientific' and 'amazon' platforms to mysql cookbook
|
|
52
|
+
|
|
53
|
+
## v1.2.1
|
|
54
|
+
|
|
55
|
+
* [COOK-644] Mysql client cookbook 'package missing' error message is confusing
|
|
56
|
+
* [COOK-645] RHEL6/CentOS6 - mysql cookbook contains 'skip-federated' directive which is unsupported on MySQL 5.1
|
|
57
|
+
|
|
58
|
+
## v1.2.0
|
|
59
|
+
|
|
60
|
+
* [COOK-684] remove mysql_database LWRP
|
|
61
|
+
|
|
62
|
+
## v1.0.8:
|
|
63
|
+
|
|
64
|
+
* [COOK-633] ensure "cloud" attribute is available
|
|
65
|
+
|
|
66
|
+
## v1.0.7:
|
|
67
|
+
|
|
68
|
+
* [COOK-614] expose all mysql tunable settings in config
|
|
69
|
+
* [COOK-617] bind to private IP if available
|
|
70
|
+
|
|
71
|
+
## v1.0.6:
|
|
72
|
+
|
|
73
|
+
* [COOK-605] install mysql-client package on ubuntu/debian
|
|
74
|
+
|
|
75
|
+
## v1.0.5:
|
|
76
|
+
|
|
77
|
+
* [COOK-465] allow optional remote root connections to mysql
|
|
78
|
+
* [COOK-455] improve platform version handling
|
|
79
|
+
* externalize conf_dir attribute for easier cross platform support
|
|
80
|
+
* change datadir attribute to data_dir for consistency
|
|
81
|
+
|
|
82
|
+
## v1.0.4:
|
|
83
|
+
|
|
84
|
+
* fix regressions on debian platform
|
|
85
|
+
* [COOK-578] wrap root password in quotes
|
|
86
|
+
* [COOK-562] expose all tunables in my.cnf
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
If you would like to contribute, please open a ticket in JIRA:
|
|
2
|
+
|
|
3
|
+
* http://tickets.opscode.com
|
|
4
|
+
|
|
5
|
+
Create the ticket in the COOK project and use the cookbook name as the
|
|
6
|
+
component.
|
|
7
|
+
|
|
8
|
+
For all code contributions, we ask that contributors sign a
|
|
9
|
+
contributor license agreement (CLA). Instructions may be found here:
|
|
10
|
+
|
|
11
|
+
* http://wiki.opscode.com/display/chef/How+to+Contribute
|
|
12
|
+
|
|
13
|
+
When contributing changes to individual cookbooks, please do not
|
|
14
|
+
modify the version number in the metadata.rb. Also please do not
|
|
15
|
+
update the CHANGELOG.md for a new version. Not all changes to a
|
|
16
|
+
cookbook may be merged and released in the same versions. Opscode will
|
|
17
|
+
handle the version updates during the release process. You are welcome
|
|
18
|
+
to correct typos or otherwise make updates to documentation in the
|
|
19
|
+
README.
|
|
20
|
+
|
|
21
|
+
If a contribution adds new platforms or platform versions, indicate
|
|
22
|
+
such in the body of the commit message(s), and update the relevant
|
|
23
|
+
COOK ticket. When writing commit messages, it is helpful for others if
|
|
24
|
+
you indicate the COOK ticket. For example:
|
|
25
|
+
|
|
26
|
+
git commit -m '[COOK-1041] Updated pool resource to correctly delete.'
|
|
27
|
+
|
|
28
|
+
In the ticket itself, it is also helpful if you include log output of
|
|
29
|
+
a successful Chef run, but this is not absolutely required.
|