_Resource_ функция **dynamix_account** служит для управления аккаунтами. Аккаунты в платформе позволяют создавать ресурсные группы, вычислительные мощности (computes), виртуальные сети, управлять ресурсами и так далее. Аккаунты создают пользователи (user). Все административное взаимодействие внутри платформы строится на аккаунтах.

**Пользователи без административных прав могут только импортировать существующие аккаунты, используя следующую команду:**
```bash
terraform import dynamix_account.<наименование-ресурса> <ID-аккаунта>
```
После импорта конфигурации управление аккаунтом доступно в прежнем порядке.

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

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | :---: | --- |
| account_name | string | :heavy_check_mark: | Имя аккаунта<br/>Используется при создании и редактировании |
| username | string | :heavy_check_mark: | Имя пользователя - владельца аккаунта<br/>Используется при создании |
| resource_limits | Struct{} [см. ниже](#описание-структуры-resource_limits_input) | :x: | Ресурсы аккаунта |
| enable | bool | :x: | Флаг доступности аккаунта<br/>Используется при редактировании |
| restore | bool | :x: | Флаг восстановления аккаунта<br/>Используется при редактировании |
| users | []Struct{} [см. ниже](#описание-структуры-users) | :x: | Поле для того чтобы задать пользователей |
| permanently | bool | :x: | Флаг удаления аккаунта<br/>Если выставлен в true, то аккаунт и все с ним связанное удаляется моментально<br/>Если false - то аккаунт попадает в "корзину", где хранится некоторое время. Из "корзины" аккаунт можно восстановить<br/>По-умолчанию: false<br/>Используется при удалении |

### Описание структуры resource_limits_input
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | :---: | --- |
| cu_c | float | :x: | Количество ядер CPU |
| cu_d | float | :x: | Размер диска |
| cu_i | float | :x: | Количество публичных IP адресов |
| cu_m | float | :x: | размер RAM |
| cu_np | float | :x: | Хранилище траффика |
| gpu_units | float | :x: | количество GPU ядер |

### Описание структуры users
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | :---: | --- |
| user_id | string | :heavy_check_mark: | ID пользователя(его имя) |
| access_type | string | :heavy_check_mark: | Тип доступа пользователя. R - чтение, RCX - запись, ARCXDU - админ |

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

| Параметр | Тип | Описание |
| --- | --- | --- |
| dc_location | string | dc location |
| ckey | string | CKey |
| account_id | int | ID аккаунта |
| account_name | string | Название аккаунта |
| acl | []Struct{} [см. ниже](#описание-структуры-acl) | Более подробная информация об аккаунтах |
| company | string | Название компании, которой принадлежит аккаунт |
| companyurl | string | url-адрес компани |
| compute_features | []string | Доступ к дополнительным функциям управления ВМ |
| created_by | string | Пользователь - создателя аккаунта |
| created_time | int | Время создания аккаунта |
| deactivation_time | float | Время деактивации аккаунта |
| deleted_by | string | Пользователь, удаливший аккаунт |
| deleted_time | int | Время удаления аккаунта |
| displayname | string | Отображаемое имя аккаунта |
| guid | int | Внутренний guid аккаунта |
| resource_limits | Struct{} [см. ниже](#описание-структуры-resource_limits) | Ограничения ресурсов |
| send_access_emails | bool | Флаг, отправлять ли на указанную почту письмо о доступе |
| cpu_allocation_parameter | string | Параметр выделения CPU |
| cpu_allocation_ratio | float | Отношение выделения CPU |
| status | string | Статус аккаунта |
| updated_time | int | Время последнего обновления |
| version | int | Версия аккаунта |
| vins | []int | Список id виртуальных сетей |
| vinses | []int | Список id виртуальных сетей |
| computes | Struct{} [см .ниже](#описание-структуры-computes) | Информация о вычислительных мощностях |
| machines | Struct{} [см .ниже](#описание-структуры-machines) | Информация о виртуальных машинах (устаревшее) |

### Описание структуры acl
| Параметр | Тип | Описание |
| --- | --- | --- |
| can_be_deleted | bool | Может ли быть удален |
| explicit | bool | Видимость аккаунта |
| guid | string | GUID |
| right | string | Права |
| status | string | Статус |
| type | string | Тип |
| user_group_id | string | ID группы юзеров |

### Описание структуры resource_limits
| Параметр | Тип | Описание |
| --- | --- | --- |
| cu_c | float | Количество ядер CPU |
| cu_d | float | Размер диска |
| cu_dm | float | Использованный размер хранилища виртуального диска |
| cu_i | float | Количество публичных IP адресов |
| cu_m | float | размер RAM |
| cu_np | float | Хранилище траффика |
| gpu_units | float | количество GPU ядер |

### Описание структуры computes
| Параметр | Тип | Описание |
| --- | --- | --- |
| started | int | Количество запущенных ВМ |
| stopped | int | Количество остановленных ВМ |

### Описание структуры machines
| Параметр | Тип | Описание |
| --- | --- | --- |
| halted | int | Количество остановленных ВМ |
| running | int | Количество запущенных ВМ |

## Пример использования
Пример вызова _resource_ функции **dynamix_account**:
```terraform
resource "dynamix_account" "a" {
  #имя аккаунта
  #обязательный параметр
  #тип - строка
  #используется при создании и редактировании аккаунта
  account_name = "new_my_account"

  #имя пользователя - создателя аккаунта
  #обязательный параметр
  #тип - строка
  username = "username@decs3o"

  #доступность аккаунта
  #необязательный параметр
  #тип - булев
  #может применяться при редактировании аккаунта
  #enable = true

  #id аккаунта, позволяет сформировать .tfstate, если аккаунт имеет в платформе
  #необязательный параметр
  #тип - целое число
  account_id = 11111

  #отправлять ли на электронную почту письмо о доступе
  #необязательный параметр
  #тип - булев
  #применяется при создании аккаунта и редактировании аккаунта
  #send_access_emails = true

  #добавление/редактирование/удаление пользователей, к которым привязан аккаунт
  #необязательный параметр
  #тип - объект, кол-во таких объектов не ограничено
  /*users {
    #id пользователя
    #обязательный параметр
    #тип - строка
    user_id     = "username_2@decs3o"

    #тип доступа пользователя
    #обязательный параметр
    #тип - строка
    #возможные параметры:
    #R - чтение
    #RCX - запись
    #ARCXDU - админ
    access_type = "R"
  }
  users {
    user_id     = "username_1@decs3o"
    access_type = "R"
  }*/

  #ограничение используемых ресурсов
  #необязательный параметр
  #тип - объект
  #используется при создании и редактировании
  resource_limits {
    #кол-во используемых ядер cpu
    #необязательный параметр
    #тип - целое число
    #если установлена -1 - кол-во неограничено
    cu_c = 2

    #кол-во используемой RAM в МБ
    #необязательный параметр
    #тип - целое число
    #если установлена -1 - кол-во неограничено
    cu_m = 1024

    #размер дисков, в ГБ
    #необязательный параметр
    #тип - целое число
    #если установлена -1 - размер неограничено
    cu_d = 23

    #кол-во используемых публичных IP
    #необязательный параметр
    #тип - целое число
    #если установлена -1 - кол-во неограничено
    cu_i = 2

    #ограничения на кол-во передачи данных, в ГБ
    #необязательный параметр
    #тип - целое число
    #если установлена -1 - кол-во неограничено
    cu_np = 2

    #кол-во графических процессоров
    #необязательный параметр
    #тип - целое число
    #если установлена -1 - кол-во неограничено
    gpu_units = 2
  }

  #восстановление аккаунта
  #необязательный параметр
  #тип - булев
  #применяется к удаленным аккаунтам
  #по-умолчанию - false
  #restore = false

  #мгновеное удаление аккаунта, если да - то аккаунт невозможно будет восстановить
  #необязательный параметр
  #тип - булев
  #используется при удалении аккаунта
  #по-умолчанию - false
  #permanently = true
}
```

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

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