diff --git a/07.12-Resource-функция-decort_sep-управление-sep..md b/07.12-Resource-функция-decort_sep-управление-sep..md new file mode 100644 index 0000000..1368306 --- /dev/null +++ b/07.12-Resource-функция-decort_sep-управление-sep..md @@ -0,0 +1,450 @@ +Функция доступна в провайдере версии 2.2 и выше. + +**Внимание:** необходимы права администратора. + +_Resource_ функция **decort_sep** служит для управления storage endpoint. Storage endpoint (sep) - точка доступа к хранилищу данных. Sep бывает четырех типов: +- des +- hitachi +- dorado +- tatlin + +Каждый тип отличается возможной конфигурацией. +_Resource_ функция **decort_sep** позволяет создавать, редактировать, удалять sep. Кроме этого, с помощью этой функции можно добавлять, редактировать конфигурацию sep. Обо всех доступных полях конфигурации для каждого типа storage endpoint см. ниже. + +## Аргументы +_Resource_ функция **decort_sep** принимает следующие аргументы: + +| Аргумент | Тип | Обязательный | Описание | +| --- | --- | --- | --- | +| gid | int | :heavy_check_mark: | Grid id | +| name | string | :heavy_check_mark: | Наименование sep | +| type | string | :heavy_check_mark: | Тип sep.
Возможные значения:
des
hitachi
tatlin
dorado | +| desc | string | :x: | Описание sep, используется при создании sep | +| config | json string | :x: | Конфигурация sep. Используется при создании и редактировании sep | +| 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)
Используется вместе с параметром clear_physically | +| clear_physically | bool | :x: | Физическое очищение nodes | +| field_edit | Struct{
field_name string
field_value string
field_type string
} | :x: | Редактирование/добавление поля, используется при редактировании sep
 
Наименование поля
 
Значение поля
 
Тип поля. Возможные значения: str, int, dict, list, bool
 
  | +| sep_id | int | :x: | Используется для формирования .tfstate, в случае его удаления и присутствия sep с указанным id в системе | + + +## Возвращаемые значения +В случае успешного выполнения _data source_ функция **decort_sep** возвращает в указанную при вызове переменную элемент, который состоит из следующих параметров: + +| Параметр | Тип | Описание | +| --- | --- | --- | +| sep_id | int | id storage endpoint | +| 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 | +| tech_status | string | Технический статус sep | +| type | string | Тип sep | +| config | json string | Конфигурация sep | +| upd_capacity_limit | bool | :x: | Обновление предела емкости, используется при редактировании sep | +| decommission | bool | :x: | Отвязывание всех зависимостей от sep (отвязывание nodes)
Используется вместе с параметром clear_physically | +| clear_physically | bool | :x: | Физическое очищение nodes | +| enable | bool | :x: | Доступность sep, используется при создании и редактировании sep | +| field_edit | Struct{
field_name string
field_value string
field_type string
} | :x: | Редактирование/добавление поля, используется при редактировании sep
 
Наименование поля
 
Значение поля
 
Тип поля. Возможные значения: str, int, dict, list, bool
 
  | + +## Пример использования +Пример вызова _data source_ функции **decort_sep**: +```terraform +resource "decort_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 +} +# once the above directive completes, sep will be accessible +# as decort_sep.s + +# and config will be accessible +# as decort_sep.s.config +``` + +Данный пример подразумевает, что ранее по тексту tf-файла выполнена корректная инициализация провайдера (подробнее об инициализации Terraform провайдера DECORT см. соответствующий [раздел](https://github.com/rudecs/terraform-provider-decort/wiki/05.-%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-Terraform-%D0%BF%D1%80%D0%BE%D0%B2%D0%B0%D0%B9%D0%B4%D0%B5%D1%80%D0%B0-DECORT.)). + +После успешного завершения такого вызова **decort_sep** в переменной `decort_sep.s` будут сохранены возвращаемые значения. + +Чтобы получить доступ к конфигурации и сохранить ее в файл .json, необходимо: +1. определить в .tf - файле дополнительный output с любым именем, в который запишется информация о конфигурации sep и обернуть ее в вызов функции jsondecode для декодирования информации. +```terraform +output "sep_config" { + value = jsondecode(decort_sep.s.config) +} +``` +2. Применить изменения в терраформе. +```bash +terraform apply +``` +3. Сохранить данные из output в .json - файл. +```bash +terraform output -json sep_config >> config.json +``` + +В общем случае это будет выглядеть как указано ниже. +```bash +terraform output -json >> .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" + } +} +```