> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Volúmenes e interfaces

> Conectar discos y tarjetas de red en caliente a una instancia en ejecución, cuáles de ellos sobreviven y de dónde proviene una dirección pública.

<a id="volumes" />

## Volúmenes

`GET /v1/instances/{instance_id}/volumes` muestra los archivos adjuntos en orden de arranque, el disco de arranque primero, cada uno resuelto con el nombre actual del volumen, nivel, tamaño y estado.

<Tabs>
  <Tab title="Console">
    **Attach volume** en la pestaña **Volumes** de la instancia abre un diálogo que solicita el **Volume** y, opcionalmente, un **Device name** — *Deje en blanco para asignar el siguiente nombre disponible* — una **Mount path** y un **Filesystem**. Solo se ofrecen volúmenes que la instancia puede realmente tomar.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST /v1/instances/{instance_id}/volumes
    { "volume": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "mount_path": "/data", "fstype": "ext4" }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic compute instance attach-volume <instance-id> \
      --volume 7c9e6679-7425-40de-944b-e07fc1f90ae7 \
      --mount-path /data --fstype ext4
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    _, err := compute.New(cfg).AttachInstanceVolume(ctx, instanceID,
        &compute.AttachInstanceVolumeRequest{
            Volume: "7c9e6679-7425-40de-944b-e07fc1f90ae7",
            MountPath: basaltic.String("/data"),
            Fstype: basaltic.String("ext4"),
        })
    ```
  </Tab>
</Tabs>

El volumen debe estar en la misma cuenta y en estado `available`, y la instancia debe ser `running` o `stopped`. El disco está conectado en caliente; `device`
El jugador elige la siguiente ranura libre (`vdb`, `vdc`, …) a menos que usted nombre uno.

Con `mount_path` establecido, el agente invitado formatea el disco — **solo si está en blanco** — y lo monta allí. `fstype` elige el sistema de archivos: `ext4` por defecto, o `xfs`. Nada más se acepta. Deja `mount_path` vacío y obtendrás el dispositivo de bloque y nada más.

El desmontaje es `DELETE /v1/instances/{instance_id}/volumes/{volume_id}`, también `202`, también requiere `running` o `stopped`. En la consola es la acción de fila en la pestaña **Volumes** de la instancia, confirmada como **Detach volume** — y el disco de arranque no tiene tal control allí, porque el desmontaje se rechaza de todos modos.

<a id="network-interfaces" />

## Interfaz de red

`GET /v1/instances/{instance_id}/nics` es la fuente de cada dirección de instancia. Cada NIC devuelve una matriz de `addresses`, con resúmenes IP flotantes anidados bajo su dirección de destino. El objeto de instancia no tiene campos de IP primaria o pública.

La lista se ordena por índice de arranque, primero el principal, y cada entrada resuelve el MAC, IPv4, IPv6, subred y VPC actuales de la interfaz.

La colocación vuelve como un objeto `subnet` incrustado en lugar de los campos `subnet_id` y `vpc_id` anteriores. Lleva la VPC principal y el resumen de la tabla de rutas nullable descrito en [subnet placement](/es/networking/subnets#reading-placement), por lo que `subnet.name` y `subnet.vpc.name` son legibles directamente desde la NIC — no se necesita una lectura separada de subred o VPC para mostrar dónde se encuentra una interfaz:

```json theme={null}
{
  "nics": [
    {
      "interface_id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
      "boot_index": 0,
      "subnet": {
        "id": "9b2e4f1a-3c5d-4e6f-8a90-1b2c3d4e5f60",
        "crn": "crn:network:sa-saopaulo-1:my-account:vpc/production/subnet/private",
        "name": "private",
        "cidr": "10.0.1.0/24",
        "vpc": { "id": "c3d4e5f6-a7b8-4901-c2d3-e4f5a6b7c8d9", "name": "production" },
        "route_table": { "id": "…", "crn": "…", "name": "private-routes" }
      }
    }
  ]
}
```

`subnet` es **null** cuando la subred referenciada ya no se resuelve — una subred eliminada mientras la NIC todavía la registra. Trate esto como una ubicación no disponible y actualice; no significa que la interfaz no tenga subred. En Go, compruebe `nic.Subnet != nil` antes de leer `nic.Subnet.VPC`.

Las solicitudes de lanzamiento usan referencias de cadena `networks[].subnet`. Los adjuntos de NIC posteriores requieren una referencia de `interface` existente. No pase el objeto de subred incrustado a ninguna de las operaciones.

<a id="attaching-and-detaching" />

### Fijación y desmontaje

`POST /v1/instances/{instance_id}/nics` adjunta una interfaz independiente existente usando el campo `interface`. Mantiene su dirección, MAC y grupos de seguridad. No se admite la creación de una NIC durante la conexión: créela primero a través de la API de interfaz de red. Al desconectarlo vuelve al estado independiente.

La instancia debe estar `running` o `stopped`. El adjunto es duradero en el momento en que la llamada regresa (es parte de las especificaciones de la instancia y sobrevive a los reinicios), pero el invitado no tiene el dispositivo cuando la llamada regresa. La entrega es asíncrona, y la respuesta dice lo que se necesita:

```json theme={null}
{ "attachment": { "interface_id": "...", "mac": "02:1a:2b:3c:4d:5e", "ip": "10.0.1.42", "boot_index": 1 } }
```

Una instancia **stopped** aparece con el dispositivo en su próximo inicio, y `restart_required` está ausente.

Se le da una instancia **running** al dispositivo mientras se ejecuta, donde la región puede hacer eso: el adjunto informa que no se requiere `restart_required`, y la interfaz aparece en el invitado momentos más tarde. Consulta `GET /v1/instances/{instance_id}/nics` para el adjunto, o mira al invitado para un enlace que lleve el `mac` anterior — que MAC es la identidad de la interfaz en la red, por lo que es lo que el dispositivo llega con.

Cuando la región no puede, la respuesta lleva `restart_required: true`, y un **hard** reboot lo entrega:

```bash theme={null}
POST /v1/instances/{instance_id}/reboot
{ "hard": true }
```

Un reinicio suave no lo hará — es un reinicio ACPI dentro del mismo lanzador, y una interfaz más allá de la primera es una red en ese lanzador, fija para su vida útil.

<Note>
  La cantidad de interfaces que puede tener una instancia es una propiedad de la región, y también es si se puede dar una a un invitado en ejecución. Cuando el límite es uno, un segundo enlace es rechazado con **409** y un lanzamiento que pide dos con **400**. Trate `restart_required` como la respuesta para la región en la que se encuentra en lugar de asumir cualquiera de los comportamientos: está ausente cuando no hay nada que hacer más que esperar.
</Note>

<Warning>
  **La dirección es de DHCP, y el invitado tiene que pedirla.** Nada configura la nueva interfaz dentro del invitado: la plataforma coloca el dispositivo allí y el DHCP de la subred mantiene su arrendamiento. Una imagen que muestra un dispositivo de red cuando aparece (cloud-init con hotplug de red habilitado, NetworkManager, `systemd-networkd` con una coincidencia de comodín) lo recoge por sí mismo; una que configura solo las interfaces con las que arrancó mantendrá el nuevo enlace, sin dirección, hasta que algo pregunte:

  ```bash theme={null}
  sudo dhclient -1 <device>
  ```

  Un reinicio lo configura de cualquier manera, por lo que un invitado que ha obtenido el dispositivo en vivo puede seguir sin verse configurado hasta que se le informe al administrador de red.
</Warning>

<Tabs>
  <Tab title="Console">
    Abra la pestaña **Networking** de la instancia y elija **Attach NIC**. Seleccione una **Interface** existente, luego **Attach interface**. La acción create del selector abre la creación de interfaz cuando necesita una nueva NIC independiente.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST /v1/instances/{instance_id}/nics
    { "interface": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d" }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic compute instance attach-nic <instance-id> \
      --interface 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    _, err := compute.New(cfg).AttachInstanceNIC(ctx, instanceID,
        &compute.AttachInstanceNICRequest{
            Interface: "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
        })
    ```
  </Tab>
