%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/sdb/ |
Current File : //usr/lib/python2.7/site-packages/salt/sdb/couchdb.py |
# -*- coding: utf-8 -*- ''' CouchDB sdb Module :maintainer: SaltStack :maturity: New :depends: python2-couchdb :platform: all This allow interaction between Salt and a CouchDB [couchdb.apache.org] database. It uses salt's `sdb` system to allow for inserts and retrevals using the `sdb://` prefix in salt configuration files. To use the couchbase sdb module, it must first be configured in the salt master or minion config. The following arguments are required: .. code-block:: yaml couchdb_sdb: driver: couchdb host: localhost port: 5984 database: salt_sdb One could then query the CouchDB instance via an `sdb://` URI such as the following: .. code-block:: yaml password: sdb://couchdb_sdb/mykey To use this interface, you must track IDs on your own or have another source to do the map-reduce logic necessary to calculate the ID you wish to fetch. Additional contributions to build true map-reduce functionality into this module would be welcome. ''' from __future__ import absolute_import, print_function, unicode_literals # Import Python libraries import logging from uuid import uuid4 try: import couchdb HAS_COUCH = True except ImportError: HAS_COUCH = False # Import Salt libraries from salt.utils.decorators import memoize log = logging.getLogger(__name__) # 'set' is a reserved word __func_alias__ = {'set_': 'set'} def __virtual__(): ''' Require the python2-couchdb libraries ''' return HAS_COUCH @memoize def _construct_uri(profile): ''' Examine configuration and return a uri for the couchdb server in the following format: .. code-block:: bash http://localhost:5984/ ''' return 'http://{host}:{port}'.format(**profile) def _get_conn(profile): ''' Get a connection to CouchDB ''' DEFAULT_BASE_URL = _construct_uri(profile) or 'http://localhost:5984' server = couchdb.Server() if profile['database'] not in server: server.create(profile['database']) return server def set_(key, value, profile=None): ''' Set a key/value pair in couchdb ''' db = _get_db(profile) return db.save({'_id': uuid4().hex, key: value}) def get(key, profile=None): ''' Get a value from couchdb by id ''' db = _get_db(profile) return db.get(key) def _get_db(profile): ''' Wraps _get_conn() to return a db ''' server = _get_conn(profile) db = _get_db(profile) return db