|
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 } |