I am using the following and it serves us well. Basically it makes sure
that the importing is done and executes ''&& touch
semaphore'' file. There
are plans to put those into /var/lib/puppet/sql-snippets instead of in
/opt but oh well it seems I am too lazy to go and move them on each
server now...
<snip>
class sql {
$sqls = ''/opt/sql-snippets''
file { $sql::sqls:
ensure => directory,
mode => "700",
}
define do($source='''', $db, $content='''') {
$script = "$sql::sqls/$name.sql"
file { $script:
mode => "600",
}
case $content {
'''': {
File[$script] {
source => $source
}
}
default: {
File[$script] {
content => $content
}
}
}
exec {"mysql-import-$name":
path => [''/bin'', ''/sbin'',
''/usr/bin''],
command => "mysql --defaults-file=/root/.my.cnf $db < $script
&& touch $script.semaphore",
creates => "$script.semaphore",
require => File[$script],
timeout => ''0'',
}
}
define source($local_script_path, $db) {
$semaphore = "$sql::sqls/$name.semaphore"
exec { "mysql-execute-script-$name":
path => [''/bin'', ''/sbin'',
''/usr/bin''],
command => "mysql --defaults-file=/root/.my.cnf $db <
$local_script_path && touch $semaphore",
creates => "$semaphore",
timeout => ''0'',
}
}
Class[''mysql''] -> Class[''sql'']
}
<snip>
Note that it requires a mysql class to be defined before that.
You will get bonus points if you make it work for other databases like
postgre and what not
Some problems:
* the name of the sql::do or sql::sourc should be lowercase as i don''t
want to support that(if you want put quotes around semaphore in the
touch
--
Nikola
On Mon, Dec 03, 2012 at 06:57:28AM -0800, Luca Gioppo
wrote:> Which is the bast strategy to check if a DB has been populated?
>
> The target is to execute the "mysql < file.sql" just once
since it could
> not be idempotent.
>
> The idea is to use the unless clause to stop it to run if there is the
> known data in the table, but it seems that it is just happy with the mysql
> managing to connect and the fact that the DB return of an empy set is
> treated as a success return from the mysql command (obviously it managed to
> execute and the return value of the command does not depend on the result
> of the query).
>
> Any hint?
> Luca
>
> --
> You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
> To view this discussion on the web visit
https://groups.google.com/d/msg/puppet-users/-/Csk_kOJXTtcJ.
> To post to this group, send email to puppet-users@googlegroups.com.
> To unsubscribe from this group, send email to
puppet-users+unsubscribe@googlegroups.com.
> For more options, visit this group at
http://groups.google.com/group/puppet-users?hl=en.
>
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to
puppet-users+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/puppet-users?hl=en.