30ce3e0e12
A prior commit accidently broke this, meaning that mysql_database was querying the mysql defaults instead of each individual database when trying to determine the current collate settings.
68 lines
2.2 KiB
Ruby
68 lines
2.2 KiB
Ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mysql'))
|
|
Puppet::Type.type(:mysql_database).provide(:mysql, :parent => Puppet::Provider::Mysql) do
|
|
desc 'Manages MySQL databases.'
|
|
|
|
commands :mysql => 'mysql'
|
|
|
|
def self.instances
|
|
mysql([defaults_file, '-NBe', 'show databases'].compact).split("\n").collect do |name|
|
|
attributes = {}
|
|
mysql([defaults_file, '-NBe', "show variables like '%_database'", name].compact).split("\n").each do |line|
|
|
k,v = line.split(/\s/)
|
|
attributes[k] = v
|
|
end
|
|
new(:name => name,
|
|
:ensure => :present,
|
|
:charset => attributes['character_set_database'],
|
|
:collate => attributes['collation_database']
|
|
)
|
|
end
|
|
end
|
|
|
|
# We iterate over each mysql_database entry in the catalog and compare it against
|
|
# the contents of the property_hash generated by self.instances
|
|
def self.prefetch(resources)
|
|
databases = instances
|
|
resources.keys.each do |database|
|
|
if provider = databases.find { |db| db.name == database }
|
|
resources[database].provider = provider
|
|
end
|
|
end
|
|
end
|
|
|
|
def create
|
|
mysql([defaults_file, '-NBe', "create database if not exists `#{@resource[:name]}` character set #{@resource[:charset]} collate #{@resource[:collate]}"].compact)
|
|
|
|
@property_hash[:ensure] = :present
|
|
@property_hash[:charset] = @resource[:charset]
|
|
@property_hash[:collate] = @resource[:collate]
|
|
|
|
exists? ? (return true) : (return false)
|
|
end
|
|
|
|
def destroy
|
|
mysql([defaults_file, '-NBe', "drop database `#{@resource[:name]}`"].compact)
|
|
|
|
@property_hash.clear
|
|
exists? ? (return false) : (return true)
|
|
end
|
|
|
|
def exists?
|
|
@property_hash[:ensure] == :present || false
|
|
end
|
|
|
|
mk_resource_methods
|
|
|
|
def charset=(value)
|
|
mysql([defaults_file, '-NBe', "alter database `#{resource[:name]}` CHARACTER SET #{value}"].compact)
|
|
@property_hash[:charset] = value
|
|
charset == value ? (return true) : (return false)
|
|
end
|
|
|
|
def collate=(value)
|
|
mysql([defaults_file, '-NBe', "alter database `#{resource[:name]}` COLLATE #{value}"].compact)
|
|
@property_hash[:collate] = value
|
|
collate == value ? (return true) : (return false)
|
|
end
|
|
|
|
end
|