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

# Object Storage (Terraform)

> Terraform resources and data sources for NEO Object Storage

NEO Object Storage is Biznet GIO's S3-compatible storage (`/object-storages` API group). The provider manages the subscription itself, buckets, S3 credentials, and individual objects through the control-plane API.

<Info>
  Every create/upgrade places a **real paid order**. Quota upgrades are grow-only and bill the increment.
</Info>

## `biznetgio_object_storage`

The subscribed Object Storage instance (S3 tenant). Quota is grow-only; updates send the increment.

```hcl theme={null}
resource "biznetgio_object_storage" "example" {
  product_id           = 8
  cycle                = "m"
  label                = "data-archive"
  quota                = 10
  pay_with_credit_card = true
}
```

| Name                   | Type   | Mode                | Notes                                             |
| ---------------------- | ------ | ------------------- | ------------------------------------------------- |
| `id`                   | string | computed            | equals numeric `account_id`                       |
| `product_id`           | int64  | required            | create-only                                       |
| `cycle`                | string | required            | `m a q s b t p4 p5`; create-only                  |
| `label`                | string | required            | 6–16 chars, `[a-zA-Z0-9\-_]`; create-only         |
| `quota`                | int64  | optional            | default `10` GB, minimum 10, grow-only            |
| `promocode`            | string | optional            | create-only                                       |
| `pay_with_credit_card` | bool   | optional            | default `true`                                    |
| `order_id`             | string | computed            |                                                   |
| `status`               | string | computed            | `Active` / `Pending` / `Suspended` / `Terminated` |
| `raw`                  | string | computed, sensitive |                                                   |
| `timeouts`             | block  | optional            | create/update/delete                              |

Import with the numeric account id.

## `biznetgio_object_storage_bucket`

A bucket inside an instance. Only the ACL is mutable.

```hcl theme={null}
resource "biznetgio_object_storage_bucket" "assets" {
  account_id = biznetgio_object_storage.example.id
  name       = "my-assets"
  acl        = "private"
}
```

| Name         | Type   | Mode                | Notes                                                                                                          |
| ------------ | ------ | ------------------- | -------------------------------------------------------------------------------------------------------------- |
| `id`         | string | computed            | composite `<account_id>:<bucket_name>`                                                                         |
| `account_id` | string | required            | instance account id                                                                                            |
| `name`       | string | required            | min 3 chars, `[a-zA-Z0-9\-_]`; immutable                                                                       |
| `acl`        | string | optional            | default `""`; one of `private`, `public-read`, `public-read-write`, `authenticated-read`, `log-delivery-write` |
| `raw`        | string | computed, sensitive |                                                                                                                |

**Import ID format:** `<account_id>:<bucket_name>`, e.g. `terraform import biznetgio_object_storage_bucket.assets 12345:my-assets`.

## `biznetgio_object_storage_credential`

An S3 access/secret key pair. The secret key is shown only once at creation and can never be re-fetched.

```hcl theme={null}
resource "biznetgio_object_storage_credential" "main" {
  account_id = biznetgio_object_storage.example.id
  active     = true   # set false to disable without deleting
}
```

| Name         | Type   | Mode                | Notes                                                                                                    |
| ------------ | ------ | ------------------- | -------------------------------------------------------------------------------------------------------- |
| `id`         | string | computed            | `<account_id>:<16-hex sha256 prefix of access_key>` - the plaintext access key is never stored in the id |
| `account_id` | string | required            |                                                                                                          |
| `access_key` | string | computed, sensitive | returned once at create                                                                                  |
| `secret_key` | string | computed, sensitive | shown only once; preserved from state on refresh                                                         |
| `active`     | bool   | optional            | default `true`; update toggles enable/disable                                                            |
| `raw`        | string | computed, sensitive |                                                                                                          |

**Import ID format:** `<account_id>:<access_key>` - the access key may be given literally or in its 16-hex hashed form.

## `biznetgio_object_storage_object`

Convenience wrapper that uploads a single object through the control-plane API. Exactly one of `source` or `content` must be set.

```hcl theme={null}
resource "biznetgio_object_storage_object" "index" {
  account_id = biznetgio_object_storage.example.id
  bucket     = biznetgio_object_storage_bucket.assets.name
  key        = "site/index.html"
  source     = "./index.html"
  acl        = "public-read"
}
```

| Name         | Type   | Mode                | Notes                                          |
| ------------ | ------ | ------------------- | ---------------------------------------------- |
| `id`         | string | computed            | composite `<account_id>:<bucket>:<key>`        |
| `account_id` | string | required            |                                                |
| `bucket`     | string | required            |                                                |
| `key`        | string | required            | object path                                    |
| `source`     | string | optional            | local file path; one-of with `content`         |
| `content`    | string | optional, sensitive | inline content; one-of with `source`           |
| `acl`        | string | optional            | default `""`; same canned values as bucket ACL |
| `raw`        | string | computed, sensitive |                                                |

Content changes replace the object; only `acl` updates in place.

<Note>
  This resource is **not** suited to large objects or bulk sync. For real workloads, use S3-compatible tooling (AWS CLI, rclone, SDKs) with the credential from `biznetgio_object_storage_credential` - Biznet GIO publishes per-region S3 endpoints of the form `nos.<region>.neo.id`.
</Note>

**Import ID format:** `<account_id>:<bucket>:<key>`, e.g. `terraform import biznetgio_object_storage_object.index 12345:my-assets:site/index.html`.

## Data sources

### `biznetgio_object_storage_instances`

```hcl theme={null}
data "biznetgio_object_storage_instances" "all" {
  status = "Active"   # optional filter: Active | Pending | Suspended | Terminated
}
```

`instances` items: `id`, `label`, `status`, `product_id`, `quota`, `raw`.

### `biznetgio_object_storage_buckets`

Buckets inside an instance (`account_id` argument required). Items: `name`, `acl`, `raw`.

### `biznetgio_object_storage_credentials`

Credentials of an instance (`account_id` argument required). Items: `access_key` (sensitive), `active`. Secret keys are never returned.
