1#!/usr/local/bin/python3.8 2# -*- coding: utf-8 -*- 3# Copyright (c) 2017, René Moser <mail@renemoser.net> 4# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) 5 6from __future__ import absolute_import, division, print_function 7__metaclass__ = type 8 9 10DOCUMENTATION = r''' 11--- 12module: influxdb_query 13short_description: Query data points from InfluxDB 14description: 15 - Query data points from InfluxDB. 16author: "René Moser (@resmo)" 17requirements: 18 - "python >= 2.6" 19 - "influxdb >= 0.9" 20options: 21 query: 22 description: 23 - Query to be executed. 24 required: true 25 type: str 26 database_name: 27 description: 28 - Name of the database. 29 required: true 30 type: str 31extends_documentation_fragment: 32- community.general.influxdb 33 34''' 35 36EXAMPLES = r''' 37- name: Query connections 38 community.general.influxdb_query: 39 hostname: "{{ influxdb_ip_address }}" 40 database_name: "{{ influxdb_database_name }}" 41 query: "select mean(value) from connections" 42 register: connection 43 44- name: Query connections with tags filters 45 community.general.influxdb_query: 46 hostname: "{{ influxdb_ip_address }}" 47 database_name: "{{ influxdb_database_name }}" 48 query: "select mean(value) from connections where region='zue01' and host='server01'" 49 register: connection 50 51- name: Print results from the query 52 ansible.builtin.debug: 53 var: connection.query_results 54''' 55 56RETURN = r''' 57query_results: 58 description: Result from the query 59 returned: success 60 type: list 61 sample: 62 - mean: 1245.5333333333333 63 time: "1970-01-01T00:00:00Z" 64''' 65 66from ansible.module_utils.basic import AnsibleModule 67from ansible.module_utils.common.text.converters import to_native 68from ansible_collections.community.general.plugins.module_utils.influxdb import InfluxDb 69 70 71class AnsibleInfluxDBRead(InfluxDb): 72 73 def read_by_query(self, query): 74 client = self.connect_to_influxdb() 75 try: 76 rs = client.query(query) 77 if rs: 78 return list(rs.get_points()) 79 except Exception as e: 80 self.module.fail_json(msg=to_native(e)) 81 82 83def main(): 84 argument_spec = InfluxDb.influxdb_argument_spec() 85 argument_spec.update( 86 query=dict(type='str', required=True), 87 database_name=dict(required=True, type='str'), 88 ) 89 module = AnsibleModule( 90 argument_spec=argument_spec, 91 supports_check_mode=True 92 ) 93 94 influx = AnsibleInfluxDBRead(module) 95 query = module.params.get('query') 96 results = influx.read_by_query(query) 97 module.exit_json(changed=True, query_results=results) 98 99 100if __name__ == '__main__': 101 main() 102