diff --git a/CHANGELOG.md b/CHANGELOG.md
index 32d5481..5c12f33 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,47 +1,87 @@
-# Список изменений в версии 7.2.0
+# Список изменений в версии 8.0.0
## Добавлено
-### Модуль decort_k8s
+### Модуль decort_account
| Идентификатор
задачи | Описание |
| --- | --- |
-| BANS-628 | Добавлен параметр `lb_sysctl` для установки параметров конфигурации sysctl балансировщика нагрузки. |
-| BANS-701 | Модуль теперь позволяет задать параметр `master_chipset` для существующего кластера, если значение параметра соответствует чипсету master-узлов. |
+| BANS-713 | Добавлен параметр `description` и возвращаемое значение `description`. |
-### Модуль decort_osimage
+### Модуль decort_account_info
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BANS-714 | Добавлено возвращаемое значение `description` для аккаунта и ресурсных групп. |
+
+### Модуль decort_user_info
| Идентификатор
задачи | Описание |
| --- | --- |
-| BANS-308 | Добавлена возможность удаления виртуальных образов. |
+| BANS-715 | Добавлено возвращаемое значение `description` для аккаунтов. |
+| BANS-718 | Добавлен параметр `audits.sorting`. |
+| BANS-725 | Добавлены параметры `audits.filter.time.start.timestamp`, `audits.filter.time.start.datetime`, `audits.filter.time.end.timestamp`, `audits.filter.time.end.datetime`. |
-### Модуль decort_lb
+### Модуль decort_k8s
| Идентификатор
задачи | Описание |
| --- | --- |
-| BANS-627 | Добавлен параметр `sysctl`. |
+| BANS-717 | Добавлено возвращаемое значение `description`. |
### Модуль decort_kvmvm
| Идентификатор
задачи | Описание |
| --- | --- |
-| BANS-651 | Добавлен параметр `get_console_url` для получения ссылки на консоль ВМ. |
-| BANS-652 | Добавлены параметры `disks`, `boot.disk_id` и `boot.disk_size` для управления дисками ВМ. |
-| BANS-629 | Добавлен параметр `clone_from` для создания ВМ путём клонирования другой ВМ. |
+| BANS-719 | Добавлены параметры `boot.mode`, `boot.loader_type`, `network_interface_naming`, `hot_resize` и возвращаемые значения `boot_mode`, `boot_loader_type`, `network_interface_naming`, `hot_resize`. |
+| BANS-746 | Добавлено возвращаемое значение `pinned_to_stack`. |
+| BANS-744 | Добавлены возвращаемые значения `affinity_label`, `affinity_rules` и `anti_affinity_rules`. |
+| BANS-724 | Для параметра `state` добавлены значение `started` вместо `poweredon` и значение `stopped` вместо значений `poweredoff` и `halted`. |
+| BANS-763 | Добавлен параметр `networks.mac`. |
-### Модуль decort_rg
+### Модуль decort_osimage
| Идентификатор
задачи | Описание |
| --- | --- |
-| BANS-424 | Добавлена возможность изменения описания ресурсной группы, а также добавлено возвращаемое значение `description`. |
+| BANS-740 | Добавлены параметры `boot.mode`, `boot.loader_type`, `network_interface_naming`, `hot_resize` и возвращаемые значения `boot_mode`, `boot_loader_type`, `network_interface_naming`, `hot_resize`. |
+
+### Модуль decort_group
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BANS-721 | Добавлен параметр `chipset`. Добавлено возвращаемое значение `Computes.chipset`.|
-## Удалено
### Модуль decort_disk
| Идентификатор
задачи | Описание |
| --- | --- |
-| BANS-657 | Удалён параметр `type`. |
+| BANS-773 | Добавлены возвращаемые значения `size_available` и `size_used`.|
+
+## Удалено
+### Общее
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BANS-669 | Прекращено использование библиотеки `PyJWT`. |
+
+### Модуль decort_k8s
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BANS-711 | Удалена возможность задавать значение больше `1` для параметра `master_count` при `with_lb: false`. |
+
+### Модуль decort_osimage
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BANS-740 | Удалены параметры `hotresize`, `boottype`, `imagetype` в связи с переименованием в `hot_resize`, `boot.mode`, `boot.loader_type`. |
### Модуль decort_kvmvm
| Идентификатор
задачи | Описание |
| --- | --- |
-| BANS-652 | Удален параметр `data_disks` в связи с изменением логики (см. параметр `disks`). Удален параметр `boot_disk` в связи с переименованием в `boot.disk_size`. |
+| BANS-724 | Для параметра `state` удалены значения `poweredoff` и `halted` в связи с заменой на `stopped` и значение `poweredon` в связи заменой на `started`. |
+
+### Модуль decort_user_info
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BANS-725 | Удалены параметры `audits.filter.time.start.unix`, `audits.filter.time.start.date_time`, `audits.filter.time.end.unix`, `audits.filter.time.end.date_time` в связи с переименованием. |
## Исправлено
### Модуль decort_k8s
| Идентификатор
задачи | Описание |
| --- | --- |
-| BANS-661 | При создании кластера модуль возвращал информацию только о первой группе worker-узлов. |
+| BANS-711 | Модуль завершал свою работу ошибкой запроса к API при недопустимом значении в параметре `master_count`. |
+
+### Модуль decort_kvmvm
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BANS-736 | Модуль завершал свою работу ошибкой запроса к API при попытке отсоединить загрузочный диск у запущенной ВМ. |
+| BANS-747 | При создании ВМ со `state: present` модуль запускал ВМ после создания. |
+| BANS-733 | Исправлена ошибка при клонировании ВМ в режиме `check_mode: true`. |
diff --git a/README.md b/README.md
index 8629229..37e862d 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,7 @@
| Версия платформы | Версия модулей Ansible |
|:----------------:|:--------------------------:|
+| 4.3.0 | 8.0.x |
| 4.2.0 | 7.0.x, 7.1.x, 7.2.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 |
diff --git a/library/decort_account.py b/library/decort_account.py
index c2325b1..b87f43d 100644
--- a/library/decort_account.py
+++ b/library/decort_account.py
@@ -111,6 +111,9 @@ class DecortAccount(DecortController):
),
),
),
+ description=dict(
+ type='str',
+ ),
),
required_one_of=[
('id', 'name')
@@ -358,6 +361,14 @@ class DecortAccount(DecortController):
)
if set(self.facts['uniqPools']) != sep_pools:
result_args['sep_pools'] = sep_pools
+
+ aparam_desc = self.aparams['description']
+ if (
+ aparam_desc is not None
+ and self.facts['description'] != aparam_desc
+ ):
+ result_args['description'] = aparam_desc
+
return result_args
diff --git a/library/decort_disk.py b/library/decort_disk.py
index 3f1bc07..44fb3b5 100644
--- a/library/decort_disk.py
+++ b/library/decort_disk.py
@@ -173,6 +173,8 @@ class decort_disk(DecortController):
ret_dict['computes'] = self.disk_info['computes']
ret_dict['gid'] = self.disk_info['gid']
ret_dict['iotune'] = self.disk_info['iotune']
+ ret_dict['size_available'] = self.disk_info['sizeAvailable']
+ ret_dict['size_used'] = self.disk_info['sizeUsed']
return ret_dict
diff --git a/library/decort_group.py b/library/decort_group.py
index 7c7a24a..07a04f9 100644
--- a/library/decort_group.py
+++ b/library/decort_group.py
@@ -39,6 +39,7 @@ class decort_group(DecortController):
if self.group_id:
self.group_should_exist = True
+ self.check_amodule_args_for_change()
return
def nop(self):
@@ -74,22 +75,34 @@ class decort_group(DecortController):
return
def create(self):
+ chipset = self.aparams['chipset']
+ if chipset is None:
+ chipset = 'i440fx'
+ self.message(
+ msg=f'Chipset not specified, '
+ f'default value "{chipset}" will be used.',
+ warning=True,
+ )
+
self.group_id=self.group_provision(
- self.bservice_id,
- self.amodule.params['name'],
- self.amodule.params['count'],
- self.amodule.params['cpu'],
- self.amodule.params['ram'],
- self.amodule.params['boot_disk'],
- self.amodule.params['image_id'],
- self.amodule.params['driver'],
- self.amodule.params['role'],
- self.amodule.params['networks'],
- self.amodule.params['timeoutStart'],
+ bs_id=self.bservice_id,
+ arg_name=self.amodule.params['name'],
+ arg_count=self.amodule.params['count'],
+ arg_cpu=self.amodule.params['cpu'],
+ arg_ram=self.amodule.params['ram'],
+ arg_boot_disk=self.amodule.params['boot_disk'],
+ arg_image_id=self.amodule.params['image_id'],
+ arg_driver=self.amodule.params['driver'],
+ arg_role=self.amodule.params['role'],
+ arg_network=self.amodule.params['networks'],
+ arg_timeout=self.amodule.params['timeoutStart'],
+ chipset=chipset,
)
if self.amodule.params['state'] in ('started','present'):
self.group_state(self.bservice_id,self.group_id,self.amodule.params['state'])
+
+ self.group_should_exist = True
return
def action(self):
@@ -100,13 +113,26 @@ class decort_group(DecortController):
):
self.group_state(self.bservice_id,self.group_id,self.amodule.params['state'])
- if self.aparams['count'] != None:
+ aparam_chipset = self.aparams['chipset']
+ if (
+ self.aparams['count'] is not None
+ and self.aparams['count'] != len(self.group_info['computes'])
+ ):
self.group_resize_count(
bs_id=self.bservice_id,
gr_dict=self.group_info,
desired_count=self.aparams['count'],
+ chipset=aparam_chipset,
)
+ if aparam_chipset is not None:
+ for vm in self.group_info['computes']:
+ if vm['chipset'] != aparam_chipset:
+ self.compute_update(
+ compute_id=vm['id'],
+ chipset=aparam_chipset,
+ )
+
for aparam_name, info_key in {'cpu': 'cpu',
'boot_disk': 'disk',
'role': 'role',
@@ -254,6 +280,13 @@ class decort_group(DecortController):
)
)
),
+ chipset=dict(
+ type='str',
+ choices=[
+ 'Q35',
+ 'i440fx',
+ ]
+ ),
),
supports_check_mode=True,
required_one_of=[
@@ -268,6 +301,43 @@ class decort_group(DecortController):
],
)
+ def check_amodule_args_for_change(self):
+ check_errors = False
+
+ if (
+ self.aparams['chipset'] is None
+ and self.aparams['count'] > len(self.group_info['computes'])
+ ):
+ check_errors = True
+ self.message(
+ msg='Check for parameter "chipset" failed: '
+ 'Chipset must be specified when increasing '
+ 'VM count in group'
+ )
+
+ if (
+ self.aparams['count'] is None
+ or self.aparams['count'] == len(self.group_info['computes'])
+ ):
+ aparam_chipset = self.aparams['chipset']
+ if aparam_chipset is not None:
+ for vm in self.group_info['computes']:
+ if (
+ vm['chipset'] != aparam_chipset
+ and self.group_info['techStatus'] != 'STOPPED'
+ and self.amodule.params['state'] != 'stopped'
+ ):
+ check_errors = True
+ self.message(
+ msg=f'Check for parameter "chipset" failed: '
+ f'group ID {self.group_id} must be stopped '
+ f'to change chipset',
+ )
+ break
+
+ if check_errors:
+ self.exit(fail=True)
+
def main():
subj = decort_group()
amodule = subj.amodule
diff --git a/library/decort_k8s.py b/library/decort_k8s.py
index ec3b0b7..68dffb6 100644
--- a/library/decort_k8s.py
+++ b/library/decort_k8s.py
@@ -121,6 +121,18 @@ class decort_k8s(DecortController):
)
self.exit(fail=True)
+ if (
+ self.aparams['master_count'] is not None
+ and self.aparams['master_count'] > 1
+ and not self.aparams['with_lb']
+ ):
+ self.message(
+ 'Check for parameter "master_count" failed: '
+ 'master_count can be more than 1 only if the parameter '
+ '"with_lb" is set to True.'
+ )
+ self.exit(fail=True)
+
return
def package_facts(self,check_mode=False):
@@ -155,6 +167,7 @@ class decort_k8s(DecortController):
ret_dict['k8s_Masters'] = self.k8s_info['k8sGroups']['masters']
ret_dict['k8s_Workers'] = self.k8s_info['k8sGroups']['workers']
ret_dict['lb_id'] = self.k8s_info['lbId']
+ ret_dict['description'] = self.k8s_info['desc']
return ret_dict
@@ -358,6 +371,7 @@ class decort_k8s(DecortController):
master_count=dict(
type='int',
default=1,
+ choices=[1, 3, 5, 7],
),
master_cpu=dict(
type='int',
diff --git a/library/decort_kvmvm.py b/library/decort_kvmvm.py
index 771c8b0..8688442 100644
--- a/library/decort_kvmvm.py
+++ b/library/decort_kvmvm.py
@@ -1,4 +1,6 @@
#!/usr/bin/python
+import re
+from typing import Sequence, Any, TypeVar
DOCUMENTATION = r'''
---
@@ -12,6 +14,9 @@ from ansible.module_utils.basic import env_fallback
from ansible.module_utils.decort_utils import *
+DefaultT = TypeVar('DefaultT')
+
+
class decort_kvmvm(DecortController):
def __init__(self):
# call superclass constructor first
@@ -73,6 +78,8 @@ class decort_kvmvm(DecortController):
if not clone_id:
clone_id = self.clone()
+ if self.amodule.check_mode:
+ self.exit()
self.comp_id, self.comp_info, self.rg_id = self._compute_get_by_id(
comp_id=clone_id,
@@ -178,8 +185,8 @@ class decort_kvmvm(DecortController):
'hp_backed must be set to True to connect a compute '
'to a DPDK network.'
)
- # MTU for non-DPDK networks
for net in aparam_nets:
+ # MTU for non-DPDK networks
if (
net['type'] != self.VMNetType.DPDK.value
and net['mtu'] is not None
@@ -191,6 +198,28 @@ class decort_kvmvm(DecortController):
' (remove parameter "mtu" for network'
f' {net["type"]} with ID {net["id"]}).'
)
+ # MAC address
+ if net['mac'] is not None:
+ if net['type'] == self.VMNetType.EMPTY.value:
+ check_error = True
+ self.message(
+ 'Check for parameter "networks.mac" failed: '
+ 'MAC-address cannot be specified for an '
+ 'EMPTY type network.'
+ )
+
+ mac_validation_result = re.match(
+ '[0-9a-f]{2}([:]?)[0-9a-f]{2}(\\1[0-9a-f]{2}){4}$',
+ net['mac'].lower(),
+ )
+ if not mac_validation_result:
+ check_error = True
+ self.message(
+ 'Check for parameter "networks.mac" failed: '
+ f'MAC-address for network ID {net["id"]} must be '
+ 'specified in quotes and in the format '
+ '"XX:XX:XX:XX:XX:XX".'
+ )
aparam_custom_fields = self.aparams['custom_fields']
if aparam_custom_fields is not None:
@@ -215,6 +244,22 @@ class decort_kvmvm(DecortController):
'the list must contain only unique elements.'
)
+ aparam_state = self.aparams['state']
+ new_state = None
+ match aparam_state:
+ case 'halted' | 'poweredoff':
+ new_state = 'stopped'
+ case 'poweredon':
+ new_state = 'started'
+
+ if new_state:
+ self.message(
+ msg=f'"{aparam_state}" state is deprecated and might be '
+ f'removed in newer versions. '
+ f'Please use "{new_state}" instead.',
+ warning=True,
+ )
+
if check_error:
self.exit(fail=True)
@@ -265,12 +310,40 @@ class decort_kvmvm(DecortController):
# each of the following calls will abort if argument is missing
self.check_amodule_argument('cpu')
self.check_amodule_argument('ram')
+
+ aparam_boot = self.aparams['boot']
validated_bdisk_size = 0
- if self.amodule.params['boot'] is not None:
+ boot_mode = 'bios'
+ loader_type = 'unknown'
+ if aparam_boot is not None:
validated_bdisk_size = self.amodule.params['boot'].get(
'disk_size', 0
)
+ if aparam_boot['mode'] is None:
+ self.message(
+ msg=self.MESSAGES.default_value_used(
+ param_name='boot.mode',
+ default_value=boot_mode
+ ),
+ warning=True,
+ )
+ else:
+ boot_mode = aparam_boot['mode']
+
+ if aparam_boot['loader_type'] is None:
+ self.message(
+ msg=self.MESSAGES.default_value_used(
+ param_name='boot.loader_type',
+ default_value=loader_type
+ ),
+ warning=True,
+ )
+
+ else:
+ loader_type = aparam_boot['loader_type']
+
+
image_id, image_facts = None, None
if self.aparam_image:
# either image_name or image_id must be present
@@ -308,7 +381,7 @@ class decort_kvmvm(DecortController):
# Once this "feature" is fixed, make sure VM is created according to the actual desired state
#
start_compute = False # change this once a workaround for the aforementioned libvirt "feature" is implemented
- if self.amodule.params['state'] in ('halted', 'poweredoff'):
+ if self.amodule.params['state'] in ('halted', 'poweredoff', 'stopped'):
start_compute = False
if self.amodule.params['ssh_key'] and self.amodule.params['ssh_key_user'] and not self.amodule.params['ci_user_data']:
@@ -334,7 +407,6 @@ class decort_kvmvm(DecortController):
if numa_affinity is None:
numa_affinity = 'none'
-
chipset = self.amodule.params['chipset']
if chipset is None:
chipset = 'i440fx'
@@ -343,6 +415,28 @@ class decort_kvmvm(DecortController):
f'default value "{chipset}" will be used.',
warning=True,
)
+
+ network_interface_naming = self.aparams['network_interface_naming']
+ if network_interface_naming is None:
+ network_interface_naming = 'ens'
+ self.message(
+ msg=self.MESSAGES.default_value_used(
+ param_name='network_interface_naming',
+ default_value=network_interface_naming
+ ),
+ warning=True,
+ )
+
+ hot_resize = self.aparams['hot_resize']
+ if hot_resize is None:
+ hot_resize = False
+ self.message(
+ msg=self.MESSAGES.default_value_used(
+ param_name='hot_resize',
+ default_value=hot_resize
+ ),
+ warning=True,
+ )
# 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
@@ -360,7 +454,11 @@ class decort_kvmvm(DecortController):
cpu_pin=cpu_pin,
hp_backed=hp_backed,
numa_affinity=numa_affinity,
- preferred_cpu_cores=self.amodule.params['preferred_cpu_cores'],)
+ preferred_cpu_cores=self.amodule.params['preferred_cpu_cores'],
+ boot_mode=boot_mode,
+ boot_loader_type=loader_type,
+ network_interface_naming=network_interface_naming,
+ hot_resize=hot_resize,)
self.comp_should_exist = True
# Originally we would have had to re-read comp_info after VM was provisioned
@@ -407,7 +505,7 @@ class decort_kvmvm(DecortController):
label=self.amodule.params['affinity_label'],)
# NOTE: see NOTE above regarding libvirt "feature" and new VMs created in HALTED state
if self.aparam_image:
- if self.amodule.params['state'] not in ('halted', 'poweredoff'):
+ if self.amodule.params['state'] in ('poweredon', 'started'):
self.compute_powerstate(self.comp_info, 'started')
if self.aparams['custom_fields'] is None:
@@ -553,14 +651,54 @@ class decort_kvmvm(DecortController):
'description': 'desc',
'auto_start': 'autoStart',
'preferred_cpu_cores': 'preferredCpu',
+ 'boot.mode': 'bootType',
+ 'boot.loader_type': 'loaderType',
+ 'network_interface_naming': 'networkInterfaceNaming',
+ 'hot_resize': 'hotResize',
}
+
+ def get_nested_value(
+ d: dict,
+ keys: Sequence[str],
+ default: DefaultT | None = None,
+ ) -> Any | DefaultT:
+ if not keys:
+ raise ValueError
+
+ key = keys[0]
+ if key not in d:
+ return default
+ value = d[key]
+
+ if len(keys) > 1:
+ if isinstance(value, dict):
+ nested_d = value
+ return get_nested_value(
+ d=nested_d,
+ keys=keys[1:],
+ default=default,
+ )
+ if value is None:
+ return default
+ raise ValueError(
+ f'The key {key} found, but its value is not a dictionary.'
+ )
+ return value
+
for aparam_name, comp_field_name in params_to_check.items():
- aparam_value = self.amodule.params[aparam_name]
- if (
- aparam_value is not None
- and aparam_value != self.comp_info[comp_field_name]
- ):
- result_args[aparam_name] = aparam_value
+ aparam_value = get_nested_value(
+ d=self.aparams,
+ keys=aparam_name.split('.'),
+ )
+ comp_value = get_nested_value(
+ d=self.comp_info,
+ keys=comp_field_name.split('.'),
+ )
+
+ if aparam_value is not None and aparam_value != comp_value:
+ result_args[aparam_name.replace('.', '_')] = (
+ aparam_value
+ )
return result_args
@@ -679,15 +817,49 @@ class decort_kvmvm(DecortController):
ret_dict['clones'] = self.comp_info['clones']
ret_dict['clone_reference'] = self.comp_info['cloneReference']
+ ret_dict['boot_mode'] = self.comp_info['bootType']
+ ret_dict['boot_loader_type'] = self.comp_info['loaderType']
+ ret_dict['network_interface_naming'] = self.comp_info[
+ 'networkInterfaceNaming'
+ ]
+ ret_dict['hot_resize'] = self.comp_info['hotResize']
+
+ ret_dict['pinned_to_stack'] = self.comp_info['pinnedToStack']
+
+ ret_dict['affinity_label'] = self.comp_info['affinityLabel']
+ ret_dict['affinity_rules'] = self.comp_info['affinityRules']
+ ret_dict['anti_affinity_rules'] = self.comp_info['antiAffinityRules']
+
return ret_dict
def check_amodule_args_for_create(self):
+ check_errors = False
# Check for unacceptable parameters for a blank Compute
if (
self.aparams['image_id'] is not None
or self.aparams['image_name'] is not None
):
self.aparam_image = True
+ for param in (
+ 'network_interface_naming',
+ 'hot_resize',
+ ):
+ if self.aparams[param] is not None:
+ check_errors = True
+ self.message(
+ f'Check for parameter "{param}" failed: '
+ 'parameter can be specified only for a blank VM.'
+ )
+
+ if self.aparams['boot'] is not None:
+ for param in ('mode', 'loader_type'):
+ if self.aparams['boot'][param] is not None:
+ check_errors = True
+ self.message(
+ f'Check for parameter "boot.{param}" failed: '
+ 'parameter can be specified only for a blank VM.'
+ )
+
else:
self.aparam_image = False
if (
@@ -696,14 +868,15 @@ class decort_kvmvm(DecortController):
'present',
'poweredoff',
'halted',
+ 'stopped',
)
):
+ check_errors = True
self.message(
'Check for parameter "state" failed: '
'state for a blank Compute must be either '
- '"present", "poweredoff" or "halted".'
+ '"present" or "stopped".'
)
- self.exit(fail=True)
for parameter in (
'ssh_key',
@@ -711,38 +884,41 @@ class decort_kvmvm(DecortController):
'ci_user_data',
):
if self.aparams[parameter] is not None:
+ check_errors = True
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'] is None
and self.aparams['boot']['disk_size'] is None
):
+ check_errors = True
self.message(
'Check for parameter "sep_id" failed: '
'"image_id" or "image_name" or "boot.disk_size" '
'must be specified to set sep_id.'
)
- self.exit(fail=True)
if self.aparams['rollback_to'] is not None:
+ check_errors = True
self.message(
'Check for parameter "rollback_to" failed: '
'rollback_to can be specified only for existing compute.'
)
- self.exit(fail=True)
if self.aparam_networks_has_dpdk and not self.aparams['hp_backed']:
+ check_errors = True
self.message(
'Check for parameter "networks" failed:'
' hp_backed must be set to True to connect a compute'
' to a DPDK network.'
)
+
+ if check_errors:
self.exit(fail=True)
@property
@@ -769,6 +945,21 @@ class decort_kvmvm(DecortController):
disk_size=dict(
type='int',
),
+ mode=dict(
+ type='str',
+ choices=[
+ 'bios',
+ 'uefi',
+ ],
+ ),
+ loader_type=dict(
+ type='str',
+ choices=[
+ 'windows',
+ 'linux',
+ 'unknown',
+ ],
+ ),
),
),
sep_id=dict(
@@ -840,6 +1031,9 @@ class decort_kvmvm(DecortController):
mtu=dict(
type='int',
),
+ mac=dict(
+ type='str',
+ ),
),
required_if=[
('type', 'VINS', ('id',)),
@@ -892,6 +1086,8 @@ class decort_kvmvm(DecortController):
'poweredoff',
'halted',
'poweredon',
+ 'stopped',
+ 'started',
'present',
],
),
@@ -974,6 +1170,16 @@ class decort_kvmvm(DecortController):
),
),
),
+ network_interface_naming=dict(
+ type='str',
+ choices=[
+ 'ens',
+ 'eth',
+ ],
+ ),
+ hot_resize=dict(
+ type='bool',
+ ),
),
supports_check_mode=True,
required_one_of=[
@@ -1069,12 +1275,14 @@ class decort_kvmvm(DecortController):
if (
not comp_info['imageId']
- and self.amodule.params['state'] in ('poweredon', 'paused')
+ and self.amodule.params['state'] in (
+ 'poweredon', 'paused', 'started',
+ )
):
check_errors = True
self.message(
'Check for parameter "state" failed: '
- 'state for a blank Compute can not be "poweredon" or "paused".'
+ 'state for a blank Compute can not be "started" or "paused".'
)
is_vm_stopped_or_will_be_stopped = (
@@ -1083,14 +1291,14 @@ class decort_kvmvm(DecortController):
and (
self.amodule.params['state'] is None
or self.amodule.params['state'] in (
- 'halted', 'poweredoff', 'present',
+ 'halted', 'poweredoff', 'present', 'stopped',
)
)
)
or (
comp_info['techStatus'] != 'STOPPED'
and self.amodule.params['state'] in (
- 'halted', 'poweredoff',
+ 'halted', 'poweredoff', 'stopped',
)
)
)
@@ -1120,6 +1328,7 @@ class decort_kvmvm(DecortController):
'cpu_pin': 'cpupin',
'hp_backed': 'hpBacked',
'numa_affinity': 'numaAffinity',
+ 'hot_resize': 'hotResize',
}
for param_name, comp_field_name in params_to_check.items():
if (
@@ -1159,13 +1368,13 @@ class decort_kvmvm(DecortController):
and (
self.amodule.params['state'] is None
or self.amodule.params['state'] in (
- 'poweredon', 'present',
+ 'poweredon', 'present', 'started',
)
)
)
or (
comp_info['techStatus'] != 'STARTED'
- and self.amodule.params['state'] == 'poweredon'
+ and self.amodule.params['state'] in ('poweredon', 'started')
)
)
@@ -1179,30 +1388,55 @@ class decort_kvmvm(DecortController):
aparam_disks = self.aparams['disks']
if aparam_disks is not None:
- if self.comp_info['snapSets']:
- match aparam_disks['mode']:
- case 'detach' | 'delete':
- check_errors = True
- self.message(
- f'Check for parameter "disks" failed: '
- f'cannot {aparam_disks["mode"]} disks for '
- f'Compute ID {self.comp_id} while snapshots '
- f'exist in compute.'
- )
- case 'match':
- comp_disk_ids = {
- disk['id'] for disk in self.comp_info['disks']
- }
- disks = set(aparam_disks['ids'])
- disks_to_detach = comp_disk_ids - disks
- if disks_to_detach:
- check_errors = True
- self.message(
- f'Check for parameter "disks" failed: '
- f'disks {disks_to_detach} cannot be detached '
- f'from Compute ID {self.comp_id} while '
- f'snapshots exist in compute.'
- )
+ aparam_disks_ids = aparam_disks['ids']
+ comp_boot_disk_id = None
+ for comp_disk in self.comp_info['disks']:
+ if comp_disk['type'] == 'B':
+ comp_boot_disk_id = comp_disk['id']
+ break
+ disks_to_detach = []
+ match aparam_disks['mode']:
+ case 'detach' | 'delete':
+ disks_to_detach = aparam_disks_ids
+ case 'match':
+ comp_disk_ids = {
+ disk['id'] for disk in self.comp_info['disks']
+ }
+ disks = set(aparam_disks_ids)
+ disks_to_detach = comp_disk_ids - disks
+ if (
+ comp_boot_disk_id is not None
+ and comp_boot_disk_id in disks_to_detach
+ and not is_vm_stopped_or_will_be_stopped
+ ):
+ check_errors = True
+ self.message(
+ f'Check for parameter "disks" failed: '
+ f'VM ID {comp_id} must be stopped to detach '
+ f'boot disk ID {comp_boot_disk_id}.'
+ )
+ if self.comp_info['snapSets'] and disks_to_detach:
+ check_errors = True
+ self.message(
+ f'Check for parameter "disks" failed: '
+ f'cannot detach disks {disks_to_detach} from '
+ f'Compute ID {self.comp_id} while snapshots exist.'
+ )
+
+ if (
+ (
+ self.aparams['cpu'] is not None
+ and self.aparams['cpu'] != comp_info['cpus']
+ ) or (
+ self.aparams['ram'] is not None
+ and self.aparams['ram'] != comp_info['ram']
+ )
+ ) and not (self.aparams['hot_resize'] or comp_info['hotResize']):
+ check_errors = True
+ self.message(
+ 'Check for parameters "cpu" and "ram" failed: '
+ 'Hot resize must be enabled to change CPU or RAM.'
+ )
if check_errors:
self.exit(fail=True)
@@ -1323,7 +1557,8 @@ def main():
subj.destroy()
else:
if amodule.params['state'] in (
- 'paused', 'poweredon', 'poweredoff', 'halted'
+ 'paused', 'poweredon', 'poweredoff',
+ 'halted', 'started', 'stopped',
):
subj.compute_powerstate(
comp_facts=subj.comp_info,
@@ -1331,7 +1566,7 @@ def main():
)
subj.modify(arg_wait_cycles=7)
elif subj.comp_info['status'] == "DELETED":
- if amodule.params['state'] in ('present', 'poweredon'):
+ if amodule.params['state'] in ('present', 'poweredon', 'started'):
# TODO - check if restore API returns VM ID (similarly to VM create API)
subj.compute_restore(comp_id=subj.comp_id)
# TODO - do we need updated comp_info to manage port forwards and size after VM is restored?
@@ -1345,10 +1580,15 @@ def main():
# subj.nop()
# subj.comp_should_exist = False
subj.destroy()
- elif amodule.params['state'] in ('paused', 'poweredoff', 'halted'):
+ elif amodule.params['state'] in (
+ 'paused', 'poweredoff', 'halted', 'stopped'
+ ):
subj.error()
elif subj.comp_info['status'] == "DESTROYED":
- if amodule.params['state'] in ('present', 'poweredon', 'poweredoff', 'halted'):
+ if amodule.params['state'] in (
+ 'present', 'poweredon', 'poweredoff',
+ 'halted', 'started', 'stopped',
+ ):
subj.create() # this call will also handle data disk & network connection
elif amodule.params['state'] == 'absent':
subj.nop()
@@ -1363,7 +1603,10 @@ def main():
# If requested state is 'absent' - nothing to do
if state == 'absent':
subj.nop()
- elif state in ('present', 'poweredon', 'poweredoff', 'halted'):
+ elif state in (
+ 'present', 'poweredon', 'poweredoff',
+ 'halted', 'started', 'stopped',
+ ):
subj.create() # this call will also handle data disk & network connection
elif state == 'paused':
subj.error()
diff --git a/library/decort_osimage.py b/library/decort_osimage.py
index 1928f89..12f564a 100644
--- a/library/decort_osimage.py
+++ b/library/decort_osimage.py
@@ -72,13 +72,61 @@ class decort_osimage(DecortController):
def decort_image_create(self,amodule):
+ aparam_boot = self.aparams['boot']
+ boot_mode = 'bios'
+ loader_type = 'unknown'
+ if aparam_boot is not None:
+ if aparam_boot['mode'] is None:
+ self.message(
+ msg=self.MESSAGES.default_value_used(
+ param_name='boot.mode',
+ default_value=boot_mode
+ ),
+ warning=True,
+ )
+ else:
+ boot_mode = aparam_boot['mode']
+
+ if aparam_boot['loader_type'] is None:
+ self.message(
+ msg=self.MESSAGES.default_value_used(
+ param_name='boot.loader_type',
+ default_value=loader_type
+ ),
+ warning=True,
+ )
+ else:
+ loader_type = aparam_boot['loader_type']
+
+ network_interface_naming = self.aparams['network_interface_naming']
+ if network_interface_naming is None:
+ network_interface_naming = 'ens'
+ self.message(
+ msg=self.MESSAGES.default_value_used(
+ param_name='network_interface_naming',
+ default_value=network_interface_naming
+ ),
+ warning=True,
+ )
+
+ hot_resize = self.aparams['hot_resize']
+ if hot_resize is None:
+ hot_resize = False
+ self.message(
+ msg=self.MESSAGES.default_value_used(
+ param_name='hot_resize',
+ default_value=hot_resize
+ ),
+ warning=True,
+ )
+
# function that creates OS image
image_facts = self.image_create(img_name=self.validated_image_name,
url=amodule.params['url'],
gid=amodule.params['gid'],
- boottype=amodule.params['boottype'],
- imagetype=amodule.params['imagetype'],
- hotresize=amodule.params['hotresize'],
+ boot_mode=boot_mode,
+ boot_loader_type=loader_type,
+ hot_resize=hot_resize,
username=amodule.params['image_username'],
password=amodule.params['image_password'],
account_Id=self.validated_account_id,
@@ -86,7 +134,8 @@ class decort_osimage(DecortController):
passwordDL=amodule.params['passwordDL'],
sepId=amodule.params['sepId'],
poolName=amodule.params['poolName'],
- drivers=amodule.params['drivers'])
+ drivers=amodule.params['drivers'],
+ network_interface_naming=network_interface_naming)
self.result['changed'] = True
return image_facts
@@ -126,7 +175,11 @@ class decort_osimage(DecortController):
image_id, image_facts = self.decort_virt_image_find(amodule)
return image_id, image_facts
- def decort_osimage_package_facts(arg_osimage_facts, arg_check_mode=False):
+ @staticmethod
+ def decort_osimage_package_facts(
+ arg_osimage_facts: dict | None,
+ arg_check_mode=False,
+ ):
"""Package a dictionary of OS image according to the decort_osimage module specification. This
dictionary will be returned to the upstream Ansible engine at the completion of the module run.
@@ -154,13 +207,26 @@ class decort_osimage(DecortController):
ret_dict['id'] = arg_osimage_facts['id']
ret_dict['name'] = arg_osimage_facts['name']
ret_dict['size'] = arg_osimage_facts['size']
- ret_dict['type'] = arg_osimage_facts['type']
# ret_dict['arch'] = arg_osimage_facts['architecture']
ret_dict['sep_id'] = arg_osimage_facts['sepId']
ret_dict['pool'] = arg_osimage_facts['pool']
ret_dict['state'] = arg_osimage_facts['status']
ret_dict['linkto'] = arg_osimage_facts['linkTo']
ret_dict['accountId'] = arg_osimage_facts['accountId']
+ ret_dict['boot_mode'] = arg_osimage_facts['bootType']
+
+ ret_dict['boot_loader_type'] = ''
+ match arg_osimage_facts['type']:
+ case 'cdrom' | 'virtual' as type:
+ ret_dict['type'] = type
+ case _ as boot_loader_type:
+ ret_dict['type'] = 'template'
+ ret_dict['boot_loader_type'] = boot_loader_type
+
+ ret_dict['network_interface_naming'] = arg_osimage_facts[
+ 'networkInterfaceNaming'
+ ]
+ ret_dict['hot_resize'] = arg_osimage_facts['hotResize']
return ret_dict
@property
@@ -207,14 +273,6 @@ class decort_osimage(DecortController):
type='str',
default='KVM_X86',
),
- imagetype=dict(
- type='str',
- default='linux',
- ),
- boottype=dict(
- type='str',
- default='uefi',
- ),
url=dict(
type='str',
),
@@ -229,9 +287,8 @@ class decort_osimage(DecortController):
poolName=dict(
type='str',
),
- hotresize=dict(
+ hot_resize=dict(
type='bool',
- default=False,
),
image_username=dict(
type='str',
@@ -245,6 +302,33 @@ class decort_osimage(DecortController):
passwordDL=dict(
type='str',
),
+ boot=dict(
+ type='dict',
+ options=dict(
+ mode=dict(
+ type='str',
+ choices=[
+ 'bios',
+ 'uefi',
+ ],
+ ),
+ loader_type=dict(
+ type='str',
+ choices=[
+ 'windows',
+ 'linux',
+ 'unknown',
+ ],
+ ),
+ ),
+ ),
+ network_interface_naming=dict(
+ type='str',
+ choices=[
+ 'ens',
+ 'eth',
+ ],
+ ),
),
supports_check_mode=True,
)
diff --git a/library/decort_user_info.py b/library/decort_user_info.py
index 7519381..3e66fff 100644
--- a/library/decort_user_info.py
+++ b/library/decort_user_info.py
@@ -117,29 +117,29 @@ class DecortUserInfo(DecortController):
start=dict(
type='dict',
options=dict(
- unix=dict(
+ timestamp=dict(
type='int',
),
- date_time=dict(
+ datetime=dict(
type='str',
),
),
mutually_exclusive=[
- ('unix', 'date_time'),
+ ('timestamp', 'datetime'),
],
),
end=dict(
type='dict',
options=dict(
- unix=dict(
+ timestamp=dict(
type='int',
),
- date_time=dict(
+ datetime=dict(
type='str',
),
),
mutually_exclusive=[
- ('unix', 'date_time'),
+ ('timestamp', 'datetime'),
],
),
),
@@ -160,6 +160,23 @@ class DecortUserInfo(DecortController):
),
),
),
+ sorting=dict(
+ type='dict',
+ options=dict(
+ asc=dict(
+ type='bool',
+ default=True,
+ ),
+ field=dict(
+ type='str',
+ choices=[
+ e.value
+ for e in self.AuditsSortableField
+ ],
+ required=True,
+ ),
+ ),
+ ),
),
),
objects_search=dict(
@@ -184,7 +201,7 @@ class DecortUserInfo(DecortController):
match self.aparams['audits']:
case {'filter': {'time':
- {'start': {'date_time': str() as dt_str}}
+ {'start': {'datetime': str() as dt_str}}
}
}:
if self.dt_str_to_sec(dt_str=dt_str) is None:
@@ -192,7 +209,7 @@ class DecortUserInfo(DecortController):
check_error = True
match self.aparams['audits']:
case {'filter': {'time':
- {'end': {'date_time': str() as dt_str}}
+ {'end': {'datetime': str() as dt_str}}
}
}:
if self.dt_str_to_sec(dt_str=dt_str) is None:
@@ -283,16 +300,16 @@ class DecortUserInfo(DecortController):
mapped_args['max_status_code'] = max_status_code
match input_args_filter['time']:
- case {'start': {'unix': int() as start_unix_time}}:
+ case {'start': {'timestamp': int() as start_unix_time}}:
mapped_args['start_unix_time'] = start_unix_time
- case {'start': {'date_time': str() as start_dt_str}}:
+ case {'start': {'datetime': str() as start_dt_str}}:
mapped_args['start_unix_time'] = self.dt_str_to_sec(
dt_str=start_dt_str
)
match input_args_filter['time']:
- case {'end': {'unix': int() as end_unix_time}}:
+ case {'end': {'timestamp': int() as end_unix_time}}:
mapped_args['end_unix_time'] = end_unix_time
- case {'end': {'date_time': str() as end_dt_str}}:
+ case {'end': {'datetime': str() as end_dt_str}}:
mapped_args['end_unix_time'] = self.dt_str_to_sec(
dt_str=end_dt_str
)
@@ -302,6 +319,16 @@ class DecortUserInfo(DecortController):
mapped_args['page_number'] = input_args_pagination['number']
mapped_args['page_size'] = input_args_pagination['size']
+ input_args_sorting = input_args['sorting']
+ if input_args_sorting:
+ mapped_args['sort_by_asc'] = input_args_sorting['asc']
+
+ input_args_sorting_field = input_args_sorting['field']
+ if input_args_sorting_field:
+ mapped_args['sort_by_field'] = (
+ self.AuditsSortableField(input_args_sorting_field)
+ )
+
return mapped_args
def run(self):
diff --git a/module_utils/decort_utils.py b/module_utils/decort_utils.py
index 51a4735..62fef3a 100644
--- a/module_utils/decort_utils.py
+++ b/module_utils/decort_utils.py
@@ -3,14 +3,26 @@ from datetime import datetime
from enum import Enum
import json
import re
-from typing import Any, Callable, Iterable, Literal, Optional, Tuple
+from functools import wraps
+from typing import (
+ Any,
+ Callable,
+ Iterable,
+ Literal,
+ Optional,
+ ParamSpec,
+ TypeVar,
+)
import time
-import jwt
import requests
from ansible.module_utils.basic import AnsibleModule, env_fallback
+P = ParamSpec('P')
+R = TypeVar('R')
+
+
class DecortController(object):
"""DecortController is a utility class that holds target controller context and handles API requests formatting
based on the requested authentication type.
@@ -112,7 +124,7 @@ class DecortController(object):
IMAGE_TYPES = [
'cdrom',
'linux',
- 'other',
+ 'unknown',
'virtual',
'windows',
]
@@ -165,6 +177,14 @@ class DecortController(object):
DPDK = 'DPDK'
+ class AuditsSortableField(Enum):
+ Call = 'Call'
+ Guid = 'Guid'
+ ResponseTime = 'Response Time'
+ StatusCode = 'Status Code'
+ Time = 'Time'
+
+
class MESSAGES:
@staticmethod
def ssl_error(url: None | str = None):
@@ -283,6 +303,13 @@ class DecortController(object):
return msg
+ @staticmethod
+ def default_value_used(param_name: str, default_value: Any) -> str:
+ return (
+ f'{param_name} parameter is not specified, '
+ f'default value "{default_value}" will be used.'
+ )
+
def __init__(self, arg_amodule: AnsibleModule):
"""
Instantiate DecortController() class at the beginning of any DECORT module run to have the following:
@@ -325,10 +352,6 @@ class DecortController(object):
# if self.workflow_callback != "":
# self.workflow_callback_present = True
- # The following will be initialized to the name of the user in DECORT controller, who corresponds to
- # the credentials supplied as authentication information parameters.
- self.decort_username = ''
-
# self.run_phase may eventually be deprecated in favor of self.results['waypoints']
self.run_phase = "Run phase: Initializing DecortController instance."
@@ -392,40 +415,37 @@ class DecortController(object):
if self.authenticator == "jwt":
# validate supplied JWT on the DECORT controller
self.validate_jwt() # this call will abort the script if validation fails
- jwt_decoded = jwt.decode(self.jwt, algorithms=["ES384"], options={"verify_signature": False})
- self.decort_username = jwt_decoded['username'] + "@" + jwt_decoded['iss']
else:
# Oauth2 based authorization mode
# obtain JWT from Oauth2 provider and validate on the DECORT controller
self.obtain_jwt()
if self.controller_url is not None:
self.validate_jwt() # this call will abort the script if validation fails
- jwt_decoded = jwt.decode(self.jwt, algorithms=["ES384"], options={"verify_signature": False})
- self.decort_username = jwt_decoded['username'] + "@" + jwt_decoded['iss']
# self.run_phase = "Initializing DecortController instance complete."
return
@staticmethod
- def waypoint(orig_f: Callable) -> Callable:
+ def waypoint(orig_f: Callable[P, R]) -> Callable[P, R]:
"""
A decorator for adding the name of called method to the string
`self.result['waypoints']`.
"""
+ @wraps(orig_f)
def new_f(self, *args, **kwargs):
self.result['waypoints'] += f' -> {orig_f.__name__}'
return orig_f(self, *args, **kwargs)
- new_f.__name__ = orig_f.__name__
return new_f
@staticmethod
- def checkmode(orig_f: Callable) -> Callable:
+ def checkmode(orig_f: Callable[P, R]) -> Callable[P, R | None]:
"""
A decorator for methods that should not executed in
Ansible Check Mode.
Instead of executing these methods, a message will be added
with the method name and the arguments with which it was called.
"""
+ @wraps(orig_f)
def new_f(self, *args, **kwargs):
if self.amodule.check_mode:
self.message(
@@ -437,7 +457,6 @@ class DecortController(object):
)
else:
return orig_f(self, *args, **kwargs)
- new_f.__name__ = orig_f.__name__
return new_f
@staticmethod
@@ -978,6 +997,7 @@ class DecortController(object):
a['createdTime_readable'] = self.sec_to_dt_str(a['createdTime'])
a['deletedTime_readable'] = self.sec_to_dt_str(a['deletedTime'])
a['updatedTime_readable'] = self.sec_to_dt_str(a['updatedTime'])
+ a['description'] = a.pop('desc')
return accounts
@@ -1009,12 +1029,19 @@ class DecortController(object):
start_unix_time: None | int = None,
end_unix_time: None | int = None,
page_number: int = 1,
+ sort_by_asc: bool = True,
+ sort_by_field: None | AuditsSortableField = None,
) -> dict[str, Any]:
"""
Implementation of the functionality of API method
`/cloudapi/user/getAudit`.
"""
+ sort_by = None
+ if sort_by_field:
+ sort_by_prefix = '+' if sort_by_asc else '-'
+ sort_by = f'{sort_by_prefix}{sort_by_field.value}'
+
api_params = {
'call': api_method,
'minStatusCode': min_status_code,
@@ -1023,6 +1050,7 @@ class DecortController(object):
'timestampTo': end_unix_time,
'page': page_number,
'size': page_size,
+ 'sortBy': sort_by,
}
api_resp = self.decort_api_call(
arg_req_function=requests.post,
@@ -1457,7 +1485,11 @@ class DecortController(object):
cpu_pin: bool = False,
hp_backed: bool = False,
numa_affinity: Literal['none', 'loose', 'strict'] = 'none',
- preferred_cpu_cores: list[int] | None = None):
+ preferred_cpu_cores: list[int] | None = None,
+ boot_mode: Literal['bios', 'uefi'] = 'bios',
+ boot_loader_type: Literal['linux', 'windows', 'unknown'] = 'unknown',
+ network_interface_naming: Literal['eth', 'ens'] = 'ens',
+ hot_resize: bool = False,):
"""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.
@@ -1501,6 +1533,10 @@ class DecortController(object):
if not image_id:
api_url = '/restmachine/cloudapi/kvmx86/createBlank'
+ api_params['bootType'] = boot_mode
+ api_params['loaderType'] = boot_loader_type
+ api_params['networkInterfaceNaming'] = network_interface_naming
+ api_params['hotResize'] = hot_resize
else:
api_url = '/restmachine/cloudapi/kvmx86/create'
api_params['imageId'] = image_id
@@ -1534,6 +1570,7 @@ class DecortController(object):
ifaces_for_delete = []
nets_for_attach = []
nets_for_change_ip = []
+ nets_for_change_mac_dict = {}
# Either only attaching or only detaching networks
if not ifaces or not new_networks:
@@ -1607,14 +1644,21 @@ class DecortController(object):
else:
nets_for_attach.append(net)
- # Adding networks for change IP address
for net_key, net in unchangeable_nets_dict.items():
+ # Adding networks for change IP address
if net['type'] in ('VINS', 'EXTNET'):
- old_ip = ifaces_dict[net_key]['ipAddress']
+ current_ip = ifaces_dict[net_key]['ipAddress']
new_ip = net['ip_addr']
- if new_ip and old_ip != new_ip:
+ if new_ip and current_ip != new_ip:
nets_for_change_ip.append(net)
+ # Adding networks for change MAC address
+ if net['type'] != self.VMNetType.EMPTY.value:
+ current_mac = ifaces_dict[net_key]['mac']
+ new_mac = net['mac']
+ if new_mac and current_mac != new_mac:
+ nets_for_change_mac_dict[net_key] = net
+
# Detaching networks
for iface in ifaces_for_delete:
self.decort_api_call(
@@ -1639,6 +1683,7 @@ class DecortController(object):
'netId': net.get('id') or 0,
'ipAddr': net.get('ip_addr'),
'mtu': net.get('mtu'),
+ 'mac_addr': net.get('mac'),
},
)
self.set_changed()
@@ -1649,10 +1694,23 @@ class DecortController(object):
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/compute/changeIp',
arg_params={
- 'computeId': vm_id,
- 'netType': net['type'],
- 'netId': net['id'],
- 'ipAddr': net['ip_addr'],
+ 'compute_id': vm_id,
+ 'net_type': net['type'],
+ 'net_id': net['id'],
+ 'ip_addr': net['ip_addr'],
+ },
+ )
+ self.set_changed()
+
+ # Changing MAC adresses
+ for net_key, net in nets_for_change_mac_dict.items():
+ self.decort_api_call(
+ arg_req_function=requests.post,
+ arg_api_name='/restmachine/cloudapi/compute/changeMac',
+ arg_params={
+ 'compute_id': vm_id,
+ 'current_mac_address': ifaces_dict[net_key]['mac'],
+ 'new_mac_address': net['mac'],
},
)
self.set_changed()
@@ -1717,8 +1775,7 @@ class DecortController(object):
self.result['msg'] = "compute_restore() in check mode: restore Compute ID {} was requested.".format(comp_id)
return
- api_params = dict(computeId=comp_id,
- reason="Restored on user {} request by Ansible DECORT module.".format(self.decort_username))
+ api_params = dict(computeId=comp_id)
self.decort_api_call(requests.post, "/restmachine/cloudapi/compute/restore", api_params)
# On success the above call will return here. On error it will abort execution by calling fail_json.
self.result['failed'] = False
@@ -1997,6 +2054,10 @@ class DecortController(object):
description: Optional[str] = None,
auto_start: Optional[bool] = None,
preferred_cpu_cores: list[int] | None = None,
+ boot_mode: None | Literal['bios', 'uefi'] = None,
+ boot_loader_type: None | Literal['linux', 'windows', 'unknown'] = None,
+ network_interface_naming: None | Literal['eth', 'ens'] = None,
+ hot_resize: None | bool = None,
):
OBJ = 'compute'
@@ -2015,6 +2076,10 @@ class DecortController(object):
'preferredCpu': (
[-1] if preferred_cpu_cores == [] else preferred_cpu_cores
),
+ 'bootType': boot_mode,
+ 'loaderType': boot_loader_type,
+ 'networkInterfaceNaming': network_interface_naming,
+ 'hotResize': hot_resize,
},
)
@@ -2029,6 +2094,10 @@ class DecortController(object):
'description': description,
'auto_start': auto_start,
'preferred_cpu_cores': preferred_cpu_cores,
+ 'boot_mode': boot_mode,
+ 'loader_type': boot_loader_type,
+ 'network_interface_naming': network_interface_naming,
+ 'hot_resize': hot_resize,
}
for param, value in params_to_check.items():
if value is not None:
@@ -2315,18 +2384,43 @@ class DecortController(object):
return 0, None
- def image_create(self,img_name,url,gid,boottype,imagetype,drivers,hotresize,username,password,account_Id,usernameDL,passwordDL,sepId,poolName):
+ def image_create(
+ self,
+ img_name,
+ url,
+ gid,
+ drivers,
+ username,
+ password,
+ account_Id,
+ usernameDL,
+ passwordDL,
+ sepId,
+ poolName,
+ boot_mode: Literal['bios', 'uefi'] = 'bios',
+ boot_loader_type: Literal['linux', 'windows', 'unknown'] = 'unknown',
+ network_interface_naming: Literal['eth', 'ens'] = 'ens',
+ hot_resize: bool = False,
+ ):
self.result['waypoints'] = "{} -> {}".format(self.result['waypoints'], "image_create")
- api_params = dict(name=img_name, url=url,
- gid=gid, boottype=boottype,
- imagetype=imagetype,
- drivers=drivers, accountId=account_Id,
- hotresize=hotresize, username=username,
- password=password, usernameDL=usernameDL,
- passwordDL=passwordDL, sepId=sepId,
- poolName=poolName,
- )
+ api_params = {
+ 'name': img_name,
+ 'url': url,
+ 'gid': gid,
+ 'boottype': boot_mode,
+ 'imagetype': boot_loader_type,
+ 'drivers': drivers,
+ 'accountId': account_Id,
+ 'hotresize': hot_resize,
+ 'username': username,
+ 'password': password,
+ 'usernameDL': usernameDL,
+ 'passwordDL': passwordDL,
+ 'sepId': sepId,
+ 'poolName': poolName,
+ 'networkInterfaceNaming': network_interface_naming,
+ }
api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/image/create", api_params)
# On success the above call will return here. On error it will abort execution by calling fail_json.
virt_image_dict = json.loads(api_resp.content.decode('utf8'))
@@ -2775,8 +2869,7 @@ class DecortController(object):
self.result['msg'] = "rg_restore() in check mode: restore RG ID {} was requested.".format(arg_rg_id)
return
- api_params = dict(rgId=arg_rg_id,
- reason="Restored on user {} request by DECORT Ansible module.".format(self.decort_username), )
+ api_params = dict(rgId=arg_rg_id)
self.decort_api_call(requests.post, "/restmachine/cloudapi/rg/restore", api_params)
# On success the above call will return here. On error it will abort execution by calling fail_json.
self.result['failed'] = False
@@ -2919,6 +3012,7 @@ class DecortController(object):
account_details['computes_amount'] = account_details.pop('computes')
account_details['vinses_amount'] = account_details.pop('vinses')
+ account_details['description'] = account_details.pop('desc')
account_details['createdTime_readable'] = self.sec_to_dt_str(
account_details['createdTime']
@@ -3082,6 +3176,7 @@ class DecortController(object):
rg['createdTime_readable'] = self.sec_to_dt_str(rg['createdTime'])
rg['deletedTime_readable'] = self.sec_to_dt_str(rg['deletedTime'])
rg['updatedTime_readable'] = self.sec_to_dt_str(rg['updatedTime'])
+ rg['description'] = rg.pop('desc')
return resource_groups
@@ -3682,7 +3777,8 @@ class DecortController(object):
gpu_quota: None | int = None,
public_ip_quota: None | int = None,
ram_quota: None | int = None,
- sep_pools: None | Iterable[str] = None,) -> None:
+ sep_pools: None | Iterable[str] = None,
+ description: None | str = None,) -> None:
"""
Implementation of functionality of the API method
`/cloudapi/account/update`.
@@ -3707,6 +3803,7 @@ class DecortController(object):
'name': name,
'sendAccessEmails': access_emails,
'uniqPools': sep_pools,
+ 'desc': description,
},
not_fail_codes=[404]
)
@@ -4078,8 +4175,7 @@ class DecortController(object):
self.result['msg'] = "vins_restore() in check mode: restore ViNS ID {} was requested.".format(vins_id)
return
- api_params = dict(vinsId=vins_id,
- reason="Restored on user {} request by DECORT Ansible module.".format(self.decort_username), )
+ api_params = dict(vinsId=vins_id)
self.decort_api_call(requests.post, "/restmachine/cloudapi/vins/restore", api_params)
# On success the above call will return here. On error it will abort execution by calling fail_json.
self.result['failed'] = False
@@ -4121,8 +4217,7 @@ class DecortController(object):
return
vinsstate_api = "" # this string will also be used as a flag to indicate that API call is necessary
- api_params = dict(vinsId=vins_dict['id'],
- reason='Changed by DECORT Ansible module, vins_state method.')
+ api_params = dict(vinsId=vins_dict['id'])
expected_state = ""
if vins_dict['status'] in ["CREATED", "ENABLED"] and desired_state == 'disabled':
@@ -4466,8 +4561,7 @@ class DecortController(object):
api_params = dict(diskId=disk_id,
detach=detach,
- permanently=permanently,
- reason=reason)
+ permanently=permanently)
self.decort_api_call(requests.post, "/restmachine/cloudapi/disks/delete", api_params)
# On success the above call will return here. On error it will abort execution by calling fail_json.
self.result['failed'] = False
@@ -4594,7 +4688,6 @@ class DecortController(object):
self.result['waypoints'] = "{} -> {}".format(self.result['waypoints'], "disk_creation")
api_params = dict(accountId=accountId,
- gid=0, # depricated
name=name,
description=description,
size=size,
@@ -4709,8 +4802,7 @@ class DecortController(object):
self.result['msg'] = "disk_restore() in check mode: restore Disk ID {} was requested.".format(disk_id)
return
- api_params = dict(diskId=disk_id,
- reason="Restored on user {} request by DECORT Ansible module.".format(self.decort_username), )
+ api_params = dict(diskId=disk_id)
self.decort_api_call(requests.post, "/restmachine/cloudapi/disks/restore", api_params)
# On success the above call will return here. On error it will abort execution by calling fail_json.
self.result['failed'] = False
@@ -5757,7 +5849,13 @@ class DecortController(object):
self.result['msg'] = ("group_state(): no start/stop action required for B-service ID {} "
"to desired state '{}'.").format(bs_id,desired_state)
return
- def group_resize_count(self,bs_id,gr_dict,desired_count):
+ def group_resize_count(
+ self,
+ bs_id,
+ gr_dict,
+ desired_count,
+ chipset: Literal['Q35', 'i440fx'] = 'i440fx',
+ ):
self.result['waypoints'] = "{} -> {}".format(self.result['waypoints'], "group_resize_count")
@@ -5767,7 +5865,8 @@ class DecortController(object):
serviceId=bs_id,
compgroupId=gr_dict['id'],
count=desired_count,
- mode="ABSOLUTE"
+ mode="ABSOLUTE",
+ chipset=chipset,
)
api_url = "/restmachine/cloudapi/bservice/groupResize"
self.decort_api_call(requests.post, api_url, api_params)
@@ -5826,10 +5925,10 @@ class DecortController(object):
#rly need connect group to extnet ?
return
def group_provision(
- self,bs_id,arg_name,arg_count=1,arg_cpu=1,arg_ram=1024,
+ self,bs_id,arg_name,chipset: Literal['Q35', 'i440fx'],arg_count=1,arg_cpu=1,arg_ram=1024,
arg_boot_disk=10,arg_image_id=0,arg_driver="KVM_X86",arg_role="",
- arg_network=None,arg_timeout=0
- ):
+ arg_network=None,arg_timeout=0,
+ ):
self.result['waypoints'] = "{} -> {}".format(self.result['waypoints'], "group_provision")
@@ -5848,7 +5947,8 @@ class DecortController(object):
role = arg_role,
vinses = [n['id'] for n in arg_network if n['type'] == 'VINS'],
extnets = [n['id'] for n in arg_network if n['type'] == 'EXTNET'],
- timeoutStart = arg_timeout
+ timeoutStart = arg_timeout,
+ chipset=chipset,
)
api_resp = self.decort_api_call(requests.post, api_url, api_params)
new_bsgroup_id = int(api_resp.text)
diff --git a/wiki/6.1.0/модуль-decort_kvmvm.md b/wiki/6.1.0/модуль-decort_kvmvm.md
index c25c90a..5da2f6c 100644
--- a/wiki/6.1.0/модуль-decort_kvmvm.md
+++ b/wiki/6.1.0/модуль-decort_kvmvm.md
@@ -45,7 +45,7 @@
| 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) | Объём загрузочного диска виртуальной машины в ГБ. |
+| boot_disk | (int) | Объём загрузочного диска виртуальной машины в ГБ.
Если параметр не задан, размер будет равен размеру образа.
Если не заданы этот параметр и параметры `image_id` и `image_name`, то виртуальная машина будет создана без загрузочного диска. |
| chipset | (string)
Значения:
`Q35`
`i440fx` | Эмулируемый чипсет. |
| ci_user_data | (dict) | конфигурация для cloud-init
| controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должен быть создан (или уже существует) данная виртуальная машина. Данный параметр является обязательным. |
@@ -55,10 +55,10 @@
| 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`. При любых других операциях данные параметры игнорируются. |
+| image_id | (int) | Уникальный цифровой идентификатор образа, на базе которого следует создать виртуальную машину.
Если заданы оба параметра (`image_id` и `image_name`), то `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`.|
+| name | (string) | Имя ВМ. Чтобы модуль **decort_kvmvm** мог управлять сервером по его названию, также необходимо задать комбинацию `account_name` и `rg_name` или `rg_id`. Если для существующей ВМ указаны и `name`, и `id`, то параметр `name` используется для переименования. |
| 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`. |
@@ -92,7 +92,7 @@
| hp_backed | bool | Использовать Huge Pages для выделения оперативной памяти виртуальной машины. |
| id | int | Идентификатор ВМ. |
| image_id | id | Идентификатор образа.
-| interfaces | list | Список словарей, описывающих сетевые интерфейсы ВМ. |
+| interfaces | list | Список словарей, описывающих сетевые интерфейсы ВМ, отсортированный по номеру слота PCI. |
| name | string | Имя ВМ. |
| numa_affinity | str | Правило применения NUMA affinity к виртуальной машине. |
| password | string | Пароль пользователя ОС по умолчанию. |
diff --git a/wiki/6.1.0/модуль-decort_rg.md b/wiki/6.1.0/модуль-decort_rg.md
index beb9c58..c69e206 100644
--- a/wiki/6.1.0/модуль-decort_rg.md
+++ b/wiki/6.1.0/модуль-decort_rg.md
@@ -5,7 +5,7 @@
Модуль decort_rg предназначен для создания, редактирования и удаления ресурсных групп (Resource Group, RG) в облачной платформе DECORT, а также для получения информации об уже существующей ресурсной группе. Модуль decort_rg позволяет:
- создавать ресурсные группы
-- удалять ресурсные группы (в корзину или безвозвратно)
+- удалять ресурсные группы (в корзину или безвозвратно, с удалением содержимого или без)
- восстанавливать ресурсные группы из корзины
- включать/отключать ресурсные группы
- запрашивать информацию об уже существующих ресурсных группах
@@ -40,6 +40,7 @@
| owner | (string) | Владелец ресурсной группы. Задаётся при создании ресурсной группы, не обязателен. Если оставить пустое значение - владельцем ресурсной группы будет пользователь, создавший ресурсную группу. |
| permanently | (bool)
Default: `false` | Параметр, использующийся при удалении ресурсной группы. При значении `true` - ресурсная группа удалится безвозвратно, а при `false` - попадёт в корзину. |
| quotas | (dict) | Предназначено для задания или изменения квоты на ресурсы в составе данной ресурсной группы. |
+| recursive_deletion | (bool)
Default: `false` | Рекурсивное удаление.
Если `true`, то при удалении РГ будет удалено всё её содержимое.
Если `false`, то при удалении непустой РГ работа модуля завершится ошибкой. |
| rename | (string) | Новое имя ресурсной группы.
Возможно переименование только включенной ресурсной группы. |
| rg_id | (int) | Уникальный целочисленный идентификатор ресурсной группы. Является обязательным при изменении РГ если не заданы `rg_name` и `account_id`/`account_name` |
| rg_name | (string) | Имя ресурсной группы. Данный параметр является обязательным при создании. |
diff --git a/wiki/7.0.0/модуль-decort_kvmvm.md b/wiki/7.0.0/модуль-decort_kvmvm.md
index aaf611b..1985691 100644
--- a/wiki/7.0.0/модуль-decort_kvmvm.md
+++ b/wiki/7.0.0/модуль-decort_kvmvm.md
@@ -54,7 +54,7 @@
| 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, нужно указать пустую строку `""`. |
| auto_start | (bool) | Включить/выключить автоматический запуск ВМ после перезапуска вычислительного узла, за которым она закреплена.
Если параметр не задан при создании ВМ, то значение будет выбрано платформой. |
-| boot_disk | (int) | Объём загрузочного диска виртуальной машины в ГБ. |
+| boot_disk | (int) | Объём загрузочного диска виртуальной машины в ГБ.
Если параметр не задан, размер будет равен размеру образа.
Если не заданы этот параметр и параметры `image_id` и `image_name`, то виртуальная машина будет создана без загрузочного диска. |
| chipset | (string)
Значения:
`Q35`
`i440fx` | Эмулируемый чипсет. |
| ci_user_data | (dict) | конфигурация для cloud-init
| cpu | (int) | Количество виртуальных процессоров, выделяемых виртуальной машине. |
@@ -64,9 +64,9 @@
| description | (string) | Опциональное описание виртуальной машины. |
| 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`. При любых других операциях данные параметры игнорируются. |
-| name | (string) | Имя ВМ. Чтобы модуль **decort_kvmvm** мог управлять сервером по его названию, также необходимо задать комбинацию `account_name` и `rg_name` или `rg_id`. Если для существующей ВМ указаны и `name`, и `id`, то параметр `name` игнорируется и идентификация сервера выполняется по `id`.|
+| image_id | (int) | Уникальный цифровой идентификатор образа, на базе которого следует создать виртуальную машину.
Если заданы оба параметра (`image_id` и `image_name`), то `image_name` игнорируется.
Если этот параметр и параметр `image_name` не заданы, то виртуальная машина будет создана без образа. |
+| image_name | (string) | Название образа, на базе которого следует создать ВМ.
Если этот параметр и параметр `image_id` не заданы, то виртуальная машина будет создана без образа. |
+| name | (string) | Имя ВМ. Чтобы модуль **decort_kvmvm** мог управлять сервером по его названию, также необходимо задать комбинацию `account_name` и `rg_name` или `rg_id`. Если для существующей ВМ указаны и `name`, и `id`, то параметр `name` используется для переименования. |
| 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`
• `mtu` (int) (необязательный) - MTU интерфейса; применимо только для `DPDK`.
ВМ не может одновременно быть подключена к сети DPDK и к сети другого типа.
Чтобы отключить все сети, нужно указать пустой список `[]`. |
| numa_affinity | (str)
Значения:
`strict`
`loose`
`none` | Правило применения NUMA affinity к виртуальной машине.
`strict` - строго с NUMA affinity, `loose` - использовать NUMA affinity, если возможно, `none` - отменить применение NUMA affinity.
Значение по умолчанию при создании: `none`. |
@@ -99,7 +99,7 @@
| hp_backed | bool | Использовать Huge Pages для выделения оперативной памяти виртуальной машины. |
| id | int | Идентификатор ВМ. |
| image_id | id | Идентификатор образа.
-| interfaces | list | Список словарей, описывающих сетевые интерфейсы ВМ. |
+| interfaces | list | Список словарей, описывающих сетевые интерфейсы ВМ, отсортированный по номеру слота PCI. |
| name | string | Имя ВМ. |
| numa_affinity | str | Правило применения NUMA affinity к виртуальной машине. |
| password | string | Пароль пользователя ОС по умолчанию. |
diff --git a/wiki/7.0.0/модуль-decort_rg.md b/wiki/7.0.0/модуль-decort_rg.md
index 697ea1b..793e865 100644
--- a/wiki/7.0.0/модуль-decort_rg.md
+++ b/wiki/7.0.0/модуль-decort_rg.md
@@ -5,7 +5,7 @@
Модуль decort_rg предназначен для создания, редактирования и удаления ресурсных групп (Resource Group, RG) в облачной платформе DECORT, а также для получения информации об уже существующей ресурсной группе. Модуль decort_rg позволяет:
- создавать ресурсные группы
-- удалять ресурсные группы (в корзину или безвозвратно)
+- удалять ресурсные группы (в корзину или безвозвратно, с удалением содержимого или без)
- восстанавливать ресурсные группы из корзины
- включать/отключать ресурсные группы
- запрашивать информацию об уже существующих ресурсных группах
@@ -33,6 +33,7 @@
| owner | (string) | Владелец ресурсной группы. Задаётся при создании ресурсной группы, не обязателен. Если оставить пустое значение - владельцем ресурсной группы будет пользователь, создавший ресурсную группу. |
| permanently | (bool)
Default: `false` | Параметр, использующийся при удалении ресурсной группы. При значении `true` - ресурсная группа удалится безвозвратно, а при `false` - попадёт в корзину. |
| quotas | (dict) | Предназначено для задания или изменения квоты на ресурсы в составе данной ресурсной группы. |
+| recursive_deletion | (bool)
Default: `false` | Рекурсивное удаление.
Если `true`, то при удалении РГ будет удалено всё её содержимое.
Если `false`, то при удалении непустой РГ работа модуля завершится ошибкой. |
| rename | (string) | Новое имя ресурсной группы.
Возможно переименование только включенной ресурсной группы. |
| rg_id | (int) | Уникальный целочисленный идентификатор ресурсной группы. Является обязательным при изменении РГ если не заданы `rg_name` и `account_id`/`account_name` |
| rg_name | (string) | Имя ресурсной группы. Данный параметр является обязательным при создании. |
diff --git a/wiki/7.1.0/модуль-decort_kvmvm.md b/wiki/7.1.0/модуль-decort_kvmvm.md
index 92bb789..0eb60df 100644
--- a/wiki/7.1.0/модуль-decort_kvmvm.md
+++ b/wiki/7.1.0/модуль-decort_kvmvm.md
@@ -58,7 +58,7 @@
| 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, нужно указать пустую строку `""`. |
| auto_start | (bool) | Включить/выключить автоматический запуск ВМ после перезапуска вычислительного узла, за которым она закреплена.
Если параметр не задан при создании ВМ, то значение будет выбрано платформой. |
-| boot_disk | (int) | Объём загрузочного диска виртуальной машины в ГБ. |
+| boot_disk | (int) | Объём загрузочного диска виртуальной машины в ГБ.
Если параметр не задан, размер будет равен размеру образа.
Если не заданы этот параметр и параметры `image_id` и `image_name`, то виртуальная машина будет создана без загрузочного диска. |
| chipset | (string)
Значения:
`Q35`
`i440fx` | Эмулируемый чипсет. Значение по умолчанию при создании: `i440fx`.|
| ci_user_data | (dict) | конфигурация для cloud-init
| cpu | (int) | Количество виртуальных процессоров, выделяемых виртуальной машине. |
@@ -68,9 +68,9 @@
| description | (string) | Опциональное описание виртуальной машины. |
| 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`. При любых других операциях данные параметры игнорируются. |
-| name | (string) | Имя ВМ. Чтобы модуль **decort_kvmvm** мог управлять сервером по его названию, также необходимо задать комбинацию `account_name` и `rg_name` или `rg_id`. Если для существующей ВМ указаны и `name`, и `id`, то параметр `name` игнорируется и идентификация сервера выполняется по `id`.|
+| image_id | (int) | Уникальный цифровой идентификатор образа, на базе которого следует создать виртуальную машину.
Если заданы оба параметра (`image_id` и `image_name`), то `image_name` игнорируется.
Если этот параметр и параметр `image_name` не заданы, то виртуальная машина будет создана без образа. |
+| image_name | (string) | Название образа, на базе которого следует создать ВМ.
Если этот параметр и параметр `image_id` не заданы, то виртуальная машина будет создана без образа. |
+| name | (string) | Имя ВМ. Чтобы модуль **decort_kvmvm** мог управлять сервером по его названию, также необходимо задать комбинацию `account_name` и `rg_name` или `rg_id`. Если для существующей ВМ указаны и `name`, и `id`, то параметр `name` используется для переименования. |
| 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`
• `mtu` (int) (необязательный) - MTU интерфейса; применимо только для `DPDK`.
ВМ не может одновременно быть подключена к сети DPDK и к сети другого типа.
Чтобы отключить все сети, нужно указать пустой список `[]`. |
| numa_affinity | (str)
Значения:
`strict`
`loose`
`none` | Правило применения NUMA affinity к виртуальной машине.
`strict` - строго с NUMA affinity, `loose` - использовать NUMA affinity, если возможно, `none` - отменить применение NUMA affinity.
Значение по умолчанию при создании: `none`. |
@@ -105,7 +105,7 @@
| hp_backed | bool | Использовать Huge Pages для выделения оперативной памяти виртуальной машины. |
| id | int | Идентификатор ВМ. |
| image_id | id | Идентификатор образа.
-| interfaces | list | Список словарей, описывающих сетевые интерфейсы ВМ. |
+| interfaces | list | Список словарей, описывающих сетевые интерфейсы ВМ, отсортированный по номеру слота PCI. |
| name | string | Имя ВМ. |
| numa_affinity | str | Правило применения NUMA affinity к виртуальной машине. |
| password | string | Пароль пользователя ОС по умолчанию. |
diff --git a/wiki/7.1.0/модуль-decort_rg.md b/wiki/7.1.0/модуль-decort_rg.md
index 697ea1b..793e865 100644
--- a/wiki/7.1.0/модуль-decort_rg.md
+++ b/wiki/7.1.0/модуль-decort_rg.md
@@ -5,7 +5,7 @@
Модуль decort_rg предназначен для создания, редактирования и удаления ресурсных групп (Resource Group, RG) в облачной платформе DECORT, а также для получения информации об уже существующей ресурсной группе. Модуль decort_rg позволяет:
- создавать ресурсные группы
-- удалять ресурсные группы (в корзину или безвозвратно)
+- удалять ресурсные группы (в корзину или безвозвратно, с удалением содержимого или без)
- восстанавливать ресурсные группы из корзины
- включать/отключать ресурсные группы
- запрашивать информацию об уже существующих ресурсных группах
@@ -33,6 +33,7 @@
| owner | (string) | Владелец ресурсной группы. Задаётся при создании ресурсной группы, не обязателен. Если оставить пустое значение - владельцем ресурсной группы будет пользователь, создавший ресурсную группу. |
| permanently | (bool)
Default: `false` | Параметр, использующийся при удалении ресурсной группы. При значении `true` - ресурсная группа удалится безвозвратно, а при `false` - попадёт в корзину. |
| quotas | (dict) | Предназначено для задания или изменения квоты на ресурсы в составе данной ресурсной группы. |
+| recursive_deletion | (bool)
Default: `false` | Рекурсивное удаление.
Если `true`, то при удалении РГ будет удалено всё её содержимое.
Если `false`, то при удалении непустой РГ работа модуля завершится ошибкой. |
| rename | (string) | Новое имя ресурсной группы.
Возможно переименование только включенной ресурсной группы. |
| rg_id | (int) | Уникальный целочисленный идентификатор ресурсной группы. Является обязательным при изменении РГ если не заданы `rg_name` и `account_id`/`account_name` |
| rg_name | (string) | Имя ресурсной группы. Данный параметр является обязательным при создании. |
diff --git a/wiki/7.2.0/модуль-decort_kvmvm.md b/wiki/7.2.0/модуль-decort_kvmvm.md
index 9ee7abe..f262cc8 100644
--- a/wiki/7.2.0/модуль-decort_kvmvm.md
+++ b/wiki/7.2.0/модуль-decort_kvmvm.md
@@ -61,7 +61,7 @@
| 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, нужно указать пустую строку `""`. |
| auto_start | (bool) | Включить/выключить автоматический запуск ВМ после перезапуска вычислительного узла, за которым она закреплена.
Если параметр не задан при создании ВМ, то значение будет выбрано платформой. |
-| boot | (dict) | Параметры загрузки.
Ключи словаря:
• `disk_id` (int) - идентификатор диска, который будет установлен как загрузочный;
• `disk_size` (int) - объём загрузочного диска виртуальной машины в ГБ. |
+| boot | (dict) | Параметры загрузки.
Ключи словаря:
• `disk_id` (int) - идентификатор диска, который будет установлен как загрузочный;
• `disk_size` (int) - объём загрузочного диска виртуальной машины в ГБ. Если параметр не задан, размер будет равен размеру образа. Если не заданы этот параметр и параметры `image_id` и `image_name`, то виртуальная машина будет создана без загрузочного диска. |
| chipset | (string)
Значения:
`Q35`
`i440fx` | Эмулируемый чипсет. Значение по умолчанию при создании: `i440fx`.|
| ci_user_data | (dict) | конфигурация для cloud-init
| clone_from | (dict) | Словарь параметров для создания ВМ путём клонирования другой ВМ.
Ключи словаря:
• `id` (int) (обязательный) - идентификатор клонируемой ВМ
• `force` (bool) - игнорировать, что ВМ запущена; значение по умолчанию: `false`
• `snapshot` (dict) - словарь параметров клонируемого снимка ВМ. Ключи словаря: `name` (str) - название снимка; `timestamp` (int) - unix-время; `datetime` (str) - дата и время в формате `ггггммддччммсс`, альтернатива параметру `timestamp`, допустимо использовать любой разделитель между группами цифр для повышения читаемости, например, `гггг-мм-дд чч:мм:сс`.
Для создания клона также должен быть указан параметр `name` для указания имени клона.|
@@ -73,9 +73,9 @@
| get_console_url | (bool)
Default:
`false` | Получить ссылку на консоль ВМ. |
| 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`. При любых других операциях данные параметры игнорируются. |
-| name | (string) | Имя ВМ. Чтобы модуль **decort_kvmvm** мог управлять сервером по его названию, также необходимо задать комбинацию `account_name` и `rg_name` или `rg_id`. Если для существующей ВМ указаны и `name`, и `id`, то параметр `name` игнорируется и идентификация сервера выполняется по `id`.|
+| image_id | (int) | Уникальный цифровой идентификатор образа, на базе которого следует создать виртуальную машину.
Если заданы оба параметра (`image_id` и `image_name`), то `image_name` игнорируется.
Если этот параметр и параметр `image_name` не заданы, то виртуальная машина будет создана без образа. |
+| image_name | (string) | Название образа, на базе которого следует создать ВМ.
Если этот параметр и параметр `image_id` не заданы, то виртуальная машина будет создана без образа. |
+| name | (string) | Имя ВМ. Чтобы модуль **decort_kvmvm** мог управлять сервером по его названию, также необходимо задать комбинацию `account_name` и `rg_name` или `rg_id`. Если для существующей ВМ указаны и `name`, и `id`, то параметр `name` используется для переименования. |
| 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`
• `mtu` (int) (необязательный) - MTU интерфейса; применимо только для `DPDK`.
ВМ не может одновременно быть подключена к сети DPDK и к сети другого типа.
Чтобы отключить все сети, нужно указать пустой список `[]`. |
| numa_affinity | (str)
Значения:
`strict`
`loose`
`none` | Правило применения NUMA affinity к виртуальной машине.
`strict` - строго с NUMA affinity, `loose` - использовать NUMA affinity, если возможно, `none` - отменить применение NUMA affinity.
Значение по умолчанию при создании: `none`. |
@@ -113,7 +113,7 @@
| hp_backed | bool | Использовать Huge Pages для выделения оперативной памяти виртуальной машины. |
| id | int | Идентификатор ВМ. |
| image_id | id | Идентификатор образа.
-| interfaces | list | Список словарей, описывающих сетевые интерфейсы ВМ. |
+| interfaces | list | Список словарей, описывающих сетевые интерфейсы ВМ, отсортированный по номеру слота PCI. |
| name | string | Имя ВМ. |
| numa_affinity | str | Правило применения NUMA affinity к виртуальной машине. |
| password | string | Пароль пользователя ОС по умолчанию. |
diff --git a/wiki/7.2.0/модуль-decort_rg.md b/wiki/7.2.0/модуль-decort_rg.md
index fac9247..5774c12 100644
--- a/wiki/7.2.0/модуль-decort_rg.md
+++ b/wiki/7.2.0/модуль-decort_rg.md
@@ -5,7 +5,7 @@
Модуль decort_rg предназначен для создания, редактирования и удаления ресурсных групп (Resource Group, RG) в облачной платформе DECORT, а также для получения информации об уже существующей ресурсной группе. Модуль decort_rg позволяет:
- создавать ресурсные группы
-- удалять ресурсные группы (в корзину или безвозвратно)
+- удалять ресурсные группы (в корзину или безвозвратно, с удалением содержимого или без)
- восстанавливать ресурсные группы из корзины
- включать/отключать ресурсные группы
- запрашивать информацию об уже существующих ресурсных группах
@@ -34,6 +34,7 @@
| owner | (string) | Владелец ресурсной группы. Задаётся при создании ресурсной группы, не обязателен. Если оставить пустое значение - владельцем ресурсной группы будет пользователь, создавший ресурсную группу. |
| permanently | (bool)
Default: `false` | Параметр, использующийся при удалении ресурсной группы. При значении `true` - ресурсная группа удалится безвозвратно, а при `false` - попадёт в корзину. |
| quotas | (dict) | Предназначено для задания или изменения квоты на ресурсы в составе данной ресурсной группы. |
+| recursive_deletion | (bool)
Default: `false` | Рекурсивное удаление.
Если `true`, то при удалении РГ будет удалено всё её содержимое.
Если `false`, то при удалении непустой РГ работа модуля завершится ошибкой. |
| rename | (string) | Новое имя ресурсной группы.
Возможно переименование только включенной ресурсной группы. |
| rg_id | (int) | Уникальный целочисленный идентификатор ресурсной группы. Является обязательным при изменении РГ если не заданы `rg_name` и `account_id`/`account_name` |
| rg_name | (string) | Имя ресурсной группы. Данный параметр является обязательным при создании. |
diff --git a/wiki/8.0.0/Home.md b/wiki/8.0.0/Home.md
new file mode 100644
index 0000000..866c022
--- /dev/null
+++ b/wiki/8.0.0/Home.md
@@ -0,0 +1,25 @@
+1. [Введение](./введение.md)
+ - [Введение](./введение.md#введение)
+ - [Системные требования](./введение.md#системные-требования)
+ - [Подготовка к работе](./введение.md#подготовка-к-работе)
+ - [Авторизация](./введение.md#авторизация)
+ - [Общие параметры модулей для авторизации](./введение.md#общие-параметры-модулей-для-авторизации)
+ - [Пример авторизации с помощью DECS3O](./введение.md#пример-авторизации-с-помощью-decs3o)
+ - [Пример авторизации с помощью BVS](./введение.md#пример-авторизации-с-помощью-bvs)
+ - [Пример авторизации с помощью JSON Web Token](./введение.md#пример-авторизации-с-помощью-json-web-token)
+2. 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) - получение информации о пользователе
+ - [Модуль decort_snapshot](./модуль-decort_snapshot.md) - управление снимками виртуальной машины
diff --git a/wiki/8.0.0/введение.md b/wiki/8.0.0/введение.md
new file mode 100644
index 0000000..af18224
--- /dev/null
+++ b/wiki/8.0.0/введение.md
@@ -0,0 +1,249 @@
+# Модули Ansible для управления облачными ресурсами в платформе DECORT
+## Введение
+
+Настоящая документация содержит руководство пользователя по библиотеке модулей decort для Ansible. С помощью этих модулей Вы сможете управлять созданием и конфигурированием облачных ресурсов в платформе DECORT (Digital Energy Cloud Orchestration Technology).
+
+По каждому модулю есть своя документация, в которой вы можете найти список доступных действий, подробную информацию о входных параметрах и возвращаемых данных, а также примеры использования.
+
+## Системные требования
+Убедитесь, что Ваша система соответствует требованиям для работы модуля DECORT.
+Системные требования для работы модуля:
+- Ansible 10.7.0
+- Python 3.10.12
+- requests 2.32.3 Python module
+- DynamiX Enterprise 4.3.0
+
+## Подготовка к работе
+
+Для начала работы необходимо, чтобы Ansible было известно местоположение файлов модулей. Для этого необходимо:
+- либо разместить директории **library** и **module_utils** в одной директории с плейбуками
+- либо в рабочей директории, из которой будет запускаться Ansible, разместить файл **ansible.cfg**, в котором задать пути к файлам модулей, например:
+```
+[defaults]
+library=./library
+module_utils=./module_utils
+```
+
+## Авторизация
+
+### Общие параметры модулей для авторизации
+
+
Параметр | +Тип | +Описание | +|||||
---|---|---|---|---|---|---|---|
+ app_id + | ++ (str) + | +
+ Идентификатор приложения, использующийся для получения токена в режимах
+ authenticator: bvs или authenticator: decs3o .
+ Данный параметр является обязательным для указанных режимов. Если
+ параметр не задан в playbook, модуль будет использовать значение
+ переменной окружения DECORT_APP_ID .
+ |
+ |||||
+ app_secret + | ++ (str) + | +
+ Секретный ключ приложения, использующийся для получения токена в режимах
+ authenticator: bvs или authenticator: decs3o .
+ Данный параметр является обязательным для указанных режимов.
+ Так как он содержит секретную информацию, то его не рекомендуется
+ задавать непосредственно в playbook. Если параметр не задан в playbook,
+ то модуль будет использовать значение переменной окружения
+ DECORT_APP_SECRET .
+ |
+ |||||
+ authenticator + | +
+ (str)
+ Значения: + bvs
+ decs3o
+ oauth2
+ jwt
+ Default: decs3o
+ |
+
+ Режим аутентификации для получения токена.
+ Значение oauth2 является устаревшим и равнозначным
+ decs3o .
+ |
+ |||||
+ controller_url + | ++ (str) + | ++ URL контроллера, соответствующего экземпляру облачной платформы + DECORT. Данный параметр является обязательным. + | +|||||
+ domain + | ++ (str) + | +
+ Домен BVS, использующийся для получения токена в режиме
+ authenticator: bvs . Данный параметр является
+ обязательным для указанного режима. Если параметр не задан в playbook,
+ модуль будет использовать значение переменной окружения
+ DECORT_DOMAIN .
+ |
+ |||||
+ jwt + | ++ (str) + | +
+ JSON Web Token (JWT), который будет использоваться для подключения
+ к контроллеру облачной платформы DECORT в режиме
+ authenticator: jwt . Данный параметр является
+ обязательным для указанного режима. Так как он содержит
+ потенциально секретную информацию, а сам JWT, как правило,
+ имеет ограниченное время жизни, то его не рекомендуется задавать
+ непосредственно в playbook. Если этот параметр не определен в
+ playbook, то модуль будет использовать значение переменной
+ окружения DECORT_JWT .
+ |
+ |||||
+ oauth2_url + | ++ (str) + | +
+ URL авторизационного сервера, работающего по протоколу Oauth2,
+ который должен использоваться в режимах
+ authenticator: bvs
+ или authenticator: decs3o . Данный параметр является
+ обязательным для указанных режимов. Если параметр не задан в
+ playbook, модуль будет использовать значение переменной
+ окружения DECORT_OAUTH2_URL .
+ |
+ |||||
+ password + | ++ (str) + | +
+ Пароль пользователя, который должен использоваться в режиме
+ authenticator: bvs . Данный параметр является
+ обязательным для указанного режима. Так как он содержит секретную
+ информацию, то его не рекомендуется задавать непосредственно
+ в playbook. Если параметр не задан в playbook, модуль будет
+ использовать значение переменной окружения
+ DECORT_PASSWORD .
+ |
+ |||||
+ username + | ++ (str) + | +
+ Логин пользователя, который должен использоваться в режиме
+ authenticator: bvs . Данный параметр является
+ обязательным для указанного режима. Если параметр не задан в playbook,
+ модуль будет использовать значение переменной окружения
+ DECORT_USERNAME .
+ |
+ |||||
+ verify_ssl + | +
+ (bool)
+ Default: true
+ |
+ + Позволяет отключить проверку SSL сертификатов при выполнении API + вызовов в адрес контроллера облачной инфраструктуры, например, + при работе с изолированной облачной инфраструктурой, использующей + самоподписанные сертификаты. Применяйте данный параметр с + осторожностью, предпочтительно в защищенных средах. + | +
Параметр | +Тип | +Описание | +|||||
---|---|---|---|---|---|---|---|
+ + 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) + | +
+ Идентификатор пользователя.
+ Обязательный параметр. + |
+ |||
+ + description + + | ++ (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 - существует и не удалён. Если удалён в
+ корзину, то будет восстановлен из корзины.
+ |
+
+ Ключ + | +
+ Тип
+ данных + |
+ + Описание + | +|||||
---|---|---|---|---|---|---|---|
+ 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 + | ++ Дата и время удаления. + | +|||||
+ description + | ++ 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 + | ++ Количество внутренних сетей. + | +
Параметр | +Тип | +Описание | +|||||
---|---|---|---|---|---|---|---|
+ + 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
+ |
+
+ Название поля, по которому сортировать.
+ Обязательный параметр. + |
+
+ Ключ + | +
+ Тип
+ данных + |
+ + Описание + | +|||||
---|---|---|---|---|---|---|---|
+ 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 + | ++ Дата и время удаления. + | +|||||
+ description + | ++ 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 + | ++ Дата и время удаления. + | +||||
+ | + description + | ++ 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 + | ++ Имя пользователя. + | +
+ Ключ + | +
+ Тип
+ данных + |
+ + Описание + | +|||||
---|---|---|---|---|---|---|---|
+ 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 + | ++ Идентификатор пользователя. + | +
Параметр | +Тип | +Описание | +||
---|---|---|---|---|
+ account_id + | ++ (int) + | ++ Идентификатор аккаунта. + | +||
+ account_name + | ++ (str) + | +
+ Имя аккаунта.
+ Может быть альтернативой параметру account_id .
+ |
+ ||
+ description + | +
+ (str)
+ Default: Managed by Ansible module decort_lb
+ |
+ + Описание балансировщика. + | +||
+ 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. Обязательный параметр. + | +|
+ 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
+ |
+ + Использовать схему высокой доступности для создаваемого балансировщика. + | +||
+ lb_id + | ++ (int) + | ++ Идентификатор балансировщика нагрузки. + | +||
+ lb_name + | ++ (str) + | ++ Имя балансировщика. + | +||
+ 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 равнозначны
+ и соответствуют включённому и запущенному балансировщику.
+ |
+ ||
+ sysctl + | ++ (dict) + | ++ Словарь, описывающий параметры конфигурации sysctl. + | +||
+ vins_id + | ++ (int) + | +
+ Идентификатор внутренней сети.
+ Может быть не задан, если задан ext_net_id -
+ в таком случае балансировщик будет подключён только к
+ внешней сети.
+ |
+ ||
+ vins_name + | ++ (str) + | +
+ Имя внутренней сети.
+ В комбинации с заданной РГ может быть альтернативой для + параметра vins_id .
+ |
+
+ Ключ + | +
+ Тип
+ данных + |
+ + Описание + | +|||
---|---|---|---|---|---|
+ 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 + | ++ Статус балансировщика. + | +|||
+ sysctl + | ++ dict + | ++ Параметры конфигурации sysctl. + | +
Параметр | +Тип | +Описание | +|||||
---|---|---|---|---|---|---|---|
+ + label + + | ++ (str) + | +
+ Метка снимка виртуальной машины. Если метка не указана при создании, она будет сгенерирована автоматически на основе даты и времени - vm_name_2024-12-10_16-40-52 .
+ |
+ |||||
+ + state + + | +
+ (str)
+ Значения: + absent
+ present
+ |
+
+ Целевое состояние.
+ absent - снимок удален.
+ present - снимок существует.
+ |
+ |||||
+ + usage + + | +
+ (bool)
+ Default: false
+ |
+ + Получить информацию о реальном размере снимка виртуальной машины. + | +|||||
+ + vm_id + + | ++ (int) + | +
+ Идентификатор виртуальной машины.
+ Обязательный параметр. + |
+
+ Ключ + | +
+ Тип
+ данных + |
+ + Описание + | +|||||
---|---|---|---|---|---|---|---|
+ disks + | ++ list + | ++ Диски + | +|||||
+ guid + | ++ str + | ++ Идентификатор снимка + | +|||||
+ label + | ++ str + | ++ Метка снимка + | +|||||
+ timestamp + | ++ int + | ++ Временная метка создания снимка + | +|||||
+ vm_id + | ++ int + | ++ Идентификатор виртуальной машины + | +
+ Ключ + | +
+ Тип
+ данных + |
+ + Описание + | +|||||
---|---|---|---|---|---|---|---|
+ stored + | ++ float + | ++ Размер снимка + | +
Параметр | +Тип | +Описание | +|||||
---|---|---|---|---|---|---|---|
+ + 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) + | ++ Начало периода. + | +||
+ | + | + | + | + timestamp + | ++ (int) + | ++ Unix-время. + | +|
+ | + | + | + | + datetime + | ++ (str) + | +
+ Дата и время в формате ггггммддччммсс .
+ Альтернатива параметру timestamp .
+ Допустимо использовать любой разделитель между + группами цифр для повышения читаемости. Например, + гггг-мм-дд чч:мм:сс .
+ |
+ |
+ | + | + | + end + | ++ (dict) + | +
+ Конец периода.
+ Структура словаря аналогична параметру + start .
+ |
+ ||
+ | + pagination + | ++ (dict) + | ++ Постраничный вывод. + | +||||
+ | + | + number + | +
+ (int)
+ Default: 1
+ |
+ + Номер страницы. + | +|||
+ | + | + size + | +
+ (int)
+ Default: 50
+ |
+ + Размер страниц. + | +|||
+ | + sorting + | ++ (dict) + | ++ Сортировка. + | +||||
+ | + | + asc + | +
+ (bool)
+ Default: true
+ |
+
+ Сортировать по возрастанию.
+ true - по возрастанию.
+ false - по убыванию.
+ |
+ |||
+ | + | + field + | +
+ (str)
+ Значения: + Call
+ Guid
+ Response Time
+ Status Code
+ Time
+ |
+
+ Название поля, по которому сортировать.
+ Обязательный параметр. + |
+ |||
+ + objects_search + + | ++ (str) + | ++ Получить информацию о доступных пользователю объектах, + найденных по строчному значению данного параметра. + | +|||||
+ + resource_consumption + + | +
+ (bool)
+ Default: false
+ |
+ + Получить информацию об используемых и зарезервированных ресурсах, + к которым имеет доступ пользователь. + | +
+ Ключ + | +
+ Тип
+ данных + |
+ + Описание + | +|||||
---|---|---|---|---|---|---|---|
+ 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 + | ++ Дата и время удаления. + | +||||
+ | + description + | ++ 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_methods + | ++ list + | ++ Список словарей, описывающих доступные методы API. + | +|||||
+ | + (название группы методов API) + | ++ dict + | ++ Доступные методы группы. + | +||||
+ | + | + (название подгруппы методов API) + | ++ list + | ++ Методы подгруппы. + | +|||
+ | + | + ALL + | ++ bool + | ++ Доступ ко всем методам группы. + | +
+ Ключ + | +
+ Тип
+ данных + |
+ + Описание + | +|||||
---|---|---|---|---|---|---|---|
+ objects_search + | ++ list + | ++ Список словарей, описывающих найденные объекты. + | +