From cc45e365ae9e45bfd7e3d56120a5743c8e870822 Mon Sep 17 00:00:00 2001
From: Kenichi Omichi <ken1ohmichi@gmail.com>
Date: Thu, 17 Feb 2022 13:57:03 -0800
Subject: [PATCH] Fix print_hostnames of inventory.py (#8554)

When trying to run print_hostnames of inventory.py, it outputs the following
error:

 $ CONFIG_FILE=./test-hosts.yaml python3 ./inventory.py print_hostnames
 Traceback (most recent call last):
   File "./inventory.py", line 472, in <module>
     sys.exit(main())
   File "./inventory.py", line 467, in main
     KubesprayInventory(argv, CONFIG_FILE)
   File "./inventory.py", line 92, in __init__
     self.parse_command(changed_hosts[0], changed_hosts[1:])
   File "./inventory.py", line 415, in parse_command
     self.print_hostnames()
   File "./inventory.py", line 455, in print_hostnames
     print(' '.join(self.yaml_config['all']['hosts'].keys()))
 KeyError: 'all'

because it is missed to load a hosts config file before printing hostnames.
This fixes the issue.
---
 contrib/inventory_builder/inventory.py | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/contrib/inventory_builder/inventory.py b/contrib/inventory_builder/inventory.py
index 106f9eeea..76e7c0c46 100644
--- a/contrib/inventory_builder/inventory.py
+++ b/contrib/inventory_builder/inventory.py
@@ -83,11 +83,15 @@ class KubesprayInventory(object):
         self.config_file = config_file
         self.yaml_config = {}
         loadPreviousConfig = False
+        printHostnames = False
         # See whether there are any commands to process
         if changed_hosts and changed_hosts[0] in AVAILABLE_COMMANDS:
             if changed_hosts[0] == "add":
                 loadPreviousConfig = True
                 changed_hosts = changed_hosts[1:]
+            elif changed_hosts[0] == "print_hostnames":
+                loadPreviousConfig = True
+                printHostnames = True
             else:
                 self.parse_command(changed_hosts[0], changed_hosts[1:])
                 sys.exit(0)
@@ -105,6 +109,10 @@ class KubesprayInventory(object):
                 print(e)
                 sys.exit(1)
 
+        if printHostnames:
+            self.print_hostnames()
+            sys.exit(0)
+
         self.ensure_required_groups(ROLES)
 
         if changed_hosts:
-- 
GitLab