1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2026-02-04 07:51:50 +00:00
community.general/plugins/module_utils/influxdb.py
patchback[bot] 377a599372
[PR #11222/c7f6a28d backport][stable-12] Add basic typing for module_utils (#11243)
Add basic typing for module_utils (#11222)

* Add basic typing for module_utils.

* Apply some suggestions.



* Make pass again.

* Add more types as suggested.

* Normalize extra imports.

* Add more type hints.

* Improve typing.

* Add changelog fragment.

* Reduce changelog.

* Apply suggestions from code review.



* Fix typo.

* Cleanup.

* Improve types and make type checking happy.

* Let's see whether older Pythons barf on this.

* Revert "Let's see whether older Pythons barf on this."

This reverts commit 9973af3dbe.

* Add noqa.

---------


(cherry picked from commit c7f6a28d89)

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2025-12-01 21:16:37 +01:00

97 lines
3.4 KiB
Python

# Copyright (c) 2017, Ansible Project
# Simplified BSD License (see LICENSES/BSD-2-Clause.txt or https://opensource.org/licenses/BSD-2-Clause)
# SPDX-License-Identifier: BSD-2-Clause
from __future__ import annotations
import traceback
import typing as t
from ansible.module_utils.basic import missing_required_lib
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
if t.TYPE_CHECKING:
from ansible.module_utils.basic import AnsibleModule
REQUESTS_IMP_ERR = None
try:
import requests.exceptions # noqa: F401, pylint: disable=unused-import
HAS_REQUESTS = True
except ImportError:
REQUESTS_IMP_ERR = traceback.format_exc()
HAS_REQUESTS = False
INFLUXDB_IMP_ERR = None
try:
from influxdb import InfluxDBClient
from influxdb import __version__ as influxdb_version
from influxdb import exceptions # noqa: F401, pylint: disable=unused-import
HAS_INFLUXDB = True
except ImportError:
INFLUXDB_IMP_ERR = traceback.format_exc()
HAS_INFLUXDB = False
class InfluxDb:
def __init__(self, module: AnsibleModule) -> None:
self.module = module
self.params = self.module.params
self.check_lib()
self.hostname = self.params["hostname"]
self.port = self.params["port"]
self.path = self.params["path"]
self.username = self.params["username"]
self.password = self.params["password"]
self.database_name = self.params.get("database_name")
def check_lib(self) -> None:
if not HAS_REQUESTS:
self.module.fail_json(msg=missing_required_lib("requests"), exception=REQUESTS_IMP_ERR)
if not HAS_INFLUXDB:
self.module.fail_json(msg=missing_required_lib("influxdb"), exception=INFLUXDB_IMP_ERR)
@staticmethod
def influxdb_argument_spec() -> dict[str, t.Any]:
return dict(
hostname=dict(type="str", default="localhost"),
port=dict(type="int", default=8086),
path=dict(type="str", default=""),
username=dict(type="str", default="root", aliases=["login_username"]),
password=dict(type="str", default="root", no_log=True, aliases=["login_password"]),
ssl=dict(type="bool", default=False),
validate_certs=dict(type="bool", default=True),
timeout=dict(type="int"),
retries=dict(type="int", default=3),
proxies=dict(type="dict", default={}),
use_udp=dict(type="bool", default=False),
udp_port=dict(type="int", default=4444),
)
def connect_to_influxdb(self) -> InfluxDBClient:
args = dict(
host=self.hostname,
port=self.port,
username=self.username,
password=self.password,
database=self.database_name,
ssl=self.params["ssl"],
verify_ssl=self.params["validate_certs"],
timeout=self.params["timeout"],
use_udp=self.params["use_udp"],
udp_port=self.params["udp_port"],
proxies=self.params["proxies"],
)
influxdb_api_version = LooseVersion(influxdb_version)
if influxdb_api_version >= LooseVersion("4.1.0"):
# retries option is added in version 4.1.0
args.update(retries=self.params["retries"])
if influxdb_api_version >= LooseVersion("5.1.0"):
# path argument is added in version 5.1.0
args.update(path=self.path)
return InfluxDBClient(**args)