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+unsubscr...@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+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.