mirror of
https://github.com/valitydev/salt.git
synced 2024-11-08 17:33:54 +00:00
commit
5903c88ba3
91
salt/returners/couchdb_return.py
Normal file
91
salt/returners/couchdb_return.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
'''
|
||||||
|
Simple returner for CouchDB. Optional configuration
|
||||||
|
settings are listed below, along with sane defaults.
|
||||||
|
|
||||||
|
couchdb.hooks
|
||||||
|
* is a list of dict objects.
|
||||||
|
* in each dict there is a key and value.
|
||||||
|
* the value is eval()'d
|
||||||
|
* optional "eval", which is executed beforehand.
|
||||||
|
|
||||||
|
couchdb.db: 'salt'
|
||||||
|
couchdb.url: 'http://salt:5984/'
|
||||||
|
couchdb.hooks: [ { "key": "timestamp", "value": "time.time()", "eval": "import time" } ]
|
||||||
|
|
||||||
|
'''
|
||||||
|
import logging
|
||||||
|
|
||||||
|
log = logging.getLogger( __name__ )
|
||||||
|
|
||||||
|
# Import the required modules.
|
||||||
|
try:
|
||||||
|
import couchdb
|
||||||
|
HAS_COUCHDB = True
|
||||||
|
except ImportError:
|
||||||
|
HAS_COUCHDB = False
|
||||||
|
|
||||||
|
def __virtual__( ):
|
||||||
|
if not HAS_COUCHDB:
|
||||||
|
return False
|
||||||
|
return 'couchdb'
|
||||||
|
|
||||||
|
def _get_options( ):
|
||||||
|
'''
|
||||||
|
Get the couchdb options from salt. Apply defaults
|
||||||
|
if required.
|
||||||
|
'''
|
||||||
|
server_url = __salt__['config.option']('couchdb.url')
|
||||||
|
if not server_url:
|
||||||
|
log.debug( "Using default url." )
|
||||||
|
server_url = "http://salt:5984/"
|
||||||
|
|
||||||
|
db_name = __salt__['config.option']('couchdb.db')
|
||||||
|
if not db_name:
|
||||||
|
log.debug( "Using default database." )
|
||||||
|
db_name = "salt"
|
||||||
|
|
||||||
|
hooks = __salt__['config.option']('couchdb.hooks')
|
||||||
|
if not hooks:
|
||||||
|
log.debug( "Using default hooks" )
|
||||||
|
hooks = [ { "key": "timestamp", "value": "time.time()", "eval": "import time" } ]
|
||||||
|
|
||||||
|
return { "url": server_url, "db": db_name, "hooks": hooks }
|
||||||
|
|
||||||
|
def _generate_doc( ret, options ):
|
||||||
|
'''
|
||||||
|
Create a object that will be saved into the database based on
|
||||||
|
options.
|
||||||
|
'''
|
||||||
|
|
||||||
|
# Just set the document ID to the jid.
|
||||||
|
r = ret
|
||||||
|
r["_id"] = ret["jid"]
|
||||||
|
|
||||||
|
for hook in options["hooks"]:
|
||||||
|
|
||||||
|
# Eval if specified.
|
||||||
|
if hasattr( hook, "eval" ):
|
||||||
|
eval( hook["eval"] )
|
||||||
|
|
||||||
|
r[hook["key"]] = eval( hook["value"] )
|
||||||
|
|
||||||
|
return r
|
||||||
|
|
||||||
|
def returner( ret ):
|
||||||
|
'''
|
||||||
|
Take in the return and shove it into the couchdb database.
|
||||||
|
'''
|
||||||
|
|
||||||
|
# Get the options from configuration.
|
||||||
|
options = _get_options( )
|
||||||
|
|
||||||
|
# Create a connection to the server.
|
||||||
|
server = couchdb.client.Server( options["url"] )
|
||||||
|
|
||||||
|
# Create the database if the configuration calls for it.
|
||||||
|
if not options["db"] in server:
|
||||||
|
log.debug( "Creating database %s" % options["db"] )
|
||||||
|
server.create( options["db"] )
|
||||||
|
|
||||||
|
# Save the document that comes out of _generate_doc.
|
||||||
|
server[options["db"]].save( _generate_doc( ret, options ) )
|
Loading…
Reference in New Issue
Block a user