--- name: wg_install kind: function lang: bash domain: infra version: "1.0.0" purity: impure signature: "wg_install() -> json" description: "Instala wireguard + wireguard-tools en Linux (debian/ubuntu/fedora/arch). Idempotente. Carga modulo kernel. Emite JSON con distro detectada y version instalada." tags: [wireguard, install, infra, mesh, deploy] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] params: [] output: "JSON {status, distro, version}. status=installed o already-present." tested: false tests: [] test_file_path: "" file_path: "bash/functions/infra/wg_install.sh" --- ## Ejemplo ```bash source bash/functions/infra/wg_install.sh wg_install # {"status":"installed","distro":"ubuntu","version":"wireguard-tools 1.0.20210914"} # Si ya está instalado: wg_install # {"status":"already-present","distro":"ubuntu","version":"wireguard-tools 1.0.20210914"} ``` ## Cuando usarla Cuando necesites asegurarte de que wireguard-tools está disponible en un host antes de configurar un peer o hub WireGuard. Úsala como paso previo en pipelines de bootstrapping de nodos mesh (flow wireguard). ## Gotchas - Requiere `sudo` con NOPASSWD para apt-get/dnf/pacman y para modprobe. El operador debe haberlo configurado antes. - `modprobe wireguard` puede fallar en kernels < 5.6 sin DKMS instalado (wireguard-dkms). La función lo trata como advertencia, no como error fatal — la instalación de las herramientas igual se completa. - En RHEL/CentOS instala `epel-release` automáticamente antes de wireguard-tools. - Distros no reconocidas en `/etc/os-release ID` producen exit 1 con mensaje de error explícito en stderr. - Los logs van siempre a stderr con prefijo `[wg_install]`; stdout es exclusivamente el JSON de resultado. ## Capability growth log