dev/provisioning/modules/mysql/manifests/db.pp
changeset 28 b0b56e0f8c7f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/provisioning/modules/mysql/manifests/db.pp	Fri Jan 15 15:35:00 2016 +0100
@@ -0,0 +1,75 @@
+# See README.md for details.
+define mysql::db (
+  $user,
+  $password,
+  $dbname         = $name,
+  $charset        = 'utf8',
+  $collate        = 'utf8_general_ci',
+  $host           = 'localhost',
+  $grant          = 'ALL',
+  $sql            = undef,
+  $enforce_sql    = false,
+  $ensure         = 'present',
+  $import_timeout = 300,
+) {
+  #input validation
+  validate_re($ensure, '^(present|absent)$',
+  "${ensure} is not supported for ensure. Allowed values are 'present' and 'absent'.")
+  $table = "${dbname}.*"
+
+  if !(is_array($sql) or is_string($sql)) {
+    fail('$sql must be either a string or an array.')
+  }
+
+  $sql_inputs = join([$sql], ' ')
+
+  include '::mysql::client'
+
+  anchor{"mysql::db_${name}::begin": }->
+  Class['::mysql::client']->
+  anchor{"mysql::db_${name}::end": }
+
+  $db_resource = {
+    ensure   => $ensure,
+    charset  => $charset,
+    collate  => $collate,
+    provider => 'mysql',
+    require  => [ Class['mysql::client'] ],
+  }
+  ensure_resource('mysql_database', $dbname, $db_resource)
+
+  $user_resource = {
+    ensure        => $ensure,
+    password_hash => mysql_password($password),
+    provider      => 'mysql',
+  }
+  ensure_resource('mysql_user', "${user}@${host}", $user_resource)
+
+  if $ensure == 'present' {
+    mysql_grant { "${user}@${host}/${table}":
+      privileges => $grant,
+      provider   => 'mysql',
+      user       => "${user}@${host}",
+      table      => $table,
+      require    => [
+        Mysql_database[$dbname],
+        Mysql_user["${user}@${host}"],
+      ],
+    }
+
+    $refresh = ! $enforce_sql
+
+    if $sql {
+      exec{ "${dbname}-import":
+        command     => "cat ${sql_inputs} | mysql ${dbname}",
+        logoutput   => true,
+        environment => "HOME=${::root_home}",
+        refreshonly => $refresh,
+        path        => '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin',
+        require     => Mysql_grant["${user}@${host}/${table}"],
+        subscribe   => Mysql_database[$dbname],
+        timeout     => $import_timeout,
+      }
+    }
+  }
+}