deploy fix bug
This commit is contained in:
parent
b8905eaa3a
commit
5d16f18188
@ -8,6 +8,7 @@ import json
|
|||||||
import shlex
|
import shlex
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
import textwrap
|
||||||
import urllib.request
|
import urllib.request
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
@ -104,6 +105,7 @@ class CloudOperator:
|
|||||||
|
|
||||||
def deploy(self) -> None:
|
def deploy(self) -> None:
|
||||||
self.ensure_agent_online()
|
self.ensure_agent_online()
|
||||||
|
self.ensure_systemd_unit_installed()
|
||||||
package_url, sha256 = self.resolve_release_package()
|
package_url, sha256 = self.resolve_release_package()
|
||||||
|
|
||||||
if self.service_name == "gateway":
|
if self.service_name == "gateway":
|
||||||
@ -119,6 +121,7 @@ class CloudOperator:
|
|||||||
|
|
||||||
def restart(self) -> None:
|
def restart(self) -> None:
|
||||||
self.ensure_agent_online()
|
self.ensure_agent_online()
|
||||||
|
self.ensure_systemd_unit_installed()
|
||||||
unit_name = str(self.service_cfg["unit_name"])
|
unit_name = str(self.service_cfg["unit_name"])
|
||||||
health_url = str(self.service_cfg["health_url"])
|
health_url = str(self.service_cfg["health_url"])
|
||||||
command = " && ".join(
|
command = " && ".join(
|
||||||
@ -189,6 +192,59 @@ class CloudOperator:
|
|||||||
self.ensure_task_success(task, f"deploy {self.service_name}")
|
self.ensure_task_success(task, f"deploy {self.service_name}")
|
||||||
log(f"deploy completed for {self.service_name}@{self.instance_id} -> {self.release_id}")
|
log(f"deploy completed for {self.service_name}@{self.instance_id} -> {self.release_id}")
|
||||||
|
|
||||||
|
def ensure_systemd_unit_installed(self) -> None:
|
||||||
|
unit_name = str(self.service_cfg["unit_name"])
|
||||||
|
unit_path = f"/etc/systemd/system/{unit_name}"
|
||||||
|
unit_content = self.systemd_unit_content().rstrip() + "\n"
|
||||||
|
command = textwrap.dedent(
|
||||||
|
f"""\
|
||||||
|
set -Eeuo pipefail
|
||||||
|
unit_path={shlex.quote(unit_path)}
|
||||||
|
tmp_file="$(mktemp)"
|
||||||
|
trap 'rm -f "$tmp_file"' EXIT
|
||||||
|
cat >"$tmp_file" <<'UNIT_EOF'
|
||||||
|
{unit_content}UNIT_EOF
|
||||||
|
if [[ ! -f "$unit_path" ]] || ! cmp -s "$tmp_file" "$unit_path"; then
|
||||||
|
install -D -m 0644 "$tmp_file" "$unit_path"
|
||||||
|
/usr/bin/systemctl daemon-reload
|
||||||
|
fi
|
||||||
|
/usr/bin/systemctl enable {shlex.quote(unit_name)} >/dev/null
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
invocation_id = self.run_tat_command(command, f"ensure-unit-{self.service_name}")
|
||||||
|
task = self.wait_for_tat(invocation_id)
|
||||||
|
self.ensure_task_success(task, f"ensure systemd unit {unit_name}")
|
||||||
|
|
||||||
|
def systemd_unit_content(self) -> str:
|
||||||
|
deploy_root = str(self.service_cfg["deploy_root"]).rstrip("/")
|
||||||
|
binary_path = f"{deploy_root}/current/bin/{self.service_name}"
|
||||||
|
config_path = f"{deploy_root}/current/config/prod.yaml"
|
||||||
|
description = f"ChatApp {self.service_name.capitalize()} Service"
|
||||||
|
working_directory = f"{deploy_root}/current"
|
||||||
|
return textwrap.dedent(
|
||||||
|
f"""\
|
||||||
|
[Unit]
|
||||||
|
Description={description}
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
Group=root
|
||||||
|
WorkingDirectory={working_directory}
|
||||||
|
ExecStart={binary_path} -config {config_path}
|
||||||
|
Restart=always
|
||||||
|
RestartSec=3
|
||||||
|
KillSignal=SIGTERM
|
||||||
|
TimeoutStopSec=30
|
||||||
|
LimitNOFILE=65535
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
def run_tat_command(self, command: str, command_name: str) -> str:
|
def run_tat_command(self, command: str, command_name: str) -> str:
|
||||||
payload: dict[str, Any] = {
|
payload: dict[str, Any] = {
|
||||||
"CommandName": command_name,
|
"CommandName": command_name,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user