> ## 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.

# El ciclo de vida de la instancia

> Qué iniciar, detener, reiniciar, redimensionar y reinstalar cada preservación, y qué destruyen.

Una instancia lleva dos estados y responden a preguntas diferentes.

<Columns cols={2}>
  <Card title="desired_state" icon="target">
    Lo que usted **pidió**. Tres valores, porque hay tres cosas que puedes pedirle a una instancia que sea.
  </Card>

  <Card title="Estado actual" icon="activity">
    Donde **realmente es**. Lea este para responder "es arriba".
  </Card>
</Columns>

No son dos mitades de una respuesta, son una petición y su progreso. `POST /v1/instances/{instance_id}/start` establece `desired_state` a `running` inmediatamente, y `current_state` permanece `stopped` hasta que el huésped está realmente en marcha. Ese emparejamiento es la lectura honesta de "pedir para comenzar, no allí todavía".

```mermaid theme={null}
stateDiagram-v2
    [*] --> pending: create
    pending --> building: provisioning starts
    building --> running: guest boots
    running --> stopping: stop
    stopping --> stopped: guest is down
    stopped --> running: start
    running --> rebooting: reboot
    rebooting --> running: guest is back
    stopped --> stopped: resize / reinstall
    building --> error: provisioning failed
    error --> running: start
    running --> deleting: delete
    stopped --> deleting: delete
    deleting --> deleted: teardown complete
```

### `desired_state`

Tres valores, y cada llamada que cambia uno lo establece en uno de ellos.

| `desired_state` | Establecido por |
| - | - |
| `running` | Crear, iniciar, reiniciar |
| `stopped` | Stop |
| `deleted` | Delete |

No aparece nada más aquí. `stopping` no es algo que nadie solicite — es donde la instancia ha llegado — por lo que vive en el otro campo.

### `current_state`

| `current_state` | Significado de la palabra |
| - | - |
| `pending` | La fila existe; el aprovisionamiento no ha comenzado. |
| `building` | El disco de arranque, las interfaces y la semilla están siendo construidos. |
| `running` | El invitado está arriba. |
| `stopping` | Un apagado elegante está en curso. |
| `stopped` | Abajo, y mantenido — este es el estado de redimensionar y reinstalar la necesidad. |
| `rebooting` | Un reinicio está en curso. |
| `migrating` | La plataforma está moviendo al invitado entre hosts. Transitorio, nada que usted pidió, y vuelve a `running`. |
| `deleting` | El desmantelamiento comenzó. |
| `deleted` | Desmontaje terminado. La fila se elimina poco después, por lo que las lecturas comienzan a responder `404`. |
| `error` | Falló un paso de compilación o ciclo de vida. Lee cada entrada en `faults`. |

<Note>
  Tratar a un no reconocido `current_state` La lista crece a medida que la plataforma aprende a distinguir los estados — un invitado que se ha bloqueado actualmente informa que el servidor está en un estado de “ocupado, no actúe” en lugar de un fallo. `stopped`, porque el host aún no puede distinguir un pánico de un apagado limpio.
</Note>

<a id="start-stop-reboot" />

## Iniciar, detener, reiniciar

Cada uno es un `202` con un cuerpo vacío — sondee la instancia para ver el resultado.

