Skip to content

Add a bunch of new parameters #90

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Aug 16, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Modulefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ license 'Apache 2.0'
summary 'Mysql module'
description 'Mysql module'
project_page 'http://github.com/puppetlabs/puppetlabs-mysql'

dependency 'openstackci/apparmor', '>= 0.0.1'
21 changes: 15 additions & 6 deletions lib/puppet/provider/database/mysql.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,31 +7,40 @@
optional_commands :mysql => 'mysql'
optional_commands :mysqladmin => 'mysqladmin'

def defaults_file
case Facter.value(:operatingsystem)
when "Debian", "Ubuntu"
return "--defaults-file=/etc/mysql/debian.cnf"
else
return ""
end
end

def self.instances
mysql('-NBe', "show databases").split("\n").collect do |name|
mysql(defaults_file, '-NBe', "show databases").split("\n").collect do |name|
new(:name => name)
end
end

def create
mysql('-NBe', "create database `#{@resource[:name]}` character set #{resource[:charset]}")
mysql(defaults_file, '-NBe', "create database `#{@resource[:name]}` character set #{resource[:charset]}")
end

def destroy
mysqladmin('-f', 'drop', @resource[:name])
mysqladmin(defaults_file, '-f', 'drop', @resource[:name])
end

def charset
mysql('-NBe', "show create database `#{resource[:name]}`").match(/.*?(\S+)\s\*\//)[1]
mysql(defaults_file, '-NBe', "show create database `#{resource[:name]}`").match(/.*?(\S+)\s\*\//)[1]
end

def charset=(value)
mysql('-NBe', "alter database `#{resource[:name]}` CHARACTER SET #{value}")
mysql(defaults_file, '-NBe', "alter database `#{resource[:name]}` CHARACTER SET #{value}")
end

def exists?
begin
mysql('-NBe', "show databases").match(/^#{@resource[:name]}$/)
mysql(defaults_file, '-NBe', "show databases").match(/^#{@resource[:name]}$/)
rescue => e
debug(e.message)
return nil
Expand Down
29 changes: 19 additions & 10 deletions lib/puppet/provider/database_grant/mysql.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@
optional_commands :mysql => 'mysql'
optional_commands :mysqladmin => 'mysqladmin'

def defaults_file
case Facter.value(:operatingsystem)
when "Debian", "Ubuntu"
return "--defaults-file=/etc/mysql/debian.cnf"
else
return ""
end
end

def self.prefetch(resources)
@user_privs = query_user_privs
@db_privs = query_db_privs
Expand All @@ -34,19 +43,19 @@ def db_privs
end

def self.query_user_privs
results = mysql("mysql", "-Be", "describe user")
results = mysql(defaults_file, "-Be", "describe user")
column_names = results.split(/\n/).map { |l| l.chomp.split(/\t/)[0] }
@user_privs = column_names.delete_if { |e| !( e =~/_priv$/) }
end

def self.query_db_privs
results = mysql("mysql", "-Be", "describe db")
results = mysql(defaults_file, "-Be", "describe db")
column_names = results.split(/\n/).map { |l| l.chomp.split(/\t/)[0] }
@db_privs = column_names.delete_if { |e| !(e =~/_priv$/) }
end

def mysql_flush
mysqladmin "flush-privileges"
mysqladmin defaults_file, "flush-privileges"
end

# this parses the
Expand Down Expand Up @@ -74,11 +83,11 @@ def create_row
name = split_name(@resource[:name])
case name[:type]
when :user
mysql "mysql", "-e", "INSERT INTO user (host, user) VALUES ('%s', '%s')" % [
mysql defaults_file, "-e", "INSERT INTO user (host, user) VALUES ('%s', '%s')" % [
name[:host], name[:user],
]
when :db
mysql "mysql", "-e", "INSERT INTO db (host, user, db) VALUES ('%s', '%s', '%s')" % [
mysql defaults_file, "-e", "INSERT INTO db (host, user, db) VALUES ('%s', '%s', '%s')" % [
name[:host], name[:user], name[:db],
]
end
Expand All @@ -87,7 +96,7 @@ def create_row
end

def destroy
mysql "mysql", "-e", "REVOKE ALL ON '%s'.* FROM '%s@%s'" % [ @resource[:privileges], @resource[:database], @resource[:name], @resource[:host] ]
mysql defaults_file, "-e", "REVOKE ALL ON '%s'.* FROM '%s@%s'" % [ @resource[:privileges], @resource[:database], @resource[:name], @resource[:host] ]
end

def row_exists?
Expand All @@ -96,7 +105,7 @@ def row_exists?
if name[:type] == :db
fields << :db
end
not mysql( "mysql", "-NBe", 'SELECT "1" FROM %s WHERE %s' % [ name[:type], fields.map do |f| "%s = '%s'" % [f, name[f]] end.join(' AND ')]).empty?
not mysql( defaults_file, "-NBe", 'SELECT "1" FROM %s WHERE %s' % [ name[:type], fields.map do |f| "%s = '%s'" % [f, name[f]] end.join(' AND ')]).empty?
end

def all_privs_set?
Expand All @@ -118,9 +127,9 @@ def privileges

case name[:type]
when :user
privs = mysql "mysql", "-Be", 'select * from user where user="%s" and host="%s"' % [ name[:user], name[:host] ]
privs = mysql defaults_file, "-Be", 'select * from user where user="%s" and host="%s"' % [ name[:user], name[:host] ]
when :db
privs = mysql "mysql", "-Be", 'select * from db where user="%s" and host="%s" and db="%s"' % [ name[:user], name[:host], name[:db] ]
privs = mysql defaults_file, "-Be", 'select * from db where user="%s" and host="%s" and db="%s"' % [ name[:user], name[:host], name[:db] ]
end

if privs.match(/^$/)
Expand Down Expand Up @@ -171,7 +180,7 @@ def privileges=(privs)
# puts "set:", set
stmt = stmt << set << where

mysql "mysql", "-Be", stmt
mysql defaults_file, "-Be", stmt
mysql_flush
end
end
23 changes: 16 additions & 7 deletions lib/puppet/provider/database_user/mysql.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,36 +7,45 @@
optional_commands :mysql => 'mysql'
optional_commands :mysqladmin => 'mysqladmin'

def defaults_file
case Facter.value(:operatingsystem)
when "Debian", "Ubuntu"
return "--defaults-file=/etc/mysql/debian.cnf"
else
return ""
end
end

def self.instances
users = mysql("mysql", '-BNe' "select concat(User, '@',Host) as User from mysql.user").split("\n")
users = mysql(defaults_file, '-BNe' "select concat(User, '@',Host) as User from mysql.user").split("\n")
users.select{ |user| user =~ /.+@/ }.collect do |name|
new(:name => name)
end
end

def create
mysql("mysql", "-e", "create user '%s' identified by PASSWORD '%s'" % [ @resource[:name].sub("@", "'@'"), @resource.value(:password_hash) ])
mysql(defaults_file, "-e", "create user '%s' identified by PASSWORD '%s'" % [ @resource[:name].sub("@", "'@'"), @resource.value(:password_hash) ])
end

def destroy
mysql("mysql", "-e", "drop user '%s'" % @resource.value(:name).sub("@", "'@'") )
mysql(defaults_file, "-e", "drop user '%s'" % @resource.value(:name).sub("@", "'@'") )
end

def password_hash
mysql("mysql", "-NBe", "select password from user where CONCAT(user, '@', host) = '%s'" % @resource.value(:name)).chomp
mysql(defaults_file, "-NBe", "select password from user where CONCAT(user, '@', host) = '%s'" % @resource.value(:name)).chomp
end

def password_hash=(string)
mysql("mysql", "-e", "SET PASSWORD FOR '%s' = '%s'" % [ @resource[:name].sub("@", "'@'"), string ] )
mysql(defaults_file, "-e", "SET PASSWORD FOR '%s' = '%s'" % [ @resource[:name].sub("@", "'@'"), string ] )
end

def exists?
not mysql("mysql", "-NBe", "select '1' from user where CONCAT(user, '@', host) = '%s'" % @resource.value(:name)).empty?
not mysql(defaults_file, "-NBe", "select '1' from user where CONCAT(user, '@', host) = '%s'" % @resource.value(:name)).empty?
end

def flush
@property_hash.clear
mysqladmin "flush-privileges"
mysqladmin(defaults_file, "flush-privileges")
end

end
82 changes: 65 additions & 17 deletions manifests/config.pp
Original file line number Diff line number Diff line change
Expand Up @@ -30,22 +30,70 @@
# }
#
class mysql::config(
$root_password = 'UNSET',
$old_root_password = '',
$bind_address = $mysql::params::bind_address,
$port = $mysql::params::port,
$etc_root_password = $mysql::params::etc_root_password,
$service_name = $mysql::params::service_name,
$config_file = $mysql::params::config_file,
$socket = $mysql::params::socket,
$datadir = $mysql::params::datadir,
$ssl = $mysql::params::ssl,
$ssl_ca = $mysql::params::ssl_ca,
$ssl_cert = $mysql::params::ssl_cert,
$ssl_key = $mysql::params::ssl_key,
$log_error = $mysql::params::log_error,
$default_engine = 'UNSET',
$root_group = $mysql::params::root_group
$root_password = 'UNSET',
$old_root_password = '',
$bind_address = $mysql::params::bind_address,
$port = $mysql::params::port,
$etc_root_password = $mysql::params::etc_root_password,
$service_name = $mysql::params::service_name,
$config_file = $mysql::params::config_file,
$socket = $mysql::params::socket,
$datadir = $mysql::params::datadir,
$ssl = $mysql::params::ssl,
$ssl_ca = $mysql::params::ssl_ca,
$ssl_cert = $mysql::params::ssl_cert,
$ssl_key = $mysql::params::ssl_key,
$log_error = $mysql::params::log_error,
$slow_query_log_file = $mysql::params::slow_query_log_file,
$long_query_time = $mysql::params::long_query_time,
$character_set_server = $mysql::params::character_set_server,
$collation_server = $mysql::params::collation_server,
$tmp_table_size = $mysql::params::tmp_table_size,
$max_heap_table_size = $mysql::params::max_heap_table_size,
$max_tmp_tables = $mysql::params::max_tmp_tables,
$join_buffer_size = $mysql::params::join_buffer_size,
$read_buffer_size = $mysql::params::read_buffer_size,
$sort_buffer_size = $mysql::params::sort_buffer_size,
$table_cache = $mysql::params::table_cache,
$table_definition_cache = $mysql::params::table_definition_cache,
$open_files_limit = $mysql::params::open_files_limit,
$thread_stack = $mysql::params::thread_stack,
$thread_cache_size = $mysql::params::thread_cache_size,
$thread_concurrency = $mysql::params::thread_concurrency,
$query_cache_size = $mysql::params::query_cache_size,
$query_cache_limit = $mysql::params::query_cache_limit,
$tmp_table_size = $mysql::params::tmp_table_size,
$read_rnd_buffer_size = $mysql::params::read_rnd_buffer_size,
$max_allowed_packet = $mysql::params::max_allowed_packet,
$max_connections = $mysql::params::max_connections,
$wait_timeout = $mysql::params::wait_timeout,
$connect_timeout = $mysql::params::connect_timeout,
$innodb_file_per_table = $mysql::params::innodb_file_per_table,
$innodb_status_file = $mysql::params::innodb_status_file,
$innodb_support_xa = $mysql::params::innodb_support_xa,
$read_only = $mysql::params::read_only,
$replication_enabled = $mysql::params::replication_enabled,
$expire_logs_days = $mysql::params::expire_logs_days,
$max_binlog_size = $mysql::params::max_binlog_size,
$replicate_ignore_table = $mysql::params::replicate_ignore_table,
$replicate_ignore_db = $mysql::params::replicate_ignore_db,
$replicate_do_table = $mysql::params::replicate_do_table,
$replicate_do_db = $mysql::params::replicate_do_db,
$extra_configs = $mysql::params::extra_configs,
$default_engine = 'UNSET',
$root_group = $mysql::params::root_group,

$key_buffer_size = $mysql::params::key_buffer_size,
$myisam_sort_buffer_size = $mysql::params::myisam_sort_buffer_size,
$myisam_max_sort_file_size = $mysql::params::myisam_max_sort_file_size,
$myisam_recover = $mysql::params::myisam_recover,
$innodb_flush_log_at_trx_commit = $mysql::params::innodb_flush_log_at_trx_commit,
$innodb_buffer_pool_size = $mysql::params::innodb_buffer_pool_size,
$innodb_log_file_size = $mysql::params::innodb_log_file_size,
$innodb_flush_method = $mysql::params::innodb_flush_method,
$innodb_thread_concurrency = $mysql::params::innodb_thread_concurrency,
$innodb_concurrency_tickets = $mysql::params::innodb_concurrency_tickets,
$innodb_doublewrite = $mysql::params::innodb_doublewrite,
) inherits mysql::params {

File {
Expand Down Expand Up @@ -119,4 +167,4 @@
mode => '0644',
}

}
}
58 changes: 54 additions & 4 deletions manifests/params.pp
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,67 @@
#
class mysql::params {

$bind_address = '127.0.0.1'
$port = 3306
$etc_root_password = false
$ssl = false
$bind_address = '127.0.0.1'
$port = 3306
$etc_root_password = false
$ssl = false
$slow_query_log_file = false
$long_query_time = 10
$character_set_server = 'utf8'
$collation_server = 'utf8_general_ci'
$ft_min_word_len = 3
$tmp_table_size = '16M'
$max_heap_table_size = '16M'
$max_tmp_tables = '32'
$join_buffer_size = '3M'
$read_buffer_size = '4M'
$sort_buffer_size = '4M'
$table_cache = '64'
$table_definition_cache = '256'
$open_files_limit = '1024'
$thread_stack = '192K'
$thread_cache_size = '8'
$thread_concurrency = '10'
$query_cache_size = '16M'
$query_cache_limit = '1M'
$tmp_table_size = '16M'
$read_rnd_buffer_size = '256K'
$key_buffer_size = '16M'
$myisam_sort_buffer_size = '8M'
$myisam_max_sort_file_size = '512M'
$myisam_recover = 'BACKUP'
$max_allowed_packet = "16M"
$max_connections = '151'
$wait_timeout = "28800"
$connect_timeout = "10"
$innodb_file_per_table = '1'
$innodb_status_file = '0'
$innodb_support_xa = '0'
$innodb_flush_log_at_trx_commit = '0'
$innodb_buffer_pool_size = '8M'
$innodb_log_file_size = '5M'
$innodb_flush_method = 'O_DIRECT'
$innodb_thread_concurrency = '8'
$innodb_concurrency_tickets = '500'
$innodb_doublewrite = '1'
$read_only = false
$replication_enabled = false
$expire_logs_days = '10'
$max_binlog_size = '100M'
$replicate_ignore_table = []
$replicate_ignore_db = []
$replicate_do_table = []
$replicate_do_db = []
$extra_configs = {}

case $::operatingsystem {
"Ubuntu": {
$service_provider = upstart
$apparmor_file = 'mysql/templates/apparmor.usr.sbin.mysqld.erb'
}
default: {
$service_provider = undef
$apparmor_file = undef
}
}

Expand Down
14 changes: 14 additions & 0 deletions manifests/server.pp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
$package_ensure = 'present',
$service_name = $mysql::params::service_name,
$service_provider = $mysql::params::service_provider,
$use_apparmor = false,
$apparmor_file = $mysql::params::apparmor_file,
$config_hash = {},
$enabled = true
) inherits mysql::params {
Expand Down Expand Up @@ -49,4 +51,16 @@
provider => $service_provider,
}

if $use_apparmor {
include apparmor

file { "/etc/apparmor.d/usr.sbin.mysqld":
owner => 'root',
group => 'root',
mode => 0644,
content => template($apparmor_file),
require => Package['mysql-server'],
notify => Class['apparmor'],
}
}
}
Loading