51 Commits
5.3.0 ... 5.4.1

Author SHA1 Message Date
Dmitriy Smirnov
7d60e5f97b 5.4.1 2024-08-23 15:16:14 +03:00
bbc352715d Add docs for the modules version 5.4.0 2024-07-24 14:46:43 +03:00
c34f02f7bd Merge branch 'BANS-481' into 'dev_5.4.0'
Implement functionality of the API method `/cloudapi/account/audits` in the...

See merge request rudecs/dev/decort-ansible!107
2024-07-24 11:31:10 +00:00
3c6ce85dba Implement functionality of the API method /cloudapi/account/audits in the module decort_account_info 2024-07-24 14:23:35 +03:00
fe1e8a32f9 Merge branch 'BANS-480' into 'dev_5.4.0'
Implement functionality of the API method `/cloudapi/account/listFlipGroups`

See merge request rudecs/dev/decort-ansible!106
2024-07-24 08:38:40 +00:00
0ca3399026 Implement functionality of the API method /cloudapi/account/listFlipGroups 2024-07-23 17:53:45 +03:00
ce54341a64 Merge branch 'BANS-479' into 'dev_5.4.0'
Implement functionality of the API method `cloudapi/account/listTemplates`

See merge request rudecs/dev/decort-ansible!105
2024-07-23 11:13:58 +00:00
7422464109 Implement functionality of the API method cloudapi/account/listTemplates 2024-07-23 10:46:58 +03:00
0c0fde8470 Add the argument disk_type validation in the method DecortController.account_disks 2024-07-22 16:32:49 +03:00
aefc920e1a Merge branch 'BANS-478' into 'dev_5.4.0'
Implement functionality of the API method `cloudapi/account/listDisks`

See merge request rudecs/dev/decort-ansible!104
2024-07-22 10:49:19 +00:00
b73a57dd0d Implement functionality of the API method cloudapi/account/listDisks 2024-07-22 13:35:59 +03:00
cd663a4a01 Improve style of version compliance in README.md 2024-07-22 11:42:27 +03:00
0cdfa6a0ec Add annotation for result of the method DecortController.decort_api_call and improve its docstring code style 2024-07-21 11:31:47 +03:00
53938d9d94 Improve code style and docstring for the method DecortController.account_find 2024-07-21 11:02:57 +03:00
8e4ce18d8a Improve naming of some methods and variable in library/decort_account_info.py and module_utils/decort_utils.py 2024-07-21 10:11:57 +03:00
ced031bba8 Add docstring for the method DecortAccountInfo.mapped_vinses_params 2024-07-19 18:19:35 +03:00
25795e9fe9 Add docstring for the method DecortAccountInfo.mapped_rg_params 2024-07-19 18:18:45 +03:00
a46ed24168 Add docstring for the method DecortAccountInfo.mapped_computes_params 2024-07-19 18:16:53 +03:00
53ba9a4f02 Add brief docstring for the method DecortController.account_vinses 2024-07-19 16:50:50 +03:00
682f19c4ce Add brief docstring for the method DecortController.account_computes 2024-07-19 16:50:06 +03:00
3516843c41 Add brief docstring for the method DecortController.account_resource_groups 2024-07-19 16:48:50 +03:00
94586345a1 Add brief docstring for the method DecortController.account_resource_consumption 2024-07-19 16:47:10 +03:00
c1dfaccb61 Merge branch 'BANS-477' into 'dev_5.4.0'
Implement functionality of the API method `cloudapi/account/listVins` in...

See merge request rudecs/dev/decort-ansible!103
2024-07-19 13:08:11 +00:00
d99af4498a Implement functionality of the API method cloudapi/account/listVins in decort_account_info module 2024-07-19 15:59:05 +03:00
a0805d45b3 Update docstring and args type hints for the method DecortController.account_find 2024-07-19 13:09:43 +03:00
3b2be18346 Add decorator for adding the name of called method to the string self.result['waypoints']. 2024-07-19 11:42:23 +03:00
f230325968 Remove erroneously added module decort_account_info parameters 2024-07-18 17:55:30 +03:00
1d56940e7e Merge branch 'BANS-476' into 'dev_5.4.0'
Implement functionality of `cloudapi/account/listComputes` API method in...

See merge request rudecs/dev/decort-ansible!102
2024-07-18 13:40:41 +00:00
10dba22834 Implement functionality of cloudapi/account/listComputes API method in decort_account_info module 2024-07-18 16:30:58 +03:00
b6bbc31961 Merge branch 'BANS-475' into 'dev_5.4.0'
Implement functionality of `/cloudapi/account/listRG` API method in `decort_account_info` module

See merge request rudecs/dev/decort-ansible!101
2024-07-17 12:36:08 +00:00
412bd704f1 Implement functionality of /cloudapi/account/listRG API method in decort_account_info module 2024-07-17 15:33:32 +03:00
77a2b6a182 Refactor DecortAccountInfo class (MODULE_ARGS attribute -> module_args property) 2024-07-16 15:49:15 +03:00
f00055e009 Refactor DecortController.account_find method 2024-07-16 15:11:33 +03:00
37de8afbc1 (2)Remove required=False optional setting from decort_account_info module argument specification 2024-07-16 11:28:07 +03:00
53e30105b1 Remove required=False optional setting from decort_account_info module argument specification 2024-07-16 11:19:08 +03:00
734408ab10 Merge branch 'BANS-472' into 'dev_5.4.0'
Implement functionality of `/cloudapi/account/getResourceConsumption` API method

See merge request rudecs/dev/decort-ansible!100
2024-07-15 15:53:30 +00:00
0fcde3f4bd Merge branch 'BANS-474' into 'BANS-472'
Update changelog after implementation functionality of /cloudapi/account/getResourceConsumption

See merge request rudecs/dev/decort-ansible!99
2024-07-15 15:30:50 +00:00
32324ee184 Update changelog after implementation functionality of /cloudapi/account/getResourceConsumption 2024-07-15 18:28:32 +03:00
5161649fe9 Implement functionality of /cloudapi/account/getResourceConsumption API method 2024-07-15 18:19:08 +03:00
ce4ac4630c Merge branch 'BANS-462' into 'dev_5.4.0'
Implement `cloudapi/account/get` API

See merge request rudecs/dev/decort-ansible!98
2024-07-12 15:52:45 +00:00
8ee5bcce52 Update Ansible modules version for 4.0.0 version platform in README.md 2024-07-12 18:47:18 +03:00
1d6141117d Merge branch 'BANS-469' into 'BANS-462'
Update changelog for 5.4.0 version

See merge request rudecs/dev/decort-ansible!97
2024-07-12 15:45:02 +00:00
5d6a278b8f Update changelog for 5.4.0 version 2024-07-12 18:42:50 +03:00
cf4d43d23e Merge branch 'BANS-471' into 'BANS-462'
Add `decort_account_info` module with implementation of `cloudapi/account/get` functionality

See merge request rudecs/dev/decort-ansible!96
2024-07-12 11:49:59 +00:00
11168827e6 Add decort_account_info module with implementation of cloudapi/account/get functionality 2024-07-12 14:46:34 +03:00
2507a65d89 Merge branch 'BANS-467' into 'BANS-462'
Improve `DecortController.account_find` method

See merge request rudecs/dev/decort-ansible!95
2024-07-12 11:08:02 +00:00
22f487b626 Improve DecortController.account_find method 2024-07-12 14:06:25 +03:00
89b03213df Merge branch 'BANS-468' into 'BANS-462'
Add `not_fail_codes` parameter to `DecortController.decort_api_call` method

See merge request rudecs/dev/decort-ansible!94
2024-07-12 10:55:26 +00:00
96b163ba00 Add not_fail_codes parameter to DecortController.decort_api_call method 2024-07-12 13:52:50 +03:00
21470542ea Merge branch 'BANS-466' into 'BANS-462'
Disable dependency on `password`, `user`, `workflow_callback` and...

See merge request rudecs/dev/decort-ansible!92
2024-07-12 10:21:34 +00:00
7eed30d2ab Disable dependency on password, user, workflow_callback and workflow_context module parameters 2024-07-12 13:16:12 +03:00
19 changed files with 7522 additions and 186 deletions

View File

@@ -1,137 +1,9 @@
# Список изменений в версии 5.3.0
# Список изменений в версии 5.4.1
## Обновления
## Исправления
### Глобальные
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-62 | Добавлен вывод текста ответа в сообщение об ошибке запроса к API. |
### Модуль decort_bservice
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-434 | В модуле **decort_bservice** в возвращаемом словаре `facts` ключи `groupsIds` и `groupsName` заменены на ключ `groups`, который содержит словари с информацией о группах базовой службы. |
## Исправления
### Модуль decort_bservice
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-366 | Работа модуля **decort_bservice** завершалась ошибкой Python при удалении базовой службы. |
| BANS-367 | Работа модуля **decort_bservice** завершалась ошибкой модуля при использовании параметров `rg_name` и `account_name` вместо параметра `rg_id`. |
| BANS-368 | Работа модуля **decort_bservice** завершалась ошибкой Python при повторном запуске создания базовой службы. |
| BANS-369 | Модуль **decort_bservice** не реагировал на режим **check mode** при создании базовой службы. |
### Модуль decort_disk
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-246 | Работа модуля **decort_disk** завершалась ошибкой Python при обработке ошибочных сценариев работы. |
| BANS-248 | Работа модуля **decort_disk** завершалась ошибкой Python при попытке валидировать заданный параметр `limitIO`. |
| BANS-249 | Работа модуля **decort_disk** завершалась ошибкой Python при попытке при попытке выполнить изменения в соответствии с заданным параметром `limitIO`. |
| BANS-250 | Работа модуля **decort_disk** завершалась ошибкой Python при заданном параметре `shareable`. |
| BANS-255 | Модуль **decort_disk** не выполнял безвозвратное удаление кластера из корзины. |
| BANS-260 | Работа модуля **decort_disk** завершалась ошибкой Python при попытке переименовать диск. |
| BANS-264 | Работа модуля **decort_disk** завершалась ошибкой Python при попытке изменить объём диска в режиме **check mode**. |
### Модуль decort_group
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-390 | Работа модуля **decort_group** завершалась ошибкой запроса к API при создании группы БС. |
| BANS-391 | Модуль **decort_group** не использовал заданные в параметре `networks` внешние сети при создании группы БС. |
| BANS-395 | Работа модуля **decort_group** завершалась ошибкой запроса к API при повторном запуске создания группы БС. |
| BANS-396 | Модуль **decort_group** при повторном запуске создания сообщал о том, что были выполнены изменения. |
| BANS-399 | Работа модуля **decort_group** завершалась ошибкой запроса к API при удалении группы БС. |
| BANS-419 | Модуль **decort_group** при повторном запуске изменения параметра networks сообщал о том, что были выполнены изменения. |
### Модуль decort_k8s
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-197 | Работа модуля **decort_k8s** завершалась ошибкой Python если не задан параметр `oidc_cert`. |
| BANS-202 | Работа модуля **decort_k8s** завершалась ошибкой модуля при попытке использовать `rg_name` и `account_name` вместо `rg_id` при создании кластера. |
| BANS-203 | В модуле **decort_k8s** был задан неверный тип данных для параметров `cluster_conf`, `kublet_conf`, `kubeproxy_conf`, `join_conf` |
| BANS-216 | Работа модуля **decort_k8s** завершалась ошибкой модуля при попытке создать кластер в режиме **check mode**. |
| BANS-218 | Модуль **decort_k8s** не выполнял безвозвратное удаление кластера из корзины. |
| BANS-221 | Модуль **decort_k8s** некорректно обрабатывал параметр `vins_id`, что вызывало создание новой внутренней сети при заданном параметре `vins_id`. |
| BANS-225 | Модуль **decort_k8s** не сообщал о выполненных изменениях при выполнении восстановления кластера из корзины. |
| BANS-226 | Модуль **decort_k8s** не выполнял запуск кластера после его восстановления из корзины. |
| BANS-236 | Модуль **decort_k8s** игнорировал заданный параметр `getConfig` при запуске в режиме **check mode**. |
| BANS-243 | Модуль **decort_k8s** выполнял изменения в соответствии с заданным параметром `workers` при запуске в режиме **check mode**. |
### Модуль decort_kvmvm
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-38 | Работа модуля **decort_kvmvm** завершалась ошибкой Python при попытке удалить все существующие правила affinity у ВМ. |
| BANS-39 | Работа модуля **decort_kvmvm** завершалась ошибкой Python при попытке удалить все существующие правила anti affinity у ВМ. |
| BANS-60 | Работа модуля **decort_kvmvm** завершалась ошибкой Python при незаданном параметре `boot_disk` для существующей ВМ. |
| BANS-61 | В модуле **decort_kvmvm** происходила автоматическая конвертация из ГБ в МБ при изменении параметра `ram` на значение менее 512 для существующей ВМ. |
| BANS-445 | В модуле **decort_kvmvm** был задан неверный тип данных для параметра `ci_user_data`. |
### Модуль decort_lb
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-321 | Работа модуля **decort_lb** завершалась ошибкой модуля при использовании параметра `rg_name`. |
| BANS-322 | Работа модуля **decort_lb** завершалась ошибкой Python при использовании параметра `account_id`. |
| BANS-323 | Модуль **decort_lb** игнорировал параметр `vins_name` и создавал балансировщик без подключения к внутренней сети. |
| BANS-324 | Модуль **decort_lb** при повторном запуске создания сообщал о том, что были выполнены изменения. |
| BANS-325 | Модуль **decort_lb** не реагировал на параметр `annotation`. |
| BANS-326 | Модуль **decort_lb** при указании нескольких конфигураций frontend в параметре `frontends` добавлял в балансировщик только первую конфигурацию frontend. |
| BANS-331 | Работа модуля **decort_lb** завершалась ошибкой Python при выполнении создания балансировщика в режиме **check mode**. |
| BANS-334 | Модуль **decort_lb** не выполнял безвозвратное удаление балансировщика из корзины. |
| BANS-338 | Работа модуля **decort_lb** завершалась ошибкой Python при запуске восстановления балансировщика из корзины. |
| BANS-339 | Работа модуля **decort_lb** завершалась ошибкой Python при запуске восстановления балансировщика из корзины. |
| BANS-340 | Модуль **decort_lb** оставлял балансировщик выключенным после его восстановления из корзины. |
| BANS-341 | Модуль **decort_lb** оставлял балансировщик остановленным после его восстановления из корзины. |
| BANS-346 | Модуль **decort_lb** не производил запуск балансировщика при запуске с заданным параметром `state: enabled` или `state: present`. |
| BANS-352 | Работа модуля **decort_lb** завершалась ошибкой Python при удалении конфигурации frontend у балансировщика. |
| BANS-353 | Работа модуля **decort_lb** завершалась ошибкой запроса к API при удалении конфигурации frontend и связанной с ней конфигурации backend у балансировщика |
| BANS-354 | Модуль **decort_lb** не применял значения из подпараметров `check` и `server_settings` при добавлении нового сервера в существующую конфигурацию backend балансировщика. |
| BANS-357 | Модуль **decort_lb** игнорировал режим **check mode** для параметров `backends`, `frontends`, `servers`. |
| BANS-457 | Модуль **decort_lb** возвращал некорректный статус для удалённого балансировщика и указывал некорректный статус балансировщика в сообщении при повторном запуске модуля.
### Модуль decort_osimage
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-295 | Работа модуля **decort_osimage** завершалась ошибкой запроса к API при повторном запуске удаления шаблонного образа. |
| BANS-296 | Работа модуля **decort_osimage** завершалась ошибкой модуля при повторном запуске удаления шаблонного образа. |
| BANS-297 | Работа модуля **decort_osimage** завершалась ошибкой запроса к API при указании параметра `account_name` вместо параметра `account_Id` |
| BANS-299 | Модуль **decort_osimage** при повторном запуске переименования образа сообщал о том, что были выполнены изменения. |
| BANS-300 | Работа модуля **decort_osimage** завершалась ошибкой Python при создании виртуального образа. |
| BANS-301 | Работа модуля **decort_osimage** завершалась ошибкой модуля при повторном запуске удаления виртуального образа. |
| BANS-302 | Работа модуля **decort_osimage** завершалась ошибкой Python с удалением шаблонного образа при попытке удалить виртуальный образ. |
| BANS-303 | Модуль **decort_osimage** не выполнял переименование виртуального образа. |
| BANS-304 | Работа модуля **decort_osimage** завершалась ошибкой Python при повторном запуске удаления виртуального образа. |
### Модуль decort_pfw
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-283 | Работа модуля **decort_pfw** завершалась ошибкой Python при повторном запуске удаления правил. |
| BANS-451 | Модуль **decort_pfw** при запуске удаления удалял все правила переадресации портов на виртуальном маршрутизаторе заданной внутренней сети, вместо удаления правил только для заданной ВМ. |
### Модуль decort_rg
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-58 | Работа модуля **decort_rg** завершалась ошибкой Python при передаче некорректных данных об аккаунте и/или пользователе. |
| BANS-63 | Модуль **decort_rg** выполнял некорректное получение/изменение квоты на объём дисков. |
| BANS-64 | Работа модуля **decort_rg** завершалась ошибкой Python при повторном запуске на создание. |
| BANS-65 | Модуль **decort_rg** не выполнял восстановление РГ из корзины при заданном параметре `state: disabled` или `state: enabled`. |
| BANS-66 | В модуле **decort_rg** не выполнялась проверка наличия параметра `rg_name` при создании РГ. |
| BANS-67 | Работа модуля **decort_rg** завершалась ошибкой запроса к API при создании РГ когда РГ с таким именем есть в корзине. |
| BANS-68 | Модуль **decort_rg** не выполнял восстановление РГ из корзины при указании `rg_name` вместо `rg_id`. |
| BANS-425 | Работа модуля **decort_rg** завершалась ошибкой модуля при создании РГ в режиме **check mode**. |
### Модуль decort_vins
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BANS-59 | Работа модуля **decort_vins** завершалась ошибкой Python при создании внутренней сети на уровне аккаунта. |
| BANS-495 | Часть запросов к API завершались ошибкой Python TypeError. |
| BANS-496 | Поиск аккаунта в части модулей завершался ошибкой запроса к API.

View File

