base-deployment-controller 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- base_deployment_controller/__init__.py +59 -0
- base_deployment_controller/builder.py +90 -0
- base_deployment_controller/models/__init__.py +33 -0
- base_deployment_controller/models/compose.py +11 -0
- base_deployment_controller/models/container.py +31 -0
- base_deployment_controller/models/deployment.py +57 -0
- base_deployment_controller/models/environment.py +42 -0
- base_deployment_controller/routers/__init__.py +7 -0
- base_deployment_controller/routers/container.py +398 -0
- base_deployment_controller/routers/deployment.py +281 -0
- base_deployment_controller/routers/environment.py +174 -0
- base_deployment_controller/services/__init__.py +5 -0
- base_deployment_controller/services/config.py +560 -0
- base_deployment_controller-0.1.0.dist-info/METADATA +184 -0
- base_deployment_controller-0.1.0.dist-info/RECORD +17 -0
- base_deployment_controller-0.1.0.dist-info/WHEEL +5 -0
- base_deployment_controller-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: base-deployment-controller
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: REST API to control the basic operations of a deployment
|
|
5
|
+
Author: Tknika
|
|
6
|
+
License: Creative Commons Atribución-NoComercial (CC BY-NC)
|
|
7
|
+
Classifier: Development Status :: 3 - Alpha
|
|
8
|
+
Classifier: Intended Audience :: Developers
|
|
9
|
+
Requires-Python: >=3.8
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
Requires-Dist: fastapi>=0.128.0
|
|
12
|
+
Requires-Dist: uvicorn[standard]>=0.40.0
|
|
13
|
+
Requires-Dist: python-dotenv>=1.2.1
|
|
14
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
15
|
+
Requires-Dist: websockets>=16.0
|
|
16
|
+
Requires-Dist: python-on-whales>=0.80.0
|
|
17
|
+
Provides-Extra: dev
|
|
18
|
+
Requires-Dist: pytest>=7.4.0; extra == "dev"
|
|
19
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
20
|
+
Requires-Dist: requests>=2.31.0; extra == "dev"
|
|
21
|
+
|
|
22
|
+
# Base Deployment Controller
|
|
23
|
+
|
|
24
|
+
REST API para la gestión básica de un deployment.
|
|
25
|
+
|
|
26
|
+
## Características
|
|
27
|
+
|
|
28
|
+
- **Gestión del deployment**: Inicia, detiene y borrar el deploy (`compose.yaml`)
|
|
29
|
+
- **Gestión de variables de entorno**: Lee configuración de `x-env-vars` en `compose.yaml` y permite actualizar valores en `.env`
|
|
30
|
+
- **Control de contenedores**: Inicia, detiene y reinicia contenedores del deploy
|
|
31
|
+
- **Logs en tiempo real**: WebSocket para streaming de logs de contenedores
|
|
32
|
+
- **Validación de tipos**: Valida automáticamente valores según schemas (regex, rangos, enums)
|
|
33
|
+
|
|
34
|
+
## Requisitos
|
|
35
|
+
|
|
36
|
+
- Python 3.8+
|
|
37
|
+
- Docker y Docker Compose
|
|
38
|
+
|
|
39
|
+
## Instalación
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Crear entorno virtual
|
|
43
|
+
python3 -m venv .venv
|
|
44
|
+
source .venv/bin/activate
|
|
45
|
+
|
|
46
|
+
# Instalar como librería
|
|
47
|
+
pip install base-deployment-controller
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Uso
|
|
51
|
+
|
|
52
|
+
### Iniciar el servidor (demo)
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Ejecutar la app demo desde la raíz del repo
|
|
56
|
+
python3 main.py
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
El servidor estará disponible en `http://localhost:8000`
|
|
60
|
+
|
|
61
|
+
### Uso como librería
|
|
62
|
+
|
|
63
|
+
#### Uso básico (factory)
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from base_deployment_controller import create_app
|
|
67
|
+
|
|
68
|
+
app = create_app(
|
|
69
|
+
compose_file="compose.yaml",
|
|
70
|
+
env_file=".env",
|
|
71
|
+
)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
#### Uso avanzado (builder + routers personalizados)
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
from fastapi import APIRouter
|
|
78
|
+
from base_deployment_controller import AppBuilder
|
|
79
|
+
|
|
80
|
+
custom_router = APIRouter(prefix="/custom")
|
|
81
|
+
|
|
82
|
+
builder = AppBuilder("compose.yaml", ".env")
|
|
83
|
+
app = builder.register_router(custom_router).build()
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### API Endpoints
|
|
87
|
+
|
|
88
|
+
#### GET /
|
|
89
|
+
Obtiene información sobre el deploy:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
curl http://localhost:8000/
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### POST /up|down|stop
|
|
96
|
+
Controla el deploy:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Levanta todos los servicio del deploy
|
|
100
|
+
curl -X POST http://localhost:8000/up
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### GET /envs
|
|
104
|
+
Obtiene todas las variables de entorno con sus valores actuales:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
curl http://localhost:8000/envs
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
#### PUT /envs
|
|
111
|
+
Actualiza variables de entorno. Usa `restart_services` (por defecto `true`) para controlar si se reinician los servicios afectados.
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Actualización múltiple
|
|
115
|
+
curl -X PUT http://localhost:8000/envs \
|
|
116
|
+
-H "Content-Type: application/json" \
|
|
117
|
+
-d '{"variables": {"MCC": "214", "MNC": "07"}, "restart_services": false}'
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
#### GET /containers
|
|
121
|
+
Lista el estado de todos los contenedores:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
curl http://localhost:8000/containers
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
#### POST /containers/{name}/start|stop|restart
|
|
128
|
+
Controla un contenedor específico:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Reiniciar el MME
|
|
132
|
+
curl -X POST http://localhost:8000/containers/mme/restart
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
#### WebSocket /containers/{container_name}/logs
|
|
136
|
+
Logs en tiempo real via WebSocket:
|
|
137
|
+
|
|
138
|
+
```javascript
|
|
139
|
+
const ws = new WebSocket('ws://localhost:8000/containers/mme/logs');
|
|
140
|
+
ws.onmessage = (event) => {
|
|
141
|
+
console.log(event.data);
|
|
142
|
+
};
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### GET /ping
|
|
146
|
+
Health check del servicio:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
curl http://localhost:8000/ping
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Documentación Interactiva
|
|
153
|
+
|
|
154
|
+
FastAPI genera automáticamente documentación interactiva:
|
|
155
|
+
|
|
156
|
+
- **Swagger UI**: http://localhost:8000/docs
|
|
157
|
+
- **ReDoc**: http://localhost:8000/redoc
|
|
158
|
+
|
|
159
|
+
## Arquitectura
|
|
160
|
+
|
|
161
|
+
### Configuración de Tres Niveles
|
|
162
|
+
|
|
163
|
+
1. **compose.yaml**: Define servicios y dependencias
|
|
164
|
+
2. **x-env-vars**: Schema maestro con validaciones
|
|
165
|
+
3. **.env**: Valores en tiempo de ejecución
|
|
166
|
+
|
|
167
|
+
## Validación de Tipos
|
|
168
|
+
|
|
169
|
+
Las variables se validan según el schema de `x-env-vars`:
|
|
170
|
+
|
|
171
|
+
- **String con regex**: `"string:0;^\d{3}$"` - MCC debe ser 3 dígitos
|
|
172
|
+
- **Integer con rango**: `"integer:0;2048"` - MAX_NUM_UE entre 0-2048
|
|
173
|
+
- **Enum**: `"enum:tun,tap"` - UPF_TUNTAP_MODE solo acepta tun o tap
|
|
174
|
+
|
|
175
|
+
## Seguridad
|
|
176
|
+
|
|
177
|
+
- Solo permite actualizar variables existentes en el schema
|
|
178
|
+
- No permite agregar nuevas variables
|
|
179
|
+
- No permite eliminar variables
|
|
180
|
+
- Valida todos los valores antes de escribir en `.env`
|
|
181
|
+
|
|
182
|
+
## Licencia
|
|
183
|
+
|
|
184
|
+
Este proyecto es parte del controlador de despliegue 5G de Tknika.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
base_deployment_controller/__init__.py,sha256=1mvqShjmMTmJTYF7PLWBNwXPTtk-0Qba2Q6cQRYGRRs,1722
|
|
2
|
+
base_deployment_controller/builder.py,sha256=VLwUTuIaeHdiMU1MZkVN4wo6NH2tsHLu6Ir-cWR2aOA,2938
|
|
3
|
+
base_deployment_controller/models/__init__.py,sha256=a_mKXUYVzyeMuy4fCdGsYs9YWXC4UicDlT449wsj3TA,839
|
|
4
|
+
base_deployment_controller/models/compose.py,sha256=BWkABpPjT70cRPKlHSqbnlAHSSUbLmxM67fHjNW844g,364
|
|
5
|
+
base_deployment_controller/models/container.py,sha256=5Wy1Vf3c_YsnJxMYzsRt982DEr1hY1_k18TCjSouuIo,1195
|
|
6
|
+
base_deployment_controller/models/deployment.py,sha256=LnayxI_975PPK2cjwJXhLnMHJU53a5JtDpboM2tpN4Q,1902
|
|
7
|
+
base_deployment_controller/models/environment.py,sha256=qFDti4aUqK_BuJQz-QHZ1LpnvS2ACh-LRwW7HtlGztc,1542
|
|
8
|
+
base_deployment_controller/routers/__init__.py,sha256=Oe96tG8Jcw1S6m40Di68DkCr3UbjSEruFikk9bocj4c,238
|
|
9
|
+
base_deployment_controller/routers/container.py,sha256=L2xYBVZf398DkmXr5Qu6U7Up2sYLY-DxS7ZOx5Xh50I,15433
|
|
10
|
+
base_deployment_controller/routers/deployment.py,sha256=7tOXkNrhRXbVFKUqBDmqp_rSojzqecAzU8yP1AqbNbo,9623
|
|
11
|
+
base_deployment_controller/routers/environment.py,sha256=3uq8WSYAz2cZOW4LLvPaVBBDITn6OfSU8v-Q2YUFjwQ,6439
|
|
12
|
+
base_deployment_controller/services/__init__.py,sha256=kiU1CafpZEhO2V0Z1YSv4SW7gi8gvhf7-cPHSh4ETJo,127
|
|
13
|
+
base_deployment_controller/services/config.py,sha256=jMJXrNvznNoCciFbb_kCQee6XMqV7ouVpo2ql6oIqaU,21165
|
|
14
|
+
base_deployment_controller-0.1.0.dist-info/METADATA,sha256=w9ufhsCAU7nmSe_x8l0DUVDeBDqadJDiXZDdDcwaLck,4483
|
|
15
|
+
base_deployment_controller-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
16
|
+
base_deployment_controller-0.1.0.dist-info/top_level.txt,sha256=L43ihN7K4QcA-cdy6KnHcBJOtI-zceJ9Zqh5z1kgia0,27
|
|
17
|
+
base_deployment_controller-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
base_deployment_controller
|