Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 45355b3dd3 | |||
| 54c306b13b |
114
CHANGELOG.md
114
CHANGELOG.md
@@ -1,114 +1,12 @@
|
|||||||
# Список изменений в версии 6.0.0
|
# Список изменений в версии 6.1.1
|
||||||
|
|
||||||
## Обновления
|
## Добавлено
|
||||||
|
|
||||||
### Модуль decort_user_info
|
## Удалено
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-515 | Фильтрация аудитов по коду ответа происходит в фильтре `status_code`, принимающем параметры `min` и `max`. |
|
|
||||||
|
|
||||||
### Модуль decort_account_info
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-554 | Удалён подпараметр `images.deleted`. |
|
|
||||||
|
|
||||||
### Модуль decort_kvmvm
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-573 | Удалён параметр `arch`. |
|
|
||||||
| BANS-581 |Добавлен параметр `chipset` для указания чипсета при создании виртуальной машины. |
|
|
||||||
| BANS-528 | Добавлен тип сети `VFNIC`. |
|
|
||||||
| BANS-586 | Добавлен параметр `network_order_changing`, позволяющий включить соблюдение очерёдности сетей при их изменении. |
|
|
||||||
| BANS-522 | Добавлен тип сети `EMPTY`. |
|
|
||||||
| BANS-592 | Добавлен тип сети `DPDK`. |
|
|
||||||
| BANS-11 | Добавлена возможность создать виртуальную машину без образа. |
|
|
||||||
| BANS-12 | Добавлена возможность переименования виртуальной машины. |
|
|
||||||
| BANS-596 | Добавлена возможность изменения IP-адреса ВМ во внутренней/внешней сети без переподключения сети. |
|
|
||||||
|
|
||||||
### Модуль decort_osimage
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-573 | Удалён параметр `architecture`. |
|
|
||||||
|
|
||||||
### Модуль decort_rg
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-507 | Добавлена возможность удаления сети по умолчанию. |
|
|
||||||
| BANS-509 | Добавлен параметр `sep_pools` для указания доступных пулов СХД. |
|
|
||||||
| BANS-7 | Добавлен параметр `recursive_deletion` для удаления непустой РГ. |
|
|
||||||
|
|
||||||
### Модуль decort_account
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-508 | Добавлен параметр `sep_pools` для указания доступных пулов СХД. |
|
|
||||||
|
|
||||||
## Исправления
|
|
||||||
|
|
||||||
### Глобальные
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-511 | При ошибке HTTP-подключения в некоторых случаях работа модуля завершалась ошибкой Python. |
|
|
||||||
|
|
||||||
### Модуль decort_bservice
|
|
||||||
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
|-------------------------| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| BANS-549 | Модуль требовал параметр `name` вместе с параметром `id`.<br/> Исправлено завершение работы модуля с ошибкой Python при отсутствии параметра `rg_id` при заданном параметре `id`. |
|
|
||||||
|
|
||||||
|
## Исправлено
|
||||||
### Модуль decort_kvmvm
|
### Модуль decort_kvmvm
|
||||||
| Идентификатор<br>задачи | Описание |
|
| Идентификатор<br>задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BANS-550 | Отсутствие параметров `cpu` и/или `ram` при заданном параметре `id` вызывало завершение работы модуля **decort_kvmvm** с ошибкой Python. |
|
| BANS-676 | При удалении ВМ, модуль завершал свою работу ошибкой запроса к API. |
|
||||||
| BANS-588 | Исправлена ошибка, при которой модуль производил изменения при незаданных параметрах `data_disks`, `networks`, `tag`, `affinity_label`, `aff_rule`, `aaff_rule`. |
|
| BANS-677 | Параметр `custom_fields` не устанавливался при создании ВМ без образа. |
|
||||||
|
|
||||||
### Модуль decort_disk
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-534 | Исправлена ошибка получения данных о привязке диска к виртуальной машине. |
|
|
||||||
| BANS-557 | Модуль требовал параметр `account_id` или `account_name` при заданном параметре `id`. |
|
|
||||||
| BANS-558 | Модуль пытался произвести `rename` и `resize` при отсутствующих параметрах `name` и `size` |
|
|
||||||
|
|
||||||
### Модуль decort_group
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-560 | Модуль требовал параметр `name` при заданном параметре `id`. |
|
|
||||||
| BANS-561 | Модуль всегда требовал параметр `count`. |
|
|
||||||
| BANS-562 | Модуль производил обновление сетей при незаданном параметре `networks`. |
|
|
||||||
| BANS-563 | Модуль производил вызов API `cloudapi/bservice/groupUpdate` при незаданных параметрах. |
|
|
||||||
| BANS-564 | Модуль завершал свою работу с ошибкой Python если не заданы все необходимые параметры при создании группы. |
|
|
||||||
|
|
||||||
### Модуль decort_osimage
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-566 | Модуль не удалял шаблонный образ без указания идентификатора аккаунта. |
|
|
||||||
| BANS-567 | Модуль завершал свою работу с ошибкой запроса к API при попытке удалить несуществующий или уже удалённый образ. |
|
|
||||||
| BANS-568 | Модуль завершал свою работу ошибкой запроса к API при заданном параметре `virt_id` и незаданном параметре `image_id`. |
|
|
||||||
|
|
||||||
### Модуль decort_lb
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-569 | Модуль требовал параметр `lb_name` при заданном параметре `lb_id`. |
|
|
||||||
| BANS-570 | Модуль завершал работу с ошибкой запроса к API при заданных параметрах `lb_name` и `rg_id` существующего балансировщика. |
|
|
||||||
| BANS-571 | Модуль удалял конфигурации backend и frontend у существующего балансировщика при незаданных параметрах `backends`, `servers`, `frontends`. |
|
|
||||||
|
|
||||||
### Модуль decort_k8s
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-198 | Модуль завершал свою работу с ошибкой Python при отсутствии необязательных подпараметров `workers.sep_id` и `workers.pool`. |
|
|
||||||
| BANS-576 | Модуль требовал необязательные параметры при заданном параметре `id`. |
|
|
||||||
| BANS-578 | Модуль требовал необязательные параметры для изменения группы worker-узлов. |
|
|
||||||
|
|
||||||
### Модуль decort_rg
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-546 | Модуль требовал параметр `account_id` или `account_name` при заданном параметре `rg_id`. |
|
|
||||||
|
|
||||||
### Модуль decort_account_info
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-547 | Модуль ожидал тип `int` для параметра `ext_ip` вместо типа `str`. |
|
|
||||||
|
|
||||||
### Модуль decort_pfw
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BANS-577 | Модуль удаляет правила переадресации портов при незаданном параметре `rules`. |
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
| Версия платформы | Версия модулей Ansible |
|
| Версия платформы | Версия модулей Ansible |
|
||||||
|:----------------:|:--------------------------:|
|
|:----------------:|:--------------------------:|
|
||||||
| 4.1.0 | 6.0.x |
|
| 4.1.0 | 6.0.x, 6.1.x |
|
||||||
| 4.0.0 | 5.6.x, 5.5.x, 5.4.x, 5.3.x |
|
| 4.0.0 | 5.6.x, 5.5.x, 5.4.x, 5.3.x |
|
||||||
| 3.8.8, 3.8.9 | 5.2.6 |
|
| 3.8.8, 3.8.9 | 5.2.6 |
|
||||||
| 3.8.7 | 5.2.5 |
|
| 3.8.7 | 5.2.5 |
|
||||||
|
|||||||
@@ -1,23 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
|
||||||
# Copyright: ...
|
|
||||||
# ...
|
|
||||||
|
|
||||||
DOCUMENTATION = r'''
|
DOCUMENTATION = r'''
|
||||||
---
|
---
|
||||||
module: decort_account
|
module: decort_account
|
||||||
|
|
||||||
version_added: "2.16"
|
|
||||||
|
|
||||||
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
'''
|
'''
|
||||||
|
|
||||||
# EXAMPLES = r'''
|
|
||||||
# '''
|
|
||||||
|
|
||||||
# RETURN = r'''
|
|
||||||
# '''
|
|
||||||
|
|
||||||
from typing import Iterable
|
from typing import Iterable
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.decort_utils import DecortController
|
from ansible.module_utils.decort_utils import DecortController
|
||||||
|
|||||||
@@ -1,23 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
|
||||||
# Copyright: ...
|
|
||||||
# ...
|
|
||||||
|
|
||||||
DOCUMENTATION = r'''
|
DOCUMENTATION = r'''
|
||||||
---
|
---
|
||||||
module: decort_account_info
|
module: decort_account_info
|
||||||
|
|
||||||
version_added: "2.16"
|
|
||||||
|
|
||||||
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
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
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.decort_utils import DecortController
|
from ansible.module_utils.decort_utils import DecortController
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,17 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2021 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
DOCUMENTATION = r'''
|
||||||
# Author: Alexey Dankov (alexey Dankov@digitalenergy.online)
|
---
|
||||||
|
module: decort_bservice
|
||||||
|
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
'status': ['preview'],
|
'''
|
||||||
'supported_by': 'community'}
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.basic import env_fallback
|
from ansible.module_utils.basic import env_fallback
|
||||||
from ansible.module_utils.decort_utils import *
|
from ansible.module_utils.decort_utils import *
|
||||||
|
|
||||||
|
|
||||||
class decort_bservice(DecortController):
|
class decort_bservice(DecortController):
|
||||||
def __init__(self,arg_amodule):
|
def __init__(self,arg_amodule):
|
||||||
super(decort_bservice, self).__init__(arg_amodule)
|
super(decort_bservice, self).__init__(arg_amodule)
|
||||||
@@ -157,7 +152,6 @@ class decort_bservice(DecortController):
|
|||||||
return dict(
|
return dict(
|
||||||
account_id=dict(type='int', required=False),
|
account_id=dict(type='int', required=False),
|
||||||
account_name=dict(type='str', required=False, default=''),
|
account_name=dict(type='str', required=False, default=''),
|
||||||
annotation=dict(type='str', required=False, default=''),
|
|
||||||
app_id=dict(type='str',
|
app_id=dict(type='str',
|
||||||
required=False,
|
required=False,
|
||||||
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
||||||
@@ -193,7 +187,6 @@ class decort_bservice(DecortController):
|
|||||||
id=dict(type='int', required=False, default=0),
|
id=dict(type='int', required=False, default=0),
|
||||||
rg_id=dict(type='int', default=0),
|
rg_id=dict(type='int', default=0),
|
||||||
rg_name=dict(type='str',default=""),
|
rg_name=dict(type='str',default=""),
|
||||||
description=dict(type='str', default="Created by decort ansible module"),
|
|
||||||
verify_ssl=dict(type='bool', required=False, default=True),
|
verify_ssl=dict(type='bool', required=False, default=True),
|
||||||
workflow_callback=dict(type='str', required=False),
|
workflow_callback=dict(type='str', required=False),
|
||||||
workflow_context=dict(type='str', required=False),)
|
workflow_context=dict(type='str', required=False),)
|
||||||
|
|||||||
@@ -1,256 +1,18 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2021 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
DOCUMENTATION = r'''
|
||||||
# Author: Sergey Shubin (sergey.shubin@digitalenergy.online)
|
|
||||||
#
|
|
||||||
|
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
|
||||||
'status': ['preview'],
|
|
||||||
'supported_by': 'community'}
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
---
|
||||||
module: decort_disk
|
module: decort_disk
|
||||||
short_description: Manage Disks (virtualized storage resources) in DECORT cloud
|
|
||||||
description: >
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
This module can be used to create new disk in DECORT cloud platform, obtain or
|
|
||||||
modify its characteristics, and delete it.
|
|
||||||
version_added: "2.2"
|
|
||||||
author:
|
|
||||||
- Sergey Shubin <sergey.shubin@digitalenergy.online>
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- PyJWT Python module
|
|
||||||
- requests Python module
|
|
||||||
- netaddr Python module
|
|
||||||
- decort_utils utility library (module)
|
|
||||||
- DECORT cloud platform version 3.6.1 or higher
|
|
||||||
notes:
|
|
||||||
- Environment variables can be used to pass selected parameters to the module, see details below.
|
|
||||||
- Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used.
|
|
||||||
- 'Similarly, JWT supplied in I(authenticator=jwt) mode should be received from Oauth2 provider trusted by
|
|
||||||
the DECORT cloud controller on which this JWT will be used.'
|
|
||||||
options:
|
|
||||||
account_id:
|
|
||||||
description:
|
|
||||||
- ID of the account, which owns this disk. This is the alternative to I(account_name) option.
|
|
||||||
- If both I(account_id) and I(account_name) specified, then I(account_name) is ignored.
|
|
||||||
default: 0
|
|
||||||
required: no
|
|
||||||
account_name:
|
|
||||||
description:
|
|
||||||
- 'Name of the account, which will own this disk.'
|
|
||||||
- 'This parameter is ignored if I(account_id) is specified.'
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
annotation:
|
|
||||||
description:
|
|
||||||
- Optional text description of this disk.
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
app_id:
|
|
||||||
description:
|
|
||||||
- 'Application ID for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- 'Required if I(authenticator=oauth2).'
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_ID
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
app_secret:
|
|
||||||
description:
|
|
||||||
- 'Application API secret used for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- This parameter is required when I(authenticator=oauth2) and ignored in other modes.
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_SECRET
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
authenticator:
|
|
||||||
description:
|
|
||||||
- Authentication mechanism to be used when accessing DECORT controller and authorizing API call.
|
|
||||||
default: jwt
|
|
||||||
choices: [ jwt, oauth2, legacy ]
|
|
||||||
required: yes
|
|
||||||
controller_url:
|
|
||||||
description:
|
|
||||||
- URL of the DECORT controller that will be contacted to manage the RG according to the specification.
|
|
||||||
- 'This parameter is always required regardless of the specified I(authenticator) type.'
|
|
||||||
required: yes
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- `ID of the disk to manage. If I(id) is specified it is assumed, that this disk already
|
|
||||||
exists. In other words, you cannot create new disk by specifying its ID, use I(name)
|
|
||||||
when creating new disk.`
|
|
||||||
- `If non-zero I(id) is specified, then I(name), I(account_id) and I(account_name)
|
|
||||||
are ignored.`
|
|
||||||
default: 0
|
|
||||||
required: no
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- `Name of the disk to manage. To manage disk by name you also need to specify either
|
|
||||||
I(account_id) or I(account_name).`
|
|
||||||
- If non-zero I(id) is specified, I(name) is ignored.
|
|
||||||
- `Note that the platform does not enforce uniqueness of disk names, so if more than one
|
|
||||||
disk with this name exists under the specified account, module will return the first
|
|
||||||
occurence.`
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
force_detach:
|
|
||||||
description:
|
|
||||||
- `By default it is not allowed to delete or destroy disk that is currently attached to a compute
|
|
||||||
instance (e.g. virtual machine or bare metal server). Set this argument to true to change this
|
|
||||||
behavior.`
|
|
||||||
- This argument is meaningful for I(state=absent) operations only and ignored otherwise.
|
|
||||||
default: false
|
|
||||||
required: no
|
|
||||||
jwt:
|
|
||||||
description:
|
|
||||||
- 'JWT (access token) for authenticating to the DECORT controller when I(authenticator=jwt).'
|
|
||||||
- 'This parameter is required if I(authenticator=jwt) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_JWT environment variable.
|
|
||||||
required: no
|
|
||||||
oauth2_url:
|
|
||||||
description:
|
|
||||||
- 'URL of the oauth2 authentication provider to use when I(authenticator=oauth2).'
|
|
||||||
- 'This parameter is required when when I(authenticator=oauth2).'
|
|
||||||
- 'If not specified in the playbook, the value will be taken from DECORT_OAUTH2_URL environment variable.'
|
|
||||||
password:
|
|
||||||
description:
|
|
||||||
- 'Password for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required if I(authenticator=legacy) and ignored in other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_PASSWORD environment variable.
|
|
||||||
required: no
|
|
||||||
place_with:
|
|
||||||
description:
|
|
||||||
- `This argument can be used to simplify data disks creation along with a new compute, by placing
|
|
||||||
disks in the same storage, where corresponding OS image is deployed.`
|
|
||||||
- `Specify ID of an OS image, and the newly created disk will be provisioned from the same
|
|
||||||
storage, where this OS image is located. You may optionally specify I(pool) to control
|
|
||||||
actual disk placement within that storage, or leave I(pool=default) to let platform manage
|
|
||||||
it automatically.`
|
|
||||||
- This parameter is used when creating new disks and ignored for all other operations.
|
|
||||||
- This is an alternative to specifying I(sep_id).
|
|
||||||
default: 0
|
|
||||||
required: no
|
|
||||||
pool:
|
|
||||||
description:
|
|
||||||
- Name of the pool where to place new disk. Once disk is created, its pool cannot be changed.
|
|
||||||
- This parameter is used when creating new disk and igonred for all other operations.
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
sep_id:
|
|
||||||
description:
|
|
||||||
- `ID of the Storage Endpoint Provider (SEP) where to place new disk. Once disk is created,
|
|
||||||
its SEP cannot be changed.`
|
|
||||||
- `You may think of SEP as an identifier of a storage system connected to DECORT platform. There
|
|
||||||
may be several different storage systems and, consequently, several SEPs available to choose from.`
|
|
||||||
- This parameter is used when creating new disk and igonred for all other operations.
|
|
||||||
- See also I(place_with) for an alternative way to specify disk placement.
|
|
||||||
default: 0
|
|
||||||
required: no
|
|
||||||
size:
|
|
||||||
description:
|
|
||||||
- Size of the disk in GB. This parameter is mandatory when creating new disk.
|
|
||||||
- `If specified for an existing disk, and it is greater than current disk size, platform will try to resize
|
|
||||||
the disk on the fly. Downsizing disk is not allowed.`
|
|
||||||
required: no
|
|
||||||
limitIO:
|
|
||||||
description:
|
|
||||||
- Disk input / output limit, used to limit the speed of interaction with the disk.
|
|
||||||
required: no
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- Type of the disk.
|
|
||||||
- `Disks can be of the following types: "D"-Data, "B"-Boot, "T"-Tmp.`
|
|
||||||
default: "D"
|
|
||||||
required: no
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Specify the desired state of the disk at the exit of the module.
|
|
||||||
- 'If desired I(state=present):'
|
|
||||||
- ' - Disk does not exist or is in [DESTROYED, PURGED] states, create new disk according to the specifications.'
|
|
||||||
- ' - Disk is in DELETED state, restore it and change size if necessary.'
|
|
||||||
- ' - Disk is in one of [CREATED, ASSIGNED] states, do nothing.'
|
|
||||||
- ' - Disk in any other state, abort with an error.'
|
|
||||||
- 'If desired I(state=absent):'
|
|
||||||
- ' - Disk is in one of [CREATED, ASSIGNED, DELETED] states, destroy it.'
|
|
||||||
- ' - Disk not found or in [DESTROYED, PURGED] states, do nothing.'
|
|
||||||
- ' - Disk in any other state, abort with an error.'
|
|
||||||
default: present
|
|
||||||
choices: [ absent, present ]
|
|
||||||
user:
|
|
||||||
description:
|
|
||||||
- 'Name of the legacy user for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required when I(authenticator=legacy) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_USER environment variable.
|
|
||||||
required: no
|
|
||||||
verify_ssl:
|
|
||||||
description:
|
|
||||||
- 'Controls SSL verification mode when making API calls to DECORT controller. Set it to False if you
|
|
||||||
want to disable SSL certificate verification. Intended use case is when you run module in a trusted
|
|
||||||
environment that uses self-signed certificates. Note that disabling SSL verification in any other
|
|
||||||
scenario can lead to security issues, so please know what you are doing.'
|
|
||||||
default: True
|
|
||||||
required: no
|
|
||||||
workflow_callback:
|
|
||||||
description:
|
|
||||||
- 'Callback URL that represents an application, which invokes this module (e.g. up-level orchestrator or
|
|
||||||
end-user portal) and may except out-of-band updates on progress / exit status of the module run.'
|
|
||||||
- API call at this URL will be used to relay such information to the application.
|
|
||||||
- 'API call payload will include module-specific details about this module run and I(workflow_context).'
|
|
||||||
required: no
|
|
||||||
workflow_context:
|
|
||||||
description:
|
|
||||||
- 'Context data that will be included into the payload of the API call directed at I(workflow_callback) URL.'
|
|
||||||
- 'This context data is expected to uniquely identify the task carried out by this module invocation so
|
|
||||||
that up-level orchestrator could match returned information to the its internal entities.'
|
|
||||||
required: no
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: create new Disk named "MyDataDisk01" of size 50 GB, on SEP ID 1, in default pool, under the account "MyAccount".
|
|
||||||
decort_vins:
|
|
||||||
authenticator: oauth2
|
|
||||||
app_id: "{{ MY_APP_ID }}"
|
|
||||||
app_secret: "{{ MY_APP_SECRET }}"
|
|
||||||
controller_url: "https://cloud.digitalenergy.online"
|
|
||||||
name: "MyDataDisk01"
|
|
||||||
sep_id: 1
|
|
||||||
size: 50
|
|
||||||
account_name: "MyAccount"
|
|
||||||
state: present
|
|
||||||
delegate_to: localhost
|
|
||||||
register: my_disk
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
facts:
|
|
||||||
description: facts about the disk
|
|
||||||
returned: always
|
|
||||||
type: dict
|
|
||||||
sample:
|
|
||||||
facts:
|
|
||||||
id: 50
|
|
||||||
name: data01
|
|
||||||
size: 10
|
|
||||||
sep_id: 1
|
|
||||||
pool: datastore
|
|
||||||
state: ASSIGNED
|
|
||||||
account_id: 7
|
|
||||||
computes: {vm_id: vm_name}
|
|
||||||
gid: 1001
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.basic import env_fallback
|
from ansible.module_utils.basic import env_fallback
|
||||||
|
|
||||||
from ansible.module_utils.decort_utils import *
|
from ansible.module_utils.decort_utils import *
|
||||||
|
|
||||||
|
|
||||||
class decort_disk(DecortController):
|
class decort_disk(DecortController):
|
||||||
def __init__(self,arg_amodule):
|
def __init__(self,arg_amodule):
|
||||||
super(decort_disk, self).__init__(arg_amodule)
|
super(decort_disk, self).__init__(arg_amodule)
|
||||||
@@ -308,7 +70,7 @@ class decort_disk(DecortController):
|
|||||||
|
|
||||||
self.disk_id = self.disk_create(accountId=self.acc_id,
|
self.disk_id = self.disk_create(accountId=self.acc_id,
|
||||||
name = self.amodule.params['name'],
|
name = self.amodule.params['name'],
|
||||||
description=self.amodule.params['annotation'],
|
description=self.amodule.params['description'],
|
||||||
size=self.amodule.params['size'],
|
size=self.amodule.params['size'],
|
||||||
type=self.amodule.params['type'],
|
type=self.amodule.params['type'],
|
||||||
iops=self.amodule.params['iops'],
|
iops=self.amodule.params['iops'],
|
||||||
@@ -422,7 +184,7 @@ class decort_disk(DecortController):
|
|||||||
return dict(
|
return dict(
|
||||||
account_id=dict(type='int', required=False, default=0),
|
account_id=dict(type='int', required=False, default=0),
|
||||||
account_name=dict(type='str', required=False, default=''),
|
account_name=dict(type='str', required=False, default=''),
|
||||||
annotation=dict(type='str', required=False, default='Disk by decort_disk'),
|
description=dict(type='str', required=False, default='Disk by decort_disk'),
|
||||||
app_id=dict(type='str',
|
app_id=dict(type='str',
|
||||||
required=False,
|
required=False,
|
||||||
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
||||||
|
|||||||
@@ -1,22 +1,17 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2021 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
DOCUMENTATION = r'''
|
||||||
# Author: Alexey Dankov (alexey.dankov@digitalenergy.online)
|
---
|
||||||
|
module: decort_group
|
||||||
|
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
'status': ['preview'],
|
'''
|
||||||
'supported_by': 'community'}
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.basic import env_fallback
|
from ansible.module_utils.basic import env_fallback
|
||||||
from ansible.module_utils.decort_utils import *
|
from ansible.module_utils.decort_utils import *
|
||||||
|
|
||||||
|
|
||||||
class decort_group(DecortController):
|
class decort_group(DecortController):
|
||||||
def __init__(self,arg_amodule):
|
def __init__(self,arg_amodule):
|
||||||
super(decort_group, self).__init__(arg_amodule)
|
super(decort_group, self).__init__(arg_amodule)
|
||||||
@@ -154,7 +149,6 @@ class decort_group(DecortController):
|
|||||||
state="CHECK_MODE",
|
state="CHECK_MODE",
|
||||||
account_id=0,
|
account_id=0,
|
||||||
rg_id=0,
|
rg_id=0,
|
||||||
config=None,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if check_mode:
|
if check_mode:
|
||||||
@@ -180,7 +174,6 @@ class decort_group(DecortController):
|
|||||||
return dict(
|
return dict(
|
||||||
account_id=dict(type='int', required=False),
|
account_id=dict(type='int', required=False),
|
||||||
account_name=dict(type='str', required=False, default=''),
|
account_name=dict(type='str', required=False, default=''),
|
||||||
annotation=dict(type='str', required=False, default=''),
|
|
||||||
app_id=dict(type='str',
|
app_id=dict(type='str',
|
||||||
required=False,
|
required=False,
|
||||||
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
||||||
@@ -235,7 +228,6 @@ class decort_group(DecortController):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
description=dict(type='str', default="Created by decort ansible module"),
|
|
||||||
verify_ssl=dict(type='bool', required=False, default=True),
|
verify_ssl=dict(type='bool', required=False, default=True),
|
||||||
workflow_callback=dict(type='str', required=False),
|
workflow_callback=dict(type='str', required=False),
|
||||||
workflow_context=dict(type='str', required=False),)
|
workflow_context=dict(type='str', required=False),)
|
||||||
|
|||||||
@@ -1,86 +1,10 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2021 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
DOCUMENTATION = r'''
|
||||||
# Author: Sergey Shubin (sergey.shubin@digitalenergy.online)
|
|
||||||
#
|
|
||||||
|
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
|
||||||
'status': ['preview'],
|
|
||||||
'supported_by': 'community'}
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
---
|
||||||
module: decort_jwt
|
module: decort_jwt
|
||||||
short_description: Obtain access token to be used for authentication to DECORT cloud controller
|
|
||||||
description:
|
|
||||||
- Obtain JWT (JSON Web Token) from the specified Oauth2 provider. This JWT can be used in subsequent DECS modules'
|
|
||||||
invocations to authenticate them to the DECS cloud controller.
|
|
||||||
version_added: "2.4"
|
|
||||||
author: "Sergey Shubin (sergey.shubin@digitalenergy.online)"
|
|
||||||
notes:
|
|
||||||
- Environment variables can be used to pass parameters to the module (see options below for details).
|
|
||||||
- Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used.
|
|
||||||
- 'If you register module output as I(my_jwt), the JWT value is accessed as I(my_jwt.jwt)'
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- PyJWT module
|
|
||||||
- requests module
|
|
||||||
- decort_utils utility library (module)
|
|
||||||
- DECORT cloud platform version 3.6.1 or higher
|
|
||||||
options:
|
|
||||||
app_id:
|
|
||||||
description:
|
|
||||||
- 'Application ID for authenticating to the Oauth2 provider specified in I(oauth2_url).'
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_ID
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
app_secret:
|
|
||||||
description:
|
|
||||||
- 'Application API secret used for authenticating to the Oauth2 provider specified in I(oauth2_url).'
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_SECRET
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
oauth2_url:
|
|
||||||
description:
|
|
||||||
- 'URL of the oauth2 authentication provider to obtain JWT from.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_OAUTH2_URL environment variable.
|
|
||||||
validity:
|
|
||||||
description:
|
|
||||||
- Validity of the JWT in seconds. Default value is 3600 (one hour).
|
|
||||||
required: no
|
|
||||||
verify_ssl:
|
|
||||||
description:
|
|
||||||
- 'Controls SSL verification mode when making API calls to DECS controller. Set it to False if you
|
|
||||||
want to disable SSL certificate verification.'
|
|
||||||
- `Intended use case is when you run module in a trusted environment that uses self-signed certificates.
|
|
||||||
Note that disabling SSL verification in any other scenario can lead to security issues, so please use
|
|
||||||
with caution.'
|
|
||||||
default: True
|
|
||||||
required: no
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
- name: Obtain JWT and store it as my_jwt for authenticating subsequent task to DECORT cloud controller
|
|
||||||
decort_jwt:
|
|
||||||
app_id: "{{ my_app_id }}"
|
|
||||||
app_secret: "{{ my_app_secret }}"
|
|
||||||
oauth2_url: https://sso.decs.online
|
|
||||||
delegate_to: localhost
|
|
||||||
register: my_jwt
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
jwt:
|
|
||||||
description: JSON Web Token that can be used to access DECS cloud controller
|
|
||||||
returned: always
|
|
||||||
type: string
|
|
||||||
sample: None
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
@@ -88,6 +12,7 @@ import requests
|
|||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.basic import env_fallback
|
from ansible.module_utils.basic import env_fallback
|
||||||
|
|
||||||
|
|
||||||
def decort_jwt_parameters():
|
def decort_jwt_parameters():
|
||||||
"""Build and return a dictionary of parameters expected by decort_jwt module in a form accepted
|
"""Build and return a dictionary of parameters expected by decort_jwt module in a form accepted
|
||||||
by AnsibleModule utility class"""
|
by AnsibleModule utility class"""
|
||||||
|
|||||||
@@ -1,83 +1,39 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2023 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
|
DOCUMENTATION = r'''
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
|
||||||
'status': ['preview'],
|
|
||||||
'supported_by': 'community'}
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
---
|
||||||
---
|
module: decort_k8s
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
- name: Create k8s cluster
|
|
||||||
decort_k8s:
|
|
||||||
verify_ssl: false
|
|
||||||
authenticator: jwt
|
|
||||||
jwt: "{{ run_jwt.jwt }}"
|
|
||||||
controller_url: "{{CONTROLLER_URL}}"
|
|
||||||
name: SOME_NAME
|
|
||||||
rg_id: {{RG_ID}}
|
|
||||||
k8ci_id: 10
|
|
||||||
master_count: 3
|
|
||||||
master_cpu: 2
|
|
||||||
master_ram: 2048
|
|
||||||
master_disk: 10
|
|
||||||
state: present
|
|
||||||
permanent: True
|
|
||||||
started: True
|
|
||||||
getConfig: True
|
|
||||||
network_plugin: flannel
|
|
||||||
workers:
|
|
||||||
- name: wg1
|
|
||||||
ram: 1024
|
|
||||||
cpu: 2
|
|
||||||
disk: 10
|
|
||||||
num: 1
|
|
||||||
labels:
|
|
||||||
- disktype1=ssd1
|
|
||||||
- disktype2=ssd2
|
|
||||||
- disktype3=ssd3
|
|
||||||
taints:
|
|
||||||
- key1=value1:NoSchedule
|
|
||||||
- key2=value2:NoSchedule
|
|
||||||
- key3=value3:NoSchedule
|
|
||||||
annotations:
|
|
||||||
- node.deckhouse.io/group1=g1
|
|
||||||
- node.deckhouse.io/group2=g2
|
|
||||||
- node.deckhouse.io/group3=g3
|
|
||||||
- name: wg2
|
|
||||||
ram: 1024
|
|
||||||
cpu: 2
|
|
||||||
disk: 10
|
|
||||||
num: 1
|
|
||||||
labels:
|
|
||||||
- apptype=main
|
|
||||||
annotations:
|
|
||||||
- node.mainapp.domen.local/group1=g1
|
|
||||||
register: some_cluster
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.basic import env_fallback
|
from ansible.module_utils.basic import env_fallback
|
||||||
from ansible.module_utils.decort_utils import *
|
from ansible.module_utils.decort_utils import *
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
|
|
||||||
class decort_k8s(DecortController):
|
class decort_k8s(DecortController):
|
||||||
def __init__(self,arg_amodule):
|
def __init__(self,arg_amodule):
|
||||||
super(decort_k8s, self).__init__(arg_amodule)
|
super(decort_k8s, self).__init__(arg_amodule)
|
||||||
|
|
||||||
validated_acc_id = 0
|
validated_acc_id = 0
|
||||||
validated_rg_id = 0
|
validated_rg_id = 0
|
||||||
validated_rg_facts = None
|
validated_rg_facts = None
|
||||||
validated_k8ci_id = 0
|
validated_k8ci_id = 0
|
||||||
self.k8s_should_exist = False
|
self.k8s_should_exist = False
|
||||||
|
|
||||||
|
self.wg_default_params = {
|
||||||
|
'num': 1,
|
||||||
|
'cpu': 1,
|
||||||
|
'ram': 1024,
|
||||||
|
'labels': [],
|
||||||
|
'taints': [],
|
||||||
|
'annotations': [],
|
||||||
|
'ci_user_data': {},
|
||||||
|
'chipset': 'i440fx',
|
||||||
|
}
|
||||||
|
|
||||||
if arg_amodule.params['name'] == "" and arg_amodule.params['id'] is None:
|
if arg_amodule.params['name'] == "" and arg_amodule.params['id'] is None:
|
||||||
self.result['failed'] = True
|
self.result['failed'] = True
|
||||||
self.result['changed'] = False
|
self.result['changed'] = False
|
||||||
@@ -208,6 +164,16 @@ class decort_k8s(DecortController):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def create(self):
|
def create(self):
|
||||||
|
master_chipset = self.amodule.params['master_chipset']
|
||||||
|
if master_chipset is None:
|
||||||
|
master_chipset = 'i440fx'
|
||||||
|
|
||||||
|
target_wgs = deepcopy(self.amodule.params['workers'])
|
||||||
|
for wg in target_wgs:
|
||||||
|
for param, default_value in self.wg_default_params.items():
|
||||||
|
if wg[param] is None:
|
||||||
|
wg[param] = default_value
|
||||||
|
|
||||||
k8s_id = self.k8s_provision(self.amodule.params['name'],
|
k8s_id = self.k8s_provision(self.amodule.params['name'],
|
||||||
self.amodule.params['k8ci_id'],
|
self.amodule.params['k8ci_id'],
|
||||||
self.amodule.params['rg_id'],
|
self.amodule.params['rg_id'],
|
||||||
@@ -219,7 +185,7 @@ class decort_k8s(DecortController):
|
|||||||
self.amodule.params['master_disk'],
|
self.amodule.params['master_disk'],
|
||||||
self.amodule.params['master_sepid'],
|
self.amodule.params['master_sepid'],
|
||||||
self.amodule.params['master_pool'],
|
self.amodule.params['master_pool'],
|
||||||
self.amodule.params['workers'][0],
|
target_wgs[0],
|
||||||
self.amodule.params['extnet_id'],
|
self.amodule.params['extnet_id'],
|
||||||
self.amodule.params['with_lb'],
|
self.amodule.params['with_lb'],
|
||||||
self.amodule.params['ha_lb'],
|
self.amodule.params['ha_lb'],
|
||||||
@@ -232,6 +198,7 @@ class decort_k8s(DecortController):
|
|||||||
self.amodule.params['oidc_cert'],
|
self.amodule.params['oidc_cert'],
|
||||||
self.amodule.params['description'],
|
self.amodule.params['description'],
|
||||||
self.amodule.params['extnet_only'],
|
self.amodule.params['extnet_only'],
|
||||||
|
master_chipset,
|
||||||
)
|
)
|
||||||
|
|
||||||
if not k8s_id:
|
if not k8s_id:
|
||||||
@@ -245,11 +212,13 @@ class decort_k8s(DecortController):
|
|||||||
k8s_name=self.amodule.params['name'],
|
k8s_name=self.amodule.params['name'],
|
||||||
rg_id=self.rg_id,
|
rg_id=self.rg_id,
|
||||||
check_state=False)
|
check_state=False)
|
||||||
|
|
||||||
if self.k8s_id:
|
if self.k8s_id:
|
||||||
self.k8s_should_exist = True
|
self.k8s_should_exist = True
|
||||||
if self.k8s_id and len(self.amodule.params['workers'])>1 :
|
self.k8s_workers_modify(
|
||||||
self.k8s_workers_modify(self.k8s_info,self.amodule.params['workers'])
|
arg_k8swg=self.k8s_info,
|
||||||
|
arg_modwg=target_wgs,
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
@@ -259,6 +228,13 @@ class decort_k8s(DecortController):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def action(self, disared_state, started=True, preupdate: bool = False):
|
def action(self, disared_state, started=True, preupdate: bool = False):
|
||||||
|
if self.amodule.params['master_chipset'] is not None:
|
||||||
|
self.result['msg'] = (
|
||||||
|
'"master_chipset" parameter must not be specified '
|
||||||
|
'when modifying an existing K8s cluster.'
|
||||||
|
)
|
||||||
|
self.exit(fail=True)
|
||||||
|
|
||||||
if preupdate:
|
if preupdate:
|
||||||
# K8s info updating
|
# K8s info updating
|
||||||
self.k8s_info = self.k8s_get_by_id(k8s_id=self.k8s_id)
|
self.k8s_info = self.k8s_get_by_id(k8s_id=self.k8s_id)
|
||||||
@@ -270,18 +246,18 @@ class decort_k8s(DecortController):
|
|||||||
self.k8s_info['techStatus'] == "STARTED"
|
self.k8s_info['techStatus'] == "STARTED"
|
||||||
#check groups and modify if needed
|
#check groups and modify if needed
|
||||||
if self.aparams['workers'] is not None:
|
if self.aparams['workers'] is not None:
|
||||||
self.k8s_workers_modify(self.k8s_info, self.aparams['workers'])
|
self.k8s_workers_modify(self.k8s_info, self.amodule.params['workers'])
|
||||||
if self.result['changed'] == True:
|
if self.result['changed'] == True:
|
||||||
self.k8s_info = self.k8s_get_by_id(k8s_id=self.k8s_id)
|
self.k8s_info = self.k8s_get_by_id(k8s_id=self.k8s_id)
|
||||||
#TODO check workers metadata and modify if needed
|
#TODO check workers metadata and modify if needed
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def build_parameters():
|
def build_parameters():
|
||||||
return dict(
|
return dict(
|
||||||
account_id=dict(type='int', required=False),
|
account_id=dict(type='int', required=False),
|
||||||
account_name=dict(type='str', required=False, default=''),
|
account_name=dict(type='str', required=False, default=''),
|
||||||
annotation=dict(type='str', required=False, default=''),
|
|
||||||
app_id=dict(type='str',
|
app_id=dict(type='str',
|
||||||
required=False,
|
required=False,
|
||||||
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
||||||
@@ -369,6 +345,10 @@ class decort_k8s(DecortController):
|
|||||||
type='list',
|
type='list',
|
||||||
elements='str',
|
elements='str',
|
||||||
),
|
),
|
||||||
|
chipset=dict(
|
||||||
|
type='str',
|
||||||
|
choices=['Q35', 'i440fx'],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
workers_metadata=dict(type='bool',required=False,default=False),
|
workers_metadata=dict(type='bool',required=False,default=False),
|
||||||
@@ -386,7 +366,12 @@ class decort_k8s(DecortController):
|
|||||||
oidc_cert=dict(type='raw',required=False,default=None),
|
oidc_cert=dict(type='raw',required=False,default=None),
|
||||||
verify_ssl=dict(type='bool', required=False, default=True),
|
verify_ssl=dict(type='bool', required=False, default=True),
|
||||||
workflow_callback=dict(type='str', required=False),
|
workflow_callback=dict(type='str', required=False),
|
||||||
workflow_context=dict(type='str', required=False),)
|
workflow_context=dict(type='str', required=False),
|
||||||
|
master_chipset=dict(
|
||||||
|
type='str',
|
||||||
|
choices=['Q35', 'i440fx'],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
module_parameters = decort_k8s.build_parameters()
|
module_parameters = decort_k8s.build_parameters()
|
||||||
|
|||||||
@@ -1,355 +1,17 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2023 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
DOCUMENTATION = r'''
|
||||||
'status': ['preview'],
|
|
||||||
'supported_by': 'community'}
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
---
|
||||||
module: decort_kvmvm
|
module: decort_kvmvm
|
||||||
short_description: Manage KVM virtual machine in DECORT cloud
|
|
||||||
description: >
|
|
||||||
This module can be used to create a KVM based virtual machine in Digital Energy cloud platform from a
|
|
||||||
specified OS image, modify virtual machine's CPU and RAM allocation, change its power state, configure
|
|
||||||
network port forwarding rules, restart guest OS and delete a virtual machine thus releasing
|
|
||||||
corresponding cloud resources.
|
|
||||||
version_added: "2.2"
|
|
||||||
|
|
||||||
requirements:
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
- python >= 3.8
|
|
||||||
- PyJWT Python module
|
|
||||||
- requests Python module
|
|
||||||
- netaddr Python module
|
|
||||||
- decort_utils utility library (module)
|
|
||||||
- DECORT cloud platform version 3.8.6 or higher
|
|
||||||
notes:
|
|
||||||
- Environment variables can be used to pass selected parameters to the module, see details below.
|
|
||||||
- Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used.
|
|
||||||
- 'Similarly, JWT supplied in I(authenticator=jwt) mode should be received from Oauth2 provider trusted by
|
|
||||||
the DECORT cloud controller on which this JWT will be used.'
|
|
||||||
options:
|
|
||||||
account_id:
|
|
||||||
description:
|
|
||||||
- 'ID of the account in which this VM will be created (for new VMs) or is located (for already
|
|
||||||
existing VMs). This is the alternative to I(account_name) option.'
|
|
||||||
- If both I(account_id) and I(account_name) specified, then I(account_name) is ignored.
|
|
||||||
- If any one of I(vm_id) or I(rg_id) specified, I(account_id) is ignored.
|
|
||||||
required: no
|
|
||||||
account_name:
|
|
||||||
description:
|
|
||||||
- 'Name of the account in which this VM will be created (for new VMs) or is located (for already
|
|
||||||
existing VMs).'
|
|
||||||
- This parameter is ignored if I(account_id) is specified.
|
|
||||||
- If any one of I(vm_id) or I(rg_id) specified, I(account_name) is ignored.
|
|
||||||
required: no
|
|
||||||
annotation:
|
|
||||||
description:
|
|
||||||
- Optional text description of this VM.
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
app_id:
|
|
||||||
description:
|
|
||||||
- 'Application ID for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- 'Required if I(authenticator=oauth2).'
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_ID
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
app_secret:
|
|
||||||
description:
|
|
||||||
- 'Application API secret used for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- This parameter is required when I(authenticator=oauth2) and ignored in other modes.
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_SECRET
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
arch:
|
|
||||||
description:
|
|
||||||
- Architecture of the KVM VM. DECORT supports KVM hosts based on Intel x86.
|
|
||||||
- This parameter is used when new KVM VM is created and ignored for all other operations.
|
|
||||||
- Module may fail if your DECORT installation does not have physical nodes of specified architecture.
|
|
||||||
default: X86_64
|
|
||||||
choices: [ X86_64 ]
|
|
||||||
required: yes
|
|
||||||
authenticator:
|
|
||||||
description:
|
|
||||||
- Authentication mechanism to be used when accessing DECORT controller and authorizing API call.
|
|
||||||
default: jwt
|
|
||||||
choices: [ jwt, oauth2, legacy ]
|
|
||||||
required: yes
|
|
||||||
boot_disk:
|
|
||||||
description:
|
|
||||||
- 'Boot disk size in GB. If this parameter is not specified for a new VM, the size of the boot disk
|
|
||||||
will be set to the size of the OS image, which this VM is based on.'
|
|
||||||
- Boot disk is always created in the same storage and pool, as the OS image, which this VM is based on.
|
|
||||||
- Boot disk cannot be detached from VM.
|
|
||||||
required: no
|
|
||||||
controller_url:
|
|
||||||
description:
|
|
||||||
- URL of the DECORT controller that will be contacted to manage the VM according to the specification.
|
|
||||||
- 'This parameter is always required regardless of the specified I(authenticator) type.'
|
|
||||||
required: yes
|
|
||||||
cpu:
|
|
||||||
description:
|
|
||||||
- Number of virtual CPUs to allocate for the VM.
|
|
||||||
- This parameter is required for creating new VM and optional for other operations.
|
|
||||||
- 'If you set this parameter for an existing VM, then the module will check if VM resize is necessary and do
|
|
||||||
it accordingly. Note that resize operation on a running VM may generate errors as not all OS images support
|
|
||||||
hot resize feature.'
|
|
||||||
required: no
|
|
||||||
data_disks:
|
|
||||||
description:
|
|
||||||
- Optional list of integer IDs of the pre-existing disks that will be attached to this VM.
|
|
||||||
- These are additional disks (aka data disks) besides boot disk, which is created and attached automatically.
|
|
||||||
required: no
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- ID of the KVM VM to manage.
|
|
||||||
- 'Either I(id) or a combination of VM name I(name) and RG related parameters (either I(rg_id) or a pair of
|
|
||||||
I(account_name) and I(rg_name) is required to manage an existing VM.'
|
|
||||||
- 'This parameter is not required (and ignored) when creating new VM as VM ID is assigned by cloud platform
|
|
||||||
automatically and cannot be changed afterwards. If existing VM is identified by I(id), then I(account_id),
|
|
||||||
I(account_name), I(rg_name) or I(rg_id) parameters will be ignored.'
|
|
||||||
required: no
|
|
||||||
image_id:
|
|
||||||
description:
|
|
||||||
- ID of the OS image to use for VM provisioning.
|
|
||||||
- 'This parameter is valid at VM creation time only and is ignored for operations on existing VMs.'
|
|
||||||
- 'You need to know image ID, e.g. by extracting it with decort_osimage module and storing
|
|
||||||
in a variable prior to calling decort_kvmvm.'
|
|
||||||
- 'If both I(image_id) and I(image_name) are specified, I(image_name) will be ignored.'
|
|
||||||
required: no
|
|
||||||
image_name:
|
|
||||||
description:
|
|
||||||
- Name of the OS image to use for a new VM provisioning.
|
|
||||||
- 'This parameter is valid at VM creation time only and is ignored for operations on existing VMs.'
|
|
||||||
- 'The specified image name will be looked up in the target DECORT controller and error will be generated if
|
|
||||||
no matching image is found.'
|
|
||||||
- 'If both I(image_id) and I(image_name) are specified, I(image_name) will be ignored.'
|
|
||||||
required: no
|
|
||||||
jwt:
|
|
||||||
description:
|
|
||||||
- 'JWT (access token) for authenticating to the DECORT controller when I(authenticator=jwt).'
|
|
||||||
- 'This parameter is required if I(authenticator=jwt) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_JWT environment variable.
|
|
||||||
required: no
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the VM.
|
|
||||||
- 'To manage VM by I(name) you also need to specify either I(rg_id) or a pair of I(rg_name) and I(account_name).'
|
|
||||||
- 'If both I(name) and I(id) are specified, I(name) will be ignored and I(id) used to locate the VM.'
|
|
||||||
required: no
|
|
||||||
networks:
|
|
||||||
description:
|
|
||||||
- List of dictionaries that specifies network connections for this VM.
|
|
||||||
- Structure of each element is as follows:
|
|
||||||
- ' - (string) type - type of the network connection. Supported types are VINS and EXTNET.'
|
|
||||||
- ' - (int) id - ID of the target network segment. It is ViNS ID for I(net_type=VINS) and
|
|
||||||
external network segment ID for I(net_type=EXTNET)'
|
|
||||||
- ' - (string) ip_addr - optional IP address to request for this connection. If not specified, the
|
|
||||||
platform will assign valid IP address automatically.'
|
|
||||||
- 'If you call decort_kvmvm module for an existing VM, the module will try to reconfigure existing network
|
|
||||||
connections according to the new specification.'
|
|
||||||
- If this parameter is not specified, the VM will have no connections to the network(s).
|
|
||||||
required: no
|
|
||||||
oauth2_url:
|
|
||||||
description:
|
|
||||||
- 'URL of the oauth2 authentication provider to use when I(authenticator=oauth2).'
|
|
||||||
- 'This parameter is required when when I(authenticator=oauth2).'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_OAUTH2_URL environment variable.
|
|
||||||
password:
|
|
||||||
description:
|
|
||||||
- 'Password for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required if I(authenticator=legacy) and ignored in other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_PASSWORD environment variable.
|
|
||||||
required: no
|
|
||||||
ram:
|
|
||||||
description:
|
|
||||||
- Size of RAM in MB to allocate to the VM.
|
|
||||||
- This parameter is required for creating new VM and optional for other operations.
|
|
||||||
- 'If you set this parameter for an existing VM, then the module will check if VM resize is necessary and do
|
|
||||||
it accordingly. Note that resize operation on a running VM may generate errors as not all OS images support
|
|
||||||
hot resize feature.'
|
|
||||||
required: no
|
|
||||||
ssh_key:
|
|
||||||
description:
|
|
||||||
- 'SSH public key to be deployed on to the new VM for I(ssh_key_user). If I(ssh_key_user) is not specified,
|
|
||||||
the key will not be deployed, and a warning is generated.'
|
|
||||||
- This parameter is valid at VM creation time only and ignored for any operation on existing VMs.
|
|
||||||
required: no
|
|
||||||
ssh_key_user:
|
|
||||||
description:
|
|
||||||
- User for which I(ssh_key) should be deployed.
|
|
||||||
- If I(ssh_key) is not specified, this parameter is ignored and a warning is generated.
|
|
||||||
- This parameter is valid at VM creation time only and ignored for any operation on existing VMs.
|
|
||||||
required: no
|
|
||||||
user_data:
|
|
||||||
description:
|
|
||||||
- Cloud-init User-Data, exept ssh module
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Specify the desired state of the virtual machine at the exit of the module.
|
|
||||||
- 'Regardless of I(state), if VM exists and is in one of [MIGRATING, DESTROYING, ERROR] states, do nothing.'
|
|
||||||
- 'If desired I(state=check):'
|
|
||||||
- ' - Just check if VM exists in any state and return its current specifications.'
|
|
||||||
- ' - If VM does not exist, fail the task.'
|
|
||||||
- 'If desired I(state=present):'
|
|
||||||
- ' - VM does not exist, create the VM according to the specifications and start it.'
|
|
||||||
- ' - VM in one of [RUNNING, PAUSED, HALTED] states, attempt resize if necessary, change network if necessary.'
|
|
||||||
- ' - VM in DELETED state, restore and start it.'
|
|
||||||
- ' - VM in DESTROYED state, recreate the VM according to the specifications and start it.'
|
|
||||||
- 'If desired I(state=poweredon):'
|
|
||||||
- ' - VM does not exist, create it according to the specifications.'
|
|
||||||
- ' - VM in RUNNING state, attempt resize if necessary, change network if necessary.'
|
|
||||||
- ' - VM in one of [PAUSED, HALTED] states, attempt resize if necessary, change network if necessary, next
|
|
||||||
start the VM.'
|
|
||||||
- ' - VM in DELETED state, restore it.'
|
|
||||||
- ' - VM in DESTROYED state, create it according to the specifications.'
|
|
||||||
- 'If desired I(state=absent):'
|
|
||||||
- ' - VM in one of [RUNNING, PAUSED, HALTED] states, destroy it.'
|
|
||||||
- ' - VM in one of [DELETED, DESTROYED] states, do nothing.'
|
|
||||||
- 'If desired I(state=paused):'
|
|
||||||
- ' - VM in RUNNING state, pause the VM, resize if necessary, change network if necessary.'
|
|
||||||
- ' - VM in one of [PAUSED, HALTED] states, resize if necessary, change network if necessary.'
|
|
||||||
- ' - VM in one of [DELETED, DESTROYED] states, abort with an error.'
|
|
||||||
- 'If desired I(state=poweredoff) or I(state=halted):'
|
|
||||||
- ' - VM does not exist, create the VM according to the specifications and leave it in HALTED state.'
|
|
||||||
- ' - VM in RUNNING state, stop the VM, resize if necessary, change network if necessary.'
|
|
||||||
- ' - VM in one of [PAUSED, HALTED] states, resize if necessary, change network if necessary.'
|
|
||||||
- ' - VM in DELETED state, abort with an error.'
|
|
||||||
- ' - VM in DESTROYED state, recreate the VM according to the specifications and leave it in HALTED state.'
|
|
||||||
default: present
|
|
||||||
choices: [ present, absent, poweredon, poweredoff, halted, paused, check ]
|
|
||||||
tags:
|
|
||||||
description:
|
|
||||||
- Dict of custom tags to be assigned to the VM.
|
|
||||||
- These tags are arbitrary text that can be used for grouping or indexing the VMs by other applications.
|
|
||||||
required: no
|
|
||||||
user:
|
|
||||||
description:
|
|
||||||
- 'Name of the legacy user for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required when I(authenticator=legacy) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_USER environment variable.
|
|
||||||
required: no
|
|
||||||
rg_id:
|
|
||||||
description:
|
|
||||||
- ID of the Resource Group where a new VM will be deployed or an existing VM can be found.
|
|
||||||
- 'This parameter may be required when managing VM by its I(name). If you specify I(rg_id), then
|
|
||||||
I(account_name), I(account_id) and I(rg_name) will be ignored.'
|
|
||||||
required: no
|
|
||||||
rg_name:
|
|
||||||
description:
|
|
||||||
- Name of the RG where the VM will be deployed (for new VMs) or can be found (for existing VMs).
|
|
||||||
- This parameter is required when managing VM by its I(name).
|
|
||||||
- If both I(rg_id) and I(rg_name) are specified, I(rg_name) will be ignored.
|
|
||||||
- If I(rg_name) is specified, then either I(account_name) or I(account_id) must also be set.
|
|
||||||
required: no
|
|
||||||
verify_ssl:
|
|
||||||
description:
|
|
||||||
- 'Controls SSL verification mode when making API calls to DECORT controller. Set it to False if you
|
|
||||||
want to disable SSL certificate verification. Intended use case is when you run module in a trusted
|
|
||||||
environment that uses self-signed certificates. Note that disabling SSL verification in any other
|
|
||||||
scenario can lead to security issues, so please know what you are doing.'
|
|
||||||
default: True
|
|
||||||
required: no
|
|
||||||
workflow_callback:
|
|
||||||
description:
|
|
||||||
- 'Callback URL that represents an application, which invokes this module (e.g. up-level orchestrator or
|
|
||||||
end-user portal) and may except out-of-band updates on progress / exit status of the module run.'
|
|
||||||
- API call at this URL will be used to relay such information to the application.
|
|
||||||
- 'API call payload will include module-specific details about this module run and I(workflow_context).'
|
|
||||||
required: no
|
|
||||||
workflow_context:
|
|
||||||
description:
|
|
||||||
- 'Context data that will be included into the payload of the API call directed at I(workflow_callback) URL.'
|
|
||||||
- 'This context data is expected to uniquely identify the task carried out by this module invocation so
|
|
||||||
that up-level orchestrator could match returned information to the its internal entities.'
|
|
||||||
required: no
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: create a VM named "SimpleVM" in the DECORT cloud along with VDC named "ANewVDC" if it does not exist yet.
|
|
||||||
decort_kvmvm:
|
|
||||||
annotation: "VM managed by decort_kvmvm module"
|
|
||||||
authenticator: oauth2
|
|
||||||
app_id: "{{ MY_APP_ID }}"
|
|
||||||
app_secret: "{{ MY_APP_SECRET }}"
|
|
||||||
controller_url: "https://ds1.digitalenergy.online"
|
|
||||||
name: SimpleVM
|
|
||||||
cpu: 2
|
|
||||||
ram: 4096
|
|
||||||
boot_disk: 10
|
|
||||||
image_name: "Ubuntu 16.04 v1.1"
|
|
||||||
data_disks:
|
|
||||||
- {{DISK_ID}}
|
|
||||||
state: present
|
|
||||||
tags:
|
|
||||||
PROJECT:Ansible
|
|
||||||
STATUS:Test
|
|
||||||
account_name: "Development"
|
|
||||||
rg_name: "ANewVDC"
|
|
||||||
delegate_to: localhost
|
|
||||||
register: simple_vm
|
|
||||||
- name: resize the above VM to CPU 4 and remove port forward rule for port number 80.
|
|
||||||
decort_kvmvm:
|
|
||||||
authenticator: jwt
|
|
||||||
jwt: "{{ MY_JWT }}"
|
|
||||||
controller_url: "https://ds1.digitalenergy.online"
|
|
||||||
name: SimpleVM
|
|
||||||
cpu: 4
|
|
||||||
ram: 4096
|
|
||||||
port_forwards:
|
|
||||||
- ext_port: 21022
|
|
||||||
int_port: 22
|
|
||||||
proto: tcp
|
|
||||||
state: present
|
|
||||||
account_name: "Development"
|
|
||||||
rg_name: "ANewVDC"
|
|
||||||
delegate_to: localhost
|
|
||||||
register: simple_vm
|
|
||||||
- name: stop existing VM identified by the VM ID and down size it to CPU:RAM 1:2048 along the way.
|
|
||||||
decort_kvmvm:
|
|
||||||
authenticator: jwt
|
|
||||||
jwt: "{{ MY_JWT }}"
|
|
||||||
controller_url: "https://ds1.digitalenergy.online"
|
|
||||||
id: "{{ TARGET_VM_ID }}"
|
|
||||||
cpu: 1
|
|
||||||
ram: 2048
|
|
||||||
state: poweredoff
|
|
||||||
delegate_to: localhost
|
|
||||||
register: simple_vm
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
facts:
|
|
||||||
description: facts about the virtual machine that may be useful in the playbook
|
|
||||||
returned: always
|
|
||||||
type: dict
|
|
||||||
sample:
|
|
||||||
facts:
|
|
||||||
id: 9454
|
|
||||||
name: TestVM
|
|
||||||
state: RUNNING
|
|
||||||
username: testuser
|
|
||||||
password: Yab!tWbyPF
|
|
||||||
int_ip: 192.168.103.253
|
|
||||||
rg_name: SandboxVDC
|
|
||||||
rg_id: 2883
|
|
||||||
vdc_ext_ip: 185.193.143.151
|
|
||||||
ext_ip: 185.193.143.106
|
|
||||||
ext_netmask: 24
|
|
||||||
ext_gateway: 185.193.143.1
|
|
||||||
ext_mac: 52:54:00:00:1a:24
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.basic import env_fallback
|
from ansible.module_utils.basic import env_fallback
|
||||||
from ansible.module_utils.decort_utils import *
|
from ansible.module_utils.decort_utils import *
|
||||||
|
|
||||||
|
|
||||||
class decort_kvmvm(DecortController):
|
class decort_kvmvm(DecortController):
|
||||||
def __init__(self, arg_amodule):
|
def __init__(self, arg_amodule):
|
||||||
# call superclass constructor first
|
# call superclass constructor first
|
||||||
@@ -420,6 +82,37 @@ class decort_kvmvm(DecortController):
|
|||||||
self.comp_should_exist = True
|
self.comp_should_exist = True
|
||||||
self.acc_id = self.comp_info['accountId']
|
self.acc_id = self.comp_info['accountId']
|
||||||
|
|
||||||
|
check_error = False
|
||||||
|
params_to_check = {
|
||||||
|
'chipset': 'chipset',
|
||||||
|
'cpu_pin': 'cpupin',
|
||||||
|
'hp_backed': 'hpBacked',
|
||||||
|
'numa_affinity': 'numaAffinity',
|
||||||
|
}
|
||||||
|
for param_name, comp_field_name in params_to_check.items():
|
||||||
|
if (
|
||||||
|
self.aparams[param_name] is not None
|
||||||
|
and self.comp_info[comp_field_name] != self.aparams[param_name]
|
||||||
|
and self.aparams['state'] not in ('halted', 'poweredoff')
|
||||||
|
):
|
||||||
|
self.message(
|
||||||
|
f'Cannot change "{param_name}" for compute '
|
||||||
|
f'{self.comp_id} if parameter "state" is not '
|
||||||
|
f'halted or poweredoff.'
|
||||||
|
)
|
||||||
|
check_error = True
|
||||||
|
|
||||||
|
if check_error:
|
||||||
|
self.exit(fail=True)
|
||||||
|
|
||||||
|
else:
|
||||||
|
if self.aparams['chipset'] is None:
|
||||||
|
self.message(
|
||||||
|
'Check for parameter "chipset" failed: '
|
||||||
|
'chipset must be specified for a new compute.'
|
||||||
|
)
|
||||||
|
self.exit(fail=True)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def check_amodule_args(self):
|
def check_amodule_args(self):
|
||||||
@@ -441,32 +134,15 @@ class decort_kvmvm(DecortController):
|
|||||||
)
|
)
|
||||||
self.exit(fail=True)
|
self.exit(fail=True)
|
||||||
|
|
||||||
# Check for unacceptable parameters for a blank Compute
|
aparam_custom_fields = self.aparams['custom_fields']
|
||||||
if (
|
if aparam_custom_fields is not None:
|
||||||
self.aparams['image_id'] is None
|
|
||||||
and self.aparams['image_name'] is None
|
|
||||||
):
|
|
||||||
for parameter in (
|
|
||||||
'ssh_key',
|
|
||||||
'ssh_key_user',
|
|
||||||
'ci_user_data',
|
|
||||||
):
|
|
||||||
if self.aparams[parameter] is not None:
|
|
||||||
self.message(
|
|
||||||
f'Check for parameter "{parameter}" failed: '
|
|
||||||
f'"image_id" or "image_name" must be specified '
|
|
||||||
f'to set {parameter}.'
|
|
||||||
)
|
|
||||||
self.exit(fail=True)
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
self.aparams['sep_id'] is not None
|
aparam_custom_fields['disable']
|
||||||
and self.aparams['boot_disk'] is None
|
and aparam_custom_fields['fields'] is not None
|
||||||
):
|
):
|
||||||
self.message(
|
self.message(
|
||||||
'Check for parameter "sep_id" failed: '
|
'Check for parameter "custom_fields" failed: '
|
||||||
'"image_id" or "image_name" or "boot_disk" '
|
'"fields" cannot be set if "disable" is True.'
|
||||||
'must be specified to set sep_id.'
|
|
||||||
)
|
)
|
||||||
self.exit(fail=True)
|
self.exit(fail=True)
|
||||||
|
|
||||||
@@ -579,13 +255,20 @@ class decort_kvmvm(DecortController):
|
|||||||
cloud_init_params = self.amodule.params['ci_user_data']
|
cloud_init_params = self.amodule.params['ci_user_data']
|
||||||
else:
|
else:
|
||||||
cloud_init_params = None
|
cloud_init_params = None
|
||||||
# if we get through here, all parameters required to create new Compute instance should be at hand
|
|
||||||
|
|
||||||
match self.amodule.params['chipset'].lower():
|
cpu_pin = self.aparams['cpu_pin']
|
||||||
case 'q35':
|
if cpu_pin is None:
|
||||||
chipset = 'Q35'
|
cpu_pin = False
|
||||||
case 'i440fx':
|
|
||||||
chipset = 'i440fx'
|
hp_backed = self.aparams['hp_backed']
|
||||||
|
if hp_backed is None:
|
||||||
|
hp_backed = False
|
||||||
|
|
||||||
|
numa_affinity = self.aparams['numa_affinity']
|
||||||
|
if numa_affinity is None:
|
||||||
|
numa_affinity = 'none'
|
||||||
|
|
||||||
|
# if we get through here, all parameters required to create new Compute instance should be at hand
|
||||||
|
|
||||||
# NOTE: KVM VM is created in HALTED state and must be explicitly started
|
# NOTE: KVM VM is created in HALTED state and must be explicitly started
|
||||||
self.comp_id = self.kvmvm_provision(rg_id=self.rg_id,
|
self.comp_id = self.kvmvm_provision(rg_id=self.rg_id,
|
||||||
@@ -593,12 +276,15 @@ class decort_kvmvm(DecortController):
|
|||||||
cpu=self.amodule.params['cpu'], ram=self.amodule.params['ram'],
|
cpu=self.amodule.params['cpu'], ram=self.amodule.params['ram'],
|
||||||
boot_disk=validated_bdisk_size,
|
boot_disk=validated_bdisk_size,
|
||||||
image_id=image_id,
|
image_id=image_id,
|
||||||
annotation=self.amodule.params['annotation'],
|
description=self.amodule.params['description'],
|
||||||
userdata=cloud_init_params,
|
userdata=cloud_init_params,
|
||||||
sep_id=self.amodule.params['sep_id' ] if "sep_id" in self.amodule.params else None,
|
sep_id=self.amodule.params['sep_id' ] if "sep_id" in self.amodule.params else None,
|
||||||
pool_name=self.amodule.params['pool'] if "pool" in self.amodule.params else None,
|
pool_name=self.amodule.params['pool'] if "pool" in self.amodule.params else None,
|
||||||
start_on_create=start_compute,
|
start_on_create=start_compute,
|
||||||
chipset=chipset)
|
chipset=self.amodule.params['chipset'],
|
||||||
|
cpu_pin=cpu_pin,
|
||||||
|
hp_backed=hp_backed,
|
||||||
|
numa_affinity=numa_affinity)
|
||||||
self.comp_should_exist = True
|
self.comp_should_exist = True
|
||||||
|
|
||||||
# Originally we would have had to re-read comp_info after VM was provisioned
|
# Originally we would have had to re-read comp_info after VM was provisioned
|
||||||
@@ -646,7 +332,19 @@ class decort_kvmvm(DecortController):
|
|||||||
# NOTE: see NOTE above regarding libvirt "feature" and new VMs created in HALTED state
|
# NOTE: see NOTE above regarding libvirt "feature" and new VMs created in HALTED state
|
||||||
if self.amodule.params['state'] not in ('halted', 'poweredoff'):
|
if self.amodule.params['state'] not in ('halted', 'poweredoff'):
|
||||||
self.compute_powerstate(self.comp_info, 'started')
|
self.compute_powerstate(self.comp_info, 'started')
|
||||||
|
|
||||||
|
if self.aparams['custom_fields'] is None:
|
||||||
|
custom_fields_disable = True
|
||||||
|
custom_fields_fields = None
|
||||||
|
else:
|
||||||
|
custom_fields_disable = self.aparams['custom_fields']['disable']
|
||||||
|
custom_fields_fields = self.aparams['custom_fields']['fields']
|
||||||
|
if not custom_fields_disable:
|
||||||
|
self.compute_set_custom_fields(
|
||||||
|
compute_id=self.comp_info['id'],
|
||||||
|
custom_fields=custom_fields_fields,
|
||||||
|
)
|
||||||
|
|
||||||
# read in Compute facts once more after all initial setup is complete
|
# read in Compute facts once more after all initial setup is complete
|
||||||
_, self.comp_info, _ = self.compute_find(comp_id=self.comp_id)
|
_, self.comp_info, _ = self.compute_find(comp_id=self.comp_id)
|
||||||
|
|
||||||
@@ -713,15 +411,42 @@ class decort_kvmvm(DecortController):
|
|||||||
**self.compute_update_args,
|
**self.compute_update_args,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
aparam_custom_fields = self.amodule.params['custom_fields']
|
||||||
|
if aparam_custom_fields is not None:
|
||||||
|
compute_custom_fields = self.comp_info['custom_fields']
|
||||||
|
if aparam_custom_fields['disable']:
|
||||||
|
if compute_custom_fields is not None:
|
||||||
|
self.compute_disable_custom_fields(
|
||||||
|
compute_id=self.comp_info['id'],
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
if compute_custom_fields != aparam_custom_fields['fields']:
|
||||||
|
self.compute_set_custom_fields(
|
||||||
|
compute_id=self.comp_info['id'],
|
||||||
|
custom_fields=aparam_custom_fields['fields'],
|
||||||
|
)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def compute_update_args(self) -> dict:
|
def compute_update_args(self) -> dict:
|
||||||
result_args = {}
|
result_args = {}
|
||||||
|
|
||||||
aparam_name = self.amodule.params['name']
|
params_to_check = {
|
||||||
if aparam_name is not None and aparam_name != self.comp_info['name']:
|
'name': 'name',
|
||||||
result_args['name'] = aparam_name
|
'chipset': 'chipset',
|
||||||
|
'cpu_pin': 'cpupin',
|
||||||
|
'hp_backed': 'hpBacked',
|
||||||
|
'numa_affinity': 'numaAffinity',
|
||||||
|
'description': 'desc',
|
||||||
|
}
|
||||||
|
for param_name, comp_field_name in params_to_check.items():
|
||||||
|
aparam_value = self.amodule.params[param_name]
|
||||||
|
if (
|
||||||
|
aparam_value is not None
|
||||||
|
and aparam_value != self.comp_info[comp_field_name]
|
||||||
|
):
|
||||||
|
result_args[param_name] = aparam_value
|
||||||
|
|
||||||
return result_args
|
return result_args
|
||||||
|
|
||||||
@@ -756,6 +481,10 @@ class decort_kvmvm(DecortController):
|
|||||||
tags={},
|
tags={},
|
||||||
chipset="",
|
chipset="",
|
||||||
interfaces=[],
|
interfaces=[],
|
||||||
|
cpu_pin="",
|
||||||
|
hp_backed="",
|
||||||
|
numa_affinity="",
|
||||||
|
custom_fields={},
|
||||||
)
|
)
|
||||||
|
|
||||||
if check_mode or self.comp_info is None:
|
if check_mode or self.comp_info is None:
|
||||||
@@ -812,8 +541,44 @@ class decort_kvmvm(DecortController):
|
|||||||
|
|
||||||
ret_dict['interfaces'] = self.comp_info['interfaces']
|
ret_dict['interfaces'] = self.comp_info['interfaces']
|
||||||
|
|
||||||
|
ret_dict['cpu_pin'] = self.comp_info['cpupin']
|
||||||
|
ret_dict['hp_backed'] = self.comp_info['hpBacked']
|
||||||
|
ret_dict['numa_affinity'] = self.comp_info['numaAffinity']
|
||||||
|
|
||||||
|
ret_dict['custom_fields'] = self.comp_info['custom_fields']
|
||||||
|
|
||||||
return ret_dict
|
return ret_dict
|
||||||
|
|
||||||
|
def check_amodule_args_for_create(self):
|
||||||
|
# Check for unacceptable parameters for a blank Compute
|
||||||
|
if (
|
||||||
|
self.aparams['image_id'] is None
|
||||||
|
and self.aparams['image_name'] is None
|
||||||
|
):
|
||||||
|
for parameter in (
|
||||||
|
'ssh_key',
|
||||||
|
'ssh_key_user',
|
||||||
|
'ci_user_data',
|
||||||
|
):
|
||||||
|
if self.aparams[parameter] is not None:
|
||||||
|
self.message(
|
||||||
|
f'Check for parameter "{parameter}" failed: '
|
||||||
|
f'"image_id" or "image_name" must be specified '
|
||||||
|
f'to set {parameter}.'
|
||||||
|
)
|
||||||
|
self.exit(fail=True)
|
||||||
|
|
||||||
|
if (
|
||||||
|
self.aparams['sep_id'] is not None
|
||||||
|
and self.aparams['boot_disk'] is None
|
||||||
|
):
|
||||||
|
self.message(
|
||||||
|
'Check for parameter "sep_id" failed: '
|
||||||
|
'"image_id" or "image_name" or "boot_disk" '
|
||||||
|
'must be specified to set sep_id.'
|
||||||
|
)
|
||||||
|
self.exit(fail=True)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def build_parameters():
|
def build_parameters():
|
||||||
"""Build and return a dictionary of parameters expected by decort_kvmvm module in a form
|
"""Build and return a dictionary of parameters expected by decort_kvmvm module in a form
|
||||||
@@ -825,9 +590,7 @@ class decort_kvmvm(DecortController):
|
|||||||
return dict(
|
return dict(
|
||||||
account_id=dict(type='int', required=False, default=0),
|
account_id=dict(type='int', required=False, default=0),
|
||||||
account_name=dict(type='str', required=False, default=''),
|
account_name=dict(type='str', required=False, default=''),
|
||||||
annotation=dict(type='str',
|
description=dict(type='str', required=False),
|
||||||
default='',
|
|
||||||
required=False),
|
|
||||||
app_id=dict(type='str',
|
app_id=dict(type='str',
|
||||||
required=False,
|
required=False,
|
||||||
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
||||||
@@ -917,10 +680,52 @@ class decort_kvmvm(DecortController):
|
|||||||
workflow_context=dict(type='str', required=False),
|
workflow_context=dict(type='str', required=False),
|
||||||
chipset=dict(
|
chipset=dict(
|
||||||
type='str',
|
type='str',
|
||||||
default='i440fx',
|
choices=['Q35', 'i440fx']
|
||||||
choices=['Q35', 'q35', 'I440FX', 'i440fx']
|
),
|
||||||
|
cpu_pin=dict(
|
||||||
|
type='bool',
|
||||||
|
),
|
||||||
|
hp_backed=dict(
|
||||||
|
type='bool',
|
||||||
|
),
|
||||||
|
numa_affinity=dict(
|
||||||
|
type='str',
|
||||||
|
choices=['strict', 'loose', 'none'],
|
||||||
|
),
|
||||||
|
custom_fields=dict(
|
||||||
|
type='dict',
|
||||||
|
options=dict(
|
||||||
|
fields=dict(
|
||||||
|
type='dict',
|
||||||
|
),
|
||||||
|
disable=dict(
|
||||||
|
type='bool',
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def check_amodule_args_for_change(self):
|
||||||
|
new_boot_disk_size = self.amodule.params['boot_disk']
|
||||||
|
if new_boot_disk_size is not None:
|
||||||
|
for disk in self.comp_info['disks']:
|
||||||
|
if disk['type'] == 'B':
|
||||||
|
boot_disk_size = disk['sizeMax']
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.message(
|
||||||
|
f'Can\'t set boot disk size for Compute '
|
||||||
|
f'{self.comp_info["id"]}, because it doesn\'t have a '
|
||||||
|
f'boot disk.'
|
||||||
|
)
|
||||||
|
self.exit(fail=True)
|
||||||
|
if new_boot_disk_size < boot_disk_size:
|
||||||
|
self.message(
|
||||||
|
f'New boot disk size {new_boot_disk_size} is less than '
|
||||||
|
f'current {boot_disk_size} for Compute ID '
|
||||||
|
f'{self.comp_info["id"]}'
|
||||||
|
)
|
||||||
|
self.exit(fail=True)
|
||||||
|
|
||||||
# Workflow digest:
|
# Workflow digest:
|
||||||
# 1) authenticate to DECORT controller & validate authentication by issuing API call - done when creating DECSController
|
# 1) authenticate to DECORT controller & validate authentication by issuing API call - done when creating DECSController
|
||||||
@@ -980,6 +785,8 @@ def main():
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
if subj.comp_id:
|
if subj.comp_id:
|
||||||
|
subj.check_amodule_args_for_change()
|
||||||
|
|
||||||
if subj.comp_info['status'] in ("DISABLED", "MIGRATING", "DELETING", "DESTROYING", "ERROR", "REDEPLOYING"):
|
if subj.comp_info['status'] in ("DISABLED", "MIGRATING", "DELETING", "DESTROYING", "ERROR", "REDEPLOYING"):
|
||||||
# cannot do anything on the existing Compute in the listed states
|
# cannot do anything on the existing Compute in the listed states
|
||||||
subj.error() # was subj.nop()
|
subj.error() # was subj.nop()
|
||||||
@@ -1011,6 +818,8 @@ def main():
|
|||||||
elif amodule.params['state'] == 'paused':
|
elif amodule.params['state'] == 'paused':
|
||||||
subj.error()
|
subj.error()
|
||||||
else:
|
else:
|
||||||
|
subj.check_amodule_args_for_create()
|
||||||
|
|
||||||
# Preexisting Compute of specified identity was not found.
|
# Preexisting Compute of specified identity was not found.
|
||||||
# If requested state is 'absent' - nothing to do
|
# If requested state is 'absent' - nothing to do
|
||||||
if amodule.params['state'] == 'absent':
|
if amodule.params['state'] == 'absent':
|
||||||
|
|||||||
@@ -1,28 +1,17 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2023 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
DOCUMENTATION = r'''
|
||||||
'status': ['preview'],
|
---
|
||||||
'supported_by': 'community'}
|
module: decort_lb
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
TODO
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
TODO
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.basic import env_fallback
|
from ansible.module_utils.basic import env_fallback
|
||||||
from ansible.module_utils.decort_utils import *
|
from ansible.module_utils.decort_utils import *
|
||||||
|
|
||||||
|
|
||||||
class decort_lb(DecortController):
|
class decort_lb(DecortController):
|
||||||
def __init__(self,arg_amodule) -> None:
|
def __init__(self,arg_amodule) -> None:
|
||||||
super(decort_lb,self).__init__(arg_amodule)
|
super(decort_lb,self).__init__(arg_amodule)
|
||||||
@@ -113,7 +102,7 @@ class decort_lb(DecortController):
|
|||||||
self.rg_id,self.vins_id,
|
self.rg_id,self.vins_id,
|
||||||
self.amodule.params['ext_net_id'],
|
self.amodule.params['ext_net_id'],
|
||||||
self.amodule.params['ha_lb'],
|
self.amodule.params['ha_lb'],
|
||||||
self.amodule.params['annotation'])
|
self.amodule.params['description'])
|
||||||
if self.lb_id and (self.amodule.params['backends'] or
|
if self.lb_id and (self.amodule.params['backends'] or
|
||||||
self.amodule.params['frontends']):
|
self.amodule.params['frontends']):
|
||||||
self.lb_id, self.lb_facts = self.lb_find(0,self.amodule.params['lb_name'],self.rg_id)
|
self.lb_id, self.lb_facts = self.lb_find(0,self.amodule.params['lb_name'],self.rg_id)
|
||||||
@@ -235,7 +224,7 @@ class decort_lb(DecortController):
|
|||||||
return dict(
|
return dict(
|
||||||
account_id=dict(type='int', required=False),
|
account_id=dict(type='int', required=False),
|
||||||
account_name=dict(type='str', required=False, default=''),
|
account_name=dict(type='str', required=False, default=''),
|
||||||
annotation=dict(type='str', required=False, default='Managed by Ansible module decort_lb'),
|
description=dict(type='str', required=False, default='Managed by Ansible module decort_lb'),
|
||||||
app_id=dict(type='str',
|
app_id=dict(type='str',
|
||||||
required=False,
|
required=False,
|
||||||
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
||||||
|
|||||||
@@ -1,285 +1,10 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2021 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
DOCUMENTATION = r'''
|
||||||
# Author: Sergey Shubin (sergey.shubin@digitalenergy.online)
|
|
||||||
#
|
|
||||||
|
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
|
||||||
'status': ['preview'],
|
|
||||||
'supported_by': 'community'}
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
---
|
||||||
module: decort_osimage
|
module: decort_osimage
|
||||||
short_description: Locate OS image in DCORT cloud by its name and return image ID
|
|
||||||
description: >
|
|
||||||
This module can be used to obtain image ID of an OS image in DECORT cloud to use with subsequent calls to
|
|
||||||
decort_vm module for batch VM provisioning. It will speed up VM creation and save a bunch of extra calls to
|
|
||||||
DECORT cloud controller on each VM creation act.
|
|
||||||
|
|
||||||
version_added: "2.2"
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
author:
|
|
||||||
- Sergey Shubin <sergey.shubin@digitalenergy.online>
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- PyJWT Python module
|
|
||||||
- requests Python module
|
|
||||||
- netaddr Python module
|
|
||||||
- decort_utils utility library (module)
|
|
||||||
- DECORT cloud platform version 3.6.1 or higher.
|
|
||||||
notes:
|
|
||||||
- Environment variables can be used to pass selected parameters to the module, see details below.
|
|
||||||
- Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used.
|
|
||||||
- 'Similarly, JWT supplied in I(authenticator=jwt) mode should be received from Oauth2 provider trusted by
|
|
||||||
the DECORT cloud controller on which this JWT will be used.'
|
|
||||||
options:
|
|
||||||
app_id:
|
|
||||||
description:
|
|
||||||
- 'Application ID for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- 'Required if I(authenticator=oauth2).'
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_ID
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
app_secret:
|
|
||||||
description:
|
|
||||||
- 'Application API secret used for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- This parameter is required when I(authenticator=oauth2) and ignored in other modes.
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_SECRET
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
authenticator:
|
|
||||||
description:
|
|
||||||
- Authentication mechanism to be used when accessing DECORT controller and authorizing API call.
|
|
||||||
default: jwt
|
|
||||||
choices: [ jwt, oauth2, legacy ]
|
|
||||||
required: yes
|
|
||||||
controller_url:
|
|
||||||
description:
|
|
||||||
- URL of the DECORT controller that will be contacted to obtain OS image details.
|
|
||||||
- 'This parameter is always required regardless of the specified I(authenticator) type.'
|
|
||||||
required: yes
|
|
||||||
image_name:
|
|
||||||
description:
|
|
||||||
- Name of the OS image to use. Module will return the ID of this image.
|
|
||||||
- 'The specified image name will be looked up in the target DECORT controller and error will be generated
|
|
||||||
- if no matching image is found.'
|
|
||||||
required: yes
|
|
||||||
jwt:
|
|
||||||
description:
|
|
||||||
- 'JWT (access token) for authenticating to the DECORT controller when I(authenticator=jwt).'
|
|
||||||
- 'This parameter is required if I(authenticator=jwt) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_JWT environment variable.
|
|
||||||
required: no
|
|
||||||
oauth2_url:
|
|
||||||
description:
|
|
||||||
- 'URL of the oauth2 authentication provider to use when I(authenticator=oauth2).'
|
|
||||||
- 'This parameter is required when when I(authenticator=oauth2).'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_OAUTH2_URL environment variable.
|
|
||||||
password:
|
|
||||||
description:
|
|
||||||
- 'Password for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required if I(authenticator=legacy) and ignored in other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_PASSWORD environment variable.
|
|
||||||
required: no
|
|
||||||
pool:
|
|
||||||
description:
|
|
||||||
- 'Name of the storage pool, where the image should be found.'
|
|
||||||
- 'Omit this option if no matching by pool name is required. The first matching image will be returned."
|
|
||||||
required: no
|
|
||||||
sep_id:
|
|
||||||
description:
|
|
||||||
- 'ID of the SEP (Storage End-point Provider), where the image should be found.'
|
|
||||||
- 'Omit this option if no matching by SEP ID is required. The first matching image will be returned."
|
|
||||||
required: no
|
|
||||||
account_name:
|
|
||||||
description:
|
|
||||||
- 'Name of the account for which the specified OS image will be looked up.'
|
|
||||||
- 'This parameter is required for listing OS images.'
|
|
||||||
required: yes
|
|
||||||
user:
|
|
||||||
description:
|
|
||||||
- 'Name of the legacy user for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required when I(authenticator=legacy) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_USER environment variable.
|
|
||||||
required: no
|
|
||||||
verify_ssl:
|
|
||||||
description:
|
|
||||||
- 'Controls SSL verification mode when making API calls to DECORT controller. Set it to False if you
|
|
||||||
want to disable SSL certificate verification. Intended use case is when you run module in a trusted
|
|
||||||
environment that uses self-signed certificates. Note that disabling SSL verification in any other
|
|
||||||
scenario can lead to security issues, so please know what you are doing.'
|
|
||||||
default: True
|
|
||||||
required: no
|
|
||||||
workflow_callback:
|
|
||||||
description:
|
|
||||||
- 'Callback URL that represents an application, which invokes this module (e.g. up-level orchestrator or
|
|
||||||
end-user portal) and may except out-of-band updates on progress / exit status of the module run.'
|
|
||||||
- API call at this URL will be used to relay such information to the application.
|
|
||||||
- 'API call payload will include module-specific details about this module run and I(workflow_context).'
|
|
||||||
required: no
|
|
||||||
workflow_context:
|
|
||||||
description:
|
|
||||||
- 'Context data that will be included into the payload of the API call directed at I(workflow_callback) URL.'
|
|
||||||
- 'This context data is expected to uniquely identify the task carried out by this module invocation so
|
|
||||||
that up-level orchestrator could match returned information to the its internal entities.'
|
|
||||||
required: no
|
|
||||||
account_name:
|
|
||||||
description:
|
|
||||||
- 'Account name. Used to get a unique integer account ID.'
|
|
||||||
required: no
|
|
||||||
virt_id:
|
|
||||||
description:
|
|
||||||
- 'A unique integer identifier for the virtual image.'
|
|
||||||
- 'Can be used to obtain information about a virtual image, as well as to create a virtual image and
|
|
||||||
- bind another operating system image to it.'
|
|
||||||
required: no
|
|
||||||
virt_name:
|
|
||||||
description:
|
|
||||||
- 'Name of the virtual image. Used to get the `virt_id`, and later information about the virtual image,
|
|
||||||
- as well as to create a virtual image and bind another operating system image to it.'
|
|
||||||
required: no
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- 'The state of the images. If set to present, operating system images will be created to which
|
|
||||||
- the account specified in `account_Id` or `account_name` is bound. If set to absent, they will be removed.
|
|
||||||
required: no
|
|
||||||
drivers:
|
|
||||||
description:
|
|
||||||
- 'A list of compute types (eg virtual servers) that are appropriate for the operating system image.
|
|
||||||
- Note: `KVM_X86`. Used when creating an operating system image.'
|
|
||||||
required: no
|
|
||||||
architecture:
|
|
||||||
description:
|
|
||||||
- 'Binary architecture of the image. Note. `X86_64`. Used when creating
|
|
||||||
-an operating system image.'
|
|
||||||
required: no
|
|
||||||
imagetype:
|
|
||||||
description:
|
|
||||||
- 'Image type. `linux`, `windows` or `other`. The default is `linux`. Used when creating
|
|
||||||
- an operating system image.'
|
|
||||||
required: no
|
|
||||||
boottype:
|
|
||||||
description:
|
|
||||||
- 'Image upload type. `bios` or `uefi`. The default is `uefi`. Used when creating an operating
|
|
||||||
-system image.'
|
|
||||||
required: no
|
|
||||||
url:
|
|
||||||
description:
|
|
||||||
- 'Uniform resource locator (URL) pointing to the iso image of the operating system. Used when
|
|
||||||
-creating an operating system image.'
|
|
||||||
required: no
|
|
||||||
sepId:
|
|
||||||
description:
|
|
||||||
- 'The unique integer ID of the storage provider endpoint. Specified in pair with `poolName`.
|
|
||||||
- Used when creating an operating system image.'
|
|
||||||
required: no
|
|
||||||
poolName:
|
|
||||||
description:
|
|
||||||
- 'The pool in which the image will be created. Specified in pair with `sepId`. Used when creating
|
|
||||||
- an operating system image.'
|
|
||||||
required: no
|
|
||||||
hotresize:
|
|
||||||
description:
|
|
||||||
- 'Whether the image supports "hot" resizing. The default is `false`. Used when creating an operating
|
|
||||||
- system image.'
|
|
||||||
required: no
|
|
||||||
image_username:
|
|
||||||
description:
|
|
||||||
- 'An optional username for the image. Used when creating an operating system image.'
|
|
||||||
required: no
|
|
||||||
image_password:
|
|
||||||
description:
|
|
||||||
- 'An optional password for the image. Used when creating an operating system image. Used when creating
|
|
||||||
- an operating system image.'
|
|
||||||
required: no
|
|
||||||
usernameDL:
|
|
||||||
description:
|
|
||||||
- 'The username for loading the binary media. Used in conjunction with `passwordDL`. Used when creating
|
|
||||||
- an operating system image'
|
|
||||||
required: no
|
|
||||||
passwordDL:
|
|
||||||
description:
|
|
||||||
- 'The password for loading the binary media. Used in conjunction with `usernameDL`. Used when creating
|
|
||||||
- an operating system image.'
|
|
||||||
required: no
|
|
||||||
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: create_osimage
|
|
||||||
decort_osimage:
|
|
||||||
authenticator: oauth2
|
|
||||||
verify_ssl: False
|
|
||||||
controller_url: "https://ds1.digitalenergy.online"
|
|
||||||
state: present
|
|
||||||
image_name: "alpine_linux3.14.0"
|
|
||||||
account_Id: 12345
|
|
||||||
url: "https://dl-cdn.alpinelinux.org/alpine/v3.14/releases/x86_64/alpine-virt-3.14.0-x86_64.iso"
|
|
||||||
boottype: "uefi"
|
|
||||||
imagetype: "linux"
|
|
||||||
hotresize: False
|
|
||||||
image_username: "test"
|
|
||||||
image_password: "p@ssw0rd"
|
|
||||||
usernameDL: "testDL"
|
|
||||||
passwordDL: "p@ssw0rdDL"
|
|
||||||
architecture: "X86_64"
|
|
||||||
drivers: "KVM_X86"
|
|
||||||
delegate_to: localhost
|
|
||||||
register: osimage
|
|
||||||
|
|
||||||
- name: get_osimage
|
|
||||||
decort_osimage:
|
|
||||||
authenticator: oauth2
|
|
||||||
controller_url: "https://ds1.digitalenergy.online"
|
|
||||||
image_name: "alpine_linux_3.14.0"
|
|
||||||
account_Id: 12345
|
|
||||||
delegate_to: localhost
|
|
||||||
register: osimage
|
|
||||||
|
|
||||||
- name: create_virtual_osimage
|
|
||||||
decort_osimage:
|
|
||||||
authenticator: oauth2
|
|
||||||
controller_url: "https://ds1.digitalenergy.online"
|
|
||||||
image_name: "alpine_linux_3.14.0"
|
|
||||||
virt_name: "alpine_last"
|
|
||||||
delegate_to: localhost
|
|
||||||
register: osimage
|
|
||||||
|
|
||||||
- name: rename_osimage
|
|
||||||
decort_osimage:
|
|
||||||
authenticator: oauth2
|
|
||||||
controller_url: "https://ds1.digitalenergy.online"
|
|
||||||
image_name: "alpine_linux_3.14.0v2.0"
|
|
||||||
image_id: 54321
|
|
||||||
delegate_to: localhost
|
|
||||||
register: osimage
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
facts:
|
|
||||||
description: facts about the specified OS image
|
|
||||||
returned: always
|
|
||||||
type: dict
|
|
||||||
sample:
|
|
||||||
facts:
|
|
||||||
id: 100
|
|
||||||
linkto: 80
|
|
||||||
name: "Ubuntu 16.04 v1.0"
|
|
||||||
size: 3
|
|
||||||
sep_id: 1
|
|
||||||
pool: "vmstore"
|
|
||||||
type: Linux
|
|
||||||
arch: x86_64
|
|
||||||
state: CREATED
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
@@ -287,6 +12,7 @@ from ansible.module_utils.basic import env_fallback
|
|||||||
|
|
||||||
from ansible.module_utils.decort_utils import *
|
from ansible.module_utils.decort_utils import *
|
||||||
|
|
||||||
|
|
||||||
class decort_osimage(DecortController):
|
class decort_osimage(DecortController):
|
||||||
def __init__(self,amodule):
|
def __init__(self,amodule):
|
||||||
super(decort_osimage, self).__init__(amodule)
|
super(decort_osimage, self).__init__(amodule)
|
||||||
|
|||||||
@@ -1,180 +1,10 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2021 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
DOCUMENTATION = r'''
|
||||||
# Author: Sergey Shubin (sergey.shubin@digitalenergy.online)
|
|
||||||
#
|
|
||||||
|
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
|
||||||
'status': ['preview'],
|
|
||||||
'supported_by': 'community'}
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
---
|
||||||
module: decort_pfw
|
module: decort_pfw
|
||||||
short_description: Manage network Port Forward rules for Compute instances in DECORT cloud
|
|
||||||
description: >
|
|
||||||
This module can be used to create new port forwarding rules in DECORT cloud platform,
|
|
||||||
modify and delete them.
|
|
||||||
version_added: "2.2"
|
|
||||||
author:
|
|
||||||
- Sergey Shubin <sergey.shubin@digitalenergy.online>
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- PyJWT Python module
|
|
||||||
- requests Python module
|
|
||||||
- netaddr Python module
|
|
||||||
- decort_utils utility library (module)
|
|
||||||
- DECORT cloud platform version 3.6.1 or higher
|
|
||||||
notes:
|
|
||||||
- Environment variables can be used to pass selected parameters to the module, see details below.
|
|
||||||
- Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used.
|
|
||||||
- 'Similarly, JWT supplied in I(authenticator=jwt) mode should be received from Oauth2 provider trusted by
|
|
||||||
the DECORT cloud controller on which this JWT will be used.'
|
|
||||||
options:
|
|
||||||
account_id:
|
|
||||||
description:
|
|
||||||
- ID of the account, which owns this disk. This is the alternative to I(account_name) option.
|
|
||||||
- If both I(account_id) and I(account_name) specified, then I(account_name) is ignored.
|
|
||||||
default: 0
|
|
||||||
required: no
|
|
||||||
account_name:
|
|
||||||
description:
|
|
||||||
- 'Name of the account, which will own this disk.'
|
|
||||||
- 'This parameter is ignored if I(account_id) is specified.'
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
app_id:
|
|
||||||
description:
|
|
||||||
- 'Application ID for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- 'Required if I(authenticator=oauth2).'
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_ID
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
app_secret:
|
|
||||||
description:
|
|
||||||
- 'Application API secret used for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- This parameter is required when I(authenticator=oauth2) and ignored in other modes.
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_SECRET
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
authenticator:
|
|
||||||
description:
|
|
||||||
- Authentication mechanism to be used when accessing DECORT controller and authorizing API call.
|
|
||||||
default: jwt
|
|
||||||
choices: [ jwt, oauth2, legacy ]
|
|
||||||
required: yes
|
|
||||||
controller_url:
|
|
||||||
description:
|
|
||||||
- URL of the DECORT controller that will be contacted to manage the RG according to the specification.
|
|
||||||
- 'This parameter is always required regardless of the specified I(authenticator) type.'
|
|
||||||
required: yes
|
|
||||||
compute_id:
|
|
||||||
description:
|
|
||||||
- ID of the Compute instance to manage network port forwarding rules for.
|
|
||||||
required: yes
|
|
||||||
jwt:
|
|
||||||
description:
|
|
||||||
- 'JWT (access token) for authenticating to the DECORT controller when I(authenticator=jwt).'
|
|
||||||
- 'This parameter is required if I(authenticator=jwt) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_JWT environment variable.
|
|
||||||
required: no
|
|
||||||
oauth2_url:
|
|
||||||
description:
|
|
||||||
- 'URL of the oauth2 authentication provider to use when I(authenticator=oauth2).'
|
|
||||||
- 'This parameter is required when when I(authenticator=oauth2).'
|
|
||||||
- 'If not specified in the playbook, the value will be taken from DECORT_OAUTH2_URL environment variable.'
|
|
||||||
password:
|
|
||||||
description:
|
|
||||||
- 'Password for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required if I(authenticator=legacy) and ignored in other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_PASSWORD environment variable.
|
|
||||||
required: no
|
|
||||||
rules:
|
|
||||||
description:
|
|
||||||
- 'Set of rules to configure for the Compute instance identidied by I(compute_id) in the virtual
|
|
||||||
network segment identidied by I(vins_id).'
|
|
||||||
- The set is specified as a list of dictionaries with the following structure:
|
|
||||||
- ' - (int) public_port_start - starting port number on the ViNS external interface.'
|
|
||||||
- ' - (int) public_port_end - optional end port number of the ViNS external interface. If not specified
|
|
||||||
or set equal to I(public_port_start), a one-to-one rule is created. Otherwise a ranged rule will
|
|
||||||
be created, which maps specified external port range to local ports starting from I(local_port).'
|
|
||||||
- ' - (int) local_port - port number on the local interface of the Compute. For ranged rule it is
|
|
||||||
interpreted as a base port to translate public port range to internal port range.'
|
|
||||||
- ' - (string) proto - protocol, specify either I(tcp) or I(udp).'
|
|
||||||
- 'Note that rules are meaningful only if I(state=present). If I(state=absent) is specified, rules set
|
|
||||||
will be ignored, and all rules for the specified Compute will be deleted.'
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- 'Specify the desired state of the port forwarding rules set for the Compute instance identified by
|
|
||||||
I(compute_id).'
|
|
||||||
- 'If I(state=present), the rules will be applied according to the I(rules) parameter.'
|
|
||||||
- 'If I(state=absent), all rules for the specified Compute instance will be deleted regardless of
|
|
||||||
I(rules) parameter.'
|
|
||||||
default: present
|
|
||||||
choices: [ absent, present ]
|
|
||||||
verify_ssl:
|
|
||||||
description:
|
|
||||||
- 'Controls SSL verification mode when making API calls to DECORT controller. Set it to False if you
|
|
||||||
want to disable SSL certificate verification. Intended use case is when you run module in a trusted
|
|
||||||
environment that uses self-signed certificates. Note that disabling SSL verification in any other
|
|
||||||
scenario can lead to security issues, so please know what you are doing.'
|
|
||||||
default: True
|
|
||||||
required: no
|
|
||||||
vins_id:
|
|
||||||
description:
|
|
||||||
- ID of the virtual network segment (ViNS), where port forwarding rules will be set up.
|
|
||||||
- This ViNS must have connection to external network.
|
|
||||||
- Compute instance specified by I(compute_id) must be connected to this ViNS.
|
|
||||||
workflow_callback:
|
|
||||||
description:
|
|
||||||
- 'Callback URL that represents an application, which invokes this module (e.g. up-level orchestrator or
|
|
||||||
end-user portal) and may except out-of-band updates on progress / exit status of the module run.'
|
|
||||||
- API call at this URL will be used to relay such information to the application.
|
|
||||||
- 'API call payload will include module-specific details about this module run and I(workflow_context).'
|
|
||||||
required: no
|
|
||||||
workflow_context:
|
|
||||||
description:
|
|
||||||
- 'Context data that will be included into the payload of the API call directed at I(workflow_callback) URL.'
|
|
||||||
- 'This context data is expected to uniquely identify the task carried out by this module invocation so
|
|
||||||
that up-level orchestrator could match returned information to the its internal entities.'
|
|
||||||
required: no
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
- name: configure one-toone rule for SSH protocol on Compute ID 100 connected to ViNS ID 5.
|
|
||||||
decort_pfw:
|
|
||||||
authenticator: oauth2
|
|
||||||
app_id: "{{ MY_APP_ID }}"
|
|
||||||
app_secret: "{{ MY_APP_SECRET }}"
|
|
||||||
controller_url: "https://cloud.digitalenergy.online"
|
|
||||||
compute_id: 100
|
|
||||||
vins_id: 5
|
|
||||||
rules:
|
|
||||||
- public_port_start: 10022
|
|
||||||
local_port: 22
|
|
||||||
proto: tcp
|
|
||||||
state: present
|
|
||||||
delegate_to: localhost
|
|
||||||
register: my_pfw
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
facts:
|
|
||||||
description: facts about created PFW rules
|
|
||||||
returned: always
|
|
||||||
type: dict
|
|
||||||
sample:
|
|
||||||
facts:
|
|
||||||
compute_id: 100
|
|
||||||
vins_id: 5
|
|
||||||
rules:
|
|
||||||
-
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
|
|||||||
@@ -1,207 +1,10 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2021 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
DOCUMENTATION = r'''
|
||||||
# Author: Sergey Shubin (sergey.shubin@digitalenergy.online)
|
|
||||||
#
|
|
||||||
|
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
|
||||||
'status': ['preview'],
|
|
||||||
'supported_by': 'community'}
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
---
|
||||||
module: decort_rg
|
module: decort_rg
|
||||||
short_description: Manage resource groups (RGs) in DECORT cloud
|
|
||||||
description: >
|
|
||||||
This module can be used to create a new resource group in DECORT cloud platform, modify its
|
|
||||||
characteristics, and delete it.
|
|
||||||
version_added: "2.2"
|
|
||||||
author:
|
|
||||||
- Sergey Shubin <sergey.shubin@digitalenergy.online>
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- PyJWT Python module
|
|
||||||
- requests Python module
|
|
||||||
- netaddr Python module
|
|
||||||
- decort_utils utility library (module)
|
|
||||||
- DECORT cloud platform version 3.6.1 or higher
|
|
||||||
notes:
|
|
||||||
- Environment variables can be used to pass selected parameters to the module, see details below.
|
|
||||||
- Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used.
|
|
||||||
- 'Similarly, JWT supplied in I(authenticator=jwt) mode should be received from Oauth2 provider trusted by
|
|
||||||
the DECORT cloud controller on which this JWT will be used.'
|
|
||||||
- New RGs provisioned with this module will be deployed to the first location under specified DECORT
|
|
||||||
controller (if there is more than one location).
|
|
||||||
options:
|
|
||||||
account_id:
|
|
||||||
description:
|
|
||||||
- ID of the account under which this RG will be created. This is the alternative to I(account_name)
|
|
||||||
option. If both I(account_id) and I(account_name) specified, the latter is ignored.
|
|
||||||
account_name:
|
|
||||||
description:
|
|
||||||
- 'Name of the account under which this RG will be created (for new RGs) or is located.'
|
|
||||||
- 'This parameter is ignored if I(account_id) is specified.'
|
|
||||||
required: no
|
|
||||||
annotation:
|
|
||||||
description:
|
|
||||||
- Optional text description of this resource group.
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
app_id:
|
|
||||||
description:
|
|
||||||
- 'Application ID for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- 'Required if I(authenticator=oauth2).'
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_ID
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
app_secret:
|
|
||||||
description:
|
|
||||||
- 'Application API secret used for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- This parameter is required when I(authenticator=oauth2) and ignored in other modes.
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_SECRET
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
authenticator:
|
|
||||||
description:
|
|
||||||
- Authentication mechanism to be used when accessing DECORT controller and authorizing API call.
|
|
||||||
default: jwt
|
|
||||||
choices: [ jwt, oauth2, legacy ]
|
|
||||||
required: yes
|
|
||||||
controller_url:
|
|
||||||
description:
|
|
||||||
- URL of the DECORT controller that will be contacted to manage the RG according to the specification.
|
|
||||||
- 'This parameter is always required regardless of the specified I(authenticator) type.'
|
|
||||||
required: yes
|
|
||||||
jwt:
|
|
||||||
description:
|
|
||||||
- 'JWT (access token) for authenticating to the DECORT controller when I(authenticator=jwt).'
|
|
||||||
- 'This parameter is required if I(authenticator=jwt) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_JWT environment variable.
|
|
||||||
required: no
|
|
||||||
oauth2_url:
|
|
||||||
description:
|
|
||||||
- 'URL of the oauth2 authentication provider to use when I(authenticator=oauth2).'
|
|
||||||
- 'This parameter is required when when I(authenticator=oauth2).'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_OAUTH2_URL environment variable.
|
|
||||||
password:
|
|
||||||
description:
|
|
||||||
- 'Password for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required if I(authenticator=legacy) and ignored in other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_PASSWORD environment variable.
|
|
||||||
required: no
|
|
||||||
quotas:
|
|
||||||
description:
|
|
||||||
- Dictionary that defines resource quotas to be set on a newly created RG.
|
|
||||||
- 'This parameter is optional and only used when creating new RG. It is ignored for any operations on an
|
|
||||||
existing RG.'
|
|
||||||
- 'The following keys are valid to set the resource quotas:'
|
|
||||||
- ' - I(cpu) (integer) - limit on the total number of CPUs that can be consumed by all compute instances
|
|
||||||
in this RG.'
|
|
||||||
- ' - I(ram) (integer) - limit on the total amount of RAM in GB that can be consumed by compute instances
|
|
||||||
in this RG.'
|
|
||||||
- ' - I(disk) (integer) - limit on the total volume of disk space in GB that can be consumed by all
|
|
||||||
compute instances in this RG.'
|
|
||||||
- ' - I(ext_ips) (integer) - maximum number of external IP addresses that can be allocated to the compute
|
|
||||||
instances and virtual network segments (ViNS) in this RG.'
|
|
||||||
- 'Each of the above keys is optional. For example, you may specify I(cpu) and I(ram) while omitting the
|
|
||||||
other two keys. Then the quotas will be set on RAM and CPU leaving disk volume and the number of external
|
|
||||||
IP addresses unlimited.'
|
|
||||||
required: no
|
|
||||||
rg_name:
|
|
||||||
description:
|
|
||||||
- Name of the RG to manage.
|
|
||||||
required: yes
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Specify the desired state of the resource group at the exit of the module.
|
|
||||||
- 'Regardless of I(state), if RG exists and is in one of [DEPLOYING, DESTROYING, MIGRATING, ] states,
|
|
||||||
do nothing.'
|
|
||||||
- 'If desired I(state=present):'
|
|
||||||
- ' - RG does not exist or is in DESTROYED state, create new RG according to the specifications.'
|
|
||||||
- ' - RG is in one of [CREATED, DISABLED] states, change quotas if necessary.'
|
|
||||||
- ' - RG is in DELETED state, restore it and change quotas if necessary. RG will be left in DISABLED state.'
|
|
||||||
- ' - RG in any other state, abort with an error.'
|
|
||||||
- 'If desired I(state=enabled):'
|
|
||||||
- ' - RG does not exist or is in DESTROYED state, create new RG according to the specifications.'
|
|
||||||
- ' - RG is in CREATED state, change quotas if necessary.'
|
|
||||||
- ' - RG is in DELETED state, restore it, change quotas if necessary and enable.'
|
|
||||||
- ' - RG is in any other state, abort with an error.'
|
|
||||||
- 'If desired I(state=absent):'
|
|
||||||
- ' - RG is in one of [CREATED, DISABLED, DELETED] states, destroy it.'
|
|
||||||
- ' - RG in DESTROYED state, do nothing.'
|
|
||||||
- ' - RG in any other state, abort with an error.'
|
|
||||||
- 'If desired I(state=disabled):'
|
|
||||||
- ' - RG does not exist or is in one of [ENABLING, DISABLING, DELETING, DELETED, DESTROYING, DESTROYED]
|
|
||||||
states, abort with an error.'
|
|
||||||
- ' - RG is DISABLED state, change quotas if necessary.'
|
|
||||||
- ' - RG is in CREATED state, change quotas if necessary and disable the RG.'
|
|
||||||
default: present
|
|
||||||
choices: [ absent, disabled, enabled, present ]
|
|
||||||
user:
|
|
||||||
description:
|
|
||||||
- 'Name of the legacy user for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required when I(authenticator=legacy) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_USER environment variable.
|
|
||||||
required: no
|
|
||||||
verify_ssl:
|
|
||||||
description:
|
|
||||||
- 'Controls SSL verification mode when making API calls to DECORT controller. Set it to False if you
|
|
||||||
want to disable SSL certificate verification. Intended use case is when you run module in a trusted
|
|
||||||
environment that uses self-signed certificates. Note that disabling SSL verification in any other
|
|
||||||
scenario can lead to security issues, so please know what you are doing.'
|
|
||||||
default: True
|
|
||||||
required: no
|
|
||||||
workflow_callback:
|
|
||||||
description:
|
|
||||||
- 'Callback URL that represents an application, which invokes this module (e.g. up-level orchestrator or
|
|
||||||
end-user portal) and may except out-of-band updates on progress / exit status of the module run.'
|
|
||||||
- API call at this URL will be used to relay such information to the application.
|
|
||||||
- 'API call payload will include module-specific details about this module run and I(workflow_context).'
|
|
||||||
required: no
|
|
||||||
workflow_context:
|
|
||||||
description:
|
|
||||||
- 'Context data that will be included into the payload of the API call directed at I(workflow_callback) URL.'
|
|
||||||
- 'This context data is expected to uniquely identify the task carried out by this module invocation so
|
|
||||||
that up-level orchestrator could match returned information to the its internal entities.'
|
|
||||||
required: no
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
- name: create a new RG named "MyFirstRG" if it does not exist yet, set quotas on CPU and the number of exteranl IPs.
|
|
||||||
decort_rg:
|
|
||||||
authenticator: oauth2
|
|
||||||
app_id: "{{ MY_APP_ID }}"
|
|
||||||
app_secret: "{{ MY_APP_SECRET }}"
|
|
||||||
controller_url: "https://cloud.digitalenergy.online"
|
|
||||||
rg_name: "MyFirstRG"
|
|
||||||
account_name: "MyMainAccount"
|
|
||||||
quotas:
|
|
||||||
cpu: 16
|
|
||||||
ext_ips: 4
|
|
||||||
annotation: "My first RG created with Ansible module"
|
|
||||||
state: present
|
|
||||||
delegate_to: localhost
|
|
||||||
register: my_rg
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
facts:
|
|
||||||
description: facts about the resource group
|
|
||||||
returned: always
|
|
||||||
type: dict
|
|
||||||
sample:
|
|
||||||
facts:
|
|
||||||
id: 100
|
|
||||||
name: MyFirstRG
|
|
||||||
state: CREATED
|
|
||||||
account_id: 10
|
|
||||||
gid: 1001
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
@@ -209,6 +12,7 @@ from ansible.module_utils.basic import env_fallback
|
|||||||
|
|
||||||
from ansible.module_utils.decort_utils import *
|
from ansible.module_utils.decort_utils import *
|
||||||
|
|
||||||
|
|
||||||
class decort_rg(DecortController):
|
class decort_rg(DecortController):
|
||||||
def __init__(self,amodule):
|
def __init__(self,amodule):
|
||||||
super(decort_rg, self).__init__(amodule)
|
super(decort_rg, self).__init__(amodule)
|
||||||
@@ -347,7 +151,7 @@ class decort_rg(DecortController):
|
|||||||
self.validated_rg_id = self.rg_provision(self.validated_acc_id,
|
self.validated_rg_id = self.rg_provision(self.validated_acc_id,
|
||||||
self.amodule.params['rg_name'],
|
self.amodule.params['rg_name'],
|
||||||
self.amodule.params['owner'],
|
self.amodule.params['owner'],
|
||||||
self.amodule.params['annotation'],
|
self.amodule.params['description'],
|
||||||
self.amodule.params['resType'],
|
self.amodule.params['resType'],
|
||||||
self.amodule.params['def_netType'],
|
self.amodule.params['def_netType'],
|
||||||
self.amodule.params['ipcidr'],
|
self.amodule.params['ipcidr'],
|
||||||
@@ -441,7 +245,7 @@ class decort_rg(DecortController):
|
|||||||
account_id=dict(type='int', required=False),
|
account_id=dict(type='int', required=False),
|
||||||
account_name=dict(type='str', required=False, default=''),
|
account_name=dict(type='str', required=False, default=''),
|
||||||
access=dict(type='dict'),
|
access=dict(type='dict'),
|
||||||
annotation=dict(type='str', required=False, default=''),
|
description=dict(type='str', required=False, default=''),
|
||||||
app_id=dict(type='str',
|
app_id=dict(type='str',
|
||||||
required=False,
|
required=False,
|
||||||
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
||||||
|
|||||||
@@ -1,23 +1,12 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
|
||||||
# Copyright: ...
|
|
||||||
# ...
|
|
||||||
|
|
||||||
DOCUMENTATION = r'''
|
DOCUMENTATION = r'''
|
||||||
---
|
---
|
||||||
module: decort_user_info
|
module: decort_user_info
|
||||||
|
|
||||||
version_added: "2.16"
|
|
||||||
|
|
||||||
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
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
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.decort_utils import DecortController
|
from ansible.module_utils.decort_utils import DecortController
|
||||||
|
|
||||||
|
|||||||
@@ -1,239 +1,10 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2021 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
|
DOCUMENTATION = r'''
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
|
||||||
'status': ['preview'],
|
|
||||||
'supported_by': 'community'}
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
---
|
||||||
module: decort_vins
|
module: decort_vins
|
||||||
short_description: Manage Virtual Network Segments (ViNS) in DECORT cloud
|
|
||||||
description: >
|
|
||||||
This module can be used to create new ViNS in DECORT cloud platform, obtain or
|
|
||||||
modify its characteristics, and delete it.
|
|
||||||
version_added: "2.2"
|
|
||||||
author:
|
|
||||||
requirements:
|
|
||||||
- python >= 3.8
|
|
||||||
- PyJWT Python module
|
|
||||||
- requests Python module
|
|
||||||
- netaddr Python module
|
|
||||||
- decort_utils utility library (module)
|
|
||||||
- DECORT cloud platform version 3.8.6 or higher
|
|
||||||
notes:
|
|
||||||
- Environment variables can be used to pass selected parameters to the module, see details below.
|
|
||||||
- Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used.
|
|
||||||
- 'Similarly, JWT supplied in I(authenticator=jwt) mode should be received from Oauth2 provider trusted by
|
|
||||||
the DECORT cloud controller on which this JWT will be used.'
|
|
||||||
options:
|
|
||||||
account_id:
|
|
||||||
description:
|
|
||||||
- 'ID of the account under which this ViNS will be created (for new ViNS) or is located (for already
|
|
||||||
existing ViNS). This is the alternative to I(account_name) option.'
|
|
||||||
- If both I(account_id) and I(account_name) specified, then I(account_name) is ignored.
|
|
||||||
required: no
|
|
||||||
account_name:
|
|
||||||
description:
|
|
||||||
- 'Name of the account under which this ViNS will be created (for new RGs) or is located (for already
|
|
||||||
existing ViNS).'
|
|
||||||
- 'This parameter is ignored if I(account_id) is specified.'
|
|
||||||
required: no
|
|
||||||
annotation:
|
|
||||||
description:
|
|
||||||
- Optional text description of this virtual network segment.
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
app_id:
|
|
||||||
description:
|
|
||||||
- 'Application ID for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- 'Required if I(authenticator=oauth2).'
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_ID
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
app_secret:
|
|
||||||
description:
|
|
||||||
- 'Application API secret used for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
|
||||||
- This parameter is required when I(authenticator=oauth2) and ignored in other modes.
|
|
||||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_SECRET
|
|
||||||
environment variable.'
|
|
||||||
required: no
|
|
||||||
authenticator:
|
|
||||||
description:
|
|
||||||
- Authentication mechanism to be used when accessing DECORT controller and authorizing API call.
|
|
||||||
default: jwt
|
|
||||||
choices: [ jwt, oauth2, legacy ]
|
|
||||||
required: yes
|
|
||||||
controller_url:
|
|
||||||
description:
|
|
||||||
- URL of the DECORT controller that will be contacted to manage the RG according to the specification.
|
|
||||||
- 'This parameter is always required regardless of the specified I(authenticator) type.'
|
|
||||||
required: yes
|
|
||||||
ext_net_id:
|
|
||||||
description:
|
|
||||||
- 'Controls ViNS connection to an external network. This argument is optional with default value of -1,
|
|
||||||
which means no external connection.'
|
|
||||||
- Specify 0 to connect ViNS to external network and let platform select external network Id automatically.
|
|
||||||
- Specify positive value to request ViNS connection to the external network with corresponding ID.
|
|
||||||
- You may also control external IP address selection with I(ext_ip_addr) argument.
|
|
||||||
default: -1
|
|
||||||
required: no
|
|
||||||
ext_ip_addr:
|
|
||||||
description:
|
|
||||||
- IP address to assign to the external interface of this ViNS when connecting to the external net.
|
|
||||||
- If empty string is passed, the platform will assign free IP address automatically.
|
|
||||||
- 'Note that if invalid IP address or an address already occupied by another client is specified,
|
|
||||||
the module will abort with an error.'
|
|
||||||
- 'This argument is used only for new connection to the specified network. You cannot select another
|
|
||||||
external IP address without changing external network ID.'
|
|
||||||
- ViNS connection to the external network is controlled by I(ext_net_id) argument.
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
ipcidr:
|
|
||||||
description:
|
|
||||||
- Internal ViNS network address in a format XXX.XXX.XXX.XXX/XX (includes address and netmask).
|
|
||||||
- If empty string is passed, the platform will assign network address automatically.
|
|
||||||
- 'When selecting this address manually, note that this address must be unique amomng all ViNSes in
|
|
||||||
the target account.'
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
jwt:
|
|
||||||
description:
|
|
||||||
- 'JWT (access token) for authenticating to the DECORT controller when I(authenticator=jwt).'
|
|
||||||
- 'This parameter is required if I(authenticator=jwt) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_JWT environment variable.
|
|
||||||
required: no
|
|
||||||
oauth2_url:
|
|
||||||
description:
|
|
||||||
- 'URL of the oauth2 authentication provider to use when I(authenticator=oauth2).'
|
|
||||||
- 'This parameter is required when when I(authenticator=oauth2).'
|
|
||||||
- 'If not specified in the playbook, the value will be taken from DECORT_OAUTH2_URL environment variable.'
|
|
||||||
password:
|
|
||||||
description:
|
|
||||||
- 'Password for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required if I(authenticator=legacy) and ignored in other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_PASSWORD environment variable.
|
|
||||||
required: no
|
|
||||||
rg_id:
|
|
||||||
description:
|
|
||||||
- 'ID of the resource group (RG), where this ViNS will be created (for a new ViNS) or located
|
|
||||||
(for already existing ViNS).'
|
|
||||||
- If ViNS is created at the account level, I(rg_id) should be omitted or set to 0.
|
|
||||||
- If both I(rg_id) and I(rg_name) are specified, then I(rg_name) is ignored.
|
|
||||||
default: 0
|
|
||||||
required: no
|
|
||||||
rg_name:
|
|
||||||
description:
|
|
||||||
- 'Name of the resource group (RG), where this ViNS will be created (for new ViNS) or
|
|
||||||
located (for already existing ViNS).'
|
|
||||||
- If ViNS is created at the account level, I(rg_name) should be omitted or set to emtpy string.
|
|
||||||
- If both I(rg_name) and I(rg_id) are specified, then I(rg_name) is ignored.
|
|
||||||
default: empty string
|
|
||||||
required: no
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Specify the desired state of the ViNS at the exit of the module.
|
|
||||||
- 'Regardless of I(state), if ViNS exists and is in one of [DEPLOYING, DESTROYING, MIGRATING] states,
|
|
||||||
do nothing.'
|
|
||||||
- 'If desired I(state=present):'
|
|
||||||
- ' - ViNS does not exist or is in DESTROYED state, create new ViNS according to the specifications.'
|
|
||||||
- ' - ViNS is in DELETED state, restore it and change quotas if necessary. Note that on successful
|
|
||||||
restore ViNS will be left in DISABLED state.'
|
|
||||||
- ' - ViNS is in one of [CREATED, ENABLED, DISABLED] states, do nothing.'
|
|
||||||
- ' - ViNS in any other state, abort with an error.'
|
|
||||||
- 'If desired I(state=enabled):'
|
|
||||||
- ' - ViNS does not exist or is in DESTROYED state, create new ViNS according to the specifications.'
|
|
||||||
- ' - ViNS is in DELETED state, restore and enable it.'
|
|
||||||
- ' - ViNS is in one of [CREATED, ENABLED] states, do nothing.'
|
|
||||||
- ' - viNS is in any other state, abort with an error.'
|
|
||||||
- 'If desired I(state=absent):'
|
|
||||||
- ' - ViNS is in one of [CREATED, ENABLED, DISABLED, DELETED] states, destroy it.'
|
|
||||||
- ' - ViNS in DESTROYED state, do nothing.'
|
|
||||||
- ' - ViNS in any other state, abort with an error.'
|
|
||||||
- 'If desired I(state=disabled):'
|
|
||||||
- ' - ViNS is in one of [CREATED, ENABLED] states, disable it.'
|
|
||||||
- ' - ViNS is DISABLED state, do nothing.'
|
|
||||||
- ' - ViNS does not exist or is in one of [ENABLING, DISABLING, DELETING, DELETED, DESTROYING, DESTROYED]
|
|
||||||
states, abort with an error.'
|
|
||||||
default: present
|
|
||||||
choices: [ absent, disabled, enabled, present ]
|
|
||||||
user:
|
|
||||||
description:
|
|
||||||
- 'Name of the legacy user for authenticating to the DECORT controller when I(authenticator=legacy).'
|
|
||||||
- 'This parameter is required when I(authenticator=legacy) and ignored for other authentication modes.'
|
|
||||||
- If not specified in the playbook, the value will be taken from DECORT_USER environment variable.
|
|
||||||
required: no
|
|
||||||
verify_ssl:
|
|
||||||
description:
|
|
||||||
- 'Controls SSL verification mode when making API calls to DECORT controller. Set it to False if you
|
|
||||||
want to disable SSL certificate verification. Intended use case is when you run module in a trusted
|
|
||||||
environment that uses self-signed certificates. Note that disabling SSL verification in any other
|
|
||||||
scenario can lead to security issues, so please know what you are doing.'
|
|
||||||
default: True
|
|
||||||
required: no
|
|
||||||
vins_id:
|
|
||||||
description:
|
|
||||||
- ID of the ViNs to manage. If ViNS is identified by ID it must be present.
|
|
||||||
- If ViNS ID is specified, I(account_id), I(account_name), I(rg_id) and I(rg_name) are ignored.
|
|
||||||
vins_name:
|
|
||||||
description:
|
|
||||||
- Name of the ViNS.
|
|
||||||
- ViNS can exist at either account or resource group level.
|
|
||||||
- ViNS name is unique only within its parent (i.e. account or resource group).
|
|
||||||
- 'To create ViNS at account level omit both I(rg_id) and I(rg_name), or set them to 0 and empty
|
|
||||||
string respectively.'
|
|
||||||
required: yes
|
|
||||||
workflow_callback:
|
|
||||||
description:
|
|
||||||
- 'Callback URL that represents an application, which invokes this module (e.g. up-level orchestrator or
|
|
||||||
end-user portal) and may except out-of-band updates on progress / exit status of the module run.'
|
|
||||||
- API call at this URL will be used to relay such information to the application.
|
|
||||||
- 'API call payload will include module-specific details about this module run and I(workflow_context).'
|
|
||||||
required: no
|
|
||||||
workflow_context:
|
|
||||||
description:
|
|
||||||
- 'Context data that will be included into the payload of the API call directed at I(workflow_callback) URL.'
|
|
||||||
- 'This context data is expected to uniquely identify the task carried out by this module invocation so
|
|
||||||
that up-level orchestrator could match returned information to the its internal entities.'
|
|
||||||
required: no
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||||
- name: create a new ViNS named "MyViNS" if it does not exist yet under RG "MyRG" in the account "MyAccount".
|
|
||||||
decort_vins:
|
|
||||||
authenticator: oauth2
|
|
||||||
app_id: "{{ MY_APP_ID }}"
|
|
||||||
app_secret: "{{ MY_APP_SECRET }}"
|
|
||||||
controller_url: "https://cloud.digitalenergy.online"
|
|
||||||
vins_name: "MyViNS"
|
|
||||||
rg_name: "MyRG"
|
|
||||||
account_name: "MyAccount"
|
|
||||||
state: present
|
|
||||||
delegate_to: localhost
|
|
||||||
register: my_vins
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
facts:
|
|
||||||
description: facts about the virtual network segment
|
|
||||||
returned: always
|
|
||||||
type: dict
|
|
||||||
sample:
|
|
||||||
facts:
|
|
||||||
id: 5
|
|
||||||
name: MyViNS
|
|
||||||
int_net_addr: 192.168.1.0
|
|
||||||
ext_net_addr: 10.50.11.118
|
|
||||||
state: CREATED
|
|
||||||
account_id: 7
|
|
||||||
rg_id: 19
|
|
||||||
gid: 1001
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
@@ -241,6 +12,7 @@ from ansible.module_utils.basic import env_fallback
|
|||||||
|
|
||||||
from ansible.module_utils.decort_utils import *
|
from ansible.module_utils.decort_utils import *
|
||||||
|
|
||||||
|
|
||||||
class decort_vins(DecortController):
|
class decort_vins(DecortController):
|
||||||
def __init__(self,arg_amodule):
|
def __init__(self,arg_amodule):
|
||||||
super(decort_vins, self).__init__(arg_amodule)
|
super(decort_vins, self).__init__(arg_amodule)
|
||||||
@@ -337,7 +109,7 @@ class decort_vins(DecortController):
|
|||||||
self.acc_id, self.rg_id,
|
self.acc_id, self.rg_id,
|
||||||
self.amodule.params['ipcidr'],
|
self.amodule.params['ipcidr'],
|
||||||
self.amodule.params['ext_net_id'], self.amodule.params['ext_ip_addr'],
|
self.amodule.params['ext_net_id'], self.amodule.params['ext_ip_addr'],
|
||||||
self.amodule.params['annotation'])
|
self.amodule.params['description'])
|
||||||
|
|
||||||
if self.amodule.params['mgmtaddr'] or self.amodule.params['connect_to']:
|
if self.amodule.params['mgmtaddr'] or self.amodule.params['connect_to']:
|
||||||
_, self.vins_facts = self.vins_find(self.vins_id)
|
_, self.vins_facts = self.vins_find(self.vins_id)
|
||||||
@@ -473,7 +245,7 @@ class decort_vins(DecortController):
|
|||||||
return dict(
|
return dict(
|
||||||
account_id=dict(type='int', required=False,default=0),
|
account_id=dict(type='int', required=False,default=0),
|
||||||
account_name=dict(type='str', required=False, default=''),
|
account_name=dict(type='str', required=False, default=''),
|
||||||
annotation=dict(type='str', required=False, default=''),
|
description=dict(type='str', required=False, default=''),
|
||||||
app_id=dict(type='str',
|
app_id=dict(type='str',
|
||||||
required=False,
|
required=False,
|
||||||
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
||||||
|
|||||||
@@ -1,33 +1,4 @@
|
|||||||
#
|
from copy import deepcopy
|
||||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
|
||||||
# Copyright: (c) 2018-2023 Digital Energy Cloud Solutions LLC
|
|
||||||
#
|
|
||||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
This is the library of utility functions and classes for managing DECORT cloud platform.
|
|
||||||
|
|
||||||
These classes are made aware of Ansible module architecture and designed to be called from the main code of an Ansible
|
|
||||||
module to fulfill cloud resource management tasks.
|
|
||||||
|
|
||||||
Methods defined in this file should NOT implement complex logic like building execution plan for an
|
|
||||||
upper level Ansible module. However, they do implement necessary sanity checks and may abort upper level module
|
|
||||||
execution if some fatal error occurs. Being Ansible aware, they usually do so by calling AnsibleModule.fail_json(...)
|
|
||||||
method with properly configured arguments.
|
|
||||||
|
|
||||||
NOTE: this utility library requires DECORT platform version 3.4.0 or higher.
|
|
||||||
It is not compatible with older versions.
|
|
||||||
|
|
||||||
Requirements:
|
|
||||||
- python >= 3.8
|
|
||||||
- PyJWT Python module
|
|
||||||
- requests Python module
|
|
||||||
- netaddr Python module
|
|
||||||
- DECORT cloud platform version 3.8.6 or higher
|
|
||||||
"""
|
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
import json
|
import json
|
||||||
@@ -1095,11 +1066,6 @@ class DecortController(object):
|
|||||||
self.result['warning'] = ("compute_bootdisk_size(): new size {} is the same as current for "
|
self.result['warning'] = ("compute_bootdisk_size(): new size {} is the same as current for "
|
||||||
"Compute ID {}, nothing to do.").format(new_size, comp_dict['id'])
|
"Compute ID {}, nothing to do.").format(new_size, comp_dict['id'])
|
||||||
return
|
return
|
||||||
elif new_size < bdisk_size:
|
|
||||||
self.result['failed'] = False
|
|
||||||
self.result['warning'] = ("compute_bootdisk_size(): new size {} is less than current {} for "
|
|
||||||
"Compute ID {}, skipping change.").format(new_size, bdisk_size, comp_dict['id'])
|
|
||||||
return
|
|
||||||
|
|
||||||
api_params = dict(diskId=bdisk_id,
|
api_params = dict(diskId=bdisk_id,
|
||||||
size=new_size)
|
size=new_size)
|
||||||
@@ -1241,6 +1207,13 @@ class DecortController(object):
|
|||||||
ret_comp_dict['interfaces'].sort(key=lambda k: k['pciSlot'])
|
ret_comp_dict['interfaces'].sort(key=lambda k: k['pciSlot'])
|
||||||
|
|
||||||
ret_rg_id = ret_comp_dict['rgId']
|
ret_rg_id = ret_comp_dict['rgId']
|
||||||
|
|
||||||
|
custom_fields = None
|
||||||
|
if ret_comp_dict['status'] not in ('DESTROYED', 'DELETED'):
|
||||||
|
custom_fields = self.compute_get_custom_fields(
|
||||||
|
compute_id=ret_comp_id,
|
||||||
|
)
|
||||||
|
ret_comp_dict['custom_fields'] = custom_fields
|
||||||
else:
|
else:
|
||||||
self.result['warning'] = ("compute_get_by_id(): failed to get Compute by ID {}. HTTP code {}, "
|
self.result['warning'] = ("compute_get_by_id(): failed to get Compute by ID {}. HTTP code {}, "
|
||||||
"response {}.").format(comp_id, api_resp.status_code, api_resp.reason)
|
"response {}.").format(comp_id, api_resp.status_code, api_resp.reason)
|
||||||
@@ -1405,11 +1378,14 @@ class DecortController(object):
|
|||||||
boot_disk,
|
boot_disk,
|
||||||
image_id,
|
image_id,
|
||||||
chipset: Literal['Q35', 'i440fx'] = 'i440fx',
|
chipset: Literal['Q35', 'i440fx'] = 'i440fx',
|
||||||
annotation="",
|
description="",
|
||||||
userdata=None,
|
userdata=None,
|
||||||
sep_id=None,
|
sep_id=None,
|
||||||
pool_name=None,
|
pool_name=None,
|
||||||
start_on_create=True):
|
start_on_create=True,
|
||||||
|
cpu_pin: bool = False,
|
||||||
|
hp_backed: bool = False,
|
||||||
|
numa_affinity: Literal['none', 'loose', 'strict'] = 'none'):
|
||||||
"""Manage KVM VM provisioning. To remove existing KVM VM compute instance use compute_remove method,
|
"""Manage KVM VM provisioning. To remove existing KVM VM compute instance use compute_remove method,
|
||||||
to resize use compute_resize, to manage power state use compute_powerstate method.
|
to resize use compute_resize, to manage power state use compute_powerstate method.
|
||||||
|
|
||||||
@@ -1419,7 +1395,7 @@ class DecortController(object):
|
|||||||
@param (int) ram: volume of RAM in MB to allocate (i.e. pass 4096 to allocate 4GB RAM).
|
@param (int) ram: volume of RAM in MB to allocate (i.e. pass 4096 to allocate 4GB RAM).
|
||||||
@param (int) boot_disk: boot disk size in GB.
|
@param (int) boot_disk: boot disk size in GB.
|
||||||
@param (int) image_id: ID of the OS image to base this Compute on.
|
@param (int) image_id: ID of the OS image to base this Compute on.
|
||||||
@param (string) annotation: optional text description for the VM.
|
@param (string) description: optional text description for the VM.
|
||||||
@param (string) userdata: additional paramters to pass to cloud-init facility of the guest OS.
|
@param (string) userdata: additional paramters to pass to cloud-init facility of the guest OS.
|
||||||
@param (bool) start_on_create: set to False if you want the VM to be provisioned in HALTED state.
|
@param (bool) start_on_create: set to False if you want the VM to be provisioned in HALTED state.
|
||||||
|
|
||||||
@@ -1447,8 +1423,8 @@ class DecortController(object):
|
|||||||
'chipset': chipset,
|
'chipset': chipset,
|
||||||
'withoutBootDisk': not boot_disk,
|
'withoutBootDisk': not boot_disk,
|
||||||
}
|
}
|
||||||
if annotation:
|
if description:
|
||||||
api_params['decs'] = annotation
|
api_params['desc'] = description
|
||||||
|
|
||||||
if not image_id:
|
if not image_id:
|
||||||
api_url = '/restmachine/cloudapi/kvmx86/createBlank'
|
api_url = '/restmachine/cloudapi/kvmx86/createBlank'
|
||||||
@@ -1456,6 +1432,9 @@ class DecortController(object):
|
|||||||
api_url = '/restmachine/cloudapi/kvmx86/create'
|
api_url = '/restmachine/cloudapi/kvmx86/create'
|
||||||
api_params['imageId'] = image_id
|
api_params['imageId'] = image_id
|
||||||
api_params['start'] = start_on_create
|
api_params['start'] = start_on_create
|
||||||
|
api_params['cpupin'] = cpu_pin
|
||||||
|
api_params['hpBacked'] = hp_backed
|
||||||
|
api_params['numaAffinity'] = numa_affinity
|
||||||
|
|
||||||
if userdata:
|
if userdata:
|
||||||
api_params['userdata'] = json.dumps(userdata) # we need to pass a string object as "userdata"
|
api_params['userdata'] = json.dumps(userdata) # we need to pass a string object as "userdata"
|
||||||
@@ -1925,28 +1904,104 @@ class DecortController(object):
|
|||||||
|
|
||||||
@waypoint
|
@waypoint
|
||||||
@checkmode
|
@checkmode
|
||||||
def compute_update(self, compute_id: int, name: Optional[str] = None):
|
def compute_update(
|
||||||
|
self,
|
||||||
|
compute_id: int,
|
||||||
|
name: Optional[str] = None,
|
||||||
|
chipset: Optional[str] = None,
|
||||||
|
cpu_pin: Optional[bool] = None,
|
||||||
|
hp_backed: Optional[bool] = None,
|
||||||
|
numa_affinity: Optional[str] = None,
|
||||||
|
description: Optional[str] = None,
|
||||||
|
):
|
||||||
OBJ = 'compute'
|
OBJ = 'compute'
|
||||||
|
|
||||||
api_response = self.decort_api_call(
|
self.decort_api_call(
|
||||||
arg_req_function=requests.post,
|
arg_req_function=requests.post,
|
||||||
arg_api_name='/restmachine/cloudapi/compute/update',
|
arg_api_name='/restmachine/cloudapi/compute/update',
|
||||||
arg_params={
|
arg_params={
|
||||||
'computeId': compute_id,
|
'computeId': compute_id,
|
||||||
'name': name,
|
'name': name,
|
||||||
|
'chipset': chipset,
|
||||||
|
'cpupin': cpu_pin,
|
||||||
|
'hpBacked': hp_backed,
|
||||||
|
'numaAffinity': numa_affinity,
|
||||||
|
'desc': description,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.set_changed()
|
self.set_changed()
|
||||||
|
|
||||||
if name is not None:
|
params_to_check = {
|
||||||
self.message(
|
'name': name,
|
||||||
self.MESSAGES.obj_renamed(
|
'chipset': chipset,
|
||||||
obj=OBJ,
|
'cpu_pin': cpu_pin,
|
||||||
id=compute_id,
|
'hp_backed': hp_backed,
|
||||||
new_name=name,
|
'numa_affinity': numa_affinity,
|
||||||
|
'description': description,
|
||||||
|
}
|
||||||
|
for param, value in params_to_check.items():
|
||||||
|
if value is not None:
|
||||||
|
self.message(
|
||||||
|
self.MESSAGES.obj_smth_changed(
|
||||||
|
obj=OBJ,
|
||||||
|
id=compute_id,
|
||||||
|
smth=param,
|
||||||
|
new_value=value,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
|
@waypoint
|
||||||
|
@checkmode
|
||||||
|
def compute_set_custom_fields(
|
||||||
|
self,
|
||||||
|
compute_id: int,
|
||||||
|
custom_fields: dict,
|
||||||
|
):
|
||||||
|
self.decort_api_call(
|
||||||
|
arg_req_function=requests.post,
|
||||||
|
arg_api_name='/restmachine/cloudapi/compute/setCustomFields',
|
||||||
|
arg_params={
|
||||||
|
'computeId': compute_id,
|
||||||
|
'customFields': json.dumps(custom_fields),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.set_changed()
|
||||||
|
|
||||||
|
@waypoint
|
||||||
|
@checkmode
|
||||||
|
def compute_disable_custom_fields(
|
||||||
|
self,
|
||||||
|
compute_id: int,
|
||||||
|
):
|
||||||
|
self.decort_api_call(
|
||||||
|
arg_req_function=requests.post,
|
||||||
|
arg_api_name='/restmachine/cloudapi/compute/deleteCustomFields',
|
||||||
|
arg_params={
|
||||||
|
'computeId': compute_id,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.set_changed()
|
||||||
|
|
||||||
|
@waypoint
|
||||||
|
def compute_get_custom_fields(self, compute_id: int) -> Optional[dict]:
|
||||||
|
api_resp = self.decort_api_call(
|
||||||
|
arg_req_function=requests.post,
|
||||||
|
arg_api_name='/restmachine/cloudapi/compute/getCustomFields',
|
||||||
|
arg_params={
|
||||||
|
'computeId': compute_id
|
||||||
|
},
|
||||||
|
not_fail_codes=[404],
|
||||||
|
)
|
||||||
|
if api_resp.status_code == 404:
|
||||||
|
error_msg = api_resp.json()['error']
|
||||||
|
if 'customFields' in error_msg:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
self.message(error_msg)
|
||||||
|
self.exit(fail=True)
|
||||||
|
|
||||||
|
return api_resp.json()
|
||||||
|
|
||||||
###################################
|
###################################
|
||||||
# OS image manipulation methods
|
# OS image manipulation methods
|
||||||
@@ -4928,21 +4983,44 @@ class DecortController(object):
|
|||||||
self.result['changed'] = True
|
self.result['changed'] = True
|
||||||
return
|
return
|
||||||
|
|
||||||
def k8s_check_new_worker_groups_params(
|
def k8s_check_worker_group_for_recreate(
|
||||||
self,
|
self,
|
||||||
worker_groups: list[dict[str, Any]]
|
target_wg: dict[str, Any],
|
||||||
|
existing_wg: dict[str, Any],
|
||||||
|
):
|
||||||
|
for param in [
|
||||||
|
'cpu', 'ram', 'disk', 'taints', 'labels', 'annotations',
|
||||||
|
]:
|
||||||
|
# Ignore service label when comparing labels
|
||||||
|
if param == 'labels':
|
||||||
|
if target_wg[param] is not None:
|
||||||
|
filtered_existing_wg_labels = [
|
||||||
|
label for label in existing_wg[param]
|
||||||
|
if 'workersGroupName' not in label
|
||||||
|
]
|
||||||
|
if (
|
||||||
|
sorted(filtered_existing_wg_labels)
|
||||||
|
!= sorted(target_wg[param])
|
||||||
|
):
|
||||||
|
target_wg['need_to_recreate'] = True
|
||||||
|
elif (
|
||||||
|
target_wg[param] is not None
|
||||||
|
and existing_wg[param] != target_wg[param]
|
||||||
|
):
|
||||||
|
target_wg['need_to_recreate'] = True
|
||||||
|
|
||||||
|
if (
|
||||||
|
target_wg['ci_user_data'] is not None
|
||||||
|
and not target_wg.get('need_to_recreate')
|
||||||
):
|
):
|
||||||
check_error = False
|
_, vm_info, _ = self._compute_get_by_id(
|
||||||
for new_wg_params in worker_groups:
|
comp_id=existing_wg['detailedInfo'][0]['id'],
|
||||||
for new_wg_required_param in ['num', 'cpu', 'ram', 'disk']:
|
)
|
||||||
if new_wg_params[new_wg_required_param] is None:
|
if (
|
||||||
self.message(
|
vm_info.get('userdata', {})
|
||||||
f'Parameter "{new_wg_required_param}" is required'
|
!= target_wg['ci_user_data']
|
||||||
f' for new worker group "{new_wg_params["name"]}"'
|
):
|
||||||
)
|
target_wg['need_to_recreate'] = True
|
||||||
check_error = True
|
|
||||||
if check_error:
|
|
||||||
self.exit(fail=True)
|
|
||||||
|
|
||||||
def k8s_provision(self, k8s_name,
|
def k8s_provision(self, k8s_name,
|
||||||
k8ci_id,
|
k8ci_id,
|
||||||
@@ -4966,41 +5044,25 @@ class DecortController(object):
|
|||||||
kubeproxy_conf,
|
kubeproxy_conf,
|
||||||
join_conf,
|
join_conf,
|
||||||
oidc_cert,
|
oidc_cert,
|
||||||
annotation,
|
description,
|
||||||
extnet_only,
|
extnet_only,
|
||||||
|
master_chipset: Literal['Q35', 'i440fx'] = 'i440fx',
|
||||||
):
|
):
|
||||||
|
|
||||||
self.result['waypoints'] = "{} -> {}".format(self.result['waypoints'], "k8s_provision")
|
self.result['waypoints'] = "{} -> {}".format(self.result['waypoints'], "k8s_provision")
|
||||||
|
|
||||||
self.k8s_check_new_worker_groups_params(worker_groups=[default_worker])
|
|
||||||
|
|
||||||
if self.amodule.check_mode:
|
if self.amodule.check_mode:
|
||||||
self.result['failed'] = False
|
self.result['failed'] = False
|
||||||
self.result['msg'] = ("k8s_provision() in check mode. Provision k8s '{}' in RG ID {} "
|
self.result['msg'] = ("k8s_provision() in check mode. Provision k8s '{}' in RG ID {} "
|
||||||
"was requested.").format(k8s_name, rg_id)
|
"was requested.").format(k8s_name, rg_id)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def_wg_name = default_worker['name']
|
|
||||||
def_wg_count = default_worker['num']
|
|
||||||
def_wg_cpu = default_worker['cpu']
|
|
||||||
def_wg_ram = default_worker['ram']
|
|
||||||
def_wg_disk = default_worker['disk']
|
|
||||||
def_wg_sepid = default_worker['sep_id']
|
|
||||||
def_wg_pool = default_worker['pool']
|
|
||||||
def_wg_ud = (
|
|
||||||
json.dumps(default_worker['ci_user_data'])
|
|
||||||
if default_worker['ci_user_data'] else None
|
|
||||||
)
|
|
||||||
def_wg_lab = default_worker['labels']
|
|
||||||
def_wg_taints = default_worker['taints']
|
|
||||||
def_wg_ann = default_worker['annotations']
|
|
||||||
|
|
||||||
api_url = "/restmachine/cloudapi/k8s/create"
|
api_url = "/restmachine/cloudapi/k8s/create"
|
||||||
api_params = dict(name=k8s_name,
|
api_params = dict(name=k8s_name,
|
||||||
rgId=rg_id,
|
rgId=rg_id,
|
||||||
k8ciId=k8ci_id,
|
k8ciId=k8ci_id,
|
||||||
vinsId=vins_id,
|
vinsId=vins_id,
|
||||||
workerGroupName=def_wg_name,
|
workerGroupName=default_worker['name'],
|
||||||
networkPlugin=plugin,
|
networkPlugin=plugin,
|
||||||
masterNum=master_count,
|
masterNum=master_count,
|
||||||
masterCpu=master_cpu,
|
masterCpu=master_cpu,
|
||||||
@@ -5008,15 +5070,15 @@ class DecortController(object):
|
|||||||
masterDisk=master_disk,
|
masterDisk=master_disk,
|
||||||
masterSepId=master_sepid,
|
masterSepId=master_sepid,
|
||||||
masterSepPool=master_pool,
|
masterSepPool=master_pool,
|
||||||
workerNum=def_wg_count,
|
workerNum=default_worker['num'],
|
||||||
workerCpu=def_wg_cpu,
|
workerCpu=default_worker['cpu'],
|
||||||
workerRam=def_wg_ram,
|
workerRam=default_worker['ram'],
|
||||||
workerDisk=def_wg_disk,
|
workerDisk=default_worker['disk'],
|
||||||
workerSepId=def_wg_sepid,
|
workerSepId=default_worker['sep_id'],
|
||||||
workerSepPool=def_wg_pool,
|
workerSepPool=default_worker['pool'],
|
||||||
labels=def_wg_lab,
|
labels=default_worker['labels'],
|
||||||
taints=def_wg_taints,
|
taints=default_worker['taints'],
|
||||||
annotations=def_wg_ann,
|
annotations=default_worker['annotations'],
|
||||||
extnetId=extnet_id,
|
extnetId=extnet_id,
|
||||||
withLB=with_lb,
|
withLB=with_lb,
|
||||||
highlyAvailableLB=ha_lb,
|
highlyAvailableLB=ha_lb,
|
||||||
@@ -5026,9 +5088,10 @@ class DecortController(object):
|
|||||||
kubeletConfiguration=json.dumps(kublet_conf) if kublet_conf else None,
|
kubeletConfiguration=json.dumps(kublet_conf) if kublet_conf else None,
|
||||||
kubeProxyConfiguration=json.dumps(kubeproxy_conf)if kubeproxy_conf else None,
|
kubeProxyConfiguration=json.dumps(kubeproxy_conf)if kubeproxy_conf else None,
|
||||||
joinConfiguration=json.dumps(join_conf)if join_conf else None,
|
joinConfiguration=json.dumps(join_conf)if join_conf else None,
|
||||||
desc=annotation,
|
desc=description,
|
||||||
userData=def_wg_ud,
|
userData=json.dumps(default_worker['ci_user_data']),
|
||||||
extnetOnly=extnet_only,
|
extnetOnly=extnet_only,
|
||||||
|
chipset=master_chipset,
|
||||||
)
|
)
|
||||||
|
|
||||||
upload_files = None
|
upload_files = None
|
||||||
@@ -5104,23 +5167,64 @@ class DecortController(object):
|
|||||||
for rec in arg_modwg:
|
for rec in arg_modwg:
|
||||||
if rec['name'] not in wg_inner:
|
if rec['name'] not in wg_inner:
|
||||||
wg_add_list.append(rec)
|
wg_add_list.append(rec)
|
||||||
self.k8s_check_new_worker_groups_params(worker_groups=wg_add_list)
|
|
||||||
|
|
||||||
for rec_inn in arg_k8swg['k8sGroups']['workers']:
|
for wg in arg_k8swg['k8sGroups']['workers']:
|
||||||
for rec_out in arg_modwg:
|
for target_wg in arg_modwg:
|
||||||
if rec_inn['name'] == rec_out['name']:
|
if wg['name'] == target_wg['name']:
|
||||||
if (
|
self.k8s_check_worker_group_for_recreate(
|
||||||
rec_out['num'] is not None
|
target_wg=target_wg,
|
||||||
and rec_inn['num'] != rec_out['num']
|
existing_wg=wg,
|
||||||
):
|
)
|
||||||
count = rec_inn['num']-rec_out['num']
|
if target_wg.get('need_to_recreate'):
|
||||||
cmp_list = []
|
wg_del_list.append(wg['id'])
|
||||||
if count > 0:
|
wg_to_create = deepcopy(target_wg)
|
||||||
for cmp in rec_inn['detailedInfo'][-count:]:
|
for param, value in wg_to_create.items():
|
||||||
cmp_list.append(cmp['id'])
|
if param == 'ci_user_data' and value is None:
|
||||||
wg_moddel_list.append({rec_inn['id']:cmp_list})
|
_, vm_info, _ = self._compute_get_by_id(
|
||||||
if count < 0:
|
comp_id=wg['detailedInfo'][0]['id'],
|
||||||
wg_modadd_list.append({rec_inn['id']:abs(count)})
|
)
|
||||||
|
wg_to_create[param] = vm_info.get(
|
||||||
|
'userdata', {}
|
||||||
|
)
|
||||||
|
elif value is None:
|
||||||
|
wg_to_create[param] = wg.get(param)
|
||||||
|
wg_add_list.append(wg_to_create)
|
||||||
|
continue
|
||||||
|
|
||||||
|
w_ids = {w['id'] for w in wg['detailedInfo']}
|
||||||
|
bad_w_ids = set()
|
||||||
|
|
||||||
|
new_chipset = target_wg['chipset']
|
||||||
|
if new_chipset is not None:
|
||||||
|
for w_id in w_ids:
|
||||||
|
_, vm_info, _ = self._compute_get_by_id(
|
||||||
|
comp_id=w_id,
|
||||||
|
)
|
||||||
|
if vm_info['chipset'] != new_chipset:
|
||||||
|
bad_w_ids.add(w_id)
|
||||||
|
|
||||||
|
wg_num = wg['num']
|
||||||
|
target_num = target_wg['num']
|
||||||
|
if target_num is not None:
|
||||||
|
new_w_count = target_num - wg_num + len(bad_w_ids)
|
||||||
|
if new_w_count > 0:
|
||||||
|
if new_chipset is None:
|
||||||
|
new_chipset = self.wg_default_params['chipset']
|
||||||
|
wg_modadd_list.append({
|
||||||
|
'wg_id': wg['id'],
|
||||||
|
'computes_num': new_w_count,
|
||||||
|
'chipset': new_chipset,
|
||||||
|
})
|
||||||
|
elif new_w_count:
|
||||||
|
valid_w_ids = w_ids.difference(bad_w_ids)
|
||||||
|
for _ in range(abs(new_w_count)):
|
||||||
|
bad_w_ids.add(valid_w_ids.pop())
|
||||||
|
|
||||||
|
if bad_w_ids:
|
||||||
|
wg_moddel_list.append({
|
||||||
|
'wg_id': wg['id'],
|
||||||
|
'compute_ids': bad_w_ids,
|
||||||
|
})
|
||||||
|
|
||||||
if wg_del_list:
|
if wg_del_list:
|
||||||
for wgid in wg_del_list:
|
for wgid in wg_del_list:
|
||||||
@@ -5129,22 +5233,24 @@ class DecortController(object):
|
|||||||
self.result['changed'] = True
|
self.result['changed'] = True
|
||||||
if wg_add_list:
|
if wg_add_list:
|
||||||
for wg in wg_add_list:
|
for wg in wg_add_list:
|
||||||
|
wg_to_create = deepcopy(wg)
|
||||||
|
for param, default_value in self.wg_default_params.items():
|
||||||
|
if wg_to_create[param] is None:
|
||||||
|
wg_to_create[param] = default_value
|
||||||
api_params = {
|
api_params = {
|
||||||
'k8sId': self.k8s_id,
|
'k8sId': self.k8s_id,
|
||||||
'name': wg['name'],
|
'name': wg_to_create['name'],
|
||||||
'workerNum': wg['num'],
|
'workerNum': wg_to_create['num'],
|
||||||
'workerCpu': wg['cpu'],
|
'workerCpu': wg_to_create['cpu'],
|
||||||
'workerRam': wg['ram'],
|
'workerRam': wg_to_create['ram'],
|
||||||
'workerDisk': wg['disk'],
|
'workerDisk': wg_to_create['disk'],
|
||||||
'workerSepId': wg['sep_id'],
|
'workerSepId': wg_to_create['sep_id'],
|
||||||
'workerSepPool': wg['pool'],
|
'workerSepPool': wg_to_create['pool'],
|
||||||
'labels': wg['labels'],
|
'labels': wg_to_create['labels'],
|
||||||
'taints': wg['taints'],
|
'taints': wg_to_create['taints'],
|
||||||
'annotations': wg['annotations'],
|
'annotations': wg_to_create['annotations'],
|
||||||
'userData': (
|
'userData': json.dumps(wg_to_create['ci_user_data']),
|
||||||
json.dumps(wg['ci_user_data'])
|
'chipset': wg_to_create['chipset'],
|
||||||
if wg['ci_user_data'] else None
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
wg_add_response = self.decort_api_call(
|
wg_add_response = self.decort_api_call(
|
||||||
arg_req_function=requests.post,
|
arg_req_function=requests.post,
|
||||||
@@ -5160,7 +5266,7 @@ class DecortController(object):
|
|||||||
|
|
||||||
# average time to add a single worker group * reserve
|
# average time to add a single worker group * reserve
|
||||||
wg_add_avg_time = 210 * 2
|
wg_add_avg_time = 210 * 2
|
||||||
wg_add_timeout = wg_add_avg_time * wg['num']
|
wg_add_timeout = wg_add_avg_time * wg_to_create['num']
|
||||||
task_schedule_timeout = 600
|
task_schedule_timeout = 600
|
||||||
sleep_interval = 5
|
sleep_interval = 5
|
||||||
while True:
|
while True:
|
||||||
@@ -5174,9 +5280,9 @@ class DecortController(object):
|
|||||||
case 'SCHEDULED':
|
case 'SCHEDULED':
|
||||||
if task_schedule_timeout <= 0:
|
if task_schedule_timeout <= 0:
|
||||||
self.message(
|
self.message(
|
||||||
f'Time to schedule task'
|
f'Time to schedule task to add worker '
|
||||||
f'to add worker group {wg["name"]}'
|
f'group {wg_to_create["name"]} has been '
|
||||||
f'has been exceeded.'
|
f'exceeded.'
|
||||||
f'\nTask details: {task_link}'
|
f'\nTask details: {task_link}'
|
||||||
)
|
)
|
||||||
self.exit(fail=True)
|
self.exit(fail=True)
|
||||||
@@ -5185,38 +5291,54 @@ class DecortController(object):
|
|||||||
case 'PROCESSING':
|
case 'PROCESSING':
|
||||||
if wg_add_timeout <= 0:
|
if wg_add_timeout <= 0:
|
||||||
self.message(
|
self.message(
|
||||||
f'Time to add worker group {wg["name"]} '
|
f'Time to add worker group '
|
||||||
f'has been exceeded.'
|
f'{wg_to_create["name"]} has been '
|
||||||
f'\nTask details: {task_link}'
|
f'exceeded.\nTask details: {task_link}'
|
||||||
)
|
)
|
||||||
self.exit(fail=True)
|
self.exit(fail=True)
|
||||||
time.sleep(sleep_interval)
|
time.sleep(sleep_interval)
|
||||||
wg_add_timeout -= sleep_interval
|
wg_add_timeout -= sleep_interval
|
||||||
case 'ERROR':
|
case 'ERROR':
|
||||||
self.result['msg'] = (
|
self.result['msg'] = (
|
||||||
f'Adding worker group {wg["name"]} failed: '
|
f'Adding worker group {wg_to_create["name"]} '
|
||||||
f'{response_data["error"]}.'
|
f'failed: {response_data["error"]}.'
|
||||||
f'\nTask details: {task_link}'
|
f'\nTask details: {task_link}'
|
||||||
)
|
)
|
||||||
self.exit(fail=True)
|
self.exit(fail=True)
|
||||||
case 'OK':
|
case 'OK':
|
||||||
self.message(
|
self.message(
|
||||||
f'Worker group {wg["name"]} created successful'
|
f'Worker group {wg_to_create["name"]} '
|
||||||
|
f'created successful'
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
if wg_modadd_list:
|
if wg_modadd_list:
|
||||||
for wg in wg_modadd_list:
|
for wg in wg_modadd_list:
|
||||||
for key in wg:
|
api_params = {
|
||||||
api_params = dict(k8sId=self.k8s_id,workersGroupId=key,num=wg[key])
|
'k8sId': self.k8s_id,
|
||||||
api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/k8s/workerAdd", api_params)
|
'workersGroupId': wg['wg_id'],
|
||||||
self.result['changed'] = True
|
'num': wg['computes_num'],
|
||||||
|
'chipset': wg['chipset'],
|
||||||
|
}
|
||||||
|
self.decort_api_call(
|
||||||
|
arg_req_function=requests.post,
|
||||||
|
arg_api_name='/restmachine/cloudapi/k8s/workerAdd',
|
||||||
|
arg_params=api_params,
|
||||||
|
)
|
||||||
|
self.result['changed'] = True
|
||||||
if wg_moddel_list:
|
if wg_moddel_list:
|
||||||
for wg in wg_moddel_list:
|
for wg in wg_moddel_list:
|
||||||
for key in wg:
|
for compute_id in wg['compute_ids']:
|
||||||
for cmpid in wg[key]:
|
api_params = {
|
||||||
api_params = dict(k8sId=self.k8s_id,workersGroupId=key,workerId=cmpid)
|
'k8sId': self.k8s_id,
|
||||||
api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/k8s/deleteWorkerFromGroup", api_params)
|
'workersGroupId': wg['wg_id'],
|
||||||
self.result['changed'] = True
|
'workerId': compute_id,
|
||||||
|
}
|
||||||
|
self.decort_api_call(
|
||||||
|
arg_req_function=requests.post,
|
||||||
|
arg_api_name='/restmachine/cloudapi/k8s/deleteWorkerFromGroup',
|
||||||
|
arg_params=api_params,
|
||||||
|
)
|
||||||
|
self.result['changed'] = True
|
||||||
self.result['failed'] = False
|
self.result['failed'] = False
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -5688,7 +5810,7 @@ class DecortController(object):
|
|||||||
self.amodule.fail_json(**self.result)
|
self.amodule.fail_json(**self.result)
|
||||||
|
|
||||||
return 0, None
|
return 0, None
|
||||||
def lb_provision(self,lb_name,rg_id,vins_id,ext_net_id,ha_status,annotation,start=True):
|
def lb_provision(self,lb_name,rg_id,vins_id,ext_net_id,ha_status,description,start=True):
|
||||||
"""Provision LB according to the specified arguments.
|
"""Provision LB according to the specified arguments.
|
||||||
If critical error occurs the embedded call to API function will abort further execution of
|
If critical error occurs the embedded call to API function will abort further execution of
|
||||||
the script and relay error to Ansible.
|
the script and relay error to Ansible.
|
||||||
@@ -5717,7 +5839,7 @@ class DecortController(object):
|
|||||||
vinsId=vins_id,
|
vinsId=vins_id,
|
||||||
highlyAvailable=ha_status,
|
highlyAvailable=ha_status,
|
||||||
start=start,
|
start=start,
|
||||||
desc=annotation
|
desc=description
|
||||||
)
|
)
|
||||||
api_resp = self.decort_api_call(requests.post, api_url, api_params)
|
api_resp = self.decort_api_call(requests.post, api_url, api_params)
|
||||||
# On success the above call will return here. On error it will abort execution by calling fail_json.
|
# On success the above call will return here. On error it will abort execution by calling fail_json.
|
||||||
|
|||||||
23
wiki/6.1.0/Home.md
Normal file
23
wiki/6.1.0/Home.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
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) - получение информации об аккаунте
|
||||||
|
- [Модуль decort_account](./модуль-decort_account.md) - управление аккаунтами
|
||||||
|
- [Модуль decort_user_info](./модуль-decort_user_info.md) - получение информации о пользователе
|
||||||
182
wiki/6.1.0/введение.md
Normal file
182
wiki/6.1.0/введение.md
Normal 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.1.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 }}"
|
||||||
|
```
|
||||||
992
wiki/6.1.0/модуль-decort_account.md
Normal file
992
wiki/6.1.0/модуль-decort_account.md
Normal file
@@ -0,0 +1,992 @@
|
|||||||
|
# Модуль decort_account
|
||||||
|
## Обзор модуля
|
||||||
|
|
||||||
|
Модуль **decort_account** предназначен для выполнения следующих действий над аккаунтом:
|
||||||
|
- **удалить в корзину** (см. [параметр state](#state) и [примеры](#в-корзину))
|
||||||
|
- **удалить безвозвратно** (см. [параметр state](#state) и [примеры](#безвозвратно))
|
||||||
|
- **восстановить из корзины** (см. [параметр state](#state) и [примеры](#восстановить-из-корзины))
|
||||||
|
- **выключить/включить** (см. [параметр state](#state) и [примеры](#выключитьвключить))
|
||||||
|
- **изменить права доступа** (см. [параметр acl](#acl) и [примеры](#изменить-права-доступа))
|
||||||
|
- **изменить имя** (см. [параметр name](#name) и [примеры](#переименовать))
|
||||||
|
- **изменить квоты** (см. [параметр quotas](#quotas) и [примеры](#изменить-квоты))
|
||||||
|
- **выключить/включить отправку уведомлений о предоставлении доступа к ресурсам** (см. [параметр access_emails](#access_emails) и [примеры](#выключитьвключить-отправку-уведомлений-о-предоставлении-доступа-к-ресурсам))
|
||||||
|
- **изменить доступные пулы СХД** (см. [параметр sep_pools](#sep_pools) и [примеры](#изменить-доступные-пулы-схд))
|
||||||
|
|
||||||
|
## Параметры модуля
|
||||||
|
Ниже приведен список параметров для модуля **decort_account** (за исключением [общих параметров авторизации](./введение.md#общие-параметры-модулей-для-авторизации)):
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th colspan="6">Параметр</th>
|
||||||
|
<th>Тип</th>
|
||||||
|
<th>Описание</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
<a name="access_emails">
|
||||||
|
access_emails
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(bool)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Выключение/включение отправки пользователям на эл. почту уведомлений о предоставлении доступа к ресурсам.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
<a name="acl">
|
||||||
|
acl
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(dict)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Целевые права доступа.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
mode
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(str)
|
||||||
|
<br>Значения:
|
||||||
|
<br><code>match</code>
|
||||||
|
<br><code>revoke</code>
|
||||||
|
<br><code>update</code>
|
||||||
|
<br>Default: <code>update</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Режим изменения прав доступа для указанных пользователей.
|
||||||
|
<br><code>match</code> - привести в соответствие для указанных
|
||||||
|
пользователей, удалить предоставленные для других.
|
||||||
|
<br><code>revoke</code> - отозвать для указанных пользователей,
|
||||||
|
если предоставлены.
|
||||||
|
<br><code>update</code> - привести в соответствие для указанных
|
||||||
|
пользователей, оставить без изменения предоставленные для
|
||||||
|
других.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
users
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(list)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Список словарей, описывающих права доступа пользователей.
|
||||||
|
<br>Обязательный параметр.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="4">
|
||||||
|
rights
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(str)
|
||||||
|
<br>Значения:
|
||||||
|
<br><code>R</code>
|
||||||
|
<br><code>RCX</code>
|
||||||
|
<br><code>ARCXDU</code>
|
||||||
|
<br>Default: <code>R</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Права доступа.
|
||||||
|
<br>При <code>mode: revoke</code> не используется.
|
||||||
|
<br>При <code>mode: match</code> и <code>mode: update</code>
|
||||||
|
права <code>ARCXDU</code> считаются соответствующими
|
||||||
|
правам <code>CXDRAU</code>.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="4">
|
||||||
|
id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(str)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор пользователя.
|
||||||
|
<br>Обязательный параметр.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(int)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор целевого аккаунта.
|
||||||
|
<br>Обязательный параметр, если не задан параметр
|
||||||
|
<code>name</code>.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
<a name="name">
|
||||||
|
name
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(str)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Имя целевого аккаунта.
|
||||||
|
<br>Может быть альтернативой параметру <code>id</code>,
|
||||||
|
за исключением случая, когда необходимо получить
|
||||||
|
информацию о безвозвратно удалённом объекте.
|
||||||
|
<br>Если задан совместно с параметром <code>id</code>,
|
||||||
|
то используется для переименования (целевое имя).
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
<a name="quotas">
|
||||||
|
quotas
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(dict)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Целевые квоты.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
cpu
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(int)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество виртуальных процессоров.
|
||||||
|
<br><code>-1</code> - удалить квоту.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
disks_size
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(int)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Объём дисков в ГБ.
|
||||||
|
<br><code>-1</code> - удалить квоту.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
ext_traffic
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(int)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Объём трафика внешних сетей.
|
||||||
|
<br><code>-1</code> - удалить квоту.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
gpu
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(int)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество графических процессоров.
|
||||||
|
<br><code>-1</code> - удалить квоту.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
public_ip
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(int)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество внешних IP-адресов.
|
||||||
|
<br><code>-1</code> - удалить квоту.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
ram
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(int)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Объём оперативной памяти в МБ.
|
||||||
|
<br><code>-1</code> - удалить квоту.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
<a name="sep_pools">
|
||||||
|
sep_pools
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(list)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Список словарей, описывающих доступные пулы СХД.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
sep_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(int)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор системы хранения данных.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
pool_names
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(list)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Список названий пулов системы хранения данных.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
<a name="state">
|
||||||
|
state
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
(str)
|
||||||
|
<br>Значения:
|
||||||
|
<br><code>absent</code>
|
||||||
|
<br><code>absent_permanently</code>
|
||||||
|
<br><code>confirmed</code>
|
||||||
|
<br><code>disabled</code>
|
||||||
|
<br><code>present</code>
|
||||||
|
<br>Default: <code>present</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Целевое состояние.
|
||||||
|
<br><code>absent</code> - удалён в корзину, безвозвратно удалён
|
||||||
|
или не существует. Если существует и не удалён, то будет удалён
|
||||||
|
в корзину.
|
||||||
|
<br><code>absent_permanently</code> - безвозвратно удалён или
|
||||||
|
не существует. Если существует и не удалён или удалён в корзину,
|
||||||
|
то будет безвозвратно удалён.
|
||||||
|
<br> При значениях <code>absent</code> и <code>absent_permanently</code>
|
||||||
|
использование других параметров модуля, вызывающих изменение объекта,
|
||||||
|
не допускается.
|
||||||
|
<br><code>confirmed</code> - включён. Если выключен, то будет включён.
|
||||||
|
Если удалён в корзину, то будет восстановлен из корзины.
|
||||||
|
<br><code>disabled</code> - выключен. Если включён, то будет выключен.
|
||||||
|
Если удалён в корзину, то будет восстановлен из корзины и выключен.
|
||||||
|
<br><code>present</code> - существует и не удалён. Если удалён в
|
||||||
|
корзину, то будет восстановлен из корзины.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Возвращаемые значения
|
||||||
|
|
||||||
|
Модуль **decort_account** возвращает информацию об аккаунте в виде словаря `facts` со следующими ключами:
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th colspan="6">
|
||||||
|
Ключ
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Тип
|
||||||
|
<br>данных
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Описание
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
acl
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
list
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Список словарей, описывающих доступы пользователей.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
canBeDeleted
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
bool
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Может ли быть удалён.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
right
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Права.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
status
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Статус.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
type
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Тип.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
userGroupId
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор пользователя или группы пользователей.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
company
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Название компании.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
companyurl
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
URL компании.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
computeFeatures
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
list
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Список дополнительных возможностей гипервизора, доступных ВМ.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
computes_amount
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
dict
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество ВМ по состоянию.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
started
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество запущенных ВМ.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
stopped
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество остановленных ВМ.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
cpu_allocation_parameter
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Режим выделения ЦП.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
cpu_allocation_ratio
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Коэффициент для режима выделения ЦП.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
createdBy
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор пользователя, который создал.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
createdTime
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Unix-время создания.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
createdTime_readable
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дата и время создания.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
deactivationTime
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Unix-время выключения.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
deactivationTime_readable
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дата и время выключения.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
deletedBy
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор пользователя, который удалил.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
deletedTime
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Unix-время удаления.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
deletedTime_readable
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дата и время удаления.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
displayname
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Отображаемое имя.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
name
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Имя.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
resourceLimits
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
dict
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Квоты на ресурсы.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
CU_C
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество виртуальных процессоров.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
CU_D
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Объём диска в ГБ.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
CU_DM
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Объём дисков в ГБ.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
CU_I
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество внешних IP-адресов.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
CU_M
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
float
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Объём оперативной памяти в МБ.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
CU_NP
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Объём трафика внешних сетей.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="5">
|
||||||
|
gpu_units
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество графических процессоров.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
sendAccessEmails
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
bool
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Отправка пользователям на эл. почту уведомлений о предоставлении доступа.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
status
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Статус.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
uniqPools
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
list
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Список доступных пулов СХД.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
updatedTime
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Unix-время обновления.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
updatedTime_readable
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
str
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дата и время обновления.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
vins
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
list
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Список идентификаторов внутренних сетей на уровне аккаунта.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
vinses_amount
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
int
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество внутренних сетей.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Примеры использования
|
||||||
|
|
||||||
|
### Удалить
|
||||||
|
|
||||||
|
#### В корзину
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Delete account
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
state: absent
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Безвозвратно
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Delete account
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
state: absent_permanently
|
||||||
|
```
|
||||||
|
|
||||||
|
### Восстановить из корзины
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Restore account from recycle bin
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
state: present
|
||||||
|
```
|
||||||
|
|
||||||
|
### Выключить/включить
|
||||||
|
|
||||||
|
#### Выключить
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Disable account
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
state: disabled
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Включить
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Enable account
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
state: confirmed
|
||||||
|
```
|
||||||
|
|
||||||
|
### Изменить права доступа
|
||||||
|
|
||||||
|
#### Отозвать
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Revoke user access rights
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
acl:
|
||||||
|
mode: revoke
|
||||||
|
users:
|
||||||
|
- id: "{{ user1_id }}"
|
||||||
|
- id: "{{ user2_id }}"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Обновить
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Update user access rights
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
acl:
|
||||||
|
mode: update
|
||||||
|
users:
|
||||||
|
- id: "{{ user1_id }}"
|
||||||
|
rights: R
|
||||||
|
- id: "{{ user2_id }}"
|
||||||
|
rights: RCX
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Привести в соответствие
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Match user access rights
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
acl:
|
||||||
|
mode: match
|
||||||
|
users:
|
||||||
|
- id: "{{ user1_id }}"
|
||||||
|
rights: ARCXDU
|
||||||
|
- id: "{{ user2_id }}"
|
||||||
|
rights: RCX
|
||||||
|
```
|
||||||
|
|
||||||
|
### Переименовать
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Rename account
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
name: "{{ account_new_name }}"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Изменить квоты
|
||||||
|
|
||||||
|
#### На объём дисков
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Update account quota of disks size
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
quotas:
|
||||||
|
disks_size: 500
|
||||||
|
```
|
||||||
|
|
||||||
|
#### На количество внешних IP-адресов
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Update account quota of public IP amount
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
quotas:
|
||||||
|
public_ip: 10
|
||||||
|
```
|
||||||
|
|
||||||
|
### Выключить/включить отправку уведомлений о предоставлении доступа к ресурсам
|
||||||
|
|
||||||
|
#### Выключить
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Disable sending access emails
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
access_emails: false
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Включить
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Enable sending access emails
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
access_emails: true
|
||||||
|
```
|
||||||
|
|
||||||
|
### Изменить доступные пулы СХД
|
||||||
|
```
|
||||||
|
- name: Example
|
||||||
|
hosts: localhost
|
||||||
|
tasks:
|
||||||
|
- name: Change available sep pools
|
||||||
|
decort_account:
|
||||||
|
# Параметры для авторизации упущены
|
||||||
|
id: "{{ account_id }}"
|
||||||
|
sep_pools:
|
||||||
|
- sep_id: 1
|
||||||
|
pool_names:
|
||||||
|
- pool1
|
||||||
|
```
|
||||||
3805
wiki/6.1.0/модуль-decort_account_info.md
Normal file
3805
wiki/6.1.0/модуль-decort_account_info.md
Normal file
File diff suppressed because it is too large
Load Diff
92
wiki/6.1.0/модуль-decort_bservice.md
Normal file
92
wiki/6.1.0/модуль-decort_bservice.md
Normal 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
|
||||||
|
```
|
||||||
177
wiki/6.1.0/модуль-decort_disk.md
Normal file
177
wiki/6.1.0/модуль-decort_disk.md
Normal 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` игнорируется. |
|
||||||
|
| description | (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 | Уникальный целочисленный идентификатор аккаунта, которому принадлежит диск.|
|
||||||
|
| computes | dict | Словарь, в котором ключ - идентификатор, а значение - имя виртуальной машины, к которой в настоящий момент подключён диск. Если диск не подключён, то возвращается пустой словарь.|
|
||||||
|
| 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
|
||||||
|
description: "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 }}"
|
||||||
|
<< для краткости фрагмент опущен >>
|
||||||
|
```
|
||||||
105
wiki/6.1.0/модуль-decort_group.md
Normal file
105
wiki/6.1.0/модуль-decort_group.md
Normal 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>Значения:<br>`KVM_X86`<br>`SVA_KVM_X86`<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) | Имя группы.<br>Используется для идентификации группы, если не задан параметр `id`, а также для переименования группы, если параметр `id` задан. |
|
||||||
|
| networks | (list) | Список словарей, описывающих сети, которые должны быть подключены.<br>Ключи словаря:<br>• `type` (string) (обязательный) - тип сети; значения: `VINS` (внутренняя) или `EXTNET` (внешняя)<br>• `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>• `id` (int) - идентификатор ВМ<br>• `ipAddresses` (list) - список IP-адресов ВМ<br>• `name` (str) - имя ВМ<br>• `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
|
||||||
|
```
|
||||||
53
wiki/6.1.0/модуль-decort_jwt.md
Normal file
53
wiki/6.1.0/модуль-decort_jwt.md
Normal 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 }}"
|
||||||
|
```
|
||||||
120
wiki/6.1.0/модуль-decort_k8s.md
Normal file
120
wiki/6.1.0/модуль-decort_k8s.md
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
# Модуль 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_chipset | (string)<br>Значения:<br>`Q35`<br>`i440fx` | Эмулируемый чипсет master-узлов. Не применим при изменении существующего кластера. <br>Значение по умолчанию при создании: `i440fx`. |
|
||||||
|
| 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` | Запустить кластер.<br>Используется только для существующего кластера. |
|
||||||
|
| 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>• `annotations` (list) (необязательный) - список строк с annotations в формате: `key1=value1`; значение по умолчанию при создании: `[]`<br>• `chipset` (str) (необязательный) - эмулируемый чипсет. Допустимые значения: `Q35`, `i440fx`; значение по умолчанию при создании: `i440fx`<br>• `ci_user_data` (dict) (необязательный) - конфигурация для cloud-init; значение по умолчанию при создании: `{}`<br>• `cpu` (int) (необязательный) - количество виртуальных процессоров на узле; значение по умолчанию при создании: `1`<br>• `disk` (int) (необязательный) - объём загрузочного диска на узле; если не задан при создании, размер диска будет равен размеру используемого образа<br>• `labels` (list) (необязательный) - список строк с labels в формате: `label1=value1`; значение по умолчанию при создании: `[]`. Метка `workersGroupName` является служебной в платформе и игнорируется при сравнении переданных меток с существующими<br>• `name` (string) (обязательный) - имя группы Worker-узлов<br>• `num` (int) (необязательный) - количество узлов; значение по умолчанию при создании: `1`<br>• `pool` (str) (необязательный) - пул СХД, заданной ключом `sep_id`; если не задан при создании, то пул будет выбран платформой<br>• `ram` (int) (необязательный) - объём оперативной памяти на узле; значение по умолчанию при создании: `1024`<br>• `sep_id` (int) (необязательный) - идентификатор СХД; если не задан при создании, то используется СХД образа узла<br>• `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>• `cpu` (int) - количество виртуальных процессоров<br>• `detailedInfo` (list) - список словарей с информацией об узлах; ключи словаря: `id` (int) - идентификатор ВМ, `name` (str) - имя ВМ, `status` (str) - статус ВМ, `techStatus` (str) - технический статус ВМ<br>• `disk` (int) - объём загрузочного диска<br>• `id` (int) - идентификатор группы<br>• `name` (str) - имя группы<br>• `num` (int) - количество узлов<br>• `ram` (int) - объём оперативной памяти
|
||||||
|
| k8s_Workers | dict | Список словарей с информацией о группах Worker-узлов.<br>Ключи словаря:<br>• `cpu` (int) - количество виртуальных процессоров<br>• `detailedInfo` (list) - список словарей с информацией об узлах; ключи словаря: `id` (int) - идентификатор ВМ, `name` (str) - имя ВМ, `status` (str) - статус ВМ, `techStatus` (str) - технический статус ВМ<br>• `disk` (int) - объём загрузочного диска<br>• `id` (int) - идентификатор группы<br>• `labels` (list) - список строк с labels<br>• `name` (str) - имя группы<br>• `num` (int) - количество узлов<br>• `ram` (int) - объём оперативной памяти<br>• `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
|
||||||
|
ram: 1024
|
||||||
|
chipset: i440fx
|
||||||
|
ci_user_data: {}
|
||||||
|
taints:
|
||||||
|
- key=value:NoSchedule
|
||||||
|
annotations:
|
||||||
|
- key=value
|
||||||
|
labels:
|
||||||
|
- label=value
|
||||||
|
- cpu: 10
|
||||||
|
disk: 10
|
||||||
|
name: wg2
|
||||||
|
num: 2
|
||||||
|
ram: 1024
|
||||||
|
chipset: Q35
|
||||||
|
ci_user_data: {}
|
||||||
|
taints:
|
||||||
|
- key=value:NoSchedule
|
||||||
|
annotations:
|
||||||
|
- key=value
|
||||||
|
labels:
|
||||||
|
- label=value
|
||||||
|
register: k8s_cluster
|
||||||
|
```
|
||||||
136
wiki/6.1.0/модуль-decort_kvmvm.md
Normal file
136
wiki/6.1.0/модуль-decort_kvmvm.md
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
# Модуль decort_kvmvm
|
||||||
|
## Обзор модуля decort_kvmvm
|
||||||
|
|
||||||
|
Модуль **decort_kvmvm** предназначен для выполнения следующих действий над виртуальными машинами:
|
||||||
|
- создать
|
||||||
|
- с образом
|
||||||
|
- без образа
|
||||||
|
- с загрузочным диском
|
||||||
|
- без загрузочного диска
|
||||||
|
- получить информацию
|
||||||
|
- остановить/приостановить/запустить
|
||||||
|
- подключить/отключить диски с данными
|
||||||
|
- подключить/отключить сети
|
||||||
|
- изменить
|
||||||
|
- объём загрузочного диска в большую сторону
|
||||||
|
- количество CPU
|
||||||
|
- объём ОЗУ
|
||||||
|
- тэги
|
||||||
|
- affinity метку
|
||||||
|
- affinity правила
|
||||||
|
- anti-affinity правила
|
||||||
|
- описание
|
||||||
|
- чипсет
|
||||||
|
- правило NUMA Affinity
|
||||||
|
- использование CPU Pinning
|
||||||
|
- использование Huge Pages
|
||||||
|
- имя
|
||||||
|
- XML виртуальной машины
|
||||||
|
- удалить (безвозвратно)
|
||||||
|
|
||||||
|
## Параметры модуля decort_kvmvm
|
||||||
|
|
||||||
|
Ниже в алфавитном порядке приведен полный список параметров для модуля **decort_kvmvm**. Актуальную информацию по параметрам, которые поддерживает версия модуля, установленного на вашем Ansible-сервере, можно получить командой:
|
||||||
|
`ansible-doc -t module decort_kvmvm`
|
||||||
|
|
||||||
|
|
||||||
|
| Параметр | Тип, допустимые значения | Описание |
|
||||||
|
| ------ | ------ | ------ |
|
||||||
|
| aaff_rule | (list) | Список словарей, описывающих anti-affinity правила.<br>Ключи словаря:<br>• `topology` (string) (обязательный) - назначение правила; значения: `node` (узел) или `compute` (ВМ)<br>• `policy` (string) (обязательный) - степень "необходимости" этого правила; значения: `RECOMMENDED` или `REQUIRED`<br>• `mode` (string) (обязательный) - режим сравнения; значения: `EQ` (должно соответствовать), `NE` (не должно соответствовать), `ANY` (любое)<br>• `key` (string) (обязательный) - ключ, который учитывается при анализе данного правила<br>• `value` (string) (обязательный) - значение ключа, учитываемого при анализе данного правила (зависит от ключа `mode`).<br>Чтобы очистить anti-affinity правила, нужно указать пустой список `[]`. |
|
||||||
|
| 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>• `topology` (string) (обязательный) - назначение правила; значения: `node` (узел) или `compute` (ВМ)<br>• `policy` (string) (обязательный) - степень "необходимости" этого правила; значения: `RECOMMENDED` или `REQUIRED`<br>• `mode` (string) (обязательный) - режим сравнения; значения: `EQ` (должно соответствовать), `NE` (не должно соответствовать), `ANY` (любое)<br>• `key` (string) (обязательный) - ключ, который учитывается при анализе данного правила<br>• `value` (string) (обязательный) - значение ключа, учитываемого при анализе данного правила (зависит от ключа `mode`).<br>Чтобы очистить affinity правила, нужно указать пустой список `[]`. |
|
||||||
|
| affinity_label | (str) | Метка affinity.<br>Чтобы очистить метку affinity, нужно указать пустую строку `""`. |
|
||||||
|
| description | (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`.|
|
||||||
|
| authenticator | (str)<br>Значения:<br>`oauth2`<br>`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Обязательный параметр. |
|
||||||
|
| boot_disk | (int) | Объём загрузочного диска виртуальной машины в ГБ. |
|
||||||
|
| chipset | (string)<br>Значения:<br>`Q35`<br>`i440fx` | Эмулируемый чипсет. |
|
||||||
|
| ci_user_data | (dict) | конфигурация для cloud-init
|
||||||
|
| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должен быть создан (или уже существует) данная виртуальная машина. Данный параметр является обязательным. |
|
||||||
|
| cpu | (int) | Количество виртуальных процессоров, выделяемых виртуальной машине. |
|
||||||
|
| cpu_pin | (bool) | Запуск виртуальной машины на выделенных процессорах. Чтобы использовать эту функцию, система должна быть предварительно сконфигурирована путем выделения процессоров на физическом узле.<br>Значение по умолчанию при создании: `false`. |
|
||||||
|
| custom_fields | (dict) | Словарь, управляющий XML виртуальной машины.<br>Ключи словаря:<br>• `disable` (bool) - отключение управления виртуальной машиной через XML. Значение по умолчанию при создании: `true`<br>• `fields` (dict) - поля для управления XML виртуальной машины. |
|
||||||
|
| data_disks | (list) | Список идентификаторов дисков, которые следует подключить к данной виртуальной машине как дополнительные.<br>Чтобы отключить все диски, нужно указать пустой список `[]`.|
|
||||||
|
| hp_backed | (bool) | Использовать Huge Pages для выделения оперативной памяти виртуальной машины. Система должна быть предварительно сконфигурирована путем выделения Huge Pages на физическом узле. <br>Значение по умолчанию при создании: `false`. |
|
||||||
|
| 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`.|
|
||||||
|
| network_order_changing | (bool)<br>Default:<br>`false` | Соблюдение очерёдности сетей при их изменении.<br>Если `true`, то сравнение списка уже подключённых к ВМ сетей со списком из параметра `networks` будет производится <u>с учётом очерёдности сетей</u> и, <u>при выявлении несоответствия, сначала будет произведено отключение всех сетей от ВМ</u>, а затем подключение сетей в соответствии с параметром `networks`.<br> Если `false`, то очерёдность при сравнении учитываться не будет. Соответственно, сети, которые имеются в списке параметра `networks` и уже подключены к ВМ, переподключаться не будут, что может кратно уменьшить время выполнения изменения сетей. |
|
||||||
|
| networks | (list) | Список словарей, описывающих сети ВМ.<br>Ключи словаря:<br>• `type` (string) (обязательный) - тип сети; значения: `VINS` (внутренняя), `EXTNET` (внешняя), `VFNIC` (вирт. функция), `DPDK`, `EMPTY` (без подключения к сети)<br>• `id` (int) (необязательный) - идентификатор внутренней/внешней/DPDK сети или пула вирт. функций<br>• `ip_addr` (string) (необязательный) - IP-адрес, используемый для подключения к данной сети; применимо только для `VINS` и `EXTNET`.<br>ВМ не может одновременно быть подключена к сети DPDK и к сети другого типа.<br>Чтобы отключить все сети, нужно указать пустой список `[]`. |
|
||||||
|
| numa_affinity | (str)<br>Значения:<br>`strict`<br>`loose`<br>`none` | Правило применения NUMA affinity к виртуальной машине. <br>`strict` - строго с NUMA affinity, `loose` - использовать NUMA affinity, если возможно, `none` - отменить применение NUMA affinity. <br>Значение по умолчанию при создании: `none`. |
|
||||||
|
| 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) | Словарь, пары ключ-значение которого, описывают тэги для ВМ.<br>Чтобы очистить теги, нужно указать пустой словарь `{}`.|
|
||||||
|
| verify_ssl | (bool)<br>Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.<br>Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
|
||||||
|
|
||||||
|
## Возвращаемые значения модуля decort_kvmvm
|
||||||
|
|
||||||
|
Модуль **decort_kvmvm** возвращает информацию о виртуальной машине в виде словаря `facts` со следующими ключами:
|
||||||
|
|
||||||
|
|
||||||
|
| Ключ | Тип данных | Описание |
|
||||||
|
| ------ | ------ | ------ |
|
||||||
|
| account_id | int | Идентификатор аккаунта. |
|
||||||
|
| arch | string | Архитектура ВМ. |
|
||||||
|
| chipset | string | Эмулируемый чипсет. |
|
||||||
|
| cpu | int | Количество виртуальных процессоров. |
|
||||||
|
| cpu_pin | bool | Запуск виртуальной машины на выделенных процессорах. |
|
||||||
|
| custom_fields | dict | Словарь, управляющий XML виртуальной машины. Если `null`, то управление виртуальной машиной через XML отключено, иначе - управление через XML включено. |
|
||||||
|
| data_disks | list | Список идентификаторов дисков с данными, подключенных к ВМ. |
|
||||||
|
| disk_size | int | Размер загрузочного диска в ГБ. |
|
||||||
|
| hp_backed | bool | Использовать Huge Pages для выделения оперативной памяти виртуальной машины. |
|
||||||
|
| id | int | Идентификатор ВМ. |
|
||||||
|
| image_id | id | Идентификатор образа.
|
||||||
|
| interfaces | list | Список словарей, описывающих сетевые интерфейсы ВМ. |
|
||||||
|
| name | string | Имя ВМ. |
|
||||||
|
| numa_affinity | str | Правило применения NUMA affinity к виртуальной машине. |
|
||||||
|
| 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 }}"
|
||||||
|
chipset: Q35
|
||||||
|
custom_fields:
|
||||||
|
fields:
|
||||||
|
title: TestTitle
|
||||||
|
cpu:
|
||||||
|
mode: custom
|
||||||
|
cache:
|
||||||
|
mode: disable
|
||||||
|
register: my_vm
|
||||||
|
```
|
||||||
893
wiki/6.1.0/модуль-decort_lb.md
Normal file
893
wiki/6.1.0/модуль-decort_lb.md
Normal 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">
|
||||||
|
description
|
||||||
|
</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>
|
||||||
|
Cловарь, описывающий параметры по умолчанию для 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>
|
||||||
|
Cловарь, описывающий параметры по умолчанию для 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>
|
||||||
|
Cловарь, описывающий параметры 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>
|
||||||
131
wiki/6.1.0/модуль-decort_osimage.md
Normal file
131
wiki/6.1.0/модуль-decort_osimage.md
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
# Модуль 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`. |
|
||||||
|
| 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
|
||||||
|
```
|
||||||
|
|
||||||
76
wiki/6.1.0/модуль-decort_pfw.md
Normal file
76
wiki/6.1.0/модуль-decort_pfw.md
Normal 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>• `local_port` (int) (обязательный) - внутренний порт; значения: от `1` до `65535`<br>• `proto` (str) (обязательный) - протокол; значения: `tcp` или `udp`<br>• `public_port_end` (int) (необязательный) - верхняя граница диапазона внешних портов; значения: от значения ключа `public_port_start` до `65535`;<br>• `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>• `id` (int) - идентификатор правила<br>• `localIp` (str) - IP-адрес ВМ<br>• `localPort` (int) - внутренний порт<br>• `protocol` (str) - протокол<br>• `publicPortEnd` (int) - верхняя граница диапазона внешних портов<br>• `publicPortStart` (int) - нижняя граница диапазона внешних портов<br>• `vmId` (int) - идентификатор ВМ<br>• `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 }}"
|
||||||
|
```
|
||||||
228
wiki/6.1.0/модуль-decort_rg.md
Normal file
228
wiki/6.1.0/модуль-decort_rg.md
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
# Модуль 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) | Параметр, позволяющий выдать, забрать или изменить права у пользователя в ресурсной группе. |
|
||||||
|
| description | (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_netId | (int) | Уникальный целочисленный идентификатор внутренней или внешней сети. Используется для изменения сети по умолчанию в ресурсной группе. |
|
||||||
|
| def_netType | (string) <br>Значения:<br>`PRIVATE`<br>`PUBLIC`<br>`NONE`<br>Default: `PRIVATE` | Тип сети по умолчанию в ресурсной группе. Используется при создании ресурсной группы, а также при изменении. |
|
||||||
|
| extNetId | (int) | Уникальный целочисленный идентификатор внешней сети.<br>Если `def_netType: PRIVATE`, то указывает какую внешнюю сеть подключить к создаваемой внутренней сети, которая будет задана как сеть по умолчанию для создаваемой РГ.<br>Если `def_netType: PUBLIC`, то указывает какую внешнюю сеть задать как сеть по умолчанию для создаваемой РГ. |
|
||||||
|
| extNetIp | (string) | IP-адрес для внешней сети, которая задана в параметре `extNetId`. |
|
||||||
|
| 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`. |
|
||||||
|
| owner | (string) | Владелец ресурсной группы. Задаётся при создании ресурсной группы, не обязателен. Если оставить пустое значение - владельцем ресурсной группы будет пользователь, создавший ресурсную группу. |
|
||||||
|
| permanently | (bool)<br>Default: `false` | Параметр, использующийся при удалении ресурсной группы. При значении `true` - ресурсная группа удалится безвозвратно, а при `false` - попадёт в корзину. |
|
||||||
|
| quotas | (dict) | Предназначено для задания или изменения квоты на ресурсы в составе данной ресурсной группы. |
|
||||||
|
| rename | (string) | Новое имя ресурсной группы.<br>Возможно переименование только включенной ресурсной группы. |
|
||||||
|
| rg_id | (int) | Уникальный целочисленный идентификатор ресурсной группы. Является обязательным при изменении РГ если не заданы `rg_name` и `account_id`/`account_name` |
|
||||||
|
| rg_name | (string) | Имя ресурсной группы. Данный параметр является обязательным при создании. |
|
||||||
|
| sep_pools| (list) | Список словарей, описывающих доступные пулы СХД.<br>Ключи словаря:<br>• `sep_id` (int) - идентификатор системы хранения данных.<br>• `pool_names` (list) - список названий пулов системы хранения данных.<br>Чтобы очистить список доступных пулов, нужно указать пустой список `[]`.|
|
||||||
|
| state | Значения:<br>`present`<br>`absent`<br>`enabled`<br>`disabled`<br>Default: `present` | Целевое состояние ресурсной группы. |
|
||||||
|
| 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 | Список идентификаторов виртуальных машин ресурсной группы. |
|
||||||
|
| uniqPools | 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 }}"
|
||||||
|
```
|
||||||
|
|
||||||
|
В данном примере показано, как изменить доступные пулы СХД в ресурсной группе по имени MyRG в аккаунте MyAccount.
|
||||||
|
|
||||||
|
```
|
||||||
|
- name: change available sep pools
|
||||||
|
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"
|
||||||
|
sep_pools:
|
||||||
|
- sep_id: 1
|
||||||
|
pool_names:
|
||||||
|
- sep1_pool1
|
||||||
|
- sep1_pool2
|
||||||
|
- sep_id: 2
|
||||||
|
pool_names:
|
||||||
|
- sep2_pool1
|
||||||
|
state: present
|
||||||
|
register: my_rg
|
||||||
|
delegate_to: localhost
|
||||||
|
```
|
||||||
1338
wiki/6.1.0/модуль-decort_user_info.md
Normal file
1338
wiki/6.1.0/модуль-decort_user_info.md
Normal file
File diff suppressed because it is too large
Load Diff
120
wiki/6.1.0/модуль-decort_vins.md
Normal file
120
wiki/6.1.0/модуль-decort_vins.md
Normal 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` игнорируется.|
|
||||||
|
|description | (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
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
## Документация:
|
## Документация:
|
||||||
|
|
||||||
|
- [Модули Ansible версии 6.1.0](./6.1.0/Home.md)
|
||||||
- [Модули Ansible версии 6.0.0](./6.0.0/Home.md)
|
- [Модули Ansible версии 6.0.0](./6.0.0/Home.md)
|
||||||
- [Модули Ansible версии 5.6.0](./5.6.0/Home.md)
|
- [Модули Ansible версии 5.6.0](./5.6.0/Home.md)
|
||||||
- [Модули Ansible версии 5.5.0](./5.5.0/Home.md)
|
- [Модули Ansible версии 5.5.0](./5.5.0/Home.md)
|
||||||
|
|||||||
Reference in New Issue
Block a user