refactor: simplificar naming de nodos con auto-deducción #80

Merged
Numerica merged 26 commits from refactor-simplify-node-naming into master 2025-12-22 20:30:40 +00:00
Owner

Cambios principales:

  • Nueva variable 'nodo': nombre base (ej: marmite)
  • Renombrar variable antigua 'nodo' (FQDN) -> 'rap_dn'
  • Auto-deducir 'domains' desde nodo: [{{ nodo }}.abyaya.la]
  • Auto-deducir 'rap_dn' desde nodo: {{ nodo }}.comun
  • Extraer lógica normalización a roles/proxy/tasks/normalize_node.yml
  • Agregar defaults en roles/proxy/vars/main.yml

Sintaxis nueva (simplificada):

  • nodo: marmite
    force_https: yes

    Auto: domains: [marmite.abyaya.la], rap_dn: marmite.comun

Sintaxis FQDN externo:

  • nodo: kipu
    domains:
    • kipu.latina.red

    Auto: rap_dn: kipu.comun

Retrocompatibilidad:

  • service_name: antigua
    domains: [antigua.abyaya.la]
    rap_dn: antigua.comun

Beneficios:

  • DRY: Una sola variable define nombre
  • Menos errores de tipeo
  • Configuración más limpia
  • Retrocompatible con service_name
Cambios principales: - Nueva variable 'nodo': nombre base (ej: marmite) - Renombrar variable antigua 'nodo' (FQDN) -> 'rap_dn' - Auto-deducir 'domains' desde nodo: [{{ nodo }}.abyaya.la] - Auto-deducir 'rap_dn' desde nodo: {{ nodo }}.comun - Extraer lógica normalización a roles/proxy/tasks/normalize_node.yml - Agregar defaults en roles/proxy/vars/main.yml Sintaxis nueva (simplificada): - nodo: marmite force_https: yes # Auto: domains: [marmite.abyaya.la], rap_dn: marmite.comun Sintaxis FQDN externo: - nodo: kipu domains: - kipu.latina.red # Auto: rap_dn: kipu.comun Retrocompatibilidad: - service_name: antigua domains: [antigua.abyaya.la] rap_dn: antigua.comun Beneficios: - DRY: Una sola variable define nombre - Menos errores de tipeo - Configuración más limpia - Retrocompatible con service_name
Numerica added 1 commit 2025-11-27 13:23:12 +00:00
Cambios principales:
- Nueva variable 'nodo': nombre base (ej: marmite)
- Renombrar variable antigua 'nodo' (FQDN) -> 'rap_dn'
- Auto-deducir 'domains' desde nodo: [{{ nodo }}.abyaya.la]
- Auto-deducir 'rap_dn' desde nodo: {{ nodo }}.comun
- Extraer lógica normalización a roles/proxy/tasks/normalize_node.yml
- Agregar defaults en roles/proxy/vars/main.yml

Sintaxis nueva (simplificada):
  - nodo: marmite
    force_https: yes
    # Auto: domains: [marmite.abyaya.la], rap_dn: marmite.comun

Sintaxis FQDN externo:
  - nodo: kipu
    domains:
      - kipu.latina.red
    # Auto: rap_dn: kipu.comun

Retrocompatibilidad:
  - service_name: antigua
    domains: [antigua.abyaya.la]
    rap_dn: antigua.comun

Beneficios:
- DRY: Una sola variable define nombre
- Menos errores de tipeo
- Configuración más limpia
- Retrocompatible con service_name
Numerica added 2 commits 2025-11-27 13:25:39 +00:00
fauno approved these changes 2025-11-27 14:33:12 +00:00
fauno left a comment
Owner

entiendo que está bien, las preguntas nomás son para emprolijar a futuro

entiendo que está bien, las preguntas nomás son para emprolijar a futuro
@ -2,2 +2,3 @@
current_service: "{{ item }}"
service_name: "{{ item.service_name }}"
# Deducir service_name: usar 'nodo' si existe, sino 'service_name' (retrocompatibilidad)
service_name: "{{ item.nodo | default(item.service_name) }}"
Owner

acabo de entender que lo que vos haces con set_fact yo lo hago en el inventario :P

acabo de entender que lo que vos haces con `set_fact` yo lo hago en el inventario :P
@ -45,0 +43,4 @@
- set_fact:
matrix_loop: "{{ matrix_loop | default([]) | union([ domino_normalized ]) }}"
with_items: "{{ matrix }}"
when: "{{ (domino.domains is defined or domino.nodo is defined or domino.service_name is defined) }}"
Owner

domino es un typo que se arrastró por autocompletado?

`domino` es un typo que se arrastró por autocompletado?
Author
Owner

no. es mi manía de ponerles nombres no-standard a las variables para diferenciarlas mejor
podriamos estandarizarlas todas

no. es mi manía de ponerles nombres no-standard a las variables para diferenciarlas mejor podriamos estandarizarlas todas
@ -0,0 +3,4 @@
domino_normalized:
nodo: "{{ domino.nodo | default(domino.service_name) }}"
rap_dn: "{{ domino.rap_dn | default((domino.nodo | default(domino.service_name)) ~ '.comun') }}"
domains: "{{ domino.domains | default([(domino.nodo | default(domino.service_name)) ~ '.abyaya.la']) }}"
Owner

eventualmente haría que abyaya.la y comun sean variables

