diff --git a/lib/puppet/provider/mysql_user/mysql.rb b/lib/puppet/provider/mysql_user/mysql.rb index d647f6420..8009eb4a6 100644 --- a/lib/puppet/provider/mysql_user/mysql.rb +++ b/lib/puppet/provider/mysql_user/mysql.rb @@ -96,7 +96,9 @@ def create def destroy merged_name = @resource[:name].sub('@', "'@'") - self.class.mysql_caller("DROP USER '#{merged_name}'", 'system') + if_exists = (Puppet::Util::Package.versioncmp(mysqld_version, '5.7') >= 0) ? 'IF EXISTS ' : '' + + self.class.mysql_caller("DROP USER #{if_exists}'#{merged_name}'", 'system') @property_hash.clear exists? ? (return false) : (return true) diff --git a/spec/unit/puppet/provider/mysql_user/mysql_spec.rb b/spec/unit/puppet/provider/mysql_user/mysql_spec.rb index 84d7b63b3..eebdf0f2b 100644 --- a/spec/unit/puppet/provider/mysql_user/mysql_spec.rb +++ b/spec/unit/puppet/provider/mysql_user/mysql_spec.rb @@ -183,6 +183,12 @@ provider.expects(:exists?).returns(false) expect(provider.destroy).to be_truthy end + it 'removes a user using IF EXISTS' do + provider.class.instance_variable_set(:@mysqld_version_string, '5.7.1') + + provider.class.expects(:mysql_caller).with("DROP USER IF EXISTS 'joe'@'localhost'", 'system') + expect(provider.destroy).to be_truthy + end end describe 'exists?' do