548952a6f9
Check for database existence when dropping to prevent ERROR 1008 (HY000): Can't drop database 'test'; database doesn't exist Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
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 if exists `#{@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
|