Source code for saltext.influxdb.states.influxdb_retention_policy

"""
Manage InfluxDB 0.9-1.x retention policies statefully.

.. important::
    You can optionally specify default connection parameters via the general :ref:`influxdb setup <influxdb-setup>`.
"""


def __virtual__():
    if "influxdb.db_exists" in __salt__:
        return "influxdb_retention_policy"
    return (False, "influxdb module could not be loaded")


[docs] def convert_duration(duration): """ Convert the a duration string into XXhYYmZZs format duration Duration to convert Returns: duration_string String representation of duration in XXhYYmZZs format """ # durations must be specified in days, weeks or hours if duration.endswith("h"): hours = int(duration.split("h")) elif duration.endswith("d"): days = duration.split("d") hours = int(days[0]) * 24 elif duration.endswith("w"): weeks = duration.split("w") hours = int(weeks[0]) * 24 * 7 else: raise ValueError(f"Invalid duration: {duration}") duration_string = str(hours) + "h0m0s" return duration_string
[docs] def present(name, database, duration="7d", replication=1, default=False, **client_args): """ Ensure that given retention policy is present. name Name of the retention policy to create. database Database to create retention policy on. """ ret = { "name": name, "changes": {}, "result": True, "comment": f"retention policy {name} is already present", } if not __salt__["influxdb.retention_policy_exists"]( name=name, database=database, **client_args ): if __opts__["test"]: ret["result"] = None ret["comment"] = f" {name} is absent and will be created" return ret if __salt__["influxdb.create_retention_policy"]( database, name, duration, replication, default, **client_args ): ret["comment"] = f"retention policy {name} has been created" ret["changes"][name] = "Present" return ret else: ret["comment"] = f"Failed to create retention policy {name}" ret["result"] = False return ret else: current_policy = __salt__["influxdb.get_retention_policy"]( database=database, name=name, **client_args ) update_policy = False if current_policy["duration"] != convert_duration(duration): update_policy = True ret["changes"]["duration"] = "Retention changed from {} to {}.".format( current_policy["duration"], duration ) if current_policy["replicaN"] != replication: update_policy = True ret["changes"]["replication"] = "Replication changed from {} to {}.".format( current_policy["replicaN"], replication ) if current_policy["default"] != default: update_policy = True ret["changes"]["default"] = "Default changed from {} to {}.".format( current_policy["default"], default ) if update_policy: if __opts__["test"]: ret["result"] = None ret["comment"] = f" {name} is present and set to be changed" return ret else: if __salt__["influxdb.alter_retention_policy"]( database, name, duration, replication, default, **client_args ): ret["comment"] = f"retention policy {name} has been changed" return ret else: ret["comment"] = f"Failed to update retention policy {name}" ret["result"] = False return ret return ret
[docs] def absent(name, database, **client_args): """ Ensure that given retention policy is absent. name Name of the retention policy to remove. database Name of the database that the retention policy was defined on. """ ret = { "name": name, "changes": {}, "result": True, "comment": f"retention policy {name} is not present", } if __salt__["influxdb.retention_policy_exists"](database, name, **client_args): if __opts__["test"]: ret["result"] = None ret["comment"] = f"retention policy {name} is present and needs to be removed" return ret if __salt__["influxdb.drop_retention_policy"](database, name, **client_args): ret["comment"] = f"retention policy {name} has been removed" ret["changes"][name] = "Absent" return ret else: ret["comment"] = f"Failed to remove retention policy {name}" ret["result"] = False return ret return ret