---
page_title: "beecloud: beecloud_server"
description: "Manages beecloud Instances"
---

# Ресурс: beecloud_server

Создание и управление серверами проекта в beecloud. Больше информации в [swagger](https://beecloud.vimpelcom.ru/api/v1/vps/swagger/index.html).

Ресурс может быть создан/прочитан/обновлен/удален. 
Обновляется только при монтировании/демонтировании доп.дисков или изменении тэгов, в остальных случаях - пересоздание.
Для защиты от случайного пересоздания можно использовать `lifecycle`:

```hcl
resource "beecloud_server" "test" {

    ...

    lifecycle {
      prevent_destroy = true
    }
}
```

Посмотреть текущее состояние ресурса:

```bash
$ terraform state show beecloud_server.test
```

## Примеры конфигураций

```hcl
resource "beecloud_server" "test" {
    flavor {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    image {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    region {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    name = "tf-create-server-test"

    root_volume {
        size = 40
        type = "hdd"
    }
}

output "beecloud_server_test" {
    value = beecloud_server.test
}
```

### С дополнительными дисками

```hcl
resource "beecloud_server" "test" {
    flavor {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    image {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    region {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    name = "tf-create-server-test"

    root_volumes {
        size = 40
        type = "hdd"
    }

    additional_volume_ids = ["XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"]
}
```
> Note: Поле с дисками может изменить состояние после использования ресурса `beecloud_volume`. Необходимо будет синхронизировать состояние.

### С тэгами

```hcl
resource "beecloud_server" "test" {
    flavor {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    image {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    region {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    name = "tf-create-server-test"

    root_volumes {
        size = 40
        type = "hdd"
    }

    additional_volume_ids = ["XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"]

    tags = ["dev", "test"]
}
```

### С управлением адресом
Передается UUID адреса. Он может быть заранее создан ресурсом "beecloud_address_ip".

```hcl
resource "beecloud_server" "test" {
    flavor {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    image {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    region {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    name = "tf-create-server-test"

    root_volumes {
        size = 40
        type = "hdd"
    }

    address = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
```

### С аффинити-группой
Передается UUID группы. Он может быть заранее создан ресурсом "beecloud_affinity_group".

```hcl
resource "beecloud_server" "test" {
    flavor {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    image {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    region {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    }
    name = "tf-create-server-test"

    root_volumes {
        size = 40
        type = "hdd"
    }

    affinity {
        id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    } 
}

```

>
>~> **На заметку**: Для примонтирования/демонтирования есть два способа: 
>1. Использовать поле `additional_volume_ids`
>2. Использовать ресурс `beecloud_volume_bind`
>
><span style="color:red">Не использовать вместе!</span>
>


## Аргументы

- `name` - (Обязательно) Наименование сервера (должно быть уникальным).
- `image` - (Обязательно) Данные об образе.
    - `id` - (Обязательно) ID образа.
- `region` - (Обязательно) Данные о регионе.
    - `id` - (Обязательно) ID региона.
- `flavor` - (Обязательно) Данные о тарифе.
    - `id` - (Обязательно) ID тарифа.
- `root_volume` - (Обязательно) Диски. Минимум один экземпляр для загрузочного диска.
    - `size` - (Обязательно) Размер диска.
    - `type` - (Обязательно) Тип диска.
- `additional_volume_ids` - (Опционально) Список дополнительных (примонтированных) дисков.
- `address` - (Опционально) Данные об адресе (Если нужно управлять адресом - лучше его отдельно выделить как ресурс и прописать его ID  в сервере)
    - `id` - ID адреса, с которым будет создан сервер
- `tags` - (Опционально) Список тэгов.
- `wait_completed` - (Опционально) По умолчанию: `true`. Этот ключ отвечает за ожидание полного создания сервера. Если переключить его в `false`, то ресурс не будет дожидаться полного создания сервера, сервер будет в статусе "Создается".
- `affinity` - (Опционально) Данные об аффинити-группе
    - `id` - ID аффинити-группы, с учетом правила которой будет создан сервер. Изменение ID повлечет пересоздание сервера.

## В дополнение к приведенным выше аргументам, возвращаются следующие параметры:

- `id` - ID в системе TF. Соответствует ID сервера.
- `server_id` - ID созданного сервера.
- `image` - Данные об образе.
    - `slug` - Слаг образа.
    - `name` - Имя образа. 
- `region` - Данные о регионе. 
    - `slug` - Слаг региона.
    - `name` - Имя региона.
- `flavor` - Данные о тарифе.
    - `slug`- Слаг тарифа.
    - `name` - Имя тарифа.
- `root_volume` - (Обязательно) Диски. Минимум один экземпляр для загрузочного диска.
    - `id` - ID загрузочного сервера.
    - `is_boot` - Определение типа: загрузочный диск (`true`) или дополнительный (`false`). Загрузочный может быть только один.
    - `name` - Имя диска (для загрузочных - наименование диска будет **`server_name`**`-boot`).
- `addresses` - Адрес сервера.
    - `id` - ID в системе TF. Соответствует ID адреса.
    - `project_id` - ID проекта.
    - `name` - наименование адреса.
    - `address` - значение IP адреса.
    - `version` - версия адреса (UNKNOWN/4/6).
    - `status` - статус адреса (UNKNOWN/USED/RESERVED).
    <!-- - `purpose` - назначение адреса. -->
    <!-- - `type` - тип адреса (UNKNOWN/EXTERNAL/INTERNAL). -->
    - `metadata` - дополнительные управляющие параметры.
- `status` - Статус сервера (ACTIVE/BUILD/ERROR..).
- `fqdn` - Имя домена.
- `tags` - Список тэгов.
- `affinity` - Данные об аффинити-группе
    - `id` - ID аффинити-группы.
    - `name` - Наименование группы
    - `project_id` - ID проекта
    - `policy` - политика группы (affinity/soft-affinity/anti-affinity/soft-anti-affinity)
    - `condition` - Текущее состояние группы(статус)


## Импорт

Задаем конфигурацию, которая будет управлять импортом
```
resource "beecloud_server" "import_server" {}

```
Передаем ID существующего сервера, состояние которого хотим импортировать "75429417-2a18-435c-92fa-dae26dac4e3e":

```bash
$ terraform import beecloud_server.import_server 75429417-2a18-435c-92fa-dae26dac4e3e
```

Затем все параметры состояния записываем в конфигурацию и синхронизируем.