@@ -5,9 +5,8 @@
| Версия платформы | Версия модулей Ansible |
| :---: | :---: |
| 4.0.0 | 5.3.0 |
| 3.8.9 | 5.2.6 |
| 3.8.8 | 5.2.6 |
| 4.0.0 | 5.4.x, 5.3.x |
| 3.8.8, 3.8.9 | 5.2.6 |
| 3.8.7 | 5.2.5 |
| 3.8.6 | 5.2.4 |

View File

@@ -0,0 +1,632 @@
#!/usr/bin/python
# Copyright: ...
# ...
DOCUMENTATION = r'''
---
module: decort_account_info
version_added: "2.16"
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
'''
# EXAMPLES = r'''
# '''
# RETURN = r'''
# '''
from ansible.module_utils.basic import AnsibleModule, env_fallback
from ansible.module_utils.decort_utils import DecortController
class DecortAccountInfo(DecortController):
def __init__(self):
amodule = AnsibleModule(**self.amodule_init_args)
super().__init__(amodule)
self.id, self.facts = self.account_find(
account_name=amodule.params['name'],
account_id=amodule.params['id'],
audits=amodule.params['audits'],
computes_args=self.mapped_computes_args,
disks_args=self.mapped_disks_args,
flip_groups_args=self.mapped_flip_groups_args,
images_args=self.mapped_images_args,
resource_consumption=amodule.params['resource_consumption'],
resource_groups_args=self.mapped_rg_args,
vinses_args=self.mapped_vinses_args,
fail_if_not_found=True,
)
@property
def amodule_init_args(self) -> dict:
return dict(
argument_spec=dict(
app_id=dict(
type='str',
fallback=(env_fallback, ['DECORT_APP_ID'])
),
app_secret=dict(
type='str',
fallback=(env_fallback, ['DECORT_APP_SECRET']),
no_log=True
),
audits=dict(
type='bool',
default=False
),
authenticator=dict(
type='str',
required=True,
choices=['oauth2', 'jwt']
),
computes=dict(
type='dict',
options=dict(
filter=dict(
type='dict',
options=dict(
ext_net_id=dict(
type='int',
),
ext_net_name=dict(
type='str'
),
id=dict(
type='int',
),
ip=dict(
type='str'
),
name=dict(
type='str'
),
rg_id=dict(
type='int',
),
rg_name=dict(
type='str'
),
tech_status=dict(
type='str',
choices=self.COMPUTE_TECH_STATUSES,
),
),
),
pagination=dict(
type='dict',
options=dict(
number=dict(
type='int',
default=1,
),
size=dict(
type='int',
required=True,
),
),
),
sorting=dict(
type='dict',
options=dict(
asc=dict(
type='bool',
default=True,
),
field=dict(
type='str',
choices=\
self.FIELDS_FOR_SORTING_ACCOUNT_COMPUTE_LIST,
required=True,
),
),
),
),
),
controller_url=dict(
type='str',
required=True
),
disks=dict(
type='dict',
options=dict(
filter=dict(
type='dict',
options=dict(
id=dict(
type='int',
),
name=dict(
type='str',
),
size=dict(
type='int',
),
type=dict(
type='str',
choices=self.DISK_TYPES,
),
),
),
pagination=dict(
type='dict',
options=dict(
number=dict(
type='int',
default=1,
),
size=dict(
type='int',
required=True,
),
),
),
sorting=dict(
type='dict',
options=dict(
asc=dict(
type='bool',
default=True,
),
field=dict(
type='str',
choices=\
self.FIELDS_FOR_SORTING_ACCOUNT_DISK_LIST,
required=True,
),
),
),
),
),
flip_groups=dict(
type='dict',
options=dict(
filter=dict(
type='dict',
options=dict(
ext_net_id=dict(
type='int',
),
id=dict(
type='int',
),
ip=dict(
type='str',
),
name=dict(
type='str',
),
vins_id=dict(
type='int',
),
vins_name=dict(
type='str',
),
),
),
pagination=dict(
type='dict',
options=dict(
number=dict(
type='int',
default=1,
),
size=dict(
type='int',
required=True,
),
),
),
),
),
id=dict(
type='int',
),
images=dict(
type='dict',
options=dict(
deleted=dict(
type='bool',
default=False,
),
filter=dict(
type='dict',
options=dict(
id=dict(
type='int',
),
name=dict(
type='str',
),
type=dict(
type='str',
choices=self.IMAGE_TYPES,
),
),
),
pagination=dict(
type='dict',
options=dict(
number=dict(
type='int',
default=1,
),
size=dict(
type='int',
required=True,
),
),
),
sorting=dict(
type='dict',
options=dict(
asc=dict(
type='bool',
default=True,
),
field=dict(
type='str',
choices=\
self.FIELDS_FOR_SORTING_ACCOUNT_IMAGE_LIST,
required=True,
),
),
),
),
),
jwt=dict(
type='str',
fallback=(env_fallback, ['DECORT_JWT']),
no_log=True
),
name=dict(
type='str',
),
oauth2_url=dict(
type='str',
fallback=(env_fallback, ['DECORT_OAUTH2_URL'])
),
resource_groups=dict(
type='dict',
options=dict(
filter=dict(
type='dict',
options=dict(
id=dict(
type='int',
),
name=dict(
type='str'
),
status=dict(
type='str',
choices=self.RESOURCE_GROUP_STATUSES,
),
vins_id=dict(
type='int'
),
vm_id=dict(
type='int'
),
),
),
pagination=dict(
type='dict',
options=dict(
number=dict(
type='int',
default=1,
),
size=dict(
type='int',
required=True,
),
),
),
sorting=dict(
type='dict',
options=dict(
asc=dict(
type='bool',
default=True,
),
field=dict(
type='str',
choices=\
self.FIELDS_FOR_SORTING_ACCOUNT_RG_LIST,
required=True,
),
),
),
),
),
resource_consumption=dict(
type='bool',
default=False
),
verify_ssl=dict(
type='bool',
default=True
),
vinses=dict(
type='dict',
options=dict(
filter=dict(
type='dict',
options=dict(
ext_ip=dict(
type='int',
),
id=dict(
type='int',
),
name=dict(
type='str'
),
rg_id=dict(
type='int',
),
),
),
pagination=dict(
type='dict',
options=dict(
number=dict(
type='int',
default=1,
),
size=dict(
type='int',
required=True,
),
),
),
sorting=dict(
type='dict',
options=dict(
asc=dict(
type='bool',
default=True,
),
field=dict(
type='str',
choices=\
self.FIELDS_FOR_SORTING_ACCOUNT_VINS_LIST,
required=True,
),
),
),
),
),
),
mutually_exclusive=[
('id', 'name')
],
required_one_of=[
('id', 'name')
],
required_if=[
('authenticator', 'oauth2',
('oauth2_url', 'app_id', 'app_secret')),
('authenticator', 'jwt', ('jwt',))
],
supports_check_mode=True,
)
@property
def mapped_computes_args(self) -> None | dict:
"""
Map the module argument `computes` to
arguments dictionary for the method
`DecortController.account_computes`
(excluding for `account_id`).
"""
input_args = self.amodule.params['computes']
if not input_args:
return input_args
mapped_args = {}
if input_args['filter']:
mapped_args['compute_id'] = input_args['filter']['id']
mapped_args['compute_ip'] = input_args['filter']['ip']
mapped_args['compute_name'] = input_args['filter']['name']
mapped_args['compute_tech_status'] =\
input_args['filter']['tech_status']
mapped_args['ext_net_id'] = input_args['filter']['ext_net_id']
mapped_args['ext_net_name'] =\
input_args['filter']['ext_net_name']
mapped_args['rg_id'] = input_args['filter']['rg_id']
mapped_args['rg_name'] = input_args['filter']['rg_name']
if input_args['pagination']:
mapped_args['page_number'] =\
input_args['pagination']['number']
mapped_args['page_size'] =\
input_args['pagination']['size']
if input_args['sorting']:
mapped_args['sort_by_asc'] =\
input_args['sorting']['asc']
mapped_args['sort_by_field'] =\
input_args['sorting']['field']
return mapped_args
@property
def mapped_disks_args(self) -> None | dict:
"""
Map the module argument `disks` to
arguments dictionary for the method
`DecortController.account_disks`
(excluding for `account_id`).
"""
input_args = self.amodule.params['disks']
if not input_args:
return input_args
mapped_args = {}
if input_args['filter']:
mapped_args['disk_id'] = input_args['filter']['id']
mapped_args['disk_name'] = input_args['filter']['name']
mapped_args['disk_size'] = input_args['filter']['size']
mapped_args['disk_type'] = input_args['filter']['type']
if input_args['pagination']:
mapped_args['page_number'] =\
input_args['pagination']['number']
mapped_args['page_size'] =\
input_args['pagination']['size']
if input_args['sorting']:
mapped_args['sort_by_asc'] =\
input_args['sorting']['asc']
mapped_args['sort_by_field'] =\
input_args['sorting']['field']
return mapped_args
@property
def mapped_flip_groups_args(self) -> None | dict:
"""
Map the module argument `flip_groups` to
arguments dictionary for the method
`DecortController.account_flip_groups`
(excluding for `account_id`).
"""
input_args = self.amodule.params['flip_groups']
if not input_args:
return input_args
mapped_args = {}
if input_args['filter']:
mapped_args['ext_net_id'] = input_args['filter']['ext_net_id']
mapped_args['flig_group_id'] = input_args['filter']['id']
mapped_args['flig_group_ip'] = input_args['filter']['ip']
mapped_args['flig_group_name'] = input_args['filter']['name']
mapped_args['vins_id'] = input_args['filter']['vins_id']
mapped_args['vins_name'] = input_args['filter']['vins_name']
if input_args['pagination']:
mapped_args['page_number'] =\
input_args['pagination']['number']
mapped_args['page_size'] =\
input_args['pagination']['size']
return mapped_args
@property
def mapped_images_args(self) -> None | dict:
"""
Map the module argument `images` to
arguments dictionary for the method
`DecortController.account_images`
(excluding for `account_id`).
"""
input_args = self.amodule.params['images']
if not input_args:
return input_args
mapped_args = {}
mapped_args['deleted'] = input_args['deleted']
if input_args['filter']:
mapped_args['image_id'] = input_args['filter']['id']
mapped_args['image_name'] = input_args['filter']['name']
mapped_args['image_type'] = input_args['filter']['type']
if input_args['pagination']:
mapped_args['page_number'] =\
input_args['pagination']['number']
mapped_args['page_size'] =\
input_args['pagination']['size']
if input_args['sorting']:
mapped_args['sort_by_asc'] =\
input_args['sorting']['asc']
mapped_args['sort_by_field'] =\
input_args['sorting']['field']
return mapped_args
@property
def mapped_rg_args(self) -> None | dict:
"""
Map the module argument `resource_groups` to
arguments dictionary for the method
`DecortController.account_resource_groups`
(excluding for `account_id`).
"""
input_args = self.amodule.params['resource_groups']
if not input_args:
return input_args
mapped_args = {}
if input_args['filter']:
mapped_args['rg_id'] =\
input_args['filter']['id']
mapped_args['rg_name'] =\
input_args['filter']['name']
mapped_args['rg_status'] =\
input_args['filter']['status']
mapped_args['vins_id'] =\
input_args['filter']['vins_id']
mapped_args['vm_id'] =\
input_args['filter']['vm_id']
if input_args['pagination']:
mapped_args['page_number'] =\
input_args['pagination']['number']
mapped_args['page_size'] =\
input_args['pagination']['size']
if input_args['sorting']:
mapped_args['sort_by_asc'] =\
input_args['sorting']['asc']
mapped_args['sort_by_field'] =\
input_args['sorting']['field']
return mapped_args
@property
def mapped_vinses_args(self) -> None | dict:
"""
Map the module argument `vinses` to
arguments dictionary for the method
`DecortController.account_vinses`
(excluding for `account_id`).
"""
input_args = self.amodule.params['vinses']
if not input_args:
return input_args
mapped_args = {}
if input_args['filter']:
mapped_args['vins_id'] = input_args['filter']['id']
mapped_args['vins_name'] = input_args['filter']['name']
mapped_args['ext_ip'] = input_args['filter']['ext_ip']
mapped_args['rg_id'] = input_args['filter']['rg_id']
if input_args['pagination']:
mapped_args['page_number'] =\
input_args['pagination']['number']
mapped_args['page_size'] =\
input_args['pagination']['size']
if input_args['sorting']:
mapped_args['sort_by_asc'] =\
input_args['sorting']['asc']
mapped_args['sort_by_field'] =\
input_args['sorting']['field']
return mapped_args
def exit(self):
self.result['facts'] = self.facts
self.amodule.exit_json(**self.result)
def main():
decort_account_info = DecortAccountInfo()
decort_account_info.exit()
if __name__ == '__main__':
main()

View File

