summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2014-06-25 18:03:06 -0700
committerelijah <elijah@riseup.net>2014-06-25 18:03:06 -0700
commit8bc5ed434c124457b7467140152602c67a9547c5 (patch)
treecb017e0fb762d27ab69a6f74c5d9c6a9aab85499
parentc8f5443e0998d3d3d43505ff5a6fdf8c438d6c24 (diff)
parent14f863f54c46bdf6f681c8a5ba660aba6a7419eb (diff)
Merge branch 'azul-feature/mirror_plain_couch'
-rw-r--r--files/couch-doc-update12
-rw-r--r--manifests/add_user.pp6
-rw-r--r--manifests/document.pp7
-rw-r--r--manifests/mirror_db.pp21
-rw-r--r--manifests/query.pp8
-rw-r--r--manifests/query/setup.pp2
6 files changed, 45 insertions, 11 deletions
diff --git a/files/couch-doc-update b/files/couch-doc-update
index 5ceed5e..df216db 100644
--- a/files/couch-doc-update
+++ b/files/couch-doc-update
@@ -62,6 +62,7 @@ def process_options
doc_id = nil
new_data = nil
filename = nil
+ netrc_file = nil
loop do
case ARGV[0]
when '--host' then ARGV.shift; host = ARGV.shift
@@ -69,6 +70,7 @@ def process_options
when '--id' then ARGV.shift; doc_id = ARGV.shift
when '--data' then ARGV.shift; new_data = ARGV.shift
when '--file' then ARGV.shift; filename = ARGV.shift
+ when '--netrc-file' then ARGV.shift; netrc_file = ARGV.shift
when /^-/ then usage("Unknown option: #{ARGV[0].inspect}")
else break
end
@@ -76,7 +78,7 @@ def process_options
usage("Missing required option") unless db_name && doc_id && new_data
new_data = MultiJson.load(new_data)
new_data.merge!(read_file(filename)) if filename
- db = CouchRest.database(connection_string(db_name, host))
+ db = CouchRest.database(connection_string(db_name, host, netrc_file))
return db, doc_id, new_data
end
@@ -114,7 +116,7 @@ def get_document(db, doc_id)
end
def update_document(db, doc, data)
- doc.reject! {|k,v| !k.start_with? '_'}
+ doc.reject! {|k,v| !["_id", "_rev"].include? k}
doc.merge! data
db.save_doc(doc)
end
@@ -124,14 +126,14 @@ def create_document(db, doc_id, data)
db.save_doc(data)
end
-def connection_string(database, host)
+def connection_string(database, host, netrc_file = nil)
protocol = "http"
#hostname = "127.0.0.1"
port = "5984"
username = "admin"
password = ""
- netrc = File.read('/etc/couchdb/couchdb.netrc')
+ netrc = File.read(netrc_file || '/etc/couchdb/couchdb.netrc')
netrc.scan(/\w+ [\w\.]+/).each do |key_value|
key, value = key_value.split ' '
case key
@@ -148,7 +150,7 @@ end
def usage(s)
$stderr.puts(s)
- $stderr.puts("Usage: #{File.basename($0)} --host <host> --db <db> --id <doc_id> --data <json> [--file <file>]")
+ $stderr.puts("Usage: #{File.basename($0)} --host <host> --db <db> --id <doc_id> --data <json> [--file <file>] [--netrc-file <netrc-file>]")
exit(2)
end
diff --git a/manifests/add_user.pp b/manifests/add_user.pp
index 1d25fd5..29c6a8c 100644
--- a/manifests/add_user.pp
+++ b/manifests/add_user.pp
@@ -30,4 +30,10 @@ define couchdb::add_user ( $roles, $pw, $salt = '' ) {
id => "org.couchdb.user:${name}",
data => $data
}
+
+ couchdb::query::setup { $name:
+ user => $name,
+ pw => $pw,
+ }
+
}
diff --git a/manifests/document.pp b/manifests/document.pp
index 1153296..3ecc05d 100644
--- a/manifests/document.pp
+++ b/manifests/document.pp
@@ -10,6 +10,7 @@ define couchdb::document(
$id,
$host = '127.0.0.1:5984',
$data = '{}',
+ $netrc = '/etc/couchdb/couchdb.netrc',
$ensure = 'content') {
$url = "${host}/${db}/${id}"
@@ -17,7 +18,7 @@ define couchdb::document(
case $ensure {
default: { err ( "unknown ensure value '${ensure}'" ) }
content: {
- exec { "couch-doc-update --host ${host} --db ${db} --id ${id} --data \'${data}\'":
+ exec { "couch-doc-update --netrc-file ${netrc} --host ${host} --db ${db} --id ${id} --data \'${data}\'":
require => Exec['wait_for_couchdb'],
unless => "couch-doc-diff $url '$data'"
}
@@ -28,7 +29,7 @@ define couchdb::document(
cmd => 'PUT',
host => $host,
path => "${db}/${id}",
- unless => "/usr/bin/curl -s -f --netrc-file /etc/couchdb/couchdb.netrc ${url}"
+ unless => "/usr/bin/curl -s -f --netrc-file ${netrc} ${url}"
}
}
@@ -37,7 +38,7 @@ define couchdb::document(
cmd => 'DELETE',
host => $host,
path => "${db}/${id}",
- unless => "/usr/bin/curl -s -f --netrc-file /etc/couchdb/couchdb.netrc ${url}"
+ unless => "/usr/bin/curl -s -f --netrc-file ${netrc} ${url}"
}
}
}
diff --git a/manifests/mirror_db.pp b/manifests/mirror_db.pp
new file mode 100644
index 0000000..7615c65
--- /dev/null
+++ b/manifests/mirror_db.pp
@@ -0,0 +1,21 @@
+define couchdb::mirror_db (
+ $host='127.0.0.1:5984',
+ $from='',
+ $to='',
+ $user='replication',
+ $role='replication'
+ )
+{
+ $source = "${from}/${name}"
+ if $to == '' { $target = $name }
+ else { $target = "${to}/${name}" }
+
+ couchdb::document { "${name}_replication":
+ db => "_replicator",
+ id => "${name}_replication",
+ netrc => "/etc/couchdb/couchdb-${user}.netrc",
+ host => $host,
+ data => "{ \"source\": \"${source}\", \"target\": \"${target}\", \"continuous\": true, \"user_ctx\": { \"name\": \"${user}\", \"roles\": [\"${role}\"] } }",
+ require => Couchdb::Query["create_db_${name}"]
+ }
+}
diff --git a/manifests/query.pp b/manifests/query.pp
index 72ae4d2..9507ca1 100644
--- a/manifests/query.pp
+++ b/manifests/query.pp
@@ -1,7 +1,11 @@
define couchdb::query (
- $cmd, $path, $host='127.0.0.1:5984', $data = '{}', $unless = undef) {
+ $cmd, $path,
+ $netrc='/etc/couchdb/couchdb.netrc',
+ $host='127.0.0.1:5984',
+ $data = '{}',
+ $unless = undef) {
- exec { "/usr/bin/curl -s --netrc-file /etc/couchdb/couchdb.netrc -X ${cmd} ${host}/${path} --data \'${data}\'":
+ exec { "/usr/bin/curl -s --netrc-file ${netrc} -X ${cmd} ${host}/${path} --data \'${data}\'":
require => [ Package['curl'], Exec['wait_for_couchdb'] ],
unless => $unless
}
diff --git a/manifests/query/setup.pp b/manifests/query/setup.pp
index b68e54f..451eb53 100644
--- a/manifests/query/setup.pp
+++ b/manifests/query/setup.pp
@@ -1,6 +1,6 @@
define couchdb::query::setup ($user, $pw, $host='127.0.0.1') {
- file { '/etc/couchdb/couchdb.netrc':
+ file { "/etc/couchdb/couchdb-${user}.netrc":
content => "machine ${host} login ${user} password ${pw}",
mode => '0600',
owner => $::couchdb::base::couchdb_user,