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