</Tabs>

<Warning>
  Se rechaza la desconexión de la **única** NIC en una instancia. No hay forma de llegar a un invitado sin interfaz, por lo que la API no te dejará con una.
</Warning>

<a id="public-addresses" />

### Discursos públicos

`networks[].floating_ip_assignment` solicita IPs flotantes públicas al inicio:

| Valor | Asignación |
| - | - |
| `none` | No hay IP flotante (predeterminado). |
| `ipv4` | Una IPv4 IP flotante. |
| `ipv6` | Una IPv6 IP flotante. |
| `dual_stack` | Uno de cada familia. |
| `auto` | IPv4 y, cuando la NIC tiene IPv6, IPv6. |

Cada familia solicitada necesita una dirección directamente adjunta y una ruta predeterminada a una puerta de enlace de Internet en esa familia. Las asignaciones cuentan contra la cuota correspondiente `floating_ips_v4` o `floating_ips_v6`. Habilitar IPv6 más tarde no agrega una IP flotante automáticamente.

Todas las direcciones IPv4 públicas son IPs flotantes. El acceso saliente IPv4 también puede usar una puerta de enlace NAT. La IPv6 global nativa puede llegar a Internet sin una IP flotante cuando las reglas de enrutamiento y seguridad lo permiten; la ULA privada requiere una IP flotante IPv6 pública para el acceso a Internet. Al adjuntar un FIP público, el tráfico saliente de su dirección de destino usa esa asignación. Un FIP privado traduce el tráfico a la dirección virtual privada y sus respuestas, sin cambiar la salida no relacionada.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.