Skip to content

Commit e3b9fd9

Browse files
committed
(#11508) Only load sql_scripts on DB creation
Previous to this commit, if the sql parameter was provided to a declaration of the mysql::db defined type, the defined type would always load the sql script on every catalog run. This changes the exec that loads that sql script to be refreshonly unless the enforce_sql parameter is set to true.
1 parent 7957912 commit e3b9fd9

File tree

6 files changed

+109
-13
lines changed

6 files changed

+109
-13
lines changed

Rakefile

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
require 'rake'
2+
require 'fileutils'
3+
4+
begin
5+
require 'rspec/core/rake_task'
6+
HAVE_RSPEC = true
7+
rescue LoadError
8+
HAVE_RSPEC = false
9+
end
10+
11+
task :default => [:build]
12+
13+
def update_module_version
14+
gitdesc = %x{git describe}.chomp
15+
semver = gitdesc.gsub(/v?(\d+\.\d+\.\d+)-?(.*)/) do
16+
newver = "#{$1}"
17+
newver << "git-#{$2}" unless $2.empty?
18+
newver
19+
end
20+
modulefile = File.read("Modulefile")
21+
modulefile.gsub!(/^\s*version\s+'.*?'/, "version '#{semver}'")
22+
File.open("Modulefile", 'w') do |f|
23+
f.write(modulefile)
24+
end
25+
semver
26+
end
27+
28+
desc "Build Puppet Module Package"
29+
task :build do
30+
system("gimli README*.markdown")
31+
FileUtils.cp "Modulefile", "Modulefile.bak"
32+
update_module_version
33+
system("puppet-module build")
34+
FileUtils.mv "Modulefile.bak", "Modulefile"
35+
end
36+
37+
desc "Clean the package directory"
38+
task :clean do
39+
FileUtils.rm_rf("pkg/")
40+
end
41+
42+
if HAVE_RSPEC then
43+
desc 'Run all module spec tests (Requires rspec-puppet gem)'
44+
task :spec do
45+
system 'rspec --format d spec/'
46+
end
47+
end

manifests/db.pp

+27-13
Original file line numberDiff line numberDiff line change
@@ -31,32 +31,46 @@
3131
$charset = 'utf8',
3232
$host = 'localhost',
3333
$grant='all',
34+
$enforce_sql = false,
3435
$sql=''
3536
) {
3637

38+
if $grant == 'all' {
39+
$safe_grant = [ 'alter_priv','alter_routine_priv','create_priv','create_routine_priv','create_tmp_table_priv','create_view_priv','delete_priv','drop_priv','event_priv','execute_priv','grant_priv','index_priv','insert_priv','lock_tables_priv','references_priv','select_priv','show_view_priv','trigger_priv','update_priv']
40+
} else {
41+
$safe_grant = $grant
42+
}
43+
3744
database { $name:
38-
ensure => present,
39-
charset => $charset,
45+
ensure => present,
46+
charset => $charset,
4047
provider => 'mysql',
41-
require => Class['mysql::server']
48+
require => Class['mysql::server'],
49+
notify => Exec["${name}-import-import"],
4250
}
51+
4352
database_user{"${user}@${host}":
44-
ensure => present,
53+
ensure => present,
4554
password_hash => mysql_password($password),
46-
provider => 'mysql',
47-
require => Database[$name],
55+
provider => 'mysql',
56+
require => Database[$name],
4857
}
58+
4959
database_grant{"${user}@${host}/${name}":
5060
# privileges => [ 'alter_priv', 'insert_priv', 'select_priv', 'update_priv' ],
51-
privileges => $grant,
52-
provider => 'mysql',
53-
require => Database_user["${user}@${host}"],
61+
privileges => $safe_grant,
62+
provider => 'mysql',
63+
require => Database_user["${user}@${host}"],
5464
}
65+
5566
if($sql) {
5667
exec{"${name}-import-import":
57-
command => "/usr/bin/mysql -u ${user} -p${password} -h ${host} ${name} < ${sql}",
58-
logoutput => true,
59-
require => Database_grant["${user}@${host}/${name}"],
68+
command => "/usr/bin/mysql -u ${user} -p${password} -h ${host} ${name} < ${sql}",
69+
logoutput => true,
70+
refreshonly => $enforce_sql ? {
71+
true => false,
72+
false => true,
73+
},
6074
}
6175
}
62-
}
76+
}

spec/classes/mysql_init_spec.rb

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
require 'spec_helper'
2+
3+
describe 'mysql' do
4+
5+
it { should contain_class 'mysql' }
6+
end

spec/defines/mysql_db_spec.rb

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
require 'spec_helper'
2+
3+
describe 'mysql::db', :type => :define do
4+
let(:title) { 'test_db' }
5+
let(:params) {
6+
{'user' => 'testuser',
7+
'password' => 'testpass',
8+
'enforce_sql' => false,
9+
'sql' => 'test_sql',
10+
}
11+
}
12+
13+
it 'should set load of sql script to refreshonly' do
14+
should create_resource('exec', 'test_db-import-import').with_param('refreshonly', true)
15+
end
16+
end

spec/spec.opts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
--format
2+
s
3+
--colour
4+
--loadby
5+
mtime
6+
--backtrace

spec/spec_helper.rb

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require 'puppet'
2+
require 'rubygems'
3+
require 'rspec-puppet'
4+
5+
RSpec.configure do |c|
6+
c.module_path = File.join(File.dirname(__FILE__), '../../')
7+
end

0 commit comments

Comments
 (0)