[PATCH 1/8] terraform: Use directory checksum in SSH key filenames

Luis Chamberlain <[email protected]> Sat, 6 Dec 2025 08:56:15 -0800
Newsgroups dev.linux.lists.kdevops
Message-ID <[email protected]>
SSH keys now use directory-based checksums to support multiple kdevops
installations coexisting without conflicts. The SSH key filename format
is now ~/.ssh/kdevops_terraform_<checksum> where checksum is the first
8 characters of the SHA256 hash of the kdevops directory path.

This was previously only applied to Lambda Labs provider but is now the
default for all providers, as it solves the general problem of multiple
installations sharing the same home directory.

Also fix OCI Kconfig generation scripts to use --quiet flag correctly
to suppress progress output when generating dynamic Kconfig files.

Generated-by: Claude AI
Signed-off-by: Luis Chamberlain <[email protected]>
---
 terraform/Kconfig.ssh                      | 7 +++++--
 terraform/oci/scripts/gen_kconfig_image    | 6 ++++++
 terraform/oci/scripts/gen_kconfig_location | 6 ++++++
 terraform/oci/scripts/gen_kconfig_shape    | 6 ++++++
 4 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/terraform/Kconfig.ssh b/terraform/Kconfig.ssh
index 4e239a35..b03f962f 100644
--- a/terraform/Kconfig.ssh
+++ b/terraform/Kconfig.ssh
@@ -21,14 +21,17 @@ config TERRAFORM_SSH_CONFIG_USER
 
 config TERRAFORM_SSH_CONFIG_PUBKEY_FILE
 	string "File containing Ansible's ssh public key"
-	default "~/.ssh/kdevops_terraform_$(shell, echo $(TOPDIR_PATH) | sha256sum | cut -c1-8).pub" if TERRAFORM_LAMBDALABS
-	default "~/.ssh/kdevops_terraform.pub"
+	default "~/.ssh/kdevops_terraform_$(shell, echo $(TOPDIR_PATH) | sha256sum | cut -c1-8).pub"
 	help
 	  The filename of the file containing an ssh public key
 	  Ansible is to use to manage its target nodes. The
 	  matching private key should be located in a file using
 	  the same basename (without the ".pub").
 
+	  The filename includes an 8-character hash of the current
+	  directory path, allowing multiple kdevops installations to
+	  use separate SSH keys without conflicts.
+
 config TERRAFORM_SSH_CONFIG_GENKEY
 	bool "Should we create a new random key for you?"
 	default y
diff --git a/terraform/oci/scripts/gen_kconfig_image b/terraform/oci/scripts/gen_kconfig_image
index 977446fd..55dfcf6c 100755
--- a/terraform/oci/scripts/gen_kconfig_image
+++ b/terraform/oci/scripts/gen_kconfig_image
@@ -718,6 +718,12 @@ def main():
     """Main function to run the program."""
     args = parse_arguments()
 
+    # Check for OCI config early - exit silently if not configured
+    if not os.path.exists(os.path.expanduser("~/.oci/config")):
+        if not args.quiet:
+            print("OCI not configured - skipping (optional)", file=sys.stderr)
+        sys.exit(0)
+
     if args.publishers:
         # Show both known and discovered publishers
         compartment_ocid = get_default_compartment()
diff --git a/terraform/oci/scripts/gen_kconfig_location b/terraform/oci/scripts/gen_kconfig_location
index 17ec8266..b397f534 100755
--- a/terraform/oci/scripts/gen_kconfig_location
+++ b/terraform/oci/scripts/gen_kconfig_location
@@ -432,6 +432,12 @@ def main():
     """Main function to run the program."""
     args = parse_arguments()
 
+    # Check for OCI config early - exit silently if not configured
+    if not os.path.exists(os.path.expanduser("~/.oci/config")):
+        if not args.quiet:
+            print("OCI not configured - skipping (optional)", file=sys.stderr)
+        sys.exit(0)
+
     if not args.quiet:
         print("Fetching list of OCI region subscriptions...", file=sys.stderr)
     regions = get_all_regions()
diff --git a/terraform/oci/scripts/gen_kconfig_shape b/terraform/oci/scripts/gen_kconfig_shape
index 09dd6d6f..d65ff37d 100755
--- a/terraform/oci/scripts/gen_kconfig_shape
+++ b/terraform/oci/scripts/gen_kconfig_shape
@@ -887,6 +887,12 @@ def main():
     """Main function to run the program."""
     args = parse_arguments()
 
+    # Check for OCI config early - exit silently if not configured
+    if not os.path.exists(os.path.expanduser("~/.oci/config")):
+        if not args.quiet:
+            print("OCI not configured - skipping (optional)", file=sys.stderr)
+        sys.exit(0)
+
     compartment_ocid = get_default_compartment()
     if not compartment_ocid:
         print("Error: Could not determine compartment OCID", file=sys.stderr)
-- 
2.51.0