dev/provisioning/modules/mysql/manifests/db.pp
changeset 28 b0b56e0f8c7f
equal deleted inserted replaced
27:a2342f26c9de 28:b0b56e0f8c7f
       
     1 # See README.md for details.
       
     2 define mysql::db (
       
     3   $user,
       
     4   $password,
       
     5   $dbname         = $name,
       
     6   $charset        = 'utf8',
       
     7   $collate        = 'utf8_general_ci',
       
     8   $host           = 'localhost',
       
     9   $grant          = 'ALL',
       
    10   $sql            = undef,
       
    11   $enforce_sql    = false,
       
    12   $ensure         = 'present',
       
    13   $import_timeout = 300,
       
    14 ) {
       
    15   #input validation
       
    16   validate_re($ensure, '^(present|absent)$',
       
    17   "${ensure} is not supported for ensure. Allowed values are 'present' and 'absent'.")
       
    18   $table = "${dbname}.*"
       
    19 
       
    20   if !(is_array($sql) or is_string($sql)) {
       
    21     fail('$sql must be either a string or an array.')
       
    22   }
       
    23 
       
    24   $sql_inputs = join([$sql], ' ')
       
    25 
       
    26   include '::mysql::client'
       
    27 
       
    28   anchor{"mysql::db_${name}::begin": }->
       
    29   Class['::mysql::client']->
       
    30   anchor{"mysql::db_${name}::end": }
       
    31 
       
    32   $db_resource = {
       
    33     ensure   => $ensure,
       
    34     charset  => $charset,
       
    35     collate  => $collate,
       
    36     provider => 'mysql',
       
    37     require  => [ Class['mysql::client'] ],
       
    38   }
       
    39   ensure_resource('mysql_database', $dbname, $db_resource)
       
    40 
       
    41   $user_resource = {
       
    42     ensure        => $ensure,
       
    43     password_hash => mysql_password($password),
       
    44     provider      => 'mysql',
       
    45   }
       
    46   ensure_resource('mysql_user', "${user}@${host}", $user_resource)
       
    47 
       
    48   if $ensure == 'present' {
       
    49     mysql_grant { "${user}@${host}/${table}":
       
    50       privileges => $grant,
       
    51       provider   => 'mysql',
       
    52       user       => "${user}@${host}",
       
    53       table      => $table,
       
    54       require    => [
       
    55         Mysql_database[$dbname],
       
    56         Mysql_user["${user}@${host}"],
       
    57       ],
       
    58     }
       
    59 
       
    60     $refresh = ! $enforce_sql
       
    61 
       
    62     if $sql {
       
    63       exec{ "${dbname}-import":
       
    64         command     => "cat ${sql_inputs} | mysql ${dbname}",
       
    65         logoutput   => true,
       
    66         environment => "HOME=${::root_home}",
       
    67         refreshonly => $refresh,
       
    68         path        => '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin',
       
    69         require     => Mysql_grant["${user}@${host}/${table}"],
       
    70         subscribe   => Mysql_database[$dbname],
       
    71         timeout     => $import_timeout,
       
    72       }
       
    73     }
       
    74   }
       
    75 }