summaryrefslogtreecommitdiff
path: root/manifests/document.pp
diff options
context:
space:
mode:
Diffstat (limited to 'manifests/document.pp')
-rw-r--r--manifests/document.pp44
1 files changed, 44 insertions, 0 deletions
diff --git a/manifests/document.pp b/manifests/document.pp
new file mode 100644
index 0000000..77296dc
--- /dev/null
+++ b/manifests/document.pp
@@ -0,0 +1,44 @@
+# Usage:
+# couchdb::document { id:
+# db => "database",
+# data => "content",
+# ensure => {absent,present,*content*}
+# }
+#
+define couchdb::document(
+ $db,
+ $id,
+ $host = '127.0.0.1:5984',
+ $data = '{}',
+ $ensure = 'content') {
+
+ $url = "${host}/${db}/${id}"
+
+ case $ensure {
+ default: { err ( "unknown ensure value '${ensure}'" ) }
+ content: {
+ exec { "couch-doc-update --host ${host} --db ${db} --id ${id} --data \'${data}\'":
+ require => Exec['wait_for_couchdb'],
+ unless => "couch-doc-diff $url '$data'"
+ }
+ }
+
+ present: {
+ couchdb::query { "create_${db}_${id}":
+ cmd => 'PUT',
+ host => $host,
+ path => "${db}/${id}",
+ unless => "/usr/bin/curl --netrc-file /etc/couchdb/couchdb.netrc ${url}"
+ }
+ }
+
+ absent: {
+ couchdb::query { "destroy_${db}_${id}":
+ cmd => 'DELETE',
+ host => $host,
+ path => "${db}/${id}",
+ onlyif => "/usr/bin/curl --netrc-file /etc/couchdb/couchdb.netrc ${url}"
+ }
+ }
+ }
+}