<Tabs>
  <Tab title="Console">
    Abra la instancia desde **Compute → Instances**. El encabezado ofrece solo las acciones que su estado actual permite: **Start** mientras está detenido, **Stop** y **Reboot** mientras está en ejecución.

    Un ciclo de potencia dura no está entre ellos. Se encuentra en la pestaña **Settings** como **Hard reboot**, descrito allí como *Ciclos de encendido de la instancia sin un apagado limpio del sistema operativo* y cerrado detrás de una confirmación escrita.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST /v1/instances/{instance_id}/start
    POST /v1/instances/{instance_id}/stop
    POST /v1/instances/{instance_id}/reboot
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic compute instance start <instance-id>
    basaltic compute instance stop <instance-id>
    basaltic compute instance reboot <instance-id>
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    c := compute.New(cfg)
    inst, err := c.StartInstance(ctx, instanceID)
    inst, err = c.StopInstance(ctx, instanceID)
    inst, err = c.RebootInstance(ctx, instanceID, &compute.InstanceRebootRequest{})
    ```
  </Tab>
</Tabs>

<AccordionGroup>
  <Accordion title="Inicio" icon="play">
    `POST /v1/instances/{instance_id}/start` acepta una instancia en `stopped` **o en `error`** — el segundo caso es cómo se reintenta una instancia que falló en el camino, sin volver a crearla. Cualquier otro estado es un `409`.
  </Accordion>

  <Accordion title="Stop" icon="square">
    `POST /v1/instances/{instance_id}/stop` requiere `running`. Cualquier otra cosa es un `409` — incluyendo una instancia ya `stopped`, así que esta no es una llamada idempotente "hacer que se detenga".
  </Accordion>

  <Accordion title="Reiniciar" icon="rotate-cw">
    `POST /v1/instances/{instance_id}/reboot` requiere `running`. El valor por defecto es un reinicio ACPI elegante sobre el que el invitado puede actuar; `{"hard": true}` es un ciclo de encendido — el botón de restablecimiento, sin posibilidad de borrar nada.
  </Accordion>
</AccordionGroup>

<a id="resize" />

## Redimensionar

Un cambio de tamaño cambia **vCPU y RAM, y nada más.** Los discos no se tocan, las direcciones no se tocan, los datos del invitado no se tocan.

<Tabs>
  <Tab title="Console">
    **Resize** en el encabezado de la instancia abre **Resize instance**, un selector de variantes que resume **Current** frente a **New flavor** antes de confirmar y luego te pide que confirmes.

    <Warning>
      La consola ofrece **Resize** mientras la instancia todavía está en ejecución, pero el cambio de tamaño en sí necesita que se detenga; el envío desde una instancia en ejecución devuelve **Failed to resize instance**. Deténlo primero.
    </Warning>
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST /v1/instances/{instance_id}/resize
    { "flavor": "550e8400-e29b-41d4-a716-446655440000" }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic compute instance resize <instance-id> \
      --flavor 550e8400-e29b-41d4-a716-446655440000
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    err := compute.New(cfg).ResizeInstance(ctx, instanceID,
        &compute.ResizeInstanceRequest{
            Flavor: "550e8400-e29b-41d4-a716-446655440000",
        })
    ```
  </Tab>
</Tabs>

Hay dos cosas que vale la pena saber antes de planificar una ventana de cambio de tamaño:

<Steps>
  <Step title="La instancia debe detenerse">
    Los máximos de CPU y memoria de un huésped en ejecución no pueden cambiarse debajo de él, por lo que un cambio de tamaño en una instancia en ejecución es un `409`. Detenerlo, cambiar el tamaño, iniciarlo.
  </Step>

  <Step title="El nuevo tamaño se aplica en el siguiente inicio">
    La llamada registra el objetivo y regresa. El invitado aparece en la nueva versión cuando lo inicias; no hay un paso de confirmación separado, y no hay un estado en el que la instancia sea de tamaño medio.
  </Step>
</Steps>

<Warning>
  **Un cambio de tamaño no mueve la instancia a otro host.** Crecer significa que la vCPU y la RAM adicionales deben estar libres en el host en el que ya está, por lo que se puede rechazar un cambio de tamaño por capacidad mientras que la región en su conjunto tiene suficiente. `dedicated` El caso más estricto es el de flavor: necesita hilos enteros en los que no se puede ejecutar nada más, lo que un host ocupado-pero-no-completo puede no tener.
</Warning>

Dos rechazos más, ambos `400`: redimensionamiento al tipo de instancia que la instancia ya usa, y redimensionamiento a un tipo de instancia `loadbalancer` o `database`.

El límite de red de una instancia se mueve con el tipo de instancia como parte del cambio de tamaño, por lo que una reducción también renuncia al ancho de banda del tipo de instancia más grande.

<a id="reinstall" />

## Reinstalar

`POST /v1/instances/{instance_id}/reinstall` crea una nueva imagen del disco de arranque mientras mantiene la instancia en sí. También solo parado, y también aplicado en el próximo inicio.

<Columns cols={2}>
  <Card title="Mantener" icon="check">
    El id, nombre, CRN, direcciones IP y direcciones MAC de la instancia, sus interfaces de red, su semilla de init en la nube y **cada volumen de datos adjunto**.
  </Card>

  <Card title="Reemplazado" icon="triangle-alert">
    Se clona uno nuevo de la imagen y se intercambia, y se crea un nuevo volumen de arranque.
    **Se elimina el antiguo.** Todo en el sistema de archivos raíz se ha ido.
  </Card>