@@ -29,6 +29,7 @@ Requirements:
"""
import json
from typing import Callable
import jwt
import netaddr
import time
@@ -41,6 +42,121 @@ class DecortController(object):
based on the requested authentication type.
"""
FIELDS_FOR_SORTING_ACCOUNT_COMPUTE_LIST = [
'cpus',
'createdBy',
'createdTime',
'deletedBy',
'deletedTime',
'id',
'name',
'ram',
'registered',
'rgId',
'rgName',
'status',
'techStatus',
'totalDisksSize',
'updatedBy',
'updatedTime',
'userManaged',
'vinsConnected',
]
FIELDS_FOR_SORTING_ACCOUNT_DISK_LIST = [
'id',
'name',
'pool',
'sepId',
'shareable',
'sizeMax',
'type',
]
FIELDS_FOR_SORTING_ACCOUNT_IMAGE_LIST = [
'UNCPath',
'desc',
'id',
'name',
'public',
'size',
'status',
'type',
'username',
]
FIELDS_FOR_SORTING_ACCOUNT_RG_LIST = [
'createdBy',
'createdTime',
'deletedBy',
'deletedTime',
'id',
'milestones',
'name',
'status',
'updatedBy',
'updatedTime',
'vinses',
]
FIELDS_FOR_SORTING_ACCOUNT_VINS_LIST = [
'computes',
'createdBy',
'createdTime',
'deletedBy',
'deletedTime',
'externalIP',
'extnetId',
'freeIPs',
'id',
'name',
'network',
'priVnfDevId',
'rgId',
'rgName',
'status',
'updatedBy',
'updatedTime',
]
COMPUTE_TECH_STATUSES = [
'BACKUP_RUNNING',
'BACKUP_STOPPED',
'DOWN',
'MIGRATING',
'PAUSED',
'PAUSING',
'SCHEDULED',
'STARTED',
'STARTING',
'STOPPED',
'STOPPING',
]
DISK_TYPES = ['B', 'D']
IMAGE_TYPES = [
'cdrom',
'linux',
'other',
'virtual',
'windows',
]
RESOURCE_GROUP_STATUSES = [
'CREATED',
'DELETED',
'DELETING',
'DESTROYED',
'DESTROYING',
'DISABLED',
'DISABLING',
'ENABLED',
'ENABLING',
'MODELED',
'RESTORING',
]
VM_RESIZE_NOT = 0
VM_RESIZE_DOWN = 1
VM_RESIZE_UP = 2
@@ -74,16 +190,16 @@ class DecortController(object):
self.app_id = arg_amodule.params['app_id']
self.app_secret = arg_amodule.params['app_secret']
self.oauth2_url = arg_amodule.params['oauth2_url']
self.password = arg_amodule.params['password']
self.user = arg_amodule.params['user']
# self.password = arg_amodule.params['password']
# self.user = arg_amodule.params['user']
self.session_key = ''
# self.iconf = arg_iconf
self.verify_ssl = arg_amodule.params['verify_ssl']
self.workflow_callback_present = False
self.workflow_callback = arg_amodule.params['workflow_callback']
self.workflow_context = arg_amodule.params['workflow_context']
if self.workflow_callback != "":
self.workflow_callback_present = True
# self.workflow_callback = arg_amodule.params['workflow_callback']
# self.workflow_context = arg_amodule.params['workflow_context']
# if self.workflow_callback != "":
# self.workflow_callback_present = True
# The following will be initialized to the name of the user in DECORT controller, who corresponds to
# the credentials supplied as authentication information parameters.
@@ -153,6 +269,23 @@ class DecortController(object):
# self.run_phase = "Initializing DecortController instance complete."
return
@staticmethod
def waypoint(orig_f: Callable) -> Callable:
"""
A decorator for adding the name of called method to the string
`self.result['waypoints']`.
"""
def new_f(self, *args, **kwargs):
self.result['waypoints'] += f' -> {orig_f.__name__}'
return orig_f(self, *args, **kwargs)
return new_f
@staticmethod
def sec_to_dt_str(sec: int, str_format: str = '%Y-%m-%d_%H-%M-%S') -> str:
if sec:
return time.strftime(str_format, time.gmtime(sec))
return ''
def check_amodule_argument(self, arg_name, abort=True):
"""Checks if the argument identified by the arg_name is defined in the module parameters.
@@ -335,20 +468,37 @@ class DecortController(object):
return True
def decort_api_call(self, arg_req_function, arg_api_name, arg_params, arg_files=None):
"""Wrapper around DECORT API calls. It uses authorization mode and credentials validated at the class
instance creation to properly format API call and send it to the DECORT controller URL.
If connection errors are detected, it aborts execution of the script and relay error messages to upstream
Ansible process.
If HTTP 503 error is detected the method will retry with increasing timeout, and if after max_retries there
still is HTTP 503 error, it will abort as above.
If any other HTTP error is detected, the method will abort immediately as above.
def decort_api_call(
self,
arg_req_function,
arg_api_name,
arg_params,
arg_files=None,
not_fail_codes: None | list = None,
) -> requests.Response:
"""
Wrapper around DECORT API calls. It uses authorization mode and
credentials validated at the class instance creation
to properly format API call and send it to
the DECORT controller URL.
If connection errors are detected, it aborts execution of
the script and relay error messages to upstream Ansible process.
If HTTP 503 error is detected the method will retry with
increasing timeout, and if after max_retries there still is
HTTP 503 error, it will abort as above. If any other HTTP error
is detected, the method will abort immediately as above.
@param arg_req_function: function object to be called as part of API, e.g. requests.post or requests.get
@param arg_api_name: a string containing the path to the API name under DECORT controller URL
@param arg_params: a dictionary containing parameters to be passed to the API call
@param arg_api_name: a string containing the path to
the API name under DECORT controller URL
@return: api call response object as returned by the REST functions from Python "requests" module
@param arg_params: a dictionary containing parameters to be
passed to the API call
@param arg_req_function: function object to be called as
part of API, e.g. requests.post or requests.get
@return: api call response object as returned by
the REST functions from Python "requests" module
"""
max_retries = 5
@@ -386,6 +536,8 @@ class DecortController(object):
if api_resp.status_code == 200:
return api_resp
elif not_fail_codes and api_resp.status_code in not_fail_codes:
return api_resp
elif api_resp.status_code == 503:
retry_timeout = 5 + 10 * (max_retries - retry_counter)
time.sleep(retry_timeout)
@@ -1920,51 +2072,626 @@ class DecortController(object):
self.result['changed'] = True
return
def account_find(self, account_name, account_id=0):
"""Find cloud account specified by the name and return facts about the account. Knowing account is
required for certain cloud resource management tasks (e.g. creating new RG).
def account_find(
self,
account_name: str = '',
account_id=0,
audits=False,
computes_args: None | dict = None,
disks_args: None | dict = None,
fail_if_not_found=False,
flip_groups_args: None | dict = None,
images_args: None | dict = None,
resource_consumption=False,
resource_groups_args: None | dict = None,
vinses_args: None | dict = None,
):
"""
Find account specified by account ID or name and return
a turple with account ID and account info dict.
@param (string) account_name: name of the account to find. Pass empty string if you want to
find account by ID and make sure you specifit posisite arg_account_id.
@param (int) ccount_id: ID of the account to find. If arg_account_name is empty string, then
arg_account_id must be positive, and method will look for account by the specified ID.
@param (int) account_id: ID of the account to find.
Returns non zero account ID and a dictionary with account details on success, 0 and empty
dictionary otherwise.
@param (string) account_name: name of the account to find.
@param (bool) audits: If `True` is specified,
then the method `self.account_audits`
will be called passing founded account ID and result of
the call will be added to
account info dict (key `audits`).
@param (None | dict) computes_args: If dict is
specified, then the method `self.account_computes`
will be called passing founded account ID
and `**computes_args`. Result of the call will
be added to account info dict (key `computes`).
@param (None | dict) disks_args: If dict is
specified, then the method `self.account_disks`
will be called passing founded account ID
and `**disks_args`. Result of the call will
be added to account info dict (key `disks`).
@param (bool) fail_if_not_found: If `True` is specified, then
the method `self.amodule.fail_json(**self.result)` will be
called if account is not found.
@param (None | dict) flip_groups_args: If dict is
specified, then the method `self.account_flip_groups`
will be called passing founded account ID
and `**flip_groups_args`. Result of the call will
be added to account info dict (key `flip_groups`).
@param (None | dict) images_args: If dict is
specified, then the method `self.account_images`
will be called passing founded account ID
and `**images_args`. Result of the call will
be added to account info dict (key `images`).
@param (bool) resource_consumption: If `True` is specified,
then the method `self.account_resource_consumption`
will be called passing founded account ID and result of
the call will be added to
account info dict (key `resource_consumption`).
@param (None | dict) resource_groups_args: If dict is
specified, then the method `self.account_resource_groups`
will be called passing founded account ID
and `**resource_groups_args`. Result of the call will
be added to account info dict (key `resource_groups`).
@param (None | dict) vinses_args: If dict is
specified, then the method `self.account_vinses`
will be called passing founded account ID
and `**vinses_args`. Result of the call will
be added to account info dict (key `vinses`).
Returns non zero account ID and account info dict on success,
0 and empty dict otherwise (if `fail_if_not_found=False`).
"""
self.result['waypoints'] = "{} -> {}".format(self.result['waypoints'], "account_find")
if account_name == "" and account_id == 0:
self.result['failed'] = True
self.result['msg'] = "Cannot find account if account name is empty and account ID is zero."
if not account_id and not account_name:
self.result['msg'] = ('Cannot find account if account name and'
' id are not specified.')
self.amodule.fail_json(**self.result)
api_params = dict()
account_details = None
_account_id = account_id
if account_name == "":
api_params['accountId'] = account_id
api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/account/get", api_params)
if account_name and not account_id:
api_params = {
'name': account_name
}
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/list',
arg_params=api_params
)
accounts_list = api_resp.json()['data']
for account in accounts_list:
if account['name'] == account_name:
_account_id = account['id']
break
if _account_id:
api_params = {
'accountId': _account_id
}
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/get',
arg_params=api_params,
not_fail_codes=[404]
)
if api_resp.status_code == 200:
account_details = json.loads(api_resp.content.decode('utf8'))
return account_details['id'], account_details
account_details = api_resp.json()
if not account_details:
if fail_if_not_found:
self.result['msg'] = ("Current user does not have access to"
" the requested account or non-existent"
" account specified.")
self.amodule.fail_json(**self.result)
return 0, None
account_details['computes_amount'] = account_details.pop('computes')
account_details['vinses_amount'] = account_details.pop('vinses')
account_details['createdTime_readable'] = self.sec_to_dt_str(
account_details['createdTime']
)
account_details['deactivationTime_readable'] = self.sec_to_dt_str(
account_details['deactivationTime']
)
account_details['deletedTime_readable'] = self.sec_to_dt_str(
account_details['deletedTime']
)
account_details['updatedTime_readable'] = self.sec_to_dt_str(
account_details['updatedTime']
)
if resource_consumption:
resource_consumption = self.account_resource_consumption(
account_id=account_details['id'],
fail_if_not_found=True
)
account_details['resource_consumed'] =\
resource_consumption['Consumed']
account_details['resource_reserved'] =\
resource_consumption['Reserved']
if resource_groups_args is not None:
account_details['resource_groups'] =\
self.account_resource_groups(
account_id=account_details['id'],
**resource_groups_args
)
if computes_args is not None:
account_details['computes'] =\
self.account_computes(
account_id=account_details['id'],
**computes_args
)
if vinses_args is not None:
account_details['vinses'] = self.account_vinses(
account_id=account_details['id'],
**vinses_args
)
if disks_args is not None:
account_details['disks'] =\
self.account_disks(
account_id=account_details['id'],
**disks_args
)
if images_args is not None:
account_details['images'] =\
self.account_images(
account_id=account_details['id'],
**images_args
)
if flip_groups_args is not None:
account_details['flip_groups'] =\
self.account_flip_groups(
account_id=account_details['id'],
**flip_groups_args
)
if audits:
account_details['audits'] = self.account_audits(
account_id=account_details['id'],
fail_if_not_found=True
)
return account_details['id'], account_details
@waypoint
def account_resource_consumption(self, account_id: int,
fail_if_not_found=False) -> None | dict:
"""
Implementation of functionality of the API method
`/cloudapi/account/getResourceConsumption`.
@param (bool) fail_if_not_found: If `True` is specified, then
the method `self.amodule.fail_json(**self.result)` will be
called if account is not found.
"""
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/getResourceConsumption',
arg_params={'accountId': account_id},
not_fail_codes=[404]
)
if api_resp.status_code == 200:
return api_resp.json()
else:
api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/account/list", api_params)
if api_resp.status_code == 200:
# Parse response to see if a account matching arg_account_name is found in the output
# If it is found, assign its ID to the return variable and copy dictionary with the facts
accounts_list = json.loads(api_resp.content.decode('utf8'))
for runner in accounts_list['data']:
if runner['name'] == account_name:
# get detailed information about the account from "accounts/get" call as
# "accounts/list" does not return all necessary fields
api_params['accountId'] = runner['id']
api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/account/get", api_params)
if api_resp.status_code == 200:
account_details = json.loads(api_resp.content.decode('utf8'))
return account_details['id'], account_details
if fail_if_not_found:
self.result['msg'] = ("Current user does not have access to"
" the requested account or non-existent"
" account specified.")
self.amodule.fail_json(**self.result)
return 0, None
@waypoint
def account_resource_groups(
self,
account_id: int,
page_number: int = 1,
page_size: None | int = None,
rg_id: None | int = None,
rg_name: None | str = None,
rg_status: None | str = None,
sort_by_field: None | str = None,
sort_by_asc=True,
vins_id: None | int = None,
vm_id: None | int = None,
) -> list[dict]:
"""
Implementation of functionality of the API method
`/cloudapi/account/listRG`.
"""
if rg_status and not rg_status in self.RESOURCE_GROUP_STATUSES:
self.result['msg'] = (
f'{rg_status} is not valid RG status for filtering'
f' account resource groups list.'
)
self.amodule.fail_json(**self.result)
sort_by = None
if sort_by_field:
if not sort_by_field in self.FIELDS_FOR_SORTING_ACCOUNT_RG_LIST:
self.result['msg'] = (
f'{sort_by_field} is not valid field for sorting'
f' account resource groups list.'
)
self.amodule.fail_json(**self.result)
sort_by_prefix = '+' if sort_by_asc else '-'
sort_by = f'{sort_by_prefix}{sort_by_field}'
api_params = {
'accountId': account_id,
'name': rg_name,
'page': page_number if page_size else None,
'rgId': rg_id,
'size': page_size,
'sortBy': sort_by,
'status': rg_status,
'vinsId': vins_id,
'vmId': vm_id,
}
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/listRG',
arg_params=api_params,
)
resource_groups = api_resp.json()['data']
for rg in resource_groups:
rg['createdTime_readable'] = self.sec_to_dt_str(rg['createdTime'])
rg['deletedTime_readable'] = self.sec_to_dt_str(rg['deletedTime'])
rg['updatedTime_readable'] = self.sec_to_dt_str(rg['updatedTime'])
return resource_groups
@waypoint
def account_computes(
self,
account_id: int,
compute_id: None | int = None,
compute_ip: None | str = None,
compute_name: None | str = None,
compute_tech_status: None | str = None,
ext_net_id: None | int = None,
ext_net_name: None | str = None,
page_number: int = 1,
page_size: None | int = None,
rg_id: None | int = None,
rg_name: None | str = None,
sort_by_asc=True,
sort_by_field: None | str = None,
) -> list[dict]:
"""
Implementation of functionality of the API method
`/cloudapi/account/listComputes`.
"""
if compute_tech_status and (
not compute_tech_status in self.COMPUTE_TECH_STATUSES
):
self.result['msg'] = (
f'{compute_tech_status} is not valid compute tech status'
f' for filtering account computes list.'
)
self.amodule.fail_json(**self.result)
sort_by = None
if sort_by_field:
if not sort_by_field in self.FIELDS_FOR_SORTING_ACCOUNT_COMPUTE_LIST:
self.result['msg'] = (
f'{sort_by_field} is not valid field for sorting'
f' account computes list.'
)
self.amodule.fail_json(**self.result)
sort_by_prefix = '+' if sort_by_asc else '-'
sort_by = f'{sort_by_prefix}{sort_by_field}'
api_params = {
'accountId': account_id,
'computeId': compute_id,
'extNetId': ext_net_id,
'extNetName': ext_net_name,
'ipAddress': compute_ip,
'name': compute_name,
'page': page_number if page_size else None,
'rgId': rg_id,
'rgName': rg_name,
'size': page_size,
'sortBy': sort_by,
'techStatus': compute_tech_status,
}
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/listComputes',
arg_params=api_params,
)
computes = api_resp.json()['data']
for c in computes:
c['createdTime_readable'] = self.sec_to_dt_str(c['createdTime'])
c['deletedTime_readable'] = self.sec_to_dt_str(c['deletedTime'])
c['updatedTime_readable'] = self.sec_to_dt_str(c['updatedTime'])
return computes
@waypoint
def account_vinses(
self,
account_id: int,
ext_ip: None | str = None,
page_number: int = 1,
page_size: None | int = None,
rg_id: None | int = None,
sort_by_asc=True,
sort_by_field: None | str = None,
vins_id: None | int = None,
vins_name: None | str = None,
) -> list[dict]:
"""
Implementation of functionality of the API method
`/cloudapi/account/listVins`.
"""
sort_by = None
if sort_by_field:
if not sort_by_field in self.FIELDS_FOR_SORTING_ACCOUNT_VINS_LIST:
self.result['msg'] = (
f'{sort_by_field} is not valid field for sorting'
f' account vins list.'
)
self.amodule.fail_json(**self.result)
sort_by_prefix = '+' if sort_by_asc else '-'
sort_by = f'{sort_by_prefix}{sort_by_field}'
api_params = {
'accountId': account_id,
'extIp': ext_ip,
'name': vins_name,
'page': page_number if page_size else None,
'rgId': rg_id,
'size': page_size,
'sortBy': sort_by,
'vinsId': vins_id,
}
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/listVins',
arg_params=api_params,
)
vinses = api_resp.json()['data']
for v in vinses:
v['createdTime_readable'] = self.sec_to_dt_str(v['createdTime'])
v['deletedTime_readable'] = self.sec_to_dt_str(v['deletedTime'])
v['updatedTime_readable'] = self.sec_to_dt_str(v['updatedTime'])
return vinses
@waypoint
def account_disks(
self,
account_id: int,
disk_id: None | int = None,
disk_name: None | str = None,
disk_size: None | int = None,
disk_type: None | str = None,
page_number: int = 1,
page_size: None | int = None,
sort_by_asc=True,
sort_by_field: None | str = None,
) -> list[dict]:
"""
Implementation of functionality of the API method
`/cloudapi/account/listDisks`.
"""
if disk_type and (
not disk_type in self.DISK_TYPES
):
self.result['msg'] = (
f'{disk_type} is not valid disk type'
f' for filtering account disk list.'
)
self.amodule.fail_json(**self.result)
sort_by = None
if sort_by_field:
if not sort_by_field in self.FIELDS_FOR_SORTING_ACCOUNT_DISK_LIST:
self.result['msg'] = (
f'{sort_by_field} is not valid field for sorting'
f' account disks list.'
)
self.amodule.fail_json(**self.result)
sort_by_prefix = '+' if sort_by_asc else '-'
sort_by = f'{sort_by_prefix}{sort_by_field}'
api_params = {
'accountId': account_id,
'diskId': disk_id,
'diskMaxSize': disk_size,
'name': disk_name,
'page': page_number if page_size else None,
'size': page_size,
'sortBy': sort_by,
'type': disk_type,
}
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/listDisks',
arg_params=api_params,
)
disks = api_resp.json()['data']
return disks
@waypoint
def account_images(
self,
account_id: int,
deleted: bool = False,
image_id: None | int = None,
image_name: None | str = None,
image_type: None | str = None,
page_number: int = 1,
page_size: None | int = None,
sort_by_asc=True,
sort_by_field: None | str = None,
) -> list[dict]:
"""
Implementation of functionality of the API method
`/cloudapi/account/listTemplates`.
"""
if image_type and (
not image_type in self.IMAGE_TYPES
):
self.result['msg'] = (
f'{image_type} is not valid image type'
f' for filtering account image list.'
)
self.amodule.fail_json(**self.result)
sort_by = None
if sort_by_field:
if not sort_by_field in self.FIELDS_FOR_SORTING_ACCOUNT_IMAGE_LIST:
self.result['msg'] = (
f'{sort_by_field} is not valid field for sorting'
f' account image list.'
)
self.amodule.fail_json(**self.result)
sort_by_prefix = '+' if sort_by_asc else '-'
sort_by = f'{sort_by_prefix}{sort_by_field}'
api_params = {
'accountId': account_id,
'imageId': image_id,
'includedeleted': deleted,
'name': image_name,
'page': page_number if page_size else None,
'size': page_size,
'sortBy': sort_by,
'type': image_type,
}
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/listTemplates',
arg_params=api_params,
)
images = api_resp.json()['data']
return images
@waypoint
def account_flip_groups(
self,
account_id: int,
ext_net_id: None | int = None,
flig_group_id: None | int = None,
flig_group_ip: None | str = None,
flig_group_name: None | str = None,
page_number: int = 1,
page_size: None | int = None,
vins_id: None | int = None,
vins_name: None | str = None,
) -> list[dict]:
"""
Implementation of functionality of the API method
`/cloudapi/account/listFlipGroups`.
"""
api_params = {
'accountId': account_id,
'byIp': flig_group_ip,
'extnetId': ext_net_id,
'flipGroupId': flig_group_id,
'name': flig_group_name,
'page': page_number if page_size else None,
'size': page_size,
'vinsId': vins_id,
'vinsName': vins_name,
}
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/listFlipGroups',
arg_params=api_params,
)
flip_groups = api_resp.json()['data']
for fg in flip_groups:
fg['createdTime_readable'] = self.sec_to_dt_str(fg['createdTime'])
fg['deletedTime_readable'] = self.sec_to_dt_str(fg['deletedTime'])
fg['updatedTime_readable'] = self.sec_to_dt_str(fg['updatedTime'])
return flip_groups
@waypoint
def account_audits(self, account_id: int,
fail_if_not_found=False) -> None | list:
"""
Implementation of functionality of the API method
`/cloudapi/account/audits`.
@param (bool) fail_if_not_found: If `True` is specified, then
the method `self.amodule.fail_json(**self.result)` will be
called if account is not found.
"""
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/audits',
arg_params={'accountId': account_id},
not_fail_codes=[404]
)
if api_resp.status_code != 200:
if fail_if_not_found:
self.result['msg'] = ("Current user does not have access to"
" the requested account or non-existent"
" account specified.")
self.amodule.fail_json(**self.result)
return
audits = api_resp.json()
for a in audits:
a['timestamp_readable'] = self.sec_to_dt_str(int(a['timestamp']))
return audits
###################################
# GPU resource manipulation methods

21
wiki/5.4.0/Home.md Normal file
View File

@@ -0,0 +1,21 @@
1. [Введение](./введение.md)
- [Введение](./введение.md#введение)
- [Системные требования](./введение.md#системные-требования)
- [Подготовка к работе](./введение.md#подготовка-к-работе)
- [Авторизация](./введение.md#авторизация)
- [Общие параметры модулей для авторизации](./введение.md#общие-параметры-модулей-для-авторизации)
- [Пример авторизации с помощью app_id и app_secret](./введение.md#пример-авторизации-с-помощью-app_id-и-app_secret)
- [Пример авторизации с помощью JSON Web Token](./введение.md#пример-авторизации-с-помощью-json-web-token)
1. Ansible модули DECORT:
- [Модуль decort_kvmvm](./модуль-decort_kvmvm.md) - управление виртуальными машинами
- [Модуль decort_osimage](./модуль-decort_osimage.md) - управление образами
- [Модуль decort_disk](./модуль-decort_disk.md) - управление дисками
- [Модуль decort_pfw](./модуль-decort_pfw.md) - управление правилами переадресации портов
- [Модуль decort_rg](./модуль-decort_rg.md) - управление ресурсными группами
- [Модуль decort_vins](./модуль-decort_vins.md) - управление внутренними сетями
- [Модуль decort_jwt](./модуль-decort_jwt.md) - получение авторизационного токена
- [Модуль decort_bservice](./модуль-decort_bservice.md) - управление базовыми службами
- [Модуль decort_group](./модуль-decort_group.md)- управление группами базовой службы
- [Модуль decort_k8s](./модуль-decort_k8s.md) - управление кластерами Kubernetes
- [Модуль decort_lb](./модуль-decort_lb.md) - управление балансировщиками нагрузки
- [Модуль decort_account_info](./модуль-decort_account_info.md) - получение информации об аккаунте

View File

@@ -0,0 +1,182 @@
# Модули Ansible для управления облачными ресурсами в платформе DECORT
## Введение
Настоящая документация содержит руководство пользователя по библиотеке модулей decort для Ansible. С помощью этих модулей Вы сможете управлять созданием и конфигурированием облачных ресурсов в платформе DECORT (Digital Energy Cloud Orchestration Technology).
По каждому модулю есть своя документация, в которой вы можете найти список доступных действий, подробную информацию о входных параметрах и возвращаемых данных, а также примеры использования.
## Системные требования
Убедитесь, что Ваша система соответствует требованиям для работы модуля DECORT.
Системные требования для работы модуля:
- Ansible 2.16.5 or higher
- Python 3.10.12 or higher
- PyJWT 1.7.1 Python module or higher
- requests Python module
- netaddr Python module
- DECORT cloud platform version 4.0.0
## Подготовка к работе
Для начала работы необходимо, чтобы Ansible было известно местоположение файлов модулей. Для этого необходимо:
- либо разместить директории **library** и **module_utils** в одной директории с плейбуками
- либо в рабочей директории, из которой будет запускаться Ansible, разместить файл **ansible.cfg**, в котором задать пути к файлам модулей, например:
```
[defaults]
library=./library
module_utils=./module_utils
```
## Авторизация
### Общие параметры модулей для авторизации
<table>
<tr>
<th colspan="6">Параметр</th>
<th>Тип</th>
<th>Описание</th>
</tr>
<tr>
<td colspan="6">
app_id
</td>
<td>
(str)
</td>
<td>
Идентификатор приложения, использующийся для подключения к контроллеру
облачной платформы DECORT в режиме <code>authenticator: oauth2</code>.
Данный параметр является обязательным для указанного режима. Если
параметр не задан в playbook, модуль будет использовать значение
переменной окружения <code>DECORT_APP_ID</code>.
</td>
</tr>
<tr>
<td colspan="6">
app_secret
</td>
<td>
(str)
</td>
<td>
Секретный ключ приложения, который используется для подключения к
контроллеру облачной платформы DECORT в режиме
<code>authenticator: oauth2</code>. Данный параметр является
обязательным для указанного режима. Так как он содержит секретную
информацию, то его не рекомендуется задавать непосредственно в
playbook. Если параметр не задан в playbook, то модуль будет
использовать значение переменной окружения
<code>DECORT_APP_SECRET</code>.
</td>
</tr>
<tr>
<td colspan="6">
authenticator
</td>
<td>
(str)
<br>Значения:
<br/><code>oauth2</code>
<br/><code>jwt</code>
</td>
<td>
Режим аутентификации при подключении к контроллеру облачной платформы
DECORT. Обязательный параметр.
</td>
</tr>
<tr>
<td colspan="6">
controller_url
</td>
<td>
(str)
</td>
<td>
URL контроллера, соответствующего экземпляру облачной платформы
DECORT. Данный параметр является обязательным.
</td>
</tr>
<tr>
<td colspan="6">
jwt
</td>
<td>
(str)
</td>
<td>
JSON Web Token (JWT), который будет использоваться для подключения
к контроллеру облачной платформы DECORT в режиме
<code>authenticator: jwt</code>. Данный параметр является
обязательным для указанного режима. Так как он содержит
потенциально секретную информацию, а сам JWT, как правило,
имеет ограниченное время жизни, то его не рекомендуется задавать
непосредственно в playbook. Если этот параметр не определен в
playbook, то модуль будет использовать значение переменной
окружения <code>DECORT_JWT</code>.
</td>
</tr>
<tr>
<td colspan="6">
oauth2_url
</td>
<td>
(str)
</td>
<td>
URL авторизационного сервера, работающего по протоколу Oauth2,
который должен использоваться в режиме
<code>authenticator: oauth2</code>. Данный параметр является
обязательным для указанного режима. Если параметр не задан в
playbook, модуль будет использовать значение переменной
окружения <code>DECORT_OAUTH2_URL</code>.
</td>
</tr>
<tr>
<td colspan="6">
verify_ssl
</td>
<td>
(bool)
<br>Default: <code>true</code>
</td>
<td>
Позволяет отключить проверку SSL сертификатов при выполнении API
вызовов в адрес контроллера облачной инфраструктуры, например,
при работе с изолированной облачной инфраструктурой, использующей
самоподписанные сертификаты. Применяйте данный параметр с
осторожностью, предпочтительно в защищенных средах.
</td>
</tr>
</table>
### Пример авторизации с помощью app_id и app_secret
```
- name: Example
hosts: localhost
tasks:
- name: Auth with app_id and app_secret
decort_module_name:
# Специфичные для модулей параметры упущены
# Пример демонстрирует только параметры для авторизации
app_id: "{{ app_id }}"
app_secret: "{{ app_secret }}"
authenticator: oauth2
controller_url: "{{ controller_url }}"
oauth2_url: "{{ oauth2_url }}"
```
### Пример авторизации с помощью JSON Web Token
```
- name: Example
hosts: localhost
tasks:
- name: Auth with JWT
decort_module_name:
# Специфичные для модулей параметры упущены
# Пример демонстрирует только параметры для авторизации
authenticator: jwt
controller_url: "{{ controller_url }}"
jwt: "{{ jwt }}"
```

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,92 @@
# Модуль decort_bservice
## Обзор модуля decort_bservice
Базовая служба (Basic Service) это несколько групп виртуальных серверов (compute), создаваемых и управляемых как единое целое.
Все compute(s) в группе имеют одни и те же характеристики (cpu/ram/boot disk size/OS image + сетевые подключения). Для разных групп эти характеристики могут быть разными.
Группы в составе Basic Service могут иметь отношения parent-child с другими группами. Наличие таких отношений определяет последовательность запуска групп ("сначала parents").
На основе ресурсов, предоставляемых и управляемых через Basic Service, могут создаваться другие сервисы.
`Для взаимодействия с группами виртуальных серверов используется модуль decort_group.`
Модуль decort_bservice предназначен для управления базовыми службами, в которых находятся группы виртуальных серверов.
Данный модуль позволяет:
- Создавать Basic Service
- Удалять Basic Service (безвозвратно).
- Включать/выключать Basic Service
- Запускать Basic Service
- Запрашивать информацию о Basic Service.
## Параметры модуля decort_bservice
Ниже в алфавитном порядке приведен полный список параметров для модуля decort_bservice. Актуальную информацию по параметрам, которые поддерживает версия модуля, установленного на Вашем Ansible-сервере, можно получить командой:
`ansible-doc -t module decort_bservice`
| Параметр | Тип, допустимые значения | Описание |
| ------ | ------ | ------ |
| account_id | (int) | Уникальный целочисленный идентификатор аккаунта, которому принадлежит ресурсная группа. При идентификации базовой службы и ресурсной группы по именам (см. параметры `name` и `rg_name`) должен быть задан либо идентификатор, либо имя аккаунта (см. параметр `account_name`). Если одновременно заданы и `account_id`, и `account_name`, то `account_name` игнорируется.|
|account_name | (string) | Имя аккаунта, которому принадлежит ресурсная группа. При идентификации базовой службы и ресурсной группы по именам (см. параметры `name` и `rg_name`) должен быть задан либо идентификатор (см. `account_id`), либо имя аккаунта. Если одновременно заданы и `account_id`, и `account_name`, то `account_name` игнорируется. |
| app_id | (string) | Идентификатор приложения, использующийся для подключения к контроллеру облачной платформы DECORT в режиме authenticator: oauth2. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_APP_ID`.|
|app_secret | (string) | Секретный ключ приложения, который используется для подключения к контроллеру облачной платформы DECORT в режиме authenticator: oauth2. Данный параметр является обязательным для указанного режима. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль будет использовать значение переменной окружения `DECORT_APP_SECRET`.|
| authenticator | Значения:<br/>`oauth2`<br/>`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Данный параметр является обязательным. |
|controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должна быть создана (или уже существует) данная базовая служба. Данный параметр является обязательным.|
| jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: jwt`<br/>Данный параметр является обязательным для указанного режима.<br/>Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в _playbook_.<br/>Если этот параметр не определен в _playbook_, то модуль будет использовать значение переменной окружения `DECORT_JWT`. |
|oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, который должен использоваться в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`.|
|state | Значения: `absent`, `disabled`, `enabled`, `present`, `check`. <br> Default: `present`| Целевое состояние базовой службы. Значения `present` и `enabled` равнозначны.|
| started | (bool) <br> Default: `true` | Параметр, определяющий состояние добавленных виртуальных серверов в Basic Service. Запускать их, или нет. |
| name | (string) | Имя базовой службы. Данный параметр является обязательным при создании базовой службы и при изменении если не задан `id`. |
| sshuser | (string) | Имя пользователя, который будет создан на всех виртуальных серверах базовой службы. Используется в паре с `sshkey`. |
| sshkey | (string) | SSH ключ, который будет загружен на все виртуальные сервера базовой службы. Используется в паре с `sshuser`. |
| id | (int) | Уникальный целочисленный идентификатор базовой службы. Используется для поиска, изменения и удаления базовой службы. |
| rg_id | (int) | Уникальный целочисленный идентификатор ресурсной группы базовой службы. |
| rg_name | (string) | Имя ресурсной группы базовой службы. |
| verify_ssl | (bool)<br/>Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.<br/>Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
## Возвращаемые значения модуля decort_bservice
Модуль decort_bservice возвращает информацию о базовой службе в виде словаря facts со следующими ключами:
|Ключ | Тип данных | Описание|
| ------ | ------ | ------ |
|id | int | Уникальный целочисленный идентификатор базовой службы.|
|name | string | Имя базовой службы.|
| techStatus | string | Технический статус базовой службы. |
|state | string | Статус базовой службы.|
| rg_id | int | Уникальный целочисленный идентификатор ресурсной группы, в которой находится базовая служба.|
| account_id | int | Уникальный целочисленный идентификатор аккаунта, в котором находится ресурсная группа.|
| groups | list | Список словарей с информацией о группах базовой службы.|
## Пример использования модуля decort_bservice
Данный пример создаёт базовую службу с именем databases.
```
- name: Create Basic Service
decort_bservice:
authenticator: jwt
controller_url: "{{ controller_url }}"
jwt: "{{ auth_token }}"
name: databases
rg_id: "{{ rg_id }}"
register: db_bservice
```
Данный пример удаляет базовую службу с названием databases.
```
- name: Delete Basic Service
decort_bservice:
authenticator: jwt
controller_url: "{{ controller_url }}"
jwt: "{{ auth_token }}"
state: absent
name: databases
rg_id: "{{ rg_id }}"
register: db_bservice
```

View File

@@ -0,0 +1,177 @@
# Модуль decort_disk
## Обзор модуля decort_disk
Модуль decort_disk предназначен для управления дисками и позволяет производить с ними следующие действия:
- создавать
- удалять (в корзину или безвозвратно)
- восстановливать из корзины
- изменять:
- имя
- размер
- лимиты ввода/вывода
- включать/отключать общий доступ
Обратите внимание:
- Загрузочный диск для виртуальной машины создаётся и подключается автоматически в процессе создания этой машины.
- Модуль decort_disk служит для управления дополнительными дисками (т.н. data-дисками);
- Подключение дополнительных дисков, созданных посредством decort_disk, к виртуальным машинам выполняется с помощью модуля управления виртуальными машинами (см. модуль decort_kvmvm).
## Параметры модуля decort_disk
Ниже в алфавитном порядке приведен полный список параметров для модуля decort_disk. Актуальную информацию по параметрам, которые поддерживает версия модуля, установленного на вашем Ansible-сервере, можно получить командой:
`ansible-doc -t module decort_disk`
| Параметр | Тип, допустимые значения | Описание |
| ------ | ------ | ------ |
| account_id | (int) | Уникальный целочисленный идентификатор аккаунта, которому принадлежит данный диск. При идентификации диска по имени (см. параметр `name`) должно быть задан либо идентификатор, либо имя аккаунта (см. параметр `account_name`). Если одновременно заданы и `account_id`, и `account_name`, то `account_name` игнорируется.|
|account_name | (string) | Имя аккаунта, которому принадлежит данный диск. При идентификации диска по имени (см. параметр name) должно быть задано либо имя, либо идентификатор учётной записи (см. параметр `account_id`). Если одновременно заданы и `account_id`, и `account_name`, то `account_name` игнорируется. |
| annotation | (string)<br>Default: `Disk by decort_disk` | Текстовое описание диска. Данный параметр является опциональным и учитывается только при создании диска, а при всех прочих операциях игнорируется.|
| app_id | (string) | Идентификатор приложения, использующийся для подключения к контроллеру облачной платформы DECORT в режиме authenticator: oauth2. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_APP_ID`.|
|app_secret | (string) | Секретный ключ приложения, который используется для подключения к контроллеру облачной платформы DECORT в режиме authenticator: oauth2. Данный параметр является обязательным для указанного режима. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль будет использовать значение переменной окружения `DECORT_APP_SECRET`.|
| authenticator | Значения:<br/>`oauth2`<br/>`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Данный параметр является обязательным. |
|controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должен быть создан (или уже существует) данный диск. Данный параметр является обязательным.|
|id | (int) | Уникальный целочисленный идентификатор диска. Соответствующий диск должен существовать (таким образом, с помощью id нельзя создать новый диск, а только управлять уже имеющимися). Если задан данный параметр, то параметры `name`, `account_name` и `account_id` игнорируются.|
| iops | (int)<br>Default: `2000` | Ограничение ввода/вывода диска. Используется при создании диска. |
| force_detach | (bool)<br/>Default: `false` | Задаёт поведение платформы при попытке удалить диск, подключённый к виртуальной машине.<br/>По умолчанию, удаление подключённых дисков не разрешается, и попытка удалить такой диск приведёт к аварийному завершению модуля. Чтобы изменить это поведение, явно установите `force_detach: true`. |
|jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: jwt` Данный параметр является обязательным для указанного режима. Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в playbook. Если этот параметр не определен в playbook, то модуль будет использовать значение переменной окружения `DECORT_JWT`.|
| limitIO | (dict) | Параметр, позволяющий ограничить скорость ввода/вывода диска как в iops, так и в байтах в секунду. Обратите внимание, что параметры с total не задаются вместе с read/write. Все возможные подпараметры можно увидеть в примерах. |
| name | (string) | Имя диска. Для идентификации диска требуется либо его `name` и информация об аккаунте (`account_id` или `account_name`), которому принадлежит диск, либо его `id`.|
|oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, который должен использоваться в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`.|
| permanently | (bool)<br>Default: `false` | Параметр, использующийся при удалении диска, при значении `true` - диск удалится навсегда, а при `false` - попадёт в корзину. |
| place_with | (int) | Идентификатор образа диска, из которого следует взять параметр `sep_id`, чтобы разместить данный диск на той же системе хранения данных, что и указанный образ диска. Данный параметр является опциональным и используется только на стадии создания диска. Если задан `place_with`, то `sep_id` игнорируется.|
| pool | (string) | Название пула на системе хранения данных, в рамках которой следует создать данный диск. Этот параметр используется только на стадии создания диска и игнорируется при операциях над уже существующими дисками. Параметр является опциональным, если не задан, то платформа будет использовать пул, который сконфигурирован на целевой системе хранения как пул по умолчанию. |
| reason | (string)<br>Default: `Managed by Ansible decort_disk` | Причина, по которой было выполнено какое-либо действие. В данном модуле используется только при удалении диска. |
| sep_id | (int) | Идентификатор системы хранения данных (Storage End-point). Данный параметр определяет систему хранения данных, на ресурсах которой создаётся диск. Используется только при создании диска и игнорируется при прочих операциях. Альтернативой данному параметру является `place_with`, позволяющий разместить диск на той же системе хранения, что и указанный образ диска, на базе которого создаётся виртуальная машина.|
| shareable | (bool)<br>Default: `false` | Включение/отключение общего доступа к диску.
| size | (int) | Размер диска в ГБ. Этот параметр является обязательным при создании диска. Если он задан для уже существующего диска, а текущий размер диска меньше заданного, то будет предпринята попытка увеличить размер диска. При прочих операциях данный параметр игнорируется.|
| state | (str)<br>Значения:<br>`present`<br>`absent`<br>Default: `present` | Целевое состояние диска. |
| type | (string)<br>Значения:<br>`B`<br>`D`<br>Default: `D` | Тип создаваемого диска. `B` - Boot/загрузочный, `D` - Data/с данными. |
| verify_ssl | (bool)<br/>Default: `false` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.<br/>Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
## Возвращаемые значения модуля decort_disk
Модуль decort_disk возвращает информацию о диске в виде словаря facts со следующими ключами:
|Ключ | Тип данных | Описание|
| ------ | ------ | ------ |
| account_id | int | Уникальный целочисленный идентификатор аккаунта, которому принадлежит диск.|
| attached_to | int | Идентификатор виртуальной машины, к которой в настоящий момент подключён диск. Если диск не подключён, то `attached_to: 0`|
| gid | int | Идентификатор физического кластера (Grid ID), на ресурсах которого создан диск.|
| id | int | Уникальный целочисленный идентификатор данного диска.|
| iotune | dict | Текущие ограничения ввода/вывода диска. |
| name | string | Имя диска. Обратите внимание, что имя диска не является уникальным с точки зрения системы хранения данных, на которой этот диск расположен.|
| pool | string | Имя пула на системе хранения данных, в котором размещаются ресурсы диска.|
|sep_id | int | Идентификатор системы хранения данных (Storage Endpoint), на которой размещаются ресурсы данного диска.|
| size | int | Размер диска в ГБ.|
| state | string | Текущий статус диска. |
## Пример использования модуля decort_disk
В данном примере создаётся диск размером 50ГБ (`size: 50`), с ограничением ввода/вывода в 2000 iops, на ресурсах системы хранения данных под номером 1 (`sep_id: 1`) в пуле "data01".
```
- name: Manage disk
decort_disk:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
name: "DataDisk01"
size: 50
account_name: "MyAccount"
sep_id: 1
iops: 2000
annotation: "Disk example"
pool: data01
register: my_data_disk01
```
В следующих двух примерах для существующего диска с именем "DataDisk01" задаются все доступные лимиты на операции ввода/вывода.
```
- name: Manage disk
decort_disk:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
name: "DataDisk01"
account_name: "MyAccount"
limitIO:
read_bytes_sec: 10000
write_bytes_sec: 5000
read_iops_sec и write_iops_sec
read_iops_sec: 2500
write_iops_sec: 1000
read_bytes_sec_max: 11000
write_bytes_sec_max: 6000
read_iops_sec_max: 3000
write_iops_sec_max: 1500
size_iops_sec: 1000
register: my_data_disk01
- name: Manage disk
decort_disk:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
name: "DataDisk01"
account_name: "MyAccount"
limitIO:
total_bytes_sec: 15000
total_iops_sec: 3500
total_bytes_sec_max: 17000
total_iops_sec_max: 4500
size_iops_sec: 1000
register: my_data_disk01
```
В данном примере выполняется восстановление удаленного диска с id 111 из корзины.
```
- name: Manage disk
decort_disk:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
id: 111
size: 10
register: my_data_disk01
```
В данном примере выполняется переименование диска с id 111 на новое имя "NewExampleDisk".
```
- name: Manage disk
decort_disk:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
id: 111
name: "NewExampleDisk"
size: 10
register: my_data_disk01
```
Здесь результат работы модуля decort_disk записывается в переменную my_data_disk01. Для получения идентификатора диска, например, при подключении его к виртуальной машине, следует воспользоваться показанной ниже конструкцией:
```
- name: Manage compute
decort_kvmvm:
<< для краткости фрагмент опущен >>
data_disks:
- "{{ my_data_disk01.facts.id }}"
<< для краткости фрагмент опущен >>
```

View File

@@ -0,0 +1,105 @@
# Модуль decort_group
## Обзор модуля decort_group
Модуль **decort_group** позволяет производить следующие действия над группами базовой службы:
- создать
- получить информацию
- запустить/остановить
- подключить/отключить сети (для существующей группы только внутренние сети)
- изменить
- имя
- объём загрузочного диска
- количество ВМ
- роль
- количество виртуальных процессоров
- объём ОЗУ
- удалить (безвозвратно)
## Параметры модуля decort_group
Ниже приведен полный список параметров для модуля **decort_group**.
| Параметр | Тип, допустимые значения | Описание |
| ------ | ------ | ------ |
| account_id | (int) | Идентификатор аккаунта. При идентификации диска по имени (см. параметр `name`) должен быть задан либо идентификатор, либо имя аккаунта (см. параметр `account_name`). Если одновременно заданы и `account_id`, и `account_name`, то `account_name` игнорируется. |
| account_name | (string) | Имя аккаунта. При идентификации диска по имени (см. параметр `name`) должно быть задано либо имя, либо идентификатор аккаунта (см. параметр `account_id`). Если одновременно заданы и `account_id`, и `account_name`, то `account_name` игнорируется. |
| app_id | (string) | Идентификатор приложения, использующийся для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_APP_ID`. |
| app_secret | (string) | Секретный ключ приложения, который используется для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль будет использовать значение переменной окружения `DECORT_APP_SECRET`. |
| authenticator | (str)<br>Значения:<br>`oauth2`<br>`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Обязательный параметр. |
| boot_disk | (int) | Обьём загрузочного диска. |
| bservice_id | (int) | Идентификатор базовой службы. Обязательный параметр. |
| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT. Данный параметр является обязательным. |
| count | (int) | Количество виртуальных машин. Обязательный параметр. |
| cpu | (int) | Количество виртуальных процессоров. |
| driver | (string)<br>Default: `KVM_X86` | Драйвер. |
| id | (int) | Идентификатор группы. |
| image_id | (int) | Идентификатор образа. |
| jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: jwt` Данный параметр является обязательным для указанного режима. Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в playbook. Если этот параметр не определен в playbook, то модуль будет использовать значение переменной окружения `DECORT_JWT`. |
| name | (str) | Имя группы. Обязательный параметр.
| networks | (list) | Список словарей, описывающих сети, которые должны быть подключены.<br>Ключи словаря:<br>&bull; `type` (string) (обязательный) - тип сети; значения: `VINS` (внутренняя) или `EXTNET` (внешняя)<br>&bull; `id` (int) (обязательный) - идентификатор сети |
| oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, который должен использоваться в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`. |
| ram | (int) | Объём оперативной памяти. |
| role | (string) | Тег роли. |
| state | (str)<br>Значения:<br>`present`<br>`absent`<br>`started`<br>`stopped`<br>`check`<br>Default: `present` |
| timeoutStart | (int) | Время отсрочки запуска группы после создания в секундах. |
| verify_ssl | (bool)<br>Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты. Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
## Возвращаемые значения модуля decort_group
Модуль **decort_group** возвращает информацию о диске в виде словаря facts со следующими ключами:
|Ключ | Тип данных | Описание|
| ------ | ------ | ------ |
| account_id | int | Идентификатор аккаунта. |
| Computes | list | Список словарей, содержащих информацию о виртуальных машинах группы.<br>Ключи словаря:<br>&bull; `id` (int) - идентификатор ВМ<br>&bull; `ipAddresses` (list) - список IP-адресов ВМ<br>&bull; `name` (str) - имя ВМ<br>&bull; `osUsers` (list) - список словарей, содержащих учётные данные пользователей ОС ВМ по умолчанию; ключи: `login` (str) и `password` (str) |
| id | int | Идентификатор группы.|
| name | string | Имя группы.|
| rg_id | int | Идентификатор ресурсной группы. |
| state | string | Состояние группы. |
| techStatus | string | Технический статус группы. |
## Пример использования модуля decort_group
Данный пример создаёт группу с именем `test_group`.
```
- hosts: localhost
tasks:
- name: Create BS group
decort_group:
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
authenticator: oauth2
boot_disk: 10
bservice_id: 1823
controller_url: "https://ds1.digitalenergy.online"
count: 2
cpu: 2
image_id: 518
name: test_group
networks:
- type: VINS
id: 1987
oauth2_url: "https://sso.digitalenergy.online"
ram: 2
verify_ssl: false
register: group_test
```
Данный пример удаляет группу с именем `test_group`.
```
- hosts: localhost
tasks:
- name: Delete BS group
decort_group:
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
authenticator: oauth2
bservice_id: 1823
controller_url: "https://ds1.digitalenergy.online"
name: test_group
oauth2_url: "https://sso.digitalenergy.online"
state: absent
verify_ssl: False
register: group_test
```

View File

@@ -0,0 +1,53 @@
# Вспомогательный модуль для получения авторизационного JWT токена decort_jwt
## Обзор модуля decort_jwt
Модуль **decort_jwt** предназначен для получения авторизационного токена JWT (JSON Web Token). Данный модуль может быть полезен при массовом создании ресурсов (например, виртуальных машин), так как позволяет оптимизировать количество API вызовов, инициируемых в адрес контроллера облачной платформы.
По сути, данный модуль является провайдером информации и не управляет облачными ресурсами (всегда возвращает `changed: False`).
## Параметры модуля decort_jwt
Ниже в алфавитном порядке приведен полный список параметров для модуля **decort_jwt**. Актуальную информацию по параметрам, которые поддерживает версия модуля, установленного на вашем Ansible-сервере, можно получить командой:
`ansible-doc -t module decort_jwt`
|Параметр | Тип, допустимые значения | Описание|
| ------ | ------ | ------ |
| app_id | (string) | Идентификатор приложения, использующийся для подключения к авторизационному серверу. Данный параметр является обязательным. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_APP_ID`. |
| app_secret | (string) | Секретный ключ приложения, который используется для подключения к авторизационному серверу. Данный параметр является обязательным. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль будет использовать значение переменной окружения `DECORT_APP_SECRET`. |
| oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, у которого запрашивается JWT. Данный параметр является обязательным. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`. |
| validity | (int)<br>Default: `3600` | Срок действия JWT в секундах. |
| verify_ssl | (bool)<br>Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес авторизационного сервера, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.<br/>Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
## Возвращаемые значения модуля decort_jwt
При успешном выполнении модуль **decort_jwt** возвращает JWT-токен, который доступен по ключу `jwt` (str).
## Пример использования модуля decort_jwt
В данном примере сначала запрашивается JWT со сроком действия 1200 сек., а затем этот JWT используется для создания виртуальной машины в режиме авторизации `jwt` (подробнее о данном режиме см. в разделе «Примеры различных режимов авторизации»).
```
- hosts: localhost
tasks:
- name: Obtain JWT with validity of 1200 sec from the OAuth2 provider
decort_jwt:
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
validity: 1200
register: my_token
```
```
- name: Create VM in JWT authorization mode
decort_kvmvm:
authenticator: jwt
jwt: "{{ my_token.jwt }}"
controller_url: "https://cloud.digitalenergy.online"
name: NewVM01
cpu: 2
ram: 4096
<<<дальнейшие детали опущены>>>
```
Обратите внимание, как используется JWT при создании новой ВМ (в предположении, что результат выполнения task для модуля **decort_jwt** был сохранен в переменной my_token):
```
jwt: "{{ my_token.jwt }}"
```

View File

@@ -0,0 +1,108 @@
# Модуль decort_k8s
## Обзор модуля decort_k8s
Модуль **decort_k8s** предназначен для выполнения следующих действий над кластерами Kubernetes:
- создать
- получить информацию
- отключить/включить/запустить
- изменить группы Worker-узлов
- удалить (в корзину или безвозвратно)
- восстановить из корзины
## Параметры модуля decort_k8s
Ниже приведен полный список параметров для модуля **decort_k8s**:
| Параметр | Тип, допустимые значения | Описание |
| ------ | ------ | ------ |
| account_id | (int) | Идентификатор аккаунта. |
| account_name | (string) | Имя аккаунта. |
| additionalSANs | (list) | Список дополнительных SAN (Subject Alternative Names) для использования в процессе автоматического выписывания сертификата Кластера Kubernetes. Можно использовать IP-адреса и доменные имена.
| app_id | (string) | Идентификатор приложения, использующийся для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_APP_ID`. |
| app_secret | (string) | Секретный ключ приложения, который используется для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль будет использовать значение переменной окружения `DECORT_APP_SECRET`. |
| authenticator | (str)<br>Значения:<br/>`oauth2`<br/>`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Обязательный параметр. |
| cluster_conf | (dict) | Словарь с глобальными настройками и конфигурацией для всего кластера. Включает в себя такие настройки, как имя кластера, настройки DNS, методы аутентификации и другие конфигурации всего кластера. |
| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT. Данный параметр является обязательным. |
| description | (string)<br>Default: `Created by decort ansible module` | Описание кластера. |
| extnet_id | (int)<br>Default: `0` | Идентификатор внешней сети. Если задан `0`, то внешняя сеть выбирается автоматически. Если задан параметр `vins_id`, то значение данного параметра будет проигнорировано. Если задан `extnet_only: false`, то внешняя сеть будет подключена к создаваемой внутренней сети, а если `extnet_only: true`, то либо напрямую к каждому узлу кластера (если `with_lb: false`), либо напрямую к балансировщику нагрузки (если `with_lb: true`). |
| extnet_only | (bool)<br>Default: `false` | Не использовать внутреннюю сеть, подключать напрямую к внешней. |
| getConfig | (bool)<br>Default: `false` | Получить данные конфигурации для доступа к кластеру Kubernetes. |
| ha_lb | (bool)<br>Default: `false` | Использовать схему высокой доступности для создаваемого балансировщика нагрузки (если `with_lb: true`). |
| id | (int) | Идентификатор кластера Kubernetes. |
| init_conf | (dict) | Словарь для определения настроек и действий, которые должны быть выполнены перед запуском любого другого компонента в кластере. Позволяет настраивать такие процессы, как регистрация узла, настройка сети и другие задачи инициализации.
| join_conf | (dict) | Словарь для настройки поведения и параметров присоединения узла к кластеру. Включает в себя такие параметры, как control-plane-endpoint кластера, токен и certificate-key. |
| jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: jwt`. Данный параметр является обязательным для указанного режима. Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в playbook. Если этот параметр не определен в playbook, то модуль будет использовать значение переменной окружения `DECORT_JWT`. |
| k8ci_id | (int) | Идентификатор конфигурации кластера Kubernetes. Обязательный параметр. |
| kubeproxy_conf | (dict) | Словарь для настройки поведения и настроек Kube-proxy, отвечающего за сетевое проксирование и балансировку нагрузки внутри кластера. Включает в себя такие параметры, как режим прокси, диапазоны IP-адресов кластера и другие конфигурации, специфичные для Kube-proxy. |
| kublet_conf | (dict) | Словарь для настройки поведения и настроек Kubelet, который является агентом основного узла, работающим на каждом узле кластера. Включает в себя такие параметры, как IP-адрес узла, распределение ресурсов, политики вытеснения модулей и другие конфигурации, специфичные для Kubelet. |
| master_count | (int)<br>Default: `1` | Количество Master-узлов. |
| master_cpu | (int)<br>Default: `2` | Количество виртуальных процессоров на Master-узле. |
| master_disk | (int)<br>Default: `10` | Объём загрузочного диска на Master-узле. |
| master_pool | (str) | Пул СХД, заданной параметром `master_sepid`. |
| master_ram | (int)<br>Default: `2048` | Объём оперативной памяти на Master-узле. |
| master_sepid | (int) | Идентификатор СХД для Master-узла. Если не задан, то используется СХД образа Master-узла. |
| name | (string) | Имя кластера Kubernetes. |
| network_plugin | (str)<br>Значения:<br>`flannel`<br>`calico`<br>`weavenet`<br>Default: `flannel` | CNI plugin (модуль для управления сетевыми интерфейсами контейнера). Возможные значения могут быть ограничены в используемой конфигурации кластера Kubernetes (параметр `k8ci_id`) |
| oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, который должен использоваться в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`. |
| oidc_cert | (raw) | Сертификат X.509 для OIDC-провайдера.
| permanent | (bool)<br>Default: `false` | Если выполняется удаление, то выполнить безвозвратное удаление (минуя корзину). |
| rg_id | (int) | Идентификатор ресурсной группы. |
| rg_name | (str) | Имя ресурсной группы. |
| started | (bool)<br>Default: `true` | Автоматический запуск кластера после его создания. |
| state | (string)<br>Значения:<br>`present`<br>`absent`<br>`enabled`<br>`disabled`<br>`check`<br>Default: `present` | Целевое состояние кластера. |
| verify_ssl | (bool)<br>Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты. Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
| vins_id | (int) | Идентификатор внутренней сети. Если не задан, то будет создана новая внутренняя сеть. Если задан, то заданная внутренняя сеть должна иметь подключение к внешней сети. Если задано `extnet_only: true`, то параметр игнорируется.
| with_lb | (bool)<br>Default: `true` | Создание кластера Kubernetes с размещением Master-узлов за балансировщиком нагрузки. В ином случае каждый узел получит отдельный адрес из внешней сети.
| workers | (list) | Обязательный параметр. Список словарей, описывающих группы Worker-узлов.<br>Ключи словаря:<br>&bull; `annotations` (list) (необязательный) - список строк с annotations в формате: `key1=value1`<br>&bull; `ci_user_data` (dict) (необязательный) - конфигурация для cloud-init<br>&bull; `cpu` (int) (обязательный) - количество виртуальных процессоров на узле<br>&bull; `disk` (int) (обязательный) - объём загрузочного диска на узле<br>&bull; `labels` (list) (необязательный) - список строк с labels в формате: `label1=value1`<br>&bull; `name` (string) (обязательный) - имя группы Worker-узлов<br>&bull; `num` (int) (обязательный) - количество узлов<br>&bull; `pool` (str) (обязательный) - пул СХД, заданной ключом `sep_id`<br>&bull; `ram` (int) (обязательный) - объём оперативной памяти на узле<br>&bull; `sep_id` (int) (обязательный) - идентификатор СХД; если задать `null`, то используется СХД образа узла<br>&bull; `taints` (list) (необязательный) - список строк с taints в формате: `key1=value1:NoSchedule` |
## Возвращаемые значения модуля decort_k8s
Модуль **decort_k8s** возвращает информацию о кластере в виде словаря `facts` со следующими ключами:
| Ключ | Тип данных | Описание |
| ------ | ------ | ------ |
| account_id | int | Идентификатор аккаунта. |
| config | str | Kuber config кластера.
| id | int | Идентификатор кластера. |
| k8s_Masters | dict | Словарь с информацией о группе Master-узлов.<br>Ключи словаря:<br>&bull; `cpu` (int) - количество виртуальных процессоров<br>&bull; `detailedInfo` (list) - список словарей с информацией об узлах; ключи словаря: `id` (int) - идентификатор ВМ, `name` (str) - имя ВМ, `status` (str) - статус ВМ, `techStatus` (str) - технический статус ВМ<br>&bull; `disk` (int) - объём загрузочного диска<br>&bull; `id` (int) - идентификатор группы<br>&bull; `name` (str) - имя группы<br>&bull; `num` (int) - количество узлов<br>&bull; `ram` (int) - объём оперативной памяти
| k8s_Workers | dict | Список словарей с информацией о группах Worker-узлов.<br>Ключи словаря:<br>&bull; `cpu` (int) - количество виртуальных процессоров<br>&bull; `detailedInfo` (list) - список словарей с информацией об узлах; ключи словаря: `id` (int) - идентификатор ВМ, `name` (str) - имя ВМ, `status` (str) - статус ВМ, `techStatus` (str) - технический статус ВМ<br>&bull; `disk` (int) - объём загрузочного диска<br>&bull; `id` (int) - идентификатор группы<br>&bull; `labels` (list) - список строк с labels<br>&bull; `name` (str) - имя группы<br>&bull; `num` (int) - количество узлов<br>&bull; `ram` (int) - объём оперативной памяти<br>&bull; `taints` (list) - список строк с taints
| name | string | Имя кластера. |
| rg_id | int | Идентификатор ресурсной группы. |
| state | string | Статус кластера. |
| techStatus | string | Технический статус кластера. |
| vins_id | int | Идентификатор внутренней сети кластера. |
## Пример использования модуля decort_k8s
Пример создания кластера Kubernetes с именем `cluster-test` с получением Kuber config.
```
- name: Create a k8s cluster named cluster-test
decort_k8s:
authenticator: jwt
controller_url: "https://ds1.digitalenergy.online"
getConfig: true
jwt: "{{ token.jwt }}"
k8ci_id: 18
name: cluster-test
rg_id: 125
workers:
- cpu: 10
disk: 10
name: wg1
num: 1
pool: null
ram: 1024
sep_id: null
- cpu: 10
disk: 10
name: wg2
num: 2
pool: null
ram: 1024
sep_id: null
register: k8s_cluster
```

View File

@@ -0,0 +1,106 @@
# Модуль decort_kvmvm
## Обзор модуля decort_kvmvm
Модуль **decort_kvmvm** предназначен для выполнения следующих действий над виртуальными машинами:
- создать
- получить информацию
- остановить/приостановить/запустить
- подключить/отключить диски с данными
- подключить/отключить сети
- изменить
- объём загрузочного диска в большую сторону
- количество CPU
- объём ОЗУ
- тэги
- affinity метку
- affinity правила
- anti-affinity правила
- удалить (безвозвратно)
## Параметры модуля decort_kvmvm
Ниже в алфавитном порядке приведен полный список параметров для модуля **decort_kvmvm**. Актуальную информацию по параметрам, которые поддерживает версия модуля, установленного на вашем Ansible-сервере, можно получить командой:
`ansible-doc -t module decort_kvmvm`
| Параметр | Тип, допустимые значения | Описание |
| ------ | ------ | ------ |
| aaff_rule | (list) | Список словарей, описывающих anti-affinity правила.<br>Ключи словаря:<br>&bull; `topology` (string) (обязательный) - назначение правила; значения: `node` (узел) или `compute` (ВМ)<br>&bull; `policy` (string) (обязательный) - степень "необходимости" этого правила; значения: `RECOMMENDED` или `REQUIRED`<br>&bull; `mode` (string) (обязательный) - режим сравнения; значения: `EQ` (должно соответствовать), `NE` (не должно соответствовать), `ANY` (любое)<br>&bull; `key` (string) (обязательный) - ключ, который учитывается при анализе данного правила<br>&bull; `value` (string) (обязательный) - значение ключа, учитываемого при анализе данного правила (зависит от ключа `mode`)
| account_id | (int) | Идентификатор аккаунта. Этот параметр является опциональным и используется в сценариях, когда уже существующая ресурсная группа задается комбинацией `account_id` и `rg_name`. Если задан `account_id`, то `account_name` игнорируется.|
| account_name | (string) | Имя аккаунта. Этот параметр является опциональным и используется в сценариях, когда уже существующая ресурсная группа задается комбинацией `account_name` и `rg_name`. Если задан `account_id`, то `account_name` игнорируется. |
| aff_rule | (list) | Список словарей, описывающих affinity правила.<br>Ключи словаря:<br>&bull; `topology` (string) (обязательный) - назначение правила; значения: `node` (узел) или `compute` (ВМ)<br>&bull; `policy` (string) (обязательный) - степень "необходимости" этого правила; значения: `RECOMMENDED` или `REQUIRED`<br>&bull; `mode` (string) (обязательный) - режим сравнения; значения: `EQ` (должно соответствовать), `NE` (не должно соответствовать), `ANY` (любое)<br>&bull; `key` (string) (обязательный) - ключ, который учитывается при анализе данного правила<br>&bull; `value` (string) (обязательный) - значение ключа, учитываемого при анализе данного правила (зависит от ключа `mode`)
| affinity_label | (str) | Метка affinity.
| annotation | (string) | Опциональное описание виртуальной машины. Этот параметр используется только при создании.|
| app_id | (string) | Идентификатор приложения, использующийся для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль **decort_kvmvm** будет использовать значение переменной окружения `DECORT_APP_ID`.|
| app_secret | (string) | Секретный ключ приложения, который используется для подключения к контроллеру облачной платформы DCORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль **decort_kvmvm** будет использовать значение переменной окружения `DECORT_APP_SECRET`.|
| arch | (str)<br>Значения:<br/>`X86_64`<br>`PPC64_LE`<br>Default: `X86_64` | Архитектура виртуальной машины. |
| authenticator | (str)<br>Значения:<br>`oauth2`<br>`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Обязательный параметр. |
| boot_disk | (int) | Объём загрузочного диска виртуальной машины в ГБ. |
| ci_user_data | (dict) | конфигурация для cloud-init
| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должен быть создан (или уже существует) данная виртуальная машина. Данный параметр является обязательным. |
| cpu | (int) | Количество виртуальных процессоров, выделяемых виртуальной машине. |
| data_disks | (list) | Список идентификаторов дисков, которые следует подключить к данной виртуальной машине как дополнительные. |
| id | (int) | Уникальный цифровой идентификатор виртуальной машины. Этот параметр используется как один из методов идентификации существующей ВМ (альтернатива по комбинации `name`, `rg_name` и `account_name`). Если при вызове модуля **decort_kvmvm** существующая ВМ идентифицируется по `id`, то параметры `account_id`, `account_name`, `rg_id` и `rg_name` игнорируются. |
| image_id | (int) | Уникальный цифровой идентификатор образа, на базе которого следует создать виртуальную машину. При создании задать этот параметр или параметр `image_name`. При любых других операциях данные параметры игнорируются. Если заданы оба этих параметра (`image_id` и `image_name`), то `image_name` игнорируется. |
| image_name | (string) | Название образа, на базе которого следует создать ВМ. При создании требуется задать этот параметр или параметр `image_id`. При любых других операциях данные параметры игнорируются. |
| jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: jwt`. Данный параметр является обязательным для указанного режима. Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в playbook. Если этот параметр не определен в playbook, то модуль **decort_kvmvm** будет использовать значение переменной окружения `DECORT_JWT`.
| name | (string) | Имя ВМ. Чтобы модуль **decort_kvmvm** мог управлять сервером по его названию, также необходимо задать комбинацию `account_name` и `rg_name` или `rg_id`. Если для существующей ВМ указаны и `name`, и `id`, то параметр `name` игнорируется и идентификация сервера выполняется по `id`.|
| networks | (list) | Список словарей, описывающих сети для подключения к ВМ.<br>Ключи словаря:<br>&bull; `type` (string) (обязательный) - тип сети; значения: `VINS` (внутренняя) или `EXTNET` (внешняя)<br>&bull; `id` (int) (обязательный) - идентификатор сети<br>&bull; `ip_addr` (string) (необязательный) - IP-адрес, используемый для подключения к данной сети. |
| oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, который должен использоваться в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль **decort_kvmvm** будет использовать значение переменной окружения `DECORT_OAUTH2_URL`. |
| pool | (str) | Пул СХД, заданной параметром `sep_id`. Если пул не задан, то он будет выбран платформой.
| ram | (int) | Объем оперативной памяти в МБ, выделенной данной ВМ. Параметр является обязательным при создании. Если указать его для уже существующей ВМ, то будет выполнена попытка изменить объем выделенной памяти. |
| rg_id | (int) | Уникальный цифровой идентификатор уже существующей ресурсной группы, в которой будет создана новая или находится уже существующая ВМ. Данный параметр является одним из методов идентификации существующей РГ (альтернативой является задание комбинации `account_name` и `rg_name`).|
| rg_name | (string) | Имя уже существующей ресурсной группы, в которой будет создаа новая или находится уже существующая ВМ. Данный параметр является одним из методов идентификации существующей РГ, когда задается пара `account_name` и `rg_name` (альтернативой является задание `rg_id`). Если заданы и `rg_id`, и `rg_name`, то параметр `rg_name` игнорируется.|
| sep_id | (int) | Идентификатор СХД для загрузочного диска ВМ. Если не задан, то будет использоваться СХД образа.
| ssh_key | (string) | Открытая часть SSH-ключа, который необходимо добавить на создаваемую ВМ для пользователя, заданного параметром `ssh_key_user`. Данный параметр применим только для ОС Linux, используется только при создании и игнорируется при других операциях. |
| ssh_key_user | (string) | Имя пользователя в гостевой ОС (только для Linux), для которого добавляется SSH-ключ, заданный параметром `ssh_key`. Данный параметр является обязательным, если задан `ssh_key`. Используется только при создании и игнорируется при других операциях. |
| state | (str)<br>Значения:<br>`present`<br>`absent`<br>`poweredon`<br>`poweredoff`<br>`halted`<br>`paused`<br>`check`<br>Default: `present` | Целевое состояние ВМ.<br> Значение `halted` - синоним к `poweredoff`. Значения `present` и `poweredon` равнозначны. <br>Значение `check` вызывает модуль в _read-only_ режиме и считывает характеристики существующей ВМ. |
| tag | (dict) | Словарь, пары ключ-значение которого, описывают тэги для ВМ. |
| verify_ssl | (bool)<br>Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.<br>Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
## Возвращаемые значения модуля decort_kvmvm
Модуль **decort_kvmvm** возвращает информацию о виртуальной машине в виде словаря `facts` со следующими ключами:
| Ключ | Тип данных | Описание |
| ------ | ------ | ------ |
| account_id | int | Идентификатор аккаунта. |
| arch | string | Архитектура ВМ. |
| cpu | int | Количество виртуальных процессоров. |
| data_disks | list | Список идентификаторов дисков с данными, подключенных к ВМ. |
| disk_size | int | Размер загрузочного диска в ГБ. |
| id | int | Идентификатор ВМ. |
| image_id | id | Идентификатор образа.
| name | string | Имя ВМ. |
| password | string | Пароль пользователя ОС по умолчанию. |
| private_ips | list | Список IP-адресов на сетевых интерфейсах ВМ, которые подключены к внутренним сетям. |
| public_ips | list | Список IP адресов на сетевых интерфейсах ВМ, которые подключены к внешним сетям. |
| ram | int | Объём ОЗУ ВМ в МБ. |
| rg_id | int | Идентификатор ресурсной группы, которой принадлежит данная ВМ. |
| state | string | Состояние ВМ.|
| tags | dict | Словарь, пары ключ-значение которого, описывают тэги ВМ.
| tech_status | str | Технический статус ВМ.
| username | string | Имя пользователя ОС по умолчанию. |
## Пример использования модуля decort_kvmvm
В данном примере создается ВМ с именем MyFirstVM.
```
- name: Сreate VM
decort_kvmvm:
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
authenticator: oauth2
controller_url: "https://cloud.digitalenergy.online"
cpu: 2
image_id: "{{ my_img.facts.id }}"
name: MyFirstVM
networks:
- type: VINS
id: "{{ my_vins.facts.id }}"
oauth2_url: "https://sso.digitalenergy.online"
ram: 4096
rg_id: "{{ my_rg.facts.id }}"
register: my_vm
```

View File

@@ -0,0 +1,893 @@
# Модуль decort_lb
## Обзор модуля decort_lb
Модуль **decort_lb** предназначен для выполнения следующих действий над балансировщиками нагрузки:
- создать
- получить информацию
- отключить/включить/запустить/перезапустить
- изменить конфигурации backend и frontend
- удалить (в корзину или безвозвратно)
- восстановить из корзины
## Параметры модуля decort_lb
Ниже приведен полный список параметров для модуля **decort_lb**:
<table>
<tr>
<th colspan="3">Параметр</th>
<th>Тип</th>
<th>Описание</th>
</tr>
<tr>
<td colspan="3">
account_id
</td>
<td>
(int)
</td>
<td>
Идентификатор аккаунта.
</td>
</tr>
<tr>
<td colspan="3">
account_name
</td>
<td>
(str)
</td>
<td>
Имя аккаунта.
<br> Может быть альтернативой параметру <code>account_id</code>.
</td>
</tr>
<tr>
<td colspan="3">
annotation
</td>
<td>
(str)
<br>Default: <code>Managed by Ansible module decort_lb</code>
</td>
<td>
Описание балансировщика.
</td>
</tr>
<tr>
<td colspan="3">
app_id
</td>
<td>
(str)
</td>
<td>
Идентификатор приложения, использующийся для подключения к контроллеру
облачной платформы DECORT в режиме <code>authenticator: oauth2</code>.
Данный параметр является обязательным для указанного режима. Если
параметр не задан в playbook, модуль будет использовать значение
переменной окружения <code>DECORT_APP_ID</code>.
</td>
</tr>
<tr>
<td colspan="3">
app_secret
</td>
<td>
(str)
</td>
<td>
Секретный ключ приложения, который используется для подключения к
контроллеру облачной платформы DECORT в режиме
<code>authenticator: oauth2</code>. Данный параметр является
обязательным для указанного режима. Так как он содержит секретную
информацию, то его не рекомендуется задавать непосредственно в
playbook. Если параметр не задан в playbook, то модуль будет
использовать значение переменной окружения
<code>DECORT_APP_SECRET</code>.
</td>
</tr>
<tr>
<td colspan="3">
authenticator
</td>
<td>
(str)
<br>Значения:
<br/><code>oauth2</code>
<br/><code>jwt</code>
</td>
<td>
Режим аутентификации при подключении к контроллеру облачной платформы
DECORT. Обязательный параметр.
</td>
</tr>
<tr>
<td colspan="3">
backends
</td>
<td>
(list)
</td>
<td>
Список словарей, описывающих конфигурации backend.
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
algorithm
</td>
<td>
(str)
<br>Значения:
<br><code>leastconn</code>
<br><code>roundrobin</code>
<br><code>static-rr</code>
<br>Default: <code>roundrobin</code>
</td>
<td>
Используемый алгоритм.
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
<a name="backend_default_settings">
default_settings
</a>
</td>
<td>
(dict)
</td>
<td>
оварь, описывающий параметры по умолчанию для backend-серверов.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
downinter
</td>
<td>
(int)
<br>Default: <code>1000</code>
</td>
<td>
Интервал в миллисекундах между двумя последовательными проверками
доступности сервера, который считается недоступным.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
fall
</td>
<td>
(int)
<br>Default: <code>2</code>
</td>
<td>
Количество последовательных неудачных проверок доступности, после
которых сервер, ранее считавшийся доступным, начинает считаться
недоступным и временно исключается из схемы балансировки.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
inter
</td>
<td>
(int)
<br>Default: <code>5000</code>
</td>
<td>
Интервал в миллисекундах между двумя последовательными проверками
доступности сервера, который считается доступным.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
maxconn
</td>
<td>
(int)
<br>Default: <code>250</code>
</td>
<td>
Лимит одновременных подключений к серверу. При достижении этого лимита
сервер временно исключается из схемы балансировки.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
maxqueue
</td>
<td>
(int)
<br>Default: <code>256</code>
</td>
<td>
Лимит соединений, ожидающих в очереди. Когда этот предел будет
достигнут, все последующие подключения будут перенаправлены
на другие серверы.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
rise
</td>
<td>
(int)
<br>Default: <code>2</code>
</td>
<td>
Количество проверок, которые должен пройти сервер, считавшийся
недоступным, чтобы начать считаться доступным и снова быть
включенным в схему балансировки.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
slowstart
</td>
<td>
(int)
<br>Default: <code>60000</code>
</td>
<td>
Интервал в миллисекундах с момента когда сервер начинает считаться
доступным, по истечении которого количество фактически разрешенных
подключений к этому серверу будет возвращено до 100% от
установленного лимита.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
weight
</td>
<td>
(int)
<br>Default: <code>100</code>
</td>
<td>
Вес сервера для использования в алгоритмах балансировки.
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
name
</td>
<td>
(str)
</td>
<td>
Название backend. Обязательный параметр.
</td>
</tr>
<tr>
<td colspan="3">
controller_url
</td>
<td>
(str)
</td>
<td>
URL контроллера, соответствующего экземпляру облачной платформы
DECORT. Данный параметр является обязательным.
</td>
</tr>
<tr>
<td colspan="3">
ext_net_id
</td>
<td>
(int)
</td>
<td>
Идентификатор внешней сети.
<br>Может быть не задан, если задан <code>vins_id</code> -
в таком случае балансировщик будет подключён только к
внутренней сети.
</td>
</tr>
<tr>
<td colspan="3">
<a name="frontends">
frontends
</a>
</td>
<td>
(list)
</td>
<td>
Список словарей, описывающих конфигурации frontend.
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
backend
</td>
<td>
(str)
</td>
<td>
Название используемого backend. Обязательный параметр.
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
bindings
</td>
<td>
(list)
</td>
<td>
Список словарей, описывающих конфигурации binding.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
address
</td>
<td>
(str)
</td>
<td>
IP-адрес.
<br>Если не задан, то будет использоваться основной IP-адрес
балансировщика во внешней сети или, если подключена только
внутренняя сеть, основной IP-адрес балансировщика во внутренней сети.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
name
</td>
<td>
(str)
</td>
<td>
Название. Обязательный параметр.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
port
</td>
<td>
(int)
<br>Значения:
<br><code>1</code>-<code>65535</code>
</td>
<td>
Порт. Обязательный параметр.
</td>
</tr>
<tr>
<td colspan="3">
ha_lb
</td>
<td>
bool
<br>Default: <code>false</code>
</td>
<td>
Использовать схему высокой доступности для создаваемого балансировщика.
</td>
</tr>
<tr>
<td colspan="3">
jwt
</td>
<td>
(str)
</td>
<td>
JSON Web Token (JWT), который будет использоваться для подключения
к контроллеру облачной платформы DECORT в режиме
<code>authenticator: jwt</code>. Данный параметр является
обязательным для указанного режима. Так как он содержит
потенциально секретную информацию, а сам JWT, как правило,
имеет ограниченное время жизни, то его не рекомендуется задавать
непосредственно в playbook. Если этот параметр не определен в
playbook, то модуль будет использовать значение переменной
окружения <code>DECORT_JWT</code>.
</td>
</tr>
<tr>
<td colspan="3">
lb_id
</td>
<td>
(int)
</td>
<td>
Идентификатор балансировщика нагрузки.
</td>
</tr>
<tr>
<td colspan="3">
lb_name
</td>
<td>
(str)
</td>
<td>
Имя балансировщика. Обязательный параметр.
</td>
</tr>
<tr>
<td colspan="3">
oauth2_url
</td>
<td>
(str)
</td>
<td>
URL авторизационного сервера, работающего по протоколу Oauth2,
который должен использоваться в режиме
<code>authenticator: oauth2</code>. Данный параметр является
обязательным для указанного режима. Если параметр не задан в
playbook, модуль будет использовать значение переменной
окружения <code>DECORT_OAUTH2_URL</code>.
</td>
</tr>
<tr>
<td colspan="3">
permanently
</td>
<td>
(bool)
<br>Default: <code>false</code>
</td>
<td>
Если выполняется удаление, то выполнить безвозвратное удаление
(минуя корзину).
</td>
</tr>
<tr>
<td colspan="3">
rg_id
</td>
<td>
(int)
</td>
<td>
Идентификатор ресурсной группы.
</td>
</tr>
<tr>
<td colspan="3">
rg_name
</td>
<td>
(str)
</td>
<td>
Имя ресурсной группы.
<br> В комбинации с заданным аккаунтов может быть альтернативой
параметру <code>rg_id</code>
</td>
</tr>
<tr>
<td colspan="3">
servers
</td>
<td>
(list)
</td>
<td>
Список словарей, описывающих конфигурации backend-серверов.
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
address
</td>
<td>
(str)
</td>
<td>
IP-адрес. Обязательный параметр.
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
backends
</td>
<td>
(list)
</td>
<td>
Список словарей, описывающих параметры backend-сервера для разных
конфигураций backend.
<br>Обязательный параметр.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
check
</td>
<td>
(str)
<br>Значения:
<br><code>enabled</code>
<br><code>disabled</code>
<br>Default: <code>enabled</code>
</td>
<td>
Проверка доступности сервера.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
name
</td>
<td>
(str)
</td>
<td>
Название конфигурации backend. Обязательный параметр.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
port
</td>
<td>
(int)
<br>Значения:
<br><code>1</code>-<code>65535</code>
</td>
<td>
Порт. Обязательный параметр.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
server_settings
</td>
<td>
(dict)
</td>
<td>
Словарь, описывающий параметры backend-сервера.
<br> Ключи данного словаря аналогичны ключам словаря
<a href=#backend_default_settings>
default_settings
</a>.
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
name
</td>
<td>
(str)
</td>
<td>
Название. Обязательный параметр.
</td>
</tr>
<tr>
<td colspan="3">
state
</td>
<td>
(str)
<br>Значения:
<br><code>present</code>
<br><code>absent</code>
<br><code>enabled</code>
<br><code>disabled</code>
<br><code>restart</code>
<br>Default: <code>present</code>
</td>
<td>
Целевое состояние балансировщика нагрузки.
<br>Выполнение с <code>state=restart</code> позволяет выполнить
перезапуск балансировщика, соответственно, всегда возвращает
<code>changed: true</code>.
<br>Значения <code>present</code> и <code>enabled</code> равнозначны
и соответствуют включённому и запущенному балансировщику.
</td>
</tr>
<tr>
<td colspan="3">
verify_ssl
</td>
<td>
(bool)
<br>Default: <code>true</code>
</td>
<td>
Позволяет отключить проверку SSL сертификатов при выполнении API
вызовов в адрес контроллера облачной инфраструктуры, например,
при работе с изолированной облачной инфраструктурой, использующей
самоподписанные сертификаты. Применяйте данный параметр с
осторожностью, предпочтительно в защищенных средах.
</td>
</tr>
<tr>
<td colspan="3">
vins_id
</td>
<td>
(int)
</td>
<td>
Идентификатор внутренней сети.
<br>Может быть не задан, если задан <code>ext_net_id</code> -
в таком случае балансировщик будет подключён только к
внешней сети.
</td>
</tr>
<tr>
<td colspan="3">
vins_name
</td>
<td>
(str)
</td>
<td>
Имя внутренней сети.
<br> В комбинации с заданной РГ может быть альтернативой для
параметра <code>vins_id</code>.
</td>
</tr>
</table>
## Возвращаемые значения модуля decort_lb
Модуль **decort_lb** возвращает информацию о балансировщике в виде словаря `facts` со следующими ключами:
<table>
<tr>
<th colspan="4">
Ключ
</th>
<th>
Тип
<br>данных
</th>
<th>
Описание
</th>
</tr>
<tr>
<td colspan="4">
backends
</td>
<td>
list
</td>
<td>
Список словарей, описывающих конфигурации backend.
</td>
</tr>
<tr>
<td></td>
<td colspan="3">
algorithm
</td>
<td>
str
</td>
<td>
Используемый алгоритм.
</td>
</tr>
<tr>
<td></td>
<td colspan="3">
name
</td>
<td>
str
</td>
<td>
Название конфигурации backend.
</td>
</tr>
<tr>
<td></td>
<td colspan="3">
serverDefaultSettings
</td>
<td>
dict
</td>
<td>
оварь, описывающий параметры по умолчанию для backend-серверов.
<br> Ключи данного словаря аналогичны ключам словаря
<a href=#backend_default_settings>
default_settings
</a>.
</td>
</tr>
<tr>
<td></td>
<td colspan="3">
servers
</td>
<td>
list
</td>
<td>
Список словарей, описывающих конфигурации backend-серверов.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td colspan="2">
address
</td>
<td>
str
</td>
<td>
IP-адрес.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td colspan="2">
check
</td>
<td>
str
</td>
<td>
Проверка доступности сервера.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td colspan="2">
name
</td>
<td>
str
</td>
<td>
Название.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td colspan="2">
port
</td>
<td>
int
</td>
<td>
Порт.
</td>
</tr>
<tr>
<td></td>
<td></td>
<td colspan="2">
serverSettings
</td>
<td>
dict
</td>
<td>
оварь, описывающий параметры backend-сервера.
<br> Ключи данного словаря аналогичны ключам словаря
<a href=#backend_default_settings>
default_settings
</a>.
</td>
</tr>
<tr>
<td colspan="4">
frontends
</td>
<td>
list
</td>
<td>
Список словарей, описывающих конфигурации frontend.
<br> Ключи данного словаря аналогичны ключам словарей списка
<a href=#frontends>
frontends
</a>.
</td>
</tr>
<tr>
<td colspan="4">
gid
</td>
<td>
int
</td>
<td>
Идентификатор физического кластера (Grid ID).
</td>
</tr>
<tr>
<td colspan="4">
id
</td>
<td>
int
</td>
<td>
Идентификатор балансировщика.
</td>
</tr>
<tr>
<td colspan="4">
name
</td>
<td>
str
</td>
<td>
Имя балансировщика.
</td>
</tr>
<tr>
<td colspan="4">
rg_id
</td>
<td>
int
</td>
<td>
Идентификатор ресурсной группы.
</td>
</tr>
<tr>
<td colspan="4">
state
</td>
<td>
str
</td>
<td>
Статус балансировщика.
</td>
</tr>
</table>

View File

@@ -0,0 +1,132 @@
# Модуль decort_osimage
## Обзор модуля decort_osimage
Модуль decort_osimage предназначен для выполнения следующих действий над образами, созданными в облачной платформе DECORT:
- шаблонные образы:
- создать
- получить информацию
- изменить имя
- удалить
- виртуальные образы
- создать
- получить информацию
- изменить
- имя
- целевой образ
## Параметры модуля decort_osimage
Ниже приведен полный список параметров для модуля decort_osimage.
| Параметр | Тип, допустимые значения | Описание |
| ------ | ------ | ------ |
| account_Id | (int) | Уникальный целочисленный идентификатор аккаунта. Используется для поиска образов, а тажке для их создания. |
| account_name | (string) | Имя аккаунта. Используется для получения уникального целочисленного идентификатора аккаунта. |
| app_id | (string) | Идентификатор приложения, использующийся для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_APP_ID`. |
| app_secret | (string) | Секретный ключ приложения, который используется для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль будет использовать значение переменной окружения `DECORT_APP_SECRET`. |
| architecture | (string)<br>Default: `X86_64` | Архитектура микропроцессора, для которой предназначен образ. Используется при создании образа.|
| authenticator | (str)<br>Значения:<br/>`oauth2`<br/>`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Обязательный параметр. |
| boottype | (string)<br>Default: `uefi` | Тип загрузки образа. Используется при создании образа.|
| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должен быть создан (или уже существует) образ. Данный параметр является обязательным. |
| drivers | (string)<br>Default: `KVM_X86` | Тип виртуальных машин, подходящих для образа. Используется при создании образа.|
| hotresize | (bool)<br>Default: `false` | Поддерживает ли образ "горячее" изменение размера. По умолчанию установлено `false`. Используется при создании образа операционной системы. |
| image_id | (int) | Идентификатор шаблонного образа.
| image_name | (str) | Имя шаблонного образа.
| image_password | (string) | Опциональный пароль для образа. Используется при создании образа.|
| image_username | (string) | Опциональное имя пользователя для образа. Используется при создании образа. |
| imagetype | (string)<br>Default: `linux` | Тип образа. Используется при создании образа.|
| jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: jwt`. Данный параметр является обязательным для указанного режима. Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в playbook. Если этот параметр не определен в playbook, то модуль будет использовать значение переменной окружения `DECORT_JWT`.|
| oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, который должен использоваться в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`. |
| passwordDL | (string) | Пароль для скачивания по URL-адресу. Используется при создании образа. |
| pool | (str) | Имя пула СХД. Используется для поиска существующего образа.
| poolName | (string) | Имя пула СХД. Используется при создании образа. |
| sepId | (integer) | Уникальный целочисленный идентификатор СХД. Используется при создании образа. |
| sep_id | (int) | Идентификатор СХД. Используется для поиска существующего образа.
| state | (string)<br>Значения:<br>`present`<br>`absent`<br>Default: `present` | Целевое состояние образа. `present` - существует, `absent` - удалён. |
| url | (string) | URL-адрес, с которого будет загружен образ. Используется при создании образа.|
| usernameDL | (string) | Имя пользователя для загрузки образа с заданного URL-адреса. Используется при создании образа. |
| verify_ssl | (bool)<br>Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты. Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
| virt_id | (integer) | Уникальный целочисленный идентификатор виртуального образа. Может использоваться для получения информации о виртуальном образе, а также для привязки к нему другого образа.|
| virt_name | (string) | Имя виртуального образа. Используется для получения `virt_id`, а в последствии информации о виртуальном образе, а также для создания виртуального образа и привязки к нему другого образа.|
## Возвращаемые значения модуля decort_osimage
Модуль decort_osimage возвращает информацию об образе в виде словаря facts со следующими ключами:
| Ключ | Тип данных | Описание |
| ------ | ------ | ------ |
| accountId | int | Идентификатор аккаунта.
| id | int | Уникальный целочисленный идентификатор данного образа. |
| linkto | int | Уникальный целочисленный идентификатор образа, который привязан к данному виртуальному. |
| name | string | Имя образа. |
| pool | string | Имя пула на системе хранения данных, в котором находится данный образ.|
| sep_id | int | Идентификатор системы хранения данных, на которой хранится данный образ. |
| size | int | Размер образа в ГБ. |
| state | string | Текущий статус образа. |
| type | string | Тип образа. |
## Пример использования модуля decort_osimage
Пример создания шаблонного образа с операционной системой Alpine Linux.
```
- name: Create template image
decort_osimage:
account_Id: 12345
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
authenticator: oauth2
controller_url: "https://ds1.digitalenergy.online"
image_name: alpine_linux_3.19.1
url: https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/cloud/nocloud_alpine-3.19.1-x86_64-uefi-cloudinit-r0.qcow2
verify_ssl: false
register: osimage
```
Пример получения информации о существующем шаблонном образе по его имени.
```
- name: Get template image
decort_osimage:
account_Id: 12345
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
authenticator: oauth2
controller_url: "https://ds1.digitalenergy.online"
image_name: alpine_linux_3.19.1
verify_ssl: false
register: osimage
```
Пример создания виртуального образа. Также в случае, если виртуальный образ уже существует, но к нему привязан другой шаблонный образ, он привяжет к себе указанный в примере шаблонный образ.
```
- name: Create virtual image
decort_osimage:
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
authenticator: oauth2
controller_url: "https://ds1.digitalenergy.online"
image_name: alpine_linux_3.19.1
virt_name: alpine_last
register: osimage
```
Обратите внимание, что в данном примере можно использовать как `image_name`, так и `image_id`. Также можно использовать либо `virt_name`, либо `virt_id`.
Пример переименования образа.
```
- name: Rename template image
decort_osimage:
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
authenticator: oauth2
controller_url: "https://ds1.digitalenergy.online"
image_name: alpine_linux_3.19.1_new_name
image_id: 54321
register: osimage
```

View File

@@ -0,0 +1,76 @@
# Модуль decort_pfw
## Обзор модуля decort_pfw
Модуль **decort_pfw** предназначен для настройки правил переадресации портов (port forwarding, destination NAT) на виртуальном маршрутизаторе заданной внутренней сети для заданной виртуальной машины.
Модуль поддерживает выполнение следующих действий над правилами:
- добавить
- получить информацию
- удалить
## Параметры модуля decort_pfw
Ниже в алфавитном порядке приведен полный список параметров для модуля **decort_pfw**. Актуальную информацию по параметрам, которые поддерживает версия модуля, установленного на вашем Ansible-сервере, можно получить командой:
`ansible-doc -t module decort_pfw`
| Параметр | Тип, допустимые значения | Описание|
| ------ | ------ | ------ |
| app_id | (string) | Идентификатор приложения, использующийся для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_APP_ID`. |
| app_secret | (string) | Секретный ключ приложения, который используется для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль будет использовать значение переменной окружения `DECORT_APP_SECRET`. |
| authenticator | (str)<br>Значения:<br/>`oauth2`<br/>`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Обязательный параметр. |
| compute_id | (int) | Идентификатор виртуальной машины. IP-адрес, который данная ВМ имеет во внутренней сети, заданной параметром `vins_id`, будет использоваться как внутренний IP-адрес в правилах. Обязательный параметр. |
| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT. Данный параметр является обязательным. |
| jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: jwt`. Данный параметр является обязательным для указанного режима. Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в playbook. Если этот параметр не определен в playbook, то модуль будет использовать значение переменной окружения `DECORT_JWT`. |
| oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, который должен использоваться в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`. |
| rules | (list) | Список словарей, описывающих правила переадресации портов для заданной ВМ (параметр `compute_id`) на виртуальном маршрутизаторе заданной внутренней сети (параметр `vins_id`).<br>Ключи словаря:<br>&bull; `local_port` (int) (обязательный) - внутренний порт; значения: от `1` до `65535`<br>&bull; `proto` (str) (обязательный) - протокол; значения: `tcp` или `udp`<br>&bull; `public_port_end` (int) (необязательный) - верхняя граница диапазона внешних портов; значения: от значения ключа `public_port_start` до `65535`;<br>&bull; `public_port_start` (int) (обязательный) - нижняя граница диапазона внешних портов; значения: от `1` до `65535` |
| state | (str)<br>Значения:<br/>`present`<br/>`absent`<br>Default: `present` | Целевое состояние правил.<br>Если `state=absent`, то, независимо от содержания параметра `rules`, будут удалены все правила для заданной ВМ (параметр `compute_id`) на виртуальном маршрутизаторе заданной внутренней сети (параметр `vins_id`). |
| verify_ssl | (bool)<br>Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.<br/>Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
| vins_id | (int) | Идентификатор внутренней сети, на виртуальном маршрутизаторе которой настраиваются правила переадресации портов. Заданная ВМ (параметр `compute_id`) должна быть подключена к этой сети. Обязательный параметр. |
## Возвращаемые значения модуля decort_pfw
Модуль **decort_pfw** возвращает информацию о правилах переадресации портов и сопутствующую информацию в виде словаря `facts` со следующими ключами:
|Ключ | Тип данных | Описание|
| ------ | ------ | ------ |
| compute_id | int | Идентификатор ВМ. |
| public_ip | string | IP-адрес во внешней сети, настроенный на виртуальном маршрутизаторе внутренней сети. |
| rules | list | Список словарей, описывающих правила переадресации портов.<br>Ключи словаря:<br>&bull; `id` (int) - идентификатор правила<br>&bull; `localIp` (str) - IP-адрес ВМ<br>&bull; `localPort` (int) - внутренний порт<br>&bull; `protocol` (str) - протокол<br>&bull; `publicPortEnd` (int) - верхняя граница диапазона внешних портов<br>&bull; `publicPortStart` (int) - нижняя граница диапазона внешних портов<br>&bull; `vmId` (int) - идентификатор ВМ<br>&bull; `vmName` (str) - имя ВМ |
| state | string | Статус правил. Значения: `PRESENT` или `ABSENT`. |
| vins_id | int | Идентификатор внутренней сети. |
## Пример использования модуля decort_pfw
В данном примере для существующей ВМ (параметр `compute_id`), подключённой к внутренней сети (параметр `vins_id`), настраиваются два правила переадресации портов:
- Правило для одного порта: внешний порт `30022` на внутренний порт `22` по протоколу `tcp`.
- Правило для диапазона портов: внешние порты с `30080` по `30085` на внутренние порты с `30080` по протоколу `udp`.
```
- name: Add port forwarding rules
decort_pfw:
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
authenticator: oauth2
compute_id: "{{ my_vm.facts.id }}"
controller_url: "https://cloud.digitalenergy.online"
oauth2_url: "https://sso.digitalenergy.online"
rules:
- local_port: 22
proto: tcp
public_port_start: 30022
- local_port: 30080
proto: udp
public_port_end: 30085
public_port_start: 30080
vins_id: "{{ my_vins.facts.id }}"
register: my_pfw_rules
```
В данном примере результат выполнения модуля **decort_pfw** записывается в переменную `my_pfw_rules`. Для доступа к списку правил используйте следующую конструкцию:
```
"{{ my_pfw_rules.facts.rules }}"
```

View File

@@ -0,0 +1,200 @@
# Модуль decort_rg
## Обзор модуля decort_rg
Модуль decort_rg предназначен для создания, редактирования и удаления ресурсных групп (Resource Group, RG) в облачной платформе DECORT, а также для получения информации об уже существующей ресурсной группе. Модуль decort_rg позволяет:
- создавать ресурсные группы
- удалять ресурсные группы (в корзину или безвозвратно)
- восстанавливать ресурсные группы из корзины
- включать/отключать ресурсные группы
- запрашивать информацию об уже существующих ресурсных группах
- изменять ресурсные группы:
- переименовывать
- настраивать квоты
- задавать стандартную сеть
- настраивать права доступа для пользователей
## Параметры модуля decort_rg
Ниже в алфавитном порядке приведен полный список параметров для модуля decort_rg. Актуальную информацию по параметрам, которые поддерживает версия модуля, установленного на вашем Ansible-сервере, можно получить командой: `ansible-doc -t module decort_rg`
| Параметр | Тип, допустимые значения | Описание |
|----------|--------------------------|----------|
| account_id | (int) | Уникальный целочисленный идентификатор аккаунта, в рамках которого создаётся или уже существует данная ресурсная группа. Должен быть задан либо идентификатор, либо имя аккаунта (см. параметр `account_name`). Если одновременно заданы и `account_id`, и `account_name`, то account_name игнорируется. |
| account_name | (string) | Имя аккаунта, в рамках которого создаётся или уже существует данная ресурсная группа. Должно быть задано либо имя, либо идентификатор учётной записи (см. параметр `account_id`). Если одновременно заданы и `account_id`, и `account_name`, то `account_name` игнорируется. |
| access | (dict) | Параметр, позволяющий выдать, забрать или изменить права у пользователя в ресурсной группе. |
| annotation | (string) | Текстовое описание ресурсной группы. Данный параметр является опциональным и учитывается только при создании ресурсной группы, а при всех прочих операциях игнорируется. |
| app_id | (string) | Идентификатор приложения, использующийся для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_APP_ID`. |
| app_secret | (string) | Секретный ключ приложения, который используется для подключения к контроллеру облачной платформы DECORT в режиме authenticator: oauth2. Данный параметр является обязательным для указанного режима. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль будет использовать значение переменной окружения DECORT_APP_SECRET. |
| authenticator | Значения:<br>`oauth2`<br>`jwt`| Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Данный параметр является обязательным.|
| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должна быть создана (или уже существует) данная ресурсная группа. Данный параметр является обязательным. |
| def_netType | (string) <br>Значения:<br>`PRIVATE`<br>`PUBLIC`<br>`NONE`<br>Default: `PRIVATE` | Тип сети по умолчанию в ресурсной группе. Используется при создании ресурсной группы, а также при изменении. |
| def_netId | (int) | Уникальный целочисленный идентификатор внутренней или внешней сети. Используется для изменения сети по умолчанию в ресурсной группе. |
| extNetId | (int) | Уникальный целочисленный идентификатор внешней сети. Используется при создании РГ для подключения внешней сети к внутренней сети, которая будет создана и задана как сеть по умолчанию для РГ. |
| extNetIp | (string) | IP-адрес для внешней сети, которая задана в параметре `extNetId`. |
| owner | (string) | Владелец ресурсной группы. Задаётся при создании ресурсной группы, не обязателен. Если оставить пустое значение - владельцем ресурсной группы будет пользователь, создавший ресурсную группу. |
| ipcidr | (string) | IP-адрес внутренней сети. Используется при создании ресурсной группы, чтобы задать IP-адрес сети для создаваемой внутренней сети, которая создастся вместе с ресурсной группой. Используется при параметре `def_netType` в значении `PRIVATE`. |
| jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: jwt`<br>Данный параметр является обязательным для указанного режима.<br>Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в _playbook_.<br>Если этот параметр не определен в _playbook_, то модуль будет использовать значение переменной окружения `DECORT_JWT`. |
| oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, который должен использоваться в режиме authenticator: oauth2. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`. |
| rename | (string) | Новое имя ресурсной группы. Используется при переименовании ресурсной группы. |
| quotas | (dict) | Предназначено для задания или изменения квоты на ресурсы в составе данной ресурсной группы. |
| rg_name | (string) | Имя ресурсной группы. Данный параметр является обязательным при создании. |
| rg_id | (int) | Уникальный целочисленный идентификатор ресурсной группы. Является обязательным при изменении РГ если не заданы `rg_name` и `account_id`/`account_name` |
| state | Значения:<br>`present`<br>`absent`<br>`enabled`<br>`disabled`<br>Default: `present` | Целевое состояние ресурсной группы. |
| permanently | (bool)<br>Default: `false` | Параметр, использующийся при удалении ресурсной группы. При значении `true` - ресурсная группа удалится безвозвратно, а при `false` - попадёт в корзину. |
| verify_ssl | (bool)<br/>Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.<br>Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
## Возвращаемые значения модуля decort_rg
Модуль decort_rg возвращает информацию о ресурсной группе в виде словаря facts со следующими ключами:
| Ключ | Тип данных | Описание |
|------|------------|----------|
| account_id | int | Уникальный целочисленный идентификатор аккаунта, которому принадлежит данная ресурсная группа. |
| gid | int | Идентификатор физического кластера (Grid ID), на базе которого развёрнута ресурсная группа. |
| id | int | Уникальный целочисленный идентификатор ресурсной группы. |
| name | string | Имя ресурсной группы. Обратите внимание, что это имя уникально только в рамках аккаунта, которому принадлежит данная ресурсная группа. |
| state | string | Текущее состояние ресурсной группы. |
| quota | dict | Текущие квоты ресурсной группы. |
| resTypes | list | Список типов ресурсов, разрешенных к созданию в данной ресурсной группе. |
| defNetId | int | Уникальный целочисленный идентификатор сети по умолчанию в данной ресурсной группе. |
| defNetType | string | Тип сети по умолчанию в данной ресурсной группе. |
| ViNS | list | Список идентификаторов внутренних сетей ресурсной группы. |
| computes | list | Список идентификаторов виртуальных машин ресурсной группы. |
## Пример использования модуля decort_rg
В данном примере показано, как создать ресурсную группу по имени MyRG в аккаунте MyAccount.
```
- name: manage resource group
decort_rg:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
account_name: "MyAccount"
rg_name: "MyRG"
state: present
register: my_rg
delegate_to: localhost
```
В данном примере показано, как создать ресурсную группу по имени MyRG в аккаунте MyAccount, также задать квоты и выдать права на чтение пользователю MyUser.
```
- name: manage resource group
decort_rg:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
account_name: "MyAccount"
rg_name: "MyRG"
access:
action: "grant"
user: "MyUser"
right: "R"
quotas:
cpu: 16
ram: 16384
disk: 100
ext_ips: 20
net_transfer: 1000
state: present
register: my_rg
delegate_to: localhost
```
В данном примере показано, как выдать доступ на чтение и запись пользователю MyUser в ресурсной группе по имени MyRG в аккаунте MyAccount.
```
- name: manage resource group
decort_rg:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
account_name: "MyAccount"
rg_name: "MyRG"
access:
action: "grant"
user: "MyUser"
right: "RCX"
state: present
register: my_rg
delegate_to: localhost
```
В данном примере показано, как сменить квоту в ресурсной группе по имени MyRG в аккаунте MyAccount.
```
- name: manage resource group
decort_rg:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
account_name: "MyAccount"
rg_name: "MyRG"
quotas:
cpu: 16
ram: 16384
disk: 100
ext_ips: 20
net_transfer: 1000
state: present
register: my_rg
delegate_to: localhost
```
В данном примере показано, как изменить сеть по умолчанию в ресурсной группе по имени MyRG в аккаунте MyAccount.
```
- name: manage resource group
decort_rg:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
account_name: "MyAccount"
rg_name: "MyRG"
def_netType: "PRIVATE"
def_netId: 99
state: present
register: my_rg
delegate_to: localhost
```
В данном примере показано, как переименовать ресурсную группу по имени MyRG на новое имя "NewRg" в аккаунте MyAccount.
```
- name: manage resource group
decort_rg:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
account_name: "MyAccount"
rg_name: "MyRG"
rename: "NewRg"
rg_id: 27
state: present
register: my_rg
delegate_to: localhost
```
В данном примере результат работы модуля decort_rg записывается в переменную my_rg.
Модули DECORT, которым для работы требуется ресурсная группа, в качестве одного из параметров, как правило, принимают идентификатор `rg_id`. Так, например, используя модуль `decort_kvmvm` для создания виртуального сервера необходимо указать ресурсную группу, к которой будет принадлежать этот виртуальный сервер. Сделать это можно следующим образом:
```
<прочие детали опущены>
rg_id: "{{ my_rg.facts.id }}"
```

View File

@@ -0,0 +1,120 @@
# Модуль decort_vins
## Обзор модуля decort_vins
Модуль decort_vins предназначен для управления внутренними сетями (Virtual Network Segment, ViNS) и позволяет производить с ними следующие действия:
- создавать
- на уровне ресурсной группы (если РГ задана)
- на уровне аккаунта (если РГ не задана)
- удалять (безвозвратно)
- восстанавливать из корзины
- запрашивать информацию
- включать/отключать
- соединять (необходимы права администратора)
- изменять:
- включать/отключать SSH-доступ к виртуальному маршрутизатору (необходимы права администратора)
- включать/отключать режим **Custom Config** для виртуального маршрутизатора (необходимы права администратора)
- сохранять конфигурацию виртуального маршрутизатора для возможности последующего отката к ней (необходимы права администратора)
## Параметры модуля decort_vins
Ниже в алфавитном порядке приведен полный список параметров для модуля decort_vins. Актуальную информацию по параметрам, которые поддерживает версия модуля, установленного на вашем Ansible-сервере, можно получить командой:
`ansible-doc -t module decort_vins`
| Параметр | Тип, допустимые значения | Описание |
| ------ | ------ | ------ |
| account_id | (int) | Уникальный целочисленный идентификатор аккаунта, которому принадлежит данная внутреняя сеть. При идентификации внутренней сети по имени (см. параметр `vins_name`) должен быть задан либо идентификатор, либо имя аккаунта (см. параметр `account_name`). Если одновременно заданы и `account_id`, и `account_name`, то `account_name` игнорируется.|
| account_name | (string) | Имя аккаунта, которому принадлежит данная внутренняя сеть. При идентификации внутренней сети по имени (см. параметр `vins_name`) должно быть задано либо имя, либо идентификатор аккаунта (см. параметр account_id). Если одновременно заданы и `account_id`, и `account_name`, то `account_name` игнорируется.|
|annotation | (string)| Текстовое описание внутренней сети. Данный аргумент является опциональным и учитывается только при создании внутренней сети, а при всех прочих операциях игнорируется.|
| app_id | (string) | Идентификатор приложения, использующийся для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_APP_ID`.|
| app_secret | (string) | Секретный ключ приложения, который используется для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль будет использовать значение переменной окружения `DECORT_APP_SECRET`.|
| authenticator | Значения:<br/>`oauth2`<br/>`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Данный параметр является обязательным. |
| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должна быть создана (или уже существует) данный внутренняя сеть. Данный параметр является обязательным.
| ext_net_id | (int) | Идентификатор внешней сети, к которой должна быть подключена внутренняя сеть. Если задать значение `0`, то платформой будет выбрана внешняя сеть по умолчанию. |
| ext_ip_addr | (string) | IP-адрес внешней сети, заданной через параметр `ext_net_id`. Если не задан, то IP-адрес для внешней сети будет выбран платформой автоматически.
| ipcidr | (string) | Адрес сети для создаваемой внутренней сети. Если этот параметр не задан, то платформа назначит адрес автоматически. Обратите внимание, что внутренние сети, принадлежащие одному и тому же аккаунту, не могут иметь пересекающихся сетей.|
| jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: jwt`. Данный параметр является обязательным для указанного режима. Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в playbook. Если этот параметр не определен в playbook, то модуль будет использовать значение переменной окружения `DECORT_JWT`.|
| oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу _Oauth2_, который должен использоваться в режиме `authenticator: oauth2`.<br/>Данный параметр является обязательным для указанного режима.<br/>Если параметр не задан в _playbook_, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`. |
|rg_id | (int) | Идентификатор ресурсной группы, в которой должна быть создана или уже существует внутренняя сеть. Если одновременно заданы `rg_id` и `rg_name`, то `rg_name` игнорируется.|
| rg_name | (string) | Имя ресурсной группы, в которой должна быть создана или уже существует внутренняя сеть. Если одновременно заданы `rg_name` и `rg_id`, то `rg_name` игнорируется.|
| state | (string)<br>Значения:<br/>`present`<br/>`absent`<br/>`enabled`<br/>`disabled`<br/>Default: `present` | Целевое состояние внутренней сети. |
| verify_ssl | (bool)<br/>Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.<br/>Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
| vins_id | (int) | Идентификатор внутренней сети. Соответствующая внутренная сеть должна существовать. Таким образом, с помощью `vins_id` нельзя создать новую внутреннюю сеть, а только управлять уже имеющимися. Если задан данный параметр, то параметры `vins_name`, `account_name`, `account_id`, `rg_name` и `rg_id` игнорируются.|
| vins_name| (string) | Имя внутренней сети. Для идентификации внутренней сети требуется либо `vins_name` и информация об аккаунте/ресурсной группе, которой принадлежит сеть, либо `vins_id`. Обратите внимание, что это имя уникально только в рамках ресурсной группы или аккаунта, на уровне которого существует данная внутренняя сеть.|
| mgmtaddr | (list) | Список существующих IP-адресов виртуального маршрутизатора во внутренней сети, через которые необходимо разрешить SSH-доступ к виртуальному маршрутизатору.
| custom_config | (bool)<br>Default: `false` | Включить/отключить режим пользовательской конфигурации виртуального маршрутизатора. |
| config_save | (bool)<br>Default: `false` | Выполнить сохранение текущей конфигурации виртуального маршрутизатора для возможности последующего отката к ней. |
| connect_to | (list) | Список словарей, содержащих информацию о внутренних сетях, к которым необходимо подключить данную. См. примеры.
## Возвращаемые значения модуля decort_vins
Модуль decort_vins возвращает информацию о внутренней сети в виде словаря facts со следующими ключами:
| Ключ | Тип данных | Описание |
| --- | --- | --- |
| account_id | (int) | Уникальный целочисленный идентификатор аккаунта, которому принадлежит внутренняя сеть. |
| custom_net_addr | (list) | Список IP-адресов пользовательских интерфейсов виртуального маршрутизатора
| ext_ip_addr | (string) | IP-адрес интерфейса, которым виртуальный маршрутизатор подключён к внешней сети. |
| ext_net_id | (int) | Идентификатор внешней сети, к которой подключена внутренняя сеть. `-1` означает, что внутренняя сеть не подключёна к внешней сети. |
| gid | (int) | Идентификатор физического кластера (Grid ID), на базе которого развёрнуты ресурсы данной внутренней сети. |
| id | (int) | Уникальный целочисленный идентификатор внутренней сети. |
| name | (string) | Имя внутренней сети. |
| int_net_addr | (string) | Адрес внутренней сети. |
| rg_id | (int) | Уникальный целочисленный идентификатор ресурсной группы, которой принадлежит данная внутренняя сеть. Если данная внутренняя сеть создана на уровне аккаунта, то `rg_id=0`. |
| ssh_ipaddr | (list) | Список IP-адресов виртуального маршрутизатора во внутренней сети, на которых включён SSH-доступ к нему.
| ssh_password | (str) | Пароль для SSH-доступа к виртуальному маршрутизатору.
| ssh_port | (int) | Номер порта для SSH-подключения к виртуальному маршрутизатору.
| state | (string) | Состояние внутренней сети. |
## Пример использования модуля decort_vins
В данном примере создаётся внутренняя сеть с именем "MyVins01" (vins_name: "MyVins01").
Внутренняя сеть создаётся на уровне ресурсной группы "MyRg01" (rg_name: "MyRg01"), принадлежащей аккаунту "MyMainAccount" (account_name: "MyMainAccount"). Внутренняя сеть будет иметь подключение во внешнюю сеть по умолчанию (ext_net_id: 0).
```
- name: Manage ViNS on resource group level
decort_vins:
account_name: "MyMainAccount"
rg_name: "MyRg01"
authenticator: jwt
jwt: "{{ my_jwt.jwt }}"
controller_url: "https://ds1.digitalenergy.online"
ext_net_id: 0
vins_name: "MyVins01"
register: my_vins
```
Здесь результат исполнения модуля decort_vins записывается в переменную my_vins, которую можно дальше использовать в Ansible playbooks. Ниже показано, как получить и использовать идентификатор внутренней сети для подключения к нему виртуального сервера.
```
- name: Manage virtual machine
decort_kvmvm:
<< для краткости фрагмент опущен >>
networks:
- type: VINS
id: "{{ my_vins.facts.id }}"
<< для краткости фрагмент опущен >>
```
В данном примере идёт создание внутренней сети, а потом её привязка к внутренним сетям с id 864 и 196.
```
- name: Manage ViNS on resource group level
decort_vins:
authenticator: jwt
jwt: "{{ my_jwt.jwt }}"
controller_url: "https://cloud.digitalenergy.online"
vins_name: "ViNS_connected_by_decort_vins_module"
rg_id: 98
connect_to:
- id: 864
ipaddr: 192.168.5.66
netmask: 24
- id: 196
ipaddr: 192.168.9.133
netmask: 24
register: managed_vins
```

View File

@@ -1,4 +1,5 @@
## Документация:
- [Модули Ansible версии 5.4.0](./5.4.0/Home.md)
- [Модули Ansible версии 5.3.0](./5.3.0/Home.md)
- [Модули Ansible версии 5.2.6](./5.2.6/Home.md)