From dc354d0df03775a11edfbc05a73831aa3a1079e7 Mon Sep 17 00:00:00 2001 From: badra001 Date: Fri, 2 Jan 2026 13:28:12 -0500 Subject: [PATCH] add metadata back --- .../cross-organization/org_runner.py | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/local-app/python-tools/cross-organization/org_runner.py b/local-app/python-tools/cross-organization/org_runner.py index b7f91d79..382aa259 100755 --- a/local-app/python-tools/cross-organization/org_runner.py +++ b/local-app/python-tools/cross-organization/org_runner.py @@ -99,7 +99,7 @@ def run(self): try: master_aliases = iam_client.list_account_aliases()['AccountAliases'] master_alias = master_aliases[0] if master_aliases else "None" - except: master_alias = "Unknown" + except: master_alias = "Unknown (Check Permissions)" tasks, check_info = [], [] if self.args.enable_checks: @@ -117,9 +117,17 @@ def run(self): print("-" * 100) print(f"AWS ORG TASK RUNNER - v{__version__}") + print(f" Profile: {self.args.profile or 'default'}") + print(f" Region: {self.args.region}") + print(f" Caller Identity: {caller['Arn']}") print(f" Organization ID: {self.org_id}") print(f" Management ID: {master_id} ({master_alias})") print("-" * 100) + print(f" Target Role: {self.args.role_name}") + print(f" Max Workers: {self.args.max_workers}") + print(f" Enabled Checks: {', '.join(check_info) if check_info else 'None'}") + print(f" Accounts Found: {len(all_accounts)}") + print("-" * 100) with ThreadPoolExecutor(max_workers=self.args.max_workers) as executor: futures = {executor.submit(self.process_account, acc, partition, tasks): acc for acc in all_accounts} @@ -138,6 +146,7 @@ def run(self): w = csv.DictWriter(f, fieldnames=["org_id", "account_id", "account_name", "alias", "ou_path", "ou_id"]) w.writeheader() w.writerows([r['metadata'] for r in self.full_results]) + self.created_files.extend([f"{acc_base}.csv"]) # CHECK SPECIFIC FILES for mod_name, _ in tasks: @@ -150,7 +159,6 @@ def run(self): for key, fields in mod_data.items(): if key == "account_summary": continue - # Parse Region and Resource if ":" in key: region_part, resource_part = key.split(":", 1) else: @@ -159,27 +167,24 @@ def run(self): for k, v in fields.items(): if k == "resource": continue - w.writerow([ - self.org_id, - res["metadata"]["account_id"], - res["metadata"]["alias"], - region_part, - resource_part, - k, - v - ]) + w.writerow([self.org_id, res["metadata"]["account_id"], res["metadata"]["alias"], region_part, resource_part, k, v]) with open(f"{chk_base}.json", 'w') as f: json.dump([{ - "org_id": self.org_id, - "account_id": r["metadata"]["account_id"], - "alias": r["metadata"]["alias"], - "ou_path": r["metadata"]["ou_path"], - "ou_id": r["metadata"]["ou_id"], - "data": r["task_data"].get(mod_name, {}) + "org_id": self.org_id, "account_id": r["metadata"]["account_id"], + "alias": r["metadata"]["alias"], "ou_path": r["metadata"]["ou_path"], + "ou_id": r["metadata"]["ou_id"], "data": r["task_data"].get(mod_name, {}) } for r in self.full_results], f, indent=2) + + self.created_files.extend([f"{chk_base}.csv", f"{chk_base}.json"]) - print(f"\nTime: {round(time.perf_counter() - self.start_time, 2)}s") + # RESTORED FOOTER + print("-" * 100) + print(f"COMPLETED: {round(time.perf_counter() - self.start_time, 2)}s elapsed") + print(f"FILES CREATED:") + for f in self.created_files: + print(f" - {f}") + print("-" * 100) if __name__ == "__main__": p = argparse.ArgumentParser()