Skip to content

Instantly share code, notes, and snippets.

@behemphi
Created September 25, 2014 20:21
Show Gist options
  • Save behemphi/a8732aa29a2ad671db4d to your computer and use it in GitHub Desktop.
Save behemphi/a8732aa29a2ad671db4d to your computer and use it in GitHub Desktop.
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