summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzul <azul@riseup.net>2013-08-15 11:44:18 +0200
committerAzul <azul@riseup.net>2013-08-28 12:52:14 +0200
commit16a3583c359cd57ff52866a8dfd933726d120d30 (patch)
tree6cd32d441d50fab4edb33275b3fb9d55f52cf622
parentfbe74fd5aef6e26070e9b10357604dda3bd2d842 (diff)
couch:document - ensure state of a couch document - (feature #3485)
also made the use of host, hostname and port a bit more consistent.
-rw-r--r--files/couch-doc-diff2
-rw-r--r--files/couch-doc-update20
-rw-r--r--manifests/bigcouch/add_node.pp2
-rw-r--r--manifests/bigcouch/query.pp4
-rw-r--r--manifests/create_db.pp10
-rw-r--r--manifests/document.pp39
-rw-r--r--manifests/query.pp4
7 files changed, 60 insertions, 21 deletions
diff --git a/files/couch-doc-diff b/files/couch-doc-diff
index 964d312..5438eab 100644
--- a/files/couch-doc-diff
+++ b/files/couch-doc-diff
@@ -1,2 +1,2 @@
#!/bin/bash
-diff -w <(curl -s --netrc-file /etc/couchdb/couchdb.netrc $1 ) <(echo '$2')
+diff -w <(curl -s --netrc-file /etc/couchdb/couchdb.netrc $1 ) <(echo $2)
diff --git a/files/couch-doc-update b/files/couch-doc-update
index 45d9f87..e4adfbe 100644
--- a/files/couch-doc-update
+++ b/files/couch-doc-update
@@ -14,7 +14,7 @@
#
# USAGE
#
-# couch-doc-update --port <port> --db <db> --id <doc_id> --data <json>
+# couch-doc-update --host <host> --db <db> --id <doc_id> --data <json>
#
# EXAMPLE
#
@@ -35,13 +35,13 @@ def main
#
# parse options
#
- @port = "5984"
+ @host = "127.0.0.1:5984"
@db_name = nil
@doc_id = nil
@new_data = nil
loop do
case ARGV[0]
- when '--port' then ARGV.shift; @port = ARGV.shift
+ when '--host' then ARGV.shift; @host = ARGV.shift
when '--db' then ARGV.shift; @db_name = ARGV.shift
when '--id' then ARGV.shift; @doc_id = ARGV.shift
when '--data' then ARGV.shift; @new_data = ARGV.shift
@@ -56,7 +56,7 @@ def main
# update document
#
begin
- @db = CouchRest.database(connection_string(@db_name, @port))
+ @db = CouchRest.database(connection_string(@db_name, @host))
@doc = get_document(@db, @doc_id)
result = if @doc
update_document(@db, @doc, @new_data)
@@ -91,10 +91,10 @@ def create_document(db, doc_id, data)
db.save_doc(data)
end
-def connection_string(database, port)
+def connection_string(database, host)
protocol = "http"
- hostname = "127.0.0.1"
- #port = "5984"
+ #hostname = "127.0.0.1"
+ port = "5984"
username = "admin"
password = ""
@@ -102,18 +102,18 @@ def connection_string(database, port)
netrc.scan(/\w+ [\w\.]+/).each do |key_value|
key, value = key_value.split ' '
case key
- when "machine" then hostname = value
+ when "machine" then host = value + ':' + port
when "login" then username = value
when "password" then password = value
end
end
- "%s://%s:%s@%s:%s/%s" % [protocol, username, password, hostname, port, database]
+ "%s://%s:%s@%s/%s" % [protocol, username, password, host, database]
end
def usage(s)
$stderr.puts(s)
- $stderr.puts("Usage: #{File.basename($0)} --port <port> --db <db> --id <doc_id> --data <json>")
+ $stderr.puts("Usage: #{File.basename($0)} --host <host> --db <db> --id <doc_id> --data <json>")
exit(2)
end
diff --git a/manifests/bigcouch/add_node.pp b/manifests/bigcouch/add_node.pp
index da10db2..66ac9b6 100644
--- a/manifests/bigcouch/add_node.pp
+++ b/manifests/bigcouch/add_node.pp
@@ -2,6 +2,6 @@ define couchdb::bigcouch::add_node {
couchdb::bigcouch::query { "add_${name}":
cmd => 'PUT',
- url => "nodes/bigcouch@${name}"
+ path => "nodes/bigcouch@${name}"
}
}
diff --git a/manifests/bigcouch/query.pp b/manifests/bigcouch/query.pp
index cecfe5a..8228e82 100644
--- a/manifests/bigcouch/query.pp
+++ b/manifests/bigcouch/query.pp
@@ -1,10 +1,10 @@
define couchdb::bigcouch::query (
- $cmd, $url, $host='127.0.0.1:5986', $data = '{}' ) {
+ $cmd, $path, $host='127.0.0.1:5986', $data = '{}' ) {
couchdb::query { "${name}":
cmd => $cmd,
host => $host,
- url => $url,
+ path => $path,
data => $data
}
}
diff --git a/manifests/create_db.pp b/manifests/create_db.pp
index 91c4a1d..f0bed31 100644
--- a/manifests/create_db.pp
+++ b/manifests/create_db.pp
@@ -3,19 +3,19 @@ define couchdb::create_db ( $host='127.0.0.1:5984',
$readers="{\"names\": [], \"roles\": [] }" )
{
- Couchdb::Query["create_db_${name}"] -> Couchdb::Query["db_security_${name}"]
+ Couchdb::Query["create_db_${name}"] -> Couchdb::Document["${name}_security"]
couchdb::query { "create_db_${name}":
cmd => 'PUT',
host => $host,
- url => $name,
+ path => $name,
unless => "/usr/bin/curl --netrc-file /etc/couchdb/couchdb.netrc ${host}/${name}"
}
- couchdb::query { "db_security_${name}":
- cmd => 'PUT',
+ couchdb::document { "${name}_security":
+ db => $name,
+ id => '_security',
host => $host,
- url => "${name}/_security",
data => "{ \"admins\": ${admins}, \"readers\": ${readers} }"
}
}
diff --git a/manifests/document.pp b/manifests/document.pp
new file mode 100644
index 0000000..1b27d44
--- /dev/null
+++ b/manifests/document.pp
@@ -0,0 +1,39 @@
+# Usage:
+# couchdb::document { id:
+# db => "database",
+# data => "content",
+# ensure => {absent,present,*content*}
+# }
+#
+define couchdb::document ( $host='127.0.0.1:5984', $db, $id, $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}"
+ }
+ }
+ }
+}
diff --git a/manifests/query.pp b/manifests/query.pp
index 6d13c2b..0549ded 100644
--- a/manifests/query.pp
+++ b/manifests/query.pp
@@ -1,7 +1,7 @@
define couchdb::query (
- $cmd, $url, $host='127.0.0.1:5984', $data = '{}', $unless = undef) {
+ $cmd, $path, $host='127.0.0.1:5984', $data = '{}', $unless = undef) {
- exec { "/usr/bin/curl --netrc-file /etc/couchdb/couchdb.netrc -X ${cmd} ${host}/${url} --data \'${data}\'":
+ exec { "/usr/bin/curl --netrc-file /etc/couchdb/couchdb.netrc -X ${cmd} ${host}/${path} --data \'${data}\'":
require => [ Package['curl'], Exec['wait_for_couchdb'] ],
unless => $unless
}