| Index: modules/discourse/manifests/sitesetting.pp |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/modules/discourse/manifests/sitesetting.pp |
| @@ -0,0 +1,36 @@ |
| +define discourse::sitesetting( |
| + $setting = $title, |
| + $value = undef, |
| + $type = 1, |
| + $ensure = 'present' |
| +) { |
| + # Attempt some escaping |
| + $escaped_value = regsubst($value, '[\'\\]', '\\\1', 'G') |
| + $escaped_setting = regsubst($setting, '[\'\\]', '\\\1', 'G') |
| + $escaped_type = regsubst($type, '\D', '', 'G') |
| + |
| + case $ensure { |
| + default: { |
| + err("unknown ensure value ${ensure}") |
| + } |
| + present: { |
| + # This is apparently how you do a conditional INSERT in PostgreSQL - sorry |
|
Felix Dahlke
2013/02/21 15:27:40
Looked a bit into this myself, your method is quit
|
| + $update_sql = "UPDATE site_settings SET value = '$escaped_value', data_type = $escaped_type WHERE name = '$escaped_setting' RETURNING 1" |
| + $columns = "name, data_type, value, created_at, updated_at" |
| + $values = "SELECT '$escaped_setting', $escaped_type, '$escaped_value', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP" |
| + |
| + postgresql_psql {"WITH upd AS ($update_sql) INSERT INTO site_settings ($columns) $values WHERE NOT EXISTS (SELECT * FROM upd)": |
| + db => 'discourse', |
| + psql_user => 'discourse', |
| + unless => 'SELECT false' |
| + } |
| + } |
| + absent: { |
| + postgresql_psql {"DELETE FROM site_settings WHERE name = '$escaped_setting'": |
| + db => 'discourse', |
| + psql_user => 'discourse', |
| + unless => 'SELECT false' |
| + } |
| + } |
| + } |
| +} |