Created
October 29, 2013 16:31
-
-
Save jwitrick/7218037 to your computer and use it in GitHub Desktop.
This file contains 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
define :create_db do | |
db_name = params[:name] | |
mysql_connection = { :host => 'localhost', | |
:username => 'root', | |
:password => node['mysql']['server_root_password'] } | |
service "mysqld" do | |
action :start | |
end | |
directory "#{node['mysql']['dbs']['base_dir']}" do | |
recursive true | |
end | |
cookbook_file "#{node['mysql']['dbs']['base_dir']}/#{db_name}.sql" do | |
source "#{db_name}.sql" | |
end | |
mysql_database "Create tables: #{db_name}" do | |
connection mysql_connection | |
database_name "#{db_name}" | |
sql { ::File.open("#{node['mysql']['dbs']['base_dir']}/"+ | |
"#{db_name}.sql").read } | |
action :nothing | |
provider Chef::Provider::Database::Mysql | |
end | |
mysql_database "#{db_name}" do | |
connection mysql_connection | |
action :create | |
provider Chef::Provider::Database::Mysql | |
only_if do | |
::File.exists?("#{node['mysql']['dbs']['base_dir']}/#{db_name}.sql") | |
end | |
notifies :query, "mysql_database[Create tables: #{db_name}]", | |
:immediately | |
end | |
Chef::Log.debug("Value of db_name is: #{db_name}") | |
db_users = data_bag_item('database_users', "#{db_name}") | |
if db_users | |
db_users['users'].each do |db_creds| | |
Chef::Log.debug("Granting privileges #{db_creds['privileges']} for "+ | |
"user #{db_creds['user']}") | |
mysql_database_user "#{db_creds['user']}" do | |
connection mysql_connection | |
password "#{db_creds['password']}" | |
action :create | |
provider Chef::Provider::Database::MysqlUser | |
end | |
Chef::Log.debug("Granting privileges #{db_creds['privileges']} for "+ | |
"user #{db_creds['user']}") | |
mysql_database_user "#{db_creds['user']}" do | |
connection mysql_connection | |
database_name "#{db_name}" | |
password "#{db_creds['password']}" | |
host '%' | |
privileges db_creds['privileges'] | |
action :grant | |
provider Chef::Provider::Database::MysqlUser | |
end | |
end | |
else | |
Chef::Log.info("No Database Users created for db: #{db_name}") | |
end | |
execute 'delete empty user' do | |
command "mysql -u root -p#{node['mysql']['server_root_password']} "+ | |
"mysql -e\"delete from user where User=\'\' and Password=\'\'\"; "+ | |
"mysql -u"+ | |
" root -p#{node['mysql']['server_root_password']} mysql -e\"flush "+ | |
"privileges\";" | |
end | |
mysql_database "drop empty user" do | |
connection mysql_connection | |
Chef::Log.info("Dropping any empty users from the table") | |
sql "delete from mysql.user where User='' and Password='';" | |
action :query | |
provider Chef::Provider::Database::Mysql | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment