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

# O ciclo de vida da instância

> O que iniciar, parar, reiniciar, redimensionar e reinstalar cada preservar, e o que eles destroem.

Uma instância carrega dois estados e eles respondem a perguntas diferentes.

<Columns cols={2}>
  <Card title="estado_desejado" icon="target">
    O que você **pediu**. Três valores, porque há três coisas que você pode pedir para uma instância ser.
  </Card>

  <Card title="current_state" icon="activity">
    Onde ele **realmente é**. Leia este para responder "é isso".
  </Card>
</Columns>

Eles não são duas metades de uma resposta — eles são um pedido e seu progresso. `POST /v1/instances/{instance_id}/start` define `desired_state` para `running` imediatamente, e `current_state` permanece `stopped` até que o convidado esteja realmente ativo. Esse emparelhamento é a leitura honesta de "pedido para começar, ainda não lá".

```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`

Três valores, e cada chamada que muda um deles o define para um deles.

| `desired_state` | Definido por |
| - | - |
| `running` | Criar, Iniciar, Reiniciar |
| `stopped` | Parar |
| `deleted` | Delete |

Nada mais aparece aqui. `stopping` não é algo que alguém solicita — é onde a instância tem que ir — e é por isso que ela vive no outro campo.

### `current_state`

| `current_state` | Significado da palavra |
| - | - |
| `pending` | A linha existe; o provisionamento não foi iniciado. |
| `building` | O disco de inicialização, interfaces e seed estão sendo construídos. |
| `running` | O convidado está de pé. |
| `stopping` | Um desligamento gracioso está em andamento. |
| `stopped` | Para baixo, e manteve — este é o estado de redimensionamento e reinstalar a necessidade. |
| `rebooting` | Uma reinicialização está em andamento. |
| `migrating` | A plataforma está movendo o convidado entre hosts. Transitório, nada que você pediu, e ele retorna para `running`. |
| `deleting` | Desmontagem iniciada. |
| `deleted` | Desmontagem concluída. A linha é removida logo depois, então as leituras começam a responder `404`. |
| `error` | Uma etapa de compilação ou ciclo de vida falhou. Leia cada entrada em `faults`. |

<Note>
  Trate um `current_state` não reconhecido como "ocupado, não aja" em vez de como uma falha. A lista cresce à medida que a plataforma aprende a distinguir os estados — um convidado que falhou atualmente relata `stopped`, porque o host ainda não pode distinguir um pânico de um desligamento limpo.
</Note>

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

## Iniciar, parar, reiniciar

Cada um é um `202` com um corpo vazio — consulte a instância para ver o resultado.

<Tabs>
  <Tab title="Console">
    Abra a instância a partir de **Compute → Instances**. O cabeçalho oferece apenas as ações que seu estado atual permite: **Start** enquanto está parado, **Stop** e **Reboot** enquanto está em execução.

    Um ciclo de energia dura não está entre eles. Ele fica na guia **Settings** como **Hard reboot**, descrito lá como *Ciclos de energia da instância sem um desligamento limpo do sistema operacional* e fechado atrás de uma confirmação digitada.
  </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="Começar" icon="play">
    `POST /v1/instances/{instance_id}/start` aceita uma instância em `stopped` **ou em `error`** — o segundo caso é como você retenta uma instância que falhou no caminho, sem recriá-la. Qualquer outro estado é um `409`.
  </Accordion>

  <Accordion title="Pare!" icon="square">
    `POST /v1/instances/{instance_id}/stop` requer `running`. Qualquer outra coisa é um `409` — incluindo uma instância já `stopped`, então esta não é uma chamada idempotente "faça-a parar".
  </Accordion>

  <Accordion title="Reiniciar" icon="rotate-cw">
    `POST /v1/instances/{instance_id}/reboot` requer `running`. O padrão é uma reinicialização ACPI graciosa que o convidado pode agir; `{"hard": true}` é um ciclo de energia — o botão de reset, sem chance de limpar nada.
  </Accordion>
</AccordionGroup>

<a id="resize" />

## Redimensionar

Um redimensionamento altera **vCPU e RAM, e nada mais.** Os discos não são afetados, os endereços não são afetados, os dados do convidado não são afetados.

<Tabs>
  <Tab title="Console">
    **Resize** no cabeçalho da instância abre **Resize instance**, um seletor de variação que resume **Current** contra **New flavor** antes de você fazer o commit e, em seguida, solicitar a confirmação.

    <Warning>
      O console oferece **Resize** enquanto a instância ainda está em execução, mas o redimensionamento em si precisa ser interrompido — o envio de uma instância em execução retorna como **Failed to resize instance**. Pare primeiro.
    </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>

Duas coisas sobre isso valem a pena saber antes de planejar uma janela de redimensionamento:

<Steps>
  <Step title="A instância deve ser interrompida">
    Os máximos de CPU e memória de um guest em execução não podem ser alterados abaixo dele, então um redimensionamento em uma instância em execução é um `409`. Pare, redimensione, inicie.
  </Step>

  <Step title="O novo tamanho é aplicado no próximo início">
    A chamada grava o alvo e retorna. O guest aparece no novo flavor quando você o inicia — não há nenhuma etapa de confirmação separada e nenhum estado em que a instância é redimensionada pela metade.
  </Step>
</Steps>

<Warning>
  **Um redimensionamento não move a instância para outro host.** Crescer significa que a vCPU e a RAM extras precisam estar livres no host em que ela já está, portanto, um redimensionamento pode ser recusado por causa da capacidade, enquanto a região como um todo tem bastante. Mover para um tipo de instância `dedicated` é o caso mais estrito: ele precisa de threads inteiros em que nada mais possa rodar, o que um host ocupado-mas-não-cheio pode não ter.
</Warning>

Mais duas recusas, ambas `400`: redimensionamento para o tipo de instância que a instância já usa, e redimensionamento para um `loadbalancer` ou `database` flavor.

O limite de rede de uma instância se move com o tipo de instância como parte do redimensionamento, portanto, um downsize também desiste da largura de banda do tipo de instância maior.

<a id="reinstall" />

## Reinstalar

`POST /v1/instances/{instance_id}/reinstall` re-imagina o disco de inicialização enquanto mantém a própria instância. Também parado-somente, e também aplicado no próximo início.

<Columns cols={2}>
  <Card title="Mantido" icon="check">
    O ID, nome, CRN, endereços IP e MAC da instância, suas interfaces de rede, sua semente de início de nuvem e **cada volume de dados anexado**.
  </Card>

  <Card title="Substituído" icon="triangle-alert">
    Um novo volume é clonado a partir da imagem e trocado, e o volume de inicialização é criado.
    **o antigo é apagado.** Tudo no sistema de arquivos raiz foi embora.
  </Card>
</Columns>

<Tabs>
  <Tab title="Console">
    O console chama esse **Replace root volume**, e ele está na guia **Settings** da instância, na zona de perigo. Ele abre um cartão **Image** e um cartão **Boot volume** — *Sistema operacional para o volume raiz de substituição. O atual é excluído* — e confirma com o nome da instância digitado de volta.

    <Note>
      Mesma operação, nome diferente. Nada no console é rotulado como "reinstalar": procure por **Replace root volume**, que é a descrição mais literal do que acontece com o 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 é opcional. Omita `image` e ele reinstala a partir da imagem que a instância já tem; omita `size_gb` e a substituição é a imagem `min_disk_gb`; omita `volume_type` e ele aterrissa na região padrão. O mesmo piso se aplica como no lançamento — `size_gb` deve ser pelo menos o `min_disk_gb` da imagem, e dentro de 1–16384 GB.

Como os endereços sobrevivem, reinstalar é a operação para "mesma máquina, sistema operacional limpo" — uma reconstrução onde qualquer coisa apontando para a instância continua funcionando.

<a id="delete" />

## Apagar

<Tabs>
  <Tab title="Console">
    **Delete instance** está na guia **Settings** da instância, na zona de perigo. A confirmação reafirma a regra abaixo — *Volumes marcados como excluídos no término são destruídos com ele; outros são separados e mantidos* — e precisa que o nome da instância seja digitado novamente.
  </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>

Ele responde `202`. A instância se move para `deleting`, o guest é desmontado e a linha é removida uma vez que suas interfaces e volumes tenham sido recuperados — então uma exclusão completa para de responder a leituras inteiramente, em vez de deixar uma linha `deleted` para trás.

Excluindo uma instância já existente `deleting` é aceito e re-dirige o teardown em vez de iniciar um segundo.

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

### O que sobrevive a uma exclusão

| | |
| - | - |
| Volume de inicialização | **Destruido.** Criado com `delete_on_termination: true`. |
| Lançamento-tempo `volumes` | Destruido, a menos que você tenha enviado `delete_on_termination: false`. |
| Um volume que você anexou mais tarde | **Relançado para `available`,** não destruído. |
| Um IP flutuante de `networks[].floating_ip_assignment` | Lançado — o lançamento alocou-o. |
| Um IP flutuante que você alocou e anexou | **Seu.** É separado e permanece alocado. |
| Imagens de | Sem tocar. Uma imagem não é escopo de instância. |

<Tip>
  Para manter um disco de inicialização após sua instância, inverta a bandeira no anexo: `PATCH /v1/instances/{instance_id}/volumes/{volume_id}` com `{"delete_on_termination": false}`. O volume é então desvinculado e retornado para `available` no teardown em vez de destruído. Isso funciona no volume de inicialização como qualquer outro anexo.

  No console, é o botão **Delete on termination** na guia **Volumes** da instância, um por anexo.
</Tip>


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