</Columns>

<Tabs>
  <Tab title="Console">
    La consola llama a este **Replace root volume**, y está en la pestaña **Settings** de la instancia, en la zona de peligro. Se abre una **Image** y una tarjeta de **Boot volume** — *Sistema operativo para el volumen raíz de reemplazo. El actual se elimina* — y confirma con el nombre de la instancia escrito de nuevo.

    <Note>
      Mismo funcionamiento, nombre diferente. Nada en la consola está etiquetado como "reinstalar": busque **Replace root volume**, que es la descripción más literal de lo que sucede con el disco.
    </Note>
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST /v1/instances/{instance_id}/reinstall
    { "image": "debian-13:20260807", "size_gb": 40, "volume_type": "nvme" }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic compute instance reinstall <instance-id> \
      --image debian-13:20260807 --size-gb 40 --volume-type nvme
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    err := compute.New(cfg).ReinstallInstance(ctx, instanceID,
        &compute.ReinstallInstanceRequest{
            Image: basaltic.String("debian-13:20260807"),
            SizeGB: basaltic.Int(40), VolumeType: basaltic.String("nvme"),
        })
    ```
  </Tab>
</Tabs>

Cada campo es opcional. Omita `image` y se reinstala desde la imagen que la instancia ya tiene; omita `size_gb` y el reemplazo es el `min_disk_gb` de la imagen; omita `volume_type` y se aterriza en la región predeterminada. Se aplica el mismo piso que en el lanzamiento — `size_gb` debe ser al menos el `min_disk_gb` de la imagen, y entre 1–16384 GB.

Debido a que las direcciones sobreviven, reinstalar es la operación para "mismo equipo, sistema operativo limpio": una reconstrucción en la que todo lo que apunta a la instancia sigue funcionando.

<a id="delete" />

## Suprímase

<Tabs>
  <Tab title="Console">
    **Delete instance** está en la pestaña **Settings** de la instancia, en la zona de peligro. La confirmación reitera la regla siguiente: *Los volúmenes marcados como eliminados al finalizar se destruyen con ella; otros se separan y se mantienen*, y necesita que se escriba de nuevo el nombre de la instancia.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    DELETE /v1/instances/{instance_id}
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic compute instance delete <instance-id>
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    err := compute.New(cfg).DeleteInstance(ctx, instanceID)
    ```
  </Tab>
</Tabs>

Responde `202`. La instancia se mueve a `deleting`, el invitado se desmonta, y la fila se elimina una vez que sus interfaces y volúmenes se han recuperado — por lo que una eliminación completada deja de responder a las lecturas por completo en lugar de dejar una fila `deleted` detrás.

Eliminar una instancia ya existente `deleting` Se acepta y vuelve a ejecutar el desmantelamiento en lugar de iniciar un segundo.

<a id="what-survives-a-delete" />

### Lo que sobrevive a una eliminación

| | |
| - | - |
| Volumen de arranque | **Destruido.** Creado con `delete_on_termination: true`. |
| `volumes` en el momento del lanzamiento | Destruido, a menos que haya enviado `delete_on_termination: false`. |
| Un volumen que adjuntó más tarde | **Volver a la posición `available`,** no destruido. |
| Una IP flotante de `networks[].floating_ip_assignment` | Liberado — el lanzamiento lo asignó. |
| Una IP flotante que usted asignó y adjuntó | **Suyo.** Está separado y se mantiene asignado. |
| Imágenes | Sin tocar. Una imagen no tiene ámbito de instancia. |

<Tip>
  Para mantener un disco de arranque más allá de su instancia, voltee la bandera en el archivo adjunto:
  `PATCH /v1/instances/{instance_id}/volumes/{volume_id}` con
  `{"delete_on_termination": false}`. El volumen se desvincula y se devuelve a `available` Esto funciona en el volumen de arranque como cualquier otro archivo adjunto, pero no en el volumen de arranque.

  En la consola es el interruptor **Eliminar al terminar** en la pestaña **Volumes** de la instancia, uno por cada archivo adjunto.
</Tip>


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