Apply Composer changes: comprehensive API updates, migrations, middleware, and infrastructure improvements
- Add comprehensive database migrations (001-024) for schema evolution - Enhance API schema with expanded type definitions and resolvers - Add new middleware: audit logging, rate limiting, MFA enforcement, security, tenant auth - Implement new services: AI optimization, billing, blockchain, compliance, marketplace - Add adapter layer for cloud integrations (Cloudflare, Kubernetes, Proxmox, storage) - Update Crossplane provider with enhanced VM management capabilities - Add comprehensive test suite for API endpoints and services - Update frontend components with improved GraphQL subscriptions and real-time updates - Enhance security configurations and headers (CSP, CORS, etc.) - Update documentation and configuration files - Add new CI/CD workflows and validation scripts - Implement design system improvements and UI enhancements
This commit is contained in:
195
scripts/enhance-guest-agent-verification.py
Executable file
195
scripts/enhance-guest-agent-verification.py
Executable file
@@ -0,0 +1,195 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Enhance guest agent verification in all VM YAML templates.
|
||||
Adds detailed verification commands matching the check script.
|
||||
"""
|
||||
|
||||
import re
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# Enhanced verification block
|
||||
ENHANCED_VERIFICATION = ''' # Verify packages are installed
|
||||
- |
|
||||
echo "=========================================="
|
||||
echo "Verifying required packages are installed..."
|
||||
echo "=========================================="
|
||||
for pkg in qemu-guest-agent curl wget net-tools chrony unattended-upgrades; do
|
||||
if ! dpkg -l | grep -q "^ii.*$pkg"; then
|
||||
echo "ERROR: Package $pkg is not installed"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ Package $pkg is installed"
|
||||
done
|
||||
echo "All required packages verified"
|
||||
|
||||
# Verify qemu-guest-agent package details
|
||||
- |
|
||||
echo "=========================================="
|
||||
echo "Checking qemu-guest-agent package details..."
|
||||
echo "=========================================="
|
||||
if dpkg -l | grep -q "^ii.*qemu-guest-agent"; then
|
||||
echo "✅ qemu-guest-agent package IS installed"
|
||||
dpkg -l | grep qemu-guest-agent
|
||||
else
|
||||
echo "❌ qemu-guest-agent package is NOT installed"
|
||||
echo "Attempting to install..."
|
||||
apt-get update
|
||||
apt-get install -y qemu-guest-agent
|
||||
fi
|
||||
|
||||
# Enable and start QEMU Guest Agent
|
||||
- |
|
||||
echo "=========================================="
|
||||
echo "Enabling and starting QEMU Guest Agent..."
|
||||
echo "=========================================="
|
||||
systemctl enable qemu-guest-agent
|
||||
systemctl start qemu-guest-agent
|
||||
echo "QEMU Guest Agent enabled and started"
|
||||
|
||||
# Verify guest agent service is running
|
||||
- |
|
||||
echo "=========================================="
|
||||
echo "Verifying QEMU Guest Agent service status..."
|
||||
echo "=========================================="
|
||||
for i in {1..30}; do
|
||||
if systemctl is-active --quiet qemu-guest-agent; then
|
||||
echo "✅ QEMU Guest Agent service IS running"
|
||||
systemctl status qemu-guest-agent --no-pager -l
|
||||
exit 0
|
||||
fi
|
||||
echo "Waiting for QEMU Guest Agent to start... ($i/30)"
|
||||
sleep 1
|
||||
done
|
||||
echo "⚠️ WARNING: QEMU Guest Agent may not have started properly"
|
||||
systemctl status qemu-guest-agent --no-pager -l || true
|
||||
echo "Attempting to restart..."
|
||||
systemctl restart qemu-guest-agent
|
||||
sleep 3
|
||||
if systemctl is-active --quiet qemu-guest-agent; then
|
||||
echo "✅ QEMU Guest Agent started after restart"
|
||||
else
|
||||
echo "❌ QEMU Guest Agent failed to start"
|
||||
fi'''
|
||||
|
||||
|
||||
def find_verification_block(content):
|
||||
"""Find the old verification block in the content."""
|
||||
# Pattern to match from "Verify packages" to end of guest agent verification
|
||||
pattern = r'( # Verify packages are installed.*? systemctl status qemu-guest-agent --no-pager \|\| true)'
|
||||
match = re.search(pattern, content, re.DOTALL)
|
||||
return match
|
||||
|
||||
|
||||
def enhance_file(file_path):
|
||||
"""Enhance a single YAML file with improved verification."""
|
||||
print(f"📝 Processing: {file_path}")
|
||||
|
||||
# Read file
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
except Exception as e:
|
||||
print(f"❌ Error reading {file_path}: {e}")
|
||||
return False
|
||||
|
||||
# Check if file contains guest agent verification
|
||||
if "Verifying required packages are installed" not in content:
|
||||
print(f"⏭️ Skipping {file_path} (no guest agent verification found)")
|
||||
return None
|
||||
|
||||
# Check if already enhanced
|
||||
if "Checking qemu-guest-agent package details" in content:
|
||||
print(f"✅ Already enhanced: {file_path}")
|
||||
return None
|
||||
|
||||
# Find and replace
|
||||
match = find_verification_block(content)
|
||||
if not match:
|
||||
print(f"⚠️ Could not find verification block in {file_path}")
|
||||
return False
|
||||
|
||||
# Create backup
|
||||
backup_path = f"{file_path}.backup-{datetime.now().strftime('%Y%m%d-%H%M%S')}"
|
||||
try:
|
||||
with open(backup_path, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
except Exception as e:
|
||||
print(f"❌ Error creating backup: {e}")
|
||||
return False
|
||||
|
||||
# Replace
|
||||
new_content = content[:match.start()] + ENHANCED_VERIFICATION + content[match.end():]
|
||||
|
||||
# Write updated content
|
||||
try:
|
||||
with open(file_path, 'w', encoding='utf-8') as f:
|
||||
f.write(new_content)
|
||||
print(f"✅ Updated: {file_path}")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"❌ Error writing {file_path}: {e}")
|
||||
# Restore from backup
|
||||
try:
|
||||
with open(backup_path, 'r', encoding='utf-8') as f:
|
||||
with open(file_path, 'w', encoding='utf-8') as out:
|
||||
out.write(f.read())
|
||||
except:
|
||||
pass
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
"""Main function."""
|
||||
script_dir = Path(__file__).parent
|
||||
project_root = script_dir.parent
|
||||
templates_dir = project_root / "examples" / "production"
|
||||
|
||||
if not templates_dir.exists():
|
||||
print(f"❌ Templates directory not found: {templates_dir}")
|
||||
sys.exit(1)
|
||||
|
||||
print("==========================================")
|
||||
print("Enhancing Guest Agent Verification")
|
||||
print("==========================================")
|
||||
print(f"Target directory: {templates_dir}")
|
||||
print()
|
||||
|
||||
# Find all YAML files (excluding backups)
|
||||
yaml_files = sorted(templates_dir.rglob("*.yaml"))
|
||||
yaml_files = [f for f in yaml_files if "backup" not in f.name]
|
||||
|
||||
if not yaml_files:
|
||||
print("No YAML files found")
|
||||
sys.exit(1)
|
||||
|
||||
updated_count = 0
|
||||
skipped_count = 0
|
||||
failed_count = 0
|
||||
|
||||
for file_path in yaml_files:
|
||||
result = enhance_file(file_path)
|
||||
if result is True:
|
||||
updated_count += 1
|
||||
elif result is None:
|
||||
skipped_count += 1
|
||||
else:
|
||||
failed_count += 1
|
||||
|
||||
print()
|
||||
print("==========================================")
|
||||
print("Summary")
|
||||
print("==========================================")
|
||||
print(f"✅ Updated: {updated_count} files")
|
||||
print(f"⏭️ Skipped: {skipped_count} files")
|
||||
if failed_count > 0:
|
||||
print(f"❌ Failed: {failed_count} files")
|
||||
print()
|
||||
print("Done!")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user