cli: use env through ansible for ioc commands
Deploy / deploy (push) Canceled after 0s

This commit is contained in:
Benjamin Labrecque
2026-07-20 15:13:18 +02:00
parent 1d9946c22e
commit c4d6f2afb4
6 changed files with 108 additions and 20 deletions
+7
View File
@@ -8,6 +8,7 @@ authors = [
]
dependencies = [
"agebd",
"ansible>=8.7.0",
"ansible-runner>=2.4.3",
"copier>=9.10.3",
@@ -25,6 +26,9 @@ dev = [
"ruff>=0.15.19",
]
[tool.uv.sources]
agebd = { path = "../packages/agebd", editable = true }
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
@@ -51,3 +55,6 @@ line-length = 100
[tool.ruff.lint]
# use isort to sort imports
extend-select = ["I"]
[tool.ruff.lint.isort]
known-first-party = ["agebd"]
+7 -2
View File
@@ -4,6 +4,7 @@ import sys
import ansible_runner
import typer
from core.enums import IOC_ENV
from core.utils import get_git_root
ioc = typer.Typer(no_args_is_help=True)
@@ -11,7 +12,11 @@ ioc = typer.Typer(no_args_is_help=True)
REPO_ROOT = get_git_root(__file__)
def run_playbook(playbook: str, vars: list[str]):
def run_playbook(playbook: str, env: IOC_ENV, vars: list[str]):
env_str = str(env)
if env_str not in ["dev", "prod"]:
raise ValueError("env must be 'dev' or 'prod'")
current_env = os.environ.copy()
current_env["ANSIBLE_CONFIG"] = f"{REPO_ROOT}/ansible/ansible.cfg"
@@ -21,7 +26,7 @@ def run_playbook(playbook: str, vars: list[str]):
cmdline_args=[
playbook,
"-i",
f"{REPO_ROOT}/ansible/hosts.yml",
f"{REPO_ROOT}/ansible/inventories/{env_str}/hosts.yml",
*extra_vars,
"-v",
],
+10 -1
View File
@@ -3,4 +3,13 @@ from enum import Enum
class ServiceStatus(str, Enum):
ACTIVE = "active"
DISABLED = "disabled"
DISABLED = "disabled"
class IOC_ENV(str, Enum):
PROD = "prod"
DEV = "dev"
def __str__(self) -> str:
return self.value
+15 -17
View File
@@ -1,6 +1,7 @@
import typer
from core.ansible import run_playbook
from core.enums import IOC_ENV
from core.models import ServiceRegistry
from core.utils import get_git_root
@@ -13,29 +14,25 @@ IOC_PLAYBOOK_INSTALL = ANSIBLE_PLAYBOOKS_DIR / "ioc-install.yml"
IOC_PLAYBOOK_RESTART = ANSIBLE_PLAYBOOKS_DIR / "ioc-restart.yml"
IOC_PLAYBOOK_START = ANSIBLE_PLAYBOOKS_DIR / "ioc-start.yml"
# TODO: make sure dev/prod works correctly for all commands
@ioc.command(no_args_is_help=True)
def install(
env: str = typer.Option(..., "--env"),
env: IOC_ENV = typer.Option(..., "--env"),
service_name_lower: str = typer.Option(..., "--service-name", "-s"),
branch_name: str | None = typer.Option(None, "--branch-name", "-b"),
):
env_var = f"agebd_env={env}"
if branch_name is None:
branch_name = f"feature/add-service-{service_name_lower}"
branch_var = f"branch_name={branch_name}"
service_name_var = f"service_name_lower={service_name_lower}"
run_playbook(playbook=str(IOC_PLAYBOOK_INSTALL), vars=[env_var, branch_var, service_name_var])
run_playbook(playbook=str(IOC_PLAYBOOK_INSTALL), env=env, vars=[branch_var, service_name_var])
@ioc.command(no_args_is_help=True)
def install_all(
env: str = typer.Option(..., "--env"),
env: IOC_ENV = typer.Option(..., "--env"),
):
env_var = f"agebd_env={env}"
registry = ServiceRegistry.read_from_config()
services = registry.get_services()
@@ -44,50 +41,51 @@ def install_all(
service_name_var = f"service_name_lower={service.name_lower}"
run_playbook(
playbook=str(IOC_PLAYBOOK_INSTALL), vars=[env_var, branch_var, service_name_var]
playbook=str(IOC_PLAYBOOK_INSTALL), env=env, vars=[branch_var, service_name_var]
)
@ioc.command(no_args_is_help=True)
def start(
env: IOC_ENV = typer.Option(..., "--env"),
ioc_port: int = typer.Option(..., "--port", "-p"),
):
ioc_port_var = f"ioc_port={ioc_port}"
run_playbook(playbook=str(IOC_PLAYBOOK_START), vars=[ioc_port_var])
run_playbook(playbook=str(IOC_PLAYBOOK_START), env=env, vars=[ioc_port_var])
@ioc.command()
def start_all():
def start_all(
env: IOC_ENV = typer.Option(..., "--env"),
):
registry = ServiceRegistry.read_from_config()
services = registry.get_services()
for service in services:
ioc_port_var = f"ioc_port={service.ioc_port}"
run_playbook(playbook=str(IOC_PLAYBOOK_START), vars=[ioc_port_var])
run_playbook(playbook=str(IOC_PLAYBOOK_START), env=env, vars=[ioc_port_var])
@ioc.command(no_args_is_help=True)
def restart(
env: str = typer.Option(..., "--env"),
env: IOC_ENV = typer.Option(..., "--env"),
service_name_lower: str = typer.Option(..., "--service-name", "-s"),
branch_name: str | None = typer.Option(None, "--branch-name", "-b"),
):
env_var = f"agebd_env={env}"
if branch_name is None:
branch_name = f"feature/add-service-{service_name_lower}"
branch_var = f"branch_name={branch_name}"
service_name_var = f"service_name_lower={service_name_lower}"
run_playbook(playbook=str(IOC_PLAYBOOK_RESTART), vars=[env_var, branch_var, service_name_var])
run_playbook(playbook=str(IOC_PLAYBOOK_RESTART), env=env, vars=[branch_var, service_name_var])
@ioc.command(no_args_is_help=True)
def restart_all(
env: str = typer.Option(..., "--env"),
env: IOC_ENV = typer.Option(..., "--env"),
):
env_var = f"agebd_env={env}"
registry = ServiceRegistry.read_from_config()
services = registry.get_services()
@@ -96,5 +94,5 @@ def restart_all(
service_name_var = f"service_name_lower={service.name_lower}"
run_playbook(
playbook=str(IOC_PLAYBOOK_RESTART), vars=[env_var, branch_var, service_name_var]
playbook=str(IOC_PLAYBOOK_RESTART), env=env, vars=[branch_var, service_name_var]
)
Generated
+65
View File
@@ -2,11 +2,35 @@ version = 1
revision = 3
requires-python = "==3.10.*"
[[package]]
name = "agebd"
version = "0.1.0"
source = { editable = "../packages/agebd" }
dependencies = [
{ name = "h5py" },
{ name = "typer" },
]
[package.metadata]
requires-dist = [
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "typer", specifier = ">=0.23.2" },
]
[package.metadata.requires-dev]
dev = [
{ name = "pyright", specifier = ">=1.1.410" },
{ name = "pytest", specifier = ">=8.4.2" },
{ name = "ruff", specifier = ">=0.15.19" },
{ name = "twine", specifier = ">=6.2.0" },
]
[[package]]
name = "agebd-cli"
version = "0.1.0"
source = { editable = "." }
dependencies = [
{ name = "agebd" },
{ name = "ansible" },
{ name = "ansible-runner" },
{ name = "copier" },
@@ -25,6 +49,7 @@ dev = [
[package.metadata]
requires-dist = [
{ name = "agebd", editable = "../packages/agebd" },
{ name = "ansible", specifier = ">=8.7.0" },
{ name = "ansible-runner", specifier = ">=2.4.3" },
{ name = "copier", specifier = ">=9.10.3" },
@@ -254,6 +279,24 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl", hash = "sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9", size = 212507, upload-time = "2026-05-06T04:01:23.799Z" },
]
[[package]]
name = "h5py"
version = "3.16.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "numpy" },
]
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
]
[[package]]
name = "iniconfig"
version = "2.3.0"
@@ -346,6 +389,28 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" },
]
[[package]]
name = "numpy"
version = "2.2.6"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" },
{ url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" },
{ url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" },
{ url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" },
{ url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" },
{ url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" },
{ url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" },
{ url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" },
{ url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" },
{ url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" },
{ url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" },
{ url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" },
{ url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" },
{ url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" },
]
[[package]]
name = "packaging"
version = "26.2"
+4
View File
@@ -14,7 +14,11 @@ class LogLevel(str, Enum):
ERROR = "error"
CRITICAL = "critical"
class AGEBD_ENV(str, Enum):
PROD = "prod"
DEV = "dev"
LOCAL = "local"
def __str__(self) -> str:
return self.value