From: Luis Chamberlain <mcgrof@kernel.org>
To: Chuck Lever <cel@kernel.org>, Daniel Gomez <da.gomez@kruces.com>,
kdevops@lists.linux.dev
Cc: Luis Chamberlain <mcgrof@kernel.org>
Subject: [PATCH v4 4/8] aws: integrate dynamic Kconfig generation with make targets
Date: Tue, 16 Sep 2025 17:34:45 -0700 [thread overview]
Message-ID: <20250917003451.2318229-5-mcgrof@kernel.org> (raw)
In-Reply-To: <20250917003451.2318229-1-mcgrof@kernel.org>
Add Makefile integration for AWS dynamic Kconfig generation using
Chuck's scripts with the optimized wrapper. This provides:
- make cloud-config-aws: Generate AWS Kconfig files
- make cloud-update-aws: Clear cache and regenerate fresh data
- make cloud-config: Now includes AWS generation
- make cloud-update: Refreshes all cloud provider data
- make clean-cloud-config-aws: Clean generated AWS files
The integration properly manages AWS Kconfig files alongside Lambda Labs
configurations and ensures empty files exist before Kconfig runs to
prevent sourcing errors.
Also update generate_cloud_configs.py to call the AWS generator and
provide summary statistics about available AWS resources.
Generated-by: Claude AI
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
scripts/dynamic-cloud-kconfig.Makefile | 49 ++++++++++++++--
scripts/generate_cloud_configs.py | 78 +++++++++++++++++++++++++-
2 files changed, 120 insertions(+), 7 deletions(-)
diff --git a/scripts/dynamic-cloud-kconfig.Makefile b/scripts/dynamic-cloud-kconfig.Makefile
index e15651ab..ed2d5366 100644
--- a/scripts/dynamic-cloud-kconfig.Makefile
+++ b/scripts/dynamic-cloud-kconfig.Makefile
@@ -12,8 +12,18 @@ LAMBDALABS_KCONFIG_IMAGES := $(LAMBDALABS_KCONFIG_DIR)/Kconfig.images.generated
LAMBDALABS_KCONFIGS := $(LAMBDALABS_KCONFIG_COMPUTE) $(LAMBDALABS_KCONFIG_LOCATION) $(LAMBDALABS_KCONFIG_IMAGES)
-# Add Lambda Labs generated files to mrproper clean list
-KDEVOPS_MRPROPER += $(LAMBDALABS_KCONFIGS)
+# AWS dynamic configuration
+AWS_KCONFIG_DIR := terraform/aws/kconfigs
+AWS_KCONFIG_COMPUTE := $(AWS_KCONFIG_DIR)/Kconfig.compute.generated
+AWS_KCONFIG_LOCATION := $(AWS_KCONFIG_DIR)/Kconfig.location.generated
+AWS_KCONFIG_GPU_AMIS := $(AWS_KCONFIG_DIR)/Kconfig.gpu-amis.generated
+AWS_KCONFIG_INSTANCE_TYPES_DIR := $(AWS_KCONFIG_DIR)/instance-types
+
+# Note: Instance type files are generated dynamically, so we just track the main ones
+AWS_KCONFIGS := $(AWS_KCONFIG_COMPUTE) $(AWS_KCONFIG_LOCATION) $(AWS_KCONFIG_GPU_AMIS)
+
+# Add generated files to mrproper clean list
+KDEVOPS_MRPROPER += $(LAMBDALABS_KCONFIGS) $(AWS_KCONFIGS)
# Touch Lambda Labs generated files so Kconfig can source them
# This ensures the files exist (even if empty) before Kconfig runs
@@ -22,20 +32,44 @@ dynamic_lambdalabs_kconfig_touch:
DYNAMIC_KCONFIG += dynamic_lambdalabs_kconfig_touch
+# Touch AWS generated files so Kconfig can source them
+dynamic_aws_kconfig_touch:
+ $(Q)mkdir -p $(AWS_KCONFIG_INSTANCE_TYPES_DIR)
+ $(Q)touch $(AWS_KCONFIGS)
+
+DYNAMIC_KCONFIG += dynamic_aws_kconfig_touch
+
# Individual Lambda Labs targets are now handled by generate_cloud_configs.py
cloud-config-lambdalabs:
$(Q)python3 scripts/generate_cloud_configs.py
+# AWS targets using Chuck's scripts with caching
+cloud-config-aws:
+ $(Q)python3 terraform/aws/scripts/generate_aws_kconfig.py
+
+# AWS cache refresh (clears cache and regenerates)
+cloud-update-aws:
+ $(Q)python3 terraform/aws/scripts/generate_aws_kconfig.py clear-cache
+ $(Q)python3 terraform/aws/scripts/generate_aws_kconfig.py
+
# Clean Lambda Labs generated files
clean-cloud-config-lambdalabs:
$(Q)rm -f $(LAMBDALABS_KCONFIGS)
-DYNAMIC_CLOUD_KCONFIG += cloud-config-lambdalabs
+# Clean AWS generated files
+clean-cloud-config-aws:
+ $(Q)rm -f $(AWS_KCONFIGS)
+ $(Q)rm -rf $(AWS_KCONFIG_INSTANCE_TYPES_DIR)
+
+DYNAMIC_CLOUD_KCONFIG += cloud-config-lambdalabs cloud-config-aws
cloud-config-help:
@echo "Cloud-specific dynamic kconfig targets:"
@echo "cloud-config - generates all cloud provider dynamic kconfig content"
@echo "cloud-config-lambdalabs - generates Lambda Labs dynamic kconfig content"
+ @echo "cloud-config-aws - generates AWS dynamic kconfig content"
+ @echo "cloud-update - refreshes cloud provider data (clears cache)"
+ @echo "cloud-update-aws - refreshes AWS data (clears cache and regenerates)"
@echo "clean-cloud-config - removes all generated cloud kconfig files"
@echo "cloud-list-all - list all cloud instances for configured provider"
@@ -44,11 +78,16 @@ HELP_TARGETS += cloud-config-help
cloud-config:
$(Q)python3 scripts/generate_cloud_configs.py
-clean-cloud-config: clean-cloud-config-lambdalabs
+cloud-update: cloud-update-aws
+ $(Q)echo "Updated cloud provider configurations."
+
+clean-cloud-config: clean-cloud-config-lambdalabs clean-cloud-config-aws
$(Q)echo "Cleaned all cloud provider dynamic Kconfig files."
cloud-list-all:
$(Q)chmod +x scripts/cloud_list_all.sh
$(Q)scripts/cloud_list_all.sh
-PHONY += cloud-config cloud-config-lambdalabs clean-cloud-config clean-cloud-config-lambdalabs cloud-config-help cloud-list-all
+PHONY += cloud-config cloud-config-lambdalabs cloud-config-aws cloud-update cloud-update-aws
+PHONY += clean-cloud-config clean-cloud-config-lambdalabs clean-cloud-config-aws
+PHONY += cloud-config-help cloud-list-all
diff --git a/scripts/generate_cloud_configs.py b/scripts/generate_cloud_configs.py
index b16294dd..e8251a73 100755
--- a/scripts/generate_cloud_configs.py
+++ b/scripts/generate_cloud_configs.py
@@ -100,6 +100,68 @@ def get_lambdalabs_summary() -> tuple[bool, str]:
return False, "Lambda Labs: Error querying API - using defaults"
+def generate_aws_kconfig() -> bool:
+ """
+ Generate AWS Kconfig files using Chuck's scripts.
+ Returns True on success, False on failure.
+ """
+ script_path = "terraform/aws/scripts/generate_aws_kconfig.py"
+
+ result = subprocess.run(
+ [sys.executable, script_path],
+ capture_output=True,
+ text=True,
+ check=False,
+ )
+
+ return result.returncode == 0
+
+
+def get_aws_summary() -> tuple[bool, str]:
+ """
+ Get a summary of AWS configurations.
+ Returns (success, summary_string)
+ """
+ try:
+ # Check if AWS credentials are configured
+ result = subprocess.run(
+ ["aws", "sts", "get-caller-identity"],
+ capture_output=True,
+ text=True,
+ check=False,
+ )
+
+ if result.returncode != 0:
+ return False, "AWS: Credentials not configured - using defaults"
+
+ # Get basic stats from cached data if available
+ cache_dir = os.path.expanduser("~/.cache/kdevops/aws")
+ families_cache = os.path.join(cache_dir, "aws_families.json")
+
+ if os.path.exists(families_cache):
+ with open(families_cache, 'r') as f:
+ families = json.load(f)
+ family_count = len(families)
+ else:
+ family_count = "72+" # Known minimum
+
+ regions_cache = os.path.join(cache_dir, "aws_regions.json")
+ if os.path.exists(regions_cache):
+ with open(regions_cache, 'r') as f:
+ regions = json.load(f)
+ region_count = len(regions)
+ else:
+ region_count = "30+" # Known minimum
+
+ return (
+ True,
+ f"AWS: {family_count} instance families, {region_count} regions, "
+ f"900+ instance types available"
+ )
+ except Exception:
+ return False, "AWS: Error checking configuration"
+
+
def main():
"""Main function to generate cloud configurations."""
print("Cloud Provider Configuration Summary")
@@ -121,8 +183,20 @@ def main():
print(f"⚠ {summary}")
print()
- # AWS (placeholder - not implemented)
- print("⚠ AWS: Dynamic configuration not yet implemented")
+ # AWS - Generate Kconfig files
+ aws_generated = generate_aws_kconfig()
+
+ # AWS - Get summary
+ success, summary = get_aws_summary()
+ if success:
+ print(f"✓ {summary}")
+ if aws_generated:
+ print(" Kconfig files generated successfully")
+ else:
+ print(" Warning: Failed to generate Kconfig files")
+ else:
+ print(f"⚠ {summary}")
+ print()
# Azure (placeholder - not implemented)
print("⚠ Azure: Dynamic configuration not yet implemented")
--
2.51.0
next prev parent reply other threads:[~2025-09-17 0:34 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-17 0:34 [PATCH v4 0/8] aws: add dynamic kconfig support Luis Chamberlain
2025-09-17 0:34 ` [PATCH v4 1/8] aws: prevent SSH key conflicts across multiple kdevops directories Luis Chamberlain
2025-09-17 3:36 ` Chuck Lever
2025-09-17 0:34 ` [PATCH v4 2/8] terraform/aws: Add scripts to gather provider resource information Luis Chamberlain
2025-09-17 0:34 ` [PATCH v4 3/8] aws: add optimized Kconfig generator using Chuck's scripts Luis Chamberlain
2025-09-17 3:58 ` Chuck Lever
2025-09-17 0:34 ` Luis Chamberlain [this message]
2025-09-17 3:40 ` [PATCH v4 4/8] aws: integrate dynamic Kconfig generation with make targets Chuck Lever
2025-09-17 7:05 ` Luis Chamberlain
2025-09-17 0:34 ` [PATCH v4 5/8] aws: add cloud billing support with make cloud-bill Luis Chamberlain
2025-09-17 0:34 ` [PATCH v4 6/8] aws: replace static Kconfig files with dynamically generated ones Luis Chamberlain
2025-09-17 0:34 ` [PATCH v4 7/8] aws: add GPU instance defconfigs for AI/ML workloads Luis Chamberlain
2025-09-17 0:34 ` [PATCH v4 8/8] docs: add documentation for dynamic cloud configuration Luis Chamberlain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250917003451.2318229-5-mcgrof@kernel.org \
--to=mcgrof@kernel.org \
--cc=cel@kernel.org \
--cc=da.gomez@kruces.com \
--cc=kdevops@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox