Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
eb2ebf0
fix(cors): make CORS origin configurable via CORS_ORIGIN_REGEX env va…
pparage Mar 19, 2026
edfb6be
feat(ws): add WebSocket endpoint for real-time VM status streaming
pparage Mar 19, 2026
183748e
fix(ws): read Proxmox credentials from inventory, not query params
pparage Mar 19, 2026
f3621a5
test: add smoke tests and golden route reference as safety net (#53, …
pparage Mar 19, 2026
2cc3947
refactor: add VaultManager class replacing global state (#54)
pparage Mar 19, 2026
ff85436
refactor: add centralized config module (#53, #54)
pparage Mar 19, 2026
c60aa88
refactor: add clean runner and extractor in app/core/ (#53, #54)
pparage Mar 19, 2026
346b543
refactor: extract exception handlers to app/core/exceptions (#54)
pparage Mar 19, 2026
0d5725b
fix: replace broken venv.logger import with proper logging (#54)
pparage Mar 19, 2026
9ea935d
refactor: consolidate 52 schema files into domain-grouped modules (#53)
pparage Mar 19, 2026
8415198
refactor: consolidate 86 route files into 10 domain modules (#53)
pparage Mar 19, 2026
dd62295
refactor: rewrite main.py with application factory pattern (#54)
pparage Mar 19, 2026
cf35bbc
chore: remove old nested files replaced by consolidated modules (#53)
pparage Mar 19, 2026
0dd358c
refactor: make start.sh portable with .env support (#54)
pparage Mar 19, 2026
0b1622a
refactor: replace print statements with structured logging (#54)
pparage Mar 19, 2026
6fc23df
feat(docker): add Dockerfile and docker-compose for containerized dep…
pparage Mar 19, 2026
1142d75
docs: comprehensive README with setup, architecture, and API guide (#52)
pparage Mar 19, 2026
700af4e
docs: add Sphinx-style docstrings to all modules (#52)
pparage Mar 19, 2026
119c2f6
format
t0kubetsu Mar 23, 2026
2d99e7a
switch to slim from 3.12
t0kubetsu Mar 23, 2026
a086980
fix: resolve pydantic v2 deprecation warnings in vm schemas
t0kubetsu Mar 23, 2026
685109a
docs: add implementation plan for PR #62 README and test coverage
pparage Mar 23, 2026
9dd8e42
fix: resolve CodeQL findings — unused imports, import *, empty except
pparage Mar 23, 2026
94387d8
fix: remove unused List import from bundles and storage schemas
pparage Mar 24, 2026
fed43dc
merge: reconcile local CodeQL fixes with remote formatting and pydant…
pparage Mar 24, 2026
b12d537
test: add unit tests for utility modules, runner internals, and WebSo…
pparage Mar 24, 2026
f7d7a11
test: add integration tests for debug and VM route handlers
pparage Mar 24, 2026
be954f6
test: add response schema validation tests
pparage Mar 24, 2026
fb8e3c8
docs: expand README with WebSocket API, Docker details, logging, and …
pparage Mar 24, 2026
0cb0e9b
test: add unit tests for text_cleaner, vm_id_resolver, and bundle val…
pparage Mar 24, 2026
f927c18
format
t0kubetsu Mar 24, 2026
da91fa7
test(tags): add unit tests for vm_set_tag route and tag format conver…
pparage Mar 25, 2026
124b88d
test(realtime): add WebSocket tag tests and list_usage field coverage
pparage Mar 25, 2026
b9d3d8f
refactor(docker): clean up production image and split dev dependencies
pparage Mar 26, 2026
f927491
Merge pull request #63 from range42/feature/deployer-enhancements
pparage Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.git
.gitignore
.env
__pycache__
*.pyc
.venv
venv
*.egg-info
.pytest_cache
docs/
curl_utils/
tests/
*.md
!requirements.txt
!requirements.yml
18 changes: 18 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# .env.example — Copy to .env and fill in values
# Required
PROJECT_ROOT_DIR= # Path to this project root
VAULT_PASSWORD_FILE= # Path to vault password file
# OR
# VAULT_PASSWORD= # Vault password string (alternative to file)

# Playbook sources
API_BACKEND_WWWAPP_PLAYBOOKS_DIR= # Local playbooks directory (usually same as PROJECT_ROOT_DIR)
API_BACKEND_PUBLIC_PLAYBOOKS_DIR= # External playbooks repo path
API_BACKEND_INVENTORY_DIR= # Ansible inventory directory
API_BACKEND_VAULT_FILE= # Vault-encrypted variables file

# Optional
CORS_ORIGIN_REGEX= # Custom CORS regex (default: localhost only)
HOST=0.0.0.0 # Server bind address
PORT=8000 # Server port
DEBUG=false # Enable debug mode
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,12 @@ out/
*.log
logs/

# misc
# misc
*.swp
*.swo
*.tmp
*.bak

# claude
CLAUDE.md

37 changes: 37 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
FROM python:3.12-slim

# Install system deps for ansible and ssh
RUN apt-get update && apt-get install -y --no-install-recommends \
openssh-client \
git \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Install Python deps
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Install Ansible collections
COPY requirements.yml .
RUN ansible-galaxy collection install -r requirements.yml -p /usr/share/ansible/collections

# Copy application
COPY app/ app/
COPY playbooks/ playbooks/
COPY inventory/ inventory/

# Set env defaults
ENV PROJECT_ROOT_DIR=/app
ENV API_BACKEND_WWWAPP_PLAYBOOKS_DIR=/app/
ENV API_BACKEND_INVENTORY_DIR=/app/inventory/
ENV HOST=0.0.0.0
ENV PORT=8000
ENV PYTHONPATH=/app

EXPOSE 8000

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD python -c "import httpx; httpx.get('http://localhost:8000/docs/openapi.json').raise_for_status()"

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--log-level", "info"]
Loading
Loading