server_maint 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|