diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ba57b2..ed50b7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,114 +1,88 @@ -# Список изменений в версии 6.0.0 +# Список изменений в версии 6.1.0 -## Обновления +## Добавлено -### Модуль decort_user_info +### Модуль decort_kvmvm | Идентификатор
задачи | Описание | | --- | --- | -| BANS-515 | Фильтрация аудитов по коду ответа происходит в фильтре `status_code`, принимающем параметры `min` и `max`. | +| BANS-602 | Добавлена возможность изменения параметра `chipset` у существующей виртуальной машины. | +| BANS-620 | Добавлены параметры `cpu_pin`, `hp_backed`, `numa_affinity` для создания и изменения виртуальной машины. | +| BANS-622 | Добавлена возможность изменения параметра `description` у существующей виртуальной машины. | +| BANS-201 | Добавлен параметр `description` в связи с переименованием из `annotation`.| +| BANS-625 | Добавлен параметр `custom_fields` для создания и изменения виртуальной машины.| -### Модуль decort_account_info +### Модуль decort_k8s | Идентификатор
задачи | Описание | | --- | --- | -| BANS-554 | Удалён подпараметр `images.deleted`. | +| BANS-598 | Добавлен параметр `master_chipset` для указания чипсета для master-узлов при создании кластера и параметр `workers.chipset` для указания чипсета для worker-узлов.
Для параметров `workers.annotations`, `workers.chipset`, `workers.ci_user_data`, `workers.cpu`, `workers.labels`, `workers.num`, `workers.ram`, `workers.taints` установлены значения по умолчанию при создании.| -### Модуль decort_kvmvm -| Идентификатор
задачи | Описание | -| --- | --- | -| 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 +### Модуль decort_disk | Идентификатор
задачи | Описание | | --- | --- | -| BANS-573 | Удалён параметр `architecture`. | +| BANS-201 | Добавлен параметр `description` в связи с переименованием из `annotation`.| -### Модуль decort_rg +### Модуль decort_lb | Идентификатор
задачи | Описание | | --- | --- | -| BANS-507 | Добавлена возможность удаления сети по умолчанию. | -| BANS-509 | Добавлен параметр `sep_pools` для указания доступных пулов СХД. | -| BANS-7 | Добавлен параметр `recursive_deletion` для удаления непустой РГ. | +| BANS-201 | Добавлен параметр `description` в связи с переименованием из `annotation`.| -### Модуль decort_account +### Модуль decort_vins | Идентификатор
задачи | Описание | | --- | --- | -| BANS-508 | Добавлен параметр `sep_pools` для указания доступных пулов СХД. | - -## Исправления +| BANS-201 | Добавлен параметр `description` в связи с переименованием из `annotation`.| -### Глобальные +### Модуль decort_rg | Идентификатор
задачи | Описание | | --- | --- | -| BANS-511 | При ошибке HTTP-подключения в некоторых случаях работа модуля завершалась ошибкой Python. | +| BANS-201 | Добавлен параметр `description` в связи с переименованием из `annotation`.| -### Модуль decort_bservice - -| Идентификатор
задачи | Описание | -|-------------------------| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| BANS-549 | Модуль требовал параметр `name` вместе с параметром `id`.
Исправлено завершение работы модуля с ошибкой Python при отсутствии параметра `rg_id` при заданном параметре `id`. | +## Удалено -### Модуль decort_kvmvm +### Модуль decort_group | Идентификатор
задачи | Описание | | --- | --- | -| BANS-550 | Отсутствие параметров `cpu` и/или `ram` при заданном параметре `id` вызывало завершение работы модуля **decort_kvmvm** с ошибкой Python. | -| BANS-588 | Исправлена ошибка, при которой модуль производил изменения при незаданных параметрах `data_disks`, `networks`, `tag`, `affinity_label`, `aff_rule`, `aaff_rule`. | +| BANS-656 | Удалён неиспользуемый ключ `config` в возвращаемом словаре. | +| BANS-201 | Удалены неиспользуемые параметры `annotation` и `description`.| ### Модуль decort_disk | Идентификатор
задачи | Описание | | --- | --- | -| BANS-534 | Исправлена ошибка получения данных о привязке диска к виртуальной машине. | -| BANS-557 | Модуль требовал параметр `account_id` или `account_name` при заданном параметре `id`. | -| BANS-558 | Модуль пытался произвести `rename` и `resize` при отсутствующих параметрах `name` и `size` | +| BANS-201 | Удален параметр `annotation` в связи с переименованием в `description`.| -### Модуль decort_group +### Модуль decort_kvmvm | Идентификатор
задачи | Описание | | --- | --- | -| BANS-560 | Модуль требовал параметр `name` при заданном параметре `id`. | -| BANS-561 | Модуль всегда требовал параметр `count`. | -| BANS-562 | Модуль производил обновление сетей при незаданном параметре `networks`. | -| BANS-563 | Модуль производил вызов API `cloudapi/bservice/groupUpdate` при незаданных параметрах. | -| BANS-564 | Модуль завершал свою работу с ошибкой Python если не заданы все необходимые параметры при создании группы. | +| BANS-201 | Удален параметр `annotation` в связи с переименованием в `description`.| -### Модуль decort_osimage +### Модуль decort_lb | Идентификатор
задачи | Описание | | --- | --- | -| BANS-566 | Модуль не удалял шаблонный образ без указания идентификатора аккаунта. | -| BANS-567 | Модуль завершал свою работу с ошибкой запроса к API при попытке удалить несуществующий или уже удалённый образ. | -| BANS-568 | Модуль завершал свою работу ошибкой запроса к API при заданном параметре `virt_id` и незаданном параметре `image_id`. | +| BANS-201 | Удален параметр `annotation` в связи с переименованием в `description`.| -### Модуль decort_lb +### Модуль decort_rg | Идентификатор
задачи | Описание | | --- | --- | -| BANS-569 | Модуль требовал параметр `lb_name` при заданном параметре `lb_id`. | -| BANS-570 | Модуль завершал работу с ошибкой запроса к API при заданных параметрах `lb_name` и `rg_id` существующего балансировщика. | -| BANS-571 | Модуль удалял конфигурации backend и frontend у существующего балансировщика при незаданных параметрах `backends`, `servers`, `frontends`. | +| BANS-201 | Удален параметр `annotation` в связи с переименованием в `description`.| -### Модуль decort_k8s +### Модуль decort_vins | Идентификатор
задачи | Описание | | --- | --- | -| BANS-198 | Модуль завершал свою работу с ошибкой Python при отсутствии необязательных подпараметров `workers.sep_id` и `workers.pool`. | -| BANS-576 | Модуль требовал необязательные параметры при заданном параметре `id`. | -| BANS-578 | Модуль требовал необязательные параметры для изменения группы worker-узлов. | +| BANS-201 | Удален параметр `annotation` в связи с переименованием в `description`.| -### Модуль decort_rg +### Модуль decort_bservice | Идентификатор
задачи | Описание | | --- | --- | -| BANS-546 | Модуль требовал параметр `account_id` или `account_name` при заданном параметре `rg_id`. | +| BANS-201 | Удалены неиспользуемые параметры `annotation` и `description`.| -### Модуль decort_account_info +### Модуль decort_k8s | Идентификатор
задачи | Описание | | --- | --- | -| BANS-547 | Модуль ожидал тип `int` для параметра `ext_ip` вместо типа `str`. | +| BANS-201 | Удален неиспользуемый параметр `annotation`.| + +## Исправлено -### Модуль decort_pfw +### Модуль decort_kvmvm | Идентификатор
задачи | Описание | | --- | --- | -| BANS-577 | Модуль удаляет правила переадресации портов при незаданном параметре `rules`. | +| BANS-9 | Исправлена ошибка, из-за которой модуль не устанавливал параметр `description` при создании виртуальной машины. | +| BANS-13 | Исправлена ошибка, из-за которой модуль не возвращал ошибку при попытке уменьшить размер загрузочного диска. | diff --git a/README.md b/README.md index 0446b33..8699122 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ | Версия платформы | Версия модулей 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 | | 3.8.8, 3.8.9 | 5.2.6 | | 3.8.7 | 5.2.5 | diff --git a/library/decort_account.py b/library/decort_account.py index a7796cb..c2325b1 100644 --- a/library/decort_account.py +++ b/library/decort_account.py @@ -1,23 +1,12 @@ #!/usr/bin/python -# Copyright: ... -# ... - DOCUMENTATION = r''' --- module: decort_account -version_added: "2.16" - description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' -# EXAMPLES = r''' -# ''' - -# RETURN = r''' -# ''' - from typing import Iterable from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.decort_utils import DecortController diff --git a/library/decort_account_info.py b/library/decort_account_info.py index b39b1a9..6eb09a3 100644 --- a/library/decort_account_info.py +++ b/library/decort_account_info.py @@ -1,23 +1,12 @@ #!/usr/bin/python -# Copyright: ... -# ... - DOCUMENTATION = r''' --- module: decort_account_info -version_added: "2.16" - description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' -# EXAMPLES = r''' -# ''' - -# RETURN = r''' -# ''' - from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.decort_utils import DecortController diff --git a/library/decort_bservice.py b/library/decort_bservice.py index da4bb71..ce791c8 100644 --- a/library/decort_bservice.py +++ b/library/decort_bservice.py @@ -1,22 +1,17 @@ #!/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) -# -# -# Author: Alexey Dankov (alexey Dankov@digitalenergy.online) +DOCUMENTATION = r''' +--- +module: decort_bservice -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). +''' from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import env_fallback from ansible.module_utils.decort_utils import * + class decort_bservice(DecortController): def __init__(self,arg_amodule): super(decort_bservice, self).__init__(arg_amodule) @@ -157,7 +152,6 @@ class decort_bservice(DecortController): return dict( account_id=dict(type='int', required=False), account_name=dict(type='str', required=False, default=''), - annotation=dict(type='str', required=False, default=''), app_id=dict(type='str', required=False, fallback=(env_fallback, ['DECORT_APP_ID'])), @@ -193,7 +187,6 @@ class decort_bservice(DecortController): id=dict(type='int', required=False, default=0), rg_id=dict(type='int', default=0), 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), workflow_callback=dict(type='str', required=False), workflow_context=dict(type='str', required=False),) diff --git a/library/decort_disk.py b/library/decort_disk.py index 5df1870..c910972 100644 --- a/library/decort_disk.py +++ b/library/decort_disk.py @@ -1,256 +1,18 @@ #!/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) -# -# -# Author: Sergey Shubin (sergey.shubin@digitalenergy.online) -# - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - -DOCUMENTATION = ''' +DOCUMENTATION = r''' --- module: decort_disk -short_description: Manage Disks (virtualized storage resources) in DECORT cloud -description: > - 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 -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 +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' - - from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import env_fallback from ansible.module_utils.decort_utils import * + class decort_disk(DecortController): def __init__(self,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, name = self.amodule.params['name'], - description=self.amodule.params['annotation'], + description=self.amodule.params['description'], size=self.amodule.params['size'], type=self.amodule.params['type'], iops=self.amodule.params['iops'], @@ -422,7 +184,7 @@ class decort_disk(DecortController): return dict( account_id=dict(type='int', required=False, default=0), 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', required=False, fallback=(env_fallback, ['DECORT_APP_ID'])), diff --git a/library/decort_group.py b/library/decort_group.py index 71d1c07..7126e8a 100644 --- a/library/decort_group.py +++ b/library/decort_group.py @@ -1,22 +1,17 @@ #!/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) -# -# -# Author: Alexey Dankov (alexey.dankov@digitalenergy.online) +DOCUMENTATION = r''' +--- +module: decort_group -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). +''' from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import env_fallback from ansible.module_utils.decort_utils import * + class decort_group(DecortController): def __init__(self,arg_amodule): super(decort_group, self).__init__(arg_amodule) @@ -154,7 +149,6 @@ class decort_group(DecortController): state="CHECK_MODE", account_id=0, rg_id=0, - config=None, ) if check_mode: @@ -180,7 +174,6 @@ class decort_group(DecortController): return dict( account_id=dict(type='int', required=False), account_name=dict(type='str', required=False, default=''), - annotation=dict(type='str', required=False, default=''), app_id=dict(type='str', required=False, 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), workflow_callback=dict(type='str', required=False), workflow_context=dict(type='str', required=False),) diff --git a/library/decort_jwt.py b/library/decort_jwt.py index 618b05b..23b7713 100644 --- a/library/decort_jwt.py +++ b/library/decort_jwt.py @@ -1,86 +1,10 @@ #!/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) -# -# -# Author: Sergey Shubin (sergey.shubin@digitalenergy.online) -# - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - -DOCUMENTATION = ''' +DOCUMENTATION = r''' --- 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 = ''' -- 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 +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' import requests @@ -88,6 +12,7 @@ import requests from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import env_fallback + def decort_jwt_parameters(): """Build and return a dictionary of parameters expected by decort_jwt module in a form accepted by AnsibleModule utility class""" diff --git a/library/decort_k8s.py b/library/decort_k8s.py index 9c5fe2b..5aeafeb 100644 --- a/library/decort_k8s.py +++ b/library/decort_k8s.py @@ -1,83 +1,39 @@ #!/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', - 'status': ['preview'], - 'supported_by': 'community'} -DOCUMENTATION = ''' ---- + +DOCUMENTATION = r''' --- -''' +module: decort_k8s -EXAMPLES = ''' -- 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 +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import env_fallback from ansible.module_utils.decort_utils import * +from copy import deepcopy + class decort_k8s(DecortController): def __init__(self,arg_amodule): super(decort_k8s, self).__init__(arg_amodule) - + validated_acc_id = 0 validated_rg_id = 0 validated_rg_facts = None validated_k8ci_id = 0 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: self.result['failed'] = True self.result['changed'] = False @@ -208,6 +164,16 @@ class decort_k8s(DecortController): return 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'], self.amodule.params['k8ci_id'], self.amodule.params['rg_id'], @@ -219,7 +185,7 @@ class decort_k8s(DecortController): self.amodule.params['master_disk'], self.amodule.params['master_sepid'], self.amodule.params['master_pool'], - self.amodule.params['workers'][0], + target_wgs[0], self.amodule.params['extnet_id'], self.amodule.params['with_lb'], self.amodule.params['ha_lb'], @@ -232,6 +198,7 @@ class decort_k8s(DecortController): self.amodule.params['oidc_cert'], self.amodule.params['description'], self.amodule.params['extnet_only'], + master_chipset, ) if not k8s_id: @@ -245,11 +212,13 @@ class decort_k8s(DecortController): k8s_name=self.amodule.params['name'], rg_id=self.rg_id, check_state=False) - + if self.k8s_id: - self.k8s_should_exist = True - if self.k8s_id and len(self.amodule.params['workers'])>1 : - self.k8s_workers_modify(self.k8s_info,self.amodule.params['workers']) + self.k8s_should_exist = True + self.k8s_workers_modify( + arg_k8swg=self.k8s_info, + arg_modwg=target_wgs, + ) return def destroy(self): @@ -259,6 +228,13 @@ class decort_k8s(DecortController): return 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: # K8s info updating 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" #check groups and modify if needed 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: self.k8s_info = self.k8s_get_by_id(k8s_id=self.k8s_id) #TODO check workers metadata and modify if needed return + @staticmethod def build_parameters(): return dict( account_id=dict(type='int', required=False), account_name=dict(type='str', required=False, default=''), - annotation=dict(type='str', required=False, default=''), app_id=dict(type='str', required=False, fallback=(env_fallback, ['DECORT_APP_ID'])), @@ -369,6 +345,10 @@ class decort_k8s(DecortController): type='list', elements='str', ), + chipset=dict( + type='str', + choices=['Q35', 'i440fx'], + ), ), ), 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), verify_ssl=dict(type='bool', required=False, default=True), 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(): module_parameters = decort_k8s.build_parameters() diff --git a/library/decort_kvmvm.py b/library/decort_kvmvm.py index 29ab6b3..72c32e4 100644 --- a/library/decort_kvmvm.py +++ b/library/decort_kvmvm.py @@ -1,355 +1,17 @@ #!/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', - 'status': ['preview'], - 'supported_by': 'community'} - -DOCUMENTATION = ''' + +DOCUMENTATION = r''' --- 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: - - 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 +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import env_fallback from ansible.module_utils.decort_utils import * + class decort_kvmvm(DecortController): def __init__(self, arg_amodule): # call superclass constructor first @@ -420,6 +82,37 @@ class decort_kvmvm(DecortController): self.comp_should_exist = True 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 def check_amodule_args(self): @@ -441,32 +134,15 @@ class decort_kvmvm(DecortController): ) self.exit(fail=True) - # 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) - + aparam_custom_fields = self.aparams['custom_fields'] + if aparam_custom_fields is not None: if ( - self.aparams['sep_id'] is not None - and self.aparams['boot_disk'] is None + aparam_custom_fields['disable'] + and aparam_custom_fields['fields'] is not None ): self.message( - 'Check for parameter "sep_id" failed: ' - '"image_id" or "image_name" or "boot_disk" ' - 'must be specified to set sep_id.' + 'Check for parameter "custom_fields" failed: ' + '"fields" cannot be set if "disable" is True.' ) self.exit(fail=True) @@ -579,13 +255,27 @@ class decort_kvmvm(DecortController): cloud_init_params = self.amodule.params['ci_user_data'] else: 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(): - case 'q35': - chipset = 'Q35' - case 'i440fx': - chipset = 'i440fx' + cpu_pin = self.aparams['cpu_pin'] + if cpu_pin is None: + cpu_pin = False + + 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 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 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 self.comp_id = self.kvmvm_provision(rg_id=self.rg_id, @@ -593,12 +283,16 @@ class decort_kvmvm(DecortController): cpu=self.amodule.params['cpu'], ram=self.amodule.params['ram'], boot_disk=validated_bdisk_size, image_id=image_id, - annotation=self.amodule.params['annotation'], + description=self.amodule.params['description'], userdata=cloud_init_params, 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, start_on_create=start_compute, - chipset=chipset) + chipset=self.amodule.params['chipset'], + cpu_pin=cpu_pin, + hp_backed=hp_backed, + numa_affinity=numa_affinity, + custom_fields=custom_fields_fields) self.comp_should_exist = True # Originally we would have had to re-read comp_info after VM was provisioned @@ -713,15 +407,44 @@ class decort_kvmvm(DecortController): **self.compute_update_args, ) + aparam_custom_fields = self.amodule.params['custom_fields'] + if aparam_custom_fields is not None: + compute_custom_fields = self.compute_get_custom_fields( + compute_id=self.comp_info['id'], + ) + 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 @property def compute_update_args(self) -> dict: result_args = {} - aparam_name = self.amodule.params['name'] - if aparam_name is not None and aparam_name != self.comp_info['name']: - result_args['name'] = aparam_name + params_to_check = { + 'name': '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 @@ -756,6 +479,10 @@ class decort_kvmvm(DecortController): tags={}, chipset="", interfaces=[], + cpu_pin="", + hp_backed="", + numa_affinity="", + custom_fields={}, ) if check_mode or self.comp_info is None: @@ -812,8 +539,46 @@ class decort_kvmvm(DecortController): 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.compute_get_custom_fields( + compute_id=self.comp_info['id'], + ) + 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 def build_parameters(): """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( account_id=dict(type='int', required=False, default=0), account_name=dict(type='str', required=False, default=''), - annotation=dict(type='str', - default='', - required=False), + description=dict(type='str', required=False), app_id=dict(type='str', required=False, fallback=(env_fallback, ['DECORT_APP_ID'])), @@ -917,10 +680,52 @@ class decort_kvmvm(DecortController): workflow_context=dict(type='str', required=False), chipset=dict( type='str', - default='i440fx', - choices=['Q35', 'q35', 'I440FX', 'i440fx'] + choices=['Q35', '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: # 1) authenticate to DECORT controller & validate authentication by issuing API call - done when creating DECSController @@ -980,6 +785,8 @@ def main(): pass if subj.comp_id: + subj.check_amodule_args_for_change() + if subj.comp_info['status'] in ("DISABLED", "MIGRATING", "DELETING", "DESTROYING", "ERROR", "REDEPLOYING"): # cannot do anything on the existing Compute in the listed states subj.error() # was subj.nop() @@ -1011,6 +818,8 @@ def main(): elif amodule.params['state'] == 'paused': subj.error() else: + subj.check_amodule_args_for_create() + # Preexisting Compute of specified identity was not found. # If requested state is 'absent' - nothing to do if amodule.params['state'] == 'absent': diff --git a/library/decort_lb.py b/library/decort_lb.py index f40f7fc..dced4a6 100644 --- a/library/decort_lb.py +++ b/library/decort_lb.py @@ -1,28 +1,17 @@ #!/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', - 'status': ['preview'], - 'supported_by': 'community'} +DOCUMENTATION = r''' +--- +module: decort_lb -DOCUMENTATION = ''' - TODO +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' -EXAMPLES = ''' - TODO -''' - - from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import env_fallback from ansible.module_utils.decort_utils import * + class decort_lb(DecortController): def __init__(self,arg_amodule) -> None: super(decort_lb,self).__init__(arg_amodule) @@ -113,7 +102,7 @@ class decort_lb(DecortController): self.rg_id,self.vins_id, self.amodule.params['ext_net_id'], self.amodule.params['ha_lb'], - self.amodule.params['annotation']) + self.amodule.params['description']) if self.lb_id and (self.amodule.params['backends'] or self.amodule.params['frontends']): 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( account_id=dict(type='int', required=False), 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', required=False, fallback=(env_fallback, ['DECORT_APP_ID'])), diff --git a/library/decort_osimage.py b/library/decort_osimage.py index 944041f..6fa7704 100644 --- a/library/decort_osimage.py +++ b/library/decort_osimage.py @@ -1,285 +1,10 @@ #!/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) -# - -# -# Author: Sergey Shubin (sergey.shubin@digitalenergy.online) -# - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - -DOCUMENTATION = ''' + +DOCUMENTATION = r''' --- 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" -author: - - Sergey Shubin -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 +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' 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 * + class decort_osimage(DecortController): def __init__(self,amodule): super(decort_osimage, self).__init__(amodule) diff --git a/library/decort_pfw.py b/library/decort_pfw.py index b8625b9..3028fcf 100644 --- a/library/decort_pfw.py +++ b/library/decort_pfw.py @@ -1,180 +1,10 @@ #!/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) -# -# -# Author: Sergey Shubin (sergey.shubin@digitalenergy.online) -# - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - -DOCUMENTATION = ''' +DOCUMENTATION = r''' --- 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 -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 = ''' -- 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: - - +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' from ansible.module_utils.basic import AnsibleModule diff --git a/library/decort_rg.py b/library/decort_rg.py index a4f45a2..04dd72e 100644 --- a/library/decort_rg.py +++ b/library/decort_rg.py @@ -1,207 +1,10 @@ #!/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) -# - -# -# Author: Sergey Shubin (sergey.shubin@digitalenergy.online) -# - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - -DOCUMENTATION = ''' + +DOCUMENTATION = r''' --- 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 -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 = ''' -- 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 +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' 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 * + class decort_rg(DecortController): def __init__(self,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.amodule.params['rg_name'], self.amodule.params['owner'], - self.amodule.params['annotation'], + self.amodule.params['description'], self.amodule.params['resType'], self.amodule.params['def_netType'], self.amodule.params['ipcidr'], @@ -441,7 +245,7 @@ class decort_rg(DecortController): account_id=dict(type='int', required=False), account_name=dict(type='str', required=False, default=''), access=dict(type='dict'), - annotation=dict(type='str', required=False, default=''), + description=dict(type='str', required=False, default=''), app_id=dict(type='str', required=False, fallback=(env_fallback, ['DECORT_APP_ID'])), diff --git a/library/decort_user_info.py b/library/decort_user_info.py index 8173bf8..7519381 100644 --- a/library/decort_user_info.py +++ b/library/decort_user_info.py @@ -1,23 +1,12 @@ #!/usr/bin/python -# Copyright: ... -# ... - DOCUMENTATION = r''' --- module: decort_user_info -version_added: "2.16" - description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' -# EXAMPLES = r''' -# ''' - -# RETURN = r''' -# ''' - from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.decort_utils import DecortController diff --git a/library/decort_vins.py b/library/decort_vins.py index 49447cf..224b9d7 100644 --- a/library/decort_vins.py +++ b/library/decort_vins.py @@ -1,239 +1,10 @@ #!/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) -# - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - -DOCUMENTATION = ''' +DOCUMENTATION = r''' --- 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 = ''' -- 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 +description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' 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 * + class decort_vins(DecortController): def __init__(self,arg_amodule): super(decort_vins, self).__init__(arg_amodule) @@ -337,7 +109,7 @@ class decort_vins(DecortController): self.acc_id, self.rg_id, self.amodule.params['ipcidr'], 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']: _, self.vins_facts = self.vins_find(self.vins_id) @@ -473,7 +245,7 @@ class decort_vins(DecortController): return dict( account_id=dict(type='int', required=False,default=0), 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', required=False, fallback=(env_fallback, ['DECORT_APP_ID'])), diff --git a/module_utils/decort_utils.py b/module_utils/decort_utils.py index 82039a8..9d30f1d 100644 --- a/module_utils/decort_utils.py +++ b/module_utils/decort_utils.py @@ -1,33 +1,4 @@ -# -# 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 copy import deepcopy from datetime import datetime from enum import Enum import json @@ -1095,11 +1066,6 @@ class DecortController(object): 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']) 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, size=new_size) @@ -1405,11 +1371,15 @@ class DecortController(object): boot_disk, image_id, chipset: Literal['Q35', 'i440fx'] = 'i440fx', - annotation="", + description="", userdata=None, sep_id=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', + custom_fields: Optional[dict] = None): """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. @@ -1419,7 +1389,7 @@ class DecortController(object): @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) 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 (bool) start_on_create: set to False if you want the VM to be provisioned in HALTED state. @@ -1447,8 +1417,8 @@ class DecortController(object): 'chipset': chipset, 'withoutBootDisk': not boot_disk, } - if annotation: - api_params['decs'] = annotation + if description: + api_params['desc'] = description if not image_id: api_url = '/restmachine/cloudapi/kvmx86/createBlank' @@ -1456,7 +1426,12 @@ class DecortController(object): api_url = '/restmachine/cloudapi/kvmx86/create' api_params['imageId'] = image_id api_params['start'] = start_on_create + api_params['cpupin'] = cpu_pin + api_params['hpBacked'] = hp_backed + api_params['numaAffinity'] = numa_affinity + if custom_fields is not None: + api_params['customFields'] = json.dumps(custom_fields) if userdata: api_params['userdata'] = json.dumps(userdata) # we need to pass a string object as "userdata" @@ -1925,28 +1900,104 @@ class DecortController(object): @waypoint @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' - api_response = self.decort_api_call( + self.decort_api_call( arg_req_function=requests.post, arg_api_name='/restmachine/cloudapi/compute/update', arg_params={ 'computeId': compute_id, 'name': name, + 'chipset': chipset, + 'cpupin': cpu_pin, + 'hpBacked': hp_backed, + 'numaAffinity': numa_affinity, + 'desc': description, }, ) self.set_changed() - if name is not None: - self.message( - self.MESSAGES.obj_renamed( - obj=OBJ, - id=compute_id, - new_name=name, + params_to_check = { + 'name': name, + 'chipset': chipset, + 'cpu_pin': cpu_pin, + 'hp_backed': hp_backed, + '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 @@ -4928,21 +4979,44 @@ class DecortController(object): self.result['changed'] = True return - def k8s_check_new_worker_groups_params( - self, - worker_groups: list[dict[str, Any]] + def k8s_check_worker_group_for_recreate( + self, + 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 - for new_wg_params in worker_groups: - for new_wg_required_param in ['num', 'cpu', 'ram', 'disk']: - if new_wg_params[new_wg_required_param] is None: - self.message( - f'Parameter "{new_wg_required_param}" is required' - f' for new worker group "{new_wg_params["name"]}"' - ) - check_error = True - if check_error: - self.exit(fail=True) + _, vm_info, _ = self._compute_get_by_id( + comp_id=existing_wg['detailedInfo'][0]['id'], + ) + if ( + vm_info.get('userdata', {}) + != target_wg['ci_user_data'] + ): + target_wg['need_to_recreate'] = True def k8s_provision(self, k8s_name, k8ci_id, @@ -4966,41 +5040,25 @@ class DecortController(object): kubeproxy_conf, join_conf, oidc_cert, - annotation, + description, extnet_only, + master_chipset: Literal['Q35', 'i440fx'] = 'i440fx', ): 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: self.result['failed'] = False self.result['msg'] = ("k8s_provision() in check mode. Provision k8s '{}' in RG ID {} " "was requested.").format(k8s_name, rg_id) 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_params = dict(name=k8s_name, rgId=rg_id, k8ciId=k8ci_id, vinsId=vins_id, - workerGroupName=def_wg_name, + workerGroupName=default_worker['name'], networkPlugin=plugin, masterNum=master_count, masterCpu=master_cpu, @@ -5008,15 +5066,15 @@ class DecortController(object): masterDisk=master_disk, masterSepId=master_sepid, masterSepPool=master_pool, - workerNum=def_wg_count, - workerCpu=def_wg_cpu, - workerRam=def_wg_ram, - workerDisk=def_wg_disk, - workerSepId=def_wg_sepid, - workerSepPool=def_wg_pool, - labels=def_wg_lab, - taints=def_wg_taints, - annotations=def_wg_ann, + workerNum=default_worker['num'], + workerCpu=default_worker['cpu'], + workerRam=default_worker['ram'], + workerDisk=default_worker['disk'], + workerSepId=default_worker['sep_id'], + workerSepPool=default_worker['pool'], + labels=default_worker['labels'], + taints=default_worker['taints'], + annotations=default_worker['annotations'], extnetId=extnet_id, withLB=with_lb, highlyAvailableLB=ha_lb, @@ -5026,9 +5084,10 @@ class DecortController(object): kubeletConfiguration=json.dumps(kublet_conf) if kublet_conf else None, kubeProxyConfiguration=json.dumps(kubeproxy_conf)if kubeproxy_conf else None, joinConfiguration=json.dumps(join_conf)if join_conf else None, - desc=annotation, - userData=def_wg_ud, + desc=description, + userData=json.dumps(default_worker['ci_user_data']), extnetOnly=extnet_only, + chipset=master_chipset, ) upload_files = None @@ -5104,23 +5163,64 @@ class DecortController(object): for rec in arg_modwg: if rec['name'] not in wg_inner: 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 rec_out in arg_modwg: - if rec_inn['name'] == rec_out['name']: - if ( - rec_out['num'] is not None - and rec_inn['num'] != rec_out['num'] - ): - count = rec_inn['num']-rec_out['num'] - cmp_list = [] - if count > 0: - for cmp in rec_inn['detailedInfo'][-count:]: - cmp_list.append(cmp['id']) - wg_moddel_list.append({rec_inn['id']:cmp_list}) - if count < 0: - wg_modadd_list.append({rec_inn['id']:abs(count)}) + for wg in arg_k8swg['k8sGroups']['workers']: + for target_wg in arg_modwg: + if wg['name'] == target_wg['name']: + self.k8s_check_worker_group_for_recreate( + target_wg=target_wg, + existing_wg=wg, + ) + if target_wg.get('need_to_recreate'): + wg_del_list.append(wg['id']) + wg_to_create = deepcopy(target_wg) + for param, value in wg_to_create.items(): + if param == 'ci_user_data' and value is None: + _, vm_info, _ = self._compute_get_by_id( + comp_id=wg['detailedInfo'][0]['id'], + ) + 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: for wgid in wg_del_list: @@ -5129,22 +5229,24 @@ class DecortController(object): self.result['changed'] = True if 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 = { 'k8sId': self.k8s_id, - 'name': wg['name'], - 'workerNum': wg['num'], - 'workerCpu': wg['cpu'], - 'workerRam': wg['ram'], - 'workerDisk': wg['disk'], - 'workerSepId': wg['sep_id'], - 'workerSepPool': wg['pool'], - 'labels': wg['labels'], - 'taints': wg['taints'], - 'annotations': wg['annotations'], - 'userData': ( - json.dumps(wg['ci_user_data']) - if wg['ci_user_data'] else None - ), + 'name': wg_to_create['name'], + 'workerNum': wg_to_create['num'], + 'workerCpu': wg_to_create['cpu'], + 'workerRam': wg_to_create['ram'], + 'workerDisk': wg_to_create['disk'], + 'workerSepId': wg_to_create['sep_id'], + 'workerSepPool': wg_to_create['pool'], + 'labels': wg_to_create['labels'], + 'taints': wg_to_create['taints'], + 'annotations': wg_to_create['annotations'], + 'userData': json.dumps(wg_to_create['ci_user_data']), + 'chipset': wg_to_create['chipset'], } wg_add_response = self.decort_api_call( arg_req_function=requests.post, @@ -5160,7 +5262,7 @@ class DecortController(object): # average time to add a single worker group * reserve 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 sleep_interval = 5 while True: @@ -5174,9 +5276,9 @@ class DecortController(object): case 'SCHEDULED': if task_schedule_timeout <= 0: self.message( - f'Time to schedule task' - f'to add worker group {wg["name"]}' - f'has been exceeded.' + f'Time to schedule task to add worker ' + f'group {wg_to_create["name"]} has been ' + f'exceeded.' f'\nTask details: {task_link}' ) self.exit(fail=True) @@ -5185,38 +5287,54 @@ class DecortController(object): case 'PROCESSING': if wg_add_timeout <= 0: self.message( - f'Time to add worker group {wg["name"]} ' - f'has been exceeded.' - f'\nTask details: {task_link}' + f'Time to add worker group ' + f'{wg_to_create["name"]} has been ' + f'exceeded.\nTask details: {task_link}' ) self.exit(fail=True) time.sleep(sleep_interval) wg_add_timeout -= sleep_interval case 'ERROR': self.result['msg'] = ( - f'Adding worker group {wg["name"]} failed: ' - f'{response_data["error"]}.' + f'Adding worker group {wg_to_create["name"]} ' + f'failed: {response_data["error"]}.' f'\nTask details: {task_link}' ) self.exit(fail=True) case 'OK': self.message( - f'Worker group {wg["name"]} created successful' + f'Worker group {wg_to_create["name"]} ' + f'created successful' ) break if wg_modadd_list: for wg in wg_modadd_list: - for key in wg: - api_params = dict(k8sId=self.k8s_id,workersGroupId=key,num=wg[key]) - api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/k8s/workerAdd", api_params) - self.result['changed'] = True + api_params = { + 'k8sId': self.k8s_id, + 'workersGroupId': wg['wg_id'], + '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: for wg in wg_moddel_list: - for key in wg: - for cmpid in wg[key]: - api_params = dict(k8sId=self.k8s_id,workersGroupId=key,workerId=cmpid) - api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/k8s/deleteWorkerFromGroup", api_params) - self.result['changed'] = True + for compute_id in wg['compute_ids']: + api_params = { + 'k8sId': self.k8s_id, + 'workersGroupId': wg['wg_id'], + '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 return @@ -5688,7 +5806,7 @@ class DecortController(object): self.amodule.fail_json(**self.result) 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. If critical error occurs the embedded call to API function will abort further execution of the script and relay error to Ansible. @@ -5717,7 +5835,7 @@ class DecortController(object): vinsId=vins_id, highlyAvailable=ha_status, start=start, - desc=annotation + desc=description ) 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. diff --git a/wiki/6.1.0/Home.md b/wiki/6.1.0/Home.md new file mode 100644 index 0000000..2835851 --- /dev/null +++ b/wiki/6.1.0/Home.md @@ -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) - получение информации о пользователе \ No newline at end of file diff --git a/wiki/6.1.0/введение.md b/wiki/6.1.0/введение.md new file mode 100644 index 0000000..62640fd --- /dev/null +++ b/wiki/6.1.0/введение.md @@ -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 +``` + +## Авторизация + +### Общие параметры модулей для авторизации + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ПараметрТипОписание
+ app_id + + (str) + + Идентификатор приложения, использующийся для подключения к контроллеру + облачной платформы DECORT в режиме authenticator: oauth2. + Данный параметр является обязательным для указанного режима. Если + параметр не задан в playbook, модуль будет использовать значение + переменной окружения DECORT_APP_ID. +
+ app_secret + + (str) + + Секретный ключ приложения, который используется для подключения к + контроллеру облачной платформы DECORT в режиме + authenticator: oauth2. Данный параметр является + обязательным для указанного режима. Так как он содержит секретную + информацию, то его не рекомендуется задавать непосредственно в + playbook. Если параметр не задан в playbook, то модуль будет + использовать значение переменной окружения + DECORT_APP_SECRET. +
+ authenticator + + (str) +
Значения: +
oauth2 +
jwt +
+ Режим аутентификации при подключении к контроллеру облачной платформы + DECORT. Обязательный параметр. +
+ controller_url + + (str) + + URL контроллера, соответствующего экземпляру облачной платформы + DECORT. Данный параметр является обязательным. +
+ jwt + + (str) + + JSON Web Token (JWT), который будет использоваться для подключения + к контроллеру облачной платформы DECORT в режиме + authenticator: jwt. Данный параметр является + обязательным для указанного режима. Так как он содержит + потенциально секретную информацию, а сам JWT, как правило, + имеет ограниченное время жизни, то его не рекомендуется задавать + непосредственно в playbook. Если этот параметр не определен в + playbook, то модуль будет использовать значение переменной + окружения DECORT_JWT. +
+ oauth2_url + + (str) + + URL авторизационного сервера, работающего по протоколу Oauth2, + который должен использоваться в режиме + authenticator: oauth2. Данный параметр является + обязательным для указанного режима. Если параметр не задан в + playbook, модуль будет использовать значение переменной + окружения DECORT_OAUTH2_URL. +
+ verify_ssl + + (bool) +
Default: true +
+ Позволяет отключить проверку SSL сертификатов при выполнении API + вызовов в адрес контроллера облачной инфраструктуры, например, + при работе с изолированной облачной инфраструктурой, использующей + самоподписанные сертификаты. Применяйте данный параметр с + осторожностью, предпочтительно в защищенных средах. +
+ +### Пример авторизации с помощью 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 }}" +``` \ No newline at end of file diff --git a/wiki/6.1.0/модуль-decort_account.md b/wiki/6.1.0/модуль-decort_account.md new file mode 100644 index 0000000..528e5ce --- /dev/null +++ b/wiki/6.1.0/модуль-decort_account.md @@ -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#общие-параметры-модулей-для-авторизации)): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ПараметрТипОписание
+ + access_emails + + + (bool) + + Выключение/включение отправки пользователям на эл. почту уведомлений о предоставлении доступа к ресурсам. +
+ + acl + + + (dict) + + Целевые права доступа. +
+ mode + + (str) +
Значения: +
match +
revoke +
update +
Default: update +
+ Режим изменения прав доступа для указанных пользователей. +
match - привести в соответствие для указанных + пользователей, удалить предоставленные для других. +
revoke - отозвать для указанных пользователей, + если предоставлены. +
update - привести в соответствие для указанных + пользователей, оставить без изменения предоставленные для + других. +
+ users + + (list) + + Список словарей, описывающих права доступа пользователей. +
Обязательный параметр. +
+ rights + + (str) +
Значения: +
R +
RCX +
ARCXDU +
Default: R +
+ Права доступа. +
При mode: revoke не используется. +
При mode: match и mode: update + права ARCXDU считаются соответствующими + правам CXDRAU. +
+ id + + (str) + + Идентификатор пользователя. +
Обязательный параметр. +
+ id + + (int) + + Идентификатор целевого аккаунта. +
Обязательный параметр, если не задан параметр + name. +
+ + name + + + (str) + + Имя целевого аккаунта. +
Может быть альтернативой параметру id, + за исключением случая, когда необходимо получить + информацию о безвозвратно удалённом объекте. +
Если задан совместно с параметром id, + то используется для переименования (целевое имя). +
+ + quotas + + + (dict) + + Целевые квоты. +
+ cpu + + (int) + + Количество виртуальных процессоров. +
-1 - удалить квоту. +
+ disks_size + + (int) + + Объём дисков в ГБ. +
-1 - удалить квоту. +
+ ext_traffic + + (int) + + Объём трафика внешних сетей. +
-1 - удалить квоту. +
+ gpu + + (int) + + Количество графических процессоров. +
-1 - удалить квоту. +
+ public_ip + + (int) + + Количество внешних IP-адресов. +
-1 - удалить квоту. +
+ ram + + (int) + + Объём оперативной памяти в МБ. +
-1 - удалить квоту. +
+ + sep_pools + + + (list) + + Список словарей, описывающих доступные пулы СХД. +
+ sep_id + + (int) + + Идентификатор системы хранения данных. +
+ pool_names + + (list) + + Список названий пулов системы хранения данных. +
+ + state + + + (str) +
Значения: +
absent +
absent_permanently +
confirmed +
disabled +
present +
Default: present +
+ Целевое состояние. +
absent - удалён в корзину, безвозвратно удалён + или не существует. Если существует и не удалён, то будет удалён + в корзину. +
absent_permanently - безвозвратно удалён или + не существует. Если существует и не удалён или удалён в корзину, + то будет безвозвратно удалён. +
При значениях absent и absent_permanently + использование других параметров модуля, вызывающих изменение объекта, + не допускается. +
confirmed - включён. Если выключен, то будет включён. + Если удалён в корзину, то будет восстановлен из корзины. +
disabled - выключен. Если включён, то будет выключен. + Если удалён в корзину, то будет восстановлен из корзины и выключен. +
present - существует и не удалён. Если удалён в + корзину, то будет восстановлен из корзины. +
+ +## Возвращаемые значения + +Модуль **decort_account** возвращает информацию об аккаунте в виде словаря `facts` со следующими ключами: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ acl + + list + + Список словарей, описывающих доступы пользователей. +
+ canBeDeleted + + bool + + Может ли быть удалён. +
+ right + + str + + Права. +
+ status + + str + + Статус. +
+ type + + str + + Тип. +
+ userGroupId + + str + + Идентификатор пользователя или группы пользователей. +
+ company + + str + + Название компании. +
+ companyurl + + str + + URL компании. +
+ computeFeatures + + list + + Список дополнительных возможностей гипервизора, доступных ВМ. +
+ computes_amount + + dict + + Количество ВМ по состоянию. +
+ started + + int + + Количество запущенных ВМ. +
+ stopped + + int + + Количество остановленных ВМ. +
+ cpu_allocation_parameter + + str + + Режим выделения ЦП. +
+ cpu_allocation_ratio + + str + + Коэффициент для режима выделения ЦП. +
+ createdBy + + str + + Идентификатор пользователя, который создал. +
+ createdTime + + int + + Unix-время создания. +
+ createdTime_readable + + str + + Дата и время создания. +
+ deactivationTime + + int + + Unix-время выключения. +
+ deactivationTime_readable + + str + + Дата и время выключения. +
+ deletedBy + + str + + Идентификатор пользователя, который удалил. +
+ deletedTime + + int + + Unix-время удаления. +
+ deletedTime_readable + + str + + Дата и время удаления. +
+ displayname + + str + + Отображаемое имя. +
+ id + + int + + Идентификатор. +
+ name + + str + + Имя. +
+ resourceLimits + + dict + + Квоты на ресурсы. +
+ CU_C + + int + + Количество виртуальных процессоров. +
+ CU_D + + int + + Объём диска в ГБ. +
+ CU_DM + + int + + Объём дисков в ГБ. +
+ CU_I + + int + + Количество внешних IP-адресов. +
+ CU_M + + float + + Объём оперативной памяти в МБ. +
+ CU_NP + + int + + Объём трафика внешних сетей. +
+ gpu_units + + int + + Количество графических процессоров. +
+ sendAccessEmails + + bool + + Отправка пользователям на эл. почту уведомлений о предоставлении доступа. +
+ status + + str + + Статус. +
+ uniqPools + + list + + Список доступных пулов СХД. +
+ updatedTime + + int + + Unix-время обновления. +
+ updatedTime_readable + + str + + Дата и время обновления. +
+ vins + + list + + Список идентификаторов внутренних сетей на уровне аккаунта. +
+ vinses_amount + + int + + Количество внутренних сетей. +
+ +## Примеры использования + +### Удалить + +#### В корзину +``` +- 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 +``` diff --git a/wiki/6.1.0/модуль-decort_account_info.md b/wiki/6.1.0/модуль-decort_account_info.md new file mode 100644 index 0000000..ff5563d --- /dev/null +++ b/wiki/6.1.0/модуль-decort_account_info.md @@ -0,0 +1,3805 @@ +# Модуль decort_account_info +## Обзор модуля + +Модуль **decort_account_info** предназначен для получения следующей информации об аккаунте: +- **основная информация** (см. [возвращаемые значения](#основная-информация) и [примеры](#получение-основной-информации-об-аккаунте)) +- **используемые и зарезервированные ресурсы** (см. [параметр resource_consumption](#resource_consumption), [возвращаемые значения](#используемые-и-зарезервированные-ресурсы) и [примеры](#получение-информации-об-используемых-и-зарезервированных-ресурсах-аккаунта)) +- **ресурсные группы** (см. [параметр resource_groups](#resource_groups), [возвращаемые значения](#ресурсные-группы) и [примеры](#получение-информации-о-ресурсных-группах)) +- **виртуальные машины** (см. [параметр computes](#computes), [возвращаемые значения](#виртуальные-машины) и [примеры](#получение-информации-о-виртуальных-машинах)) +- **внутренние сети** (см. [параметр vinses](#vinses), [возвращаемые значения](#внутренние-сети) и [примеры](#получение-информации-о-внутренних-сетях)) +- **диски** (см. [параметр disks](#disks), [возвращаемые значения](#диски) и [примеры](#получение-информации-о-дисках)) +- **доступные образы** (см. [параметр images](#param_images), [возвращаемые значения](#образы) и [примеры](#получение-информации-об-образах)) +- **группы с плавающим IP-адресом** (см. [параметр flip_groups](#flip_groups), [возвращаемые значения](#группы-с-плавающим-ip-адресом) и [примеры](#получение-информации-о-группах-с-плавающим-ip-адресом)) +- **аудиты** (см. [параметр audits](#audits), [возвращаемые значения](#аудиты) и [примеры](#получение-информации-об-аудитах)) + +## Параметры модуля +Ниже приведен список параметров для модуля **decort_account_info** (за исключением [общих параметров авторизации](./введение.md#общие-параметры-модулей-для-авторизации)): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ПараметрТипОписание
+ + audits + + + (bool) +
Default: false +
+ Получить информацию об аудитах. +
+ + computes + + + (dict) + + Получить информацию о виртуальных машинах, к которым имеет доступ пользователь, + с учётом заданных параметров вывода. +
Чтобы получить информацию без использования параметров вывода, + необходимо задать пустой словарь {}. +
+ filter + + (dict) + + Фильтр. +
+ ext_net_id + + (int) + + По идентификатору внешней сети. +
+ ext_net_name + + (str) + + По имени внешней сети. +
+ id + + (int) + + По идентификатору. +
+ ip + + (str) + + По IP-адресу. +
+ name + + (str) + + По имени. +
+ rg_id + + (int) + + По идентификатору ресурсной группы. +
+ rg_name + + (str) + + По имени ресурсной группы. +
+ tech_status + + (str) +
Значения: +
BACKUP_RUNNING +
BACKUP_STOPPED +
DOWN +
MIGRATING +
PAUSED +
PAUSING +
SCHEDULED +
STARTED +
STARTING +
STOPPED +
STOPPING +
+ По техническому статусу. +
+ pagination + + (dict) + + Постраничный вывод. +
+ number + + (int) +
Default: 1 +
+ Номер страницы. +
+ size + + (int) + + Размер страниц. +
Обязательный параметр. +
+ sorting + + (dict) + + Сортировка. +
+ asc + + (bool) +
Default: true +
+ Сортировать по возрастанию. +
true - по возрастанию. +
false - по убыванию. +
+ field + + (str) +
Значения: +
cpus +
createdBy +
createdTime +
deletedBy +
deletedTime +
id +
name +
ram +
registered +
rgId +
rgName +
status +
techStatus +
totalDisksSize +
updatedBy +
updatedTime +
userManaged +
vinsConnected +
+ Название поля, по которому сортировать. +
Обязательный параметр. +
+ + disks + + + (dict) + + Получить информацию о неподключённых дисках, к которым имеет доступ пользователь, + с учётом заданных параметров вывода. +
Чтобы получить информацию без использования параметров вывода, + необходимо задать пустой словарь {}. +
+ filter + + (dict) + + Фильтр. +
+ id + + (int) + + По идентификатору. +
+ name + + (str) + + По имени. +
+ size + + (int) + + По объёму. +
+ type + + (str) +
Значения: +
B +
D +
+ По типу. +
+ pagination + + (dict) + + Постраничный вывод. +
+ number + + (int) +
Default: 1 +
+ Номер страницы. +
+ size + + (int) + + Размер страниц. +
Обязательный параметр. +
+ sorting + + (dict) + + Сортировка. +
+ asc + + (bool) +
Default: true +
+ Сортировать по возрастанию. +
true - по возрастанию. +
false - по убыванию. +
+ field + + (str) +
Значения: +
id +
name +
pool +
sepId +
shareable +
sizeMax +
type +
+ Название поля, по которому сортировать. +
Обязательный параметр. +
+ + flip_groups + + + (dict) + + Получить информацию о группах с плавающим IP-адресом, к которым имеет + доступ пользователь, с учётом заданных параметров вывода. +
Чтобы получить информацию без использования параметров вывода, + необходимо задать пустой словарь {}. +
+ filter + + (dict) + + Фильтр. +
+ ext_net_id + + (int) + + По идентификатору внешней сети. +
+ id + + (int) + + По идентификатору. +
+ ip + + (str) + + По IP-адресу. +
+ name + + (str) + + По имени. +
+ vins_id + + (int) + + По идентификатору внутренней сети. +
+ vins_name + + (str) + + По имени внутренней сети. +
+ pagination + + (dict) + + Постраничный вывод. +
+ number + + (int) +
Default: 1 +
+ Номер страницы. +
+ size + + (int) + + Размер страниц. +
Обязательный параметр. +
+ id + + (int) + + Идентификатор целевого аккаунта. +
Обязательный параметр, если не задан параметр + name. +
+ + images + + + (dict) + + Получить информацию об образах, которые доступны к использованию + в аккаунте, с учётом заданных параметров вывода. +
Чтобы получить информацию без использования параметров вывода, + необходимо задать пустой словарь {}. +
+ filter + + (dict) + + Фильтр. +
+ id + + (int) + + По идентификатору. +
+ name + + (str) + + По имени. +
+ type + + (str) +
Значения: +
cdrom +
linux +
other +
virtual +
windows +
+ По типу. +
+ pagination + + (dict) + + Постраничный вывод. +
+ number + + (int) +
Default: 1 +
+ Номер страницы. +
+ size + + (int) + + Размер страниц. +
Обязательный параметр. +
+ sorting + + (dict) + + Сортировка. +
+ asc + + (bool) +
Default: true +
+ Сортировать по возрастанию. +
true - по возрастанию. +
false - по убыванию. +
+ field + + (str) +
Значения: +
UNCPath +
desc +
id +
name +
public +
size +
status +
type +
username +
+ Название поля, по которому сортировать. +
Обязательный параметр. +
+ name + + (str) + + Имя целевого аккаунта. +
Может быть альтернативой параметру id, + за исключением случая, когда необходимо получить + информацию о безвозвратно удалённом объекте. +
+ + resource_groups + + + (dict) + + Получить информацию о ресурсных группах, к которым имеет доступ пользователь, + с учётом заданных параметров вывода. +
Чтобы получить информацию без использования параметров вывода, + необходимо задать пустой словарь {}. +
+ filter + + (dict) + + Фильтр. +
+ id + + (int) + + По идентификатору. +
+ name + + (str) + + По имени. +
+ status + + (str) +
Значения: +
CREATED +
DELETED +
DELETING +
DESTROYED +
DESTROYING +
DISABLED +
DISABLING +
ENABLED +
ENABLING +
MODELED +
RESTORING +
+ По статусу. +
+ vins_id + + (int) + + По идентификатору внутренней сети. +
+ vm_id + + (int) + + По идентификатору виртуальной машины. +
+ pagination + + (dict) + + Постраничный вывод. +
+ number + + (int) +
Default: 1 +
+ Номер страницы. +
+ size + + (int) + + Размер страниц. +
Обязательный параметр. +
+ sorting + + (dict) + + Сортировка. +
+ asc + + (bool) +
Default: true +
+ Сортировать по возрастанию. +
true - по возрастанию. +
false - по убыванию. +
+ field + + (str) +
Значения: +
createdBy +
createdTime +
deletedBy +
deletedTime +
id +
milestones +
name +
status +
updatedBy +
updatedTime +
vinses +
+ Название поля, по которому сортировать. +
Обязательный параметр. +
+ + resource_consumption + + + (bool) +
Default: false +
+ Получить информацию об используемых и зарезервированных ресурсах. +
+ + vinses + + + (dict) + + Получить информацию о внутренних сетях, к которым имеет доступ пользователь, + с учётом заданных параметров вывода. +
Чтобы получить информацию без использования параметров вывода, + необходимо задать пустой словарь {}. +
+ filter + + (dict) + + Фильтр. +
+ ext_ip + + (str) + + По внешнему IP-адресу. +
+ id + + (int) + + По идентификатору. +
+ name + + (str) + + По имени. +
+ rg_id + + (int) + + По идентификатору ресурсной группы. +
+ pagination + + (dict) + + Постраничный вывод. +
+ number + + (int) +
Default: 1 +
+ Номер страницы. +
+ size + + (int) + + Размер страниц. +
Обязательный параметр. +
+ sorting + + (dict) + + Сортировка. +
+ asc + + (bool) +
Default: true +
+ Сортировать по возрастанию. +
true - по возрастанию. +
false - по убыванию. +
+ field + + (str) +
Значения: +
computes +
createdBy +
createdTime +
deletedBy +
deletedTime +
externalIP +
extnetId +
freeIPs +
id +
name +
network +
priVnfDevId +
rgId +
rgName +
status +
updatedBy +
updatedTime +
+ Название поля, по которому сортировать. +
Обязательный параметр. +
+ +## Возвращаемые значения + +Модуль **decort_account_info** возвращает информацию об аккаунте в виде словаря `facts` со следующими ключами: + +### Основная информация + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ acl + + list + + Список словарей, описывающих доступы пользователей. +
+ canBeDeleted + + bool + + Может ли быть удалён. +
+ right + + str + + Права. +
+ status + + str + + Статус. +
+ type + + str + + Тип. +
+ userGroupId + + str + + Идентификатор пользователя или группы пользователей. +
+ company + + str + + Название компании. +
+ companyurl + + str + + URL компании. +
+ computeFeatures + + list + + Список дополнительных возможностей гипервизора, доступных ВМ. +
+ computes_amount + + dict + + Количество ВМ по состоянию. +
+ started + + int + + Количество запущенных ВМ. +
+ stopped + + int + + Количество остановленных ВМ. +
+ cpu_allocation_parameter + + str + + Режим выделения ЦП. +
+ cpu_allocation_ratio + + str + + Коэффициент для режима выделения ЦП. +
+ createdBy + + str + + Идентификатор пользователя, который создал. +
+ createdTime + + int + + Unix-время создания. +
+ createdTime_readable + + str + + Дата и время создания. +
+ deactivationTime + + int + + Unix-время выключения. +
+ deactivationTime_readable + + str + + Дата и время выключения. +
+ deletedBy + + str + + Идентификатор пользователя, который удалил. +
+ deletedTime + + int + + Unix-время удаления. +
+ deletedTime_readable + + str + + Дата и время удаления. +
+ displayname + + str + + Отображаемое имя. +
+ id + + int + + Идентификатор. +
+ name + + str + + Имя. +
+ resourceLimits + + dict + + Квоты на ресурсы. +
+ CU_C + + int + + Количество виртуальных процессоров. +
+ CU_D + + int + + Объём диска в ГБ. +
+ CU_DM + + int + + Объём дисков в ГБ. +
+ CU_I + + int + + Количество внешних IP-адресов. +
+ CU_M + + float + + Объём оперативной памяти в МБ. +
+ CU_NP + + int + + Объём трафика внешних сетей. +
+ gpu_units + + int + + Количество графических процессоров. +
+ sendAccessEmails + + bool + + Отправка пользователям на эл. почту уведомлений о предоставлении доступа. +
+ status + + str + + Статус. +
+ uniqPools + + list + + Список доступных пулов СХД. +
+ updatedTime + + int + + Unix-время обновления. +
+ updatedTime_readable + + str + + Дата и время обновления. +
+ vins + + list + + Список идентификаторов внутренних сетей на уровне аккаунта. +
+ vinses_amount + + int + + Количество внутренних сетей. +
+ +### Используемые и зарезервированные ресурсы + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ + resource_consumed + + + dict + + Используемые ресурсы. +
+ cpu + + int + + Количество виртуальных процессоров. +
+ disksize + + int + + Объём дисков в ГБ. +
+ extips + + int + + Количество внешних IP-адресов. +
+ exttraffic + + int + + Объём трафика внешних сетей. +
+ gpu + + int + + Количество графических процессоров. +
+ ram + + int + + Объём оперативной памяти в МБ. +
+ seps + + dict + + Объём дисков по пулам СХД. +
+ (идентификатор СХД) + + dict + + Пулы СХД. +
+ (название пула) + + dict + + Словарь пула СХД. +
+ disksize + + int + + Объём дисков в ГБ. +
+ resource_reserved + + dict + + Зарезервированные ресурсы. +
Структура словаря аналогична словарю + + resource_consumed + . +
+ +### Ресурсные группы + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ resource_groups + + list + + Список словарей, описывающих ресурсные группы. +
+ Computes + + dict + + Количество ВМ по состоянию. +
+ Started + + int + + Количество запущенных ВМ. +
+ Stopped + + int + + Количество остановленных ВМ. +
+ Resources + + dict + + Используемые и зарезервированные ресурсы. +
+ Consumed + + dict + + Используемые ресурсы. +
Структура словаря аналогична словарю + + resource_consumed + . +
+ Limits + + dict + + Квоты на ресурсы. +
+ cpu + + int + + Количество виртуальных процессоров. +
+ disksize + + int + + Объём дисков в ГБ. +
+ disksizemax + + int + + Объём диска в ГБ. +
+ extips + + int + + Количество внешних IP-адресов. +
+ exttraffic + + int + + Объём трафика внешних сетей. +
+ gpu + + int + + Количество графических процессоров. +
+ ram + + float + + Объём оперативной памяти в МБ. +
+ Reserved + + dict + + Зарезервированные ресурсы. +
Структура словаря аналогична словарю + + resource_consumed + . +
+ createdBy + + str + + Идентификатор пользователя, который создал. +
+ createdTime + + int + + Unix-время создания. +
+ createdTime_readable + + str + + Дата и время создания. +
+ deletedBy + + str + + Идентификатор пользователя, который удалил. +
+ deletedTime + + int + + Unix-время удаления. +
+ deletedTime_readable + + str + + Дата и время удаления. +
+ id + + int + + Идентификатор. +
+ milestones + + int + + Количество событий. +
+ name + + str + + Имя. +
+ status + + str + + Статус. +
+ updatedBy + + str + + Идентификатор пользователя, который обновил. +
+ updatedTime + + int + + Unix-время обновления. +
+ updatedTime_readable + + str + + Дата и время обновления. +
+ vinses + + int + + Количество внутренних сетей. +
+ +### Виртуальные машины + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ computes + + list + + Список словарей, описывающих виртуальные машины. +
+ accountId + + int + + Идентификатор аккаунта. +
+ accountName + + str + + Имя аккаунта. +
+ cpus + + int + + Количество виртуальных процессоров. +
+ createdBy + + str + + Идентификатор пользователя, который создал. +
+ createdTime + + int + + Unix-время создания. +
+ createdTime_readable + + str + + Дата и время создания. +
+ deletedBy + + str + + Идентификатор пользователя, который удалил. +
+ deletedTime + + int + + Unix-время удаления. +
+ deletedTime_readable + + str + + Дата и время удаления. +
+ id + + int + + Идентификатор. +
+ name + + str + + Имя. +
+ ram + + int + + Объём оперативной памяти в МБ. +
+ registered + + bool + + Зарегистрирована ли ВМ как используемая. +
+ rgId + + int + + Идентификатор ресурсной группы. +
+ rgName + + str + + Имя ресурсной группы. +
+ status + + str + + Статус. +
+ techStatus + + str + + Технический статус. +
+ totalDisksSize + + int + + Общий объём дисков. +
+ updatedBy + + str + + Идентификатор пользователя, который обновил. +
+ updatedTime + + int + + Unix-время обновления. +
+ updatedTime_readable + + str + + Дата и время обновления. +
+ vinsConnected + + int + + Количество подключенных внутренних сетей. +
+ +### Внутренние сети + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ vinses + + list + + Список словарей, описывающих внутренние сети. +
+ accountId + + int + + Идентификатор аккаунта. +
+ accountName + + str + + Имя аккаунта. +
+ computes + + int + + Количество виртуальных машин. +
+ createdBy + + str + + Идентификатор пользователя, который создал. +
+ createdTime + + int + + Unix-время создания. +
+ createdTime_readable + + str + + Дата и время создания. +
+ deletedBy + + str + + Идентификатор пользователя, который удалил. +
+ deletedTime + + int + + Unix-время удаления. +
+ deletedTime_readable + + str + + Дата и время удаления. +
+ externalIP + + str + + Внешний IP-адрес. +
+ extnetId + + int + + Идентификатор внешней сети. +
+ freeIPs + + int + + Количество свободных IP-адресов. +
+ id + + int + + Идентификатор. +
+ name + + str + + Имя. +
+ network + + str + + Адрес сети. +
+ priVnfDevId + + int + + Идентификатор виртуального маршрутизатора. +
+ rgId + + int + + Идентификатор ресурсной группы. +
+ rgName + + str + + Имя ресурсной группы. +
+ status + + str + + Статус. +
+ updatedBy + + str + + Идентификатор пользователя, который обновил. +
+ updatedTime + + int + + Unix-время обновления. +
+ updatedTime_readable + + str + + Дата и время обновления. +
+ +### Диски + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ disks + + list + + Список словарей, описывающих диски. +
+ id + + int + + Идентификатор. +
+ name + + str + + Имя. +
+ pool + + str + + Пул СХД. +
+ sepId + + int + + Идентификатор СХД. +
+ shareable + + bool + + Общий доступ. +
+ sizeMax + + int + + Объём. +
+ type + + str + + Тип. +
+ +### Образы + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ images + + list + + Список словарей, описывающих образы. +
+ UNCPath + + str + + Путь к файлу. +
+ desc + + str + + Описание. +
+ id + + int + + Идентификатор. +
+ name + + str + + Имя. +
+ public + + bool + + Общий доступ. +
+ size + + int + + Размер в ГБ. +
+ status + + str + + Статус. +
+ type + + str + + Тип. +
+ username + + str + + Имя пользователя. +
+ +### Группы с плавающим IP-адресом + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ flip_groups + + list + + Список словарей, описывающих группы с плавающим IP-адресом. +
+ clientType + + str + + Тип клиентов. +
+ connType + + str + + Тип соединения. +
+ createdBy + + str + + Идентификатор пользователя, который создал. +
+ createdTime + + int + + Unix-время создания. +
+ createdTime_readable + + str + + Дата и время создания. +
+ deletedBy + + str + + Идентификатор пользователя, который удалил. +
+ deletedTime + + int + + Unix-время удаления. +
+ deletedTime_readable + + str + + Дата и время удаления. +
+ desc + + str + + Описание. +
+ gid + + int + + Идентификатор ЦОД. +
+ id + + int + + Идентификатор. +
+ ip + + str + + IP-адрес. +
+ milestones + + int + + Количество событий. +
+ name + + str + + Имя. +
+ netId + + int + + Идентификатор сети. +
+ netType + + str + + Тип сети. +
+ netmask + + int + + Маска подсети (длина префикса). +
+ status + + str + + Статус. +
+ updatedBy + + str + + Идентификатор пользователя, который обновил. +
+ updatedTime + + int + + Unix-время обновления. +
+ updatedTime_readable + + str + + Дата и время обновления. +
+ +### Аудиты + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ audits + + list + + Список словарей, описывающих аудиты. +
+ call + + str + + Метод API. +
+ responsetime + + float + + Время отклика в секундах. +
+ statuscode + + int + + Код ответа. +
+ timestamp + + float + + Unix-время. +
+ timestamp_readable + + str + + Дата и время. +
+ user + + str + + Идентификатор пользователя. +
+ +## Примеры использования + +### Получение основной информации об аккаунте + +#### По идентификатору +``` +- name: Example + hosts: localhost + tasks: + - name: Get basic account info by ID + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" +``` + +#### По имени +``` +- name: Example + hosts: localhost + tasks: + - name: Get basic account info by name + decort_account_info: + # Параметры для авторизации упущены + name: "{{ account_name }}" +``` + +### Получение информации об используемых и зарезервированных ресурсах аккаунта +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with resource consumption + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + resource_consumption: true +``` + +### Получение информации о ресурсных группах + +#### Без использования параметров вывода +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with resource groups + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + resource_groups: {} +``` + +#### С фильтрацией по статусу +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with resource groups + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + resource_groups: + filter: + status: CREATED +``` + +#### С сортировкой по имени +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with resource groups + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + resource_groups: + sorting: + field: name +``` + +#### С постраничным выводом +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with resource groups + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + resource_groups: + pagination: + size: 2 +``` + +### Получение информации о виртуальных машинах + +#### Без использования параметров вывода +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with computes + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + computes: {} +``` + +#### С фильтрацией по IP-адресу +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with computes + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + computes: + filter: + ip: 192.168.1.2 +``` + +#### С сортировкой по имени +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with computes + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + computes: + sorting: + field: name +``` + +#### С постраничным выводом +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with computes + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + computes: + pagination: + size: 2 +``` + +### Получение информации о внутренних сетях + +#### Без использования параметров вывода +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with vinses + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + vinses: {} +``` + +#### С фильтрацией по идентификатору ресурсной группы +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with vinses + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + vinses: + filter: + rg_id: "{{ rg_id }}" +``` + +#### С сортировкой по времени создания +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with vinses + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + vinses: + sorting: + field: createdTime +``` + +#### С постраничным выводом +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with vinses + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + vinses: + pagination: + size: 2 +``` + +### Получение информации о дисках + +#### Без использования параметров вывода +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with disks + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + disks: {} +``` + +#### С фильтрацией по типу +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with disks + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + disks: + filter: + type: D +``` + +#### С сортировкой по объёму +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with disks + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + disks: + sorting: + field: sizeMax +``` + +#### С постраничным выводом +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with disks + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + disks: + pagination: + size: 2 +``` + +### Получение информации об образах + +#### Без использования параметров вывода +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with images + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + images: {} +``` + +#### С фильтрацией по типу +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with images + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + images: + filter: + type: linux +``` + +#### С сортировкой по статусу +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with images + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + images: + sorting: + field: status +``` + +#### С постраничным выводом +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with images + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + images: + pagination: + size: 2 +``` + +### Получение информации о группах с плавающим IP-адресом + +#### Без использования параметров вывода +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with flip groups + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + flip_groups: {} +``` + +#### С фильтрацией по IP-адресу +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with flip groups + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + flip_groups: + filter: + ip: 192.168.1.5 +``` + +#### С постраничным выводом +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with flip groups + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + flip_groups: + pagination: + size: 2 +``` + +### Получение информации об аудитах +``` +- name: Example + hosts: localhost + tasks: + - name: Get account info with audits + decort_account_info: + # Параметры для авторизации упущены + id: "{{ account_id }}" + audits: true +``` diff --git a/wiki/6.1.0/модуль-decort_bservice.md b/wiki/6.1.0/модуль-decort_bservice.md new file mode 100644 index 0000000..2348c45 --- /dev/null +++ b/wiki/6.1.0/модуль-decort_bservice.md @@ -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 | Значения:
`oauth2`
`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Данный параметр является обязательным. | +|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`.| +|state | Значения: `absent`, `disabled`, `enabled`, `present`, `check`.
Default: `present`| Целевое состояние базовой службы. Значения `present` и `enabled` равнозначны.| +| started | (bool)
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)
Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.
Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. | + +## Возвращаемые значения модуля 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 +``` \ No newline at end of file diff --git a/wiki/6.1.0/модуль-decort_disk.md b/wiki/6.1.0/модуль-decort_disk.md new file mode 100644 index 0000000..6e7942c --- /dev/null +++ b/wiki/6.1.0/модуль-decort_disk.md @@ -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)
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 | Значения:
`oauth2`
`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Данный параметр является обязательным. | +|controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должен быть создан (или уже существует) данный диск. Данный параметр является обязательным.| +|id | (int) | Уникальный целочисленный идентификатор диска. Соответствующий диск должен существовать (таким образом, с помощью id нельзя создать новый диск, а только управлять уже имеющимися). Если задан данный параметр, то параметры `name`, `account_name` и `account_id` игнорируются.| +| iops | (int)
Default: `2000` | Ограничение ввода/вывода диска. Используется при создании диска. | +| force_detach | (bool)
Default: `false` | Задаёт поведение платформы при попытке удалить диск, подключённый к виртуальной машине.
По умолчанию, удаление подключённых дисков не разрешается, и попытка удалить такой диск приведёт к аварийному завершению модуля. Чтобы изменить это поведение, явно установите `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)
Default: `false` | Параметр, использующийся при удалении диска, при значении `true` - диск удалится навсегда, а при `false` - попадёт в корзину. | +| place_with | (int) | Идентификатор образа диска, из которого следует взять параметр `sep_id`, чтобы разместить данный диск на той же системе хранения данных, что и указанный образ диска. Данный параметр является опциональным и используется только на стадии создания диска. Если задан `place_with`, то `sep_id` игнорируется.| +| pool | (string) | Название пула на системе хранения данных, в рамках которой следует создать данный диск. Этот параметр используется только на стадии создания диска и игнорируется при операциях над уже существующими дисками. Параметр является опциональным, если не задан, то платформа будет использовать пул, который сконфигурирован на целевой системе хранения как пул по умолчанию. | +| reason | (string)
Default: `Managed by Ansible decort_disk` | Причина, по которой было выполнено какое-либо действие. В данном модуле используется только при удалении диска. | +| sep_id | (int) | Идентификатор системы хранения данных (Storage End-point). Данный параметр определяет систему хранения данных, на ресурсах которой создаётся диск. Используется только при создании диска и игнорируется при прочих операциях. Альтернативой данному параметру является `place_with`, позволяющий разместить диск на той же системе хранения, что и указанный образ диска, на базе которого создаётся виртуальная машина.| +| shareable | (bool)
Default: `false` | Включение/отключение общего доступа к диску. +| size | (int) | Размер диска в ГБ. Этот параметр является обязательным при создании диска. Если он задан для уже существующего диска, а текущий размер диска меньше заданного, то будет предпринята попытка увеличить размер диска. При прочих операциях данный параметр игнорируется.| +| state | (str)
Значения:
`present`
`absent`
Default: `present` | Целевое состояние диска. | +| type | (string)
Значения:
`B`
`D`
Default: `D` | Тип создаваемого диска. `B` - Boot/загрузочный, `D` - Data/с данными. | +| verify_ssl | (bool)
Default: `false` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.
Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. | + +## Возвращаемые значения модуля 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 }}" + << для краткости фрагмент опущен >> +``` \ No newline at end of file diff --git a/wiki/6.1.0/модуль-decort_group.md b/wiki/6.1.0/модуль-decort_group.md new file mode 100644 index 0000000..354c21d --- /dev/null +++ b/wiki/6.1.0/модуль-decort_group.md @@ -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)
Значения:
`oauth2`
`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Обязательный параметр. | +| boot_disk | (int) | Обьём загрузочного диска. | +| bservice_id | (int) | Идентификатор базовой службы. Обязательный параметр. | +| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT. Данный параметр является обязательным. | +| count | (int) | Количество виртуальных машин. | +| cpu | (int) | Количество виртуальных процессоров. | +| driver | (string)
Значения:
`KVM_X86`
`SVA_KVM_X86`
Default: `KVM_X86` | Драйвер. | +| id | (int) | Идентификатор группы. | +| image_id | (int) | Идентификатор образа. | +| jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: jwt` Данный параметр является обязательным для указанного режима. Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в playbook. Если этот параметр не определен в playbook, то модуль будет использовать значение переменной окружения `DECORT_JWT`. | +| name | (str) | Имя группы.
Используется для идентификации группы, если не задан параметр `id`, а также для переименования группы, если параметр `id` задан. | +| networks | (list) | Список словарей, описывающих сети, которые должны быть подключены.
Ключи словаря:
• `type` (string) (обязательный) - тип сети; значения: `VINS` (внутренняя) или `EXTNET` (внешняя)
• `id` (int) (обязательный) - идентификатор сети | +| oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, который должен использоваться в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`. | +| ram | (int) | Объём оперативной памяти. | +| role | (string) | Тег роли. | +| state | (str)
Значения:
`present`
`absent`
`started`
`stopped`
`check`
Default: `present` | +| timeoutStart | (int) | Время отсрочки запуска группы после создания в секундах. | +| verify_ssl | (bool)
Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты. Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. | + +## Возвращаемые значения модуля decort_group + +Модуль **decort_group** возвращает информацию о диске в виде словаря facts со следующими ключами: + + +|Ключ | Тип данных | Описание| +| ------ | ------ | ------ | +| account_id | int | Идентификатор аккаунта. | +| Computes | list | Список словарей, содержащих информацию о виртуальных машинах группы.
Ключи словаря:
• `id` (int) - идентификатор ВМ
• `ipAddresses` (list) - список IP-адресов ВМ
• `name` (str) - имя ВМ
• `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 +``` \ No newline at end of file diff --git a/wiki/6.1.0/модуль-decort_jwt.md b/wiki/6.1.0/модуль-decort_jwt.md new file mode 100644 index 0000000..4cd124b --- /dev/null +++ b/wiki/6.1.0/модуль-decort_jwt.md @@ -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)
Default: `3600` | Срок действия JWT в секундах. | +| verify_ssl | (bool)
Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес авторизационного сервера, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.
Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. | + +## Возвращаемые значения модуля 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 }}" +``` \ No newline at end of file diff --git a/wiki/6.1.0/модуль-decort_k8s.md b/wiki/6.1.0/модуль-decort_k8s.md new file mode 100644 index 0000000..9fc51ac --- /dev/null +++ b/wiki/6.1.0/модуль-decort_k8s.md @@ -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)
Значения:
`oauth2`
`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Обязательный параметр. | +| cluster_conf | (dict) | Словарь с глобальными настройками и конфигурацией для всего кластера. Включает в себя такие настройки, как имя кластера, настройки DNS, методы аутентификации и другие конфигурации всего кластера. | +| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT. Данный параметр является обязательным. | +| description | (string)
Default: `Created by decort ansible module` | Описание кластера. | +| extnet_id | (int)
Default: `0` | Идентификатор внешней сети. Если задан `0`, то внешняя сеть выбирается автоматически. Если задан параметр `vins_id`, то значение данного параметра будет проигнорировано. Если задан `extnet_only: false`, то внешняя сеть будет подключена к создаваемой внутренней сети, а если `extnet_only: true`, то либо напрямую к каждому узлу кластера (если `with_lb: false`), либо напрямую к балансировщику нагрузки (если `with_lb: true`). | +| extnet_only | (bool)
Default: `false` | Не использовать внутреннюю сеть, подключать напрямую к внешней. | +| getConfig | (bool)
Default: `false` | Получить данные конфигурации для доступа к кластеру Kubernetes. | +| ha_lb | (bool)
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)
Значения:
`Q35`
`i440fx` | Эмулируемый чипсет master-узлов. Не применим при изменении существующего кластера.
Значение по умолчанию при создании: `i440fx`. | +| master_count | (int)
Default: `1` | Количество Master-узлов. | +| master_cpu | (int)
Default: `2` | Количество виртуальных процессоров на Master-узле. | +| master_disk | (int)
Default: `10` | Объём загрузочного диска на Master-узле. | +| master_pool | (str) | Пул СХД, заданной параметром `master_sepid`. | +| master_ram | (int)
Default: `2048` | Объём оперативной памяти на Master-узле. | +| master_sepid | (int) | Идентификатор СХД для Master-узла. Если не задан, то используется СХД образа Master-узла. | +| name | (string) | Имя кластера Kubernetes. | +| network_plugin | (str)
Значения:
`flannel`
`calico`
`weavenet`
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)
Default: `false` | Если выполняется удаление, то выполнить безвозвратное удаление (минуя корзину). | +| rg_id | (int) | Идентификатор ресурсной группы. | +| rg_name | (str) | Имя ресурсной группы. | +| started | (bool)
Default: `true` | Запустить кластер.
Используется только для существующего кластера. | +| state | (string)
Значения:
`present`
`absent`
`enabled`
`disabled`
`check`
Default: `present` | Целевое состояние кластера. | +| verify_ssl | (bool)
Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты. Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. | +| vins_id | (int) | Идентификатор внутренней сети. Если не задан, то будет создана новая внутренняя сеть. Если задан, то заданная внутренняя сеть должна иметь подключение к внешней сети. Если задано `extnet_only: true`, то параметр игнорируется. +| with_lb | (bool)
Default: `true` | Создание кластера Kubernetes с размещением Master-узлов за балансировщиком нагрузки. В ином случае каждый узел получит отдельный адрес из внешней сети. +| workers | (list) | Список словарей, описывающих группы Worker-узлов.
Ключи словаря:
• `annotations` (list) (необязательный) - список строк с annotations в формате: `key1=value1`; значение по умолчанию при создании: `[]`
• `chipset` (str) (необязательный) - эмулируемый чипсет. Допустимые значения: `Q35`, `i440fx`; значение по умолчанию при создании: `i440fx`
• `ci_user_data` (dict) (необязательный) - конфигурация для cloud-init; значение по умолчанию при создании: `{}`
• `cpu` (int) (необязательный) - количество виртуальных процессоров на узле; значение по умолчанию при создании: `1`
• `disk` (int) (необязательный) - объём загрузочного диска на узле; если не задан при создании, размер диска будет равен размеру используемого образа
• `labels` (list) (необязательный) - список строк с labels в формате: `label1=value1`; значение по умолчанию при создании: `[]`. Метка `workersGroupName` является служебной в платформе и игнорируется при сравнении переданных меток с существующими
• `name` (string) (обязательный) - имя группы Worker-узлов
• `num` (int) (необязательный) - количество узлов; значение по умолчанию при создании: `1`
• `pool` (str) (необязательный) - пул СХД, заданной ключом `sep_id`; если не задан при создании, то пул будет выбран платформой
• `ram` (int) (необязательный) - объём оперативной памяти на узле; значение по умолчанию при создании: `1024`
• `sep_id` (int) (необязательный) - идентификатор СХД; если не задан при создании, то используется СХД образа узла
• `taints` (list) (необязательный) - список строк с taints в формате: `key1=value1:NoSchedule`; значение по умолчанию при создании: `[]`. | + +## Возвращаемые значения модуля decort_k8s + +Модуль **decort_k8s** возвращает информацию о кластере в виде словаря `facts` со следующими ключами: + + +| Ключ | Тип данных | Описание | +| ------ | ------ | ------ | +| account_id | int | Идентификатор аккаунта. | +| config | str | Kuber config кластера. +| id | int | Идентификатор кластера. | +| k8s_Masters | dict | Словарь с информацией о группе Master-узлов.
Ключи словаря:
• `cpu` (int) - количество виртуальных процессоров
• `detailedInfo` (list) - список словарей с информацией об узлах; ключи словаря: `id` (int) - идентификатор ВМ, `name` (str) - имя ВМ, `status` (str) - статус ВМ, `techStatus` (str) - технический статус ВМ
• `disk` (int) - объём загрузочного диска
• `id` (int) - идентификатор группы
• `name` (str) - имя группы
• `num` (int) - количество узлов
• `ram` (int) - объём оперативной памяти +| k8s_Workers | dict | Список словарей с информацией о группах Worker-узлов.
Ключи словаря:
• `cpu` (int) - количество виртуальных процессоров
• `detailedInfo` (list) - список словарей с информацией об узлах; ключи словаря: `id` (int) - идентификатор ВМ, `name` (str) - имя ВМ, `status` (str) - статус ВМ, `techStatus` (str) - технический статус ВМ
• `disk` (int) - объём загрузочного диска
• `id` (int) - идентификатор группы
• `labels` (list) - список строк с labels
• `name` (str) - имя группы
• `num` (int) - количество узлов
• `ram` (int) - объём оперативной памяти
• `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 +``` \ No newline at end of file diff --git a/wiki/6.1.0/модуль-decort_kvmvm.md b/wiki/6.1.0/модуль-decort_kvmvm.md new file mode 100644 index 0000000..c25c90a --- /dev/null +++ b/wiki/6.1.0/модуль-decort_kvmvm.md @@ -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 правила.
Ключи словаря:
• `topology` (string) (обязательный) - назначение правила; значения: `node` (узел) или `compute` (ВМ)
• `policy` (string) (обязательный) - степень "необходимости" этого правила; значения: `RECOMMENDED` или `REQUIRED`
• `mode` (string) (обязательный) - режим сравнения; значения: `EQ` (должно соответствовать), `NE` (не должно соответствовать), `ANY` (любое)
• `key` (string) (обязательный) - ключ, который учитывается при анализе данного правила
• `value` (string) (обязательный) - значение ключа, учитываемого при анализе данного правила (зависит от ключа `mode`).
Чтобы очистить 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 правила.
Ключи словаря:
• `topology` (string) (обязательный) - назначение правила; значения: `node` (узел) или `compute` (ВМ)
• `policy` (string) (обязательный) - степень "необходимости" этого правила; значения: `RECOMMENDED` или `REQUIRED`
• `mode` (string) (обязательный) - режим сравнения; значения: `EQ` (должно соответствовать), `NE` (не должно соответствовать), `ANY` (любое)
• `key` (string) (обязательный) - ключ, который учитывается при анализе данного правила
• `value` (string) (обязательный) - значение ключа, учитываемого при анализе данного правила (зависит от ключа `mode`).
Чтобы очистить affinity правила, нужно указать пустой список `[]`. | +| affinity_label | (str) | Метка affinity.
Чтобы очистить метку 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)
Значения:
`oauth2`
`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Обязательный параметр. | +| boot_disk | (int) | Объём загрузочного диска виртуальной машины в ГБ. | +| chipset | (string)
Значения:
`Q35`
`i440fx` | Эмулируемый чипсет. | +| ci_user_data | (dict) | конфигурация для cloud-init +| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должен быть создан (или уже существует) данная виртуальная машина. Данный параметр является обязательным. | +| cpu | (int) | Количество виртуальных процессоров, выделяемых виртуальной машине. | +| cpu_pin | (bool) | Запуск виртуальной машины на выделенных процессорах. Чтобы использовать эту функцию, система должна быть предварительно сконфигурирована путем выделения процессоров на физическом узле.
Значение по умолчанию при создании: `false`. | +| custom_fields | (dict) | Словарь, управляющий XML виртуальной машины.
Ключи словаря:
• `disable` (bool) - отключение управления виртуальной машиной через XML. Значение по умолчанию при создании: `true`
• `fields` (dict) - поля для управления XML виртуальной машины. | +| data_disks | (list) | Список идентификаторов дисков, которые следует подключить к данной виртуальной машине как дополнительные.
Чтобы отключить все диски, нужно указать пустой список `[]`.| +| hp_backed | (bool) | Использовать Huge Pages для выделения оперативной памяти виртуальной машины. Система должна быть предварительно сконфигурирована путем выделения Huge Pages на физическом узле.
Значение по умолчанию при создании: `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)
Default:
`false` | Соблюдение очерёдности сетей при их изменении.
Если `true`, то сравнение списка уже подключённых к ВМ сетей со списком из параметра `networks` будет производится с учётом очерёдности сетей и, при выявлении несоответствия, сначала будет произведено отключение всех сетей от ВМ, а затем подключение сетей в соответствии с параметром `networks`.
Если `false`, то очерёдность при сравнении учитываться не будет. Соответственно, сети, которые имеются в списке параметра `networks` и уже подключены к ВМ, переподключаться не будут, что может кратно уменьшить время выполнения изменения сетей. | +| networks | (list) | Список словарей, описывающих сети ВМ.
Ключи словаря:
• `type` (string) (обязательный) - тип сети; значения: `VINS` (внутренняя), `EXTNET` (внешняя), `VFNIC` (вирт. функция), `DPDK`, `EMPTY` (без подключения к сети)
• `id` (int) (необязательный) - идентификатор внутренней/внешней/DPDK сети или пула вирт. функций
• `ip_addr` (string) (необязательный) - IP-адрес, используемый для подключения к данной сети; применимо только для `VINS` и `EXTNET`.
ВМ не может одновременно быть подключена к сети DPDK и к сети другого типа.
Чтобы отключить все сети, нужно указать пустой список `[]`. | +| numa_affinity | (str)
Значения:
`strict`
`loose`
`none` | Правило применения NUMA affinity к виртуальной машине.
`strict` - строго с NUMA affinity, `loose` - использовать NUMA affinity, если возможно, `none` - отменить применение NUMA affinity.
Значение по умолчанию при создании: `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)
Значения:
`present`
`absent`
`poweredon`
`poweredoff`
`halted`
`paused`
`check`
Default: `present` | Целевое состояние ВМ.
Значение `halted` - синоним к `poweredoff`. Значения `present` и `poweredon` равнозначны.
Значение `check` вызывает модуль в _read-only_ режиме и считывает характеристики существующей ВМ. | +| tag | (dict) | Словарь, пары ключ-значение которого, описывают тэги для ВМ.
Чтобы очистить теги, нужно указать пустой словарь `{}`.| +| verify_ssl | (bool)
Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.
Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. | + +## Возвращаемые значения модуля 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 +``` \ No newline at end of file diff --git a/wiki/6.1.0/модуль-decort_lb.md b/wiki/6.1.0/модуль-decort_lb.md new file mode 100644 index 0000000..e0951c4 --- /dev/null +++ b/wiki/6.1.0/модуль-decort_lb.md @@ -0,0 +1,893 @@ +# Модуль decort_lb +## Обзор модуля decort_lb + +Модуль **decort_lb** предназначен для выполнения следующих действий над балансировщиками нагрузки: +- создать +- получить информацию +- отключить/включить/запустить/перезапустить +- изменить конфигурации backend и frontend +- удалить (в корзину или безвозвратно) +- восстановить из корзины + +## Параметры модуля decort_lb +Ниже приведен полный список параметров для модуля **decort_lb**: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ПараметрТипОписание
+ account_id + + (int) + + Идентификатор аккаунта. +
+ account_name + + (str) + + Имя аккаунта. +
Может быть альтернативой параметру account_id. +
+ description + + (str) +
Default: Managed by Ansible module decort_lb +
+ Описание балансировщика. +
+ app_id + + (str) + + Идентификатор приложения, использующийся для подключения к контроллеру + облачной платформы DECORT в режиме authenticator: oauth2. + Данный параметр является обязательным для указанного режима. Если + параметр не задан в playbook, модуль будет использовать значение + переменной окружения DECORT_APP_ID. +
+ app_secret + + (str) + + Секретный ключ приложения, который используется для подключения к + контроллеру облачной платформы DECORT в режиме + authenticator: oauth2. Данный параметр является + обязательным для указанного режима. Так как он содержит секретную + информацию, то его не рекомендуется задавать непосредственно в + playbook. Если параметр не задан в playbook, то модуль будет + использовать значение переменной окружения + DECORT_APP_SECRET. +
+ authenticator + + (str) +
Значения: +
oauth2 +
jwt +
+ Режим аутентификации при подключении к контроллеру облачной платформы + DECORT. Обязательный параметр. +
+ backends + + (list) + + Список словарей, описывающих конфигурации backend. +
+ algorithm + + (str) +
Значения: +
leastconn +
roundrobin +
static-rr +
Default: roundrobin +
+ Используемый алгоритм. +
+ + default_settings + + + (dict) + + Cловарь, описывающий параметры по умолчанию для backend-серверов. +
+ downinter + + (int) +
Default: 1000 +
+ Интервал в миллисекундах между двумя последовательными проверками + доступности сервера, который считается недоступным. +
+ fall + + (int) +
Default: 2 +
+ Количество последовательных неудачных проверок доступности, после + которых сервер, ранее считавшийся доступным, начинает считаться + недоступным и временно исключается из схемы балансировки. +
+ inter + + (int) +
Default: 5000 +
+ Интервал в миллисекундах между двумя последовательными проверками + доступности сервера, который считается доступным. +
+ maxconn + + (int) +
Default: 250 +
+ Лимит одновременных подключений к серверу. При достижении этого лимита + сервер временно исключается из схемы балансировки. +
+ maxqueue + + (int) +
Default: 256 +
+ Лимит соединений, ожидающих в очереди. Когда этот предел будет + достигнут, все последующие подключения будут перенаправлены + на другие серверы. +
+ rise + + (int) +
Default: 2 +
+ Количество проверок, которые должен пройти сервер, считавшийся + недоступным, чтобы начать считаться доступным и снова быть + включенным в схему балансировки. +
+ slowstart + + (int) +
Default: 60000 +
+ Интервал в миллисекундах с момента когда сервер начинает считаться + доступным, по истечении которого количество фактически разрешенных + подключений к этому серверу будет возвращено до 100% от + установленного лимита. +
+ weight + + (int) +
Default: 100 +
+ Вес сервера для использования в алгоритмах балансировки. +
+ name + + (str) + + Название backend. Обязательный параметр. +
+ controller_url + + (str) + + URL контроллера, соответствующего экземпляру облачной платформы + DECORT. Данный параметр является обязательным. +
+ ext_net_id + + (int) + + Идентификатор внешней сети. +
Может быть не задан, если задан vins_id - + в таком случае балансировщик будет подключён только к + внутренней сети. +
+ + frontends + + + (list) + + Список словарей, описывающих конфигурации frontend. +
+ backend + + (str) + + Название используемого backend. Обязательный параметр. +
+ bindings + + (list) + + Список словарей, описывающих конфигурации binding. +
+ address + + (str) + + IP-адрес. +
Если не задан, то будет использоваться основной IP-адрес + балансировщика во внешней сети или, если подключена только + внутренняя сеть, основной IP-адрес балансировщика во внутренней сети. +
+ name + + (str) + + Название. Обязательный параметр. +
+ port + + (int) +
Значения: +
1-65535 +
+ Порт. Обязательный параметр. +
+ ha_lb + + bool +
Default: false +
+ Использовать схему высокой доступности для создаваемого балансировщика. +
+ jwt + + (str) + + JSON Web Token (JWT), который будет использоваться для подключения + к контроллеру облачной платформы DECORT в режиме + authenticator: jwt. Данный параметр является + обязательным для указанного режима. Так как он содержит + потенциально секретную информацию, а сам JWT, как правило, + имеет ограниченное время жизни, то его не рекомендуется задавать + непосредственно в playbook. Если этот параметр не определен в + playbook, то модуль будет использовать значение переменной + окружения DECORT_JWT. +
+ lb_id + + (int) + + Идентификатор балансировщика нагрузки. +
+ lb_name + + (str) + + Имя балансировщика. +
+ oauth2_url + + (str) + + URL авторизационного сервера, работающего по протоколу Oauth2, + который должен использоваться в режиме + authenticator: oauth2. Данный параметр является + обязательным для указанного режима. Если параметр не задан в + playbook, модуль будет использовать значение переменной + окружения DECORT_OAUTH2_URL. +
+ permanently + + (bool) +
Default: false +
+ Если выполняется удаление, то выполнить безвозвратное удаление + (минуя корзину). +
+ rg_id + + (int) + + Идентификатор ресурсной группы. +
+ rg_name + + (str) + + Имя ресурсной группы. +
В комбинации с заданным аккаунтов может быть альтернативой + параметру rg_id +
+ servers + + (list) + + Список словарей, описывающих конфигурации backend-серверов. +
+ address + + (str) + + IP-адрес. Обязательный параметр. +
+ backends + + (list) + + Список словарей, описывающих параметры backend-сервера для разных + конфигураций backend. +
Обязательный параметр. +
+ check + + (str) +
Значения: +
enabled +
disabled +
Default: enabled +
+ Проверка доступности сервера. +
+ name + + (str) + + Название конфигурации backend. Обязательный параметр. +
+ port + + (int) +
Значения: +
1-65535 +
+ Порт. Обязательный параметр. +
+ server_settings + + (dict) + + Словарь, описывающий параметры backend-сервера. +
Ключи данного словаря аналогичны ключам словаря + + default_settings + . +
+ name + + (str) + + Название. Обязательный параметр. +
+ state + + (str) +
Значения: +
present +
absent +
enabled +
disabled +
restart +
Default: present +
+ Целевое состояние балансировщика нагрузки. +
Выполнение с state=restart позволяет выполнить + перезапуск балансировщика, соответственно, всегда возвращает + changed: true. +
Значения present и enabled равнозначны + и соответствуют включённому и запущенному балансировщику. +
+ verify_ssl + + (bool) +
Default: true +
+ Позволяет отключить проверку SSL сертификатов при выполнении API + вызовов в адрес контроллера облачной инфраструктуры, например, + при работе с изолированной облачной инфраструктурой, использующей + самоподписанные сертификаты. Применяйте данный параметр с + осторожностью, предпочтительно в защищенных средах. +
+ vins_id + + (int) + + Идентификатор внутренней сети. +
Может быть не задан, если задан ext_net_id - + в таком случае балансировщик будет подключён только к + внешней сети. +
+ vins_name + + (str) + + Имя внутренней сети. +
В комбинации с заданной РГ может быть альтернативой для + параметра vins_id. +
+ +## Возвращаемые значения модуля decort_lb + +Модуль **decort_lb** возвращает информацию о балансировщике в виде словаря `facts` со следующими ключами: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ backends + + list + + Список словарей, описывающих конфигурации backend. +
+ algorithm + + str + + Используемый алгоритм. +
+ name + + str + + Название конфигурации backend. +
+ serverDefaultSettings + + dict + + Cловарь, описывающий параметры по умолчанию для backend-серверов. +
Ключи данного словаря аналогичны ключам словаря + + default_settings + . +
+ servers + + list + + Список словарей, описывающих конфигурации backend-серверов. +
+ address + + str + + IP-адрес. +
+ check + + str + + Проверка доступности сервера. +
+ name + + str + + Название. +
+ port + + int + + Порт. +
+ serverSettings + + dict + + Cловарь, описывающий параметры backend-сервера. +
Ключи данного словаря аналогичны ключам словаря + + default_settings + . +
+ frontends + + list + + Список словарей, описывающих конфигурации frontend. +
Ключи данного словаря аналогичны ключам словарей списка + + frontends + . +
+ gid + + int + + Идентификатор физического кластера (Grid ID). +
+ id + + int + + Идентификатор балансировщика. +
+ name + + str + + Имя балансировщика. +
+ rg_id + + int + + Идентификатор ресурсной группы. +
+ state + + str + + Статус балансировщика. +
diff --git a/wiki/6.1.0/модуль-decort_osimage.md b/wiki/6.1.0/модуль-decort_osimage.md new file mode 100644 index 0000000..0574bc9 --- /dev/null +++ b/wiki/6.1.0/модуль-decort_osimage.md @@ -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)
Значения:
`oauth2`
`jwt` | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Обязательный параметр. | +| boottype | (string)
Default: `uefi` | Тип загрузки образа. Используется при создании образа.| +| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должен быть создан (или уже существует) образ. Данный параметр является обязательным. | +| drivers | (string)
Default: `KVM_X86` | Тип виртуальных машин, подходящих для образа. Используется при создании образа.| +| hotresize | (bool)
Default: `false` | Поддерживает ли образ "горячее" изменение размера. По умолчанию установлено `false`. Используется при создании образа операционной системы. | +| image_id | (int) | Идентификатор шаблонного образа. +| image_name | (str) | Имя шаблонного образа. +| image_password | (string) | Опциональный пароль для образа. Используется при создании образа.| +| image_username | (string) | Опциональное имя пользователя для образа. Используется при создании образа. | +| imagetype | (string)
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)
Значения:
`present`
`absent`
Default: `present` | Целевое состояние образа. `present` - существует, `absent` - удалён. | +| url | (string) | URL-адрес, с которого будет загружен образ. Используется при создании образа.| +| usernameDL | (string) | Имя пользователя для загрузки образа с заданного URL-адреса. Используется при создании образа. | +| verify_ssl | (bool)
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 +``` + diff --git a/wiki/6.1.0/модуль-decort_pfw.md b/wiki/6.1.0/модуль-decort_pfw.md new file mode 100644 index 0000000..65ccf02 --- /dev/null +++ b/wiki/6.1.0/модуль-decort_pfw.md @@ -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)
Значения:
`oauth2`
`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`).
Ключи словаря:
• `local_port` (int) (обязательный) - внутренний порт; значения: от `1` до `65535`
• `proto` (str) (обязательный) - протокол; значения: `tcp` или `udp`
• `public_port_end` (int) (необязательный) - верхняя граница диапазона внешних портов; значения: от значения ключа `public_port_start` до `65535`;
• `public_port_start` (int) (обязательный) - нижняя граница диапазона внешних портов; значения: от `1` до `65535` | +| state | (str)
Значения:
`present`
`absent`
Default: `present` | Целевое состояние правил.
Если `state=absent`, то, независимо от содержания параметра `rules`, будут удалены все правила для заданной ВМ (параметр `compute_id`) на виртуальном маршрутизаторе заданной внутренней сети (параметр `vins_id`). | +| verify_ssl | (bool)
Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.
Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. | +| vins_id | (int) | Идентификатор внутренней сети, на виртуальном маршрутизаторе которой настраиваются правила переадресации портов. Заданная ВМ (параметр `compute_id`) должна быть подключена к этой сети. Обязательный параметр. | + + +## Возвращаемые значения модуля decort_pfw + +Модуль **decort_pfw** возвращает информацию о правилах переадресации портов и сопутствующую информацию в виде словаря `facts` со следующими ключами: + + +|Ключ | Тип данных | Описание| +| ------ | ------ | ------ | +| compute_id | int | Идентификатор ВМ. | +| public_ip | string | IP-адрес во внешней сети, настроенный на виртуальном маршрутизаторе внутренней сети. | +| rules | list | Список словарей, описывающих правила переадресации портов.
Ключи словаря:
• `id` (int) - идентификатор правила
• `localIp` (str) - IP-адрес ВМ
• `localPort` (int) - внутренний порт
• `protocol` (str) - протокол
• `publicPortEnd` (int) - верхняя граница диапазона внешних портов
• `publicPortStart` (int) - нижняя граница диапазона внешних портов
• `vmId` (int) - идентификатор ВМ
• `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 }}" +``` diff --git a/wiki/6.1.0/модуль-decort_rg.md b/wiki/6.1.0/модуль-decort_rg.md new file mode 100644 index 0000000..beb9c58 --- /dev/null +++ b/wiki/6.1.0/модуль-decort_rg.md @@ -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 | Значения:
`oauth2`
`jwt`| Режим аутентификации при подключении к контроллеру облачной платформы DECORT. Данный параметр является обязательным.| +| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должна быть создана (или уже существует) данная ресурсная группа. Данный параметр является обязательным. | +| def_netId | (int) | Уникальный целочисленный идентификатор внутренней или внешней сети. Используется для изменения сети по умолчанию в ресурсной группе. | +| def_netType | (string)
Значения:
`PRIVATE`
`PUBLIC`
`NONE`
Default: `PRIVATE` | Тип сети по умолчанию в ресурсной группе. Используется при создании ресурсной группы, а также при изменении. | +| extNetId | (int) | Уникальный целочисленный идентификатор внешней сети.
Если `def_netType: PRIVATE`, то указывает какую внешнюю сеть подключить к создаваемой внутренней сети, которая будет задана как сеть по умолчанию для создаваемой РГ.
Если `def_netType: PUBLIC`, то указывает какую внешнюю сеть задать как сеть по умолчанию для создаваемой РГ. | +| extNetIp | (string) | IP-адрес для внешней сети, которая задана в параметре `extNetId`. | +| ipcidr | (string) | IP-адрес внутренней сети. Используется при создании ресурсной группы, чтобы задать IP-адрес сети для создаваемой внутренней сети, которая создастся вместе с ресурсной группой. Используется при параметре `def_netType` в значении `PRIVATE`. | +| 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`. | +| owner | (string) | Владелец ресурсной группы. Задаётся при создании ресурсной группы, не обязателен. Если оставить пустое значение - владельцем ресурсной группы будет пользователь, создавший ресурсную группу. | +| permanently | (bool)
Default: `false` | Параметр, использующийся при удалении ресурсной группы. При значении `true` - ресурсная группа удалится безвозвратно, а при `false` - попадёт в корзину. | +| quotas | (dict) | Предназначено для задания или изменения квоты на ресурсы в составе данной ресурсной группы. | +| rename | (string) | Новое имя ресурсной группы.
Возможно переименование только включенной ресурсной группы. | +| rg_id | (int) | Уникальный целочисленный идентификатор ресурсной группы. Является обязательным при изменении РГ если не заданы `rg_name` и `account_id`/`account_name` | +| rg_name | (string) | Имя ресурсной группы. Данный параметр является обязательным при создании. | +| sep_pools| (list) | Список словарей, описывающих доступные пулы СХД.
Ключи словаря:
• `sep_id` (int) - идентификатор системы хранения данных.
• `pool_names` (list) - список названий пулов системы хранения данных.
Чтобы очистить список доступных пулов, нужно указать пустой список `[]`.| +| state | Значения:
`present`
`absent`
`enabled`
`disabled`
Default: `present` | Целевое состояние ресурсной группы. | +| verify_ssl | (bool)
Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.
Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. | + +## Возвращаемые значения модуля 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 +``` diff --git a/wiki/6.1.0/модуль-decort_user_info.md b/wiki/6.1.0/модуль-decort_user_info.md new file mode 100644 index 0000000..c463324 --- /dev/null +++ b/wiki/6.1.0/модуль-decort_user_info.md @@ -0,0 +1,1338 @@ +# Модуль decort_user_info +## Обзор модуля + +Модуль **decort_user_info** предназначен для получения следующей информации о пользователе: +- **основная информация** (см. [возвращаемые значения](#основная-информация) и [примеры](#получение-основной-информации-о-пользователе)) +- **используемые и зарезервированные ресурсы** (см. [параметр resource_consumption](#resource_consumption), [возвращаемые значения](#используемые-и-зарезервированные-ресурсы) и [примеры](#получение-информации-об-используемых-и-зарезервируемых-ресурсах)) +- **доступные аккаунты** (см. [параметр accounts](#accounts), [возвращаемые значения](#доступные-аккаунты) и [примеры](#получение-информации-о-доступных-аккаунтах)) +- **аудиты** (см. [параметр audits](#audits), [возвращаемые значения](#аудиты) и [примеры](#получение-информации-об-аудитах)) +- **доступные методы API** (см. [параметр api_methods](#api_methods), [возвращаемые значения](#доступные-методы-api) и [примеры](#получение-доступных-методов-api)) +- **поиск доступных объектов по строке** (см. [параметр objects_search](#objects_search), [возвращаемые значения](#найденные-объекты) и [примеры](#поиск-доступных-объектов)) + +## Параметры модуля +Ниже приведен список параметров для модуля **decort_user_info** (за исключением [общих параметров авторизации](./введение.md#общие-параметры-модулей-для-авторизации)): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ПараметрТипОписание
+ + accounts + + + (dict) + + Получить информацию об аккаунтах, к которым имеет доступ пользователь, + с учётом заданных параметров вывода. +
Чтобы получить информацию без указания параметров вывода, + необходимо задать пустой словарь {}. +
+ deleted + + (bool) +
Default: false +
+
false - вывод только неудалённых объектов. +
true - вывод только удалённых в корзину объектов. +
+ filter + + (dict) + + Фильтр. +
+ rights + + (str) +
Значения: +
R +
RCX +
ARCXDU +
CXDRAU +
+ По предоставленным правам доступа. +
+ id + + (int) + + По идентификатору. +
+ name + + (str) + + По имени. +
+ status + + (str) +
Значения: +
CONFIRMED +
DELETED +
DESTROYED +
DESTROYING +
DISABLED +
+ По статусу. +
+ pagination + + (dict) + + Постраничный вывод. +
+ number + + (int) +
Default: 1 +
+ Номер страницы. +
+ size + + (int) + + Размер страниц. +
Обязательный параметр. +
+ resource_consumption + + (bool) +
Default: false +
+ Получить информацию об используемых и зарезервированных ресурсах. +
+ sorting + + (dict) + + Сортировка. +
+ asc + + (bool) +
Default: true +
+ Сортировать по возрастанию. +
true - по возрастанию. +
false - по убыванию. +
+ field + + (str) +
Значения: +
createdTime +
deletedTime +
id +
name +
status +
updatedTime +
+ Название поля, по которому сортировать. +
Обязательный параметр. +
+ + api_methods + + + (bool) +
Default: false +
+ Получить методы API, к которым имеет доступ пользователь. +
+ + audits + + + (dict) + + Получить информацию об аудитах пользователя, с учётом + заданных параметров вывода. +
Чтобы получить информацию с параметрами вывода по умолчанию, + необходимо задать пустой словарь {}. +
+ filter + + (dict) + + Фильтр. +
+ api_method + + (str) + + По методу API. +
+ status_code + + (dict) + + По коду ответа HTTP. +
+ min + + (int) + + По минимальному коду ответа HTTP. +
+ max + + (int) + + По максимальному коду ответа HTTP. +
+ time + + (dict) + + По временному периоду. +
+ start + + (dict) + + Начало периода. +
+ unix + + (int) + + Unix-время. +
+ date_time + + (str) + + Дата и время в формате ггггммддччммсс. + Альтернатива параметру unix. +
Допустимо использовать любой разделитель между + группами цифр для повышения читаемости. Например, + гггг-мм-дд чч:мм:сс. +
+ end + + (dict) + + Конец периода. +
Структура словаря аналогична параметру + start. +
+ pagination + + (dict) + + Постраничный вывод. +
+ number + + (int) +
Default: 1 +
+ Номер страницы. +
+ size + + (int) +
Default: 50 +
+ Размер страниц. +
+ + objects_search + + + (str) + + Получить информацию о доступных пользователю объектах, + найденных по строчному значению данного параметра. +
+ + resource_consumption + + + (bool) +
Default: false +
+ Получить информацию об используемых и зарезервированных ресурсах, + к которым имеет доступ пользователь. +
+ +## Возвращаемые значения + +Модуль **decort_user_info** возвращает информацию о пользователе в виде словаря `facts` со следующими ключами: + +### Основная информация + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ admin + + bool + + Наличие административных прав. +
+ data + + dict + + Дополнительные данные. +
+ emailaddresses + + list + + Адреса эл. почты. +
+ name + + str + + Имя/идентификатор. +
+ roles + + list + + Группы доступа. +
+ +### Используемые и зарезервированные ресурсы + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ + resource_consumed + + + dict + + Используемые ресурсы. +
+ cpu + + int + + Количество виртуальных процессоров. +
+ disksize + + int + + Объём дисков в ГБ. +
+ extips + + int + + Количество внешних IP-адресов. +
+ exttraffic + + int + + Объём трафика внешних сетей. +
+ gpu + + int + + Количество графических процессоров. +
+ ram + + int + + Объём оперативной памяти в МБ. +
+ seps + + dict + + Объём дисков по пулам СХД. +
+ (идентификатор СХД) + + dict + + Пулы СХД. +
+ (название пула) + + dict + + Словарь пула СХД. +
+ disksize + + int + + Объём дисков в ГБ. +
+ resource_reserved + + dict + + Зарезервированные ресурсы. +
Структура словаря аналогична словарю + + resource_consumed + . +
+ +### Доступные аккаунты + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ accounts + + list + + Список словарей, описывающих аккаунты. +
+ acl + + list + + Список словарей, описывающих доступы пользователей. +
+ right + + str + + Права доступа. +
+ status + + str + + Статус. +
+ type + + str + + Тип. +
+ userGroupId + + str + + Идентификатор пользователя или группы пользователей. +
+ computeFeatures + + list + + Список дополнительных возможностей гипервизора, доступных ВМ. +
+ createdTime + + int + + Unix-время создания. +
+ createdTime_readable + + str + + Дата и время создания. +
+ deletedTime + + int + + Unix-время удаления. +
+ deletedTime_readable + + str + + Дата и время удаления. +
+ id + + int + + Идентификатор. +
+ name + + str + + Имя. +
+ resource_consumed + + list + + Используемые ресурсы. +
Только если + accounts.resource_consumption: true + и только для неудалённых объектов. +
Структура словаря аналогична словарю + + resource_consumed + . +
+ resource_reserved + + list + + Зарезервированные ресурсы. +
Только если + accounts.resource_consumption: true + и только для неудалённых объектов. +
Структура словаря аналогична словарю + + resource_consumed + . +
+ status + + str + + Статус. +
+ updatedTime + + int + + Unix-время обновления. +
+ updatedTime_readable + + str + + Дата и время обновления. +
+ +### Аудиты + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ audits + + list + + Список словарей, описывающих аудиты. +
+ Call + + str + + Метод API. +
+ Guid + + str + + Уникальный идентификатор аудита. +
+ Response Time + + float + + Время отклика в секундах. +
+ Status Code + + int + + Код ответа HTTP. +
+ Time + + float + + Unix-время. +
+ Time_readable + + str + + Дата и время. +
+ +### Доступные методы API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ api_methods + + list + + Список словарей, описывающих доступные методы API. +
+ (название группы методов API) + + dict + + Доступные методы группы. +
+ (название подгруппы методов API) + + list + + Методы подгруппы. +
+ ALL + + bool + + Доступ ко всем методам группы. +
+ +### Найденные объекты + + + + + + + + + + + + +
+ Ключ + + Тип +
данных +
+ Описание +
+ objects_search + + list + + Список словарей, описывающих найденные объекты. +
+ +## Примеры использования + +### Получение основной информации о пользователе +``` +- name: Example + hosts: localhost + tasks: + - name: Get basic user info + decort_user_info: + # Параметры для авторизации упущены +``` + +### Получение информации об используемых и зарезервируемых ресурсах +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with resource consumption + decort_user_info: + # Параметры для авторизации упущены + resource_consumption: true +``` + +### Получение информации о доступных аккаунтах + +#### Только неудалённые +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with not deleted accounts + decort_user_info: + # Параметры для авторизации упущены + accounts: {} +``` + +#### Только удалённые в корзину +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with deleted accounts + decort_user_info: + # Параметры для авторизации упущены + accounts: + deleted: true +``` + +#### С информацией об используемых и зарезервированных ресурсах +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with accounts + decort_user_info: + # Параметры для авторизации упущены + accounts: + resource_consumption: true +``` + +#### С фильтрацией по статусу +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with accounts + decort_user_info: + # Параметры для авторизации упущены + accounts: + filter: + status: CONFIRMED +``` + +#### С сортировкой по имени +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with accounts + decort_user_info: + # Параметры для авторизации упущены + accounts: + sorting: + field: name +``` + +#### С постраничным выводом +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with accounts + decort_user_info: + # Параметры для авторизации упущены + accounts: + pagination: + size: 2 +``` + +### Получение информации об аудитах + +#### Без использования параметров вывода +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with audits + decort_user_info: + # Параметры для авторизации упущены + audits: {} +``` + +#### С фильтрацией по методу API +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with audits + decort_user_info: + # Параметры для авторизации упущены + audits: + filter: + call: cloudapi/account +``` + +#### С фильтрацией по временному периоду +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with audits + decort_user_info: + # Параметры для авторизации упущены + audits: + filter: + time: + start: + unix: 1724668267 + end: + date_time: 2024-08-26_13-40 +``` + +#### С постраничным выводом +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with audits + decort_user_info: + # Параметры для авторизации упущены + audits: + pagination: + size: 2 +``` + +### Получение доступных методов API +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with API methods + decort_user_info: + # Параметры для авторизации упущены + api_methods: true +``` + +### Поиск доступных объектов +``` +- name: Example + hosts: localhost + tasks: + - name: Get user info with found objects + decort_user_info: + # Параметры для авторизации упущены + objects_search: test +``` diff --git a/wiki/6.1.0/модуль-decort_vins.md b/wiki/6.1.0/модуль-decort_vins.md new file mode 100644 index 0000000..3e28adf --- /dev/null +++ b/wiki/6.1.0/модуль-decort_vins.md @@ -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 | Значения:
`oauth2`
`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`.
Данный параметр является обязательным для указанного режима.
Если параметр не задан в _playbook_, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`. | +|rg_id | (int) | Идентификатор ресурсной группы, в которой должна быть создана или уже существует внутренняя сеть. Если одновременно заданы `rg_id` и `rg_name`, то `rg_name` игнорируется.| +| rg_name | (string) | Имя ресурсной группы, в которой должна быть создана или уже существует внутренняя сеть. Если одновременно заданы `rg_name` и `rg_id`, то `rg_name` игнорируется.| +| state | (string)
Значения:
`present`
`absent`
`enabled`
`disabled`
Default: `present` | Целевое состояние внутренней сети. | +| verify_ssl | (bool)
Default: `true` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.
Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. | +| 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)
Default: `false` | Включить/отключить режим пользовательской конфигурации виртуального маршрутизатора. | +| config_save | (bool)
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 + +``` + + diff --git a/wiki/Home.md b/wiki/Home.md index 13b8073..d23867e 100644 --- a/wiki/Home.md +++ b/wiki/Home.md @@ -1,5 +1,6 @@ ## Документация: +- [Модули Ansible версии 6.1.0](./6.1.0/Home.md) - [Модули Ansible версии 6.0.0](./6.0.0/Home.md) - [Модули Ansible версии 5.6.0](./5.6.0/Home.md) - [Модули Ansible версии 5.5.0](./5.5.0/Home.md)