paramsx 2.2.1__tar.gz → 2.3.0__tar.gz
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.
- {paramsx-2.2.1 → paramsx-2.3.0}/CHANGELOG.md +33 -0
- {paramsx-2.2.1/paramsx.egg-info → paramsx-2.3.0}/PKG-INFO +67 -23
- {paramsx-2.2.1 → paramsx-2.3.0}/README.md +66 -22
- paramsx-2.3.0/paramsx/__init__.py +1 -0
- {paramsx-2.2.1 → paramsx-2.3.0}/paramsx/funcions.py +115 -9
- {paramsx-2.2.1 → paramsx-2.3.0}/paramsx/main.py +175 -81
- {paramsx-2.2.1 → paramsx-2.3.0}/paramsx/paramsx_config.py +20 -10
- {paramsx-2.2.1 → paramsx-2.3.0/paramsx.egg-info}/PKG-INFO +67 -23
- paramsx-2.2.1/paramsx/__init__.py +0 -1
- {paramsx-2.2.1 → paramsx-2.3.0}/LICENSE +0 -0
- {paramsx-2.2.1 → paramsx-2.3.0}/MANIFEST.in +0 -0
- {paramsx-2.2.1 → paramsx-2.3.0}/paramsx/text.py +0 -0
- {paramsx-2.2.1 → paramsx-2.3.0}/paramsx.egg-info/SOURCES.txt +0 -0
- {paramsx-2.2.1 → paramsx-2.3.0}/paramsx.egg-info/dependency_links.txt +0 -0
- {paramsx-2.2.1 → paramsx-2.3.0}/paramsx.egg-info/entry_points.txt +0 -0
- {paramsx-2.2.1 → paramsx-2.3.0}/paramsx.egg-info/requires.txt +0 -0
- {paramsx-2.2.1 → paramsx-2.3.0}/paramsx.egg-info/top_level.txt +0 -0
- {paramsx-2.2.1 → paramsx-2.3.0}/setup.cfg +0 -0
- {paramsx-2.2.1 → paramsx-2.3.0}/setup.py +0 -0
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.3.0
|
|
4
|
+
|
|
5
|
+
### Añadido
|
|
6
|
+
|
|
7
|
+
- **La descripción de los parámetros, editable como el valor.** El fichero exportado trae un campo `parameter_description` **debajo del nombre y antes del valor**: se lee de AWS, lo editas y al cargar se actualiza. Los cambios de descripción se detectan igual que los de valor y aparecen en la pantalla de confirmación como `Modificado (descripción)`. La opción 4 también la pide al crear un parámetro, entre la ruta y el valor.
|
|
8
|
+
- Los backups incluyen la descripción, así que un backup restaura también las descripciones.
|
|
9
|
+
- **Flag `forzar_securestring`** (por defecto `True`, el comportamiento de siempre): todo lo que sube ParamsX va cifrado como `SecureString`. Con `False` se respeta el tipo que ya tuviera el parámetro en AWS: al actualizar no se manda el tipo y AWS conserva el suyo (`Type` solo es obligatorio al crear). El fichero exportado trae además un campo `parameter_type` editable, por si quieres cambiar el tipo a propósito, y sus cambios se detectan como los del valor o la descripción. El tipo se lee de la misma llamada que el valor, así que no hace falta ningún permiso nuevo.
|
|
10
|
+
|
|
11
|
+
### Nota sobre el valor y la descripción
|
|
12
|
+
|
|
13
|
+
`put_parameter` con `Overwrite=True` reescribe la definición del parámetro, así que ParamsX **manda siempre la descripción que trae el fichero**, incluso cuando lo único que cambió fue el valor. Antes no se mandaba, y una descripción que ya existiera en AWS podía quedarse vacía al editar el valor.
|
|
14
|
+
|
|
15
|
+
### Nota sobre permisos
|
|
16
|
+
|
|
17
|
+
Leer las descripciones necesita **`ssm:DescribeParameters`**, porque no vienen en `GetParametersByPath` (son metadatos, no valores). Si tu rol no lo tiene, ParamsX te avisa al leer, el campo no aparece en el fichero y al cargar **no se toca** la descripción que haya en AWS. El resto sigue funcionando igual.
|
|
18
|
+
|
|
19
|
+
## 2.2.2
|
|
20
|
+
|
|
21
|
+
Un renombrado de la configuración, sin cambios de comportamiento. **Los nombres antiguos
|
|
22
|
+
se siguen aceptando**, así que no tienes que tocar tu fichero para actualizar.
|
|
23
|
+
|
|
24
|
+
### Cambiado
|
|
25
|
+
|
|
26
|
+
- **Un solo nombre para el concepto: `perfiles` / `perfil`.** El mismo concepto se llamaba de tres formas distintas: el diccionario era `naming`, la clave de cada entrada de `parameter_list` era `convencion` y la documentación decía "perfil". Explicárselo a alguien obligaba a traducir dos veces. Ahora:
|
|
27
|
+
|
|
28
|
+
| Antes | Ahora |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `naming = {...}` | `perfiles = {...}` |
|
|
31
|
+
| `{"path": "/rds", "convencion": "min"}` | `{"path": "/rds", "perfil": "min"}` |
|
|
32
|
+
| `convencion_nuevos = "min"` | `perfil_nuevos = "min"` |
|
|
33
|
+
|
|
34
|
+
- `paramsx configure` te dice qué nombres antiguos usas y cómo se llaman ahora, incluidas las entradas de `parameter_list`. Los viejos (`naming`, `convencion`, `convencion_nuevos` y el `abac` de la 2.0) se traducen al cargar, así que dentro del programa solo existe el nombre nuevo.
|
|
35
|
+
|
|
3
36
|
## 2.2.1
|
|
4
37
|
|
|
5
38
|
Solo comandos de terminal y documentación: no cambia nada de la lectura, la carga ni la
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: paramsx
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.0
|
|
4
4
|
Summary: Librería para gestionar y respaldar parámetros de AWS SSM de manera sencilla y eficiente.
|
|
5
5
|
Home-page: https://github.com/pistatxos/paramsx
|
|
6
6
|
Author: Mariox
|
|
@@ -24,7 +24,7 @@ ParamsX es una herramienta diseñada para gestionar y organizar parámetros de A
|
|
|
24
24
|
|
|
25
25
|
## ⚠ Breaking change en la versión 2.0.0
|
|
26
26
|
|
|
27
|
-
Si vienes de la 1.x tienes que **actualizar a mano tu `~/.xsoft/paramsx_config.py`**: `parameter_list` ya no es una lista de strings, ahora cada entrada es un diccionario
|
|
27
|
+
Si vienes de la 1.x tienes que **actualizar a mano tu `~/.xsoft/paramsx_config.py`**: `parameter_list` ya no es una lista de strings, ahora cada entrada es un diccionario que declara su perfil. La versión antigua **no es compatible** y ParamsX se niega a arrancar mostrando cómo migrarla. Detalle completo en el [CHANGELOG](CHANGELOG.md).
|
|
28
28
|
|
|
29
29
|
### Estructura Recomendada
|
|
30
30
|
La convención de naming es de 5 niveles, donde los últimos segmentos son opcionales según el caso:
|
|
@@ -70,7 +70,7 @@ Al ejecutar ```paramsx``` desde la terminal, accedes a un menú interactivo con
|
|
|
70
70
|
- Navega por la lista de parámetros configurada en tu archivo de configuración y selecciona cuál descargar.
|
|
71
71
|
- Elige el entorno deseado (por ejemplo, dev o prod).
|
|
72
72
|
- Archivos generados:
|
|
73
|
-
- parameters_dev.py o parameters_prod.py → Edita estos archivos para modificar, añadir o eliminar parámetros (valores y tags).
|
|
73
|
+
- parameters_dev.py o parameters_prod.py → Edita estos archivos para modificar, añadir o eliminar parámetros (descripciones, valores y tags).
|
|
74
74
|
- parameters_dev_backup.py → Respaldo automático del archivo descargado, incluidas las tags.
|
|
75
75
|
Los archivos se crean en la misma ruta desde donde ejecutas paramsx, evitando movernos innecesariamente entre carpetas.
|
|
76
76
|
- Si tu rol IAM no tiene permisos sobre la ruta configurada, verás un mensaje claro en lugar de una traza de boto3:
|
|
@@ -97,10 +97,11 @@ Esto te permitirá mantener respaldos seguros o realizar migraciones/reorganizac
|
|
|
97
97
|
|
|
98
98
|
4. Crear nuevo parámetro
|
|
99
99
|
- Crea un parámetro desde cero sin salir de la herramienta. Te pedirá, en este orden:
|
|
100
|
-
- La ruta **sin el entorno**, igual que la declaras en `parameter_list`: el perfil
|
|
100
|
+
- La ruta **sin el entorno**, igual que la declaras en `parameter_list`: el perfil se encarga de colocarlo. Verás en pantalla la ruta resultante en AWS antes de seguir.
|
|
101
|
+
- La descripción, opcional: para qué sirve el parámetro. Se guarda en AWS y luego se puede editar en el fichero exportado.
|
|
101
102
|
- El valor: texto plano o JSON en una línea (por ejemplo `{"host": "x", "user": "y", "pass": "z"}`), que se valida antes de continuar.
|
|
102
103
|
- Las tags obligatorias, si tienes `tags_activas = True`.
|
|
103
|
-
- El perfil que se usa es el que declares en `
|
|
104
|
+
- El perfil que se usa es el que declares en `perfil_nuevos`. Si tu perfil es de tipo `mixto`, escribe el `*` en la ruta para indicar dónde va el entorno.
|
|
104
105
|
- Antes de subirlo verás una pantalla de confirmación con la ruta, el valor y las tags. El parámetro se crea con `Overwrite=False`, así que nunca machaca uno existente.
|
|
105
106
|
- Tras crearlo aparecerá la próxima vez que leas la ruta correspondiente de tu `parameter_list`.
|
|
106
107
|
|
|
@@ -135,7 +136,7 @@ Ejemplo del contenido de paramsx_config.py:
|
|
|
135
136
|
```python
|
|
136
137
|
## Configuraciones ParamsX
|
|
137
138
|
|
|
138
|
-
# --- Perfiles
|
|
139
|
+
# --- Perfiles -------------------------------------------------------------
|
|
139
140
|
# Un perfil dice CÓMO se construye la ruta real en AWS a partir de la ruta que declaras
|
|
140
141
|
# en 'parameter_list' y del entorno que eliges en el menú. Los nombres son tuyos: define
|
|
141
142
|
# solo los que uses y llámalos como quieras. Un perfil tiene tres campos:
|
|
@@ -177,7 +178,7 @@ Ejemplo del contenido de paramsx_config.py:
|
|
|
177
178
|
# Combina los tres campos como necesites: no hay una lista cerrada de perfiles. En el
|
|
178
179
|
# README tienes más ejemplos.
|
|
179
180
|
|
|
180
|
-
|
|
181
|
+
perfiles = {
|
|
181
182
|
"min": {"posicion_entorno": "inicio", "case_entorno": "lower", "case_ruta": "lower"},
|
|
182
183
|
"max": {"posicion_entorno": "final", "case_entorno": "upper", "case_ruta": "ninguno"},
|
|
183
184
|
"mixto_max": {"posicion_entorno": "mixto", "case_entorno": "upper", "case_ruta": "ninguno"},
|
|
@@ -190,19 +191,19 @@ configuraciones = {
|
|
|
190
191
|
"region_name": "eu-south-2", # Cambiar por tu región de AWS
|
|
191
192
|
"entornos": ['dev', 'pre', 'prod'], # SIEMPRE en minúscula, es la lista canónica única
|
|
192
193
|
"parameter_list": [
|
|
193
|
-
{"path": "/common", "
|
|
194
|
-
{"path": "/rds", "
|
|
195
|
-
{"path": "/EMAIL", "
|
|
196
|
-
{"path": "/API/STA", "
|
|
194
|
+
{"path": "/common", "perfil": "min"}, # -> /dev/common
|
|
195
|
+
{"path": "/rds", "perfil": "min"}, # -> /dev/rds
|
|
196
|
+
{"path": "/EMAIL", "perfil": "max"}, # -> /EMAIL/DEV
|
|
197
|
+
{"path": "/API/STA", "perfil": "max"}, # -> /API/STA/DEV
|
|
197
198
|
# Con 'mixto' acotas por debajo del entorno: esto lee solo stan_ai, en vez de
|
|
198
199
|
# todo lo que cuelga de /API/MULTIAPI/DEV
|
|
199
|
-
{"path": "/API/MULTIAPI/*/stan_ai", "
|
|
200
|
+
{"path": "/API/MULTIAPI/*/stan_ai", "perfil": "mixto_max"}, # -> /API/MULTIAPI/DEV/stan_ai
|
|
200
201
|
]
|
|
201
202
|
}
|
|
202
203
|
|
|
203
|
-
# Perfil
|
|
204
|
-
# Si no lo defines, se usa el
|
|
205
|
-
|
|
204
|
+
# Perfil que se usa al crear un parámetro nuevo (opción 4 del menú).
|
|
205
|
+
# Si no lo defines, se usa el primero de 'perfiles'.
|
|
206
|
+
perfil_nuevos = "min"
|
|
206
207
|
|
|
207
208
|
# ¿El nombre del fichero exportado incluye la ruta leída?
|
|
208
209
|
# False -> parameters_dev.py (comportamiento de siempre)
|
|
@@ -212,6 +213,16 @@ convencion_nuevos = "min"
|
|
|
212
213
|
# segunda lectura te machaque el fichero de la primera.
|
|
213
214
|
fichero_por_ruta = False
|
|
214
215
|
|
|
216
|
+
# ¿Todo lo que sube ParamsX va cifrado como SecureString?
|
|
217
|
+
# True (por defecto) -> sí, siempre. Es lo recomendable: los parámetros de una cuenta
|
|
218
|
+
# suelen tener secretos, y así no depende de acordarse.
|
|
219
|
+
# False -> se respeta el tipo que ya tuviera el parámetro en AWS (String, StringList o
|
|
220
|
+
# SecureString): al actualizar no se manda el tipo, así que AWS conserva el suyo.
|
|
221
|
+
# En este modo el fichero exportado trae además un campo 'parameter_type' que
|
|
222
|
+
# puedes editar si quieres cambiarlo a propósito. Los parámetros que crees con
|
|
223
|
+
# la opción 4 se siguen creando como SecureString.
|
|
224
|
+
forzar_securestring = True
|
|
225
|
+
|
|
215
226
|
|
|
216
227
|
## Configuraciones Tags
|
|
217
228
|
|
|
@@ -244,9 +255,9 @@ tags_obligatorias = [
|
|
|
244
255
|
```
|
|
245
256
|
Nota: Si el archivo paramsx_config.py ya existe, no será sobrescrito durante la instalación para proteger las configuraciones personalizadas.
|
|
246
257
|
|
|
247
|
-
### Los perfiles
|
|
258
|
+
### Los perfiles
|
|
248
259
|
|
|
249
|
-
Cada organización nombra sus parámetros a su manera, así que ParamsX no impone ninguna convención: **tú defines los perfiles que uses en el diccionario `
|
|
260
|
+
Cada organización nombra sus parámetros a su manera, así que ParamsX no impone ninguna convención: **tú defines los perfiles que uses en el diccionario `perfiles` y les pones el nombre que quieras**. Cada entrada de `parameter_list` declara con qué perfil se construye su ruta completa, con la clave `perfil`. Los tres campos de un perfil y sus valores están explicados en el propio fichero de configuración, ahí arriba.
|
|
250
261
|
|
|
251
262
|
**No hay una lista cerrada de perfiles.** Los tres campos se combinan libremente, así que la plantilla no intenta traértelos todos: define los dos o tres que use tu organización y olvídate del resto. `min` y `max` vienen predefinidos porque son los que ParamsX traía antes de que los perfiles fueran configurables.
|
|
252
263
|
|
|
@@ -266,15 +277,47 @@ En el nombre van el entorno, la ruta y el perfil, porque dos entradas pueden com
|
|
|
266
277
|
|
|
267
278
|
| Entrada | Fichero |
|
|
268
279
|
|---|---|
|
|
269
|
-
| `{"path": "/API/STA", "
|
|
270
|
-
| `{"path": "/API/*/STA", "
|
|
280
|
+
| `{"path": "/API/STA", "perfil": "max"}` | `parameters_dev__API_STA__max.py` |
|
|
281
|
+
| `{"path": "/API/*/STA", "perfil": "mixto_max"}` | `parameters_dev__API_env_STA__mixto_max.py` |
|
|
282
|
+
|
|
283
|
+
### La descripción de los parámetros
|
|
284
|
+
|
|
285
|
+
El fichero exportado trae un campo `parameter_description` **debajo del nombre y antes del valor**. Se lee de AWS, se edita como cualquier otro campo y se aplica al cargar:
|
|
286
|
+
|
|
287
|
+
```python
|
|
288
|
+
parametros = [
|
|
289
|
+
{'parameter_name': '/dev/api/sta/token',
|
|
290
|
+
'parameter_description': "Token JWT de la API, rota cada 90 dias",
|
|
291
|
+
'parameter_value': """abc123"""},
|
|
292
|
+
]
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Dos cosas que conviene saber:
|
|
296
|
+
|
|
297
|
+
- **Hace falta el permiso `ssm:DescribeParameters`.** La descripción no viaja en `GetParametersByPath` como el valor: es un metadato y se pide con `DescribeParameters`. Si tu rol no lo tiene, ParamsX te avisa, el campo **no aparece** en el fichero y al cargar no se toca la descripción que haya en AWS.
|
|
298
|
+
- **Al actualizar un parámetro, AWS reescribe su definición entera.** Por eso ParamsX manda siempre la descripción del fichero cuando cambia el valor, aunque no la hayas tocado: si no la mandara, se perdería. Y como no existe una API para cambiar solo la descripción, editarla crea una versión nueva del parámetro igual que cambiar el valor.
|
|
299
|
+
|
|
300
|
+
Un cambio de descripción se ve en la pantalla de confirmación como `Modificado (descripción)`, y si cambias las dos cosas, `Modificado (valor | descripción)`.
|
|
301
|
+
|
|
302
|
+
### Cifrado: `forzar_securestring`
|
|
303
|
+
|
|
304
|
+
ParamsX sube todo como **SecureString** por defecto, y así se recomienda dejarlo: los parámetros de una cuenta acaban teniendo secretos, y con esto no depende de que nadie se acuerde.
|
|
305
|
+
|
|
306
|
+
| `forzar_securestring` | Qué hace |
|
|
307
|
+
|---|---|
|
|
308
|
+
| `True` (por defecto) | Todo lo que se sube va cifrado como `SecureString`, sea del tipo que sea en AWS. |
|
|
309
|
+
| `False` | Se respeta el tipo que ya tuviera el parámetro (`String`, `StringList` o `SecureString`): al actualizar no se manda el tipo, y AWS conserva el suyo. El fichero exportado trae además un campo `parameter_type` que puedes editar si quieres cambiarlo a propósito, y ese cambio cuenta como uno más: verás `Modificado (tipo: SecureString)`. |
|
|
310
|
+
|
|
311
|
+
Los parámetros que creas con la opción 4 se crean siempre como `SecureString`, en los dos modos.
|
|
312
|
+
|
|
313
|
+
El tipo se lee de la misma llamada que el valor, así que **no hace falta ningún permiso extra** para esto (a diferencia de la descripción).
|
|
271
314
|
|
|
272
315
|
### Cómo acotar tu parameter_list (recomendación)
|
|
273
316
|
|
|
274
317
|
`parameter_list` es solo tu vista de trabajo: **la seguridad real la impone IAM, no este fichero**. La recomendación de uso es:
|
|
275
318
|
|
|
276
|
-
- **Admins**: pueden configurar rutas raíz amplias, por ejemplo `{"path": "/rds", "
|
|
277
|
-
- **Usuarios normales**: conviene acotar la ruta a lo que su rol IAM tiene realmente autorizado, por ejemplo `{"path": "/rds/cee-dev/api", "
|
|
319
|
+
- **Admins**: pueden configurar rutas raíz amplias, por ejemplo `{"path": "/rds", "perfil": "min"}` → `/dev/rds`.
|
|
320
|
+
- **Usuarios normales**: conviene acotar la ruta a lo que su rol IAM tiene realmente autorizado, por ejemplo `{"path": "/rds/cee-dev/api", "perfil": "min"}` → `/dev/rds/cee-dev/api`.
|
|
278
321
|
|
|
279
322
|
Si configuras una ruta más amplia que tus permisos, no pasa nada grave: ParamsX te avisará con un mensaje claro de acceso denegado en vez de una traza de boto3. Pero afinar la ruta te ahorra el error.
|
|
280
323
|
|
|
@@ -300,6 +343,7 @@ Formato del fichero exportado con `tags_activas = True`:
|
|
|
300
343
|
```python
|
|
301
344
|
parametros = [
|
|
302
345
|
{'parameter_name': '/dev/email/users',
|
|
346
|
+
'parameter_description': "Buzon que recibe los avisos de altas",
|
|
303
347
|
'parameter_value': """agpetrovici@stanalytics.es""",
|
|
304
348
|
'tagApplication': "",
|
|
305
349
|
'tagEnvironment': "",
|
|
@@ -383,7 +427,7 @@ El programa mostrará un menú donde Podrás:
|
|
|
383
427
|
- Crear un parámetro nuevo.
|
|
384
428
|
|
|
385
429
|
### Leer Parámetros:
|
|
386
|
-
1. Selecciona la opción "Leer parámetros" en el menú. La lista muestra cada ruta con su perfil
|
|
430
|
+
1. Selecciona la opción "Leer parámetros" en el menú. La lista muestra cada ruta con su perfil, por ejemplo `/rds [min]` o `/API/STA [max]`.
|
|
387
431
|
2. Elige el prefijo y el entorno que deseas consultar.
|
|
388
432
|
3. Los parámetros serán descargados y guardados en archivos como:
|
|
389
433
|
- parameters_dev.py
|
|
@@ -404,7 +448,7 @@ El programa mostrará un menú donde Podrás:
|
|
|
404
448
|
|
|
405
449
|
### Crear un parámetro nuevo:
|
|
406
450
|
1. Selecciona la opción "Crear nuevo parámetro" y elige el entorno.
|
|
407
|
-
2. Escribe la ruta **sin el entorno**, como en tu `parameter_list`: ParamsX le aplica el perfil de `
|
|
451
|
+
2. Escribe la ruta **sin el entorno**, como en tu `parameter_list`: ParamsX le aplica el perfil de `perfil_nuevos` y te enseña la ruta resultante en AWS para que la confirmes.
|
|
408
452
|
3. Escribe el valor: texto plano o JSON en una línea.
|
|
409
453
|
4. Rellena las tags obligatorias (si `tags_activas = True`). `Environment` viene precargada con el entorno elegido. Con `obligatorias_vacias = True` puedes dejar alguna en blanco pulsando Enter: esas no se crearán en AWS.
|
|
410
454
|
5. Confirma en la pantalla de resumen. Si es un parámetro de RDS y falta su contraparte (común o privado), verás el aviso de correlación de naming ahí mismo.
|
|
@@ -4,7 +4,7 @@ ParamsX es una herramienta diseñada para gestionar y organizar parámetros de A
|
|
|
4
4
|
|
|
5
5
|
## ⚠ Breaking change en la versión 2.0.0
|
|
6
6
|
|
|
7
|
-
Si vienes de la 1.x tienes que **actualizar a mano tu `~/.xsoft/paramsx_config.py`**: `parameter_list` ya no es una lista de strings, ahora cada entrada es un diccionario
|
|
7
|
+
Si vienes de la 1.x tienes que **actualizar a mano tu `~/.xsoft/paramsx_config.py`**: `parameter_list` ya no es una lista de strings, ahora cada entrada es un diccionario que declara su perfil. La versión antigua **no es compatible** y ParamsX se niega a arrancar mostrando cómo migrarla. Detalle completo en el [CHANGELOG](CHANGELOG.md).
|
|
8
8
|
|
|
9
9
|
### Estructura Recomendada
|
|
10
10
|
La convención de naming es de 5 niveles, donde los últimos segmentos son opcionales según el caso:
|
|
@@ -50,7 +50,7 @@ Al ejecutar ```paramsx``` desde la terminal, accedes a un menú interactivo con
|
|
|
50
50
|
- Navega por la lista de parámetros configurada en tu archivo de configuración y selecciona cuál descargar.
|
|
51
51
|
- Elige el entorno deseado (por ejemplo, dev o prod).
|
|
52
52
|
- Archivos generados:
|
|
53
|
-
- parameters_dev.py o parameters_prod.py → Edita estos archivos para modificar, añadir o eliminar parámetros (valores y tags).
|
|
53
|
+
- parameters_dev.py o parameters_prod.py → Edita estos archivos para modificar, añadir o eliminar parámetros (descripciones, valores y tags).
|
|
54
54
|
- parameters_dev_backup.py → Respaldo automático del archivo descargado, incluidas las tags.
|
|
55
55
|
Los archivos se crean en la misma ruta desde donde ejecutas paramsx, evitando movernos innecesariamente entre carpetas.
|
|
56
56
|
- Si tu rol IAM no tiene permisos sobre la ruta configurada, verás un mensaje claro en lugar de una traza de boto3:
|
|
@@ -77,10 +77,11 @@ Esto te permitirá mantener respaldos seguros o realizar migraciones/reorganizac
|
|
|
77
77
|
|
|
78
78
|
4. Crear nuevo parámetro
|
|
79
79
|
- Crea un parámetro desde cero sin salir de la herramienta. Te pedirá, en este orden:
|
|
80
|
-
- La ruta **sin el entorno**, igual que la declaras en `parameter_list`: el perfil
|
|
80
|
+
- La ruta **sin el entorno**, igual que la declaras en `parameter_list`: el perfil se encarga de colocarlo. Verás en pantalla la ruta resultante en AWS antes de seguir.
|
|
81
|
+
- La descripción, opcional: para qué sirve el parámetro. Se guarda en AWS y luego se puede editar en el fichero exportado.
|
|
81
82
|
- El valor: texto plano o JSON en una línea (por ejemplo `{"host": "x", "user": "y", "pass": "z"}`), que se valida antes de continuar.
|
|
82
83
|
- Las tags obligatorias, si tienes `tags_activas = True`.
|
|
83
|
-
- El perfil que se usa es el que declares en `
|
|
84
|
+
- El perfil que se usa es el que declares en `perfil_nuevos`. Si tu perfil es de tipo `mixto`, escribe el `*` en la ruta para indicar dónde va el entorno.
|
|
84
85
|
- Antes de subirlo verás una pantalla de confirmación con la ruta, el valor y las tags. El parámetro se crea con `Overwrite=False`, así que nunca machaca uno existente.
|
|
85
86
|
- Tras crearlo aparecerá la próxima vez que leas la ruta correspondiente de tu `parameter_list`.
|
|
86
87
|
|
|
@@ -115,7 +116,7 @@ Ejemplo del contenido de paramsx_config.py:
|
|
|
115
116
|
```python
|
|
116
117
|
## Configuraciones ParamsX
|
|
117
118
|
|
|
118
|
-
# --- Perfiles
|
|
119
|
+
# --- Perfiles -------------------------------------------------------------
|
|
119
120
|
# Un perfil dice CÓMO se construye la ruta real en AWS a partir de la ruta que declaras
|
|
120
121
|
# en 'parameter_list' y del entorno que eliges en el menú. Los nombres son tuyos: define
|
|
121
122
|
# solo los que uses y llámalos como quieras. Un perfil tiene tres campos:
|
|
@@ -157,7 +158,7 @@ Ejemplo del contenido de paramsx_config.py:
|
|
|
157
158
|
# Combina los tres campos como necesites: no hay una lista cerrada de perfiles. En el
|
|
158
159
|
# README tienes más ejemplos.
|
|
159
160
|
|
|
160
|
-
|
|
161
|
+
perfiles = {
|
|
161
162
|
"min": {"posicion_entorno": "inicio", "case_entorno": "lower", "case_ruta": "lower"},
|
|
162
163
|
"max": {"posicion_entorno": "final", "case_entorno": "upper", "case_ruta": "ninguno"},
|
|
163
164
|
"mixto_max": {"posicion_entorno": "mixto", "case_entorno": "upper", "case_ruta": "ninguno"},
|
|
@@ -170,19 +171,19 @@ configuraciones = {
|
|
|
170
171
|
"region_name": "eu-south-2", # Cambiar por tu región de AWS
|
|
171
172
|
"entornos": ['dev', 'pre', 'prod'], # SIEMPRE en minúscula, es la lista canónica única
|
|
172
173
|
"parameter_list": [
|
|
173
|
-
{"path": "/common", "
|
|
174
|
-
{"path": "/rds", "
|
|
175
|
-
{"path": "/EMAIL", "
|
|
176
|
-
{"path": "/API/STA", "
|
|
174
|
+
{"path": "/common", "perfil": "min"}, # -> /dev/common
|
|
175
|
+
{"path": "/rds", "perfil": "min"}, # -> /dev/rds
|
|
176
|
+
{"path": "/EMAIL", "perfil": "max"}, # -> /EMAIL/DEV
|
|
177
|
+
{"path": "/API/STA", "perfil": "max"}, # -> /API/STA/DEV
|
|
177
178
|
# Con 'mixto' acotas por debajo del entorno: esto lee solo stan_ai, en vez de
|
|
178
179
|
# todo lo que cuelga de /API/MULTIAPI/DEV
|
|
179
|
-
{"path": "/API/MULTIAPI/*/stan_ai", "
|
|
180
|
+
{"path": "/API/MULTIAPI/*/stan_ai", "perfil": "mixto_max"}, # -> /API/MULTIAPI/DEV/stan_ai
|
|
180
181
|
]
|
|
181
182
|
}
|
|
182
183
|
|
|
183
|
-
# Perfil
|
|
184
|
-
# Si no lo defines, se usa el
|
|
185
|
-
|
|
184
|
+
# Perfil que se usa al crear un parámetro nuevo (opción 4 del menú).
|
|
185
|
+
# Si no lo defines, se usa el primero de 'perfiles'.
|
|
186
|
+
perfil_nuevos = "min"
|
|
186
187
|
|
|
187
188
|
# ¿El nombre del fichero exportado incluye la ruta leída?
|
|
188
189
|
# False -> parameters_dev.py (comportamiento de siempre)
|
|
@@ -192,6 +193,16 @@ convencion_nuevos = "min"
|
|
|
192
193
|
# segunda lectura te machaque el fichero de la primera.
|
|
193
194
|
fichero_por_ruta = False
|
|
194
195
|
|
|
196
|
+
# ¿Todo lo que sube ParamsX va cifrado como SecureString?
|
|
197
|
+
# True (por defecto) -> sí, siempre. Es lo recomendable: los parámetros de una cuenta
|
|
198
|
+
# suelen tener secretos, y así no depende de acordarse.
|
|
199
|
+
# False -> se respeta el tipo que ya tuviera el parámetro en AWS (String, StringList o
|
|
200
|
+
# SecureString): al actualizar no se manda el tipo, así que AWS conserva el suyo.
|
|
201
|
+
# En este modo el fichero exportado trae además un campo 'parameter_type' que
|
|
202
|
+
# puedes editar si quieres cambiarlo a propósito. Los parámetros que crees con
|
|
203
|
+
# la opción 4 se siguen creando como SecureString.
|
|
204
|
+
forzar_securestring = True
|
|
205
|
+
|
|
195
206
|
|
|
196
207
|
## Configuraciones Tags
|
|
197
208
|
|
|
@@ -224,9 +235,9 @@ tags_obligatorias = [
|
|
|
224
235
|
```
|
|
225
236
|
Nota: Si el archivo paramsx_config.py ya existe, no será sobrescrito durante la instalación para proteger las configuraciones personalizadas.
|
|
226
237
|
|
|
227
|
-
### Los perfiles
|
|
238
|
+
### Los perfiles
|
|
228
239
|
|
|
229
|
-
Cada organización nombra sus parámetros a su manera, así que ParamsX no impone ninguna convención: **tú defines los perfiles que uses en el diccionario `
|
|
240
|
+
Cada organización nombra sus parámetros a su manera, así que ParamsX no impone ninguna convención: **tú defines los perfiles que uses en el diccionario `perfiles` y les pones el nombre que quieras**. Cada entrada de `parameter_list` declara con qué perfil se construye su ruta completa, con la clave `perfil`. Los tres campos de un perfil y sus valores están explicados en el propio fichero de configuración, ahí arriba.
|
|
230
241
|
|
|
231
242
|
**No hay una lista cerrada de perfiles.** Los tres campos se combinan libremente, así que la plantilla no intenta traértelos todos: define los dos o tres que use tu organización y olvídate del resto. `min` y `max` vienen predefinidos porque son los que ParamsX traía antes de que los perfiles fueran configurables.
|
|
232
243
|
|
|
@@ -246,15 +257,47 @@ En el nombre van el entorno, la ruta y el perfil, porque dos entradas pueden com
|
|
|
246
257
|
|
|
247
258
|
| Entrada | Fichero |
|
|
248
259
|
|---|---|
|
|
249
|
-
| `{"path": "/API/STA", "
|
|
250
|
-
| `{"path": "/API/*/STA", "
|
|
260
|
+
| `{"path": "/API/STA", "perfil": "max"}` | `parameters_dev__API_STA__max.py` |
|
|
261
|
+
| `{"path": "/API/*/STA", "perfil": "mixto_max"}` | `parameters_dev__API_env_STA__mixto_max.py` |
|
|
262
|
+
|
|
263
|
+
### La descripción de los parámetros
|
|
264
|
+
|
|
265
|
+
El fichero exportado trae un campo `parameter_description` **debajo del nombre y antes del valor**. Se lee de AWS, se edita como cualquier otro campo y se aplica al cargar:
|
|
266
|
+
|
|
267
|
+
```python
|
|
268
|
+
parametros = [
|
|
269
|
+
{'parameter_name': '/dev/api/sta/token',
|
|
270
|
+
'parameter_description': "Token JWT de la API, rota cada 90 dias",
|
|
271
|
+
'parameter_value': """abc123"""},
|
|
272
|
+
]
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Dos cosas que conviene saber:
|
|
276
|
+
|
|
277
|
+
- **Hace falta el permiso `ssm:DescribeParameters`.** La descripción no viaja en `GetParametersByPath` como el valor: es un metadato y se pide con `DescribeParameters`. Si tu rol no lo tiene, ParamsX te avisa, el campo **no aparece** en el fichero y al cargar no se toca la descripción que haya en AWS.
|
|
278
|
+
- **Al actualizar un parámetro, AWS reescribe su definición entera.** Por eso ParamsX manda siempre la descripción del fichero cuando cambia el valor, aunque no la hayas tocado: si no la mandara, se perdería. Y como no existe una API para cambiar solo la descripción, editarla crea una versión nueva del parámetro igual que cambiar el valor.
|
|
279
|
+
|
|
280
|
+
Un cambio de descripción se ve en la pantalla de confirmación como `Modificado (descripción)`, y si cambias las dos cosas, `Modificado (valor | descripción)`.
|
|
281
|
+
|
|
282
|
+
### Cifrado: `forzar_securestring`
|
|
283
|
+
|
|
284
|
+
ParamsX sube todo como **SecureString** por defecto, y así se recomienda dejarlo: los parámetros de una cuenta acaban teniendo secretos, y con esto no depende de que nadie se acuerde.
|
|
285
|
+
|
|
286
|
+
| `forzar_securestring` | Qué hace |
|
|
287
|
+
|---|---|
|
|
288
|
+
| `True` (por defecto) | Todo lo que se sube va cifrado como `SecureString`, sea del tipo que sea en AWS. |
|
|
289
|
+
| `False` | Se respeta el tipo que ya tuviera el parámetro (`String`, `StringList` o `SecureString`): al actualizar no se manda el tipo, y AWS conserva el suyo. El fichero exportado trae además un campo `parameter_type` que puedes editar si quieres cambiarlo a propósito, y ese cambio cuenta como uno más: verás `Modificado (tipo: SecureString)`. |
|
|
290
|
+
|
|
291
|
+
Los parámetros que creas con la opción 4 se crean siempre como `SecureString`, en los dos modos.
|
|
292
|
+
|
|
293
|
+
El tipo se lee de la misma llamada que el valor, así que **no hace falta ningún permiso extra** para esto (a diferencia de la descripción).
|
|
251
294
|
|
|
252
295
|
### Cómo acotar tu parameter_list (recomendación)
|
|
253
296
|
|
|
254
297
|
`parameter_list` es solo tu vista de trabajo: **la seguridad real la impone IAM, no este fichero**. La recomendación de uso es:
|
|
255
298
|
|
|
256
|
-
- **Admins**: pueden configurar rutas raíz amplias, por ejemplo `{"path": "/rds", "
|
|
257
|
-
- **Usuarios normales**: conviene acotar la ruta a lo que su rol IAM tiene realmente autorizado, por ejemplo `{"path": "/rds/cee-dev/api", "
|
|
299
|
+
- **Admins**: pueden configurar rutas raíz amplias, por ejemplo `{"path": "/rds", "perfil": "min"}` → `/dev/rds`.
|
|
300
|
+
- **Usuarios normales**: conviene acotar la ruta a lo que su rol IAM tiene realmente autorizado, por ejemplo `{"path": "/rds/cee-dev/api", "perfil": "min"}` → `/dev/rds/cee-dev/api`.
|
|
258
301
|
|
|
259
302
|
Si configuras una ruta más amplia que tus permisos, no pasa nada grave: ParamsX te avisará con un mensaje claro de acceso denegado en vez de una traza de boto3. Pero afinar la ruta te ahorra el error.
|
|
260
303
|
|
|
@@ -280,6 +323,7 @@ Formato del fichero exportado con `tags_activas = True`:
|
|
|
280
323
|
```python
|
|
281
324
|
parametros = [
|
|
282
325
|
{'parameter_name': '/dev/email/users',
|
|
326
|
+
'parameter_description': "Buzon que recibe los avisos de altas",
|
|
283
327
|
'parameter_value': """agpetrovici@stanalytics.es""",
|
|
284
328
|
'tagApplication': "",
|
|
285
329
|
'tagEnvironment': "",
|
|
@@ -363,7 +407,7 @@ El programa mostrará un menú donde Podrás:
|
|
|
363
407
|
- Crear un parámetro nuevo.
|
|
364
408
|
|
|
365
409
|
### Leer Parámetros:
|
|
366
|
-
1. Selecciona la opción "Leer parámetros" en el menú. La lista muestra cada ruta con su perfil
|
|
410
|
+
1. Selecciona la opción "Leer parámetros" en el menú. La lista muestra cada ruta con su perfil, por ejemplo `/rds [min]` o `/API/STA [max]`.
|
|
367
411
|
2. Elige el prefijo y el entorno que deseas consultar.
|
|
368
412
|
3. Los parámetros serán descargados y guardados en archivos como:
|
|
369
413
|
- parameters_dev.py
|
|
@@ -384,7 +428,7 @@ El programa mostrará un menú donde Podrás:
|
|
|
384
428
|
|
|
385
429
|
### Crear un parámetro nuevo:
|
|
386
430
|
1. Selecciona la opción "Crear nuevo parámetro" y elige el entorno.
|
|
387
|
-
2. Escribe la ruta **sin el entorno**, como en tu `parameter_list`: ParamsX le aplica el perfil de `
|
|
431
|
+
2. Escribe la ruta **sin el entorno**, como en tu `parameter_list`: ParamsX le aplica el perfil de `perfil_nuevos` y te enseña la ruta resultante en AWS para que la confirmes.
|
|
388
432
|
3. Escribe el valor: texto plano o JSON en una línea.
|
|
389
433
|
4. Rellena las tags obligatorias (si `tags_activas = True`). `Environment` viene precargada con el entorno elegido. Con `obligatorias_vacias = True` puedes dejar alguna en blanco pulsando Enter: esas no se crearán en AWS.
|
|
390
434
|
5. Confirma en la pantalla de resumen. Si es un parámetro de RDS y falta su contraparte (común o privado), verás el aviso de correlación de naming ahí mismo.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.3.0"
|