mirror of
https://github.com/containers/kubernetes-mcp-server.git
synced 2025-10-23 01:22:57 +03:00
99 lines
3.1 KiB
Python
99 lines
3.1 KiB
Python
import os
|
|
import platform
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
import shutil
|
|
import tempfile
|
|
import urllib.request
|
|
|
|
if sys.version_info >= (3, 8):
|
|
from importlib.metadata import version
|
|
else:
|
|
from importlib_metadata import version
|
|
|
|
__version__ = version("kubernetes-mcp-server")
|
|
|
|
def get_platform_binary():
|
|
"""Determine the correct binary for the current platform."""
|
|
system = platform.system().lower()
|
|
arch = platform.machine().lower()
|
|
|
|
# Normalize architecture names
|
|
if arch in ["x86_64", "amd64"]:
|
|
arch = "amd64"
|
|
elif arch in ["arm64", "aarch64"]:
|
|
arch = "arm64"
|
|
else:
|
|
raise RuntimeError(f"Unsupported architecture: {arch}")
|
|
|
|
if system == "darwin":
|
|
return f"kubernetes-mcp-server-darwin-{arch}"
|
|
elif system == "linux":
|
|
return f"kubernetes-mcp-server-linux-{arch}"
|
|
elif system == "windows":
|
|
return f"kubernetes-mcp-server-windows-{arch}.exe"
|
|
else:
|
|
raise RuntimeError(f"Unsupported operating system: {system}")
|
|
|
|
def download_binary(binary_version="latest", destination=None):
|
|
"""Download the correct binary for the current platform."""
|
|
binary_name = get_platform_binary()
|
|
if destination is None:
|
|
destination = Path.home() / ".kubernetes-mcp-server" / "bin" / binary_version
|
|
|
|
destination = Path(destination)
|
|
destination.mkdir(parents=True, exist_ok=True)
|
|
binary_path = destination / binary_name
|
|
|
|
if binary_path.exists():
|
|
return binary_path
|
|
|
|
base_url = "https://github.com/containers/kubernetes-mcp-server/releases"
|
|
if binary_version == "latest":
|
|
release_url = f"{base_url}/latest/download/{binary_name}"
|
|
else:
|
|
release_url = f"{base_url}/download/v{binary_version}/{binary_name}"
|
|
|
|
# Download the binary
|
|
print(f"Downloading {binary_name} from {release_url}")
|
|
with tempfile.NamedTemporaryFile(delete=False) as temp_file:
|
|
try:
|
|
with urllib.request.urlopen(release_url) as response:
|
|
shutil.copyfileobj(response, temp_file)
|
|
temp_file.close()
|
|
|
|
# Move to destination and make executable
|
|
shutil.move(temp_file.name, binary_path)
|
|
binary_path.chmod(binary_path.stat().st_mode | 0o755) # Make executable
|
|
|
|
return binary_path
|
|
except Exception as e:
|
|
os.unlink(temp_file.name)
|
|
raise RuntimeError(f"Failed to download binary: {e}")
|
|
|
|
def execute(args=None):
|
|
"""Download and execute the kubernetes-mcp-server binary."""
|
|
if args is None:
|
|
args = []
|
|
|
|
try:
|
|
binary_path = download_binary(binary_version=__version__)
|
|
cmd = [str(binary_path)] + args
|
|
|
|
# Execute the binary with the provided arguments
|
|
process = subprocess.run(cmd)
|
|
return process.returncode
|
|
except Exception as e:
|
|
print(f"Error executing kubernetes-mcp-server: {e}", file=sys.stderr)
|
|
return 1
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(execute(sys.argv[1:]))
|
|
|
|
|
|
def main():
|
|
"""Main function to execute the kubernetes-mcp-server binary."""
|
|
args = sys.argv[1:] if len(sys.argv) > 1 else []
|
|
return execute(args)
|