From d6debcd07db9379fbfdd4f5057fa1eeedebad010 Mon Sep 17 00:00:00 2001 From: Lucy Macartney Date: Fri, 2 Oct 2026 09:49:52 +0100 Subject: [PATCH 1/2] Translate deploy pages into Spanish --- .../current/deploy/options.md | 119 +++++ .../current/deploy/portability-v3.md | 447 ++++++++++++++++++ .../current/deploy/portability-versions.md | 116 +++++ .../current/deploy/portability.md | 197 ++++++++ .../current/deploy/requirements.md | 170 +++++++ 5 files changed, 1049 insertions(+) create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/deploy/options.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/deploy/portability-v3.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/deploy/portability-versions.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/deploy/portability.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/deploy/requirements.md diff --git a/i18n/es/docusaurus-plugin-content-docs/current/deploy/options.md b/i18n/es/docusaurus-plugin-content-docs/current/deploy/options.md new file mode 100644 index 00000000000..5b1bbb3ed72 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/deploy/options.md @@ -0,0 +1,119 @@ +--- +title: Planificación +translation_source_hash: 0bf6b304d3c23534195b5a7bdc18065b53aec01c +translation_review_status: machine +--- + +## Introducción {#introduction} + +Puedes usar OpenFn como un servicio en la nube seguro, estable y escalable, o +desplegarlo localmente, con opciones administradas y no administradas. Sea cual +sea el camino que elijas, puedes configurar OpenFn para que ningún dato sensible +se guarde fuera de las fronteras de tu país. + +:::success Portabilidad + +Gracias a la [especificación de portabilidad](/deploy/portability.md) de OpenFn +y a sus herramientas de despliegue de código abierto, puedes pasar de una de +estas opciones a otra en cualquier momento. Nos comprometemos a que no dependas +de ningún proveedor (**no vendor lock-in**). + +::: + +| Opción | Nube gratuita | OpenFn Cloud | Dedicada | Hazlo tú mismo (DIY) | +| :-------------------------: | :-------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| Descripción | Empieza hoy mismo en OpenFn.org con proyectos de pequeña escala | Aumenta o reduce la escala y paga solo lo que necesitas | Una instalación de OpenFn dedicada y sin restricciones en cualquier parte del mundo, en nuestros servidores o en los tuyos | Despliega y administra tus propias soluciones con OpenFn | +| Licencia | Gratis para siempre, con límites de uso | **SaaS** ([planes](https://www.openfn.org/pricing)); contacta a enterprise@openfn.org para acuerdos personalizados o con factura | **SDaaS** incluye como servicio el despliegue, el mantenimiento, los parches de seguridad, las actualizaciones y la resolución de problemas; contacta a enterprise@openfn.org | La licencia LGPLv3 te permite usarlo libremente en cualquier solución cerrada o de código abierto, pero todas las obras _derivadas_ tienen que ser de código abierto | +| Ubicación | Infraestructura en la nube **global** y segura | Infraestructura en la nube **global** y segura | Infraestructura **local (en el país)** o **global** | Donde quieras | +| Despliegue | **Haz clic para empezar** en [OpenFn.org](https://www.openfn.org/signup) | **Haz clic para empezar** en [OpenFn.org](https://www.openfn.org/signup) | **Contacta a** enterprise@openfn.org | Lee esta página de la documentación y visita nuestro [GitHub](https://www.github.com/OpenFn) | +| Instalación y configuración | **Tú eliges**: configurarlo por tu cuenta, con un implementador certificado o con el equipo de OpenFn.org | **Tú eliges**: configurarlo por tu cuenta, con un implementador certificado o con el equipo de OpenFn.org | **Tú eliges**: configurarlo por tu cuenta, con un implementador certificado o con el equipo de OpenFn.org | **Tú eliges**: configurarlo por tu cuenta, con un implementador certificado o con el equipo de OpenFn.org | +| Soporte | Da y recibe soporte a través de la [comunidad](https://community.openfn.org) | Varios niveles a través de support@openfn.org | Varios niveles a través de support@openfn.org | Da y recibe soporte a través de la [comunidad](https://community.openfn.org) | + +## Ejemplo de plan de despliegue local {#sample-local-deployment-plan} + +:::info Esto es solo un ejemplo + +Tus requisitos serán distintos, pero este es un ejemplo de plan para lograr un +despliegue local a gran escala y con datos muy sensibles. + +::: + +Si estás considerando una implementación de OpenFn a gran escala o con datos muy +sensibles en servidores locales o administrados por el gobierno, podrías: + +1. **Ejecutar una prueba de concepto, un prototipo o una solución en producción + por tiempo limitado** con el servicio en la nube mientras determinas si se + ajusta a tus necesidades y qué valor aporta. (Es una forma más segura, más + barata y más rápida de demostrar el valor y la viabilidad de la solución en + sí). +2. Mientras se ejecuta la primera fase, **evaluar el valor y empezar los + preparativos**: + 1. Evalúa el **valor de la solución** en sí: ¿resuelve los problemas que + esperabas? + 2. Evalúa tus **requisitos de residencia de datos**: ¿necesitas ejecutar esta + solución en el país? + 3. Evalúa la **capacidad de DevOps** de tu equipo: ¿cómo van otros + despliegues locales de bienes públicos digitales (DPG)? + 4. Evalúa la infraestructura de cómputo, almacenamiento y redes de tu país: + ¿qué opciones\* hay disponibles para servidores y conectividad de red? + 5. Determina si lo mejor para tu ministerio es una solución en la nube de + **"persistencia cero"** o una solución **desplegada localmente**: con los + datos anteriores, haz un análisis de costo-beneficio de ambas opciones. +3. Trabajar con OpenFn.org o con un socio certificado para **practicar el + despliegue**, la migración, la reversión, el reinicio, las copias de + seguridad, etc. +4. Con las herramientas de portabilidad de OpenFn, **ejecutar una copia local** + de tu solución alojada en la nube para evaluar si tu despliegue local está + listo. +5. Establecer con OpenFn un **protocolo de conmutación por error** para "pasar a + la nube" en el caso de los sistemas críticos. + 1. ¿Con qué frecuencia se debería respaldar la configuración de la + implementación (no los datos sensibles) en la nube alojada por OpenFn.org? + 2. ¿A qué credenciales o entornos de prueba debería tener acceso la copia de + seguridad en la nube? + 3. Establece un plan para cambiar entre la nube y el despliegue local. +6. Establecer un **contrato de soporte** con proveedores locales certificados + por OpenFn o con el equipo principal de OpenFn para que te ayuden a mantener + el despliegue local si surgen problemas. +7. **Pasar por completo a tu despliegue local** y mantener la capacidad de dar + soporte a tu solución o de volver a desplegarla en otros servidores en la + nube o locales. +8. **Supervisar y ajustar tu estrategia** cuando haga falta, a medida que + evolucionan los requisitos de uso y de soberanía de datos de tu país. + +\*Visita la página [Requisitos](/deploy/requirements.md) para obtener más +información sobre las especificaciones de servidor recomendadas. + +## Pasar de la nube a un despliegue local (v1 o v2) {#moving-from-cloud-to-local-v1-or-v2} + +Si planeas una implementación autoalojada, te recomendamos desarrollar y probar +la solución inicial en el SaaS de OpenFn (v1 o v2, quizás en un plan gratuito) y +luego exportarla para usarla en Lightning (v2). + +Así, el implementador puede concentrarse en resolver los requisitos de negocio y +técnicos de la automatización antes de asumir los costos del despliegue. +Concéntrate en la solución, no en el despliegue. Después, cuando hayas hecho el +piloto, hayas demostrado su valor y estés listo para escalarla, puedes migrar tu +solución de OpenFn a un despliegue local de Lightning. + +### Recorrido de un usuario de OpenFn desplegado localmente {#a-user-journey-for-locally-deployed-openfn} + +1. Crea y prueba tus workflows en [OpenFn.org](https://www.openfn.org). +2. Exporta tu proyecto de OpenFn _como código_ con el botón "export" o con la + CLI de despliegue. +3. Despliega tu instancia local de OpenFn/Lightning. +4. Importa tu proyecto (del paso 2) a tu instancia local de OpenFn/Lightning con + la CLI de despliegue. +5. Vuelve a configurar tus credenciales (los secretos de las credenciales _no_ + se incluyen en la exportación). +6. Prueba tu proyecto desplegado localmente. + +## Guías técnicas {#technical-guidelines} + +Para ver la documentación detallada sobre el despliegue, visita la +[página de documentación para desarrolladores](https://openfn.github.io/lightning/readme.html) +de Lightning y presta especial atención a estas secciones: + +1. [Getting Started](https://openfn.github.io/lightning/readme.html#getting-started) +2. [Deployment Considerations](https://openfn.github.io/lightning/deployment.html) +3. [Benchmarking](https://openfn.github.io/lightning/benchmarking.md.html#run-benchmarking-tests-against-the-demo-webhook) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/deploy/portability-v3.md b/i18n/es/docusaurus-plugin-content-docs/current/deploy/portability-v3.md new file mode 100644 index 00000000000..0b7e481bcec --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/deploy/portability-v3.md @@ -0,0 +1,447 @@ +--- +title: Portabilidad v3 (versión anterior) +translation_source_hash: 8c147d873969c77e43aa0cfd51b29ee7ae97a0ec +translation_review_status: machine +--- + +La especificación de portabilidad permite representar proyectos de workflows +completos "como código", permite a los usuarios moverse entre distintas formas +de despliegue (como en la nube, local o alojado) y propone una forma de definir +reglas de automatización de workflows y de integración de sistemas aplicable a +nivel global, que se podría usar en todos los motores de workflows y plataformas +de integración del sector. + +Nada en la especificación _tiene_ que ser exclusivo de OpenFn ni de ninguno de +nuestros productos. Imaginamos un futuro en el que el software creado con +Lightning, el OpenFn Integration Toolkit y herramientas de integración o de +workflows completamente nuevas y distintas puedan adoptar esta especificación. + +Si te interesa contribuir a la especificación, contacta a OpenFn a través del +[foro de la comunidad](https://community.openfn.org), escríbenos o sugiere +cambios enviando una pull request aquí. + +:::warning + +Esta es la versión anterior de la especificación de portabilidad de OpenFn. + +Para ver la versión más reciente, consulta [Portabilidad](portability) + +::: + +## Proyectos "como código" {#projects-as-code} + +Los proyectos completos (grupos de workflows con sus triggers, edges, +credenciales y jobs) se pueden representar como código. + +Esto mejora la experiencia de desarrollo en OpenFn porque (a) permite crear y +probar workflows localmente; (b) permite el control de versiones de los +proyectos y un registro de auditoría de sus cambios; y (c) permite a los +usuarios trasladar proyectos existentes entre distintas instancias (es decir, +despliegues) de Lightning. + +### Estructura de directorios {#directory-structure} + +Muchos usuarios guardan sus proyectos de OpenFn en repositorios de git, y esta +es una estructura habitual: + +``` +myProject/ +├── workflow-a/ +│ ├── job-1.js +│ ├── job-2.js +│ └── job-3.js +├── workflow-b/ +│ └── job-4.js +├── project.yaml +├── projectState.json +└── config.json +``` + +:::info Estructura de directorios + +Hay 3 estructuras de directorios que se suelen usar en los proyectos de OpenFn: +estándar, producción y prueba, y monorepo. + +::: + +### La **_especificación_** del proyecto {#the-project-spec} + +La especificación del proyecto (o "spec") se suele guardar en un archivo +`project.yaml`. Aunque la mayor parte de la especificación se escribe +directamente en el archivo, muchos desarrolladores prefieren guardar el cuerpo +de sus jobs en archivos `.js` aparte y hacer referencia a ellos con una ruta +relativa. + +```yaml +name: openhie-project +description: Some sample +credentials: + jane-smith@test.com-HAPI-FHIR: + owner: jane-smith@test.com + name: HAPI FHIR +workflows: + OpenHIE-Workflow: + name: OpenHIE Workflow + jobs: + FHIR-standard-Data-with-change: + name: FHIR-standard-Data-with-change + adaptor: '@openfn/language-http@latest' + enabled: true + credential: null + body: + path: ./jobs/my-fancy-script.js + + Send-to-OpenHIM-to-route-to-SHR: + name: Send-to-OpenHIM-to-route-to-SHR + adaptor: '@openfn/language-http@latest' + enabled: true + credential: jane-smith@test.com-HAPI-FHIR + body: | + fn(state => { + console.log("hello github integration") + return state + }); + + Notify-CHW-upload-successful: + name: Notify-CHW-upload-successful + adaptor: '@openfn/language-http@latest' + enabled: true + credential: null + body: fn(state => state); + + Notify-CHW-upload-failed: + name: Notify-CHW-upload-failed + adaptor: '@openfn/language-http@latest' + enabled: true + credential: null + body: + path: ./jobs/notify-failure.js + + triggers: + webhook: + type: webhook + edges: + webhook->FHIR-standard-Data-with-change: + source_trigger: webhook + target_job: FHIR-standard-Data-with-change + condition: always + FHIR-standard-Data-with-change->Send-to-OpenHIM-to-route-to-SHR: + source_job: FHIR-standard-Data-with-change + target_job: Send-to-OpenHIM-to-route-to-SHR + condition: on_job_success + Send-to-OpenHIM-to-route-to-SHR->Notify-CHW-upload-successful: + source_job: Send-to-OpenHIM-to-route-to-SHR + target_job: Notify-CHW-upload-successful + condition: on_job_success + Send-to-OpenHIM-to-route-to-SHR->Notify-CHW-upload-failed: + source_job: Send-to-OpenHIM-to-route-to-SHR + target_job: Notify-CHW-upload-failed + condition: on_job_failure +``` + +En esta especificación puedes ver las distintas formas de definir el cuerpo de +un job: + +1. Cuerpo en línea: se usa en los jobs `FHIR-standard-Data-with-change` y + `Send-to-OpenHIM-to-route-to-SHR`. El cuerpo se escribe directamente en el + archivo YAML. + +2. Referencia a un archivo externo: se usa en los jobs + `Notify-CHW-upload-successful` y `Notify-CHW-upload-failed`. El cuerpo se + guarda en archivos aparte, a los que se hace referencia con la clave path. + Así se puede organizar mejor la lógica de los jobs complejos. + +Al usar rutas de archivo: + +- Las rutas son relativas a la ubicación del archivo `project.yaml`. +- Asegúrate de que los archivos a los que haces referencia existen y contienen + código válido para el cuerpo de un job. +- Este método es especialmente útil para jobs complejos o cuando quieres + reutilizar el cuerpo de un job en distintos proyectos. + +### El **_estado_** del proyecto {#the-project-state} + +El estado del proyecto es una representación de un proyecto concreto tal como +está _en una instancia específica de Lightning_. Se suele guardar como +`projectState.json` y contiene los UUID de los recursos en un despliegue +concreto de Lightning. + +```json +{ + "id": "8deff39d-8189-4bd7-9dc7-f9f08e7f2c60", + "name": "openhie-project", + "description": null, + "inserted_at": "2023-08-25T08:57:31", + "updated_at": "2023-08-25T08:57:31", + "scheduled_deletion": null, + "requires_mfa": false, + "project_credentials": { + "jane-smith@test.com-HAPI-FHIR": { + "id": "25f48989-d349-4eb8-99c3-923ebba5b116", + "name": "HAPI FHIR", + "owner": "jane-smith@test.com" + } + }, + "workflows": { + "OpenHIE-Workflow": { + "id": "27ae2937-0959-48b8-a597-b1646aae8c14", + "name": "OpenHIE Workflow", + "jobs": { + "Transform-data-to-FHIR-standard": { + "id": "e44f65bb-5038-4e17-8d93-b63cbe95254a", + "delete": true + }, + "Send-to-OpenHIM-to-route-to-SHR": { + "id": "977b87ff-f347-42b5-832f-6ae2ca726f32", + "name": "Send-to-OpenHIM-to-route-to-SHR", + "adaptor": "@openfn/language-http@latest", + "body": "fn(state => state);\n", + "enabled": true + }, + "Notify-CHW-upload-successful": { + "id": "86b743a3-fd00-4629-b9fb-d5f38fb56d0b", + "name": "Notify-CHW-upload-successful", + "adaptor": "@openfn/language-http@latest", + "body": "fn(state => state);\n", + "enabled": true + }, + "Notify-CHW-upload-failed": { + "id": "be85df30-0abd-4f8e-be17-501f67e18b8d", + "name": "Notify-CHW-upload-failed", + "adaptor": "@openfn/language-http@latest", + "body": "fn(state => state);\n", + "enabled": true + }, + "FHIR-standard-Data": { + "id": "55016dda-42e3-4ee1-8a9c-24e3f23d42f1", + "delete": true + }, + "FHIR-standard-Data-with-change": { + "id": "28dd0846-a6ae-40c0-8ab4-3e0a6b487afe", + "name": "FHIR-standard-Data-with-change", + "adaptor": "@openfn/language-http@latest", + "body": "fn(state => state);\n", + "enabled": true + } + }, + "triggers": { + "webhook": { + "id": "530cde0b-0de4-4f68-8834-0a4356a2fe53", + "type": "webhook" + } + }, + "edges": { + "webhook->Transform-data-to-FHIR-standard": { + "id": "b2c7407b-0ae9-4ca5-9d6b-ee624976fa54", + "delete": true + }, + "Transform-data-to-FHIR-standard->Send-to-OpenHIM-to-route-to-SHR": { + "id": "d22ed6f4-26a2-4c85-b261-cc110a6851e6", + "delete": true + }, + "Send-to-OpenHIM-to-route-to-SHR->Notify-CHW-upload-successful": { + "id": "26c12f7f-7806-4008-87cd-6747998f95f4", + "condition": "on_job_success", + "source_job_id": "977b87ff-f347-42b5-832f-6ae2ca726f32", + "source_trigger_id": null, + "target_job_id": "86b743a3-fd00-4629-b9fb-d5f38fb56d0b" + }, + "Send-to-OpenHIM-to-route-to-SHR->Notify-CHW-upload-failed": { + "id": "0630ac96-4f67-4de7-8c3d-0bf3f89f80d9", + "condition": "on_job_failure", + "source_job_id": "977b87ff-f347-42b5-832f-6ae2ca726f32", + "source_trigger_id": null, + "target_job_id": "be85df30-0abd-4f8e-be17-501f67e18b8d" + }, + "webhook->FHIR-standard-Data": { + "id": "5ce3a8ed-b9eb-464a-a2cd-ba55adc393c2", + "delete": true + }, + "FHIR-standard-Data->Send-to-OpenHIM-to-route-to-SHR": { + "id": "5f459cd9-2882-4a61-a2cc-ec45e58d4837", + "delete": true + }, + "webhook->FHIR-standard-Data-with-change": { + "id": "75e7f7d8-274b-410d-9600-730bbd535229", + "condition": "always", + "source_job_id": null, + "source_trigger_id": "530cde0b-0de4-4f68-8834-0a4356a2fe53", + "target_job_id": "28dd0846-a6ae-40c0-8ab4-3e0a6b487afe" + }, + "FHIR-standard-Data-with-change->Send-to-OpenHIM-to-route-to-SHR": { + "id": "1e5ba385-2c49-4241-8cd2-042c99a810ec", + "condition": "on_job_success", + "source_job_id": "28dd0846-a6ae-40c0-8ab4-3e0a6b487afe", + "source_trigger_id": null, + "target_job_id": "977b87ff-f347-42b5-832f-6ae2ca726f32" + } + } + } + } +} +``` + +## Usar la CLI para interactuar con proyectos {#using-the-cli-interact-with-projects} + +La especificación y el estado de un proyecto se pueden usar con distintos fines. +Por ejemplo, puedes generar el estado y la especificación como copias de +seguridad del proyecto, o generar estos archivos y usarlos para auditorías y +registros. La [CLI](https://github.com/OpenFn/kit/tree/main/packages/cli) de +OpenFn incluye comandos para descargar la configuración de un proyecto desde un +servidor de Lightning en ejecución, y para desplegar o enviar cambios a +proyectos existentes en un servidor de Lightning. Para saber más sobre el +control de versiones automatizado con pull y deploy, consulta nuestra +documentación sobre [control de versiones](/manage-projects/link-to-gh.md). + +:::info ¿Todavía no tienes la CLI? + +Instálala ejecutando `npm install -g @openfn/cli` + +::: + +Antes de usar la CLI, configúrala con variables de entorno: + +``` +OPENFN_ENDPOINT=https://app.openfn.org +OPENFN_API_KEY=yourSecretApiToken +``` + +O con un archivo `config.json`: + +```json +{ + // Required, can be overridden or set with `OPENFN_API_KEY` env var + "apiKey": "***", + + // Optional: can be set using the -p, defaults to project.yaml + "specPath": "project.yaml", + + // Optional: can be set using -s, defaults to .state.json + "statePath": ".state.json", + + // Optional: defaults to OpenFn.org's API, can be overridden or set with + // `OPENFN_ENDPOINT` env var + "endpoint": "https://app.openfn.org" +} +``` + +Puedes encontrar más detalles sobre la CLI +[aquí](https://github.com/OpenFn/kit/tree/main/packages/cli#basic-usage). + +### `openfn pull` para generar la especificación y el estado {#openfn-pull-to-generate-spec--state} + +Para generar los archivos de especificación y de estado de un proyecto +existente, usa: + +```sh +openfn pull {YOUR-PROJECT-UUID} -c ./config.json +``` + +Este comando guarda (o sobrescribe) un archivo de especificación y uno de estado +del proyecto según la ruta que hayas definido en tu configuración. + +### `openfn deploy` para crear proyectos nuevos {#openfn-deploy-to-create-new-projects} + +Para desplegar un proyecto nuevo en una instancia de Lightning a partir de un +archivo de especificación (sin un archivo de estado), usa: + +```sh +openfn deploy -c config.json +``` + +### `openfn deploy` para actualizar proyectos existentes {#openfn-deploy-to-update-existing-projects} + +Con un estado de proyecto válido definido en tu `config.json`, el mismo comando +`openfn deploy` envía tus cambios según la diferencia entre la especificación de +tu proyecto y lo que hay en el servidor. + +```sh +openfn deploy -c config.json +Checking https://demo.openfn.org/api/provision/4adf2644-ed4e-4f97-a24c-ab35b3cb1efa for existing project. +Project found. +[CLI] ♦ Changes: + { + workflows: [ + { + jobs: [ + { +- body: "fn(state => {\n console.log(\"ok\")\n return state\n});" ++ body: "fn(state => {\n console.log(\"some changes here!\")\n return state\n});\n" + } + ... + ... + ... + ] + } + ] + } + +? Deploy? yes +[CLI] ♦ Deployed. +``` + +## Obtener ayuda con la CLI {#getting-help-with-the-cli} + +El paquete de la CLI incluye una ayuda integrada (`help`). Si agregas `--help` a +un comando, como `openfn deploy --help`, verás un mensaje de ayuda que describe +el comando y las opciones disponibles al usarlo. Mira este ejemplo: + +```sh +openfn deploy --help +openfn deploy + +Deploy a project's config to a remote Lightning instance + +Options: + --version Show version number [boolean] + --help Show help [boolean] + -c, --config, --config-path The location of your config file [default: "./.config.json"] + --no-confirm Skip confirmation prompts (e.g. 'Are you sure?') [boolean] + --describe Downloads the project yaml from the specified instance [boolean] + -l, --log Set the log level [string] + --log-json Output all logs as JSON objects [boolean] + -p, --project-path The location of your project.yaml file [string] + -s, --state-path Path to the state file +``` + +## Resolución de problemas {#troubleshooting} + +Esta sección explica cómo resolver algunos errores que podrías encontrar al usar +pull o deploy de OpenFn en tus proyectos. + +### Extraneous Workflow ID {#extraneous-workflow-id} + +#### Descripción {#description} + +Este error ocurre cuando ejecutas `openfn deploy` y los ID de los workflows de +tu projectSpec no coinciden con los de tu instancia de OpenFn. Cuando esto pasa, +el error se muestra en un objeto de error como este: + +``` +[CLI] ✘ Failed to deploy project openfn-data-buffers-prototype: +{ + "errors": { + "workflows": { + "1-ingest-messages": { + "base": [ + "extraneous parameters: workflow_id" + ] + }, + "2-calculate-indicators": { + "base": [ + "extraneous parameters: workflow_id" + ] + } + } + } +``` + +#### Solución {#solution} + +Ejecuta `openfn pull` para actualizar tu instancia local y mantener los ID +sincronizados, incorpora tus cambios y vuelve a ejecutar `openfn deploy`. + +## Otras versiones {#other-versions} + +- [Especificación de portabilidad v2](portability-versions#v2) +- [Especificación de portabilidad v1](portability-versions#v1) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/deploy/portability-versions.md b/i18n/es/docusaurus-plugin-content-docs/current/deploy/portability-versions.md new file mode 100644 index 00000000000..4be40ab1c7b --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/deploy/portability-versions.md @@ -0,0 +1,116 @@ +--- +title: Versiones de la propuesta de portabilidad +translation_source_hash: 6f60d19ea47e10d8a98feb1db3e323c0fe2297d1 +translation_review_status: machine +--- + +Nuestro compromiso con la portabilidad no ha cambiado a lo largo de la historia +de OpenFn, pero la forma de abordarlo y de ponerlo en práctica ha tomado muchas +formas. + +Este documento sirve de referencia para las versiones anteriores de la +especificación. + +## v3 {#v3} + +El estándar v3 se creó para la plataforma v2 y está vinculado al proyecto +Lightning. + +La v3 usa los comandos y protocolos de despliegue antiguos de la CLI. La app y +la CLI todavía la admiten por completo, pero se está retirando desde mayo +de 2026. + +[Consulta la especificación v3 aquí](/documentation/deploy/portability-v3) + +## v2 {#v2} + +Se usa para exportar desde la plataforma antigua. + +```yaml +jobs: + job-1: + expression: > + registerPatient({ + patient-id: state.data.id, + dob: state.data.birth + }) + adaptor: '@openfn/language-openmrs' + trigger: trigger-1 + credential: my-secret-credential + recurring-job: + expression: > + fn(state => { + console.log("Hi there!") + return state; + }) + adaptor: '@openfn/language-common' + trigger: every-minute + flow-job: + expression: > + fn(state => { + state.data.number = state.data.number * 3 + return state; + }) + adaptor: '@openfn/language-common' + trigger: after-j1 + catch-job: + expression: > + fn(state => { + state.message = "handled it." + return state; + }) + adaptor: '@openfn/language-common' + trigger: j1-fails + +triggers: + trigger-1: + criteria: '{"number":2}' + every-minute: + cron: '* * * * *' + after-j1: + success: job-1 + j1-fails: + failure: job-1 + +# Note that credential keys get copied, but values must be manually entered +# after the export is completed. +credentials: + my-secret-credential: + username: '******' + password: '******' +``` + +## v1 {#v1} + +Propuesta inicial de portabilidad + +```js +const project = { + async: true, + triggers: { + uniqueTriggerId: { + // trigger properties + }, + otherTrigger: { + // other trigger properties + }, + }, + credentials: { + // for now, credentials will not be synced // + // secret1: { + // username: 'mamadou', + // pass: 'shhh', + }, + staticData: { + // static objects that can be accessed from any job + }, + jobs: { + payHealthWorker: { trigger: 'otherTrigger' }, + syncToSalesforce: { + expression: 'uri://github.com/jobs/expresion.js', + trigger: 'uniqueTriggerId', + credential: 'secret1', + }, + }, +}; +``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/deploy/portability.md b/i18n/es/docusaurus-plugin-content-docs/current/deploy/portability.md new file mode 100644 index 00000000000..7c1224180af --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/deploy/portability.md @@ -0,0 +1,197 @@ +--- +title: Portabilidad +translation_source_hash: 9f8f8f055402d673cb33c47b2f12fe9087308afb +translation_review_status: machine +--- + +La especificación de portabilidad es una idea central de los proyectos de +OpenFn. Es a la vez un estándar técnico y un compromiso continuo. Garantiza que +el código escrito en una aplicación de OpenFn se pueda: + +- Desplegar en otra instancia de OpenFn (algo clave para los servicios en + producción que se ejecutan en el país) +- Ejecutar en una máquina local (una gran noticia para quienes desarrollan + workflows o adaptors) +- Sacar por completo de OpenFn y ejecutar en un entorno de ejecución de + JavaScript genérico + +Este manifiesto es la base de las funcionalidades principales de OpenFn Sync, +CLI Deploy, la fusión de sandboxes y la exportación e importación de proyectos +desde la app. + +:::info Especificaciones de portabilidad anteriores + +Nuestro compromiso con la portabilidad no ha cambiado a lo largo de la historia +de OpenFn, pero la forma de abordarlo y de ponerlo en práctica ha tomado muchas +formas. + +Este documento describe la especificación de portabilidad más reciente, +publicada en mayo de 2026. Para ver las especificaciones anteriores, consulta +[Versiones de portabilidad](/deploy/portability-versions.md) + +::: + +Nada en la especificación _tiene_ que ser exclusivo de OpenFn ni de ninguno de +nuestros productos. Imaginamos un futuro en el que el software creado con +Lightning, el OpenFn Integration Toolkit y herramientas de integración o de +workflows completamente nuevas y distintas puedan adoptar esta especificación. + +Si te interesa contribuir a la especificación, contacta a OpenFn a través del +[foro de la comunidad](https://community.openfn.org), escríbenos o sugiere +cambios enviando una pull request aquí. + +## Proyectos como código {#projects-as-code} + +Un principio fundamental de los proyectos de OpenFn es que se pueden representar +como código, en un sistema de archivos o en una rama de git. + +Esto mejora la experiencia de desarrollo en OpenFn porque: + +1. Permite crear y probar workflows localmente +2. Permite el control de versiones de los proyectos y un registro de auditoría + de sus cambios +3. Permite a los usuarios trasladar proyectos existentes entre distintas + instancias (es decir, despliegues) de Lightning. + +## Especificación de proyecto {#project-spec} + +La unidad de portabilidad, lo que codifica un proyecto y permite compartirlo, +sincronizarlo, desplegarlo y editarlo, se llama especificación de proyecto +(project spec). Es una definición abstracta de un proyecto, un plano que se +puede desplegar en muchos lugares. + +Esta estructura define un conjunto de workflows y, para cada workflow, su +configuración principal y la secuencia de steps que ejecuta. Normalmente la +representamos en YAML, porque es cómodo tanto para las personas como para las +máquinas, pero se puede representar en cualquier formato de texto. + +Con una copia de la especificación de un proyecto, puedes: + +- Importar un proyecto a una instancia de la app de OpenFn +- Ejecutar workflows localmente con la CLI +- Desplegar un proyecto en una instancia de la app de OpenFn +- Fusionar proyectos sandbox localmente + +A medida que se introducen nuevas funcionalidades, se agregan claves a esta +estructura con regularidad. Esperamos y nos aseguramos de que todas las +aplicaciones de la especificación admitan estas claves. + +Puedes exportar la especificación de un proyecto desde la app, en la página +Settings. + +Los workflows también se pueden intercambiar por separado con la misma +especificación. Así, puedes importar un workflow a un proyecto existente, o +ejecutarlo localmente sin clonar todo el proyecto. + +## Ejemplo de especificación {#spec-example} + +Este es un ejemplo de especificación de proyecto en formato YAML: + +```yaml +id: portability-example +name: Portability Example +schema_version: '4.0' +collections: + - my-data-cache +credentials: + - name: my-login + owner: some-user@openfn.org +workflows: + - name: Event-based workflow + steps: + - id: transform-data + name: Transform data + expression: fn(s => s) + adaptor: '@openfn/language-common@latest' + - id: webhook + type: webhook + webhook_reply: before_start + enabled: true + next: + transform-data: + disabled: false + condition: always + id: event-based-workflow + start: webhook + - name: Scheduled workflow + steps: + - id: common + name: Common + expression: fn(s => s) + adaptor: '@openfn/language-common@3.3.1' + - id: cron + type: cron + enabled: true + cron_expression: 00 00 * * 1-5 + cron_cursor_job_id: get-data + next: + get-data: + disabled: false + condition: always + - id: get-data + name: Get data + expression: fn(s => s) + adaptor: '@openfn/language-http@latest' + configuration: editor@openfn.org|local login + next: + throw-error: + disabled: false + condition: on_job_failure + common: + disabled: false + condition: '!state.error' + label: sometimes + never: + disabled: true + condition: on_job_success + - id: never + name: never + expression: fn(s => s) + adaptor: '@openfn/language-http@7.2.10' + - id: throw-error + name: throw error + expression: fn(s => s) + adaptor: '@openfn/language-common@3.3.1' + id: scheduled-workflow + start: cron +``` + +El esquema más reciente de un archivo de especificación de proyecto está +definido en TypeScript en +[portability.d.ts](https://github.com/OpenFn/kit/blob/main/packages/lexicon/portability.d.ts). + +## Sincronizar proyectos {#syncing-projects} + +Para saber más sobre cómo desplegar, ejecutar, descargar y editar un proyecto, +consulta nuestra documentación detallada sobre +[CLI Sync](/build-for-developers/cli-sync.md). + +## Recursos vinculados {#linked-resources} + +Aunque diseñamos los proyectos pensando en la portabilidad, algunas +funcionalidades NO son portables por naturaleza. + +Por ejemplo, las credenciales contienen tokens muy sensibles que, por diseño y +por naturaleza, deberían ser muy difíciles de extraer de la plataforma de +OpenFn. Por eso, las credenciales no son realmente portables. Al exportar un +proyecto, las credenciales sensibles no se deberían incluir en ese documento +exportado en texto plano. + +Del mismo modo, las colecciones son una funcionalidad muy ligada a un despliegue +concreto de una plataforma de OpenFn. La especificación de portabilidad no cubre +los datos de las colecciones (aunque, con los permisos adecuados, se pueden +sincronizar datos entre colecciones). + +Este tipo de recursos no portables no forman parte de un proyecto, pero están +VINCULADOS a un proyecto. + +Normalmente, los recursos se vinculan por nombre. Las credenciales y las +colecciones solo declaran que dependen de algo con un nombre determinado, que se +tiene que resolver en tiempo de ejecución. La CLI tiene herramientas para eso, y +al desplegar en una instancia de destino, puede que haya que configurar antes la +instancia para que tenga recursos que coincidan. + +## Especificaciones de portabilidad anteriores {#legacy-portability-specifications} + +Para ver versiones anteriores de nuestro enfoque, consulta +[Versiones de portabilidad](/deploy/portability-versions.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/deploy/requirements.md b/i18n/es/docusaurus-plugin-content-docs/current/deploy/requirements.md new file mode 100644 index 00000000000..cb3a307ef07 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/deploy/requirements.md @@ -0,0 +1,170 @@ +--- +title: Requisitos +translation_source_hash: a9076ecb0a1f8904b390ca7474d5443302a760f0 +translation_review_status: machine +--- + +## Planifica primero {#plan-first} + +¿No sabes por dónde empezar? Vuelve a la página +[Planificación](/deploy/options.md) para pensar cómo quieres escalar tus +proyectos de automatización con OpenFn. + +## Evalúa tu capacidad {#assess-your-capacity} + +:::info Ayuda a tu socio a estimar los costos iniciales y continuos + +Usa estas preguntas para empezar a evaluar tu capacidad y tus recursos técnicos, +para que tu socio de despliegue pueda estimar mejor el costo total de propiedad. + +::: + +1. ¿Cómo se despliegan, supervisan y mantienen actualmente las aplicaciones en + la nube en tu organización o gobierno? Cada entorno de despliegue y cada + institución es única, y OpenFn es flexible: según tus procesos actuales de + DevOps, te recomendaremos distintos mecanismos de despliegue. +2. ¿Qué personal de TI y de DevOps hay disponible para apoyar el despliegue y el + mantenimiento de OpenFn? ¿Tiene experiencia con Docker y Kubernetes? ¿Tiene + experiencia con bases de datos Postgres? +3. ¿El despliegue requerirá alta disponibilidad? (Es decir, si OpenFn va a + recibir solicitudes en tiempo real desde otras aplicaciones en lugar de + ejecutar jobs basados en cron, se deberían ejecutar al menos dos instancias + de OpenFn a la vez detrás de un balanceador de carga, usando "Erlang + distribuido" para lograr una redundancia de la aplicación sin interrupciones. + Si OpenFn no va a recibir solicitudes y solo va a hacer solicitudes salientes + con un horario cron, donde el momento exacto importa poco, mantener un + sistema sin tiempo de inactividad es algo menos importante). + +## Conocimientos necesarios {#knowledge-requirements} + +| Habilidad | Importancia y motivo | +| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Erlang | La **capa de aplicación web y orquestación** de OpenFn es una aplicación Erlang OTP. | +| JavaScript | Los **workers que procesan los jobs** de OpenFn y los propios workflows de OpenFn se basan en JavaScript. Si sabes cómo funciona Node.js, puedes crear workflows que hagan _cualquier cosa_. | +| Postgres | La **base de datos** predeterminada de OpenFn es PostgreSQL | +| Docker | Publicamos todas las **[imágenes](https://hub.docker.com/repository/docker/openfn/lightning/general) de OpenFn** en Docker Hub. Tanto si quieres simplificar la configuración para desarrolladores como si usas tecnologías de orquestación de contenedores, te será útil entender Docker y la computación en contenedores. | +| Kubernetes | En los despliegues de alta disponibilidad, los servicios de Kubernetes ofrecen **balanceo de carga** y simplifican la **administración de contenedores** en varios hosts. Facilitan que las aplicaciones de una empresa sean más escalables, flexibles, portables y productivas. | + +## Requisitos de las máquinas {#machine-requirements} + +:::tip Si eliges "DIY", empieza por lo simple + +Kubernetes _NO_ es obligatorio, pero se recomienda para los despliegues de alta +disponibilidad. Para una configuración más simple, considera un despliegue con +Docker o en servidores físicos (las aplicaciones Erlang OTP funcionan muy bien +en Linux). + +::: + +El SaaS oficial de OpenFn usa [Kubernetes](https://kubernetes.io/) para los +despliegues administrados en Google Cloud, y lo recomendamos para despliegues +escalables y de alta disponibilidad. Con cargas de trabajo variables, es +importante (por estabilidad y por costos) poder escalar el grupo de nodos y los +pods de la aplicación Erlang OTP por separado del grupo de nodos y los pods de +los workers de JavaScript. + +1. Usar un servicio SQL escalable y mantener _al menos_ dos nodos de la + aplicación en ejecución con las siguientes especificaciones ayudará a evitar + tiempos de inactividad no deseados. + 1. **Solicitudes de GKE (requests):** cpu@ "500m", memory@ "1024Mi" + 2. **Límites de GKE (limits):** memory@ "2560Mi" +2. Para despliegues simples sin Kubernetes ni alta disponibilidad, las máquinas + mínimas recomendadas son: + - **Máquina de la aplicación:** 2 vCPU (más o menos un solo núcleo de un + Intel Xeon E5 de 2.6 GHz) con 3.75 GB de memoria y 15 GB de almacenamiento + para la aplicación + 1. Cualquier sistema operativo basado en Linux que pueda ejecutar Docker + (Ubuntu 20.04+ o Debian 9+). + 2. Docker (18 o superior). + - **Máquina de la base de datos:** 2 vCPU (más o menos un solo núcleo de un + Intel Xeon E5 de 2.6 GHz) con 3.75 GB de memoria. El almacenamiento que + necesita la base de datos depende de cuántos días de datos de mensajes + quieras guardar en la propia aplicación (si quieres guardar alguno), y no + se puede determinar sin estimar el volumen de mensajes y runs. Si ampliar + el almacenamiento físico no es difícil en tu despliegue, empieza con 40 GB. + 1. Una instancia de Postgres (como mínimo v14.2), ejecutada en un _servidor + distinto_ del de la aplicación para lograr más estabilidad. +3. Si la aplicación y la base de datos están alojadas en la misma máquina (lo + que no se recomienda), esa máquina debería tener aproximadamente la suma de + los requisitos anteriores. +4. **Ten en cuenta** que, de forma predeterminada, la aplicación ofrece un + endpoint HTTP (sin TLS/SSL). Se espera que un proxy inverso o balanceador de + carga proporcione HTTPS (compatible con HTTP2) y balanceo de carga entre las + instancias. + - _Es decir, el servidor de la aplicación no cifra el acceso web, así que + hace falta un servidor web delante de la aplicación; Nginx con certificados + TLS es un buen punto de partida._ +5. Aunque la arquitectura de red depende del cliente, **recomendamos firmemente + una subred privada** para los servidores de la aplicación. +6. No hace falta desplegar la aplicación de OpenFn en la misma máquina que otros + servicios. Sin embargo, si los sistemas de origen y destino están alojados en + otros servidores, habrá que configurar el enrutamiento de red y las reglas + del firewall para que la integración pueda acceder a ellos. +7. Para la **resolución de problemas y el soporte externo**, los administradores + necesitarán acceso SSH a una cuenta sin restricciones (`sudo` en Ubuntu) si + se requieren servicios de mantenimiento del despliegue. + +## Configuraciones posibles {#possible-configurations} + +Aunque deberías planificar con cuidado tu estrategia de despliegue junto con un +especialista en DevOps, estas configuraciones de ejemplo pueden servirte como +punto de partida. + +### (a) Simple {#a-simple} + +Despliega la aplicación y la base de datos en la misma máquina. + +```mermaid +flowchart TB + subgraph "Linux VM with Docker" + ex1-.-db1 + direction TB + ex1(Erlang OTP App with JS Worker) + db1[(PostgreSQL)] + end +``` + +### (b) Mínima recomendada {#b-recommended-minimum} + +Despliega la aplicación y la base de datos en máquinas distintas. + +```mermaid +flowchart TB + ex1-.-db1 + subgraph "Linux VM with Docker" + direction LR + ex1(Erlang OTP App)-.-js1(Node.js Worker App) + end + subgraph "Linux VM" + db1[(PostgreSQL)] + end +``` + +### (c) Ideal {#c-ideal} + +Escala automáticamente distintos grupos de nodos optimizados en un clúster de +Kubernetes para la aplicación de orquestación en Erlang y la aplicación de +workers de JavaScript. + +Considera usar Postgres como servicio con alta disponibilidad, o ejecutarlo +también en un clúster. + +```mermaid +flowchart TB + ex1-.-db1 + ex1-.-js1 + lb1-->ex1 + subgraph "Load Balancer" + lb1(Ingress) + end + subgraph "VMs/Node Pools for Erlang apps" + direction LR + ex1(Erlang OTP Apps) + end + subgraph "VMs/Node Pool for JS Worker Apps" + js1(Node.js Worker Apps) + end + subgraph "VMs/Node Pool" + db1[(PostgreSQL)] + end +``` From 317fd26decac54d0bd8afad17276212880de940c Mon Sep 17 00:00:00 2001 From: Lucy Macartney Date: Fri, 2 Oct 2026 09:57:35 +0100 Subject: [PATCH 2/2] Fix review findings in Spanish deploy pages --- .../docusaurus-plugin-content-docs/current/deploy/options.md | 2 +- .../current/deploy/requirements.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/deploy/options.md b/i18n/es/docusaurus-plugin-content-docs/current/deploy/options.md index 5b1bbb3ed72..066dd2587e9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/deploy/options.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/deploy/options.md @@ -22,7 +22,7 @@ de ningún proveedor (**no vendor lock-in**). | Opción | Nube gratuita | OpenFn Cloud | Dedicada | Hazlo tú mismo (DIY) | | :-------------------------: | :-------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| Descripción | Empieza hoy mismo en OpenFn.org con proyectos de pequeña escala | Aumenta o reduce la escala y paga solo lo que necesitas | Una instalación de OpenFn dedicada y sin restricciones en cualquier parte del mundo, en nuestros servidores o en los tuyos | Despliega y administra tus propias soluciones con OpenFn | +| Descripción | Pasa a producción hoy mismo en OpenFn.org con proyectos de pequeña escala | Aumenta o reduce la escala y paga solo lo que necesitas | Una instalación de OpenFn dedicada y sin restricciones en cualquier parte del mundo, en nuestros servidores o en los tuyos | Despliega y administra tus propias soluciones con OpenFn | | Licencia | Gratis para siempre, con límites de uso | **SaaS** ([planes](https://www.openfn.org/pricing)); contacta a enterprise@openfn.org para acuerdos personalizados o con factura | **SDaaS** incluye como servicio el despliegue, el mantenimiento, los parches de seguridad, las actualizaciones y la resolución de problemas; contacta a enterprise@openfn.org | La licencia LGPLv3 te permite usarlo libremente en cualquier solución cerrada o de código abierto, pero todas las obras _derivadas_ tienen que ser de código abierto | | Ubicación | Infraestructura en la nube **global** y segura | Infraestructura en la nube **global** y segura | Infraestructura **local (en el país)** o **global** | Donde quieras | | Despliegue | **Haz clic para empezar** en [OpenFn.org](https://www.openfn.org/signup) | **Haz clic para empezar** en [OpenFn.org](https://www.openfn.org/signup) | **Contacta a** enterprise@openfn.org | Lee esta página de la documentación y visita nuestro [GitHub](https://www.github.com/OpenFn) | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/deploy/requirements.md b/i18n/es/docusaurus-plugin-content-docs/current/deploy/requirements.md index cb3a307ef07..58cf30039ef 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/deploy/requirements.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/deploy/requirements.md @@ -24,8 +24,8 @@ para que tu socio de despliegue pueda estimar mejor el costo total de propiedad. institución es única, y OpenFn es flexible: según tus procesos actuales de DevOps, te recomendaremos distintos mecanismos de despliegue. 2. ¿Qué personal de TI y de DevOps hay disponible para apoyar el despliegue y el - mantenimiento de OpenFn? ¿Tiene experiencia con Docker y Kubernetes? ¿Tiene - experiencia con bases de datos Postgres? + mantenimiento de OpenFn? ¿Ese personal tiene experiencia con Docker y + Kubernetes? ¿Y con bases de datos Postgres? 3. ¿El despliegue requerirá alta disponibilidad? (Es decir, si OpenFn va a recibir solicitudes en tiempo real desde otras aplicaciones en lugar de ejecutar jobs basados en cron, se deberían ejecutar al menos dos instancias