Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ The site is everything under `source/`. Most of it is written here, but two file
| `/helm-charts/` (the Helm chart repository) | the chart packages of the `ansibleforms/helm-charts` releases, indexed at build time | the `helm-charts` repository |
| everything else in `source/` | this repository | here |

The docs are served under a language prefix (`/en/` for English), and the language selector in the header lists
The docs are served under a language prefix (`/en/`, `/es/`), and the language selector in the header lists
every language in `docs_languages` (`source/_config.yml`). Every page that used to live at the root keeps
its address as a redirect, written at build time by `scripts/redirects.sh`, to the reader's language: the
one they last picked, else their browser's, else English. The install script (`/install`) and the Helm chart
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ The site covers everything a user of AnsibleForms needs, from the first install
- The app's changelog, rebuilt into the site on every release
- The Helm chart repository, served under `/helm-charts/`
- The 6.x documentation, kept alongside under `/v6/`
- The docs under a language prefix (`/en/`), the old addresses redirecting to the reader's language
- The docs in English and Spanish under `/en/` and `/es/`, picked from the reader's browser language

## Previewing locally

Expand Down
40 changes: 40 additions & 0 deletions i18n/es.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# The Spanish docs : read after source/_config.yml by scripts/build-language.sh, so only what
# differs from the English site is set here. Jekyll merges the two, nested keys included.

lang: es
docs_language: "es"

title: Documentación de AnsibleForms
description: Documentación técnica de AnsibleForms

footer_content: "Copyright © 2023-2026 AnsibleForms. Todos los derechos reservados."

# "Edit this page on GitHub" opens the Spanish page's source
gh_edit_link_text: "Editar esta página en GitHub"
gh_edit_source: i18n/es

just_the_docs:
collections:
introduction:
name: Introducción
get_started:
name: Primeros pasos
configure:
name: Configurar
build_forms:
name: Crear formularios
use:
name: Guía de usuario
integrate:
name: Integrar
reference:
name: Referencia

# The version selector (_includes/version_select.html) : a list is replaced, not merged
docs_versions:
- name: "7"
title: "7.x (última)"
url: "/es/"
- name: "6"
title: "6.x (en inglés)"
url: "/v6/"
54 changes: 54 additions & 0 deletions i18n/es/_build_forms/expressions/credentials.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
layout: default
title: Credenciales
parent: Expresiones
nav_order: 4
translated_from: bfa50c90495c68300d189f9a0eb38e25df9e7c8e
---

# Credenciales
{: .no_toc }

Lee una credencial almacenada en una expresión
{: .fs-6 .fw-300 }

---

Lee una credencial almacenada por nombre o por expresión regular, con una alternativa:

```javascript
fn.fnCredentials('credentialname_or_regex','fallback_credentialname_or_regex')

// Try to use `fnRestBasic` and `fnRestJwtSecure` if possible, this avoids passwords and tokens going over the network.

// output : a credential object with all properties (user, password, host, port)
```

Primero se prueba el nombre exacto. Si ninguna credencial tiene ese nombre, el nombre se usa como expresión regular y después se prueba la alternativa.

#### Limitado por rol

Cuando uno de los roles del usuario incluye `credentials` en `config.yaml`, `fn.fnCredentials` solo devuelve una credencial que ese rol
permita: los patrones del rol se comparan con el nombre de la credencial encontrada (por nombre, expresión regular o alternativa),
y cualquier otra se rechaza. Los roles sin la lista no la limitan, y un administrador nunca está limitado.

#### Credenciales de un almacén de secretos

Una credencial que indica un [almacén de secretos](../secret-stores) obtiene su `user` y su `password`
de ese almacén en tiempo de ejecución. `fn.fnCredentials('myapp')` sigue funcionando sin cambios.

Un secreto también se puede leer sin una fila de credencial, allí donde se acepte un nombre de credencial
(incluidos `fnRestBasic`, `fnRestJwtSecure` y las sustituciones de cabeceras de `fnRestAdvanced`):

```javascript
fn.fnCredentials('secret:vault:secret/ontap') // secret:<store>:<reference>
fn.fnCredentials('vault:secret/ontap') // the store named `vault`
```

