Created
September 25, 2014 20:21
-
-
Save behemphi/a8732aa29a2ad671db4d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
roles = node.roles | |
db_host = false | |
roles.each do |role| | |
if role == 'db_host' | |
db_host = true | |
end | |
end | |
instance_name = node.foobar.mysql.FULL_BASE_NAME | |
schema = instance_name[0,16] | |
user = instance_name[0,16] | |
passwd = "\#{bang}/bin/f00b4r/#{schema}/#{user}" | |
bash 'create local application user' do | |
code <<-EOH | |
mysql mysql -vv -e \ | |
"grant all on #{schema}.* to '#{user}'@'localhost' identified by '#{passwd}'" | |
EOH | |
user 'root' | |
end | |
if db_host | |
schema = instance_name[0,16] | |
ip = '10.%' | |
# These are the three expected users for any new build. | |
%w{console ws1 ws2}.each do |user| | |
passwd = "\#{bang}/bin/f00b4r/#{schema}/#{user}" | |
bash 'create console user' do | |
user 'root' | |
code <<-EOH | |
mysql mysql -vv -e \ | |
"grant all on #{schema}.* to '#{user}'@'#{ip}' identified by '#{passwd}'" | |
EOH | |
end | |
end | |
# Check to see if there are other web servers out there. If so, grant them | |
# access | |
webservers = search(:node, "name:#{instance_name}-ws*") | |
webservers.each do |webserver| | |
p webserver | |
if ["#{instance_name}-ws1","#{instance_name}-ws2"].include?(webserver.hostname) | |
# do nothing, the grant was created above | |
else | |
schema = instance_name[0,16] | |
dash_index = webserver.hostname.index('-') + 1 | |
user = webserver.hostname[dash_index, 3] | |
passwd = "\#{bang}/bin/f00b4r/#{schema}/#{user}" | |
bash 'create console user' do | |
user 'root' | |
code <<-EOH | |
mysql mysql -vv -e \ | |
"grant all on #{schema}.* to '#{user}'@'#{ip}' identified by '#{passwd}'" | |
EOH | |
end | |
end | |
end | |
end | |
# | |
# Create reference to the data bag for this node | |
# | |
config_bag = 'server_512mb' | |
case (Integer((node[:memory][:total]).sub('kB','')) / 1024) | |
when 0..900 | |
config_bag = 'server_512mb' | |
when 901..1900 | |
config_bag = 'server_1024mb' | |
when 1901..2500 | |
config_bag = 'server_2048mb' | |
when 3900..4250 | |
config_bag = 'server_4096mb' | |
when 7900..8250 | |
config_bag = 'server_8192mb' | |
else | |
log "no config file exists for a server of size #{(Integer((node[:memory][:total]).sub('kB','')) / 1024)}" | |
exit | |
end | |
# | |
# Configure the MySQL server | |
# | |
config_parameters = data_bag_item('mysql_configs',config_bag) | |
template '/tmp/my.cnf' do | |
source 'my.cnf.erb' | |
mode '0644' | |
variables( | |
:client_port => config_parameters['client']['port'], | |
:client_socket => config_parameters['client']['socket'], | |
:mysqldump_quick => | |
config_parameters['mysqldump']['quick'], | |
:mysqldump_max_allowed_packet => | |
config_parameters['mysqldump']['max_allowed_packet'], | |
:mysql_skip_auto_rehash => config_parameters['mysql']['skip_auto_rehash'], | |
:mysqld_user => config_parameters['mysqld']['user'], | |
:mysqld_port => config_parameters['mysqld']['port'], | |
:mysqld_socket => config_parameters['mysqld']['socket'], | |
:mysqld_pid_file => config_parameters['mysqld']['pid_file'], | |
:mysqld_local_infile => config_parameters['mysqld']['local_infile'], | |
:mysqld_secure_auth => config_parameters['mysqld']['secure_auth'], | |
# :mysqld_skip_name_resolve => | |
# config_parameters['mysqld']['skip_name_resolve'], | |
:mysqld_datadir => config_parameters['mysqld']['datadir'], | |
:mysqld_tmpdir => config_parameters['mysqld']['tmpdir'], | |
:mysqld_character_set_server => | |
config_parameters['mysqld']['character_set_server'], | |
:mysqld_character_set_client => | |
config_parameters['mysqld']['character_set_client'], | |
:mysqld_collation_server => config_parameters['mysqld']['collation_server'], | |
:mysqld_connect_timeout => config_parameters['mysqld']['connect_timeout'], | |
:mysqld_interactive_timeout => | |
config_parameters['mysqld']['interactive_timeout'], | |
:mysqld_wait_timeout => config_parameters['mysqld']['wait_timeout'], | |
:mysqld_max_connect_errors => | |
config_parameters['mysqld']['max_connect_errors'], | |
:mysqld_back_log => config_parameters['mysqld']['back_log'], | |
:mysqld_open_files_limit => config_parameters['mysqld']['open_files_limit'], | |
:mysqld_query_cache_limit => | |
config_parameters['mysqld']['query_cache_limit'], | |
:mysqld_log_error => config_parameters['mysqld']['log_error'], | |
:mysqld_slow_query_log => config_parameters['mysqld']['slow_query_log'], | |
:mysqld_slow_query_log_file => | |
config_parameters['mysqld']['slow_query_log_file'], | |
:mysqld_long_query_time => config_parameters['mysqld']['long_query_time'], | |
:mysqld_general_log => config_parameters['mysqld']['general_log'], | |
:mysqld_general_log_file => config_parameters['mysqld']['general_log_file'], | |
:mysqld_max_connections => config_parameters['mysqld']['max_connections'], | |
:mysqld_table_open_cache => config_parameters['mysqld']['table_open_cache'], | |
:mysqld_table_definition_cache => | |
config_parameters['mysqld']['table_definition_cache'], | |
:mysqld_thread_cache_size => | |
config_parameters['mysqld']['thread_cache_size'], | |
:mysqld_query_cache_size => | |
config_parameters['mysqld']['mysqld_query_cache_size'], | |
:mysqld_innodb => config_parameters['mysqld']['innodb'], | |
:mysqld_default_storage_engine => | |
config_parameters['mysqld']['default_storage_engine'], | |
:mysqld_innodb_data_home_dir => | |
config_parameters['mysqld']['innodb_data_home_dir'], | |
:mysqld_innodb_data_file_path => | |
config_parameters['mysqld']['innodb_data_file_path'], | |
:mysqld_innodb_autoextend_increment => | |
config_parameters['mysqld']['innodb_autoextend_increment'], | |
:mysqld_innodb_file_per_table => | |
config_parameters['mysqld']['innodb_file_per_table'], | |
:mysqld_innodb_thread_concurrency => | |
config_parameters['mysqld']['innodb_thread_concurrency'], | |
:mysqld_innodb_log_group_home_dir=> | |
config_parameters['mysqld']['innodb_log_group_home_dir'], | |
:mysqld_innodb_log_file_size => | |
config_parameters['mysqld']['innodb_log_file_size'], | |
:mysqld_innodb_log_buffer_size => | |
config_parameters['mysqld']['innodb_log_buffer_size'], | |
:mysqld_innodb_buffer_pool_size => | |
config_parameters['mysqld']['innodb_buffer_pool_size'], | |
:mysqld_key_buffer_size => config_parameters['mysqld']['key_buffer_size'], | |
:mysqld_max_allowed_packet => | |
config_parameters['mysqld']['max_allowed_packet'], | |
:mysqld_group_concat_max_len => | |
config_parameters['mysqld']['group_concat_max_len'], | |
:mysqld_join_buffer_size => config_parameters['mysqld']['join_buffer_size'], | |
:mysqld_myisam_sort_buffer_size => | |
config_parameters['mysqld']['myisam_sort_buffer_size'], | |
:mysqld_sort_buffer_size => config_parameters['mysqld']['sort_buffer_size'], | |
:mysqld_read_buffer_size => config_parameters['mysqld']['read_buffer_size'], | |
:mysqld_read_rnd_buffer_size => | |
config_parameters['mysqld']['read_rnd_buffer_size'], | |
:mysqld_tmp_table_size => config_parameters['mysqld']['tmp_table_size'], | |
:mysqld_max_heap_table_size => | |
config_parameters['mysqld']['max_heap_table_size'] | |
) | |
end | |
template '/etc/mysql/my.cnf' do | |
source '/tmp/my.cnf' | |
local true | |
end | |
# | |
# Bring up the database | |
# | |
# Start MySQL | |
service 'mysql' do | |
provider Chef::Provider::Service::Upstart | |
action :start | |
end | |
# | |
# Clean up | |
# | |
file '/tmp/my.cnf' do | |
action :delete | |
endf |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment