mongodb -- lookup info from MongoDB

Synopsis

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.

Requirements

The below requirements are needed on the host that executes this module.

Parameters

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

Notes

Examples

- 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/"

Return Values

_list_of_jsons (, list, )
a list of JSONs with the results of the MongoDB query.

Status

Authors

  • Marcos Diez (@marcosdiez)