Функция доступна в провайдере версии 4.5.1 и выше.

_Resource_ функция **decort_cb_sep** служит для управления storage endpoint. Storage endpoint (sep) - точка доступа к хранилищу данных. Sep бывает четырех типов:

- des
- hitachi
- dorado
- tatlin

Каждый тип отличается возможной конфигурацией.  
_Resource_ функция **decort_cb_sep** позволяет создавать, редактировать, удалять sep. Кроме этого, с помощью этой функции можно добавлять, редактировать конфигурацию sep. Обо всех доступных полях конфигурации для каждого типа storage endpoint см. ниже.

## Аргументы

_Resource_ функция **decort_cb_sep** принимает следующие аргументы:

| Аргумент           | Тип                                                                              | Обязательный       | Описание                                                                                                                                                                                                                                                   |
|--------------------|----------------------------------------------------------------------------------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| gid                | int                                                                              | :heavy_check_mark: | Grid id                                                                                                                                                                                                                                                    |
| name               | string                                                                           | :heavy_check_mark: | Наименование sep                                                                                                                                                                                                                                           |
| type               | string                                                                           | :heavy_check_mark: | Тип sep.<br/>Возможные значения:<br/>des<br/>hitachi<br/>tatlin<br/>dorado                                                                                                                                                                                 |
| desc               | string                                                                           | :x:                | Описание sep, используется при создании sep                                                                                                                                                                                                                |
| config             | json string                                                                      | :x:                | Конфигурация sep. Используется при создании и редактировании sep<br/>Не использовать вместе с field_edit                                                                                                                                                   |
| enable             | bool                                                                             | :x:                | Доступность sep, используется при создании и редактировании sep                                                                                                                                                                                            |
| consumed_by        | []int                                                                            | :x:                | Используемые nodes, используется при создании и редактировании sep                                                                                                                                                                                         |
| provided_by        | []int                                                                            | :x:                | Используемые provider nodes, используется при создании и редактировании sep                                                                                                                                                                                |
| upd_capacity_limit | bool                                                                             | :x:                | Обновление предела емкости, используется при редактировании sep                                                                                                                                                                                            |
| decommission       | bool                                                                             | :x:                | Отвязывание всех зависимостей от sep (отвязывание nodes)<br/>Используется вместе с параметром clear_physically                                                                                                                                             |
| clear_physically   | bool                                                                             | :x:                | Физическое очищение nodes                                                                                                                                                                                                                                  |
| field_edit         | Struct{<br/>field_name string<br/>field_value string<br/>field_type string<br/>} | :x:                | Редактирование/добавление поля, используется при редактировании sep<br/>&nbsp;<br/>Наименование поля<br/>&nbsp;<br/>Значение поля<br/>&nbsp;<br/>Тип поля. Возможные значения: str, int, dict, list, bool<br/> &nbsp;<br/> Не использовать вместе с config |
| sep_id             | int                                                                              | :x:                | Используется для формирования .tfstate, в случае его удаления и присутствия sep с указанным id в системе                                                                                                                                                   |
| account_ids        | []int                                                                            | :x:                | Предоставление/отключение доступа указанных аккаунтов к sep, используется при создании и редактировании sep                                                                                                                                                |
| access_to_pool     | Struct{<br/>pool_name string<br/>account_id_pool int<br/>rg_id int<br/>}         | :x:                | Предоставление/отключение доступа к пулу на sep<br/>&nbsp;<br/>Название pool (обязательный параметр)<br/>&nbsp;<br/>id аккаунта<br/>&nbsp;<br/>id ресурсной группы                                                                                         |

## Возвращаемые значения

В случае успешного выполнения _data source_ функция **decort_cb_sep** возвращает в указанную при вызове переменную элемент, который состоит из следующих параметров:

