From ecd66d6ce440c7b929d59e14f6de4cab7199cb55 Mon Sep 17 00:00:00 2001 From: Jacob Callahan Date: Tue, 15 Oct 2024 10:31:51 -0400 Subject: [PATCH] More fixes These include resolving a problem with interactive edits on mac not working. This was likely due to a quirk with the NamedTemporaryFile implementation. I insteda switched to manually creating a temporary file and that worked. It also includes an early escape for when a user's inventory is empty. --- broker/commands.py | 3 +++ broker/config_manager.py | 11 +++++------ broker/providers/ansible_tower.py | 14 +++++++++++++- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/broker/commands.py b/broker/commands.py index 181e157..f97cd1d 100644 --- a/broker/commands.py +++ b/broker/commands.py @@ -326,6 +326,9 @@ def inventory(details, _list, sync, filter): ) for host in inventory ] + if not curated_host_info: + CONSOLE.print("No hosts found in inventory.") + return table = helpers.dictlist_to_table(curated_host_info, "Host Inventory", _id=True) if _list: table.title = None diff --git a/broker/config_manager.py b/broker/config_manager.py index cbba8d3..f5c21d7 100644 --- a/broker/config_manager.py +++ b/broker/config_manager.py @@ -6,7 +6,6 @@ from pathlib import Path import pkgutil import sys -from tempfile import NamedTemporaryFile import click from logzero import logger @@ -56,11 +55,11 @@ def __init__(self, settings_path=None): def _interactive_edit(self, chunk): """Write the chunk data to a temporary file and open it in an editor.""" - with NamedTemporaryFile(mode="w+", suffix=".yaml") as tmp: - yaml.dump(chunk, tmp) - click.edit(filename=tmp.name) - tmp.seek(0) - new_data = tmp.read() + temp_file = Path("temp_settings.yaml") + yaml.dump(chunk, temp_file) + click.edit(filename=str(temp_file)) + new_data = temp_file.read_text() + temp_file.unlink() # first try to load it as yaml try: return yaml.load(new_data) diff --git a/broker/providers/ansible_tower.py b/broker/providers/ansible_tower.py index f7c67e1..94f5ca4 100644 --- a/broker/providers/ansible_tower.py +++ b/broker/providers/ansible_tower.py @@ -701,7 +701,7 @@ def extend(self, target_vm, new_expire_time=None, provider_labels=None): provider_labels=provider_labels, ) - def provider_help( + def provider_help( # noqa: PLR0912, PLR0915 - Possible TODO refactor self, workflows=False, workflow=None, @@ -728,6 +728,9 @@ def provider_help( for workflow in self._v2.workflow_job_templates.get(page_size=1000).results if workflow.summary_fields.user_capabilities.get("start") ] + if not workflows: + logger.warning("No workflows found") + return if res_filter := kwargs.get("results_filter"): workflows = eval_filter(workflows, res_filter, "res") workflows = workflows if isinstance(workflows, list) else [workflows] @@ -739,6 +742,9 @@ def provider_help( logger.info(f"Accepted additional nick fields:\n{helpers.yaml_format(inv)}") elif inventories: inv = [inv.name for inv in self._v2.inventory.get(kind="", page_size=1000).results] + if not inv: + logger.warning("No inventories found!") + return if res_filter := kwargs.get("results_filter"): inv = eval_filter(inv, res_filter, "res") inv = inv if isinstance(inv, list) else [inv] @@ -758,6 +764,9 @@ def provider_help( for job_template in self._v2.job_templates.get(page_size=1000).results if job_template.summary_fields.user_capabilities.get("start") ] + if not job_templates: + logger.warning("No job templates found!") + return if res_filter := kwargs.get("results_filter"): job_templates = eval_filter(job_templates, res_filter, "res") job_templates = ( @@ -773,6 +782,9 @@ def provider_help( ] ) ) + if not templates: + logger.warning("No templates found!") + return templates.sort(reverse=True) if res_filter := kwargs.get("results_filter"): templates = eval_filter(templates, res_filter, "res")