Enhance static directory handling and job deployment configuration
This commit is contained in:
@ -6,127 +6,13 @@ Script to deploy the Nomad MCP service using our own Nomad client.
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import subprocess
|
||||
from dotenv import load_dotenv
|
||||
from app.services.nomad_client import NomadService
|
||||
|
||||
# Load environment variables from .env file
|
||||
load_dotenv()
|
||||
|
||||
def read_job_spec(file_path):
|
||||
"""Read the Nomad job specification from a file."""
|
||||
try:
|
||||
with open(file_path, 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
# Convert HCL to JSON (simplified approach)
|
||||
# In a real scenario, you might want to use a proper HCL parser
|
||||
# This is a very basic approach that assumes the job spec is valid
|
||||
job_id = "nomad-mcp"
|
||||
|
||||
# Create a basic job structure
|
||||
job_spec = {
|
||||
"ID": job_id,
|
||||
"Name": job_id,
|
||||
"Type": "service",
|
||||
"Datacenters": ["jm"],
|
||||
"Namespace": "development",
|
||||
"TaskGroups": [
|
||||
{
|
||||
"Name": "app",
|
||||
"Count": 1,
|
||||
"Networks": [
|
||||
{
|
||||
"DynamicPorts": [
|
||||
{
|
||||
"Label": "http",
|
||||
"To": 8000
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Tasks": [
|
||||
{
|
||||
"Name": "nomad-mcp",
|
||||
"Driver": "docker",
|
||||
"Config": {
|
||||
"image": "registry.dev.meisheng.group/nomad_mcp:20250226",
|
||||
"ports": ["http"],
|
||||
"command": "python",
|
||||
"args": ["-m", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"],
|
||||
"mount": [
|
||||
{
|
||||
"type": "bind",
|
||||
"source": "local/nomad_mcp",
|
||||
"target": "/app",
|
||||
"readonly": False
|
||||
}
|
||||
]
|
||||
},
|
||||
"Artifacts": [
|
||||
{
|
||||
"source": "git::ssh://git@gitea.service.mesh:2222/Mei_Sheng_Textiles/nomad_mcp.git",
|
||||
"destination": "local/nomad_mcp",
|
||||
"options": {
|
||||
"ref": "main",
|
||||
"sshkey": "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNBY01oYkNPVXhFOHBYQ3d5UEh0ZFR4aThHU0pzNEdTNXZ6ZTR6Tm1ueUYvUUFBQUtCQm5RZi9RWjBICi93QUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQWNNaGJDT1V4RThwWEN3eVBIdGRUeGk4R1NKczRHUzV2emU0ek5tbnlGL1EKQUFBRURreWwzQlZlek9YUWZUNzZac0NkYTZPNTFnMExsb25EMEd6L2Y4SHh3dzRCd3lGc0k1VEVUeWxjTEREOGUxMVBHTAp3WkltemdaTG0vTjdqTTJhZklYOUFBQUFHR1JsY0d4dmVTQnJaWGtnWm05eUlHNXZiV0ZrWDIxamNBRUNBd1FGCi0tLS0tRU5EIE9QRU5TU0ggUFJJVkFURSBLRVktLS0tLQo="
|
||||
}
|
||||
}
|
||||
],
|
||||
"Env": {
|
||||
"NOMAD_ADDR": "http://pjmldk01.ds.meisheng.group:4646",
|
||||
"NOMAD_NAMESPACE": "development",
|
||||
"NOMAD_SKIP_VERIFY": "true",
|
||||
"PORT": "8000",
|
||||
"HOST": "0.0.0.0",
|
||||
"LOG_LEVEL": "INFO",
|
||||
"RELOAD": "true",
|
||||
"PYTHONPATH": "/app"
|
||||
},
|
||||
"Resources": {
|
||||
"CPU": 200,
|
||||
"MemoryMB": 256
|
||||
},
|
||||
"Services": [
|
||||
{
|
||||
"Name": "nomad-mcp",
|
||||
"PortLabel": "http",
|
||||
"Tags": [
|
||||
"traefik.enable=true",
|
||||
"traefik.http.routers.nomad-mcp.entryPoints=https",
|
||||
"traefik.http.routers.nomad-mcp.rule=Host(`nomad_mcp.dev.meisheng.group`)",
|
||||
"traefik.http.routers.nomad-mcp.middlewares=proxyheaders@consulcatalog"
|
||||
],
|
||||
"Checks": [
|
||||
{
|
||||
"Type": "http",
|
||||
"Path": "/api/health",
|
||||
"Interval": 10000000000,
|
||||
"Timeout": 2000000000,
|
||||
"CheckRestart": {
|
||||
"Limit": 3,
|
||||
"Grace": 60000000000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Update": {
|
||||
"MaxParallel": 1,
|
||||
"MinHealthyTime": 30000000000,
|
||||
"HealthyDeadline": 300000000000,
|
||||
"AutoRevert": True
|
||||
}
|
||||
}
|
||||
|
||||
return job_spec
|
||||
except Exception as e:
|
||||
print(f"Error reading job specification: {str(e)}")
|
||||
sys.exit(1)
|
||||
|
||||
def main():
|
||||
print("Deploying Nomad MCP service using our own Nomad client...")
|
||||
|
||||
@ -142,12 +28,112 @@ def main():
|
||||
# Initialize the Nomad service
|
||||
nomad_service = NomadService()
|
||||
|
||||
# Read the job specification
|
||||
job_spec = read_job_spec("nomad_mcp_job.nomad")
|
||||
print("Job specification loaded successfully.")
|
||||
# Use the HCL file directly with the Nomad CLI
|
||||
print("Registering and starting the nomad-mcp job...")
|
||||
|
||||
# Create a job specification directly
|
||||
job_spec = {
|
||||
"Job": {
|
||||
"ID": "nomad-mcp",
|
||||
"Name": "nomad-mcp",
|
||||
"Type": "service",
|
||||
"Datacenters": ["jm"],
|
||||
"Namespace": "development",
|
||||
"TaskGroups": [
|
||||
{
|
||||
"Name": "app",
|
||||
"Count": 1,
|
||||
"Networks": [
|
||||
{
|
||||
"DynamicPorts": [
|
||||
{
|
||||
"Label": "http",
|
||||
"To": 8000
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Tasks": [
|
||||
{
|
||||
"Name": "nomad-mcp",
|
||||
"Driver": "docker",
|
||||
"Config": {
|
||||
"image": "registry.dev.meisheng.group/nomad_mcp:20250226",
|
||||
"ports": ["http"],
|
||||
"command": "python",
|
||||
"args": ["-m", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"],
|
||||
"mount": [
|
||||
{
|
||||
"type": "bind",
|
||||
"source": "local/nomad_mcp",
|
||||
"target": "/app",
|
||||
"readonly": False
|
||||
}
|
||||
]
|
||||
},
|
||||
"Artifacts": [
|
||||
{
|
||||
"GetterSource": "git::ssh://git@gitea.service.mesh:2222/Mei_Sheng_Textiles/nomad_mcp.git",
|
||||
"RelativeDest": "local/nomad_mcp",
|
||||
"GetterOptions": {
|
||||
"ref": "main",
|
||||
"sshkey": "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNBY01oYkNPVXhFOHBYQ3d5UEh0ZFR4aThHU0pzNEdTNXZ6ZTR6Tm1ueUYvUUFBQUtCQm5RZi9RWjBICi93QUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQWNNaGJDT1V4RThwWEN3eVBIdGRUeGk4R1NKczRHUzV2emU0ek5tbnlGL1EKQUFBRURreWwzQlZlek9YUWZUNzZac0NkYTZPNTFnMExsb25EMEd6L2Y4SHh3dzRCd3lGc0k1VEVUeWxjTERJOGUxMVBHTAp3WkltemdaTG0vTjdqTTJhZklYOUFBQUFHR1JsY0d4dmVTQnJaWGtnWm05eUlHNXZiV0ZrWDIxamNBRUNBd1FGCi0tLS0tRU5EIE9QRU5TU0ggUFJJVkFURSBLRVktLS0tLQo="
|
||||
}
|
||||
}
|
||||
],
|
||||
"Env": {
|
||||
"NOMAD_ADDR": "http://pjmldk01.ds.meisheng.group:4646",
|
||||
"NOMAD_NAMESPACE": "development",
|
||||
"NOMAD_SKIP_VERIFY": "true",
|
||||
"PORT": "8000",
|
||||
"HOST": "0.0.0.0",
|
||||
"LOG_LEVEL": "INFO",
|
||||
"RELOAD": "true",
|
||||
"PYTHONPATH": "/app",
|
||||
"STATIC_DIR": "/local/nomad_mcp/static"
|
||||
},
|
||||
"Resources": {
|
||||
"CPU": 200,
|
||||
"MemoryMB": 256
|
||||
},
|
||||
"Services": [
|
||||
{
|
||||
"Name": "nomad-mcp",
|
||||
"PortLabel": "http",
|
||||
"Tags": [
|
||||
"traefik.enable=true",
|
||||
"traefik.http.routers.nomad-mcp.entryPoints=https",
|
||||
"traefik.http.routers.nomad-mcp.rule=Host(`nomad_mcp.dev.meisheng.group`)",
|
||||
"traefik.http.routers.nomad-mcp.middlewares=proxyheaders@consulcatalog"
|
||||
],
|
||||
"Checks": [
|
||||
{
|
||||
"Type": "http",
|
||||
"Path": "/api/health",
|
||||
"Interval": 10000000000,
|
||||
"Timeout": 2000000000,
|
||||
"CheckRestart": {
|
||||
"Limit": 3,
|
||||
"Grace": 60000000000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Update": {
|
||||
"MaxParallel": 1,
|
||||
"MinHealthyTime": 30000000000,
|
||||
"HealthyDeadline": 300000000000,
|
||||
"AutoRevert": True
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Start the job
|
||||
print("Registering and starting the nomad-mcp job...")
|
||||
response = nomad_service.start_job(job_spec)
|
||||
|
||||
print("\nJob registration response:")
|
||||
|
Reference in New Issue
Block a user