| Параметр           | Тип                                                                              | Описание                                                                                                                                                                                                                          |
|--------------------|----------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 
| sep_id             | int                                                                              | id storage endpoint                                                                                                                                                                                                               |
| ckey               | string                                                                           | CKey                                                                                                                                                                                                                              |
| meta               | []string                                                                         | Мета информация о sep                                                                                                                                                                                                             |
| consumed_by        | []int                                                                            | Список node id, использующих sep                                                                                                                                                                                                  |
| desc               | string                                                                           | Описание sep                                                                                                                                                                                                                      |
| gid                | int                                                                              | Grid id, к которому привязан sep                                                                                                                                                                                                  |
| guid               | int                                                                              | Внутренний id sep                                                                                                                                                                                                                 |
| milestones         | int                                                                              | Вехи                                                                                                                                                                                                                              |
| name               | string                                                                           | Наименование sep                                                                                                                                                                                                                  |
| obj_status         | string                                                                           | Статус sep                                                                                                                                                                                                                        |
| provided_by        | []int                                                                            | Список provider id, использующих sep                                                                                                                                                                                              |
| shared_with        | []int                                                                            | Список id учетных записей, у которых есть доступ к sep                                                                                                                                                                            |
| tech_status        | string                                                                           | Технический статус sep                                                                                                                                                                                                            |
| type               | string                                                                           | Тип sep                                                                                                                                                                                                                           |
| config             | json string                                                                      | Конфигурация sep                                                                                                                                                                                                                  |
| upd_capacity_limit | bool                                                                             | Обновление предела емкости, используется при редактировании sep                                                                                                                                                                   |
| decommission       | bool                                                                             | Отвязывание всех зависимостей от sep (отвязывание nodes)<br/>Используется вместе с параметром clear_physically                                                                                                                    |
| clear_physically   | bool                                                                             | Физическое очищение nodes                                                                                                                                                                                                         |
| enable             | bool                                                                             | Доступность sep, используется при создании и редактировании sep                                                                                                                                                                   |
| field_edit         | Struct{<br/>field_name string<br/>field_value string<br/>field_type string<br/>} | Редактирование/добавление поля, используется при редактировании sep<br/>&nbsp;<br/>Наименование поля<br/>&nbsp;<br/>Значение поля<br/>&nbsp;<br/>Тип поля. Возможные значения: str, int, dict, list, bool<br/> &nbsp;<br/> &nbsp; |
| account_ids        | []int                                                                            | Предоставление/отключение доступа указанных аккаунтов к sep, используется при создании и редактировании sep                                                                                                                       |
| access_to_pool     | Struct{<br/>pool_name string<br/>account_id_pool int<br/>rg_id int<br/>}         | Предоставление/отключение доступа к пулу на sep<br/>&nbsp;<br/>Название pool (обязательный параметр)<br/>&nbsp;<br/>id аккаунта<br/>&nbsp;<br/>id ресурсной группы                                                                |

## Пример использования

Пример вызова _resource_ функции **decort_cb_sep**:

```terraform
resource "decort_cb_sep" "s" {
  gid = 111
  name = "test sep"
  type = "des"

  #desc = "description"
  #config = file("./config.json")

  #внимание, во избежание конфликтов не использовать с полем config
  /*
  field_edit {
    field_name  = "edgeuser_password"
    field_value = "mosk"
    field_type  = "str"
  }
  */

  #enable             = false
  #consumed_by        = [23,21]
  #upd_capacity_limit = true
  #provided_by = [16, 14, 15]
  #decommission      = true
  #clear_physically = false

  #account_ids = [12, 245]
  #access_to_pool {
    #pool_name  = "pool name"
    #account_id_pool = 123
    #rg_id  = 1234
  #}
}
# once the above directive completes, sep will be accessible
# as decort_cb_sep.s

# and config will be accessible
# as decort_cb_sep.s.config
```

