diff options
| author | elijah <elijah@riseup.net> | 2014-06-19 00:02:54 -0700 | 
|---|---|---|
| committer | elijah <elijah@riseup.net> | 2014-06-19 00:02:54 -0700 | 
| commit | 1b5f0892bbcb07fa075bfe8c7b083521b38cb73c (patch) | |
| tree | 9e30266c52b6be3f4c20eb55829493b465829ef7 | |
| parent | f991e8a4c877cff1d274fd1cac26488f8c3fda84 (diff) | |
couchdb: generate hiera files suitable for plain couchdb + read-only mirrors
| -rw-r--r-- | platform.rb | 2 | ||||
| -rw-r--r-- | provider_base/services/_couchdb_master.json | 8 | ||||
| -rw-r--r-- | provider_base/services/_couchdb_mirror.json | 16 | ||||
| -rw-r--r-- | provider_base/services/_couchdb_multimaster.json | 20 | ||||
| -rw-r--r-- | provider_base/services/couchdb.json | 17 | ||||
| -rw-r--r-- | provider_base/services/couchdb.rb | 18 | 
6 files changed, 67 insertions, 14 deletions
| diff --git a/platform.rb b/platform.rb index cd0cbde0..ac79df65 100644 --- a/platform.rb +++ b/platform.rb @@ -5,7 +5,7 @@  Leap::Platform.define do    self.version = "0.5.2" -  self.compatible_cli = "1.5.5".."1.99" +  self.compatible_cli = "1.5.7".."1.99"    #    # the facter facts that should be gathered diff --git a/provider_base/services/_couchdb_master.json b/provider_base/services/_couchdb_master.json new file mode 100644 index 00000000..20c6f99b --- /dev/null +++ b/provider_base/services/_couchdb_master.json @@ -0,0 +1,8 @@ +// +// Applied to master couchdb node when there is a single master +// +{ +  "couch": { +    "mode": "master" +  } +}
\ No newline at end of file diff --git a/provider_base/services/_couchdb_mirror.json b/provider_base/services/_couchdb_mirror.json new file mode 100644 index 00000000..67004c70 --- /dev/null +++ b/provider_base/services/_couchdb_mirror.json @@ -0,0 +1,16 @@ +// +// Applied to all non-master couchdb nodes +// +{ +  "stunnel": { +    "couch_client": "= stunnel_client(nodes[couch.replication.masters.keys], couch.port)" +  }, +  "couch": { +    "mode": "mirror", +    "replication": { +      // for now, pick the first close one, or the first one. +      // in the future, maybe use haproxy to balance among all the masters +      "masters": "= try{pick_node(:couch_master,nodes_near_me['services' => 'couchdb']['couch.master' => true]).pick_fields('domain.internal')} || try{pick_node(:couch_master,nodes_like_me['services' => 'couchdb']['couch.master' => true]).pick_fields('domain.internal')}" +    } +  } +}
\ No newline at end of file diff --git a/provider_base/services/_couchdb_multimaster.json b/provider_base/services/_couchdb_multimaster.json new file mode 100644 index 00000000..3eb4835c --- /dev/null +++ b/provider_base/services/_couchdb_multimaster.json @@ -0,0 +1,20 @@ +// +// Only applied to master couchdb nodes when there are multiple masters +// +{ +  "stunnel": { +    "epmd_server": "= stunnel_server(couch.bigcouch.epmd_port)", +    "epmd_clients": "= stunnel_client(nodes_like_me[:services => :couchdb], couch.bigcouch.epmd_port)", +    "ednp_server": "= stunnel_server(couch.bigcouch.ednp_port)", +    "ednp_clients": "= stunnel_client(nodes_like_me[:services => :couchdb], couch.bigcouch.ednp_port)" +  }, +  "couch": { +    "mode": "multimaster", +    "bigcouch": { +      "epmd_port": 4369, +      "ednp_port": 9002, +      "cookie": "= secret :bigcouch_cookie", +      "neighbors": "= nodes_like_me['services' => 'couchdb']['couchdb.master' => true].exclude(self).field('domain.full')" +    } +  } +} diff --git a/provider_base/services/couchdb.json b/provider_base/services/couchdb.json index 5f1b5381..d75fd8de 100644 --- a/provider_base/services/couchdb.json +++ b/provider_base/services/couchdb.json @@ -3,20 +3,11 @@          "use": true      },      "stunnel": { -        "couch_server": "= stunnel_server(couch.port)", -        "epmd_server": "= stunnel_server(couch.bigcouch.epmd_port)", -        "epmd_clients": "= stunnel_client(nodes_like_me[:services => :couchdb], global.services[:couchdb].couch.bigcouch.epmd_port)", -        "ednp_server": "= stunnel_server(couch.bigcouch.ednp_port)", -        "ednp_clients": "= stunnel_client(nodes_like_me[:services => :couchdb], global.services[:couchdb].couch.bigcouch.ednp_port)" +        "couch_server": "= stunnel_server(couch.port)"      },      "couch": { +        "master": false,          "port": 5984, -        "bigcouch": { -            "epmd_port": 4369, -            "ednp_port": 9002, -            "cookie": "= secret :bigcouch_cookie", -            "neighbors": "= nodes_like_me[:services => :couchdb].exclude(self).field('domain.full')" -        },          "users": {              "admin": {                  "username": "admin", @@ -49,8 +40,8 @@                  "salt": "= hex_secret :couch_webapp_password_salt, 128"              }          }, -    "webapp": { -         "nagios_test_pw": "= secret :nagios_test_password" +        "webapp": { +            "nagios_test_pw": "= secret :nagios_test_password"          }      }  } diff --git a/provider_base/services/couchdb.rb b/provider_base/services/couchdb.rb new file mode 100644 index 00000000..c8f5d8a7 --- /dev/null +++ b/provider_base/services/couchdb.rb @@ -0,0 +1,18 @@ +# +# custom logic for couchdb json resolution +# + +unless nodes_like_me['services' => 'couchdb']['couch.master' => true].any? +  raise 'node `%s`, environment `%s`: there must be at least one node with couch.master set to `true` for this environment.' % [@node.name, @node.environment] +end + +if couch.master +  if nodes_like_me['services' => 'couchdb']['couch.master' => true].size > 1 +    apply_partial 'services/_couchdb_multimaster.json' +  else +    apply_partial 'services/_couchdb_master.json' +  end +else +  apply_partial 'services/_couchdb_mirror.json' +end + | 
