diff options
Diffstat (limited to 'provider_base')
| -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 | 
5 files changed, 66 insertions, 13 deletions
| 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 + | 
