From c7df29fd81a743903622153fb33be2ea58798254 Mon Sep 17 00:00:00 2001 From: Lenka Segura Date: Feb 27 2023 23:33:35 +0000 Subject: Fetch discourse groups and members --- diff --git a/roles/fas2discourseconfig/library/fas2discourse_retrieve_discourse_groups.py b/roles/fas2discourseconfig/library/fas2discourse_retrieve_discourse_groups.py index 30b0d67..9198a7c 100644 --- a/roles/fas2discourseconfig/library/fas2discourse_retrieve_discourse_groups.py +++ b/roles/fas2discourseconfig/library/fas2discourse_retrieve_discourse_groups.py @@ -5,7 +5,6 @@ # https://www.gnu.org/licenses/gpl-3.0.txt) import json -import re import requests from ansible.module_utils.basic import AnsibleModule @@ -60,13 +59,22 @@ msg: sample: 'Successfully retrieved groups from Dicourse.' """ +headers = {"Api-Key": "%s" % (discourse_api), "Api-Username": "system"} + # Helper function to retrieve fasjson groups def get_groups(discourse_host, discourse_api): - url = "%s/groups.json" % (discourse_host) - headers = {"Api-Key": "%s" % (discourse_api), "Api-Username" : "system"} + url = f"{discourse_host}/groups.json" + response = requests.get(url, headers=headers) + if response.ok: + return response.json() + + +def get_group_members(group): + url = f"{discourse_host}/groups/{group}/members.json" response = requests.get(url, headers=headers) - return response + if response.ok: + return response.json() def run_module(): @@ -99,22 +107,23 @@ def run_module(): # part where your module will do what it needs to do) discourse_api = module.params["discourse_api"] discourse_host = module.params["discourse_host"] - ignored_groups = module.params["ignored_groups"] - ignored_pattern = module.params["ignored_pattern"] + discourse_ignored_groups = module.params["discourse_ignored_groups"] try: discourse_groups = [] - resp = get_groups(discourse_host, discourse_api) - if resp.ok: - discourse_groups = json.dumps(resp.json()) - regexp = re.compile(r"%s" % (ignored_pattern)) - for v in groups_response["groups"]: - if v["name"] not in ignored_groups & regexp.search(v["name"]) is None: - discourse_groups.append(v["name"]) + discourse_groups_response = get_groups(discourse_host, discourse_api) + for v in discourse_groups_response["groups"]: + if v["name"] not in discourse_ignored_groups: + group = {"groupname": v["name"], "groupmembers": []} + group_members = get_group_members(v["name"]) + if group_members["members"]: + for number in range(len(group_members)): + group["groupmembers"].append(group_members["members"][number]["username"]) + discourse_groups.append(group) result["discourse_groups"] = discourse_groups result["changed"] = True - result["msg"] = "Successfully retrieved groups from Discourse." + result["msg"] = "Successfully retrieved groups and their members from Discourse." except Exception: raise