Las claves del secreto se asignan como se describe en [Nombres de clave](../secret-stores#key-names).
Un secreto con otra forma se transforma con una expresión `jq` como tercer argumento:

```javascript
// secret: { "creds": { "u": "admin", "p": "Netapp12" } }
fn.fnCredentials('vault:secret/weird','','.creds | { user: .u, password: .p }')
```
76 changes: 76 additions & 0 deletions i18n/es/_build_forms/expressions/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
layout: default
title: Expresiones
nav_order: 1
has_children: true
has_toc: false
permalink: /expressions/
translated_from: 52d74e32540fba4dfa5078c8976147b39a2ad2cf
---

# Expresiones
{: .no_toc }

Calcula valores de campos con JavaScript, en el navegador o en el servidor
{: .fs-6 .fw-300 }

---

Para autores de formularios: rellena campos de forma dinámica con JavaScript, calculados en el navegador u obtenidos en el servidor.

El atributo `expression` de un campo de formulario te permite crear formularios dinámicos con expresiones JavaScript.

---

## Introducción

El atributo `expression` está disponible en varios tipos de campo:
- campo `enum`: para rellenar las opciones del desplegable de forma dinámica
- campo `expression`: para obtener o generar cualquier tipo de datos
- campo `html`: para construir su contenido HTML
- campos `yaml` y `list`: para rellenar sus datos

Las expresiones JavaScript se evalúan en el **lado del servidor** (por defecto) o en el **lado del cliente**, según la propiedad `runLocal` del campo.
Un campo `html`, y los tipos de campo `local`, `local_out` y `credential`, siempre ejecutan su expresión en el navegador, diga lo que diga
`runLocal`.

- **En el lado del servidor** (`runLocal: false`, el valor por defecto): funciones predefinidas que obtienen datos de APIs, archivos y bases de datos.
- **En el lado del cliente** (`runLocal: true`): el código aprovecha todo el motor JavaScript en el sandbox del navegador para cálculos, transformaciones y manipulaciones.

---

## Consideraciones de seguridad

Como las expresiones se evalúan con la función `eval` de JavaScript, la inyección de código es un riesgo potencial:

- **Las expresiones del lado del servidor** pasan antes por un saneador: cada llamada debe ser una función `fn.` o `fnc.`, y se rechazan las líneas múltiples,
`;`, los template literals, `process.env` y las formas de escapar de `eval` (`import`, `require`, `constructor`, ...).
- **Las expresiones del lado del cliente** se evalúan en el sandbox del navegador y se pueden considerar seguras.

El grado de rigor del saneador depende de
[`EXPRESSION_SANITIZER`](../customization/security.html#env_EXPRESSION_SANITIZER):

| Valor | Expresiones del lado del servidor |
|---|---|
| `strict` (por defecto) | llamadas `fn.` y `fnc.`, y métodos sobre su resultado, como `fn.fnTime().format('YYYY')` |
| `paranoid` | solo llamadas directas `fn.` y `fnc.`, sin métodos sobre su resultado |
| `off` | se rechaza toda expresión del lado del servidor; solo funcionan las expresiones `runLocal` |
| `legacy` | las reglas de 6.2.1, que permitían a cualquier usuario autenticado ejecutar código en el servidor; solo para una actualización, y solo en el entorno real (no desde la página de ajustes) |

Un valor vacío o desconocido equivale a `strict`. Un cambio se aplica a la siguiente expresión, sin reiniciar.

---

## En esta sección

Cada tema tiene su propia página:

| Página | Qué cubre |
|---|---|
| [Marcadores](placeholders.html) | Haz referencia a otro campo, una constante o el usuario con `$(...)` |
| [Expresiones locales](local.html) | JavaScript que se ejecuta en el sandbox del navegador |
| [Expresiones remotas](remote.html) | Funciones del lado del servidor para fechas, redes, archivos, SSH y nombres numerados |
| [APIs REST](rest-apis.html) | Llama a APIs REST con autenticación básica, por token o personalizada |
| [Credenciales](credentials.html) | Lee una credencial almacenada |
| [Ordenación](sorting.html) | Ordena arrays con un objeto de ordenación |
| [Consultas jq](jq.html) | Transforma datos con jq |
59 changes: 59 additions & 0 deletions i18n/es/_build_forms/expressions/jq.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
layout: default
title: Consultas jq
parent: Expresiones
nav_order: 6
translated_from: b34dbbec6c5d115f9bb41450962c3fce9606035f
---

# Consultas jq
{: .no_toc }

Transforma datos con jq, incluidas las funciones integradas
{: .fs-6 .fw-300 }

1. TOC
{:toc}

---

## Ejecutar una consulta JSON (jq) sobre un objeto

Transforma un objeto, por ejemplo el valor de otro campo, con una expresión jq:

```javascript
fn.fnJq($(settings),'.mapping | keys')

// output : a full json object taken from another field called "settings", converted by jq

// fn.fnJq(object, jq)
// - object, for example read from rest or yaml file
// - jq-expression : a jq-expression (https://jqplay.org)
// - wrap the result in fn.fnSort to order it
```

Desde 7.3.0, un filtro jq se ejecuta como máximo [`JQ_TIMEOUT_SECONDS`](../customization/security.html#env_JQ_TIMEOUT_SECONDS) (30 por defecto)
antes de detenerse, y su salida se limita a 64 MB. Esto se aplica a `fn.fnJq` y a la expresión jq de las funciones de REST, archivo,
credencial y consulta a base de datos.

---

## Funciones jq integradas

Todas las funciones que obtienen datos aceptan una consulta JSON (jq), un lenguaje para manipular objetos y arrays de datos.
Al manipular datos, puede que necesites convertir bytes a KB, MB o GB, o redondear números.
Para ello, AnsibleForms incluye algunas funciones jq propias:

- **fn2KB**: bytes a KB
- **fn2MB**: bytes a MB
- **fn2GB**: bytes a GB
- **fnRound0**: redondea con 0 decimales
- **fnRound1**: redondea con 1 decimal
- **fnRound2**: redondea con 2 decimales
- **fnRound**: redondea con 2 decimales

```javascript
fn.fnRestBasic('get','https://youruri','','CREDS',
'[.records[] | {"Available Capacity":.storage_capacity.available | fn2GB | fnRound }]')
// note you need to pipe into the functions
```
Loading
Loading