This commit is contained in:
105
.gitea/scripts/process-terraform-output.py
Normal file
105
.gitea/scripts/process-terraform-output.py
Normal file
@@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Process Terraform output to extract applications_for_wiki data
|
||||
Handles various output formats and cleans up invalid JSON
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
|
||||
def clean_command_prefix(content):
|
||||
"""Remove [command] prefix if present"""
|
||||
if content.startswith('[command]'):
|
||||
lines = content.split('\n', 1)
|
||||
if len(lines) > 1:
|
||||
return lines[1]
|
||||
return content
|
||||
|
||||
def extract_valid_json(content):
|
||||
"""Extract valid JSON from content that might have extra data"""
|
||||
# Find first { and last matching }
|
||||
start = content.find('{')
|
||||
if start < 0:
|
||||
return None
|
||||
|
||||
count = 0
|
||||
end = start
|
||||
for i in range(start, len(content)):
|
||||
if content[i] == '{':
|
||||
count += 1
|
||||
elif content[i] == '}':
|
||||
count -= 1
|
||||
if count == 0:
|
||||
end = i + 1
|
||||
break
|
||||
|
||||
if end > start and count == 0:
|
||||
return content[start:end]
|
||||
return None
|
||||
|
||||
def extract_value(data):
|
||||
"""Extract value from Terraform output format"""
|
||||
if isinstance(data, dict) and 'value' in data:
|
||||
return data['value']
|
||||
return data
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: process-terraform-output.py <input-file> <output-file>")
|
||||
sys.exit(1)
|
||||
|
||||
input_file = sys.argv[1]
|
||||
output_file = sys.argv[2]
|
||||
|
||||
try:
|
||||
# Read input file
|
||||
with open(input_file, 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
# Clean command prefix if present
|
||||
content = clean_command_prefix(content)
|
||||
|
||||
# Try to parse JSON directly
|
||||
try:
|
||||
data = json.loads(content)
|
||||
print("✅ Valid JSON parsed successfully")
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"⚠️ Initial JSON parse failed: {e}")
|
||||
print("🔍 Attempting to extract valid JSON portion...")
|
||||
|
||||
# Try to extract valid JSON
|
||||
valid_json = extract_valid_json(content)
|
||||
if valid_json:
|
||||
try:
|
||||
data = json.loads(valid_json)
|
||||
print("✅ Extracted valid JSON successfully")
|
||||
except json.JSONDecodeError as e2:
|
||||
print(f"❌ Failed to parse extracted JSON: {e2}")
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("❌ Could not extract valid JSON from content")
|
||||
sys.exit(1)
|
||||
|
||||
# Extract value if it's wrapped in Terraform output format
|
||||
result = extract_value(data)
|
||||
|
||||
# Write output
|
||||
with open(output_file, 'w') as f:
|
||||
json.dump(result, f, indent=2)
|
||||
|
||||
print(f"✅ Processed output written to {output_file}")
|
||||
|
||||
# Show preview
|
||||
preview = json.dumps(result, indent=2)[:200]
|
||||
print(f"📄 Preview: {preview}...")
|
||||
|
||||
except FileNotFoundError:
|
||||
print(f"❌ Input file {input_file} not found")
|
||||
sys.exit(1)
|
||||
except Exception as e:
|
||||
print(f"❌ Error: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user