Данный пример подразумевает, что ранее по тексту tf-файла выполнена корректная инициализация провайдера (подробнее об инициализации Terraform провайдера DECORT см. соответствующий [раздел](https://repository.basistech.ru/BASIS/wiki-terraform-provider-decort/src/branch/main/4.5.2/04.02-Инициализация-Terraform-провайдера-DECORT.md)).

После успешного завершения такого вызова **decort_cb_sep** в переменной `decort_cb_sep.s` будут сохранены возвращаемые значения.

Чтобы получить доступ к конфигурации и сохранить ее в файл .json, необходимо:

1. определить в .tf - файле дополнительный output с любым именем, в который запишется информация о конфигурации sep и обернуть ее в вызов функции jsondecode для декодирования информации.

```terraform
output "sep_config" {
    value = jsondecode(decort_cb_sep.s.config)
}
```

2. Применить изменения в терраформе.

```bash
terraform apply
```

3. Сохранить данные из output в .json - файл.

```bash
terraform output -json sep_config >> config.json
```

В общем случае это будет выглядеть как указано ниже.

```bash
terraform output -json <output-name> >> <file-name>.json
```

## Примеры возможных конфигураций для разных типов sep

Поля в разных версиях decort могут отличаться.
Конфигурация перед отправкой проходит валидацию.

### des

| Поле              | Тип      | Описание                    |
| ----------------- | -------- | --------------------------- |
| API_IPs           | []string | Список ip адресов для api   |
| protocol          | string   | Протокол сообщения с sep    |
| decs3o_app_secret | string   | Секретный ключ decs3o       |
| format            | string   | Формат передачи данных      |
| edgeuser_password | string   | Пароль пользователя         |
| edgeuser_name     | string   | Имя пользователя            |
| decs3o_app_id     | string   | APP ID, полученный в decs3o |
| transport         | string   | Транспортный протокол       |

```json
{
  "API_IPs": ["11.111.1.11", "11.111.1.12", "11.111.1.13", "11.111.1.14"],
  "protocol": "des",
  "decs3o_app_secret": "",
  "format": "raw",
  "edgeuser_password": "somepassword",
  "housekeeping_settings": {
    "disk_del_queue": {
      "purgatory_id": 1
    }
  },
  "edgeuser_name": "someusername",
  "decs3o_app_id": "",
  "ovs_settings": {},
  "pools": [
    {
      "types": ["D"],
      "referenceId": "somerefid",
      "name": "poolname2",
      "pagecache_ratio": 100,
      "uris": [
        {
          "ip": "11.111.1.11",
          "port": 11
        },
        {
          "ip": "11.111.1.12",
          "port": 11
        },
        {
          "ip": "11.111.1.13",
          "port": 11
        },
        {
          "ip": "11.111.1.14",
          "port": 11
        }
      ]
    },
    {
      "types": ["D"],
      "referenceId": "somerefid2",
      "name": "poolname1",
      "pagecache_ratio": 100,
      "uris": [
        {
          "ip": "11.111.1.11",
          "port": 12
        },
        {
          "ip": "11.111.1.12",
          "port": 12
        },
        {
          "ip": "11.111.1.13",
          "port": 12
        },
        {
          "ip": "11.111.1.14",
          "port": 12
        }
      ]
    },
    {
      "types": ["B"],
      "referenceId": "somerefid3",
      "name": "myname",
      "pagecache_ratio": 100,
      "uris": [
        {
          "ip": "11.111.1.11",
          "port": 13
        },
        {
          "ip": "11.111.1.12",
          "port": 13
        },
        {
          "ip": "11.111.1.13",
          "port": 13
        },
        {
          "ip": "11.111.1.14",
          "port": 13
        }
      ]
    }
  ],
  "transport": "tcp"
}
```

### hitachi

| Поле          | Тип      | Описание                  |
| ------------- | -------- | ------------------------- |
| API_URLs      | []string | Список адресов для api    |
| SN            | string   | Серийный номер            |
| format        | string   | Формат передачи данных    |
| disk_max_size | int      | Максимальный размер диска |
| mgmt_password | string   | Пароль пользователя       |
| mgmt_user     | string   | Имя пользователя          |
| model         | string   | Модель                    |
| name_prefix   | string   | Префикс в имени           |
| protocol      | string   | Протокол сообщения        |
| ssl_verify    | bool     | Проверка ssl              |

```json
{
  "API_URLs": ["https://11.11.111.11:11", "https://11.11.111.12:11"],
  "SN": 1111,
  "disk_max_size": 111,
  "format": "raw",
  "hostGroupNumMax": 1,
  "hostGroupNumMin": 1,
  "hostGroupNumber": 1,
  "housekeeping_settings": {
    "disk_del_queue": {
      "purge_attempts_threshold": 20
    }
  },
  "mgmt_password": "pwd",
  "mgmt_user": "username",
  "model": "model",
  "name_prefix": "my-prefix-",
  "pools": [
    {
      "clone_technology": "snapshot",
      "id": 1,
      "maxLdevId": 1111,
      "minLdevId": 111,
      "name": "my-prefix-01",
      "snapshot_pool_id": 1,
      "snapshotable": true,
      "types": ["D", "B", "ANY"],
      "usage_limit": 999999999
    },
    {
      "clone_technology": "snapshot",
      "id": 2,
      "maxLdevId": 1111,
      "minLdevId": 111,
      "name": "my-prefix-92-snap",
      "snapshot_pool_id": 1,
      "snapshotable": true,
      "types": [],
      "usage_limit": 111
    }
  ],
  "ports": ["port-name-1", "port-name-2"],
  "protocol": "scsi",
  "ssl_verify": false
}
```

### dorado

| Поле              | Тип      | Описание                  |
| ----------------- | -------- | ------------------------- |
| API_URLs          | []string | Список адресов для api    |
| edgeuser_password | string   | Пароль пользователя       |
| edgeuser_name     | string   | Имя пользователя          |
| format            | string   | Формат передачи данных    |
| disk_max_size     | int      | Максимальный размер диска |
| mgmt_password     | string   | Пароль пользователя       |
| mgmt_user         | string   | Имя пользователя          |
| model             | string   | Модель                    |
| name_prefix       | string   | Префикс в имени           |
| protocol          | string   | Протокол сообщения        |

```json
{
  "API_URLs": ["https://111.11.111.111:11/"],
  "disk_max_size": 111,
  "edgeuser_name": "username",
  "edgeuser_password": "pwd",
  "format": "raw",
  "groups": {
    "hostgroup": ["hostname", "1"],
    "lungroup": ["hostname_lungroup", "2"],
    "portgroup": ["hostname_portgroup", "3"]
  },
  "hostGroupName": "hostname",
  "housekeeping_settings": {
    "disk_del_queue": {
      "purge_attempts_threshold": 20
    }
  },
  "mgmt_password": "pwd2",
  "mgmt_user": "username2",
  "model": "Dorado",
  "name_prefix": "my-prefix-",
  "pools": [
    {
      "name": "pool1",
      "types": ["D", "B", "ANY"],
      "usage_limit": 111111
    }
  ],
  "ports": [
    {
      "ip": "11.111.1.111",
      "name": "port1"
    },
    {
      "ip": "11.111.1.112",
      "name": "port2"
    },
    {
      "ip": "11.111.1.113",
      "name": "myport3"
    }
  ],
  "protocol": "iscsi"
}
```

### tatlin

| Поле              | Тип      | Описание                  |
| ----------------- | -------- | ------------------------- |
| API_URLs          | []string | Список адресов для api    |
| edgeuser_password | string   | Пароль пользователя       |
| edgeuser_name     | string   | Имя пользователя          |
| format            | string   | Формат передачи данных    |
| disk_max_size     | int      | Максимальный размер диска |
| mgmt_password     | string   | Пароль пользователя       |
| mgmt_user         | string   | Имя пользователя          |
| model             | string   | Модель                    |
| name_prefix       | string   | Префикс в имени           |
| protocol          | string   | Протокол сообщения        |

```json
{
  "API_URLs": ["ssh://111.11.11.11:43"],
  "disk_max_size": 1111,
  "edgeuser_name": "usrname",
  "edgeuser_password": "pwd",
  "format": "raw",
  "hostGroupName": "mygroupname",
  "housekeeping_settings": {
    "disk_del_queue": {
      "purge_attempts_threshold": 20
    }
  },
  "mgmt_password": "pwd2",
  "mgmt_user": "usrname",
  "model": "Tatlin",
  "name_prefix": "my-prefix-",
  "pools": [
    {
      "name": "pool-name",
      "types": ["D", "B"],
      "usage_limit": 11111
    }
  ],
  "ports": [
    {
      "ips": ["111.11.111.113", "111.11.111.114"],
      "iqn": "some_iqn_string",
      "name": "myportname"
    },
    {
      "ips": ["111.11.111.113", "111.11.111.114"],
      "iqn": "myiqnstring",
      "name": "myportname"
    }
  ],
  "protocol": "iscsi",
  "techDisk": {
    "name": "mydiskname",
    "pool": "pool-name",
    "size": 1,
    "wwid": "wwidstring"
  }
}
```