eventualmente haría que `abyaya.la` y `comun` sean variables
@ -0,0 +4,4 @@
nodo: "{{ domino.nodo | default(domino.service_name) }}"
rap_dn: "{{ domino.rap_dn | default((domino.nodo | default(domino.service_name)) ~ '.comun') }}"
domains: "{{ domino.domains | default([(domino.nodo | default(domino.service_name)) ~ '.abyaya.la']) }}"
force_https: "{{ domino.force_https | default(domains_default_force_https) }}"
Owner

nunca entendí por qué https es opcional

nunca entendí por qué https es opcional
Author
Owner

hay servicios que les jodés si les forzás https, como Icecast, donde los clientes de streaming en general no soportan https

hay servicios que les jodés si les forzás https, como Icecast, donde los clientes de streaming en general no soportan https
fauno marked this conversation as resolved
@ -20,3 +20,3 @@
proxy_ssl_name $ssl_server_name;
proxy_pass https://$comun_{{ vhost.nodo | replace(".", "") }};
proxy_pass https://$comun_{{ vhost.rap_dn | replace(".", "") }};
Owner

por que estabamos haciendo este replace? no puede ser otra variable con el nombre sanitizado para nginx asi no lo tenemos que repetir todo el rato?

por que estabamos haciendo este replace? no puede ser otra variable con el nombre sanitizado para nginx asi no lo tenemos que repetir todo el rato?
Numerica added 1 commit 2025-12-01 18:26:34 +00:00
Author
Owner

Aqui, que el dominio .abyaya.la quede en domains[0]

Aqui, que el dominio .abyaya.la quede en __domains[0]__
Numerica added 17 commits 2025-12-02 22:16:42 +00:00
debido a que para este hay que arreglar la obtencion de certificados de DNS externos,
es necesario en HTTP (80) pasar la variable  a proxy_ssl_name ya que  viene vacia y esto
genera el error 500 responde tlsv1 unrecognized name (alert 112)
roles/knsupdate/files/dns_extras
Añade soporte completo para usar dominios FQDN externos (ejemplo.com,
kipu.latina.red, etc.) además de subdominios .abyaya.la.

Cambios principales:
- Generación automática de subdominio .abyaya.la como alias
- Detección automática de TLDs compuestos (.com.ar, .co.uk, etc.)
- Actualización DNS multi-zona en Knot
- Procesamiento de múltiples dominios por servicio
- Certificados SSL para todos los dominios + wildcards

La detección de tipo de dominio (FQDN vs subdominio) es completamente
automática basada en el sufijo .abyaya.la.

Ver FQDN_AUTHORITATIVE.md para documentación completa.
y le saco el no a ssl para otra cosa
El uso de $host en lugar de $ssl_server_name no es correcto ya que:
- proxy_ssl_verify está deshabilitado, por lo que el SNI no importa
- $ssl_server_name es el valor correcto para SNI en proxies SSL
- $host causaba confusión innecesaria

Revierte a la configuración estándar y correcta.
bifurca de #issue42 en que ya estan parametrizadas zones y asi
Modifica normalize_node.yml para garantizar que el dominio .abyaya.la
siempre sea el primero en la lista de dominios, independientemente del
orden definido. Esto es crítico para certificados SSL y configuraciones
vhost que dependen de domains[0].
Numerica added 1 commit 2025-12-18 14:30:28 +00:00
Numerica added 2 commits 2025-12-18 15:12:16 +00:00
- Add main_zone_regex derived from main_zone with proper escaping
- Replace hardcoded abyaya.la references in proxy tasks
- Use main_zone and main_zone_regex for domain matching and construction
Numerica changed title from WIP: refactor: simplificar naming de nodos con auto-deducción to refactor: simplificar naming de nodos con auto-deducción 2025-12-18 15:13:23 +00:00
Numerica added 8 commits 2025-12-18 18:37:36 +00:00
The domain normalization logic (filtering main_zone domains, creating
default domain, and ordering) was duplicated in main.yml after already
being performed in normalize_node.yml. This removes the redundant
18-line block, keeping only the normalization in normalize_node.yml.
Fixes error when vhost.domains is empty by using vhost.service_name
for the stream configuration filename, which is always available and
more consistent with the stream template usage.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Numerica added 3 commits 2025-12-18 19:21:12 +00:00
Prevents error when vhost.roles is defined but empty by checking
array length before accessing index 0 in all conditional statements.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Prevents error when vhost.ports is defined but empty by checking
array length before rendering the stream template that accesses ports[0].

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Numerica added 1 commit 2025-12-18 19:30:10 +00:00
TODO: otra VPN / descubrir IP con ansible
Numerica added 2 commits 2025-12-18 20:24:42 +00:00
Separates the calculation of node_name and rap_dn into intermediate
variables to make the normalization more explicit and avoid issues
with nested defaults. This makes the code clearer and more robust
when handling elements with only service_name or only nodo defined.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Services with roles but without domains specified are infrastructure
services that deploy to destination servers (like knot/knsupdate,
vpn/rap). These don't need proxy vhosts. Services with roles AND
domains, or services without roles (proxy redirections) still get vhosts.

Adds skip_vhost flag during normalization to mark services that should
not generate vhosts, based on whether they have roles but no domains.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Numerica merged commit 872fdd6d43 into master 2025-12-22 20:30:40 +00:00
Sign in to join this conversation.
No description provided.