From 2de9836230cee96bb019c0897fa419c83d558fc4 Mon Sep 17 00:00:00 2001 From: Aleksandr Vagachev Date: Mon, 11 Mar 2024 11:29:47 +0300 Subject: [PATCH] Added the collection of information storage_policies (#53) --- changelogs/fragments/3-clickhouse_info.yml | 2 ++ plugins/modules/clickhouse_info.py | 36 +++++++++++++++++++ .../targets/clickhouse_info/tasks/initial.yml | 1 + 3 files changed, 39 insertions(+) create mode 100644 changelogs/fragments/3-clickhouse_info.yml diff --git a/changelogs/fragments/3-clickhouse_info.yml b/changelogs/fragments/3-clickhouse_info.yml new file mode 100644 index 0000000..2d7492e --- /dev/null +++ b/changelogs/fragments/3-clickhouse_info.yml @@ -0,0 +1,2 @@ +minor_changes: +- clickhouse_info - added the ability to collect information from system.storage_policies. diff --git a/plugins/modules/clickhouse_info.py b/plugins/modules/clickhouse_info.py index 3a6d027..2484c5a 100644 --- a/plugins/modules/clickhouse_info.py +++ b/plugins/modules/clickhouse_info.py @@ -154,6 +154,13 @@ type: dict sample: { "test_function": "..." } version_added: '0.4.0' +storage_policies: + description: + - The content of the system.storage_policies table with storage_policies names as keys. + returned: success + type: dict + sample: { "storage_policies": "..." } + version_added: '0.4.0' ''' from ansible.module_utils.basic import AnsibleModule @@ -526,6 +533,34 @@ def get_functions(module, client): return function_info +def get_storage_policies(module, client): + """Get storage_policies. + + Returns a dictionary with storage_policies names as keys. + """ + query = ("SELECT policy_name, volume_name, volume_priority, " + "disks, volume_type, max_data_part_size, " + "move_factor, prefer_not_to_merge FROM system.storage_policies") + result = execute_query(module, client, query) + + if result == PRIV_ERR_CODE: + return {PRIV_ERR_CODE: "Not enough privileges"} + + storage_policies_info = {} + for row in result: + storage_policies_info[row[0]] = { + "volume_name": row[1], + "volume_priority": row[2], + "disks": row[3], + "volume_type": row[4], + "max_data_part_size": row[5], + "move_factor": row[6], + "prefer_not_to_merge": row[7], + } + + return storage_policies_info + + def get_driver(module, client): """Gets driver information. @@ -598,6 +633,7 @@ def main(): 'quotas': get_quotas, 'settings_profiles': get_settings_profiles, 'functions': get_functions, + 'storage_policies': get_storage_policies, } # Check if the limit is provided, it contains correct values limit = module.params['limit'] diff --git a/tests/integration/targets/clickhouse_info/tasks/initial.yml b/tests/integration/targets/clickhouse_info/tasks/initial.yml index f4b4f09..e748741 100644 --- a/tests/integration/targets/clickhouse_info/tasks/initial.yml +++ b/tests/integration/targets/clickhouse_info/tasks/initial.yml @@ -30,6 +30,7 @@ - result["dictionaries"] != {} - result["quotas"]["default"] != {} - result["settings_profiles"]["default"] != {} + - result["storage_policies"] != {} - name: Debug ansible.builtin.debug: