Skip to content

Instantly share code, notes, and snippets.

@jwitrick
Created October 29, 2013 16:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jwitrick/7218037 to your computer and use it in GitHub Desktop.
Save jwitrick/7218037 to your computer and use it in GitHub Desktop.
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