The MongoDB lookup runs the find() command on a given collection on a given MongoDB server.
The result is a list of jsons, so slightly different from what PyMongo returns. In particular, timestamps are converted to epoch integers.
The below requirements are needed on the host that executes this module.
- connect_string (optional, any, mongodb://localhost/)
Can be any valid MongoDB connection string, supporting authentication, replica sets, etc.
More info at https://docs.mongodb.org/manual/reference/connection-string/
- database (True, any, None)
- Name of the database which the query will be made
- collection (True, any, None)
- Name of the collection which the query will be made
- filter (optional, dict, {})
- Criteria of the output
- projection (optional, dict, {})
- Fields you want returned
- skip (optional, integer, None)
- How many results should be skipped
- limit (optional, integer, None)
- How many results should be shown
- sort (optional, list, [])
Sorting rules.
Please use the strings ASCENDING and DESCENDING to set the order.
Check the example for more information.
- extra_connection_parameters (optional, dict, {})
Extra connection parameters that to be sent to pymongo.MongoClient
Check the example to see how to connect to mongo using an SSL certificate.
All possible parameters are here: https://api.mongodb.com/python/current/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoClient
Note
- hosts: localhost gather_facts: false vars: mongodb_parameters: #mandatory parameters database: 'local' collection: "startup_log" #optional connection_string: "mongodb://localhost/" # connection_string: "mongodb://username:password@my.server.com:27017/" # extra_connection_parameters: { "ssl" : True , "ssl_certfile": /etc/self_signed_certificate.pem" } #optional query parameters, we accept any parameter from the normal mongodb query. # filter: { "hostname": "u18" } projection: { "pid": True , "_id" : False , "hostname" : True } skip: 0 limit: 1 sort: [ [ "startTime" , "ASCENDING" ] , [ "age", "DESCENDING" ] ] tasks: - debug: msg="The PID from MongoDB is {{ lookup('mongodb', mongodb_parameters ).pid }}" - debug: msg="The HostName from the MongoDB server is {{ lookup('mongodb', mongodb_parameters ).hostname }}" - debug: msg="Mongo DB is stored at {{ lookup('mongodb', mongodb_parameters_inline )}}" vars: mongodb_parameters_inline: database: 'local' collection: "startup_log" connection_string: "mongodb://localhost/" limit: 1 projection: { "cmdline.storage": True } # lookup syntax, does the same as below - debug: msg="The hostname is {{ item.hostname }} and the pid is {{ item.pid }}" loop: "{{ lookup('mongodb', mongodb_parameters, wantlist=True) }}" # query syntax, does the same as above - debug: msg="The hostname is {{ item.hostname }} and the pid is {{ item.pid }}" loop: "{{ query('mongodb', mongodb_parameters) }}" - name: "Raw output from the mongodb lookup (a json with pid and hostname )" debug: msg="{{ lookup('mongodb', mongodb_parameters) }}" - name: "Yet another mongodb query, now with the parameters on the task itself" debug: msg="pid={{item.pid}} hostname={{item.hostname}} version={{ item.buildinfo.version }}" with_mongodb: - database: 'local' collection: "startup_log" connection_string: "mongodb://localhost/" limit: 1 projection: { "pid": True , "hostname": True , "buildinfo.version": True } # Please notice this specific query may result more than one result. This is expected - name: "Shows the whole output from mongodb" debug: msg="{{ item }}" with_mongodb: - database: 'local' collection: "startup_log" connection_string: "mongodb://localhost/"