From fdc4cd0804a741e93a6c4bf4bfb5281c2731f323 Mon Sep 17 00:00:00 2001
From: Pavel Tishkov <pavel.tishkov@flant.com>
Date: Thu, 16 May 2024 09:43:30 +0300
Subject: [PATCH 01/13] refactor(crd): fix crd params and add name suffixes

Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 crds/clustervirtualimage.yaml                 |   9 +-
 crds/doc-ru-clustervirtualimage.yaml          |  25 +--
 crds/doc-ru-virtualdisk.yaml                  |  23 +-
 crds/doc-ru-virtualimage.yaml                 |  30 +--
 crds/doc-ru-virtualmachine.yaml               | 211 ++++++++++--------
 ...u-virtualmachineblockdeviceattachment.yaml |   5 +-
 crds/doc-ru-virtualmachinecpumodel.yaml       |  50 +++++
 crds/doc-ru-virtualmachineipaddressclaim.yaml |   6 +-
 crds/doc-ru-virtualmachineoperation.yaml      |   2 +-
 crds/virtualdisk.yaml                         |  19 +-
 crds/virtualimage.yaml                        |   7 +-
 crds/virtualmachine.yaml                      |  32 ++-
 crds/virtualmachineblockdeviceattachment.yaml |  10 +-
 crds/virtualmachineipaddressclaim.yaml        |   8 +-
 crds/virtualmachineoperation.yaml             |  10 +-
 15 files changed, 261 insertions(+), 186 deletions(-)
 create mode 100644 crds/doc-ru-virtualmachinecpumodel.yaml

diff --git a/crds/clustervirtualimage.yaml b/crds/clustervirtualimage.yaml
index 028601ae7..9db238ae2 100644
--- a/crds/clustervirtualimage.yaml
+++ b/crds/clustervirtualimage.yaml
@@ -41,6 +41,8 @@ spec:
               properties:
                 dataSource:
                   type: object
+                  description: |
+                    An origin of the image.
                   required:
                     - type
                   properties:
@@ -151,7 +153,8 @@ spec:
                             YWFhCg==
                     objectRef:
                       type: object
-                      description: Reference to existing `VirtualImage` or `ClusterVirtualImage`.
+                      description: |
+                        Use an existing `VirtualImage` or `ClusterVirtualImage` to create an image.
                       required: ["kind", "name"]
                       properties:
                         kind:
@@ -293,10 +296,10 @@ spec:
                   type: string
                   description: |
                     Detailed description of the error. human-readable
-                usedInVMs:
+                attachedToVirtualMachines:
                   type: array
                   description: |
-                    A list of virtual s and namespaces that use the image
+                    A list of virtual machines and namespaces that use the image
                   example:
                     [
                       { name: "VM100", namespace: "customer1" },
diff --git a/crds/doc-ru-clustervirtualimage.yaml b/crds/doc-ru-clustervirtualimage.yaml
index fae1c7882..70bc6fda4 100644
--- a/crds/doc-ru-clustervirtualimage.yaml
+++ b/crds/doc-ru-clustervirtualimage.yaml
@@ -58,10 +58,8 @@ spec:
                           properties:
                             md5:
                               description: ""
-                              example: f3b59bed9f91e32fac1210184fcff6f5
                             sha256:
                               description: ""
-                              example: 78be890d71dde316c412da2ce8332ba47b9ce7a29d573801d2777e01aa20b9b5
                     containerImage:
                       description: |
                         Использование образа, хранящегося во внешнем реестре контейнеров.
@@ -82,23 +80,19 @@ spec:
                         caBundle:
                           description: |
                             Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
-                    virtualImage:
+                    objectRef:
                       description: |
-                        Использование существующего `VirtualImage`.
+                        Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
                       properties:
+                        kind:
+                          description: |
+                            Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
                         name:
                           description: |
-                            Имя существующего `VirtualImage`.
+                            Имя существующего `VirtualImage` или `ClusterVirtualImage`.
                         namespace:
                           description: |
-                            Пространство имен, где `VirtualImage` расположен.
-                    clusterVirtualImage:
-                      description: |
-                        Использовать существующий `ClusterVirtualImage`.
-                      properties:
-                        name:
-                          description: |
-                            Имя существующего `ClusterVirtualImage`.
+                            Имя namespace'а, гда ресположен `VirtualImage`.
             status:
               properties:
                 downloadSpeed:
@@ -164,9 +158,8 @@ spec:
                   description: |
                     Краткое описание причины ошибки.
                 failureMessage:
-                  type: string
                   description: |
                     Подробное описание ошибки.
-                usedInVMs:
+                attachedToVirtualMachines:
                   description: |
-                    Список виртуальных машин и из пространств имен, использующих этот образ
+                    Список виртуальных машин, использующих этот образ
diff --git a/crds/doc-ru-virtualdisk.yaml b/crds/doc-ru-virtualdisk.yaml
index 27aa9e700..8f5fb7336 100644
--- a/crds/doc-ru-virtualdisk.yaml
+++ b/crds/doc-ru-virtualdisk.yaml
@@ -17,7 +17,7 @@ spec:
                     size:
                       description: |
                         Желаемый размер PVC для хранения диска. Если диск создается из образа, то размер должен быть не меньше, чем исходный образ в распакованном состоянии.
-                    storageClass:
+                    storageClassName:
                       description: |
                         Имя класса StorageClass, требуемого для PersistentVolumeClaim. Дополнительная информация — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1.
                 dataSource:
@@ -84,20 +84,17 @@ spec:
                         caBundle:
                           description: |
                             Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
-                    virtualImage:
+                    objectRef:
                       description: |
-                        Используйте существующий `VirtualImage`.
+                        Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
                       properties:
-                        name:
+                        kind:
                           description: |
-                            Имя существующего `VirtualImage`.
-                    clusterVirtualImage:
-                      description: |
-                        Использовать существующий `ClusterVirtualImage`.
-                      properties:
+                            Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
                         name:
                           description: |
-                            Имя существующего `ClusterVirtualImage`.
+                            Имя существующего `VirtualImage` или `ClusterVirtualImage`.
+
             status:
               properties:
                 downloadSpeed:
@@ -125,7 +122,6 @@ spec:
                       description: |
                         Имя созданного PersistentVolumeClaim для хранилища Kubernetes.
                 phase:
-                  type: string
                   description: |
                     Текущее состояние ресурса `VirtualDisk`:
 
@@ -145,9 +141,8 @@ spec:
                   description: |
                     Краткое описание причины ошибки.
                 failureMessage:
-                  type: string
                   description: |
                     Подробное описание ошибки.
-                usedInVMs:
+                attachedToVirtualMachines:
                   description: |
-                    Список виртуальных машин и их пространств имен, использующих этот образ
+                    Список виртуальных машин, использующих этот диск
diff --git a/crds/doc-ru-virtualimage.yaml b/crds/doc-ru-virtualimage.yaml
index ad73ccb38..bdfa9a3d4 100644
--- a/crds/doc-ru-virtualimage.yaml
+++ b/crds/doc-ru-virtualimage.yaml
@@ -3,7 +3,6 @@ spec:
     - name: v1alpha2
       schema:
         openAPIV3Schema:
-          type: object
           description: |
             Описывает образ диска виртуальной машины, который может использоваться в качестве источника данных для новых `VirtualDisks` или установочный образ (iso), который быть смонтирован в `VirtualMachines` напрямую.
 
@@ -59,7 +58,6 @@ spec:
                           description: |
                             Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
                         checksum:
-                          type: object
                           description: |
                             Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
                           properties:
@@ -79,29 +77,19 @@ spec:
                             name:
                               description: |
                                 Имя Secret'а, содержащего учетные данные для подключения к container registry.
-                            namespace:
-                              description: |
-                                Пространство имен, в котором находится imagePullSecret.
                         caBundle:
                           description: |
                             Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
-                    virtualImage:
+                    objectRef:
                       description: |
-                        Используйте существующий `VirtualImage`.
+                        Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
                       properties:
-                        name:
-                          description: |
-                            Имя существующего `VirtualImage`.
-                        namespace:
+                        kind:
                           description: |
-                            Пространство имен, где `VirtualImage` расположен.
-                    clusterVirtualImage:
-                      description: |
-                        Использовать существующий `ClusterVirtualImage`.
-                      properties:
+                            Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
                         name:
                           description: |
-                            Имя существующего `ClusterVirtualImage`.
+                            Имя существующего `VirtualImage` или `ClusterVirtualImage`.
             status:
               type: object
               properties:
@@ -147,9 +135,6 @@ spec:
                     registryURL:
                       description: |
                         Образ, созданный в DVCR.
-                    persistentVolumeClaim:
-                      description: |
-                        Имя созданного PersistentVolumeClaim для хранилища Kubernetes.
                 phase:
                   description: |
                     Текущее состояние ресурса `VirtualImage`:
@@ -172,9 +157,8 @@ spec:
                   description: |
                     Краткое описание причины ошибки.
                 failureMessage:
-                  type: string
                   description: |
                     Подробное описание ошибки.
-                usedInVMs:
+                attachedToVirtualMachines:
                   description: |
-                    Список виртуальных машин и их пространств имен, использующих этот образ
+                    Список виртуальных машин, использующих этот образ
diff --git a/crds/doc-ru-virtualmachine.yaml b/crds/doc-ru-virtualmachine.yaml
index 6d10bc0b7..001809dba 100644
--- a/crds/doc-ru-virtualmachine.yaml
+++ b/crds/doc-ru-virtualmachine.yaml
@@ -53,9 +53,9 @@ spec:
                     * `Manual` — после создания ВМ выключается, состояние ВМ (включение/выключение) контролируется через API-сервисы или средствами ОС.
                     * `AlwaysOnUnlessStoppedManually` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС, ВМ может быть выключена с помощью соответствующего API-сервиса.
 
-                virtualMachineIPAddressClaim:
+                virtualMachineIPAddressClaimName:
                   description: |
-                    Имя для связанного ресурса `VirtualMahcineIPAddressClaim`.
+                    Имя для связанного ресурса `virtualMachineIPAddressClaimName`.
 
                     Если не указано, по умолчанию используется `.metadata.name`.
 
@@ -77,10 +77,12 @@ spec:
                                 operator:
                                   description: ""
                                 values:
+                                  description: ""
                                   items:
                                     description: ""
-                                  description: ""
                           matchLabels:
+                            additionalProperties:
+                              description: ""
                             description: ""
                       maxSkew:
                         description: ""
@@ -98,288 +100,330 @@ spec:
                     * podAffinityTerm -> virtualMachineAndPodAffinityTerm.
                   properties:
                     nodeAffinity:
+                      description: Описывает правила affiniy узлов для ВМ.
                       properties:
                         preferredDuringSchedulingIgnoredDuringExecution:
+                          description: ""
                           items:
+                            description: ""
                             properties:
                               preference:
+                                description: ""
                                 properties:
                                   matchExpressions:
+                                    description: ""
                                     items:
+                                      description: ""
                                       properties:
                                         key:
                                           description: ""
                                         operator:
                                           description: ""
                                         values:
+                                          description: ""
                                           items:
                                             description: ""
-                                          description: ""
-                                      description: ""
-                                    description: ""
                                   matchFields:
+                                    description: ""
                                     items:
+                                      description: ""
                                       properties:
                                         key:
                                           description: ""
                                         operator:
                                           description: ""
                                         values:
+                                          description: ""
                                           items:
                                             description: ""
-                                          description: ""
-                                      description: ""
-                                    description: ""
-                                description: ""
                               weight:
                                 description: ""
-                            description: ""
-                          description: ""
                         requiredDuringSchedulingIgnoredDuringExecution:
+                          description: ""
                           properties:
                             nodeSelectorTerms:
+                              description: ""
                               items:
+                                description: ""
                                 properties:
                                   matchExpressions:
+                                    description: ""
                                     items:
+                                      description: ""
                                       properties:
                                         key:
                                           description: ""
                                         operator:
                                           description: ""
                                         values:
+                                          description: ""
                                           items:
                                             description: ""
-                                          description: ""
-                                      description: ""
-                                    description: ""
                                   matchFields:
+                                    description: ""
                                     items:
+                                      description: ""
                                       properties:
                                         key:
                                           description: ""
                                         operator:
                                           description: ""
                                         values:
+                                          description: ""
                                           items:
                                             description: ""
-                                          description: ""
-                                      description: ""
-                                    description: ""
-                                description: ""
-                              description: ""
-                          description: ""
-                      description: Описывает правила планирования affiniy (близости) узлов для ВМ.
                     virtualMachineAndPodAffinity:
-                      description: Описывает правила планирования affiniy (близости) пода и ВМ.
+                      description: Описывает правила affiniy подов и ВМ.
                       properties:
                         preferredDuringSchedulingIgnoredDuringExecution:
+                          description: ""
                           items:
+                            description: ""
                             properties:
                               virtualMachineAndPodAffinityTerm:
+                                description: ""
                                 properties:
                                   labelSelector:
+                                    description: ""
                                     properties:
                                       matchExpressions:
+                                        description: ""
                                         items:
+                                          description: ""
                                           properties:
                                             key:
                                               description: ""
                                             operator:
                                               description: ""
                                             values:
+                                              description: ""
                                               items:
                                                 description: ""
-                                              description: ""
-                                          description: ""
-                                        description: ""
                                       matchLabels:
                                         additionalProperties:
                                           description: ""
                                         description: ""
+                                  matchLabelKeys:
+                                    description: ""
+                                    items:
+                                      description: ""
+                                  mismatchLabelKeys:
                                     description: ""
+                                    items:
+                                      description: ""
                                   namespaceSelector:
+                                    description: ""
                                     properties:
                                       matchExpressions:
+                                        description: ""
                                         items:
+                                          description: ""
                                           properties:
                                             key:
                                               description: ""
                                             operator:
                                               description: ""
                                             values:
+                                              description: ""
                                               items:
                                                 description: ""
-                                              description: ""
-                                          description: ""
-                                        description: ""
                                       matchLabels:
+                                        additionalProperties:
+                                          description: ""
                                         description: ""
-                                    description: ""
                                   namespaces:
+                                    description: ""
                                     items:
                                       description: ""
-                                    description: ""
                                   topologyKey:
                                     description: ""
-                                description: ""
                               weight:
                                 description: ""
-                            description: ""
-                          description: ""
                         requiredDuringSchedulingIgnoredDuringExecution:
+                          description: ""
                           items:
+                            description: ""
                             properties:
                               labelSelector:
+                                description: ""
                                 properties:
                                   matchExpressions:
+                                    description: ""
                                     items:
+                                      description: ""
                                       properties:
                                         key:
                                           description: ""
                                         operator:
                                           description: ""
                                         values:
+                                          description: ""
                                           items:
                                             description: ""
-                                          description: ""
-                                      description: ""
-                                    description: ""
                                   matchLabels:
+                                    additionalProperties:
+                                      description: ""
                                     description: ""
+                              matchLabelKeys:
                                 description: ""
+                                items:
+                                  description: ""
+                              mismatchLabelKeys:
+                                description: ""
+                                items:
+                                  description: ""
                               namespaceSelector:
+                                description: ""
                                 properties:
                                   matchExpressions:
+                                    description: ""
                                     items:
+                                      description: ""
                                       properties:
                                         key:
                                           description: ""
                                         operator:
                                           description: ""
                                         values:
+                                          description: ""
                                           items:
                                             description: ""
-                                          description: ""
-                                      description: ""
-                                    description: ""
                                   matchLabels:
                                     additionalProperties:
                                       description: ""
                                     description: ""
-                                description: ""
                               namespaces:
+                                description: ""
                                 items:
                                   description: ""
-                                description: ""
                               topologyKey:
                                 description: ""
-                            description: ""
-                          description: ""
                     virtualMachineAndPodAntiAffinity:
-                      description: Описывает правила планирования anti-affiniy пода и ВМ.
+                      description: Описывает правила anti-affiniy пода и ВМ.
                       properties:
                         preferredDuringSchedulingIgnoredDuringExecution:
+                          description: ""
                           items:
+                            description: ""
                             properties:
                               virtualMachineAndPodAffinityTerm:
+                                description: ""
                                 properties:
                                   labelSelector:
+                                    description: ""
                                     properties:
                                       matchExpressions:
+                                        description: ""
                                         items:
+                                          description: ""
                                           properties:
                                             key:
                                               description: ""
                                             operator:
                                               description: ""
                                             values:
+                                              description: ""
                                               items:
                                                 description: ""
-                                              description: ""
-                                          description: ""
-                                        description: ""
                                       matchLabels:
+                                        additionalProperties:
+                                          description: ""
                                         description: ""
+                                  matchLabelKeys:
                                     description: ""
+                                    items:
+                                      description: ""
+                                  mismatchLabelKeys:
+                                    description: ""
+                                    items:
+                                      description: ""
                                   namespaceSelector:
+                                    description: ""
                                     properties:
                                       matchExpressions:
+                                        description: ""
                                         items:
+                                          description: ""
                                           properties:
                                             key:
                                               description: ""
                                             operator:
                                               description: ""
                                             values:
+                                              description: ""
                                               items:
                                                 description: ""
-                                              description: ""
-                                          description: ""
-                                        description: ""
                                       matchLabels:
+                                        additionalProperties:
+                                          description: ""
                                         description: ""
-                                    description: ""
                                   namespaces:
+                                    description: ""
                                     items:
                                       description: ""
-                                    description: ""
                                   topologyKey:
                                     description: ""
-                                description: ""
                               weight:
                                 description: ""
-                            description: ""
-                          description: ""
                         requiredDuringSchedulingIgnoredDuringExecution:
+                          description: ""
                           items:
+                            description: ""
                             properties:
                               labelSelector:
+                                description: ""
                                 properties:
                                   matchExpressions:
+                                    description: ""
                                     items:
+                                      description: ""
                                       properties:
                                         key:
                                           description: ""
                                         operator:
                                           description: ""
                                         values:
+                                          description: ""
                                           items:
                                             description: ""
-                                          description: ""
-                                      description: ""
-                                    description: ""
                                   matchLabels:
+                                    additionalProperties:
+                                      description: ""
                                     description: ""
+                              matchLabelKeys:
+                                description: ""
+                                items:
+                                  description: ""
+                              mismatchLabelKeys:
                                 description: ""
+                                items:
+                                  description: ""
                               namespaceSelector:
+                                description: ""
                                 properties:
                                   matchExpressions:
+                                    description: ""
                                     items:
+                                      description: ""
                                       properties:
                                         key:
                                           description: ""
                                         operator:
                                           description: ""
                                         values:
+                                          description: ""
                                           items:
                                             description: ""
-                                          description: ""
-                                      description: ""
-                                    description: ""
                                   matchLabels:
                                     additionalProperties:
                                       description: ""
                                     description: ""
-                                description: ""
                               namespaces:
+                                description: ""
                                 items:
                                   description: ""
-                                description: ""
                               topologyKey:
                                 description: ""
-                            description: ""
-                          description: ""
 
                 nodeSelector:
                   description: |
@@ -414,7 +458,7 @@ spec:
                     Некоторые настройки ВМ требуют перезагрузки ВМ при изменении конфигурации. Для перезагрузки необходимо одобрить изменения. Для этого используется параметр `approvalMode`.
 
                   properties:
-                    approvalMode:
+                    restartApprovalMode:
                       description: |
                         Режим одобрения для изменений, требующих перезагрузки ВМ:
 
@@ -448,6 +492,9 @@ spec:
                   description: |
                     Блок определяет настройки процессора для виртуальной машины.
                   properties:
+                    virtualMachineCPUModelName:
+                      description: |
+                        Имя ресурса `virtualMachineCPUModelName`, определяющего модель процессора для виртуальной машины.
                     cores:
                       description: |
                         Количество ядер в виртуальной машине. Значение числа ядер должно быть больше или равно 1.
@@ -480,22 +527,15 @@ spec:
                           * `VirtualDisk` — используйте `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме для чтения и записи (ReadWrite).
                       name:
                         description: |
-                          Имя ресурса.
-                restartApprovalID:
-                  description: |
-                    Хэш изменений виртуальной машины из .status.changeID.
-                    Требуется для утверждения разрушительных изменений виртуальной машины (например, перезапуск).
+                          Имя ресурса заданного типа.
             status:
-              type: object
               properties:
                 guestOSInfo:
-                  type: object
                   description: |
                     Информация об гостевой ОС, полученная от агента (QEMU Guest Agent). Агент должен быть предварительно установлен.
 
                     Больше информации об агенте можно прочитать тут: https://www.qemu.org/docs/master/interop/qemu-ga.html.
                 phase:
-                  type: string
                   description: |
                     Текущая фаза виртуальной машины:
 
@@ -505,19 +545,12 @@ spec:
                     * `Failed` — произошла ошибка в процессе запуска или работы ВМ.
                     * `Terminating` — в настоящий момент ВМ завершает свою работу.
                     * `Stopped` — ВМ остановлена.
-                  enum:
-                    - "Scheduling"
-                    - "Pending"
-                    - "Running"
-                    - "Failed"
-                    - "Terminating"
-                    - "Stopped"
                 nodeName:
                   description: |
                     Имя узла, на котором в данный момент запущена ВМ.
-                ipAddressClaim:
+                virtualMachineIPAddressClaimName:
                   description: |
-                    Имя `VirtualMachineIPAddressClaim`, содержащее IP-адрес виртуальной машины.
+                    Имя `virtualMachineIPAddressClaimName`, содержащее IP-адрес виртуальной машины.
                 ipAddress:
                   description: |
                     IP-адрес ВМ.
@@ -532,9 +565,9 @@ spec:
                       kind:
                         description: |
                           Тип блочного устройства.
-                        name:
-                          description: |
-                            Имя существующего ресурса.
+                      name:
+                        description: |
+                          Имя существующего ресурса.
                       target:
                         description: |
                           Название подключенного блочного устройства.
@@ -561,6 +594,6 @@ spec:
                 message:
                   description: |
                     Детальное описание состояния ВМ.
-                changeID:
+                restartAwaitingChanges:
                   description: |
-                    Хэш изменений виртуальной машины. Используйте spec.restartApprovalID для утверждения разрушительных изменений, например перезапуска.
+                    Список изменений в конфигурации, требующий перезапуска ВМ.
diff --git a/crds/doc-ru-virtualmachineblockdeviceattachment.yaml b/crds/doc-ru-virtualmachineblockdeviceattachment.yaml
index 7d62f03f2..83c055612 100644
--- a/crds/doc-ru-virtualmachineblockdeviceattachment.yaml
+++ b/crds/doc-ru-virtualmachineblockdeviceattachment.yaml
@@ -8,7 +8,7 @@ spec:
           properties:
             spec:
               properties:
-                virtualMachine:
+                virtualMachineName:
                   description: |
                     Имя виртуальной машины, к которой подключен диск.
                 blockDeviceRef:
@@ -25,7 +25,7 @@ spec:
                         Имя блочного устройства
             status:
               properties:
-                virtualMachine:
+                virtualMachineName:
                   description: |
                     Имя виртуальной машины, к которой подключен этот диск.
                 phase:
@@ -39,6 +39,5 @@ spec:
                   description: |
                     Краткое описание причины ошибки.
                 failureMessage:
-                  type: string
                   description: |
                     Подробное описание ошибки.
diff --git a/crds/doc-ru-virtualmachinecpumodel.yaml b/crds/doc-ru-virtualmachinecpumodel.yaml
new file mode 100644
index 000000000..2e1ba5f3c
--- /dev/null
+++ b/crds/doc-ru-virtualmachinecpumodel.yaml
@@ -0,0 +1,50 @@
+spec:
+  versions:
+  - name: v1alpha2
+    schema:
+      openAPIV3Schema:
+        description: |
+          Неизменяемый ресурс описывает модель процессора для использования в ВМ. Ресурс не может быть удален, пока он используется в одной из ВМ.
+        properties:
+          spec:
+            properties:
+              features:
+                description: |
+                  Необходимые инструкции для процессора в виде списка Дополнительную информацию о поддерживаемых инструкциях можно найти [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
+                items: {}
+              model:
+                description: |
+                  Название модели процессора. Дополнительная информация о моделях [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
+              type:
+                description: |
+                  В качестве типа ресурса, поддерживаются следующие варианты:
+                  * Host - использовать физический процессор хоста.
+                  * Модель - модель процессора. Модель процессора - это именованный и предварительно определенный набор поддерживаемых инструкций процессора.
+                  * Features - необходимый набор поддерживаемых инструкций для процессора.
+          status:
+            properties:
+              features:
+                description: |
+                  Информация о поддерживаемых наборах инструкций процессора для данной модели.
+                  Отображается только для `type=Features`.
+                properties:
+                  enabled:
+                    description: |
+                      Список наборов инструкций процессора для данной модели.
+                    items: {}
+                  notEnabledCommon:
+                    description: |
+                      Список неиспользуемых инструкций процессора, дополнительно доступных для данной группы узлов.
+                    items: {}
+              nodes:
+                description: |
+                  Список узлов, поддерживающих данную модель процессора.
+                  Не отображается для `type=Host`.
+                items: {}
+              phase:
+                description: |
+                  Текущий статус ресурса `VirtualMachineCPUModel`:
+                  * Pending - ресурс находится в очереди на обработку.
+                  * InProgress - ресурс находится в процессе создания.
+                  * Ready - ресурс успешно создан.
+                  * Failed - в процессе создания ресурса произошла ошибка.
diff --git a/crds/doc-ru-virtualmachineipaddressclaim.yaml b/crds/doc-ru-virtualmachineipaddressclaim.yaml
index 5463e8d58..9a5c7ec83 100644
--- a/crds/doc-ru-virtualmachineipaddressclaim.yaml
+++ b/crds/doc-ru-virtualmachineipaddressclaim.yaml
@@ -13,9 +13,9 @@ spec:
                 address:
                   description: |
                     Запрашиваемый IP-адрес. Если это значение не задано, будет назначен следующий доступный IP-адрес.
-                virtualMachineIPAddressLease:
+                virtualMachineIPAddressLeaseName:
                   description: |
-                    Выданный `VirtualMachineIPAddressLease`, управляется автоматически.
+                    Имя выданного `VirtualMachineIPAddressLease`, управляется автоматически.
                 reclaimPolicy:
                   description: |
                     Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`.
@@ -30,7 +30,7 @@ spec:
                 address:
                   description: |
                     Назначенный IP-адрес.
-                virtualMachine:
+                virtualMachineName:
                   description: |
                     Имя виртуальной машины, которая в настоящее время использует этот IP-адрес.
                 phase:
diff --git a/crds/doc-ru-virtualmachineoperation.yaml b/crds/doc-ru-virtualmachineoperation.yaml
index 05dbfdd1e..2cf2e8c4b 100644
--- a/crds/doc-ru-virtualmachineoperation.yaml
+++ b/crds/doc-ru-virtualmachineoperation.yaml
@@ -15,7 +15,7 @@ spec:
                     * Start - запустить виртуальную машину.
                     * Stop - остановить виртуальную машину.
                     * Restart - перезапустить виртуальную машину.
-                virtualMachine:
+                virtualMachineName:
                   description: |
                     Имя виртуальной машины, для которой выполняется операция.
                 force:
diff --git a/crds/virtualdisk.yaml b/crds/virtualdisk.yaml
index 973636007..27ce60f70 100644
--- a/crds/virtualdisk.yaml
+++ b/crds/virtualdisk.yaml
@@ -27,7 +27,7 @@ spec:
         openAPIV3Schema:
           type: object
           description: |
-            Describes a virtual  disk that can be mounted in `Virtuals`. Once the resource is created, only the disk size `.spec.persistentVolumeClaim.size` can be changed, all other fields are immutable.
+            Describes a virtual disk that can be mounted in `VirtualMachines`. Once the resource is created, only the disk size `.spec.persistentVolumeClaim.size` can be changed, all other fields are immutable.
 
             A PVC is created under the hood of the resource, into which the data from the source is filled.
           required:
@@ -48,7 +48,7 @@ spec:
                       description: |
                         Desired size for PVC to store the disk. If the disk is created from an image, the size must be at least as large as the original unpacked image.
                       pattern: "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$"
-                    storageClass:
+                    storageClassName:
                       type: string
                       description: |
                         The name of the StorageClass required by the claim. More info — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
@@ -162,7 +162,8 @@ spec:
                             YWFhCg==
                     objectRef:
                       type: object
-                      description: Reference to existing `VirtualImage` or `ClusterVirtualImage`.
+                      description: |
+                        Use an existing `VirtualImage` or `ClusterVirtualImage` to create an image.
                       required: ["kind", "name"]
                       properties:
                         kind:
@@ -267,10 +268,10 @@ spec:
                   type: string
                   description: |
                     Detailed description of the error.
-                usedInVMs:
+                attachedToVirtualMachines:
                   type: array
                   description: |
-                    A list of virtual that use the disk
+                    A list of `VirtualMachines` that use the disk
                   example: [{ name: "VM100" }, { name: "VM200" }]
                   items:
                     type: object
@@ -288,8 +289,12 @@ spec:
           type: string
           jsonPath: .status.progress
           priority: 1
-        - name: Target PVC
-          jsonPath: .status.target.persistentVolumeClaim
+        - name: StorageClass
+          jsonPath: .spec.persistentVolumeClaim.storageClassName
+          type: string
+          priority: 1
+        - name: TargetPVC
+          jsonPath: .status.target.persistentVolumeClaimName
           type: string
           priority: 1
         - name: Age
diff --git a/crds/virtualimage.yaml b/crds/virtualimage.yaml
index be7d57233..e27678da7 100644
--- a/crds/virtualimage.yaml
+++ b/crds/virtualimage.yaml
@@ -158,7 +158,8 @@ spec:
                             YWFhCg==
                     objectRef:
                       type: object
-                      description: Reference to existing `VirtualImage` or `ClusterVirtualImage`.
+                      description: |
+                        Use an existing `VirtualImage` or `ClusterVirtualImage` to create an image.
                       required: ["kind", "name"]
                       properties:
                         kind:
@@ -302,10 +303,10 @@ spec:
                   type: string
                   description: |
                     Detailed description of the error.
-                usedInVMs:
+                attachedToVirtualMachines:
                   type: array
                   description: |
-                    A list of virtual that use the image
+                    A list of `VirtualMachines` that use the disk
                   example: [{ name: "VM100" }, { name: "VM200" }]
                   items:
                     type: object
diff --git a/crds/virtualmachine.yaml b/crds/virtualmachine.yaml
index 35dfca7c8..1bf549763 100644
--- a/crds/virtualmachine.yaml
+++ b/crds/virtualmachine.yaml
@@ -139,13 +139,13 @@ spec:
                     * `Manual` - after creation the VM is switched off, the VM state (switching on/off) is controlled via sub-resources or OS means.
                     * `AlwaysOnUnlessStoppedManually` - after creation the VM is always in a running state, even in case of its shutdown by means of the OS, the VM can be shut down using the corresponding subresource.
 
-                virtualMachineIPAddressClaim:
+                virtualMachineIPAddressClaimName:
                   type: string
                   description: |
-                    The name for associated `VirtualMachineIPAddressClaim` resource.
+                    The name for associated `virtualMachineIPAddressClaimName` resource.
 
-                    If specified, VirtualMachineIPAddressClaim should exists on VirtualMachine creation.
-                    If not specified, a VirtualMachine name will be used to create an implicit VirtualMachineIPAddressClaim. This claim will be deleted on VirtualMachine deletion.
+                    If specified, virtualMachineIPAddressClaimName should exists on VirtualMachine creation.
+                    If not specified, a VirtualMachine name will be used to create an implicit virtualMachineIPAddressClaimName. This claim will be deleted on VirtualMachine deletion.
 
                 topologySpreadConstraints:
                   description: |
@@ -848,11 +848,11 @@ spec:
                   required:
                     - cores
                   properties:
-                    virtualMachineCPUModel:
+                    virtualMachineCPUModelName:
                       type: string
                       default: "generic-v1"
                       description: |
-                        Name of `VirtualMachineCPUModel` resource holding the CPU model of the VirtualMachine.
+                        Name of `virtualMachineCPUModelName` resource holding the CPU model of the VirtualMachine.
                     cores:
                       format: int32
                       type: integer
@@ -937,14 +937,14 @@ spec:
                     - "Starting"
                     - "Migrating"
                     - "Pause"
-                node:
+                nodeName:
                   type: string
                   description: |
                     The name of the node on which the VM is currently running.
-                virtualMachineIPAddressClaim:
+                virtualMachineIPAddressClaimName:
                   type: string
                   description: |
-                    Name of `VirtualMachineIPAddressClaim` holding the ip address of the VirtualMachine.
+                    Name of `virtualMachineIPAddressClaimName` holding the ip address of the VirtualMachine.
                 ipAddress:
                   type: string
                   description: |
@@ -1027,9 +1027,21 @@ spec:
         - name: Phase
           type: string
           jsonPath: .status.phase
+        - name: Cores
+          type: string
+          jsonPath: .spec.cpu.cores
+          priority: 1
+        - name: CoreFraction
+          type: string
+          jsonPath: .spec.cpu.coreFraction
+          priority: 1
+        - name: Memory
+          type: string
+          jsonPath: .spec.memory.size
+          priority: 1
         - name: Node
           type: string
-          jsonPath: .status.node
+          jsonPath: .status.nodeName
         - name: IPAddress
           type: string
           jsonPath: .status.ipAddress
diff --git a/crds/virtualmachineblockdeviceattachment.yaml b/crds/virtualmachineblockdeviceattachment.yaml
index f1ded4d6b..a14bc6138 100644
--- a/crds/virtualmachineblockdeviceattachment.yaml
+++ b/crds/virtualmachineblockdeviceattachment.yaml
@@ -35,10 +35,10 @@ spec:
             spec:
               type: object
               required:
-                - virtualMachine
+                - virtualMachineName
                 - blockDeviceRef
               properties:
-                virtualMachine:
+                virtualMachineName:
                   type: string
                   description: |
                     The name of the virtual machine to which the disk or image is connected.
@@ -63,7 +63,7 @@ spec:
             status:
               type: object
               properties:
-                virtualMachine:
+                virtualMachineName:
                   type: string
                   description: |
                     The name of the virtual machine to which this disk is attached.
@@ -91,9 +91,9 @@ spec:
         - name: Phase
           type: string
           jsonPath: .status.phase
-        - name: VirtualMachine
+        - name: virtualMachineName
           type: string
-          jsonPath: .status.virtualMachine
+          jsonPath: .status.virtualMachineName
           priority: 1
         - name: FailureReason
           type: string
diff --git a/crds/virtualmachineipaddressclaim.yaml b/crds/virtualmachineipaddressclaim.yaml
index 39e0b3adf..9803a7da8 100644
--- a/crds/virtualmachineipaddressclaim.yaml
+++ b/crds/virtualmachineipaddressclaim.yaml
@@ -39,9 +39,9 @@ spec:
                   description: |
                     The requested IP address. If omitted the next available IP address will be assigned.
                   type: string
-                virtualMachineIPAddressLease:
+                virtualMachineIPAddressLeaseName:
                   description: |
-                    The issued `VirtualMachineIPAddressLease`, managed automatically.
+                    The name of issued `VirtualMachineIPAddressLease`, managed automatically.
                   type: string
                 reclaimPolicy:
                   type: string
@@ -61,7 +61,7 @@ spec:
                   description: |
                     The assigned IP address.
                   type: string
-                virtualMachine:
+                virtualMachineName:
                   description: |
                     Represents the virtual machine that currently uses this IP address.
                   type: string
@@ -96,7 +96,7 @@ spec:
         - jsonPath: .status.phase
           name: Status
           type: string
-        - jsonPath: .status.virtualMachine
+        - jsonPath: .status.virtualMachineName
           name: VM
           type: string
         - jsonPath: .metadata.creationTimestamp
diff --git a/crds/virtualmachineoperation.yaml b/crds/virtualmachineoperation.yaml
index 8fdd87c47..14aa46d86 100644
--- a/crds/virtualmachineoperation.yaml
+++ b/crds/virtualmachineoperation.yaml
@@ -32,7 +32,7 @@ spec:
             spec:
               type: object
               required:
-                - virtualMachine
+                - virtualMachineName
               properties:
                 type:
                   type: string
@@ -42,7 +42,7 @@ spec:
                     * Start - start the virtualmachine.
                     * Stop - stop the virtualmachine.
                     * Restart - restart the virtualmachine.
-                virtualMachine:
+                virtualMachineName:
                   type: string
                   description: |
                     The name of the virtual machine for which the operation is performed.
@@ -54,7 +54,7 @@ spec:
                 - properties:
                     type:
                       enum: ["Start"]
-                  required: ["virtualMachine"]
+                  required: ["virtualMachineName"]
                   not:
                     anyOf:
                       - required:
@@ -62,7 +62,7 @@ spec:
                 - properties:
                     type:
                       enum: ["Restart", "Stop"]
-                  required: ["virtualMachine"]
+                  required: ["virtualMachineName"]
             status:
               type: object
               properties:
@@ -93,7 +93,7 @@ spec:
           type: string
           jsonPath: .status.phase
         - name: VM
-          jsonPath: .spec.virtualMachine
+          jsonPath: .spec.virtualMachineName
           type: string
         - name: Age
           type: date

From a7944b1663d3244743e55cfa3fcb76932785fe54 Mon Sep 17 00:00:00 2001
From: Pavel Tishkov <pavel.tishkov@flant.com>
Date: Thu, 16 May 2024 09:43:36 +0300
Subject: [PATCH 02/13] refactor(crd): update docs

Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 docs/EXAMPLES.md    |  4 ++--
 docs/EXAMPLES_RU.md | 13 ++++++-------
 docs/FAQ.md         |  8 ++++----
 docs/FAQ_RU.md      |  8 ++++----
 docs/README.md      | 10 ++++++++--
 docs/README_RU.md   | 10 ++++++++--
 6 files changed, 32 insertions(+), 21 deletions(-)

diff --git a/docs/EXAMPLES.md b/docs/EXAMPLES.md
index 7ef97700f..8823f996c 100644
--- a/docs/EXAMPLES.md
+++ b/docs/EXAMPLES.md
@@ -279,7 +279,7 @@ metadata:
   name: vmd-blank
 spec:
   persistentVolumeClaim:
-    storageClass: "your-storage-class-name"
+    storageClassName: "your-storage-class-name"
     size: 100M
 ```
 
@@ -310,7 +310,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 10Gi
-    storageClass: "your-storage-class-name"
+    storageClassName: "your-storage-class-name"
   dataSource:
     type: ObjectRef
     objectRef:
diff --git a/docs/EXAMPLES_RU.md b/docs/EXAMPLES_RU.md
index 342f32941..11f88bbdd 100644
--- a/docs/EXAMPLES_RU.md
+++ b/docs/EXAMPLES_RU.md
@@ -286,7 +286,7 @@ metadata:
   name: vmd-blank
 spec:
   persistentVolumeClaim:
-    storageClass: "your-storage-class-name"
+    storageClassName: "your-storage-class-name"
     size: 100M
 ```
 
@@ -317,7 +317,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 10Gi
-    storageClass: "your-storage-class-name"
+    storageClassName: "your-storage-class-name"
   dataSource:
     type: ObjectRef
     objectRef:
@@ -343,11 +343,10 @@ kind: VirtualMachineBlockDeviceAttachment
 metadata:
   name: vmd-blank-attachment
 spec:
-  virtualMachine: linux-vm # Имя виртуальной машины, к которой будет подключен диск.
-  blockDevice:
-    type: VirtualDisk
-    virtualDisk:
-      name: vmd-blank # Имя подключаемого диска.
+  virtualMachineName: linux-vm # Имя виртуальной машины, к которой будет подключен диск.
+  blockDeviceRef:
+    kind: VirtualDisk
+    name: vmd-blank # Имя подключаемого диска.
 ```
 
 При удалении ресурса `VirtualMachineBlockDeviceAttachment` диск от виртуальной машины будет отключен.
diff --git a/docs/FAQ.md b/docs/FAQ.md
index da9c8ae94..334839567 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -19,7 +19,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 100Gi
-    storageClass: local-path
+    storageClassName: local-path
 ```
 
 Let's create resources with iso-images of Windows OS and virtio drivers:
@@ -80,7 +80,7 @@ spec:
 Once the resource is created, the virtual machine will be started. You need to connect to it and use the graphical wizard to add the `virtio` drivers and perform the OS installation.
 
 ```bash
-dvp vnc -n default win-vm
+d8 v vnc -n default win-vm
 ```
 
 After the installation is complete, shut down the virtual machine.
@@ -193,7 +193,7 @@ kind: Secret
 metadata:
   name: sysprep-config
 data:
-  unattend.xml: XXXx # base64 of answer file 
+  unattend.xml: XXXx # base64 of answer file
 ```
 
 Then create a virtual machine with unattended installation:
@@ -228,4 +228,4 @@ spec:
       name: win-virtio-iso
     - kind: VirtualDisk
       name: win-disk
-```
\ No newline at end of file
+```
diff --git a/docs/FAQ_RU.md b/docs/FAQ_RU.md
index 44a577e5b..57450f59f 100644
--- a/docs/FAQ_RU.md
+++ b/docs/FAQ_RU.md
@@ -19,7 +19,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 100Gi
-    storageClass: local-path
+    storageClassName: local-path
 ```
 
 2. Создайте ресурсы с ISO-образами ОС Windows и драйверами virtio:
@@ -82,7 +82,7 @@ spec:
 Команда для подключения:
 
 ```bash
-dvp vnc -n default win-vm
+d8 v vnc -n default win-vm
 ```
 
 6. После окончания установки завершите работу виртуальной машины.
@@ -103,7 +103,7 @@ spec:
 8. После внесенных изменений виртуальная машина запустится, для продолжения работы с ней используйте команду:
 
 ```bash
-dvp vnc -n default win-vm
+d8 v vnc -n default win-vm
 ```
 
 ## Как создать образ виртуальной машины для container registry
@@ -270,4 +270,4 @@ spec:
       name: win-virtio-iso
     - kind: VirtualDisk
       name: win-disk
-```
\ No newline at end of file
+```
diff --git a/docs/README.md b/docs/README.md
index 117cd506a..553035fff 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -12,6 +12,7 @@ It offers the following features:
 
 - A simple and intuitive interface for declarative creation and management of virtual machines and their resources.
 - The ability to run legacy applications that for some reason cannot or are difficult to run in a container.
+- Ability to run applications that require non-Linux operating systems.
 - Ability to run virtual machines and containerized applications in the same environment.
 - Integration with the existing Deckhouse ecosystem to leverage its capabilities for virtual machines.
 
@@ -20,16 +21,20 @@ It offers the following features:
 The following conditions are required to run the module:
 
 - A processor with x86_64 architecture and support for Intel-VT or AMD-V instructions.
+- Cluster resource requirements and configuration specifics are available for reading on [this](https://deckhouse.io/guides/production.html) page.
+- Any [compatible](https://deckhouse.io/documentation/v1/supported_versions.html#linux) Linux-based OS is supported for installation.
 - The Linux kernel on the cluster nodes must be version 5.7 or newer.
 - The [CNI Cilium](/documentation/v1/modules/021-cni-cilium/) module to provide network connectivity for virtual machines.
 - Modules [SDS-DRBD](https://deckhouse.io/modules/sds-drbd/stable/) or [CEPH-CSI](/documentation/v1/modules/031-ceph-csi/) for storing virtual machine data. It is also possible to use other storage options that support the creation of block devices with `RWX` (`ReadWriteMany`) access mode.
 
+The command line utility [d8](https://github.com/deckhouse/deckhouse-cli) is used to create cluster resources and connect to virtual machines. For users of the EE-version the ability to manage resources via UI is available.
+
 ## What do I need to enable the module?
 
 Procedure for enabling the module
 
 1. Configure the deckhouse cluster
-2. Enable the CNI Cilium module
+2. Enable the [CNI Cilium](/documentation/v1/modules/021-cni-cilium/) module
 3. Install and configure SDS-DRBD/CEPH/etc storage
 4. Enable the virtualization module
 
@@ -39,7 +44,8 @@ The module includes the following components:
 
 - The module core, based on the KubeVirt project and uses QEMU/KVM + libvirtd to run virtual machines.
 - Deckhouse Virtualization Container Registry (DVCR) - repository for storing and caching virtual machine images.
-- Virtualization-controller - API for creating and managing virtual machine resources.
+- Virtualization-controller - controller that implements a user API for creating and managing virtual machine resources.
+- Virtualization-API - API for interacting with virtual machines.
 
 The API provides capabilities for creating and managing the following resources:
 
diff --git a/docs/README_RU.md b/docs/README_RU.md
index af9964bc8..bdfbbce82 100644
--- a/docs/README_RU.md
+++ b/docs/README_RU.md
@@ -12,6 +12,7 @@ moduleStatus: experimental
 
 - Простой и интуитивно понятный интерфейс для декларативного создания и управления виртуальными машинами и их ресурсами.
 - Возможность запуска приложений, которые по каким-то причинам нельзя или сложно запустить в контейнере.
+- Возможность запуска приложений, требующих ОС отличных от Linux.
 - Возможность запуска виртуальных машин и контейнеризованных приложений в одном окружении.
 - Интеграцию с экосистемой Deckhouse, которая использует ее возможности для виртуальных машин.
 
@@ -20,16 +21,20 @@ moduleStatus: experimental
 Для запуска модуля требуются следующие условия:
 
 - Процессор с архитектурой x86_64 и поддержкой инструкций Intel-VT или AMD-V.
+- Требования к ресурсам кластера и особенности их кронфигурации доступны для ознакомления на [этой](https://deckhouse.ru/guides/production.html) странице.
+- Для установки поддерживается любая [совместимая](https://deckhouse.ru/documentation/v1/supported_versions.html#linux) ОС на базе Linux.
 - Ядро Linux на узлах кластера должно быть версии 5.7 или более новой.
 - Модуль [CNI Cilium](/documentation/v1/modules/021-cni-cilium/) для обеспечения сетевой связности виртуальных машин.
 - Модули [SDS-DRBD](https://deckhouse.ru/modules/sds-drbd/stable/) или [CEPH-CSI](/documentation/v1/modules/031-ceph-csi/) для хранения данных виртуальных машин. Также возможно использовать другие варианты хранилищ, поддерживающие создание блочных устройств с режимом доступа `RWX` (`ReadWriteMany`).
 
+Для создания ресурсов кластера, и подключения к виртуальным машинам используется утилита командной строки [d8](https://github.com/deckhouse/deckhouse-cli). Для пользователей EE-версии доступна возможность управления ресурсами через UI.
+
 ## Как включить модуль?
 
 Порядок действий для включения модуля
 
 1. Настройте кластер deckhouse.
-2. Включите модуль CNI Cilium.
+2. Включите модуль [CNI Cilium](/documentation/v1/modules/021-cni-cilium/).
 3. Установите и настроите хранилище SDS-DRBD/CEPH/etc.
 4. Включите модуль virtualization.
 
@@ -39,7 +44,8 @@ moduleStatus: experimental
 
 - Ядро модуля, основанное на проекте KubeVirt и использующее QEMU/KVM + libvirtd для запуска виртуальных машин.
 - Deckhouse Virtualization Container Registry (DVCR) — репозиторий для хранения и кэширования образов виртуальных машин.
-- Virtualization-controller — API для создания и управления ресурсами виртуальных машин.
+- Virtualization-controller — контроллер, реализующий API пользователя для создания и управления ресурсами виртуальных машин.
+- Virtualization-API - API для взаимодействия с виртуальными машинами.
 
 API предоставляет возможности для создания и управления следующими ресурсами:
 

From d456f3eb3fb4d2d4e66f234fc80c1e0e6a3fcd58 Mon Sep 17 00:00:00 2001
From: Pavel Tishkov <pavel.tishkov@flant.com>
Date: Thu, 16 May 2024 09:45:56 +0300
Subject: [PATCH 03/13] refactor(crd): fix lint

Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 crds/doc-ru-virtualmachinecpumodel.yaml | 96 ++++++++++++-------------
 1 file changed, 48 insertions(+), 48 deletions(-)

diff --git a/crds/doc-ru-virtualmachinecpumodel.yaml b/crds/doc-ru-virtualmachinecpumodel.yaml
index 2e1ba5f3c..3e68e43df 100644
--- a/crds/doc-ru-virtualmachinecpumodel.yaml
+++ b/crds/doc-ru-virtualmachinecpumodel.yaml
@@ -1,50 +1,50 @@
 spec:
   versions:
-  - name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        description: |
-          Неизменяемый ресурс описывает модель процессора для использования в ВМ. Ресурс не может быть удален, пока он используется в одной из ВМ.
-        properties:
-          spec:
-            properties:
-              features:
-                description: |
-                  Необходимые инструкции для процессора в виде списка Дополнительную информацию о поддерживаемых инструкциях можно найти [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
-                items: {}
-              model:
-                description: |
-                  Название модели процессора. Дополнительная информация о моделях [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
-              type:
-                description: |
-                  В качестве типа ресурса, поддерживаются следующие варианты:
-                  * Host - использовать физический процессор хоста.
-                  * Модель - модель процессора. Модель процессора - это именованный и предварительно определенный набор поддерживаемых инструкций процессора.
-                  * Features - необходимый набор поддерживаемых инструкций для процессора.
-          status:
-            properties:
-              features:
-                description: |
-                  Информация о поддерживаемых наборах инструкций процессора для данной модели.
-                  Отображается только для `type=Features`.
-                properties:
-                  enabled:
-                    description: |
-                      Список наборов инструкций процессора для данной модели.
-                    items: {}
-                  notEnabledCommon:
-                    description: |
-                      Список неиспользуемых инструкций процессора, дополнительно доступных для данной группы узлов.
-                    items: {}
-              nodes:
-                description: |
-                  Список узлов, поддерживающих данную модель процессора.
-                  Не отображается для `type=Host`.
-                items: {}
-              phase:
-                description: |
-                  Текущий статус ресурса `VirtualMachineCPUModel`:
-                  * Pending - ресурс находится в очереди на обработку.
-                  * InProgress - ресурс находится в процессе создания.
-                  * Ready - ресурс успешно создан.
-                  * Failed - в процессе создания ресурса произошла ошибка.
+    - name: v1alpha2
+      schema:
+        openAPIV3Schema:
+          description: |
+            Неизменяемый ресурс описывает модель процессора для использования в ВМ. Ресурс не может быть удален, пока он используется в одной из ВМ.
+          properties:
+            spec:
+              properties:
+                features:
+                  description: |
+                    Необходимые инструкции для процессора в виде списка Дополнительную информацию о поддерживаемых инструкциях можно найти [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
+                  items: {}
+                model:
+                  description: |
+                    Название модели процессора. Дополнительная информация о моделях [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
+                type:
+                  description: |
+                    В качестве типа ресурса, поддерживаются следующие варианты:
+                    * Host - использовать физический процессор хоста.
+                    * Модель - модель процессора. Модель процессора - это именованный и предварительно определенный набор поддерживаемых инструкций процессора.
+                    * Features - необходимый набор поддерживаемых инструкций для процессора.
+            status:
+              properties:
+                features:
+                  description: |
+                    Информация о поддерживаемых наборах инструкций процессора для данной модели.
+                    Отображается только для `type=Features`.
+                  properties:
+                    enabled:
+                      description: |
+                        Список наборов инструкций процессора для данной модели.
+                      items: {}
+                    notEnabledCommon:
+                      description: |
+                        Список неиспользуемых инструкций процессора, дополнительно доступных для данной группы узлов.
+                      items: {}
+                nodes:
+                  description: |
+                    Список узлов, поддерживающих данную модель процессора.
+                    Не отображается для `type=Host`.
+                  items: {}
+                phase:
+                  description: |
+                    Текущий статус ресурса `VirtualMachineCPUModel`:
+                    * Pending - ресурс находится в очереди на обработку.
+                    * InProgress - ресурс находится в процессе создания.
+                    * Ready - ресурс успешно создан.
+                    * Failed - в процессе создания ресурса произошла ошибка.

From b5b2bd3e647d063bfbc83d4d4eb7f348cfa83274 Mon Sep 17 00:00:00 2001
From: Pavel Tishkov <pavel.tishkov@flant.com>
Date: Thu, 16 May 2024 12:44:06 +0300
Subject: [PATCH 04/13] refactor(crd): rename storageClass param

Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 docs/EXAMPLES.md                                              | 2 +-
 docs/EXAMPLES_RU.md                                           | 2 +-
 hack/upload-pvc.sh                                            | 4 ++--
 .../config/samples/linux_vm_from_cloudimage_disk.yaml         | 2 +-
 .../config/samples/linux_vm_from_cloudimage_image.yaml        | 2 +-
 .../config/samples/linux_vm_from_iso_image.yaml               | 2 +-
 .../config/samples/virtual_machine_disk.yaml                  | 2 +-
 images/virtualization-artifact/config/samples/vmd_blank.yaml  | 2 +-
 .../config/samples/vmd_http_auto_sized.yaml                   | 2 +-
 .../config/samples/vmd_http_sized.yaml                        | 2 +-
 .../config/samples/vmd_upload_auto_sized.yaml                 | 2 +-
 .../config/samples/vmd_upload_sized.yaml                      | 2 +-
 .../config/samples/vmi_ubuntu_2_phase.yaml                    | 2 +-
 .../config/samples/vmi_ubuntu_datavolume.yaml                 | 2 +-
 .../config/samples/vmi_upload_datavolume.yaml                 | 2 +-
 .../config/samples/vmi_upload_registry.yaml                   | 2 +-
 .../config/samples/win_vm_from_iso_image.yaml                 | 2 +-
 images/virtualization-artifact/config/vm_sysprep.yaml         | 2 +-
 tests/performance/templates/vmds.yaml                         | 2 +-
 tests/performance/values.yaml                                 | 2 +-
 20 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/docs/EXAMPLES.md b/docs/EXAMPLES.md
index 8823f996c..c45ade14a 100644
--- a/docs/EXAMPLES.md
+++ b/docs/EXAMPLES.md
@@ -23,7 +23,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 10Gi
-    storageClass: local-path
+    storageClassName: local-path
   dataSource:
     type: HTTP
     http:
diff --git a/docs/EXAMPLES_RU.md b/docs/EXAMPLES_RU.md
index 11f88bbdd..a2128f951 100644
--- a/docs/EXAMPLES_RU.md
+++ b/docs/EXAMPLES_RU.md
@@ -23,7 +23,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 10Gi
-    storageClass: local-path
+    storageClassName: local-path
   dataSource:
     type: HTTP
     http:
diff --git a/hack/upload-pvc.sh b/hack/upload-pvc.sh
index 2d47c88dc..f8fe21aab 100644
--- a/hack/upload-pvc.sh
+++ b/hack/upload-pvc.sh
@@ -32,7 +32,7 @@ metadata:
 spec:
   storage: Kubernetes
   persistentVolumeClaim:
-    storageClass: linstor-thick-data-r3
+    storageClassName: linstor-thick-data-r3
   dataSource:
     type: Upload
 EOF
@@ -48,4 +48,4 @@ done
 
 uploadCmd=$(echo "$uploadCmd ${FILE}" | sed "s/example.iso//")
 echo $uploadCmd
-eval "${uploadCmd}"
\ No newline at end of file
+eval "${uploadCmd}"
diff --git a/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_disk.yaml b/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_disk.yaml
index c2cdb823f..152f21c6d 100644
--- a/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_disk.yaml
+++ b/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_disk.yaml
@@ -5,7 +5,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 10Gi
-    storageClass: local-path
+    storageClassName: local-path
   dataSource:
     type: HTTP
     http:
diff --git a/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_image.yaml b/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_image.yaml
index 21252e82a..4eb0e51c3 100644
--- a/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_image.yaml
+++ b/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_image.yaml
@@ -20,7 +20,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 10Gi
-    storageClass: local-path
+    storageClassName: local-path
   dataSource:
     type: ClusterVirtualImage
     clusterVirtualImage:
diff --git a/images/virtualization-artifact/config/samples/linux_vm_from_iso_image.yaml b/images/virtualization-artifact/config/samples/linux_vm_from_iso_image.yaml
index 0fd8fdc48..98cec85a8 100644
--- a/images/virtualization-artifact/config/samples/linux_vm_from_iso_image.yaml
+++ b/images/virtualization-artifact/config/samples/linux_vm_from_iso_image.yaml
@@ -17,7 +17,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 10Gi
-    storageClass: linstor-thin-data-r1
+    storageClassName: linstor-thin-data-r1
 ---
 apiVersion: virtualization.deckhouse.io/v1alpha2
 kind: VirtualMachine
diff --git a/images/virtualization-artifact/config/samples/virtual_machine_disk.yaml b/images/virtualization-artifact/config/samples/virtual_machine_disk.yaml
index 19a8d4f65..be894207f 100644
--- a/images/virtualization-artifact/config/samples/virtual_machine_disk.yaml
+++ b/images/virtualization-artifact/config/samples/virtual_machine_disk.yaml
@@ -5,7 +5,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 10Gi
-    storageClass: local-path
+    storageClassName: local-path
   dataSource:
     type: "HTTP"
     http:
diff --git a/images/virtualization-artifact/config/samples/vmd_blank.yaml b/images/virtualization-artifact/config/samples/vmd_blank.yaml
index 9ce3d376d..af6da7b5a 100644
--- a/images/virtualization-artifact/config/samples/vmd_blank.yaml
+++ b/images/virtualization-artifact/config/samples/vmd_blank.yaml
@@ -4,5 +4,5 @@ metadata:
   name: vmd-blank
 spec:
   persistentVolumeClaim:
-    storageClass: "local-path"
+    storageClassName: "local-path"
     size: "80M"
diff --git a/images/virtualization-artifact/config/samples/vmd_http_auto_sized.yaml b/images/virtualization-artifact/config/samples/vmd_http_auto_sized.yaml
index db6a6a984..536bd163e 100644
--- a/images/virtualization-artifact/config/samples/vmd_http_auto_sized.yaml
+++ b/images/virtualization-artifact/config/samples/vmd_http_auto_sized.yaml
@@ -4,7 +4,7 @@ metadata:
   name: debian-iso
 spec:
   persistentVolumeClaim:
-    storageClass: "local-path"
+    storageClassName: "local-path"
   dataSource:
     type: "HTTP"
     http:
diff --git a/images/virtualization-artifact/config/samples/vmd_http_sized.yaml b/images/virtualization-artifact/config/samples/vmd_http_sized.yaml
index 5f86dbf87..a599c2f69 100644
--- a/images/virtualization-artifact/config/samples/vmd_http_sized.yaml
+++ b/images/virtualization-artifact/config/samples/vmd_http_sized.yaml
@@ -4,7 +4,7 @@ metadata:
   name: debian-iso
 spec:
   persistentVolumeClaim:
-    storageClass: "local-path"
+    storageClassName: "local-path"
     size: "80Mi"
   dataSource:
     type: "HTTP"
diff --git a/images/virtualization-artifact/config/samples/vmd_upload_auto_sized.yaml b/images/virtualization-artifact/config/samples/vmd_upload_auto_sized.yaml
index d4fd397fe..4ce8cf4bc 100644
--- a/images/virtualization-artifact/config/samples/vmd_upload_auto_sized.yaml
+++ b/images/virtualization-artifact/config/samples/vmd_upload_auto_sized.yaml
@@ -4,6 +4,6 @@ metadata:
   name: vmd-upload-auto-sized
 spec:
   persistentVolumeClaim:
-    storageClass: "local-path"
+    storageClassName: "local-path"
   dataSource:
     type: "Upload"
diff --git a/images/virtualization-artifact/config/samples/vmd_upload_sized.yaml b/images/virtualization-artifact/config/samples/vmd_upload_sized.yaml
index 331df4dc1..3886fddeb 100644
--- a/images/virtualization-artifact/config/samples/vmd_upload_sized.yaml
+++ b/images/virtualization-artifact/config/samples/vmd_upload_sized.yaml
@@ -4,7 +4,7 @@ metadata:
   name: vmd-upload-sized
 spec:
   persistentVolumeClaim:
-    storageClass: "local-path"
+    storageClassName: "local-path"
     size: "80Mi"
   dataSource:
     type: "Upload"
diff --git a/images/virtualization-artifact/config/samples/vmi_ubuntu_2_phase.yaml b/images/virtualization-artifact/config/samples/vmi_ubuntu_2_phase.yaml
index ac6f7aa9d..4824a6067 100644
--- a/images/virtualization-artifact/config/samples/vmi_ubuntu_2_phase.yaml
+++ b/images/virtualization-artifact/config/samples/vmi_ubuntu_2_phase.yaml
@@ -8,7 +8,7 @@ spec:
   # 2. Import from Registry into PVC.
   storage: Kubernetes
   persistentVolumeClaim:
-    storageClass: "local-path"
+    storageClassName: "local-path"
   dataSource:
     type: "HTTP"
     http:
diff --git a/images/virtualization-artifact/config/samples/vmi_ubuntu_datavolume.yaml b/images/virtualization-artifact/config/samples/vmi_ubuntu_datavolume.yaml
index 09acab807..cb4fd6931 100644
--- a/images/virtualization-artifact/config/samples/vmi_ubuntu_datavolume.yaml
+++ b/images/virtualization-artifact/config/samples/vmi_ubuntu_datavolume.yaml
@@ -5,7 +5,7 @@ metadata:
 spec:
   storage: Kubernetes
   persistentVolumeClaim:
-    storageClass: "local-path"
+    storageClassName: "local-path"
   dataSource:
     type: "ContainerImage"
     containerImage:
diff --git a/images/virtualization-artifact/config/samples/vmi_upload_datavolume.yaml b/images/virtualization-artifact/config/samples/vmi_upload_datavolume.yaml
index 8797358a3..ddbb70a6f 100644
--- a/images/virtualization-artifact/config/samples/vmi_upload_datavolume.yaml
+++ b/images/virtualization-artifact/config/samples/vmi_upload_datavolume.yaml
@@ -5,6 +5,6 @@ metadata:
 spec:
   storage: Kubernetes
   persistentVolumeClaim:
-    storageClass: "local-path"
+    storageClassName: "local-path"
   dataSource:
     type: "Upload"
diff --git a/images/virtualization-artifact/config/samples/vmi_upload_registry.yaml b/images/virtualization-artifact/config/samples/vmi_upload_registry.yaml
index 27f152dc1..b1fd6a6ce 100644
--- a/images/virtualization-artifact/config/samples/vmi_upload_registry.yaml
+++ b/images/virtualization-artifact/config/samples/vmi_upload_registry.yaml
@@ -5,6 +5,6 @@ metadata:
 spec:
   storage: ContainerRegistry
   persistentVolumeClaim:
-    storageClass: "local-path"
+    storageClassName: "local-path"
   dataSource:
     type: "Upload"
diff --git a/images/virtualization-artifact/config/samples/win_vm_from_iso_image.yaml b/images/virtualization-artifact/config/samples/win_vm_from_iso_image.yaml
index 91c88f3d2..d0ddbc21c 100644
--- a/images/virtualization-artifact/config/samples/win_vm_from_iso_image.yaml
+++ b/images/virtualization-artifact/config/samples/win_vm_from_iso_image.yaml
@@ -29,7 +29,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 100Gi
-    storageClass: local-path
+    storageClassName: local-path
 ---
 apiVersion: virtualization.deckhouse.io/v1alpha2
 kind: VirtualMachine
diff --git a/images/virtualization-artifact/config/vm_sysprep.yaml b/images/virtualization-artifact/config/vm_sysprep.yaml
index 0a11a46fb..a2e0bfc15 100644
--- a/images/virtualization-artifact/config/vm_sysprep.yaml
+++ b/images/virtualization-artifact/config/vm_sysprep.yaml
@@ -35,7 +35,7 @@ metadata:
 spec:
   persistentVolumeClaim:
     size: 50Gi
-    storageClass: linstor-test-data-r1
+    storageClassName: linstor-test-data-r1
 ---
 apiVersion: virtualization.deckhouse.io/v1alpha2
 kind: VirtualMachine
diff --git a/tests/performance/templates/vmds.yaml b/tests/performance/templates/vmds.yaml
index 6221df21b..8d466050f 100644
--- a/tests/performance/templates/vmds.yaml
+++ b/tests/performance/templates/vmds.yaml
@@ -26,7 +26,7 @@ spec:
   persistentVolumeClaim:
     size: {{ $.Values.diskSize }}
     {{- if $.Values.storageClass }}
-    storageClass: {{ $.Values.storageClass }}
+    storageClassName: {{ $.Values.storageClass }}
     {{- end }}
   dataSource:
     type: "ObjectRef"
diff --git a/tests/performance/values.yaml b/tests/performance/values.yaml
index 981a3e7f2..cf8429f83 100644
--- a/tests/performance/values.yaml
+++ b/tests/performance/values.yaml
@@ -9,5 +9,5 @@ spec:
 resources: "all"
 resourcesPrefix: "performance"
 diskSize: 3Gi
-storageClass: ""
+storageClassName: ""
 imageURL: "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"

From 1c859f660792bfd37bf4527791309f71f218082e Mon Sep 17 00:00:00 2001
From: Pavel Tishkov <pavel.tishkov@flant.com>
Date: Thu, 16 May 2024 12:46:33 +0300
Subject: [PATCH 05/13] refactor(crd): rename virtualMachine param

Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 docs/EXAMPLES.md                                         | 4 ++--
 docs/EXAMPLES_RU.md                                      | 2 +-
 images/virtualization-artifact/config/samples/vmbda.yaml | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/docs/EXAMPLES.md b/docs/EXAMPLES.md
index c45ade14a..ca5ddf98e 100644
--- a/docs/EXAMPLES.md
+++ b/docs/EXAMPLES.md
@@ -336,7 +336,7 @@ kind: VirtualMachineBlockDeviceAttachment
 metadata:
   name: vmd-blank-attachment
 spec:
-  virtualMachine: linux-vm # Name of the virtual machine to attach disk to.
+  virtualMachineName: linux-vm # Name of the virtual machine to attach disk to.
   blockDevice:
     type: ObjectRef
     objectRef:
@@ -528,7 +528,7 @@ kind: VirtualMachineOperation
 metadata:
   name: restart
 spec:
-  virtualMachine: linux-vm
+  virtualMachineName: linux-vm
   type: Restart
 EOF
 ```
diff --git a/docs/EXAMPLES_RU.md b/docs/EXAMPLES_RU.md
index a2128f951..90f52266b 100644
--- a/docs/EXAMPLES_RU.md
+++ b/docs/EXAMPLES_RU.md
@@ -526,7 +526,7 @@ kind: VirtualMachineOperation
 metadata:
   name: restart-linux-vm
 spec:
-  virtualMachine: linux-vm
+  virtualMachineName: linux-vm
   type: Restart
 EOF
 ```
diff --git a/images/virtualization-artifact/config/samples/vmbda.yaml b/images/virtualization-artifact/config/samples/vmbda.yaml
index 8fac78e90..6d3d6233d 100644
--- a/images/virtualization-artifact/config/samples/vmbda.yaml
+++ b/images/virtualization-artifact/config/samples/vmbda.yaml
@@ -3,7 +3,7 @@ kind: VirtualMachineBlockDeviceAttachment
 metadata:
   name: vmd-blank-attachment
 spec:
-  virtualMachine: linux-vm
+  virtualMachineName: linux-vm
   blockDevice:
     type: VirtualDisk
     virtualDisk:

From efe69090e88a1a9dc7e5168d74a37f37274a322c Mon Sep 17 00:00:00 2001
From: Isteb4k <dmitry.rakitin@flant.com>
Date: Thu, 16 May 2024 21:19:31 +0700
Subject: [PATCH 06/13] feat(api): rename resource references

Signed-off-by: Isteb4k <dmitry.rakitin@flant.com>
Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 api/core/v1alpha2/virtual_disk.go             |  4 +--
 api/core/v1alpha2/virtual_machine.go          |  8 ++---
 .../virtual_machine_block_disk_attachment.go  |  2 +-
 .../virtual_machine_ip_address_claim.go       |  6 ++--
 .../v1alpha2/virtual_machine_operation.go     |  2 +-
 .../generated/openapi/zz_generated.openapi.go | 34 +++++++++----------
 crds/doc-ru-virtualdisk.yaml                  |  2 +-
 crds/virtualdisk.yaml                         |  2 +-
 8 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/api/core/v1alpha2/virtual_disk.go b/api/core/v1alpha2/virtual_disk.go
index 9431acecb..70ce60d27 100644
--- a/api/core/v1alpha2/virtual_disk.go
+++ b/api/core/v1alpha2/virtual_disk.go
@@ -64,11 +64,11 @@ type VirtualDiskDownloadSpeed struct {
 }
 
 type DiskTarget struct {
-	PersistentVolumeClaim string `json:"persistentVolumeClaim"`
+	PersistentVolumeClaim string `json:"persistentVolumeClaimName"`
 }
 
 type VirtualDiskPersistentVolumeClaim struct {
-	StorageClass *string            `json:"storageClass,omitempty"`
+	StorageClass *string            `json:"storageClassName,omitempty"`
 	Size         *resource.Quantity `json:"size,omitempty"`
 }
 
diff --git a/api/core/v1alpha2/virtual_machine.go b/api/core/v1alpha2/virtual_machine.go
index 106966f76..f5a65ff94 100644
--- a/api/core/v1alpha2/virtual_machine.go
+++ b/api/core/v1alpha2/virtual_machine.go
@@ -29,7 +29,7 @@ type VirtualMachineSpec struct {
 
 	// VirtualMachineIPAddressClaim specifies a name for the associated
 	// `VirtualMachineIPAddressClaim` resource. Defaults to `{vm name}`.
-	VirtualMachineIPAddressClaim string `json:"virtualMachineIPAddressClaim,omitempty"`
+	VirtualMachineIPAddressClaim string `json:"virtualMachineIPAddressClaimName,omitempty"`
 
 	// TopologySpreadConstraints specifies how to spread matching pods among the given topology.
 	TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"`
@@ -91,7 +91,7 @@ const (
 )
 
 type CPUSpec struct {
-	VirtualMachineCPUModel string `json:"virtualMachineCPUModel"`
+	VirtualMachineCPUModel string `json:"virtualMachineCPUModelName"`
 	Cores                  int    `json:"cores"`
 	CoreFraction           string `json:"coreFraction"`
 }
@@ -143,8 +143,8 @@ const (
 
 type VirtualMachineStatus struct {
 	Phase                        MachinePhase                             `json:"phase"`
-	Node                         string                                   `json:"node"`
-	VirtualMachineIPAddressClaim string                                   `json:"virtualMachineIPAddressClaim"`
+	Node                         string                                   `json:"nodeName"`
+	VirtualMachineIPAddressClaim string                                   `json:"virtualMachineIPAddressClaimName"`
 	IPAddress                    string                                   `json:"ipAddress"`
 	BlockDeviceRefs              []BlockDeviceStatusRef                   `json:"blockDeviceRefs"`
 	GuestOSInfo                  virtv1.VirtualMachineInstanceGuestOSInfo `json:"guestOSInfo"`
diff --git a/api/core/v1alpha2/virtual_machine_block_disk_attachment.go b/api/core/v1alpha2/virtual_machine_block_disk_attachment.go
index 9adc6c861..d72d54607 100644
--- a/api/core/v1alpha2/virtual_machine_block_disk_attachment.go
+++ b/api/core/v1alpha2/virtual_machine_block_disk_attachment.go
@@ -29,7 +29,7 @@ type VirtualMachineBlockDeviceAttachmentList struct {
 }
 
 type VirtualMachineBlockDeviceAttachmentSpec struct {
-	VirtualMachine string         `json:"virtualMachine"`
+	VirtualMachine string         `json:"virtualMachineName"`
 	BlockDeviceRef VMBDAObjectRef `json:"blockDeviceRef"`
 }
 
diff --git a/api/core/v1alpha2/virtual_machine_ip_address_claim.go b/api/core/v1alpha2/virtual_machine_ip_address_claim.go
index be9a31f80..de15f876e 100644
--- a/api/core/v1alpha2/virtual_machine_ip_address_claim.go
+++ b/api/core/v1alpha2/virtual_machine_ip_address_claim.go
@@ -26,7 +26,7 @@ type VirtualMachineIPAddressClaimList struct {
 // VirtualMachineIPAddressClaimSpec is the desired state of `VirtualMachineIPAddressClaim`.
 type VirtualMachineIPAddressClaimSpec struct {
 	// The issued `VirtualMachineIPAddressLease`, managed automatically.
-	VirtualMachineIPAddressLease string `json:"virtualMachineIPAddressLease"`
+	VirtualMachineIPAddressLease string `json:"virtualMachineIPAddressLeaseName"`
 	// The requested IP address. If omitted the next available IP address will be assigned.
 	Address string `json:"address"`
 	// Determines the behavior of VirtualMachineIPAddressLease upon VirtualMachineIPAddressClaim deletion.
@@ -36,11 +36,11 @@ type VirtualMachineIPAddressClaimSpec struct {
 // VirtualMachineIPAddressClaimStatus is the observed state of `VirtualMachineIPAddressClaim`.
 type VirtualMachineIPAddressClaimStatus struct {
 	// Represents the virtual machine that currently uses this IP address.
-	VirtualMachine string `json:"virtualMachine,omitempty"`
+	VirtualMachine string `json:"virtualMachineName,omitempty"`
 	// Assigned IP address.
 	Address string `json:"address,omitempty"`
 	// The issued `VirtualMachineIPAddressLease`, managed automatically.
-	Lease string `json:"virtualMachineIPAddressLease,omitempty"`
+	Lease string `json:"virtualMachineIPAddressLeaseName,omitempty"`
 	// Represents the current state of IP address claim.
 	Phase VirtualMachineIPAddressClaimPhase `json:"phase,omitempty"`
 	// Detailed description of the error.
diff --git a/api/core/v1alpha2/virtual_machine_operation.go b/api/core/v1alpha2/virtual_machine_operation.go
index 677133dae..248ba1689 100644
--- a/api/core/v1alpha2/virtual_machine_operation.go
+++ b/api/core/v1alpha2/virtual_machine_operation.go
@@ -20,7 +20,7 @@ type VirtualMachineOperation struct {
 
 type VirtualMachineOperationSpec struct {
 	Type           VMOPOperation `json:"type"`
-	VirtualMachine string        `json:"virtualMachine"`
+	VirtualMachine string        `json:"virtualMachineName"`
 	Force          bool          `json:"force,omitempty"`
 }
 
diff --git a/api/pkg/apiserver/api/generated/openapi/zz_generated.openapi.go b/api/pkg/apiserver/api/generated/openapi/zz_generated.openapi.go
index 225416945..0dd7fa98b 100644
--- a/api/pkg/apiserver/api/generated/openapi/zz_generated.openapi.go
+++ b/api/pkg/apiserver/api/generated/openapi/zz_generated.openapi.go
@@ -707,7 +707,7 @@ func schema_virtualization_api_core_v1alpha2_CPUSpec(ref common.ReferenceCallbac
 			SchemaProps: spec.SchemaProps{
 				Type: []string{"object"},
 				Properties: map[string]spec.Schema{
-					"virtualMachineCPUModel": {
+					"virtualMachineCPUModelName": {
 						SchemaProps: spec.SchemaProps{
 							Default: "",
 							Type:    []string{"string"},
@@ -729,7 +729,7 @@ func schema_virtualization_api_core_v1alpha2_CPUSpec(ref common.ReferenceCallbac
 						},
 					},
 				},
-				Required: []string{"virtualMachineCPUModel", "cores", "coreFraction"},
+				Required: []string{"virtualMachineCPUModelName", "cores", "coreFraction"},
 			},
 		},
 	}
@@ -1103,7 +1103,7 @@ func schema_virtualization_api_core_v1alpha2_DiskTarget(ref common.ReferenceCall
 			SchemaProps: spec.SchemaProps{
 				Type: []string{"object"},
 				Properties: map[string]spec.Schema{
-					"persistentVolumeClaim": {
+					"persistentVolumeClaimName": {
 						SchemaProps: spec.SchemaProps{
 							Default: "",
 							Type:    []string{"string"},
@@ -1111,7 +1111,7 @@ func schema_virtualization_api_core_v1alpha2_DiskTarget(ref common.ReferenceCall
 						},
 					},
 				},
-				Required: []string{"persistentVolumeClaim"},
+				Required: []string{"persistentVolumeClaimName"},
 			},
 		},
 	}
@@ -1719,7 +1719,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualDiskPersistentVolumeClaim(re
 			SchemaProps: spec.SchemaProps{
 				Type: []string{"object"},
 				Properties: map[string]spec.Schema{
-					"storageClass": {
+					"storageClassName": {
 						SchemaProps: spec.SchemaProps{
 							Type:   []string{"string"},
 							Format: "",
@@ -2432,7 +2432,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineBlockDeviceAttachment
 			SchemaProps: spec.SchemaProps{
 				Type: []string{"object"},
 				Properties: map[string]spec.Schema{
-					"virtualMachine": {
+					"virtualMachineName": {
 						SchemaProps: spec.SchemaProps{
 							Default: "",
 							Type:    []string{"string"},
@@ -2446,7 +2446,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineBlockDeviceAttachment
 						},
 					},
 				},
-				Required: []string{"virtualMachine", "blockDeviceRef"},
+				Required: []string{"virtualMachineName", "blockDeviceRef"},
 			},
 		},
 		Dependencies: []string{
@@ -2814,7 +2814,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineIPAddressClaimSpec(re
 				Description: "VirtualMachineIPAddressClaimSpec is the desired state of `VirtualMachineIPAddressClaim`.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
-					"virtualMachineIPAddressLease": {
+					"virtualMachineIPAddressLeaseName": {
 						SchemaProps: spec.SchemaProps{
 							Description: "The issued `VirtualMachineIPAddressLease`, managed automatically.",
 							Default:     "",
@@ -2838,7 +2838,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineIPAddressClaimSpec(re
 						},
 					},
 				},
-				Required: []string{"virtualMachineIPAddressLease", "address"},
+				Required: []string{"virtualMachineIPAddressLeaseName", "address"},
 			},
 		},
 	}
@@ -2851,7 +2851,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineIPAddressClaimStatus(
 				Description: "VirtualMachineIPAddressClaimStatus is the observed state of `VirtualMachineIPAddressClaim`.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
-					"virtualMachine": {
+					"virtualMachineName": {
 						SchemaProps: spec.SchemaProps{
 							Description: "Represents the virtual machine that currently uses this IP address.",
 							Type:        []string{"string"},
@@ -2865,7 +2865,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineIPAddressClaimStatus(
 							Format:      "",
 						},
 					},
-					"virtualMachineIPAddressLease": {
+					"virtualMachineIPAddressLeaseName": {
 						SchemaProps: spec.SchemaProps{
 							Description: "The issued `VirtualMachineIPAddressLease`, managed automatically.",
 							Type:        []string{"string"},
@@ -3224,7 +3224,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineOperationSpec(ref com
 							Format:  "",
 						},
 					},
-					"virtualMachine": {
+					"virtualMachineName": {
 						SchemaProps: spec.SchemaProps{
 							Default: "",
 							Type:    []string{"string"},
@@ -3238,7 +3238,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineOperationSpec(ref com
 						},
 					},
 				},
-				Required: []string{"type", "virtualMachine"},
+				Required: []string{"type", "virtualMachineName"},
 			},
 		},
 	}
@@ -3290,7 +3290,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineSpec(ref common.Refer
 							Format:      "",
 						},
 					},
-					"virtualMachineIPAddressClaim": {
+					"virtualMachineIPAddressClaimName": {
 						SchemaProps: spec.SchemaProps{
 							Description: "VirtualMachineIPAddressClaim specifies a name for the associated `VirtualMachineIPAddressClaim` resource. Defaults to `{vm name}`.",
 							Type:        []string{"string"},
@@ -3440,14 +3440,14 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineStatus(ref common.Ref
 							Format:  "",
 						},
 					},
-					"node": {
+					"nodeName": {
 						SchemaProps: spec.SchemaProps{
 							Default: "",
 							Type:    []string{"string"},
 							Format:  "",
 						},
 					},
-					"virtualMachineIPAddressClaim": {
+					"virtualMachineIPAddressClaimName": {
 						SchemaProps: spec.SchemaProps{
 							Default: "",
 							Type:    []string{"string"},
@@ -3501,7 +3501,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineStatus(ref common.Ref
 						},
 					},
 				},
-				Required: []string{"phase", "node", "virtualMachineIPAddressClaim", "ipAddress", "blockDeviceRefs", "guestOSInfo", "message"},
+				Required: []string{"phase", "nodeName", "virtualMachineIPAddressClaimName", "ipAddress", "blockDeviceRefs", "guestOSInfo", "message"},
 			},
 		},
 		Dependencies: []string{
diff --git a/crds/doc-ru-virtualdisk.yaml b/crds/doc-ru-virtualdisk.yaml
index 8f5fb7336..1daf4c764 100644
--- a/crds/doc-ru-virtualdisk.yaml
+++ b/crds/doc-ru-virtualdisk.yaml
@@ -118,7 +118,7 @@ spec:
                     Емкость PVC в человекочитаемом формате.
                 target:
                   properties:
-                    persistentVolumeClaim:
+                    persistentVolumeClaimName:
                       description: |
                         Имя созданного PersistentVolumeClaim для хранилища Kubernetes.
                 phase:
diff --git a/crds/virtualdisk.yaml b/crds/virtualdisk.yaml
index 27ce60f70..e740f9d0d 100644
--- a/crds/virtualdisk.yaml
+++ b/crds/virtualdisk.yaml
@@ -228,7 +228,7 @@ spec:
                 target:
                   type: object
                   properties:
-                    persistentVolumeClaim:
+                    persistentVolumeClaimName:
                       type: string
                       description: |
                         Created PersistentVolumeClaim name for Kubernetes storage.

From 93456c97edeb40417c8c28ad78b748ced2119f00 Mon Sep 17 00:00:00 2001
From: Pavel Tishkov <pavel.tishkov@flant.com>
Date: Sat, 18 May 2024 08:48:45 +0300
Subject: [PATCH 07/13] docs(vm): update

Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 crds/doc-ru-virtualmachine.yaml | 57 ++++++++++++++++++++-------------
 1 file changed, 35 insertions(+), 22 deletions(-)

diff --git a/crds/doc-ru-virtualmachine.yaml b/crds/doc-ru-virtualmachine.yaml
index 001809dba..623ecc22c 100644
--- a/crds/doc-ru-virtualmachine.yaml
+++ b/crds/doc-ru-virtualmachine.yaml
@@ -4,29 +4,34 @@ spec:
       schema:
         openAPIV3Schema:
           description: |
-            Данный ресурс позволяет управлять конфигурацией виртуальной машины.
+            Конфигурация виртуальной машины (ВМ).
           properties:
             spec:
               properties:
                 provisioning:
                   description: |
-                    Этот блок позволяет настроить сценарий инициализации для ВМ.
+                    Блок описания сценария начальной инициализации ВМ.
                   properties:
                     type:
                       description: |
                         Поддерживаемые параметры для использования сценария инициализации:
 
-                        * UserData — позволяет указать сценарий cloud-init в секции .spec.provisioning.UserData.
-                        * UserDataRef — позволяет использовать существующий Secret со сценарием cloud-init.
-                        * SysprepRef — позволяет автоматизировать установку Windows.
+                        * UserData — использовать сценарий cloud-init в секции .spec.provisioning.UserData.
+                        * UserDataRef — использовать сценарий cloud-init, который находится в другом ресурсе.
+                        * SysprepRef — использовать сценарий автоматизации установки Windows, который находится в другом ресурсе.
 
-                        Дополнительная информация: https://cloudinit.readthedocs.io/en/latest/reference/examples.html
                     userData:
                       description: |
-                        Сценарий cloud-init.
+                        Текст сценария cloud-init.
+
+                        Дополнительная информация: https://cloudinit.readthedocs.io/en/latest/reference/examples.html
                     userDataRef:
                       description: |
                         Ссылка на существующий ресурс со сценарием cloud-init.
+
+                        Структура ресурса для типа userDataRef:
+
+                        * `.data.userData`
                       properties:
                         kind:
                           description: |
@@ -37,6 +42,11 @@ spec:
                     sysprepRef:
                       description: |
                         Ссылка на существующий ресурс со сценарием автоматизации Windows.
+
+                        Структура ресурса для типа SysprepRef:
+
+                        * `.data.autounattend.xml`
+                        * `.data.unattend.xml`
                       properties:
                         kind:
                           description: |
@@ -55,9 +65,11 @@ spec:
 
                 virtualMachineIPAddressClaimName:
                   description: |
-                    Имя для связанного ресурса `virtualMachineIPAddressClaimName`.
+                    Имя для связанного ресурса `virtualMachineIPAddressClaim`.
+
+                    Указывается при необходимости использования ранее созданного IP-адреса ВМ.
 
-                    Если не указано, по умолчанию используется `.metadata.name`.
+                    Если не указано явно, по умолчанию для ВМ создается ресурс `virtualMachineIPAddressClaim` с именем аналогичным ресурсу ВМ (`.metadata.name`).
 
                 topologySpreadConstraints:
                   description: |
@@ -453,17 +465,16 @@ spec:
 
                 disruptions:
                   description: |
-                    Политика применения изменений, требующих перезагрузки ВМ.
-
-                    Некоторые настройки ВМ требуют перезагрузки ВМ при изменении конфигурации. Для перезагрузки необходимо одобрить изменения. Для этого используется параметр `approvalMode`.
+                    Описании политики применения изменений, требующих перезагрузки ВМ.
 
+                    Изменение некоторых параметров конфигурации ВМ требуют перезагрузки ВМ для их применения. Данная политика позволяет задать поведения, как ВМ будет реагировать на такие изменения.
                   properties:
                     restartApprovalMode:
                       description: |
                         Режим одобрения для изменений, требующих перезагрузки ВМ:
 
-                        - `Manual` — чтобы утвердить изменения, необходимо сделать это вручную, скопировав идентификатор изменения из `.status.changeID` в `.spec.approvedChangeID`.
-                        - `Автоматический` — автоматическое утверждение обновлений.
+                        - `Manual` — изменения не будут применены, до тех пока пользователь самостоятельно не осуществит перезагрузку ВМ.
+                        - `Автоматический` — ВМ будет перезагружена, сразу, после сохранения параметров, требующих перезагрузки ВМ.
 
                 terminationGracePeriodSeconds:
                   description: |
@@ -471,37 +482,39 @@ spec:
 
                 enableParavirtualization:
                   description: |
-                    Использовать шину `virtio` для подключения дисковых устройств. Установите значение false, чтобы отключить `virtio` для этой ВМ.
+                    Использовать шину `virtio` для подключения виртуальных устройств ВМ. Установите значение false, чтобы отключить `virtio` для этой ВМ.
+
+                    Внимание: Для использования режима паравиртуализации некоторые ОС требуют установки соответствующих драйверов.
+
 
                 osType:
                   description: |
-                    Для выбранного типа ОС определяет набор устройств и другие параметры, необходимые для корректной работы, которые будут применяться к ВМ:
+                    Параметр позволяет выбрать тип используемой ОС, для которой будет создана ВМ с оптимальным набором необходимых виртуальных устройств и параметров.
 
                     * Windows — для ОС семейства Microsoft Windows.
                     * Generic — для других типов ОС.
 
                 bootloader:
                   description: |
-                    Определяет загрузчик для VM:
+                    Загрузчик для VM:
 
-                    * BIOS — использовать устаревший BIOS.
+                    * BIOS — использовать BIOS.
                     * EFI — использовать Unified Extensible Firmware (EFI/UEFI).
                     * EFIWithSecureBoot — использовать UEFI/EFI с поддержкой SecureBoot.
 
                 cpu:
                   description: |
-                    Блок определяет настройки процессора для виртуальной машины.
+                    Блок определяет настройки ЦП для виртуальной машины.
                   properties:
                     virtualMachineCPUModelName:
                       description: |
                         Имя ресурса `virtualMachineCPUModelName`, определяющего модель процессора для виртуальной машины.
                     cores:
                       description: |
-                        Количество ядер в виртуальной машине. Значение числа ядер должно быть больше или равно 1.
+                        Количество ядер.
                     coreFraction:
                       description: |
-                        Гарантированная доля ЦП, которая будет выделена ВМ. Указывается в процентах.
-                        Поддерживаемые значения: `5%`, `10%`, `25%`, `50%`, `100%`.
+                        Гарантированная доля времени ЦП, которая будет выделена ВМ. Указывается в процентах.
 
                 memory:
                   description: |

From 6f8f66b043200496ffbbf9b629fe9728b6475fb7 Mon Sep 17 00:00:00 2001
From: Pavel Tishkov <pavel.tishkov@flant.com>
Date: Sat, 18 May 2024 09:15:50 +0300
Subject: [PATCH 08/13] docs: update

Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 README.md         | 32 +++++++++++++++++++++++---------
 docs/README.md    |  5 ++---
 docs/README_RU.md |  7 +++----
 3 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/README.md b/README.md
index 26559a749..86816f56b 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,7 @@ It offers the following features:
 
 - A simple and intuitive interface for declarative creation and management of virtual machines and their resources.
 - The ability to run legacy applications that for some reason cannot or are difficult to run in a container.
+- Ability to run applications that require non-Linux operating systems.
 - Ability to run virtual machines and containerized applications in the same environment.
 - Integration with the existing Deckhouse ecosystem to leverage its capabilities for virtual machines.
 
@@ -20,9 +21,22 @@ It offers the following features:
 The following conditions are required to run the module:
 
 - A processor with x86_64 architecture and support for Intel-VT or AMD-V instructions.
+- Cluster resource requirements and configuration specifics are available for reading on [this](https://deckhouse.io/guides/production.html) page.
+- Any [compatible](https://deckhouse.io/documentation/v1/supported_versions.html#linux) Linux-based OS is supported for installation.
 - The Linux kernel on the cluster nodes must be version 5.7 or newer.
-- The [CNI Cilium](https://deckhouse.ru/documentation/v1/modules/021-cni-cilium/) module to provide network connectivity for virtual machines.
-- Modules SDS-DRBD or [Ceph](https://deckhouse.ru/documentation/v1/modules/031-ceph-csi/) for storing virtual machine data. It is also possible to use other storage options that support the creation of block devices with `RWX` (`ReadWriteMany`) access mode.
+- The [CNI Cilium](/documentation/v1/modules/021-cni-cilium/) module to provide network connectivity for virtual machines.
+- Modules [SDS-DRBD](https://deckhouse.io/modules/sds-drbd/stable/) or [CEPH-CSI](/documentation/v1/modules/031-ceph-csi/) for storing virtual machine data. It is also possible to use other storage options that support the creation of block devices with `RWX` (`ReadWriteMany`) access mode.
+
+The command line utility [d8](https://github.com/deckhouse/deckhouse-cli) is used to create cluster resources and connect to virtual machines. For users of the EE-version the ability to manage resources via UI is available.
+
+## What do I need to enable the module?
+
+Procedure for enabling the module
+
+1. Configure the deckhouse cluster
+2. Enable the [CNI Cilium](/documentation/v1/modules/021-cni-cilium/) module
+3. Install and configure SDS-DRBD/CEPH/etc storage
+4. Enable the virtualization module
 
 ## Architecture
 
@@ -30,14 +44,14 @@ The module includes the following components:
 
 - The module core, based on the KubeVirt project and uses QEMU/KVM + libvirtd to run virtual machines.
 - Deckhouse Virtualization Container Registry (DVCR) - repository for storing and caching virtual machine images.
-- Virtualization-controller - API for creating and managing virtual machine resources.
+- Virtualization-API - controller that implements a user API for creating and managing virtual machine resources.
 
 The API provides capabilities for creating and managing the following resources:
 
-- Images
-- Disks
+- Virtual Images
+- Virtual Disks
 - Virtual machines
-- Operations
+- Virtual Machine Operations
 
 ## How to enable module
 
@@ -57,8 +71,8 @@ spec:
           size: 50G # size of DVCR storage
         type: PersistentVolumeClaim
     virtualMachineCIDRs:
-    - 10.66.10.0/24
-    - 10.66.20.0/24
-    - 10.66.30.0/24
+      - 10.66.10.0/24
+      - 10.66.20.0/24
+      - 10.66.30.0/24
   version: 1
 ```
diff --git a/docs/README.md b/docs/README.md
index 553035fff..8cbdbe14b 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -6,7 +6,7 @@ moduleStatus: experimental
 
 ## Description
 
-This module is designed to run and manage virtual machines and their resources on the Deckhouse platform.
+This module is designed to run and manage virtual machines and their resources on [the Deckhouse platform](https://deckhouse.io).
 
 It offers the following features:
 
@@ -44,8 +44,7 @@ The module includes the following components:
 
 - The module core, based on the KubeVirt project and uses QEMU/KVM + libvirtd to run virtual machines.
 - Deckhouse Virtualization Container Registry (DVCR) - repository for storing and caching virtual machine images.
-- Virtualization-controller - controller that implements a user API for creating and managing virtual machine resources.
-- Virtualization-API - API for interacting with virtual machines.
+- Virtualization-API - controller that implements a user API for creating and managing virtual machine resources.
 
 The API provides capabilities for creating and managing the following resources:
 
diff --git a/docs/README_RU.md b/docs/README_RU.md
index bdfbbce82..9271bf2d7 100644
--- a/docs/README_RU.md
+++ b/docs/README_RU.md
@@ -6,7 +6,7 @@ moduleStatus: experimental
 
 ## Описание
 
-Этот модуль предназначен для запуска и управления виртуальными машинами и их ресурсами на платформе Deckhouse.
+Этот модуль предназначен для запуска и управления виртуальными машинами и их ресурсами на [платформе Deckhouse](https://deckhouse.ru).
 
 Он предлагает следующие возможности:
 
@@ -44,10 +44,9 @@ moduleStatus: experimental
 
 - Ядро модуля, основанное на проекте KubeVirt и использующее QEMU/KVM + libvirtd для запуска виртуальных машин.
 - Deckhouse Virtualization Container Registry (DVCR) — репозиторий для хранения и кэширования образов виртуальных машин.
-- Virtualization-controller — контроллер, реализующий API пользователя для создания и управления ресурсами виртуальных машин.
-- Virtualization-API - API для взаимодействия с виртуальными машинами.
+- Virtualization-API — контроллер, реализующий API пользователя для создания и управления ресурсами виртуальных машин.
 
-API предоставляет возможности для создания и управления следующими ресурсами:
+API предоставляет возможности для создания, модификации и удаления следующих ресурсов:
 
 - образы виртуальных машин и загрузочные образы;
 - диски виртуальных машин;

From 78faf5874ea9f4e2550a1be24f93af29e09860a1 Mon Sep 17 00:00:00 2001
From: Pavel Tishkov <pavel.tishkov@flant.com>
Date: Sat, 18 May 2024 13:50:29 +0300
Subject: [PATCH 09/13] docs(vm): update en crd

Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 crds/virtualmachine.yaml | 56 +++++++++++++++++++++++++---------------
 1 file changed, 35 insertions(+), 21 deletions(-)

diff --git a/crds/virtualmachine.yaml b/crds/virtualmachine.yaml
index 1bf549763..87fbec200 100644
--- a/crds/virtualmachine.yaml
+++ b/crds/virtualmachine.yaml
@@ -28,7 +28,7 @@ spec:
         openAPIV3Schema:
           type: object
           description: |
-            Handles the VM according to its configuration and run policy.
+            Virtual Machine (VM) Configuration.
           required:
             - spec
           properties:
@@ -48,11 +48,11 @@ spec:
                       description: |
                         This parameter defines the type of provisioning script:
 
-                        * UserData - allows the use of inline cloud-init userdata in the .spec.provisioning.UserData section.
+                        Parameters supported for using the provisioning script:
 
-                        * UserDataRef - allows tto automate OS installation with cloud-init userdata.
-
-                        * SysprepRef - allows to automate Windows installation, setup, and custom software provisioning.
+                        * UserData - use the cloud-init in the .spec.provisioning.UserData section.
+                        * UserDataRef - use a cloud-init script that resides in a different resource.
+                        * SysprepRef - Use a Windows Automation script that resides in a different resource.
 
                         More information: https://cloudinit.readthedocs.io/en/latest/reference/examples.html
                       type: string
@@ -66,11 +66,16 @@ spec:
                       type: string
                     userDataRef:
                       description: |
-                        Reference to an existing Secret with a cloud-init userdata script.
+                        A reference to an existing resource with a cloud-init script.
+
+                        Resource structure for userDataRef type:
+
+                        * `.data.userData`.
                       type: object
                       properties:
                         kind:
-                          description: The kind of an existing Windows sysprep automation.
+                          description: |
+                            The kind of an existing cloud-init automation resource.
                           default: "Secret"
                           type: string
                           enum:
@@ -78,15 +83,21 @@ spec:
                         name:
                           type: string
                           description: |
-                            Secret name.
+                            The name of the resource.
                       required: ["name", "kind"]
                     sysprepRef:
                       description: |
                         Reference to an existing Windows sysprep automation.
+
+                        Resource structure for the SysprepRef type:
+
+                        * `.data.autounattend.xml`.
+                        * `.data.unattend.xml`.
                       type: object
                       properties:
                         kind:
-                          description: The kind of an existing Windows sysprep automation.
+                          description: |
+                            The kind of an existing Windows sysprep automation resource.
                           default: "Secret"
                           type: string
                           enum:
@@ -142,10 +153,11 @@ spec:
                 virtualMachineIPAddressClaimName:
                   type: string
                   description: |
-                    The name for associated `virtualMachineIPAddressClaimName` resource.
+                    Name for the associated `virtualMachineIPAddressClaim` resource.
+
+                    Specified when it is necessary to use a previously created IP address of the VM.
 
-                    If specified, virtualMachineIPAddressClaimName should exists on VirtualMachine creation.
-                    If not specified, a VirtualMachine name will be used to create an implicit virtualMachineIPAddressClaimName. This claim will be deleted on VirtualMachine deletion.
+                    If not explicitly specified, by default a `virtualMachineIPAddressClaim` resource is created for the VM with a name similar to the VM resource (`.metadata.name`).
 
                 topologySpreadConstraints:
                   description: |
@@ -790,16 +802,17 @@ spec:
                   default:
                     restartApprovalMode: Manual
                   description: |
-                    Disruptions settings for virtual machine.
+                    Describing the policy for applying changes that require rebooting the VM.
 
-                    Some virtual machine settings require a reboot of the virtual machine when changing the configuration. To reboot, it is necessary to approve the changes. The `approvalMode` parameter is used for this purpose.
+                    Changes to some VM configuration settings require a reboot of the VM to apply them. This policy allows you to specify the behavior of how the VM will respond to such changes.
                   properties:
                     restartApprovalMode:
                       type: string
                       description: |
-                        The approval mode for disruptive updates:
-                        - `Manual` — restart virtual machine manually to apply disruptive updates.
-                        - `Automatic` — virtual machine will restart automatically to apply disruptive updates.
+                        Approval mode for changes that require rebooting the VM:
+
+                        * `Manual` - changes will not be applied until the user reboots the VM himself.
+                        * `Automatic` - the VM will be rebooted immediately after saving the parameters that require rebooting the VM.
                       enum:
                         - Manual
                         - Automatic
@@ -815,7 +828,9 @@ spec:
                   type: boolean
                   default: true
                   description: |
-                    Use the `virtio` bus to attach disk devices. Set to false to disable `virtio` for this VM.
+                    Use the `virtio` bus to connect virtual devices of the VM. Set to false to disable `virtio` for this VM.
+
+                    Note: To use paravirtualization mode, some operating systems require the appropriate drivers to be installed.
 
                 osType:
                   type: string
@@ -824,9 +839,9 @@ spec:
                     - "Generic"
                   default: "Generic"
                   description: |
-                    For the selected type of operating system, determines the set of devices and other parameters required for correct operation will be applied to VM.
+                    The parameter allows you to select the type of used OS, for which a VM with an optimal set of required virtual devices and parameters will be created.
 
-                    * Windows - for the Microsoft Windows family of OS.
+                    * Windows - for Microsoft Windows family operating systems.
                     * Generic - for other types of OS.
 
                 bootloader:
@@ -864,7 +879,6 @@ spec:
                       enum: ["5%", "10%", "25%", "50%", "100%"]
                       description: |
                         Guaranteed share of CPU that will be allocated to the VM. Specified as a percentage.
-                        Supported values: `5%`, `10%`, `25%`, `50%`, `100%`.
 
                 memory:
                   type: object

From eef0670e413b230b5259492b3fbd4c8d42102c49 Mon Sep 17 00:00:00 2001
From: Pavel Tishkov <pavel.tishkov@flant.com>
Date: Sat, 18 May 2024 17:45:41 +0300
Subject: [PATCH 10/13] feat(test) fix indents in ru crds

Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 crds/doc-ru-clustervirtualimage.yaml          |  312 ++---
 crds/doc-ru-virtualdisk.yaml                  |  278 +++--
 crds/doc-ru-virtualimage.yaml                 |  306 +++--
 crds/doc-ru-virtualmachine.yaml               | 1040 ++++++++---------
 ...u-virtualmachineblockdeviceattachment.yaml |   78 +-
 crds/doc-ru-virtualmachinecpumodel.yaml       |   92 +-
 crds/doc-ru-virtualmachineipaddressclaim.yaml |   82 +-
 crds/doc-ru-virtualmachineipaddresslease.yaml |   68 +-
 8 files changed, 1116 insertions(+), 1140 deletions(-)

diff --git a/crds/doc-ru-clustervirtualimage.yaml b/crds/doc-ru-clustervirtualimage.yaml
index 70bc6fda4..105e96c72 100644
--- a/crds/doc-ru-clustervirtualimage.yaml
+++ b/crds/doc-ru-clustervirtualimage.yaml
@@ -1,165 +1,165 @@
 spec:
   versions:
-    - name: v1alpha2
-      schema:
-        openAPIV3Schema:
-          description: |
-            Описывает образ диска виртуальной машины, который может использоваться в качестве источника данных для новых `VirtualDisks` или установочный образ (iso), который быть смонтирован в `VirtualMachines` напрямую. Этот тип ресурса доступен для всех пространств имен в кластере.
+  - name: v1alpha2
+    schema:
+      openAPIV3Schema:
+        description: |
+          Описывает образ диска виртуальной машины, который может использоваться в качестве источника данных для новых `VirtualDisks` или установочный образ (iso), который быть смонтирован в `VirtualMachines` напрямую. Этот тип ресурса доступен для всех пространств имен в кластере.
 
-            > Этот ресурс не может быть изменен после его создания.
+          > Этот ресурс не может быть изменен после его создания.
 
-            Под капотом этого ресурса создается образ контейнера, который хранится в специальном container registry (DVCR).
-          properties:
-            spec:
-              properties:
-                dataSource:
-                  description: |
-                    Тип источника, из которого будет создан образ.
-                  properties:
-                    type:
-                      description: |
-                        Доступные типы источников для создания образа:
+          Под капотом этого ресурса создается образ контейнера, который хранится в специальном container registry (DVCR).
+        properties:
+          spec:
+            properties:
+              dataSource:
+                description: |
+                  Тип источника, из которого будет создан образ.
+                properties:
+                  containerImage:
+                    description: |
+                      Использование образа, хранящегося во внешнем реестре контейнеров.
+                      Поддерживаются только реестры контейнеров с включенным TLS.
+                      При необходимости используйте поле caBundle, чтобы предоставить собственную цепочку центров сертификации.
+                    properties:
+                      caBundle:
+                        description: |
+                          Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
+                      image:
+                        description: |
+                          Путь к образу в container registry.
+                      imagePullSecret:
+                        properties:
+                          name:
+                            description: |
+                              Имя Secret'а, содержащего учетные данные для подключения к container registry.
+                          namespace:
+                            description: |
+                              Пространство имен, в котором находится imagePullSecret.
+                  http:
+                    description: |
+                      Создание образа из файла, опубликованного по URL. Поддерживаемые схемы:
 
-                        * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере.
-                        * `ContainerImage` — создать образ из образа в container registry.
-                        * `VirtualImage` — создать новый образ из существующего `VirtualImage`.
-                        * `ClusterVirtualImage` — создать новый образ из существующего `ClusterVirtualImage`.
-                        * `Upload` — загрузить образ вручную, через веб-интерфейс.
-                    http:
-                      description: |
-                        Создание образа из файла, опубликованного по URL. Поддерживаемые схемы:
+                      * HTTP;
+                      * HTTPS.
 
-                        * HTTP;
-                        * HTTPS.
+                      Для схемы HTTPS есть возможность отключить проверку TLS.
+                    properties:
+                      caBundle:
+                        description: |
+                          Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
+                      checksum:
+                        description: |
+                          Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
+                        properties:
+                          md5:
+                            description: ""
+                          sha256:
+                            description: ""
+                      insecureSkipVerify:
+                        description: |
+                          Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
+                      url:
+                        description: |
+                          Для образа расположенного по URL, поддерживаются следующие типы образов:
+                          * qcow2;
+                          * vmdk;
+                          * vdi;
+                          * iso;
+                          * raw.
 
-                        Для схемы HTTPS есть возможность отключить проверку TLS.
-                      properties:
-                        url:
-                          description: |
-                            Для образа расположенного по URL, поддерживаются следующие типы образов:
-                            * qcow2;
-                            * vmdk;
-                            * vdi;
-                            * iso;
-                            * raw.
+                          Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
+                          * gz;
+                          * xz.
+                  objectRef:
+                    description: |
+                      Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
+                    properties:
+                      kind:
+                        description: |
+                          Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
+                      name:
+                        description: |
+                          Имя существующего `VirtualImage` или `ClusterVirtualImage`.
+                      namespace:
+                        description: |
+                          Имя namespace'а, гда ресположен `VirtualImage`.
+                  type:
+                    description: |
+                      Доступные типы источников для создания образа:
 
-                            Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
-                            * gz;
-                            * xz.
-                        caBundle:
-                          description: |
-                            Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
-                        insecureSkipVerify:
-                          description: |
-                            Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
-                        checksum:
-                          description: |
-                            Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
-                          properties:
-                            md5:
-                              description: ""
-                            sha256:
-                              description: ""
-                    containerImage:
-                      description: |
-                        Использование образа, хранящегося во внешнем реестре контейнеров.
-                        Поддерживаются только реестры контейнеров с включенным TLS.
-                        При необходимости используйте поле caBundle, чтобы предоставить собственную цепочку центров сертификации.
-                      properties:
-                        image:
-                          description: |
-                            Путь к образу в container registry.
-                        imagePullSecret:
-                          properties:
-                            name:
-                              description: |
-                                Имя Secret'а, содержащего учетные данные для подключения к container registry.
-                            namespace:
-                              description: |
-                                Пространство имен, в котором находится imagePullSecret.
-                        caBundle:
-                          description: |
-                            Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
-                    objectRef:
-                      description: |
-                        Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
-                      properties:
-                        kind:
-                          description: |
-                            Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
-                        name:
-                          description: |
-                            Имя существующего `VirtualImage` или `ClusterVirtualImage`.
-                        namespace:
-                          description: |
-                            Имя namespace'а, гда ресположен `VirtualImage`.
-            status:
-              properties:
-                downloadSpeed:
-                  description: |
-                    Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
-                  properties:
-                    avg:
-                      description: |
-                        Средняя скорость загрузки.
-                    current:
-                      description: |
-                        Текущая скорость загрузки.
-                    avgBytes:
-                      description: |
-                        Средняя скорость загрузки в байтах в секунду.
-                    currentBytes:
-                      description: |
-                        Текущая скорость загрузки в байтах в секунду.
-                format:
-                  description: |
-                    Обнаруженный формат образа.
-                size:
-                  description: |
-                    Обнаруженные размеры образа.
-                  properties:
-                    stored:
-                      description: |
-                        Размер образа в DVCR или PVC в человекочитаемом формате.
-                    storedBytes:
-                      description: Размер образа в DVCR или PVC в байтах.
-                    unpacked:
-                      description: |
-                        Размер распакованного образа в человекочитаемом формате.
-                    unpackedBytes:
-                      description: |
-                        Размер распакованного образа в байтах.
-                cdrom:
-                  description: |
-                    Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д.
-                target:
-                  properties:
-                    registryURL:
-                      description: |
-                        Образ, созданный в DVCR.
-                phase:
-                  description: |
-                    Текущее состояние ресурса `ClusterVirtualImage`:
+                      * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере.
+                      * `ContainerImage` — создать образ из образа в container registry.
+                      * `VirtualImage` — создать новый образ из существующего `VirtualImage`.
+                      * `ClusterVirtualImage` — создать новый образ из существующего `ClusterVirtualImage`.
+                      * `Upload` — загрузить образ вручную, через веб-интерфейс.
+          status:
+            properties:
+              attachedToVirtualMachines:
+                description: |
+                  Список виртуальных машин, использующих этот образ
+              cdrom:
+                description: |
+                  Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д.
+              downloadSpeed:
+                description: |
+                  Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
+                properties:
+                  avg:
+                    description: |
+                      Средняя скорость загрузки.
+                  avgBytes:
+                    description: |
+                      Средняя скорость загрузки в байтах в секунду.
+                  current:
+                    description: |
+                      Текущая скорость загрузки.
+                  currentBytes:
+                    description: |
+                      Текущая скорость загрузки в байтах в секунду.
+              failureMessage:
+                description: |
+                  Подробное описание ошибки.
+              failureReason:
+                description: |
+                  Краткое описание причины ошибки.
+              format:
+                description: |
+                  Обнаруженный формат образа.
+              phase:
+                description: |
+                  Текущее состояние ресурса `ClusterVirtualImage`:
 
-                    * Pending - Ресурс был создан и находится в очереди ожидания.
-                    * Provisioning - Идет процесс создания ресурса (копирование/загрузка/создание образа).
-                    * WaitForUserUpload - Ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
-                    * Ready - Ресурс создан и готов к использованию.
-                    * Failed - При создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
-                    * NotReady - Невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован.
-                    * ImageLost - Дочернее образ ресурса отсутствует. Ресурс не может быть использован.
-                progress:
-                  description: |
-                    Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
-                uploadCommand:
-                  description: |
-                    Команда для загрузки образа для типа 'Upload'.
-                failureReason:
-                  description: |
-                    Краткое описание причины ошибки.
-                failureMessage:
-                  description: |
-                    Подробное описание ошибки.
-                attachedToVirtualMachines:
-                  description: |
-                    Список виртуальных машин, использующих этот образ
+                  * Pending - Ресурс был создан и находится в очереди ожидания.
+                  * Provisioning - Идет процесс создания ресурса (копирование/загрузка/создание образа).
+                  * WaitForUserUpload - Ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
+                  * Ready - Ресурс создан и готов к использованию.
+                  * Failed - При создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
+                  * NotReady - Невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован.
+                  * ImageLost - Дочернее образ ресурса отсутствует. Ресурс не может быть использован.
+              progress:
+                description: |
+                  Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
+              size:
+                description: |
+                  Обнаруженные размеры образа.
+                properties:
+                  stored:
+                    description: |
+                      Размер образа в DVCR или PVC в человекочитаемом формате.
+                  storedBytes:
+                    description: Размер образа в DVCR или PVC в байтах.
+                  unpacked:
+                    description: |
+                      Размер распакованного образа в человекочитаемом формате.
+                  unpackedBytes:
+                    description: |
+                      Размер распакованного образа в байтах.
+              target:
+                properties:
+                  registryURL:
+                    description: |
+                      Образ, созданный в DVCR.
+              uploadCommand:
+                description: |
+                  Команда для загрузки образа для типа 'Upload'.
diff --git a/crds/doc-ru-virtualdisk.yaml b/crds/doc-ru-virtualdisk.yaml
index 1daf4c764..f64bf85c8 100644
--- a/crds/doc-ru-virtualdisk.yaml
+++ b/crds/doc-ru-virtualdisk.yaml
@@ -1,148 +1,146 @@
 spec:
   versions:
-    - name: v1alpha2
-      schema:
-        openAPIV3Schema:
-          description: |
-            Описывает диск виртуальной машины, который может быть смонтирован в `VirtualMachines`. После создания ресурса изменить можно только размер диска `.spec.persistentVolumeClaim.size`, все остальные поля неизменяемы.
+  - name: v1alpha2
+    schema:
+      openAPIV3Schema:
+        description: |
+          Описывает диск виртуальной машины, который может быть смонтирован в `VirtualMachines`. После создания ресурса изменить можно только размер диска `.spec.persistentVolumeClaim.size`, все остальные поля неизменяемы.
 
-            Под капотом ресурса создается PVC, в который заливаются данные из источника.
-          properties:
-            spec:
-              properties:
-                persistentVolumeClaim:
-                  description: |
-                    Настройки для создания PVC для хранения диска.
-                  properties:
-                    size:
-                      description: |
-                        Желаемый размер PVC для хранения диска. Если диск создается из образа, то размер должен быть не меньше, чем исходный образ в распакованном состоянии.
-                    storageClassName:
-                      description: |
-                        Имя класса StorageClass, требуемого для PersistentVolumeClaim. Дополнительная информация — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1.
-                dataSource:
-                  description: |
-                    Тип источника, из которого будет создан диск. Если источник (.spec.dataSource) отсутствует, то будет создан пустой диск.
-                  properties:
-                    type:
-                      description: |
-                        Тип источника, из которого будет создан диск:
+          Под капотом ресурса создается PVC, в который заливаются данные из источника.
+        properties:
+          spec:
+            properties:
+              dataSource:
+                description: |
+                  Тип источника, из которого будет создан диск. Если источник (.spec.dataSource) отсутствует, то будет создан пустой диск.
+                properties:
+                  containerImage:
+                    description: |
+                      Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов.
+                    properties:
+                      caBundle:
+                        description: |
+                          Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
+                      image:
+                        description: |
+                          Путь к образу в container registry.
+                      imagePullSecret:
+                        properties:
+                          name:
+                            description: |
+                              Имя Secret'а, содержащего учетные данные для подключения к container registry.
+                  http:
+                    description: |
+                      Создать диск из файла, опубликованного по URL. Поддерживаемые схемы:
 
-                        * `HTTP` — создать диск из файла, опубликованного на HTTP/HTTPS-сервере.
-                        * `ContainerImage` — создать диск из образа в container registry.
-                        * `VirtualImage` — создать диск из существующего `VirtualImage`.
-                        * `ClusterVirtualImage` — создать диск из существующего `ClusterVirtualImage`.
-                        * `Upload` — загрузить образ диска вручную, через веб-интерфейс.
-                    http:
-                      description: |
-                        Создать диск из файла, опубликованного по URL. Поддерживаемые схемы:
+                      * HTTP;
+                      * HTTPS.
 
-                        * HTTP;
-                        * HTTPS.
+                      Для схемы HTTPS есть возможность пропустить проверку TLS.
+                    properties:
+                      caBundle:
+                        description: |
+                          Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
+                      checksum:
+                        description: |
+                          Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
+                        properties:
+                          md5:
+                            description: ""
+                          sha256:
+                            description: ""
+                      insecureSkipVerify:
+                        description: |
+                          Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
+                      url:
+                        description: |
+                          URL с образом. Поддерживаются следующие типы образов:
+                          * qcow2;
+                          * vmdk;
+                          * vdi;
+                          * iso;
+                          * raw.
 
-                        Для схемы HTTPS есть возможность пропустить проверку TLS.
-                      properties:
-                        url:
-                          description: |
-                            URL с образом. Поддерживаются следующие типы образов:
-                            * qcow2;
-                            * vmdk;
-                            * vdi;
-                            * iso;
-                            * raw.
+                          Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
+                          * gz;
+                          * xz.
+                  objectRef:
+                    description: |
+                      Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
+                    properties:
+                      kind:
+                        description: |
+                          Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
+                      name:
+                        description: |
+                          Имя существующего `VirtualImage` или `ClusterVirtualImage`.
+                  type:
+                    description: |
+                      Тип источника, из которого будет создан диск:
 
-                            Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
-                            * gz;
-                            * xz.
-                        caBundle:
-                          description: |
-                            Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
-                        insecureSkipVerify:
-                          description: |
-                            Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
-                        checksum:
-                          type: object
-                          description: |
-                            Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
-                          properties:
-                            md5:
-                              description: ""
-                            sha256:
-                              description: ""
-                    containerImage:
-                      description: |
-                        Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов.
-                      properties:
-                        image:
-                          description: |
-                            Путь к образу в container registry.
-                        imagePullSecret:
-                          properties:
-                            name:
-                              description: |
-                                Имя Secret'а, содержащего учетные данные для подключения к container registry.
-                        caBundle:
-                          description: |
-                            Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
-                    objectRef:
-                      description: |
-                        Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
-                      properties:
-                        kind:
-                          description: |
-                            Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
-                        name:
-                          description: |
-                            Имя существующего `VirtualImage` или `ClusterVirtualImage`.
+                      * `HTTP` — создать диск из файла, опубликованного на HTTP/HTTPS-сервере.
+                      * `ContainerImage` — создать диск из образа в container registry.
+                      * `VirtualImage` — создать диск из существующего `VirtualImage`.
+                      * `ClusterVirtualImage` — создать диск из существующего `ClusterVirtualImage`.
+                      * `Upload` — загрузить образ диска вручную, через веб-интерфейс.
+              persistentVolumeClaim:
+                description: |
+                  Настройки для создания PVC для хранения диска.
+                properties:
+                  size:
+                    description: |
+                      Желаемый размер PVC для хранения диска. Если диск создается из образа, то размер должен быть не меньше, чем исходный образ в распакованном состоянии.
+                  storageClassName:
+                    description: |
+                      Имя класса StorageClass, требуемого для PersistentVolumeClaim. Дополнительная информация — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1.
+          status:
+            properties:
+              attachedToVirtualMachines:
+                description: |
+                  Список виртуальных машин, использующих этот диск
+              capacity:
+                description: |
+                  Емкость PVC в человекочитаемом формате.
+              downloadSpeed:
+                description: |
+                  Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
+                properties:
+                  avg:
+                    description: |
+                      Средняя скорость загрузки.
+                  avgBytes:
+                    description: |
+                      Средняя скорость загрузки в байтах в секунду.
+                  current:
+                    description: |
+                      Текущая скорость загрузки.
+                  currentBytes:
+                    description: |
+                      Текущая скорость загрузки в байтах в секунду.
+              failureMessage:
+                description: |
+                  Подробное описание ошибки.
+              failureReason:
+                description: |
+                  Краткое описание причины ошибки.
+              phase:
+                description: |
+                  Текущее состояние ресурса `VirtualDisk`:
 
-            status:
-              properties:
-                downloadSpeed:
-                  description: |
-                    Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
-                  properties:
-                    avg:
-                      description: |
-                        Средняя скорость загрузки.
-                    current:
-                      description: |
-                        Текущая скорость загрузки.
-                    avgBytes:
-                      description: |
-                        Средняя скорость загрузки в байтах в секунду.
-                    currentBytes:
-                      description: |
-                        Текущая скорость загрузки в байтах в секунду.
-                capacity:
-                  description: |
-                    Емкость PVC в человекочитаемом формате.
-                target:
-                  properties:
-                    persistentVolumeClaimName:
-                      description: |
-                        Имя созданного PersistentVolumeClaim для хранилища Kubernetes.
-                phase:
-                  description: |
-                    Текущее состояние ресурса `VirtualDisk`:
-
-                    * Pending — ресурс был создан и находится в очереди ожидания.
-                    * Provisioning — идет процесс создания ресурса (копирование/загрузка/создание образа).
-                    * WaitForUserUpload — ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
-                    * Ready — ресурс создан и готов к использованию.
-                    * Failed — при создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
-                    * PVCLost — дочерний PVC ресурса отсутствует. Ресурс не может быть использован.
-                progress:
-                  description: |
-                    Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
-                uploadCommand:
-                  description: |
-                    Команда для загрузки образа для типа 'Upload'.
-                failureReason:
-                  description: |
-                    Краткое описание причины ошибки.
-                failureMessage:
-                  description: |
-                    Подробное описание ошибки.
-                attachedToVirtualMachines:
-                  description: |
-                    Список виртуальных машин, использующих этот диск
+                  * Pending — ресурс был создан и находится в очереди ожидания.
+                  * Provisioning — идет процесс создания ресурса (копирование/загрузка/создание образа).
+                  * WaitForUserUpload — ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
+                  * Ready — ресурс создан и готов к использованию.
+                  * Failed — при создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
+                  * PVCLost — дочерний PVC ресурса отсутствует. Ресурс не может быть использован.
+              progress:
+                description: |
+                  Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
+              target:
+                properties:
+                  persistentVolumeClaimName:
+                    description: |
+                      Имя созданного PersistentVolumeClaim для хранилища Kubernetes.
+              uploadCommand:
+                description: |
+                  Команда для загрузки образа для типа 'Upload'.
diff --git a/crds/doc-ru-virtualimage.yaml b/crds/doc-ru-virtualimage.yaml
index bdfa9a3d4..826239729 100644
--- a/crds/doc-ru-virtualimage.yaml
+++ b/crds/doc-ru-virtualimage.yaml
@@ -1,164 +1,162 @@
 spec:
   versions:
-    - name: v1alpha2
-      schema:
-        openAPIV3Schema:
-          description: |
-            Описывает образ диска виртуальной машины, который может использоваться в качестве источника данных для новых `VirtualDisks` или установочный образ (iso), который быть смонтирован в `VirtualMachines` напрямую.
+  - name: v1alpha2
+    schema:
+      openAPIV3Schema:
+        description: |
+          Описывает образ диска виртуальной машины, который может использоваться в качестве источника данных для новых `VirtualDisks` или установочный образ (iso), который быть смонтирован в `VirtualMachines` напрямую.
 
-            > Этот ресурс не может быть изменен после его создания.
+          > Этот ресурс не может быть изменен после его создания.
 
-            Под капотом этого ресурса создается образ контейнера, хранящийся в специальном container registry (DVCR).
-          properties:
-            spec:
-              properties:
-                storage:
-                  description: |
-                    Тип хранилища для хранения образа:
+          Под капотом этого ресурса создается образ контейнера, хранящийся в специальном container registry (DVCR).
+        properties:
+          spec:
+            properties:
+              dataSource:
+                description: |
+                  Тип источника, из которого будет создан образ.
+                properties:
+                  containerImage:
+                    description: |
+                      Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов.
+                    properties:
+                      caBundle:
+                        description: |
+                          Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
+                      image:
+                        description: |
+                          Путь к образу в container registry.
+                      imagePullSecret:
+                        properties:
+                          name:
+                            description: |
+                              Имя Secret'а, содержащего учетные данные для подключения к container registry.
+                  http:
+                    description: |
+                      Создать образ из файла, опубликованного по URL. Поддерживаемые схемы:
 
-                    * `ContainerRegistry` — использовать container registry (DVCR). В этом случае образы будут загружаться в контейнер, а затем в DVCR (поставляется с модулем виртуализации).
-                dataSource:
-                  description: |
-                    Тип источника, из которого будет создан образ.
-                  properties:
-                    type:
-                      description: |
-                        Тип источника, из которого будет создан образ:
+                      * HTTP;
+                      * HTTPS.
 
-                        * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере.
-                        * `ContainerImage` — создать образ из образа в container registry.
-                        * `VirtualImage` — создать образ из другого существующего `VirtualImage`.
-                        * `ClusterVirtualImage` — создать образ из другого существующего `ClusterVirtualImage`.
-                        * `Upload` — загрузить образ вручную, через веб-интерфейс.
-                    http:
-                      description: |
-                        Создать образ из файла, опубликованного по URL. Поддерживаемые схемы:
+                      Для схемы HTTPS есть возможность пропустить проверку TLS.
+                    properties:
+                      caBundle:
+                        description: |
+                          Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
+                      checksum:
+                        description: |
+                          Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
+                        properties:
+                          md5:
+                            description: ""
+                          sha256:
+                            description: ""
+                      insecureSkipVerify:
+                        description: |
+                          Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
+                      url:
+                        description: |
+                          URL с образом. Поддерживаются следующие типы образов:
+                          * qcow2;
+                          * vmdk;
+                          * vdi;
+                          * iso;
+                          * raw.
 
-                        * HTTP;
-                        * HTTPS.
+                          Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
+                          * gz;
+                          * xz.
+                  objectRef:
+                    description: |
+                      Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
+                    properties:
+                      kind:
+                        description: |
+                          Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
+                      name:
+                        description: |
+                          Имя существующего `VirtualImage` или `ClusterVirtualImage`.
+                  type:
+                    description: |
+                      Тип источника, из которого будет создан образ:
 
-                        Для схемы HTTPS есть возможность пропустить проверку TLS.
-                      properties:
-                        url:
-                          description: |
-                            URL с образом. Поддерживаются следующие типы образов:
-                            * qcow2;
-                            * vmdk;
-                            * vdi;
-                            * iso;
-                            * raw.
+                      * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере.
+                      * `ContainerImage` — создать образ из образа в container registry.
+                      * `VirtualImage` — создать образ из другого существующего `VirtualImage`.
+                      * `ClusterVirtualImage` — создать образ из другого существующего `ClusterVirtualImage`.
+                      * `Upload` — загрузить образ вручную, через веб-интерфейс.
+              storage:
+                description: |
+                  Тип хранилища для хранения образа:
 
-                            Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
-                            * gz;
-                            * xz.
-                        caBundle:
-                          description: |
-                            Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
-                        insecureSkipVerify:
-                          description: |
-                            Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
-                        checksum:
-                          description: |
-                            Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
-                          properties:
-                            md5:
-                              description: ""
-                            sha256:
-                              description: ""
-                    containerImage:
-                      description: |
-                        Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов.
-                      properties:
-                        image:
-                          description: |
-                            Путь к образу в container registry.
-                        imagePullSecret:
-                          properties:
-                            name:
-                              description: |
-                                Имя Secret'а, содержащего учетные данные для подключения к container registry.
-                        caBundle:
-                          description: |
-                            Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
-                    objectRef:
-                      description: |
-                        Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
-                      properties:
-                        kind:
-                          description: |
-                            Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
-                        name:
-                          description: |
-                            Имя существующего `VirtualImage` или `ClusterVirtualImage`.
-            status:
-              type: object
-              properties:
-                downloadSpeed:
-                  description: |
-                    Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
-                  properties:
-                    avg:
-                      description: |
-                        Средняя скорость загрузки.
-                    current:
-                      description: |
-                        Текущая скорость загрузки.
-                    avgBytes:
-                      description: |
-                        Средняя скорость загрузки в байтах в секунду.
-                    currentBytes:
-                      description: |
-                        Текущая скорость загрузки в байтах в секунду.
-                format:
-                  description: |
-                    Обнаруженный формат образа.
-                size:
-                  description: |
-                    Обнаруженные размеры образа.
-                  properties:
-                    stored:
-                      description: |
-                        Размер образа в DVCR в человекочитаемом формате.
-                    storedBytes:
-                      description: Размер образа в DVCR в байтах.
-                    unpacked:
-                      description: |
-                        Размер распакованного образа в человекочитаемом формате.
-                    unpackedBytes:
-                      description: |
-                        Размер распакованного образа в байтах.
-                cdrom:
-                  description: |
-                    Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д.
-                target:
-                  properties:
-                    registryURL:
-                      description: |
-                        Образ, созданный в DVCR.
-                phase:
-                  description: |
-                    Текущее состояние ресурса `VirtualImage`:
+                  * `ContainerRegistry` — использовать container registry (DVCR). В этом случае образы будут загружаться в контейнер, а затем в DVCR (поставляется с модулем виртуализации).
+          status:
+            properties:
+              attachedToVirtualMachines:
+                description: |
+                  Список виртуальных машин, использующих этот образ
+              cdrom:
+                description: |
+                  Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д.
+              downloadSpeed:
+                description: |
+                  Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
+                properties:
+                  avg:
+                    description: |
+                      Средняя скорость загрузки.
+                  avgBytes:
+                    description: |
+                      Средняя скорость загрузки в байтах в секунду.
+                  current:
+                    description: |
+                      Текущая скорость загрузки.
+                  currentBytes:
+                    description: |
+                      Текущая скорость загрузки в байтах в секунду.
+              failureMessage:
+                description: |
+                  Подробное описание ошибки.
+              failureReason:
+                description: |
+                  Краткое описание причины ошибки.
+              format:
+                description: |
+                  Обнаруженный формат образа.
+              phase:
+                description: |
+                  Текущее состояние ресурса `VirtualImage`:
 
-                    * Pending — ресурс был создан и находится в очереди ожидания.
-                    * Provisioning — идет процесс создания ресурса (копирование/загрузка/создание образа).
-                    * WaitForUserUpload — ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
-                    * Ready — ресурс создан и готов к использованию.
-                    * Failed — при создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
-                    * NotReady — невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован.
-                    * ImageLost — дочерний образ ресурса отсутствует. Ресурс не может быть использован.
-
-                progress:
-                  description: |
-                    Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
-                uploadCommand:
-                  description: |
-                    Команда для загрузки образа для типа 'Upload'.
-                failureReason:
-                  description: |
-                    Краткое описание причины ошибки.
-                failureMessage:
-                  description: |
-                    Подробное описание ошибки.
-                attachedToVirtualMachines:
-                  description: |
-                    Список виртуальных машин, использующих этот образ
+                  * Pending — ресурс был создан и находится в очереди ожидания.
+                  * Provisioning — идет процесс создания ресурса (копирование/загрузка/создание образа).
+                  * WaitForUserUpload — ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
+                  * Ready — ресурс создан и готов к использованию.
+                  * Failed — при создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
+                  * NotReady — невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован.
+                  * ImageLost — дочерний образ ресурса отсутствует. Ресурс не может быть использован.
+              progress:
+                description: |
+                  Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
+              size:
+                description: |
+                  Обнаруженные размеры образа.
+                properties:
+                  stored:
+                    description: |
+                      Размер образа в DVCR в человекочитаемом формате.
+                  storedBytes:
+                    description: Размер образа в DVCR в байтах.
+                  unpacked:
+                    description: |
+                      Размер распакованного образа в человекочитаемом формате.
+                  unpackedBytes:
+                    description: |
+                      Размер распакованного образа в байтах.
+              target:
+                properties:
+                  registryURL:
+                    description: |
+                      Образ, созданный в DVCR.
+              uploadCommand:
+                description: |
+                  Команда для загрузки образа для типа 'Upload'.
diff --git a/crds/doc-ru-virtualmachine.yaml b/crds/doc-ru-virtualmachine.yaml
index 623ecc22c..219fcdb1f 100644
--- a/crds/doc-ru-virtualmachine.yaml
+++ b/crds/doc-ru-virtualmachine.yaml
@@ -1,612 +1,596 @@
 spec:
   versions:
-    - name: v1alpha2
-      schema:
-        openAPIV3Schema:
-          description: |
-            Конфигурация виртуальной машины (ВМ).
-          properties:
-            spec:
-              properties:
-                provisioning:
-                  description: |
-                    Блок описания сценария начальной инициализации ВМ.
-                  properties:
-                    type:
-                      description: |
-                        Поддерживаемые параметры для использования сценария инициализации:
-
-                        * UserData — использовать сценарий cloud-init в секции .spec.provisioning.UserData.
-                        * UserDataRef — использовать сценарий cloud-init, который находится в другом ресурсе.
-                        * SysprepRef — использовать сценарий автоматизации установки Windows, который находится в другом ресурсе.
-
-                    userData:
-                      description: |
-                        Текст сценария cloud-init.
-
-                        Дополнительная информация: https://cloudinit.readthedocs.io/en/latest/reference/examples.html
-                    userDataRef:
-                      description: |
-                        Ссылка на существующий ресурс со сценарием cloud-init.
-
-                        Структура ресурса для типа userDataRef:
-
-                        * `.data.userData`
-                      properties:
-                        kind:
-                          description: |
-                            Тип ресурса.
-                        name:
-                          description: |
-                            Имя ресурса со сценарием cloud-init.
-                    sysprepRef:
-                      description: |
-                        Ссылка на существующий ресурс со сценарием автоматизации Windows.
-
-                        Структура ресурса для типа SysprepRef:
-
-                        * `.data.autounattend.xml`
-                        * `.data.unattend.xml`
-                      properties:
-                        kind:
-                          description: |
-                            Тип ресурса.
-                        name:
-                          description: |
-                            Имя ресурса со сценарием автоматизации.
-                runPolicy:
-                  description: |
-                    Этот параметр определяет политику запуска ВМ:
-
-                    * `AlwaysOn` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС.
-                    * `AlwaysOff` — после создания ВМ всегда находится в выключенном состоянии.
-                    * `Manual` — после создания ВМ выключается, состояние ВМ (включение/выключение) контролируется через API-сервисы или средствами ОС.
-                    * `AlwaysOnUnlessStoppedManually` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС, ВМ может быть выключена с помощью соответствующего API-сервиса.
-
-                virtualMachineIPAddressClaimName:
-                  description: |
-                    Имя для связанного ресурса `virtualMachineIPAddressClaim`.
-
-                    Указывается при необходимости использования ранее созданного IP-адреса ВМ.
-
-                    Если не указано явно, по умолчанию для ВМ создается ресурс `virtualMachineIPAddressClaim` с именем аналогичным ресурсу ВМ (`.metadata.name`).
-
-                topologySpreadConstraints:
-                  description: |
-                    [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/), как и в параметре pods `spec.topologySpreadConstraints` в Kubernetes.
-
-                  items:
+  - name: v1alpha2
+    schema:
+      openAPIV3Schema:
+        description: |
+          Конфигурация виртуальной машины (ВМ).
+        properties:
+          spec:
+            properties:
+              affinity:
+                description: |
+                  [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity), как и в параметре pods `spec.affinity` в Kubernetes.
+
+                  Настройка Affinity полностью аналогична приведенной выше документации, разница лишь в названиях некоторых параметров. Фактически, используются следующие аналоги:
+                  * podAffinity -> virtualMachineAndPodAffinity;
+                  * podAffinityTerm -> virtualMachineAndPodAffinityTerm.
+                properties:
+                  nodeAffinity:
+                    description: Описывает правила affiniy узлов для ВМ.
                     properties:
-                      labelSelector:
+                      preferredDuringSchedulingIgnoredDuringExecution:
                         description: ""
-                        properties:
-                          matchExpressions:
-                            description: ""
-                            items:
+                        items:
+                          description: ""
+                          properties:
+                            preference:
+                              description: ""
                               properties:
-                                key:
-                                  description: ""
-                                operator:
+                                matchExpressions:
                                   description: ""
-                                values:
+                                  items:
+                                    description: ""
+                                    properties:
+                                      key:
+                                        description: ""
+                                      operator:
+                                        description: ""
+                                      values:
+                                        description: ""
+                                        items:
+                                          description: ""
+                                matchFields:
                                   description: ""
                                   items:
                                     description: ""
-                          matchLabels:
-                            additionalProperties:
+                                    properties:
+                                      key:
+                                        description: ""
+                                      operator:
+                                        description: ""
+                                      values:
+                                        description: ""
+                                        items:
+                                          description: ""
+                            weight:
                               description: ""
-                            description: ""
-                      maxSkew:
-                        description: ""
-                      topologyKey:
-                        description: ""
-                      whenUnsatisfiable:
+                      requiredDuringSchedulingIgnoredDuringExecution:
                         description: ""
-
-                affinity:
-                  description: |
-                    [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity), как и в параметре pods `spec.affinity` в Kubernetes.
-
-                    Настройка Affinity полностью аналогична приведенной выше документации, разница лишь в названиях некоторых параметров. Фактически, используются следующие аналоги:
-                    * podAffinity -> virtualMachineAndPodAffinity;
-                    * podAffinityTerm -> virtualMachineAndPodAffinityTerm.
-                  properties:
-                    nodeAffinity:
-                      description: Описывает правила affiniy узлов для ВМ.
-                      properties:
-                        preferredDuringSchedulingIgnoredDuringExecution:
-                          description: ""
-                          items:
+                        properties:
+                          nodeSelectorTerms:
                             description: ""
-                            properties:
-                              preference:
-                                description: ""
-                                properties:
-                                  matchExpressions:
+                            items:
+                              description: ""
+                              properties:
+                                matchExpressions:
+                                  description: ""
+                                  items:
                                     description: ""
-                                    items:
-                                      description: ""
-                                      properties:
-                                        key:
-                                          description: ""
-                                        operator:
-                                          description: ""
-                                        values:
+                                    properties:
+                                      key:
+                                        description: ""
+                                      operator:
+                                        description: ""
+                                      values:
+                                        description: ""
+                                        items:
                                           description: ""
-                                          items:
-                                            description: ""
-                                  matchFields:
+                                matchFields:
+                                  description: ""
+                                  items:
                                     description: ""
-                                    items:
-                                      description: ""
-                                      properties:
-                                        key:
-                                          description: ""
-                                        operator:
-                                          description: ""
-                                        values:
+                                    properties:
+                                      key:
+                                        description: ""
+                                      operator:
+                                        description: ""
+                                      values:
+                                        description: ""
+                                        items:
                                           description: ""
-                                          items:
-                                            description: ""
-                              weight:
-                                description: ""
-                        requiredDuringSchedulingIgnoredDuringExecution:
+                  virtualMachineAndPodAffinity:
+                    description: Описывает правила affiniy подов и ВМ.
+                    properties:
+                      preferredDuringSchedulingIgnoredDuringExecution:
+                        description: ""
+                        items:
                           description: ""
                           properties:
-                            nodeSelectorTerms:
+                            virtualMachineAndPodAffinityTerm:
                               description: ""
-                              items:
-                                description: ""
-                                properties:
-                                  matchExpressions:
-                                    description: ""
-                                    items:
+                              properties:
+                                labelSelector:
+                                  description: ""
+                                  properties:
+                                    matchExpressions:
                                       description: ""
-                                      properties:
-                                        key:
-                                          description: ""
-                                        operator:
-                                          description: ""
-                                        values:
-                                          description: ""
-                                          items:
+                                      items:
+                                        description: ""
+                                        properties:
+                                          key:
                                             description: ""
-                                  matchFields:
-                                    description: ""
-                                    items:
-                                      description: ""
-                                      properties:
-                                        key:
-                                          description: ""
-                                        operator:
-                                          description: ""
-                                        values:
-                                          description: ""
-                                          items:
+                                          operator:
                                             description: ""
-                    virtualMachineAndPodAffinity:
-                      description: Описывает правила affiniy подов и ВМ.
-                      properties:
-                        preferredDuringSchedulingIgnoredDuringExecution:
-                          description: ""
-                          items:
-                            description: ""
-                            properties:
-                              virtualMachineAndPodAffinityTerm:
-                                description: ""
-                                properties:
-                                  labelSelector:
-                                    description: ""
-                                    properties:
-                                      matchExpressions:
-                                        description: ""
-                                        items:
-                                          description: ""
-                                          properties:
-                                            key:
-                                              description: ""
-                                            operator:
-                                              description: ""
-                                            values:
+                                          values:
+                                            description: ""
+                                            items:
                                               description: ""
-                                              items:
-                                                description: ""
-                                      matchLabels:
-                                        additionalProperties:
-                                          description: ""
+                                    matchLabels:
+                                      additionalProperties:
                                         description: ""
-                                  matchLabelKeys:
-                                    description: ""
-                                    items:
                                       description: ""
-                                  mismatchLabelKeys:
+                                matchLabelKeys:
+                                  description: ""
+                                  items:
                                     description: ""
-                                    items:
-                                      description: ""
-                                  namespaceSelector:
+                                mismatchLabelKeys:
+                                  description: ""
+                                  items:
                                     description: ""
-                                    properties:
-                                      matchExpressions:
+                                namespaceSelector:
+                                  description: ""
+                                  properties:
+                                    matchExpressions:
+                                      description: ""
+                                      items:
                                         description: ""
-                                        items:
-                                          description: ""
-                                          properties:
-                                            key:
-                                              description: ""
-                                            operator:
-                                              description: ""
-                                            values:
+                                        properties:
+                                          key:
+                                            description: ""
+                                          operator:
+                                            description: ""
+                                          values:
+                                            description: ""
+                                            items:
                                               description: ""
-                                              items:
-                                                description: ""
-                                      matchLabels:
-                                        additionalProperties:
-                                          description: ""
+                                    matchLabels:
+                                      additionalProperties:
                                         description: ""
-                                  namespaces:
-                                    description: ""
-                                    items:
                                       description: ""
-                                  topologyKey:
+                                namespaces:
+                                  description: ""
+                                  items:
                                     description: ""
-                              weight:
-                                description: ""
-                        requiredDuringSchedulingIgnoredDuringExecution:
+                                topologyKey:
+                                  description: ""
+                            weight:
+                              description: ""
+                      requiredDuringSchedulingIgnoredDuringExecution:
+                        description: ""
+                        items:
                           description: ""
-                          items:
-                            description: ""
-                            properties:
-                              labelSelector:
-                                description: ""
-                                properties:
-                                  matchExpressions:
+                          properties:
+                            labelSelector:
+                              description: ""
+                              properties:
+                                matchExpressions:
+                                  description: ""
+                                  items:
                                     description: ""
-                                    items:
-                                      description: ""
-                                      properties:
-                                        key:
-                                          description: ""
-                                        operator:
-                                          description: ""
-                                        values:
+                                    properties:
+                                      key:
+                                        description: ""
+                                      operator:
+                                        description: ""
+                                      values:
+                                        description: ""
+                                        items:
                                           description: ""
-                                          items:
-                                            description: ""
-                                  matchLabels:
-                                    additionalProperties:
-                                      description: ""
+                                matchLabels:
+                                  additionalProperties:
                                     description: ""
-                              matchLabelKeys:
-                                description: ""
-                                items:
                                   description: ""
-                              mismatchLabelKeys:
+                            matchLabelKeys:
+                              description: ""
+                              items:
                                 description: ""
-                                items:
-                                  description: ""
-                              namespaceSelector:
+                            mismatchLabelKeys:
+                              description: ""
+                              items:
                                 description: ""
-                                properties:
-                                  matchExpressions:
+                            namespaceSelector:
+                              description: ""
+                              properties:
+                                matchExpressions:
+                                  description: ""
+                                  items:
                                     description: ""
-                                    items:
-                                      description: ""
-                                      properties:
-                                        key:
-                                          description: ""
-                                        operator:
-                                          description: ""
-                                        values:
+                                    properties:
+                                      key:
+                                        description: ""
+                                      operator:
+                                        description: ""
+                                      values:
+                                        description: ""
+                                        items:
                                           description: ""
-                                          items:
-                                            description: ""
-                                  matchLabels:
-                                    additionalProperties:
-                                      description: ""
+                                matchLabels:
+                                  additionalProperties:
                                     description: ""
-                              namespaces:
-                                description: ""
-                                items:
                                   description: ""
-                              topologyKey:
+                            namespaces:
+                              description: ""
+                              items:
                                 description: ""
-                    virtualMachineAndPodAntiAffinity:
-                      description: Описывает правила anti-affiniy пода и ВМ.
-                      properties:
-                        preferredDuringSchedulingIgnoredDuringExecution:
+                            topologyKey:
+                              description: ""
+                  virtualMachineAndPodAntiAffinity:
+                    description: Описывает правила anti-affiniy пода и ВМ.
+                    properties:
+                      preferredDuringSchedulingIgnoredDuringExecution:
+                        description: ""
+                        items:
                           description: ""
-                          items:
-                            description: ""
-                            properties:
-                              virtualMachineAndPodAffinityTerm:
-                                description: ""
-                                properties:
-                                  labelSelector:
-                                    description: ""
-                                    properties:
-                                      matchExpressions:
+                          properties:
+                            virtualMachineAndPodAffinityTerm:
+                              description: ""
+                              properties:
+                                labelSelector:
+                                  description: ""
+                                  properties:
+                                    matchExpressions:
+                                      description: ""
+                                      items:
                                         description: ""
-                                        items:
-                                          description: ""
-                                          properties:
-                                            key:
-                                              description: ""
-                                            operator:
-                                              description: ""
-                                            values:
+                                        properties:
+                                          key:
+                                            description: ""
+                                          operator:
+                                            description: ""
+                                          values:
+                                            description: ""
+                                            items:
                                               description: ""
-                                              items:
-                                                description: ""
-                                      matchLabels:
-                                        additionalProperties:
-                                          description: ""
+                                    matchLabels:
+                                      additionalProperties:
                                         description: ""
-                                  matchLabelKeys:
-                                    description: ""
-                                    items:
                                       description: ""
-                                  mismatchLabelKeys:
+                                matchLabelKeys:
+                                  description: ""
+                                  items:
                                     description: ""
-                                    items:
-                                      description: ""
-                                  namespaceSelector:
+                                mismatchLabelKeys:
+                                  description: ""
+                                  items:
                                     description: ""
-                                    properties:
-                                      matchExpressions:
+                                namespaceSelector:
+                                  description: ""
+                                  properties:
+                                    matchExpressions:
+                                      description: ""
+                                      items:
                                         description: ""
-                                        items:
-                                          description: ""
-                                          properties:
-                                            key:
-                                              description: ""
-                                            operator:
-                                              description: ""
-                                            values:
+                                        properties:
+                                          key:
+                                            description: ""
+                                          operator:
+                                            description: ""
+                                          values:
+                                            description: ""
+                                            items:
                                               description: ""
-                                              items:
-                                                description: ""
-                                      matchLabels:
-                                        additionalProperties:
-                                          description: ""
+                                    matchLabels:
+                                      additionalProperties:
                                         description: ""
-                                  namespaces:
-                                    description: ""
-                                    items:
                                       description: ""
-                                  topologyKey:
+                                namespaces:
+                                  description: ""
+                                  items:
                                     description: ""
-                              weight:
-                                description: ""
-                        requiredDuringSchedulingIgnoredDuringExecution:
+                                topologyKey:
+                                  description: ""
+                            weight:
+                              description: ""
+                      requiredDuringSchedulingIgnoredDuringExecution:
+                        description: ""
+                        items:
                           description: ""
-                          items:
-                            description: ""
-                            properties:
-                              labelSelector:
-                                description: ""
-                                properties:
-                                  matchExpressions:
+                          properties:
+                            labelSelector:
+                              description: ""
+                              properties:
+                                matchExpressions:
+                                  description: ""
+                                  items:
                                     description: ""
-                                    items:
-                                      description: ""
-                                      properties:
-                                        key:
-                                          description: ""
-                                        operator:
-                                          description: ""
-                                        values:
+                                    properties:
+                                      key:
+                                        description: ""
+                                      operator:
+                                        description: ""
+                                      values:
+                                        description: ""
+                                        items:
                                           description: ""
-                                          items:
-                                            description: ""
-                                  matchLabels:
-                                    additionalProperties:
-                                      description: ""
+                                matchLabels:
+                                  additionalProperties:
                                     description: ""
-                              matchLabelKeys:
-                                description: ""
-                                items:
                                   description: ""
-                              mismatchLabelKeys:
+                            matchLabelKeys:
+                              description: ""
+                              items:
                                 description: ""
-                                items:
-                                  description: ""
-                              namespaceSelector:
+                            mismatchLabelKeys:
+                              description: ""
+                              items:
                                 description: ""
-                                properties:
-                                  matchExpressions:
+                            namespaceSelector:
+                              description: ""
+                              properties:
+                                matchExpressions:
+                                  description: ""
+                                  items:
                                     description: ""
-                                    items:
-                                      description: ""
-                                      properties:
-                                        key:
-                                          description: ""
-                                        operator:
-                                          description: ""
-                                        values:
+                                    properties:
+                                      key:
+                                        description: ""
+                                      operator:
+                                        description: ""
+                                      values:
+                                        description: ""
+                                        items:
                                           description: ""
-                                          items:
-                                            description: ""
-                                  matchLabels:
-                                    additionalProperties:
-                                      description: ""
+                                matchLabels:
+                                  additionalProperties:
                                     description: ""
-                              namespaces:
-                                description: ""
-                                items:
                                   description: ""
-                              topologyKey:
+                            namespaces:
+                              description: ""
+                              items:
                                 description: ""
+                            topologyKey:
+                              description: ""
+              blockDeviceRefs:
+                description: |
+                  Список блочных устройств, которые могут быть смонтированы в ВМ.
 
-                nodeSelector:
-                  description: |
-                    [По аналогии](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes//), как и в параметре pods `spec.nodeSelector` в Kubernetes.
-
-                priorityClassName:
-                  description: |
-                    [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/), как и в параметре pods `spec.priorityClassName` в Kubernetes.
-
-                tolerations:
-                  description: |
-                    [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/), как и в параметре pods `spec.tolerations` в Kubernetes.
-
-                  items:
-                    description: ""
-                    properties:
-                      effect:
-                        description: ""
-                      key:
-                        description: ""
-                      operator:
-                        description: ""
-                      tolerationSeconds:
-                        description: ""
-                      value:
-                        description: ""
-
-                disruptions:
-                  description: |
-                    Описании политики применения изменений, требующих перезагрузки ВМ.
-
-                    Изменение некоторых параметров конфигурации ВМ требуют перезагрузки ВМ для их применения. Данная политика позволяет задать поведения, как ВМ будет реагировать на такие изменения.
-                  properties:
-                    restartApprovalMode:
-                      description: |
-                        Режим одобрения для изменений, требующих перезагрузки ВМ:
-
-                        - `Manual` — изменения не будут применены, до тех пока пользователь самостоятельно не осуществит перезагрузку ВМ.
-                        - `Автоматический` — ВМ будет перезагружена, сразу, после сохранения параметров, требующих перезагрузки ВМ.
-
-                terminationGracePeriodSeconds:
-                  description: |
-                    Период ожидания после подачи сигнала (SIGTERM) о прекращении работы ВМ, по истечении которого ВМ принудительно завершается.
-
-                enableParavirtualization:
-                  description: |
-                    Использовать шину `virtio` для подключения виртуальных устройств ВМ. Установите значение false, чтобы отключить `virtio` для этой ВМ.
-
-                    Внимание: Для использования режима паравиртуализации некоторые ОС требуют установки соответствующих драйверов.
-
-
-                osType:
-                  description: |
-                    Параметр позволяет выбрать тип используемой ОС, для которой будет создана ВМ с оптимальным набором необходимых виртуальных устройств и параметров.
-
-                    * Windows — для ОС семейства Microsoft Windows.
-                    * Generic — для других типов ОС.
-
-                bootloader:
-                  description: |
-                    Загрузчик для VM:
-
-                    * BIOS — использовать BIOS.
-                    * EFI — использовать Unified Extensible Firmware (EFI/UEFI).
-                    * EFIWithSecureBoot — использовать UEFI/EFI с поддержкой SecureBoot.
-
-                cpu:
+                  Порядок загрузки определяется порядком в списке.
+                items:
                   description: |
-                    Блок определяет настройки ЦП для виртуальной машины.
+                    The reference to block device.
                   properties:
-                    virtualMachineCPUModelName:
-                      description: |
-                        Имя ресурса `virtualMachineCPUModelName`, определяющего модель процессора для виртуальной машины.
-                    cores:
-                      description: |
-                        Количество ядер.
-                    coreFraction:
+                    kind:
                       description: |
-                        Гарантированная доля времени ЦП, которая будет выделена ВМ. Указывается в процентах.
+                        Поддерживаемые типы:
 
-                memory:
-                  description: |
-                    Блок определяет настройки оперативной памяти для виртуальной машины.
-                  properties:
-                    size:
+                        * `ClusterVirtualImage` — использовать `ClusterVirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM.
+                        * `VirtualImage` — использовать `VirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM.
+                        * `VirtualDisk` — используйте `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме для чтения и записи (ReadWrite).
+                    name:
                       description: |
-                        Объем оперативной памяти.
-
-                blockDeviceRefs:
-                  description: |
-                    Список блочных устройств, которые могут быть смонтированы в ВМ.
-
-                    Порядок загрузки определяется порядком в списке.
-                  items:
+                        Имя ресурса заданного типа.
+              bootloader:
+                description: |
+                  Загрузчик для VM:
+
+                  * BIOS — использовать BIOS.
+                  * EFI — использовать Unified Extensible Firmware (EFI/UEFI).
+                  * EFIWithSecureBoot — использовать UEFI/EFI с поддержкой SecureBoot.
+              cpu:
+                description: |
+                  Блок определяет настройки ЦП для виртуальной машины.
+                properties:
+                  coreFraction:
+                    description: |
+                      Гарантированная доля времени ЦП, которая будет выделена ВМ. Указывается в процентах.
+                  cores:
+                    description: |
+                      Количество ядер.
+                  virtualMachineCPUModelName:
+                    description: |
+                      Имя ресурса `virtualMachineCPUModelName`, определяющего модель процессора для виртуальной машины.
+              disruptions:
+                description: |
+                  Описании политики применения изменений, требующих перезагрузки ВМ.
+
+                  Изменение некоторых параметров конфигурации ВМ требуют перезагрузки ВМ для их применения. Данная политика позволяет задать поведения, как ВМ будет реагировать на такие изменения.
+                properties:
+                  restartApprovalMode:
+                    description: |
+                      Режим одобрения для изменений, требующих перезагрузки ВМ:
+
+                      - `Manual` — изменения не будут применены, до тех пока пользователь самостоятельно не осуществит перезагрузку ВМ.
+                      - `Автоматический` — ВМ будет перезагружена, сразу, после сохранения параметров, требующих перезагрузки ВМ.
+              enableParavirtualization:
+                description: |
+                  Использовать шину `virtio` для подключения виртуальных устройств ВМ. Установите значение false, чтобы отключить `virtio` для этой ВМ.
+
+                  Внимание: Для использования режима паравиртуализации некоторые ОС требуют установки соответствующих драйверов.
+              memory:
+                description: |
+                  Блок определяет настройки оперативной памяти для виртуальной машины.
+                properties:
+                  size:
+                    description: |
+                      Объем оперативной памяти.
+              nodeSelector:
+                description: |
+                  [По аналогии](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes//), как и в параметре pods `spec.nodeSelector` в Kubernetes.
+              osType:
+                description: |
+                  Параметр позволяет выбрать тип используемой ОС, для которой будет создана ВМ с оптимальным набором необходимых виртуальных устройств и параметров.
+
+                  * Windows — для ОС семейства Microsoft Windows.
+                  * Generic — для других типов ОС.
+              priorityClassName:
+                description: |
+                  [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/), как и в параметре pods `spec.priorityClassName` в Kubernetes.
+              provisioning:
+                description: |
+                  Блок описания сценария начальной инициализации ВМ.
+                properties:
+                  sysprepRef:
+                    description: |
+                      Ссылка на существующий ресурс со сценарием автоматизации Windows.
+
+                      Структура ресурса для типа SysprepRef:
+
+                      * `.data.autounattend.xml`
+                      * `.data.unattend.xml`
                     properties:
                       kind:
                         description: |
-                          Поддерживаемые типы:
-
-                          * `ClusterVirtualImage` — использовать `ClusterVirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM.
-                          * `VirtualImage` — использовать `VirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM.
-                          * `VirtualDisk` — используйте `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме для чтения и записи (ReadWrite).
+                          Тип ресурса.
                       name:
                         description: |
-                          Имя ресурса заданного типа.
-            status:
-              properties:
-                guestOSInfo:
-                  description: |
-                    Информация об гостевой ОС, полученная от агента (QEMU Guest Agent). Агент должен быть предварительно установлен.
-
-                    Больше информации об агенте можно прочитать тут: https://www.qemu.org/docs/master/interop/qemu-ga.html.
-                phase:
-                  description: |
-                    Текущая фаза виртуальной машины:
-
-                    * `Scheduling` — ВМ запланирована для размещения на узлах кластера.
-                    * `Pending` — осуществляется процесс запуска ВМ.
-                    * `Running` — ВМ запущенна.
-                    * `Failed` — произошла ошибка в процессе запуска или работы ВМ.
-                    * `Terminating` — в настоящий момент ВМ завершает свою работу.
-                    * `Stopped` — ВМ остановлена.
-                nodeName:
-                  description: |
-                    Имя узла, на котором в данный момент запущена ВМ.
-                virtualMachineIPAddressClaimName:
-                  description: |
-                    Имя `virtualMachineIPAddressClaimName`, содержащее IP-адрес виртуальной машины.
-                ipAddress:
-                  description: |
-                    IP-адрес ВМ.
-                blockDeviceRefs:
-                  description: |
-                    Список блочных устройств, подключенных к ВМ.
-                  items:
+                          Имя ресурса со сценарием автоматизации.
+                  type:
+                    description: |
+                      Поддерживаемые параметры для использования сценария инициализации:
+
+                      * UserData — использовать сценарий cloud-init в секции .spec.provisioning.UserData.
+                      * UserDataRef — использовать сценарий cloud-init, который находится в другом ресурсе.
+                      * SysprepRef — использовать сценарий автоматизации установки Windows, который находится в другом ресурсе.
+                  userData:
+                    description: |
+                      Текст сценария cloud-init.
+
+                      Дополнительная информация: https://cloudinit.readthedocs.io/en/latest/reference/examples.html
+                  userDataRef:
+                    description: |
+                      Ссылка на существующий ресурс со сценарием cloud-init.
+
+                      Структура ресурса для типа userDataRef:
+
+                      * `.data.userData`
                     properties:
-                      hotpluggable:
-                        description: |
-                          Блочное устройство доступно для горячего подключения.
                       kind:
                         description: |
-                          Тип блочного устройства.
+                          Тип ресурса.
                       name:
                         description: |
-                          Имя существующего ресурса.
-                      target:
-                        description: |
-                          Название подключенного блочного устройства.
-                      size:
-                        description: |
-                          Размер подключенного блочного устройства.
-                conditions:
-                  description: |
-                    Состояния во время работы виртуальной машины.
-                  items:
-                    properties:
-                      lastProbeTime:
-                        description: ""
-                      lastTransitionTime:
-                        description: ""
-                      message:
-                        description: ""
-                      reason:
-                        description: ""
-                      status:
-                        description: ""
-                      type:
-                        description: ""
-                message:
-                  description: |
-                    Детальное описание состояния ВМ.
-                restartAwaitingChanges:
-                  description: |
-                    Список изменений в конфигурации, требующий перезапуска ВМ.
+                          Имя ресурса со сценарием cloud-init.
+              runPolicy:
+                description: |
+                  Этот параметр определяет политику запуска ВМ:
+
+                  * `AlwaysOn` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС.
+                  * `AlwaysOff` — после создания ВМ всегда находится в выключенном состоянии.
+                  * `Manual` — после создания ВМ выключается, состояние ВМ (включение/выключение) контролируется через API-сервисы или средствами ОС.
+                  * `AlwaysOnUnlessStoppedManually` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС, ВМ может быть выключена с помощью соответствующего API-сервиса.
+              terminationGracePeriodSeconds:
+                description: |
+                  Период ожидания после подачи сигнала (SIGTERM) о прекращении работы ВМ, по истечении которого ВМ принудительно завершается.
+              tolerations:
+                description: |
+                  [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/), как и в параметре pods `spec.tolerations` в Kubernetes.
+                items:
+                  description: ""
+                  properties:
+                    effect:
+                      description: ""
+                    key:
+                      description: ""
+                    operator:
+                      description: ""
+                    tolerationSeconds:
+                      description: ""
+                    value:
+                      description: ""
+              topologySpreadConstraints:
+                description: |
+                  [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/), как и в параметре pods `spec.topologySpreadConstraints` в Kubernetes.
+                items:
+                  properties:
+                    labelSelector:
+                      description: ""
+                      properties:
+                        matchExpressions:
+                          description: ""
+                          items:
+                            properties:
+                              key:
+                                description: ""
+                              operator:
+                                description: ""
+                              values:
+                                description: ""
+                                items:
+                                  description: ""
+                        matchLabels:
+                          additionalProperties:
+                            description: ""
+                          description: ""
+                    maxSkew:
+                      description: ""
+                    topologyKey:
+                      description: ""
+                    whenUnsatisfiable:
+                      description: ""
+              virtualMachineIPAddressClaimName:
+                description: |
+                  Имя для связанного ресурса `virtualMachineIPAddressClaim`.
+
+                  Указывается при необходимости использования ранее созданного IP-адреса ВМ.
+
+                  Если не указано явно, по умолчанию для ВМ создается ресурс `virtualMachineIPAddressClaim` с именем аналогичным ресурсу ВМ (`.metadata.name`).
+          status:
+            properties:
+              blockDeviceRefs:
+                description: |
+                  Список блочных устройств, подключенных к ВМ.
+                items:
+                  properties:
+                    hotpluggable:
+                      description: |
+                        Блочное устройство доступно для горячего подключения.
+                    kind:
+                      description: |
+                        Тип блочного устройства.
+                    name:
+                      description: |
+                        Имя существующего ресурса.
+                    size:
+                      description: |
+                        Размер подключенного блочного устройства.
+                    target:
+                      description: |
+                        Название подключенного блочного устройства.
+              conditions:
+                description: |
+                  Состояния во время работы виртуальной машины.
+                items:
+                  properties:
+                    lastProbeTime:
+                      description: ""
+                    lastTransitionTime:
+                      description: ""
+                    message:
+                      description: ""
+                    reason:
+                      description: ""
+                    status:
+                      description: ""
+                    type:
+                      description: ""
+              guestOSInfo:
+                description: |
+                  Информация об гостевой ОС, полученная от агента (QEMU Guest Agent). Агент должен быть предварительно установлен.
+
+                  Больше информации об агенте можно прочитать тут: https://www.qemu.org/docs/master/interop/qemu-ga.html.
+              ipAddress:
+                description: |
+                  IP-адрес ВМ.
+              message:
+                description: |
+                  Детальное описание состояния ВМ.
+              nodeName:
+                description: |
+                  Имя узла, на котором в данный момент запущена ВМ.
+              phase:
+                description: |
+                  Текущая фаза виртуальной машины:
+
+                  * `Scheduling` — ВМ запланирована для размещения на узлах кластера.
+                  * `Pending` — осуществляется процесс запуска ВМ.
+                  * `Running` — ВМ запущенна.
+                  * `Failed` — произошла ошибка в процессе запуска или работы ВМ.
+                  * `Terminating` — в настоящий момент ВМ завершает свою работу.
+                  * `Stopped` — ВМ остановлена.
+              restartAwaitingChanges:
+                description: |
+                  Список изменений в конфигурации, требующий перезапуска ВМ.
+              virtualMachineIPAddressClaimName:
+                description: |
+                  Имя `virtualMachineIPAddressClaimName`, содержащее IP-адрес виртуальной машины.
diff --git a/crds/doc-ru-virtualmachineblockdeviceattachment.yaml b/crds/doc-ru-virtualmachineblockdeviceattachment.yaml
index 83c055612..d31bcd1c8 100644
--- a/crds/doc-ru-virtualmachineblockdeviceattachment.yaml
+++ b/crds/doc-ru-virtualmachineblockdeviceattachment.yaml
@@ -1,43 +1,43 @@
 spec:
   versions:
-    - name: v1alpha2
-      schema:
-        openAPIV3Schema:
-          description: |
-            Ресурс обеспечивает возможность «горячего» подключения диска к ВМ.
-          properties:
-            spec:
-              properties:
-                virtualMachineName:
-                  description: |
-                    Имя виртуальной машины, к которой подключен диск.
-                blockDeviceRef:
-                  description: |
-                    Блочное устройство, которое будет подключено к ВМ в качестве диска hotPlug.
-                  properties:
-                    kind:
-                      description: |
-                        Тип блочного устройства. Возможны следующие варианты:
+  - name: v1alpha2
+    schema:
+      openAPIV3Schema:
+        description: |
+          Ресурс обеспечивает возможность «горячего» подключения диска к ВМ.
+        properties:
+          spec:
+            properties:
+              blockDeviceRef:
+                description: |
+                  Блочное устройство, которое будет подключено к ВМ в качестве диска hotPlug.
+                properties:
+                  kind:
+                    description: |
+                      Тип блочного устройства. Возможны следующие варианты:
 
-                        * `VirtualDisk` — использовать `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме RW.
-                    name:
-                      description: |
-                        Имя блочного устройства
-            status:
-              properties:
-                virtualMachineName:
-                  description: |
-                    Имя виртуальной машины, к которой подключен этот диск.
-                phase:
-                  description: |
-                    Фаза ресурса:
+                      * `VirtualDisk` — использовать `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме RW.
+                  name:
+                    description: |
+                      Имя блочного устройства
+              virtualMachineName:
+                description: |
+                  Имя виртуальной машины, к которой подключен диск.
+          status:
+            properties:
+              failureMessage:
+                description: |
+                  Подробное описание ошибки.
+              failureReason:
+                description: |
+                  Краткое описание причины ошибки.
+              phase:
+                description: |
+                  Фаза ресурса:
 
-                    * InProgress — диск в процессе подключения к ВМ.
-                    * Attached — диск подключен к ВМ.
-                    * Failed — возникла проблема с подключением диска. Смотрите `.status.failureReason`.
-                failureReason:
-                  description: |
-                    Краткое описание причины ошибки.
-                failureMessage:
-                  description: |
-                    Подробное описание ошибки.
+                  * InProgress — диск в процессе подключения к ВМ.
+                  * Attached — диск подключен к ВМ.
+                  * Failed — возникла проблема с подключением диска. Смотрите `.status.failureReason`.
+              virtualMachineName:
+                description: |
+                  Имя виртуальной машины, к которой подключен этот диск.
diff --git a/crds/doc-ru-virtualmachinecpumodel.yaml b/crds/doc-ru-virtualmachinecpumodel.yaml
index 3e68e43df..153127b0c 100644
--- a/crds/doc-ru-virtualmachinecpumodel.yaml
+++ b/crds/doc-ru-virtualmachinecpumodel.yaml
@@ -1,50 +1,46 @@
 spec:
   versions:
-    - name: v1alpha2
-      schema:
-        openAPIV3Schema:
-          description: |
-            Неизменяемый ресурс описывает модель процессора для использования в ВМ. Ресурс не может быть удален, пока он используется в одной из ВМ.
-          properties:
-            spec:
-              properties:
-                features:
-                  description: |
-                    Необходимые инструкции для процессора в виде списка Дополнительную информацию о поддерживаемых инструкциях можно найти [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
-                  items: {}
-                model:
-                  description: |
-                    Название модели процессора. Дополнительная информация о моделях [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
-                type:
-                  description: |
-                    В качестве типа ресурса, поддерживаются следующие варианты:
-                    * Host - использовать физический процессор хоста.
-                    * Модель - модель процессора. Модель процессора - это именованный и предварительно определенный набор поддерживаемых инструкций процессора.
-                    * Features - необходимый набор поддерживаемых инструкций для процессора.
-            status:
-              properties:
-                features:
-                  description: |
-                    Информация о поддерживаемых наборах инструкций процессора для данной модели.
-                    Отображается только для `type=Features`.
-                  properties:
-                    enabled:
-                      description: |
-                        Список наборов инструкций процессора для данной модели.
-                      items: {}
-                    notEnabledCommon:
-                      description: |
-                        Список неиспользуемых инструкций процессора, дополнительно доступных для данной группы узлов.
-                      items: {}
-                nodes:
-                  description: |
-                    Список узлов, поддерживающих данную модель процессора.
-                    Не отображается для `type=Host`.
-                  items: {}
-                phase:
-                  description: |
-                    Текущий статус ресурса `VirtualMachineCPUModel`:
-                    * Pending - ресурс находится в очереди на обработку.
-                    * InProgress - ресурс находится в процессе создания.
-                    * Ready - ресурс успешно создан.
-                    * Failed - в процессе создания ресурса произошла ошибка.
+  - name: v1alpha2
+    schema:
+      openAPIV3Schema:
+        description: |
+          Неизменяемый ресурс описывает модель процессора для использования в ВМ. Ресурс не может быть удален, пока он используется в одной из ВМ.
+        properties:
+          spec:
+            properties:
+              features:
+                description: |
+                  Необходимые инструкции для процессора в виде списка Дополнительную информацию о поддерживаемых инструкциях можно найти [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
+              model:
+                description: |
+                  Название модели процессора. Дополнительная информация о моделях [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
+              type:
+                description: |
+                  В качестве типа ресурса, поддерживаются следующие варианты:
+                  * Host - использовать физический процессор хоста.
+                  * Модель - модель процессора. Модель процессора - это именованный и предварительно определенный набор поддерживаемых инструкций процессора.
+                  * Features - необходимый набор поддерживаемых инструкций для процессора.
+          status:
+            properties:
+              features:
+                description: |
+                  Информация о поддерживаемых наборах инструкций процессора для данной модели.
+                  Отображается только для `type=Features`.
+                properties:
+                  enabled:
+                    description: |
+                      Список наборов инструкций процессора для данной модели.
+                  notEnabledCommon:
+                    description: |
+                      Список неиспользуемых инструкций процессора, дополнительно доступных для данной группы узлов.
+              nodes:
+                description: |
+                  Список узлов, поддерживающих данную модель процессора.
+                  Не отображается для `type=Host`.
+              phase:
+                description: |
+                  Текущий статус ресурса `VirtualMachineCPUModel`:
+                  * Pending - ресурс находится в очереди на обработку.
+                  * InProgress - ресурс находится в процессе создания.
+                  * Ready - ресурс успешно создан.
+                  * Failed - в процессе создания ресурса произошла ошибка.
diff --git a/crds/doc-ru-virtualmachineipaddressclaim.yaml b/crds/doc-ru-virtualmachineipaddressclaim.yaml
index 9a5c7ec83..0fbd97435 100644
--- a/crds/doc-ru-virtualmachineipaddressclaim.yaml
+++ b/crds/doc-ru-virtualmachineipaddressclaim.yaml
@@ -1,46 +1,46 @@
 spec:
   versions:
-    - name: v1alpha2
-      schema:
-        openAPIV3Schema:
-          description: |
-            Ресурс, определяющий IP-адрес для виртуальной машины.
-          properties:
-            spec:
-              description: |
-                Настройки `VirtualMachineIPAddressClaim`.
-              properties:
-                address:
-                  description: |
-                    Запрашиваемый IP-адрес. Если это значение не задано, будет назначен следующий доступный IP-адрес.
-                virtualMachineIPAddressLeaseName:
-                  description: |
-                    Имя выданного `VirtualMachineIPAddressLease`, управляется автоматически.
-                reclaimPolicy:
-                  description: |
-                    Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`.
+  - name: v1alpha2
+    schema:
+      openAPIV3Schema:
+        description: |
+          Ресурс, определяющий IP-адрес для виртуальной машины.
+        properties:
+          spec:
+            description: |
+              Настройки `VirtualMachineIPAddressClaim`.
+            properties:
+              address:
+                description: |
+                  Запрашиваемый IP-адрес. Если это значение не задано, будет назначен следующий доступный IP-адрес.
+              reclaimPolicy:
+                description: |
+                  Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`.
 
-                    * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`.
+                  * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`.
 
-                    * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную.
-            status:
-              description: |
-                Состояние ресурса `VirtualMachineIPAddressClaim`.
-              properties:
-                address:
-                  description: |
-                    Назначенный IP-адрес.
-                virtualMachineName:
-                  description: |
-                    Имя виртуальной машины, которая в настоящее время использует этот IP-адрес.
-                phase:
-                  description: |
-                    Представляет текущее состояние ресурса `VirtualMachineIPAddressClaim`.
+                  * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную.
+              virtualMachineIPAddressLeaseName:
+                description: |
+                  Имя выданного `VirtualMachineIPAddressLease`, управляется автоматически.
+          status:
+            description: |
+              Состояние ресурса `VirtualMachineIPAddressClaim`.
+            properties:
+              address:
+                description: |
+                  Назначенный IP-адрес.
+              conflictMessage:
+                description: |
+                  Подробное описание ошибки.
+              phase:
+                description: |
+                  Представляет текущее состояние ресурса `VirtualMachineIPAddressClaim`.
 
-                    * Pending - создание ресурса находится в процессе выполнения.
-                    * Bound - ресурс `VirtualMachineIPAddressClaim` привязан к ресурсу `VirtualMachineIPAddressLease`.
-                    * Lost - ресурс `VirtualMachineIPAddressClaim` потерял свойю связку с `VirtualMachineIPAddressLease`.
-                    * Conflict - `VirtualMachineIPAddressLease` уже привязан к другом ресурсу `VirtualMachineIPAddressClaim`.
-                conflictMessage:
-                  description: |
-                    Подробное описание ошибки.
+                  * Pending - создание ресурса находится в процессе выполнения.
+                  * Bound - ресурс `VirtualMachineIPAddressClaim` привязан к ресурсу `VirtualMachineIPAddressLease`.
+                  * Lost - ресурс `VirtualMachineIPAddressClaim` потерял свойю связку с `VirtualMachineIPAddressLease`.
+                  * Conflict - `VirtualMachineIPAddressLease` уже привязан к другом ресурсу `VirtualMachineIPAddressClaim`.
+              virtualMachineName:
+                description: |
+                  Имя виртуальной машины, которая в настоящее время использует этот IP-адрес.
diff --git a/crds/doc-ru-virtualmachineipaddresslease.yaml b/crds/doc-ru-virtualmachineipaddresslease.yaml
index 924337f14..3313d35d1 100644
--- a/crds/doc-ru-virtualmachineipaddresslease.yaml
+++ b/crds/doc-ru-virtualmachineipaddresslease.yaml
@@ -1,39 +1,39 @@
 spec:
   versions:
-    - name: v1alpha2
-      schema:
-        openAPIV3Schema:
-          description: |
-            Ресурс, определяющий факт выданной аренды для `VirtualMachineIPAddressClaim`.
-          properties:
-            spec:
-              description: |
-                Параметры конфигурации `VirtualMachineIPAddressLease`.
-              properties:
-                reclaimPolicy:
-                  description: |
-                    Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`.
+  - name: v1alpha2
+    schema:
+      openAPIV3Schema:
+        description: |
+          Ресурс, определяющий факт выданной аренды для `VirtualMachineIPAddressClaim`.
+        properties:
+          spec:
+            description: |
+              Параметры конфигурации `VirtualMachineIPAddressLease`.
+            properties:
+              claimRef:
+                description: |
+                  Ссылка на существующие `VirtualMachineIPAddressClaim`.
+                properties:
+                  name:
+                    description: |
+                      Имя ссылающегося `VirtualMachineIPAddressClaim`.
+                  namespace:
+                    description: |
+                      Пространство имен ссылающегося `VirtualMachineIPAddressClaim`.
+              reclaimPolicy:
+                description: |
+                  Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`.
 
-                    * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`.
+                  * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`.
 
-                    * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную.
-                claimRef:
-                  description: |
-                    Ссылка на существующие `VirtualMachineIPAddressClaim`.
-                  properties:
-                    name:
-                      description: |
-                        Имя ссылающегося `VirtualMachineIPAddressClaim`.
-                    namespace:
-                      description: |
-                        Пространство имен ссылающегося `VirtualMachineIPAddressClaim`.
-            status:
-              description: |
-                Состояние ресурса `VirtualMachineIPAddressLease`.
-              properties:
-                phase:
-                  description: |
-                    Представляет текущее состояние ресурса `VirtualMachineIPAddressLease`.
+                  * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную.
+          status:
+            description: |
+              Состояние ресурса `VirtualMachineIPAddressLease`.
+            properties:
+              phase:
+                description: |
+                  Представляет текущее состояние ресурса `VirtualMachineIPAddressLease`.
 
-                    * Bound - ресурс `VirtualMachineIPAddressLease` привязан к ресурсу `VirtualMachineIPAddressClaim`.
-                    * Released - ресурс `VirtualMachineIPAddressLease` доступен для связки с новым ресурсом `VirtualMachineIPAddressClaim`.
+                  * Bound - ресурс `VirtualMachineIPAddressLease` привязан к ресурсу `VirtualMachineIPAddressClaim`.
+                  * Released - ресурс `VirtualMachineIPAddressLease` доступен для связки с новым ресурсом `VirtualMachineIPAddressClaim`.

From 322f4fcad72643d9827ffea1345659bb9c6c372b Mon Sep 17 00:00:00 2001
From: Isteb4k <dmitry.rakitin@flant.com>
Date: Mon, 20 May 2024 13:40:06 +0200
Subject: [PATCH 11/13] test(vm): fix vm matching

Signed-off-by: Isteb4k <dmitry.rakitin@flant.com>
Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 .../pkg/controller/vm_reconciler_test.go             | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/images/virtualization-artifact/pkg/controller/vm_reconciler_test.go b/images/virtualization-artifact/pkg/controller/vm_reconciler_test.go
index b15e7a7d0..657b3a7bd 100644
--- a/images/virtualization-artifact/pkg/controller/vm_reconciler_test.go
+++ b/images/virtualization-artifact/pkg/controller/vm_reconciler_test.go
@@ -694,14 +694,14 @@ var _ = Describe("Apply VM changes with manual approval", func() {
 					"path":      Equal("cpu"),
 					"operation": Equal(string(vmchange.ChangeReplace)),
 					"currentValue": MatchAllKeys(Keys{
-						"virtualMachineCPUModel": BeEquivalentTo(vmcpuName),
-						"cores":                  BeEquivalentTo(cpuStartingCores),
-						"coreFraction":           Equal(cpuStartingCoreFraction),
+						"virtualMachineCPUModelName": BeEquivalentTo(vmcpuName),
+						"cores":                      BeEquivalentTo(cpuStartingCores),
+						"coreFraction":               Equal(cpuStartingCoreFraction),
 					}),
 					"desiredValue": MatchAllKeys(Keys{
-						"virtualMachineCPUModel": BeEquivalentTo(vmcpuName),
-						"cores":                  BeEquivalentTo(cpuNewCores),
-						"coreFraction":           Equal(cpuNewCoreFraction),
+						"virtualMachineCPUModelName": BeEquivalentTo(vmcpuName),
+						"cores":                      BeEquivalentTo(cpuNewCores),
+						"coreFraction":               Equal(cpuNewCoreFraction),
 					}),
 				}),
 				"memory.size": MatchAllKeys(Keys{

From 847eaff59d90977c90e9e88f0a6a729d91a47166 Mon Sep 17 00:00:00 2001
From: Isteb4k <dmitry.rakitin@flant.com>
Date: Mon, 20 May 2024 13:43:17 +0200
Subject: [PATCH 12/13] docs(api): fix linter warnings

Signed-off-by: Isteb4k <dmitry.rakitin@flant.com>
Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 crds/doc-ru-clustervirtualimage.yaml          |  312 ++---
 crds/doc-ru-virtualdisk.yaml                  |  276 ++---
 crds/doc-ru-virtualimage.yaml                 |  304 ++---
 crds/doc-ru-virtualmachine.yaml               | 1014 ++++++++---------
 ...u-virtualmachineblockdeviceattachment.yaml |   78 +-
 crds/doc-ru-virtualmachinecpumodel.yaml       |   88 +-
 crds/doc-ru-virtualmachineipaddressclaim.yaml |   82 +-
 crds/doc-ru-virtualmachineipaddresslease.yaml |   68 +-
 8 files changed, 1111 insertions(+), 1111 deletions(-)

diff --git a/crds/doc-ru-clustervirtualimage.yaml b/crds/doc-ru-clustervirtualimage.yaml
index 105e96c72..c678a9c4e 100644
--- a/crds/doc-ru-clustervirtualimage.yaml
+++ b/crds/doc-ru-clustervirtualimage.yaml
@@ -1,165 +1,165 @@
 spec:
   versions:
-  - name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        description: |
-          Описывает образ диска виртуальной машины, который может использоваться в качестве источника данных для новых `VirtualDisks` или установочный образ (iso), который быть смонтирован в `VirtualMachines` напрямую. Этот тип ресурса доступен для всех пространств имен в кластере.
+    - name: v1alpha2
+      schema:
+        openAPIV3Schema:
+          description: |
+            Описывает образ диска виртуальной машины, который может использоваться в качестве источника данных для новых `VirtualDisks` или установочный образ (iso), который быть смонтирован в `VirtualMachines` напрямую. Этот тип ресурса доступен для всех пространств имен в кластере.
 
-          > Этот ресурс не может быть изменен после его создания.
+            > Этот ресурс не может быть изменен после его создания.
 
-          Под капотом этого ресурса создается образ контейнера, который хранится в специальном container registry (DVCR).
-        properties:
-          spec:
-            properties:
-              dataSource:
-                description: |
-                  Тип источника, из которого будет создан образ.
-                properties:
-                  containerImage:
-                    description: |
-                      Использование образа, хранящегося во внешнем реестре контейнеров.
-                      Поддерживаются только реестры контейнеров с включенным TLS.
-                      При необходимости используйте поле caBundle, чтобы предоставить собственную цепочку центров сертификации.
-                    properties:
-                      caBundle:
-                        description: |
-                          Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
-                      image:
-                        description: |
-                          Путь к образу в container registry.
-                      imagePullSecret:
-                        properties:
-                          name:
-                            description: |
-                              Имя Secret'а, содержащего учетные данные для подключения к container registry.
-                          namespace:
-                            description: |
-                              Пространство имен, в котором находится imagePullSecret.
-                  http:
-                    description: |
-                      Создание образа из файла, опубликованного по URL. Поддерживаемые схемы:
+            Под капотом этого ресурса создается образ контейнера, который хранится в специальном container registry (DVCR).
+          properties:
+            spec:
+              properties:
+                dataSource:
+                  description: |
+                    Тип источника, из которого будет создан образ.
+                  properties:
+                    containerImage:
+                      description: |
+                        Использование образа, хранящегося во внешнем реестре контейнеров.
+                        Поддерживаются только реестры контейнеров с включенным TLS.
+                        При необходимости используйте поле caBundle, чтобы предоставить собственную цепочку центров сертификации.
+                      properties:
+                        caBundle:
+                          description: |
+                            Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
+                        image:
+                          description: |
+                            Путь к образу в container registry.
+                        imagePullSecret:
+                          properties:
+                            name:
+                              description: |
+                                Имя Secret'а, содержащего учетные данные для подключения к container registry.
+                            namespace:
+                              description: |
+                                Пространство имен, в котором находится imagePullSecret.
+                    http:
+                      description: |
+                        Создание образа из файла, опубликованного по URL. Поддерживаемые схемы:
 
-                      * HTTP;
-                      * HTTPS.
+                        * HTTP;
+                        * HTTPS.
 
-                      Для схемы HTTPS есть возможность отключить проверку TLS.
-                    properties:
-                      caBundle:
-                        description: |
-                          Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
-                      checksum:
-                        description: |
-                          Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
-                        properties:
-                          md5:
-                            description: ""
-                          sha256:
-                            description: ""
-                      insecureSkipVerify:
-                        description: |
-                          Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
-                      url:
-                        description: |
-                          Для образа расположенного по URL, поддерживаются следующие типы образов:
-                          * qcow2;
-                          * vmdk;
-                          * vdi;
-                          * iso;
-                          * raw.
+                        Для схемы HTTPS есть возможность отключить проверку TLS.
+                      properties:
+                        caBundle:
+                          description: |
+                            Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
+                        checksum:
+                          description: |
+                            Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
+                          properties:
+                            md5:
+                              description: ""
+                            sha256:
+                              description: ""
+                        insecureSkipVerify:
+                          description: |
+                            Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
+                        url:
+                          description: |
+                            Для образа расположенного по URL, поддерживаются следующие типы образов:
+                            * qcow2;
+                            * vmdk;
+                            * vdi;
+                            * iso;
+                            * raw.
 
-                          Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
-                          * gz;
-                          * xz.
-                  objectRef:
-                    description: |
-                      Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
-                    properties:
-                      kind:
-                        description: |
-                          Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
-                      name:
-                        description: |
-                          Имя существующего `VirtualImage` или `ClusterVirtualImage`.
-                      namespace:
-                        description: |
-                          Имя namespace'а, гда ресположен `VirtualImage`.
-                  type:
-                    description: |
-                      Доступные типы источников для создания образа:
+                            Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
+                            * gz;
+                            * xz.
+                    objectRef:
+                      description: |
+                        Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
+                      properties:
+                        kind:
+                          description: |
+                            Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
+                        name:
+                          description: |
+                            Имя существующего `VirtualImage` или `ClusterVirtualImage`.
+                        namespace:
+                          description: |
+                            Имя namespace'а, гда ресположен `VirtualImage`.
+                    type:
+                      description: |
+                        Доступные типы источников для создания образа:
 
-                      * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере.
-                      * `ContainerImage` — создать образ из образа в container registry.
-                      * `VirtualImage` — создать новый образ из существующего `VirtualImage`.
-                      * `ClusterVirtualImage` — создать новый образ из существующего `ClusterVirtualImage`.
-                      * `Upload` — загрузить образ вручную, через веб-интерфейс.
-          status:
-            properties:
-              attachedToVirtualMachines:
-                description: |
-                  Список виртуальных машин, использующих этот образ
-              cdrom:
-                description: |
-                  Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д.
-              downloadSpeed:
-                description: |
-                  Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
-                properties:
-                  avg:
-                    description: |
-                      Средняя скорость загрузки.
-                  avgBytes:
-                    description: |
-                      Средняя скорость загрузки в байтах в секунду.
-                  current:
-                    description: |
-                      Текущая скорость загрузки.
-                  currentBytes:
-                    description: |
-                      Текущая скорость загрузки в байтах в секунду.
-              failureMessage:
-                description: |
-                  Подробное описание ошибки.
-              failureReason:
-                description: |
-                  Краткое описание причины ошибки.
-              format:
-                description: |
-                  Обнаруженный формат образа.
-              phase:
-                description: |
-                  Текущее состояние ресурса `ClusterVirtualImage`:
+                        * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере.
+                        * `ContainerImage` — создать образ из образа в container registry.
+                        * `VirtualImage` — создать новый образ из существующего `VirtualImage`.
+                        * `ClusterVirtualImage` — создать новый образ из существующего `ClusterVirtualImage`.
+                        * `Upload` — загрузить образ вручную, через веб-интерфейс.
+            status:
+              properties:
+                attachedToVirtualMachines:
+                  description: |
+                    Список виртуальных машин, использующих этот образ
+                cdrom:
+                  description: |
+                    Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д.
+                downloadSpeed:
+                  description: |
+                    Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
+                  properties:
+                    avg:
+                      description: |
+                        Средняя скорость загрузки.
+                    avgBytes:
+                      description: |
+                        Средняя скорость загрузки в байтах в секунду.
+                    current:
+                      description: |
+                        Текущая скорость загрузки.
+                    currentBytes:
+                      description: |
+                        Текущая скорость загрузки в байтах в секунду.
+                failureMessage:
+                  description: |
+                    Подробное описание ошибки.
+                failureReason:
+                  description: |
+                    Краткое описание причины ошибки.
+                format:
+                  description: |
+                    Обнаруженный формат образа.
+                phase:
+                  description: |
+                    Текущее состояние ресурса `ClusterVirtualImage`:
 
-                  * Pending - Ресурс был создан и находится в очереди ожидания.
-                  * Provisioning - Идет процесс создания ресурса (копирование/загрузка/создание образа).
-                  * WaitForUserUpload - Ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
-                  * Ready - Ресурс создан и готов к использованию.
-                  * Failed - При создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
-                  * NotReady - Невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован.
-                  * ImageLost - Дочернее образ ресурса отсутствует. Ресурс не может быть использован.
-              progress:
-                description: |
-                  Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
-              size:
-                description: |
-                  Обнаруженные размеры образа.
-                properties:
-                  stored:
-                    description: |
-                      Размер образа в DVCR или PVC в человекочитаемом формате.
-                  storedBytes:
-                    description: Размер образа в DVCR или PVC в байтах.
-                  unpacked:
-                    description: |
-                      Размер распакованного образа в человекочитаемом формате.
-                  unpackedBytes:
-                    description: |
-                      Размер распакованного образа в байтах.
-              target:
-                properties:
-                  registryURL:
-                    description: |
-                      Образ, созданный в DVCR.
-              uploadCommand:
-                description: |
-                  Команда для загрузки образа для типа 'Upload'.
+                    * Pending - Ресурс был создан и находится в очереди ожидания.
+                    * Provisioning - Идет процесс создания ресурса (копирование/загрузка/создание образа).
+                    * WaitForUserUpload - Ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
+                    * Ready - Ресурс создан и готов к использованию.
+                    * Failed - При создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
+                    * NotReady - Невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован.
+                    * ImageLost - Дочернее образ ресурса отсутствует. Ресурс не может быть использован.
+                progress:
+                  description: |
+                    Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
+                size:
+                  description: |
+                    Обнаруженные размеры образа.
+                  properties:
+                    stored:
+                      description: |
+                        Размер образа в DVCR или PVC в человекочитаемом формате.
+                    storedBytes:
+                      description: Размер образа в DVCR или PVC в байтах.
+                    unpacked:
+                      description: |
+                        Размер распакованного образа в человекочитаемом формате.
+                    unpackedBytes:
+                      description: |
+                        Размер распакованного образа в байтах.
+                target:
+                  properties:
+                    registryURL:
+                      description: |
+                        Образ, созданный в DVCR.
+                uploadCommand:
+                  description: |
+                    Команда для загрузки образа для типа 'Upload'.
diff --git a/crds/doc-ru-virtualdisk.yaml b/crds/doc-ru-virtualdisk.yaml
index f64bf85c8..7f6e66f87 100644
--- a/crds/doc-ru-virtualdisk.yaml
+++ b/crds/doc-ru-virtualdisk.yaml
@@ -1,146 +1,146 @@
 spec:
   versions:
-  - name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        description: |
-          Описывает диск виртуальной машины, который может быть смонтирован в `VirtualMachines`. После создания ресурса изменить можно только размер диска `.spec.persistentVolumeClaim.size`, все остальные поля неизменяемы.
+    - name: v1alpha2
+      schema:
+        openAPIV3Schema:
+          description: |
+            Описывает диск виртуальной машины, который может быть смонтирован в `VirtualMachines`. После создания ресурса изменить можно только размер диска `.spec.persistentVolumeClaim.size`, все остальные поля неизменяемы.
 
-          Под капотом ресурса создается PVC, в который заливаются данные из источника.
-        properties:
-          spec:
-            properties:
-              dataSource:
-                description: |
-                  Тип источника, из которого будет создан диск. Если источник (.spec.dataSource) отсутствует, то будет создан пустой диск.
-                properties:
-                  containerImage:
-                    description: |
-                      Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов.
-                    properties:
-                      caBundle:
-                        description: |
-                          Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
-                      image:
-                        description: |
-                          Путь к образу в container registry.
-                      imagePullSecret:
-                        properties:
-                          name:
-                            description: |
-                              Имя Secret'а, содержащего учетные данные для подключения к container registry.
-                  http:
-                    description: |
-                      Создать диск из файла, опубликованного по URL. Поддерживаемые схемы:
+            Под капотом ресурса создается PVC, в который заливаются данные из источника.
+          properties:
+            spec:
+              properties:
+                dataSource:
+                  description: |
+                    Тип источника, из которого будет создан диск. Если источник (.spec.dataSource) отсутствует, то будет создан пустой диск.
+                  properties:
+                    containerImage:
+                      description: |
+                        Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов.
+                      properties:
+                        caBundle:
+                          description: |
+                            Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
+                        image:
+                          description: |
+                            Путь к образу в container registry.
+                        imagePullSecret:
+                          properties:
+                            name:
+                              description: |
+                                Имя Secret'а, содержащего учетные данные для подключения к container registry.
+                    http:
+                      description: |
+                        Создать диск из файла, опубликованного по URL. Поддерживаемые схемы:
 
-                      * HTTP;
-                      * HTTPS.
+                        * HTTP;
+                        * HTTPS.
 
-                      Для схемы HTTPS есть возможность пропустить проверку TLS.
-                    properties:
-                      caBundle:
-                        description: |
-                          Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
-                      checksum:
-                        description: |
-                          Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
-                        properties:
-                          md5:
-                            description: ""
-                          sha256:
-                            description: ""
-                      insecureSkipVerify:
-                        description: |
-                          Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
-                      url:
-                        description: |
-                          URL с образом. Поддерживаются следующие типы образов:
-                          * qcow2;
-                          * vmdk;
-                          * vdi;
-                          * iso;
-                          * raw.
+                        Для схемы HTTPS есть возможность пропустить проверку TLS.
+                      properties:
+                        caBundle:
+                          description: |
+                            Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
+                        checksum:
+                          description: |
+                            Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
+                          properties:
+                            md5:
+                              description: ""
+                            sha256:
+                              description: ""
+                        insecureSkipVerify:
+                          description: |
+                            Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
+                        url:
+                          description: |
+                            URL с образом. Поддерживаются следующие типы образов:
+                            * qcow2;
+                            * vmdk;
+                            * vdi;
+                            * iso;
+                            * raw.
 
-                          Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
-                          * gz;
-                          * xz.
-                  objectRef:
-                    description: |
-                      Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
-                    properties:
-                      kind:
-                        description: |
-                          Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
-                      name:
-                        description: |
-                          Имя существующего `VirtualImage` или `ClusterVirtualImage`.
-                  type:
-                    description: |
-                      Тип источника, из которого будет создан диск:
+                            Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
+                            * gz;
+                            * xz.
+                    objectRef:
+                      description: |
+                        Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
+                      properties:
+                        kind:
+                          description: |
+                            Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
+                        name:
+                          description: |
+                            Имя существующего `VirtualImage` или `ClusterVirtualImage`.
+                    type:
+                      description: |
+                        Тип источника, из которого будет создан диск:
 
-                      * `HTTP` — создать диск из файла, опубликованного на HTTP/HTTPS-сервере.
-                      * `ContainerImage` — создать диск из образа в container registry.
-                      * `VirtualImage` — создать диск из существующего `VirtualImage`.
-                      * `ClusterVirtualImage` — создать диск из существующего `ClusterVirtualImage`.
-                      * `Upload` — загрузить образ диска вручную, через веб-интерфейс.
-              persistentVolumeClaim:
-                description: |
-                  Настройки для создания PVC для хранения диска.
-                properties:
-                  size:
-                    description: |
-                      Желаемый размер PVC для хранения диска. Если диск создается из образа, то размер должен быть не меньше, чем исходный образ в распакованном состоянии.
-                  storageClassName:
-                    description: |
-                      Имя класса StorageClass, требуемого для PersistentVolumeClaim. Дополнительная информация — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1.
-          status:
-            properties:
-              attachedToVirtualMachines:
-                description: |
-                  Список виртуальных машин, использующих этот диск
-              capacity:
-                description: |
-                  Емкость PVC в человекочитаемом формате.
-              downloadSpeed:
-                description: |
-                  Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
-                properties:
-                  avg:
-                    description: |
-                      Средняя скорость загрузки.
-                  avgBytes:
-                    description: |
-                      Средняя скорость загрузки в байтах в секунду.
-                  current:
-                    description: |
-                      Текущая скорость загрузки.
-                  currentBytes:
-                    description: |
-                      Текущая скорость загрузки в байтах в секунду.
-              failureMessage:
-                description: |
-                  Подробное описание ошибки.
-              failureReason:
-                description: |
-                  Краткое описание причины ошибки.
-              phase:
-                description: |
-                  Текущее состояние ресурса `VirtualDisk`:
+                        * `HTTP` — создать диск из файла, опубликованного на HTTP/HTTPS-сервере.
+                        * `ContainerImage` — создать диск из образа в container registry.
+                        * `VirtualImage` — создать диск из существующего `VirtualImage`.
+                        * `ClusterVirtualImage` — создать диск из существующего `ClusterVirtualImage`.
+                        * `Upload` — загрузить образ диска вручную, через веб-интерфейс.
+                persistentVolumeClaim:
+                  description: |
+                    Настройки для создания PVC для хранения диска.
+                  properties:
+                    size:
+                      description: |
+                        Желаемый размер PVC для хранения диска. Если диск создается из образа, то размер должен быть не меньше, чем исходный образ в распакованном состоянии.
+                    storageClassName:
+                      description: |
+                        Имя класса StorageClass, требуемого для PersistentVolumeClaim. Дополнительная информация — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1.
+            status:
+              properties:
+                attachedToVirtualMachines:
+                  description: |
+                    Список виртуальных машин, использующих этот диск
+                capacity:
+                  description: |
+                    Емкость PVC в человекочитаемом формате.
+                downloadSpeed:
+                  description: |
+                    Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
+                  properties:
+                    avg:
+                      description: |
+                        Средняя скорость загрузки.
+                    avgBytes:
+                      description: |
+                        Средняя скорость загрузки в байтах в секунду.
+                    current:
+                      description: |
+                        Текущая скорость загрузки.
+                    currentBytes:
+                      description: |
+                        Текущая скорость загрузки в байтах в секунду.
+                failureMessage:
+                  description: |
+                    Подробное описание ошибки.
+                failureReason:
+                  description: |
+                    Краткое описание причины ошибки.
+                phase:
+                  description: |
+                    Текущее состояние ресурса `VirtualDisk`:
 
-                  * Pending — ресурс был создан и находится в очереди ожидания.
-                  * Provisioning — идет процесс создания ресурса (копирование/загрузка/создание образа).
-                  * WaitForUserUpload — ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
-                  * Ready — ресурс создан и готов к использованию.
-                  * Failed — при создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
-                  * PVCLost — дочерний PVC ресурса отсутствует. Ресурс не может быть использован.
-              progress:
-                description: |
-                  Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
-              target:
-                properties:
-                  persistentVolumeClaimName:
-                    description: |
-                      Имя созданного PersistentVolumeClaim для хранилища Kubernetes.
-              uploadCommand:
-                description: |
-                  Команда для загрузки образа для типа 'Upload'.
+                    * Pending — ресурс был создан и находится в очереди ожидания.
+                    * Provisioning — идет процесс создания ресурса (копирование/загрузка/создание образа).
+                    * WaitForUserUpload — ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
+                    * Ready — ресурс создан и готов к использованию.
+                    * Failed — при создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
+                    * PVCLost — дочерний PVC ресурса отсутствует. Ресурс не может быть использован.
+                progress:
+                  description: |
+                    Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
+                target:
+                  properties:
+                    persistentVolumeClaimName:
+                      description: |
+                        Имя созданного PersistentVolumeClaim для хранилища Kubernetes.
+                uploadCommand:
+                  description: |
+                    Команда для загрузки образа для типа 'Upload'.
diff --git a/crds/doc-ru-virtualimage.yaml b/crds/doc-ru-virtualimage.yaml
index 826239729..0e6af2da9 100644
--- a/crds/doc-ru-virtualimage.yaml
+++ b/crds/doc-ru-virtualimage.yaml
@@ -1,162 +1,162 @@
 spec:
   versions:
-  - name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        description: |
-          Описывает образ диска виртуальной машины, который может использоваться в качестве источника данных для новых `VirtualDisks` или установочный образ (iso), который быть смонтирован в `VirtualMachines` напрямую.
+    - name: v1alpha2
+      schema:
+        openAPIV3Schema:
+          description: |
+            Описывает образ диска виртуальной машины, который может использоваться в качестве источника данных для новых `VirtualDisks` или установочный образ (iso), который быть смонтирован в `VirtualMachines` напрямую.
 
-          > Этот ресурс не может быть изменен после его создания.
+            > Этот ресурс не может быть изменен после его создания.
 
-          Под капотом этого ресурса создается образ контейнера, хранящийся в специальном container registry (DVCR).
-        properties:
-          spec:
-            properties:
-              dataSource:
-                description: |
-                  Тип источника, из которого будет создан образ.
-                properties:
-                  containerImage:
-                    description: |
-                      Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов.
-                    properties:
-                      caBundle:
-                        description: |
-                          Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
-                      image:
-                        description: |
-                          Путь к образу в container registry.
-                      imagePullSecret:
-                        properties:
-                          name:
-                            description: |
-                              Имя Secret'а, содержащего учетные данные для подключения к container registry.
-                  http:
-                    description: |
-                      Создать образ из файла, опубликованного по URL. Поддерживаемые схемы:
+            Под капотом этого ресурса создается образ контейнера, хранящийся в специальном container registry (DVCR).
+          properties:
+            spec:
+              properties:
+                dataSource:
+                  description: |
+                    Тип источника, из которого будет создан образ.
+                  properties:
+                    containerImage:
+                      description: |
+                        Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов.
+                      properties:
+                        caBundle:
+                          description: |
+                            Цепочка сертификатов в формате Base64 для проверки подключения к container registry.
+                        image:
+                          description: |
+                            Путь к образу в container registry.
+                        imagePullSecret:
+                          properties:
+                            name:
+                              description: |
+                                Имя Secret'а, содержащего учетные данные для подключения к container registry.
+                    http:
+                      description: |
+                        Создать образ из файла, опубликованного по URL. Поддерживаемые схемы:
 
-                      * HTTP;
-                      * HTTPS.
+                        * HTTP;
+                        * HTTPS.
 
-                      Для схемы HTTPS есть возможность пропустить проверку TLS.
-                    properties:
-                      caBundle:
-                        description: |
-                          Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
-                      checksum:
-                        description: |
-                          Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
-                        properties:
-                          md5:
-                            description: ""
-                          sha256:
-                            description: ""
-                      insecureSkipVerify:
-                        description: |
-                          Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
-                      url:
-                        description: |
-                          URL с образом. Поддерживаются следующие типы образов:
-                          * qcow2;
-                          * vmdk;
-                          * vdi;
-                          * iso;
-                          * raw.
+                        Для схемы HTTPS есть возможность пропустить проверку TLS.
+                      properties:
+                        caBundle:
+                          description: |
+                            Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ.
+                        checksum:
+                          description: |
+                            Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам.
+                          properties:
+                            md5:
+                              description: ""
+                            sha256:
+                              description: ""
+                        insecureSkipVerify:
+                          description: |
+                            Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах).
+                        url:
+                          description: |
+                            URL с образом. Поддерживаются следующие типы образов:
+                            * qcow2;
+                            * vmdk;
+                            * vdi;
+                            * iso;
+                            * raw.
 
-                          Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
-                          * gz;
-                          * xz.
-                  objectRef:
-                    description: |
-                      Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
-                    properties:
-                      kind:
-                        description: |
-                          Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
-                      name:
-                        description: |
-                          Имя существующего `VirtualImage` или `ClusterVirtualImage`.
-                  type:
-                    description: |
-                      Тип источника, из которого будет создан образ:
+                            Для всех представленных типов образов поддерживается сжатие образов в следующих форматах:
+                            * gz;
+                            * xz.
+                    objectRef:
+                      description: |
+                        Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`.
+                      properties:
+                        kind:
+                          description: |
+                            Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`.
+                        name:
+                          description: |
+                            Имя существующего `VirtualImage` или `ClusterVirtualImage`.
+                    type:
+                      description: |
+                        Тип источника, из которого будет создан образ:
 
-                      * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере.
-                      * `ContainerImage` — создать образ из образа в container registry.
-                      * `VirtualImage` — создать образ из другого существующего `VirtualImage`.
-                      * `ClusterVirtualImage` — создать образ из другого существующего `ClusterVirtualImage`.
-                      * `Upload` — загрузить образ вручную, через веб-интерфейс.
-              storage:
-                description: |
-                  Тип хранилища для хранения образа:
+                        * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере.
+                        * `ContainerImage` — создать образ из образа в container registry.
+                        * `VirtualImage` — создать образ из другого существующего `VirtualImage`.
+                        * `ClusterVirtualImage` — создать образ из другого существующего `ClusterVirtualImage`.
+                        * `Upload` — загрузить образ вручную, через веб-интерфейс.
+                storage:
+                  description: |
+                    Тип хранилища для хранения образа:
 
-                  * `ContainerRegistry` — использовать container registry (DVCR). В этом случае образы будут загружаться в контейнер, а затем в DVCR (поставляется с модулем виртуализации).
-          status:
-            properties:
-              attachedToVirtualMachines:
-                description: |
-                  Список виртуальных машин, использующих этот образ
-              cdrom:
-                description: |
-                  Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д.
-              downloadSpeed:
-                description: |
-                  Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
-                properties:
-                  avg:
-                    description: |
-                      Средняя скорость загрузки.
-                  avgBytes:
-                    description: |
-                      Средняя скорость загрузки в байтах в секунду.
-                  current:
-                    description: |
-                      Текущая скорость загрузки.
-                  currentBytes:
-                    description: |
-                      Текущая скорость загрузки в байтах в секунду.
-              failureMessage:
-                description: |
-                  Подробное описание ошибки.
-              failureReason:
-                description: |
-                  Краткое описание причины ошибки.
-              format:
-                description: |
-                  Обнаруженный формат образа.
-              phase:
-                description: |
-                  Текущее состояние ресурса `VirtualImage`:
+                    * `ContainerRegistry` — использовать container registry (DVCR). В этом случае образы будут загружаться в контейнер, а затем в DVCR (поставляется с модулем виртуализации).
+            status:
+              properties:
+                attachedToVirtualMachines:
+                  description: |
+                    Список виртуальных машин, использующих этот образ
+                cdrom:
+                  description: |
+                    Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д.
+                downloadSpeed:
+                  description: |
+                    Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`.
+                  properties:
+                    avg:
+                      description: |
+                        Средняя скорость загрузки.
+                    avgBytes:
+                      description: |
+                        Средняя скорость загрузки в байтах в секунду.
+                    current:
+                      description: |
+                        Текущая скорость загрузки.
+                    currentBytes:
+                      description: |
+                        Текущая скорость загрузки в байтах в секунду.
+                failureMessage:
+                  description: |
+                    Подробное описание ошибки.
+                failureReason:
+                  description: |
+                    Краткое описание причины ошибки.
+                format:
+                  description: |
+                    Обнаруженный формат образа.
+                phase:
+                  description: |
+                    Текущее состояние ресурса `VirtualImage`:
 
-                  * Pending — ресурс был создан и находится в очереди ожидания.
-                  * Provisioning — идет процесс создания ресурса (копирование/загрузка/создание образа).
-                  * WaitForUserUpload — ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
-                  * Ready — ресурс создан и готов к использованию.
-                  * Failed — при создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
-                  * NotReady — невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован.
-                  * ImageLost — дочерний образ ресурса отсутствует. Ресурс не может быть использован.
-              progress:
-                description: |
-                  Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
-              size:
-                description: |
-                  Обнаруженные размеры образа.
-                properties:
-                  stored:
-                    description: |
-                      Размер образа в DVCR в человекочитаемом формате.
-                  storedBytes:
-                    description: Размер образа в DVCR в байтах.
-                  unpacked:
-                    description: |
-                      Размер распакованного образа в человекочитаемом формате.
-                  unpackedBytes:
-                    description: |
-                      Размер распакованного образа в байтах.
-              target:
-                properties:
-                  registryURL:
-                    description: |
-                      Образ, созданный в DVCR.
-              uploadCommand:
-                description: |
-                  Команда для загрузки образа для типа 'Upload'.
+                    * Pending — ресурс был создан и находится в очереди ожидания.
+                    * Provisioning — идет процесс создания ресурса (копирование/загрузка/создание образа).
+                    * WaitForUserUpload — ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`.
+                    * Ready — ресурс создан и готов к использованию.
+                    * Failed — при создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`.
+                    * NotReady — невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован.
+                    * ImageLost — дочерний образ ресурса отсутствует. Ресурс не может быть использован.
+                progress:
+                  description: |
+                    Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`.
+                size:
+                  description: |
+                    Обнаруженные размеры образа.
+                  properties:
+                    stored:
+                      description: |
+                        Размер образа в DVCR в человекочитаемом формате.
+                    storedBytes:
+                      description: Размер образа в DVCR в байтах.
+                    unpacked:
+                      description: |
+                        Размер распакованного образа в человекочитаемом формате.
+                    unpackedBytes:
+                      description: |
+                        Размер распакованного образа в байтах.
+                target:
+                  properties:
+                    registryURL:
+                      description: |
+                        Образ, созданный в DVCR.
+                uploadCommand:
+                  description: |
+                    Команда для загрузки образа для типа 'Upload'.
diff --git a/crds/doc-ru-virtualmachine.yaml b/crds/doc-ru-virtualmachine.yaml
index 219fcdb1f..bc7ef7237 100644
--- a/crds/doc-ru-virtualmachine.yaml
+++ b/crds/doc-ru-virtualmachine.yaml
@@ -1,596 +1,596 @@
 spec:
   versions:
-  - name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        description: |
-          Конфигурация виртуальной машины (ВМ).
-        properties:
-          spec:
-            properties:
-              affinity:
-                description: |
-                  [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity), как и в параметре pods `spec.affinity` в Kubernetes.
+    - name: v1alpha2
+      schema:
+        openAPIV3Schema:
+          description: |
+            Конфигурация виртуальной машины (ВМ).
+          properties:
+            spec:
+              properties:
+                affinity:
+                  description: |
+                    [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity), как и в параметре pods `spec.affinity` в Kubernetes.
 
-                  Настройка Affinity полностью аналогична приведенной выше документации, разница лишь в названиях некоторых параметров. Фактически, используются следующие аналоги:
-                  * podAffinity -> virtualMachineAndPodAffinity;
-                  * podAffinityTerm -> virtualMachineAndPodAffinityTerm.
-                properties:
-                  nodeAffinity:
-                    description: Описывает правила affiniy узлов для ВМ.
-                    properties:
-                      preferredDuringSchedulingIgnoredDuringExecution:
-                        description: ""
-                        items:
+                    Настройка Affinity полностью аналогична приведенной выше документации, разница лишь в названиях некоторых параметров. Фактически, используются следующие аналоги:
+                    * podAffinity -> virtualMachineAndPodAffinity;
+                    * podAffinityTerm -> virtualMachineAndPodAffinityTerm.
+                  properties:
+                    nodeAffinity:
+                      description: Описывает правила affiniy узлов для ВМ.
+                      properties:
+                        preferredDuringSchedulingIgnoredDuringExecution:
+                          description: ""
+                          items:
+                            description: ""
+                            properties:
+                              preference:
+                                description: ""
+                                properties:
+                                  matchExpressions:
+                                    description: ""
+                                    items:
+                                      description: ""
+                                      properties:
+                                        key:
+                                          description: ""
+                                        operator:
+                                          description: ""
+                                        values:
+                                          description: ""
+                                          items:
+                                            description: ""
+                                  matchFields:
+                                    description: ""
+                                    items:
+                                      description: ""
+                                      properties:
+                                        key:
+                                          description: ""
+                                        operator:
+                                          description: ""
+                                        values:
+                                          description: ""
+                                          items:
+                                            description: ""
+                              weight:
+                                description: ""
+                        requiredDuringSchedulingIgnoredDuringExecution:
                           description: ""
                           properties:
-                            preference:
+                            nodeSelectorTerms:
                               description: ""
-                              properties:
-                                matchExpressions:
-                                  description: ""
-                                  items:
+                              items:
+                                description: ""
+                                properties:
+                                  matchExpressions:
                                     description: ""
-                                    properties:
-                                      key:
-                                        description: ""
-                                      operator:
-                                        description: ""
-                                      values:
-                                        description: ""
-                                        items:
+                                    items:
+                                      description: ""
+                                      properties:
+                                        key:
                                           description: ""
-                                matchFields:
-                                  description: ""
-                                  items:
+                                        operator:
+                                          description: ""
+                                        values:
+                                          description: ""
+                                          items:
+                                            description: ""
+                                  matchFields:
                                     description: ""
-                                    properties:
-                                      key:
-                                        description: ""
-                                      operator:
-                                        description: ""
-                                      values:
-                                        description: ""
-                                        items:
+                                    items:
+                                      description: ""
+                                      properties:
+                                        key:
                                           description: ""
-                            weight:
-                              description: ""
-                      requiredDuringSchedulingIgnoredDuringExecution:
-                        description: ""
-                        properties:
-                          nodeSelectorTerms:
+                                        operator:
+                                          description: ""
+                                        values:
+                                          description: ""
+                                          items:
+                                            description: ""
+                    virtualMachineAndPodAffinity:
+                      description: Описывает правила affiniy подов и ВМ.
+                      properties:
+                        preferredDuringSchedulingIgnoredDuringExecution:
+                          description: ""
+                          items:
                             description: ""
-                            items:
-                              description: ""
-                              properties:
-                                matchExpressions:
-                                  description: ""
-                                  items:
+                            properties:
+                              virtualMachineAndPodAffinityTerm:
+                                description: ""
+                                properties:
+                                  labelSelector:
                                     description: ""
                                     properties:
-                                      key:
-                                        description: ""
-                                      operator:
-                                        description: ""
-                                      values:
+                                      matchExpressions:
                                         description: ""
                                         items:
                                           description: ""
-                                matchFields:
-                                  description: ""
-                                  items:
+                                          properties:
+                                            key:
+                                              description: ""
+                                            operator:
+                                              description: ""
+                                            values:
+                                              description: ""
+                                              items:
+                                                description: ""
+                                      matchLabels:
+                                        additionalProperties:
+                                          description: ""
+                                        description: ""
+                                  matchLabelKeys:
+                                    description: ""
+                                    items:
+                                      description: ""
+                                  mismatchLabelKeys:
+                                    description: ""
+                                    items:
+                                      description: ""
+                                  namespaceSelector:
                                     description: ""
                                     properties:
-                                      key:
-                                        description: ""
-                                      operator:
-                                        description: ""
-                                      values:
+                                      matchExpressions:
                                         description: ""
                                         items:
                                           description: ""
-                  virtualMachineAndPodAffinity:
-                    description: Описывает правила affiniy подов и ВМ.
-                    properties:
-                      preferredDuringSchedulingIgnoredDuringExecution:
-                        description: ""
-                        items:
-                          description: ""
-                          properties:
-                            virtualMachineAndPodAffinityTerm:
-                              description: ""
-                              properties:
-                                labelSelector:
-                                  description: ""
-                                  properties:
-                                    matchExpressions:
-                                      description: ""
-                                      items:
-                                        description: ""
-                                        properties:
-                                          key:
-                                            description: ""
-                                          operator:
-                                            description: ""
-                                          values:
-                                            description: ""
-                                            items:
+                                          properties:
+                                            key:
+                                              description: ""
+                                            operator:
+                                              description: ""
+                                            values:
                                               description: ""
-                                    matchLabels:
-                                      additionalProperties:
+                                              items:
+                                                description: ""
+                                      matchLabels:
+                                        additionalProperties:
+                                          description: ""
                                         description: ""
+                                  namespaces:
+                                    description: ""
+                                    items:
                                       description: ""
-                                matchLabelKeys:
-                                  description: ""
-                                  items:
+                                  topologyKey:
                                     description: ""
-                                mismatchLabelKeys:
-                                  description: ""
-                                  items:
+                              weight:
+                                description: ""
+                        requiredDuringSchedulingIgnoredDuringExecution:
+                          description: ""
+                          items:
+                            description: ""
+                            properties:
+                              labelSelector:
+                                description: ""
+                                properties:
+                                  matchExpressions:
                                     description: ""
-                                namespaceSelector:
-                                  description: ""
-                                  properties:
-                                    matchExpressions:
+                                    items:
                                       description: ""
-                                      items:
-                                        description: ""
-                                        properties:
-                                          key:
-                                            description: ""
-                                          operator:
-                                            description: ""
-                                          values:
+                                      properties:
+                                        key:
+                                          description: ""
+                                        operator:
+                                          description: ""
+                                        values:
+                                          description: ""
+                                          items:
                                             description: ""
-                                            items:
-                                              description: ""
-                                    matchLabels:
-                                      additionalProperties:
-                                        description: ""
+                                  matchLabels:
+                                    additionalProperties:
                                       description: ""
-                                namespaces:
-                                  description: ""
-                                  items:
                                     description: ""
-                                topologyKey:
+                              matchLabelKeys:
+                                description: ""
+                                items:
                                   description: ""
-                            weight:
-                              description: ""
-                      requiredDuringSchedulingIgnoredDuringExecution:
-                        description: ""
-                        items:
-                          description: ""
-                          properties:
-                            labelSelector:
-                              description: ""
-                              properties:
-                                matchExpressions:
+                              mismatchLabelKeys:
+                                description: ""
+                                items:
                                   description: ""
-                                  items:
+                              namespaceSelector:
+                                description: ""
+                                properties:
+                                  matchExpressions:
                                     description: ""
-                                    properties:
-                                      key:
-                                        description: ""
-                                      operator:
-                                        description: ""
-                                      values:
-                                        description: ""
-                                        items:
+                                    items:
+                                      description: ""
+                                      properties:
+                                        key:
+                                          description: ""
+                                        operator:
+                                          description: ""
+                                        values:
                                           description: ""
-                                matchLabels:
-                                  additionalProperties:
+                                          items:
+                                            description: ""
+                                  matchLabels:
+                                    additionalProperties:
+                                      description: ""
                                     description: ""
+                              namespaces:
+                                description: ""
+                                items:
                                   description: ""
-                            matchLabelKeys:
-                              description: ""
-                              items:
+                              topologyKey:
                                 description: ""
-                            mismatchLabelKeys:
-                              description: ""
-                              items:
+                    virtualMachineAndPodAntiAffinity:
+                      description: Описывает правила anti-affiniy пода и ВМ.
+                      properties:
+                        preferredDuringSchedulingIgnoredDuringExecution:
+                          description: ""
+                          items:
+                            description: ""
+                            properties:
+                              virtualMachineAndPodAffinityTerm:
                                 description: ""
-                            namespaceSelector:
-                              description: ""
-                              properties:
-                                matchExpressions:
-                                  description: ""
-                                  items:
+                                properties:
+                                  labelSelector:
                                     description: ""
                                     properties:
-                                      key:
-                                        description: ""
-                                      operator:
-                                        description: ""
-                                      values:
+                                      matchExpressions:
                                         description: ""
                                         items:
                                           description: ""
-                                matchLabels:
-                                  additionalProperties:
-                                    description: ""
-                                  description: ""
-                            namespaces:
-                              description: ""
-                              items:
-                                description: ""
-                            topologyKey:
-                              description: ""
-                  virtualMachineAndPodAntiAffinity:
-                    description: Описывает правила anti-affiniy пода и ВМ.
-                    properties:
-                      preferredDuringSchedulingIgnoredDuringExecution:
-                        description: ""
-                        items:
-                          description: ""
-                          properties:
-                            virtualMachineAndPodAffinityTerm:
-                              description: ""
-                              properties:
-                                labelSelector:
-                                  description: ""
-                                  properties:
-                                    matchExpressions:
-                                      description: ""
-                                      items:
-                                        description: ""
-                                        properties:
-                                          key:
-                                            description: ""
-                                          operator:
-                                            description: ""
-                                          values:
-                                            description: ""
-                                            items:
+                                          properties:
+                                            key:
+                                              description: ""
+                                            operator:
+                                              description: ""
+                                            values:
                                               description: ""
-                                    matchLabels:
-                                      additionalProperties:
+                                              items:
+                                                description: ""
+                                      matchLabels:
+                                        additionalProperties:
+                                          description: ""
                                         description: ""
-                                      description: ""
-                                matchLabelKeys:
-                                  description: ""
-                                  items:
+                                  matchLabelKeys:
                                     description: ""
-                                mismatchLabelKeys:
-                                  description: ""
-                                  items:
+                                    items:
+                                      description: ""
+                                  mismatchLabelKeys:
                                     description: ""
-                                namespaceSelector:
-                                  description: ""
-                                  properties:
-                                    matchExpressions:
+                                    items:
                                       description: ""
-                                      items:
+                                  namespaceSelector:
+                                    description: ""
+                                    properties:
+                                      matchExpressions:
                                         description: ""
-                                        properties:
-                                          key:
-                                            description: ""
-                                          operator:
-                                            description: ""
-                                          values:
-                                            description: ""
-                                            items:
+                                        items:
+                                          description: ""
+                                          properties:
+                                            key:
+                                              description: ""
+                                            operator:
+                                              description: ""
+                                            values:
                                               description: ""
-                                    matchLabels:
-                                      additionalProperties:
+                                              items:
+                                                description: ""
+                                      matchLabels:
+                                        additionalProperties:
+                                          description: ""
                                         description: ""
+                                  namespaces:
+                                    description: ""
+                                    items:
                                       description: ""
-                                namespaces:
-                                  description: ""
-                                  items:
+                                  topologyKey:
                                     description: ""
-                                topologyKey:
-                                  description: ""
-                            weight:
-                              description: ""
-                      requiredDuringSchedulingIgnoredDuringExecution:
-                        description: ""
-                        items:
+                              weight:
+                                description: ""
+                        requiredDuringSchedulingIgnoredDuringExecution:
                           description: ""
-                          properties:
-                            labelSelector:
-                              description: ""
-                              properties:
-                                matchExpressions:
-                                  description: ""
-                                  items:
+                          items:
+                            description: ""
+                            properties:
+                              labelSelector:
+                                description: ""
+                                properties:
+                                  matchExpressions:
                                     description: ""
-                                    properties:
-                                      key:
-                                        description: ""
-                                      operator:
-                                        description: ""
-                                      values:
-                                        description: ""
-                                        items:
+                                    items:
+                                      description: ""
+                                      properties:
+                                        key:
+                                          description: ""
+                                        operator:
+                                          description: ""
+                                        values:
                                           description: ""
-                                matchLabels:
-                                  additionalProperties:
+                                          items:
+                                            description: ""
+                                  matchLabels:
+                                    additionalProperties:
+                                      description: ""
                                     description: ""
-                                  description: ""
-                            matchLabelKeys:
-                              description: ""
-                              items:
+                              matchLabelKeys:
                                 description: ""
-                            mismatchLabelKeys:
-                              description: ""
-                              items:
+                                items:
+                                  description: ""
+                              mismatchLabelKeys:
                                 description: ""
-                            namespaceSelector:
-                              description: ""
-                              properties:
-                                matchExpressions:
+                                items:
                                   description: ""
-                                  items:
+                              namespaceSelector:
+                                description: ""
+                                properties:
+                                  matchExpressions:
                                     description: ""
-                                    properties:
-                                      key:
-                                        description: ""
-                                      operator:
-                                        description: ""
-                                      values:
-                                        description: ""
-                                        items:
+                                    items:
+                                      description: ""
+                                      properties:
+                                        key:
                                           description: ""
-                                matchLabels:
-                                  additionalProperties:
+                                        operator:
+                                          description: ""
+                                        values:
+                                          description: ""
+                                          items:
+                                            description: ""
+                                  matchLabels:
+                                    additionalProperties:
+                                      description: ""
                                     description: ""
+                              namespaces:
+                                description: ""
+                                items:
                                   description: ""
-                            namespaces:
-                              description: ""
-                              items:
+                              topologyKey:
                                 description: ""
-                            topologyKey:
-                              description: ""
-              blockDeviceRefs:
-                description: |
-                  Список блочных устройств, которые могут быть смонтированы в ВМ.
+                blockDeviceRefs:
+                  description: |
+                    Список блочных устройств, которые могут быть смонтированы в ВМ.
 
-                  Порядок загрузки определяется порядком в списке.
-                items:
+                    Порядок загрузки определяется порядком в списке.
+                  items:
+                    description: |
+                      The reference to block device.
+                    properties:
+                      kind:
+                        description: |
+                          Поддерживаемые типы:
+
+                          * `ClusterVirtualImage` — использовать `ClusterVirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM.
+                          * `VirtualImage` — использовать `VirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM.
+                          * `VirtualDisk` — используйте `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме для чтения и записи (ReadWrite).
+                      name:
+                        description: |
+                          Имя ресурса заданного типа.
+                bootloader:
                   description: |
-                    The reference to block device.
+                    Загрузчик для VM:
+
+                    * BIOS — использовать BIOS.
+                    * EFI — использовать Unified Extensible Firmware (EFI/UEFI).
+                    * EFIWithSecureBoot — использовать UEFI/EFI с поддержкой SecureBoot.
+                cpu:
+                  description: |
+                    Блок определяет настройки ЦП для виртуальной машины.
                   properties:
-                    kind:
+                    coreFraction:
+                      description: |
+                        Гарантированная доля времени ЦП, которая будет выделена ВМ. Указывается в процентах.
+                    cores:
                       description: |
-                        Поддерживаемые типы:
+                        Количество ядер.
+                    virtualMachineCPUModelName:
+                      description: |
+                        Имя ресурса `virtualMachineCPUModelName`, определяющего модель процессора для виртуальной машины.
+                disruptions:
+                  description: |
+                    Описании политики применения изменений, требующих перезагрузки ВМ.
 
-                        * `ClusterVirtualImage` — использовать `ClusterVirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM.
-                        * `VirtualImage` — использовать `VirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM.
-                        * `VirtualDisk` — используйте `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме для чтения и записи (ReadWrite).
-                    name:
+                    Изменение некоторых параметров конфигурации ВМ требуют перезагрузки ВМ для их применения. Данная политика позволяет задать поведения, как ВМ будет реагировать на такие изменения.
+                  properties:
+                    restartApprovalMode:
                       description: |
-                        Имя ресурса заданного типа.
-              bootloader:
-                description: |
-                  Загрузчик для VM:
+                        Режим одобрения для изменений, требующих перезагрузки ВМ:
 
-                  * BIOS — использовать BIOS.
-                  * EFI — использовать Unified Extensible Firmware (EFI/UEFI).
-                  * EFIWithSecureBoot — использовать UEFI/EFI с поддержкой SecureBoot.
-              cpu:
-                description: |
-                  Блок определяет настройки ЦП для виртуальной машины.
-                properties:
-                  coreFraction:
-                    description: |
-                      Гарантированная доля времени ЦП, которая будет выделена ВМ. Указывается в процентах.
-                  cores:
-                    description: |
-                      Количество ядер.
-                  virtualMachineCPUModelName:
-                    description: |
-                      Имя ресурса `virtualMachineCPUModelName`, определяющего модель процессора для виртуальной машины.
-              disruptions:
-                description: |
-                  Описании политики применения изменений, требующих перезагрузки ВМ.
+                        - `Manual` — изменения не будут применены, до тех пока пользователь самостоятельно не осуществит перезагрузку ВМ.
+                        - `Автоматический` — ВМ будет перезагружена, сразу, после сохранения параметров, требующих перезагрузки ВМ.
+                enableParavirtualization:
+                  description: |
+                    Использовать шину `virtio` для подключения виртуальных устройств ВМ. Установите значение false, чтобы отключить `virtio` для этой ВМ.
 
-                  Изменение некоторых параметров конфигурации ВМ требуют перезагрузки ВМ для их применения. Данная политика позволяет задать поведения, как ВМ будет реагировать на такие изменения.
-                properties:
-                  restartApprovalMode:
-                    description: |
-                      Режим одобрения для изменений, требующих перезагрузки ВМ:
+                    Внимание: Для использования режима паравиртуализации некоторые ОС требуют установки соответствующих драйверов.
+                memory:
+                  description: |
+                    Блок определяет настройки оперативной памяти для виртуальной машины.
+                  properties:
+                    size:
+                      description: |
+                        Объем оперативной памяти.
+                nodeSelector:
+                  description: |
+                    [По аналогии](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes//), как и в параметре pods `spec.nodeSelector` в Kubernetes.
+                osType:
+                  description: |
+                    Параметр позволяет выбрать тип используемой ОС, для которой будет создана ВМ с оптимальным набором необходимых виртуальных устройств и параметров.
+
+                    * Windows — для ОС семейства Microsoft Windows.
+                    * Generic — для других типов ОС.
+                priorityClassName:
+                  description: |
+                    [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/), как и в параметре pods `spec.priorityClassName` в Kubernetes.
+                provisioning:
+                  description: |
+                    Блок описания сценария начальной инициализации ВМ.
+                  properties:
+                    sysprepRef:
+                      description: |
+                        Ссылка на существующий ресурс со сценарием автоматизации Windows.
 
-                      - `Manual` — изменения не будут применены, до тех пока пользователь самостоятельно не осуществит перезагрузку ВМ.
-                      - `Автоматический` — ВМ будет перезагружена, сразу, после сохранения параметров, требующих перезагрузки ВМ.
-              enableParavirtualization:
-                description: |
-                  Использовать шину `virtio` для подключения виртуальных устройств ВМ. Установите значение false, чтобы отключить `virtio` для этой ВМ.
+                        Структура ресурса для типа SysprepRef:
 
-                  Внимание: Для использования режима паравиртуализации некоторые ОС требуют установки соответствующих драйверов.
-              memory:
-                description: |
-                  Блок определяет настройки оперативной памяти для виртуальной машины.
-                properties:
-                  size:
-                    description: |
-                      Объем оперативной памяти.
-              nodeSelector:
-                description: |
-                  [По аналогии](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes//), как и в параметре pods `spec.nodeSelector` в Kubernetes.
-              osType:
-                description: |
-                  Параметр позволяет выбрать тип используемой ОС, для которой будет создана ВМ с оптимальным набором необходимых виртуальных устройств и параметров.
+                        * `.data.autounattend.xml`
+                        * `.data.unattend.xml`
+                      properties:
+                        kind:
+                          description: |
+                            Тип ресурса.
+                        name:
+                          description: |
+                            Имя ресурса со сценарием автоматизации.
+                    type:
+                      description: |
+                        Поддерживаемые параметры для использования сценария инициализации:
 
-                  * Windows — для ОС семейства Microsoft Windows.
-                  * Generic — для других типов ОС.
-              priorityClassName:
-                description: |
-                  [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/), как и в параметре pods `spec.priorityClassName` в Kubernetes.
-              provisioning:
-                description: |
-                  Блок описания сценария начальной инициализации ВМ.
-                properties:
-                  sysprepRef:
-                    description: |
-                      Ссылка на существующий ресурс со сценарием автоматизации Windows.
+                        * UserData — использовать сценарий cloud-init в секции .spec.provisioning.UserData.
+                        * UserDataRef — использовать сценарий cloud-init, который находится в другом ресурсе.
+                        * SysprepRef — использовать сценарий автоматизации установки Windows, который находится в другом ресурсе.
+                    userData:
+                      description: |
+                        Текст сценария cloud-init.
 
-                      Структура ресурса для типа SysprepRef:
+                        Дополнительная информация: https://cloudinit.readthedocs.io/en/latest/reference/examples.html
+                    userDataRef:
+                      description: |
+                        Ссылка на существующий ресурс со сценарием cloud-init.
 
-                      * `.data.autounattend.xml`
-                      * `.data.unattend.xml`
-                    properties:
-                      kind:
-                        description: |
-                          Тип ресурса.
-                      name:
-                        description: |
-                          Имя ресурса со сценарием автоматизации.
-                  type:
-                    description: |
-                      Поддерживаемые параметры для использования сценария инициализации:
+                        Структура ресурса для типа userDataRef:
 
-                      * UserData — использовать сценарий cloud-init в секции .spec.provisioning.UserData.
-                      * UserDataRef — использовать сценарий cloud-init, который находится в другом ресурсе.
-                      * SysprepRef — использовать сценарий автоматизации установки Windows, который находится в другом ресурсе.
-                  userData:
-                    description: |
-                      Текст сценария cloud-init.
+                        * `.data.userData`
+                      properties:
+                        kind:
+                          description: |
+                            Тип ресурса.
+                        name:
+                          description: |
+                            Имя ресурса со сценарием cloud-init.
+                runPolicy:
+                  description: |
+                    Этот параметр определяет политику запуска ВМ:
 
-                      Дополнительная информация: https://cloudinit.readthedocs.io/en/latest/reference/examples.html
-                  userDataRef:
-                    description: |
-                      Ссылка на существующий ресурс со сценарием cloud-init.
+                    * `AlwaysOn` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС.
+                    * `AlwaysOff` — после создания ВМ всегда находится в выключенном состоянии.
+                    * `Manual` — после создания ВМ выключается, состояние ВМ (включение/выключение) контролируется через API-сервисы или средствами ОС.
+                    * `AlwaysOnUnlessStoppedManually` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС, ВМ может быть выключена с помощью соответствующего API-сервиса.
+                terminationGracePeriodSeconds:
+                  description: |
+                    Период ожидания после подачи сигнала (SIGTERM) о прекращении работы ВМ, по истечении которого ВМ принудительно завершается.
+                tolerations:
+                  description: |
+                    [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/), как и в параметре pods `spec.tolerations` в Kubernetes.
+                  items:
+                    description: ""
+                    properties:
+                      effect:
+                        description: ""
+                      key:
+                        description: ""
+                      operator:
+                        description: ""
+                      tolerationSeconds:
+                        description: ""
+                      value:
+                        description: ""
+                topologySpreadConstraints:
+                  description: |
+                    [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/), как и в параметре pods `spec.topologySpreadConstraints` в Kubernetes.
+                  items:
+                    properties:
+                      labelSelector:
+                        description: ""
+                        properties:
+                          matchExpressions:
+                            description: ""
+                            items:
+                              properties:
+                                key:
+                                  description: ""
+                                operator:
+                                  description: ""
+                                values:
+                                  description: ""
+                                  items:
+                                    description: ""
+                          matchLabels:
+                            additionalProperties:
+                              description: ""
+                            description: ""
+                      maxSkew:
+                        description: ""
+                      topologyKey:
+                        description: ""
+                      whenUnsatisfiable:
+                        description: ""
+                virtualMachineIPAddressClaimName:
+                  description: |
+                    Имя для связанного ресурса `virtualMachineIPAddressClaim`.
 
-                      Структура ресурса для типа userDataRef:
+                    Указывается при необходимости использования ранее созданного IP-адреса ВМ.
 
-                      * `.data.userData`
+                    Если не указано явно, по умолчанию для ВМ создается ресурс `virtualMachineIPAddressClaim` с именем аналогичным ресурсу ВМ (`.metadata.name`).
+            status:
+              properties:
+                blockDeviceRefs:
+                  description: |
+                    Список блочных устройств, подключенных к ВМ.
+                  items:
                     properties:
+                      hotpluggable:
+                        description: |
+                          Блочное устройство доступно для горячего подключения.
                       kind:
                         description: |
-                          Тип ресурса.
+                          Тип блочного устройства.
                       name:
                         description: |
-                          Имя ресурса со сценарием cloud-init.
-              runPolicy:
-                description: |
-                  Этот параметр определяет политику запуска ВМ:
-
-                  * `AlwaysOn` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС.
-                  * `AlwaysOff` — после создания ВМ всегда находится в выключенном состоянии.
-                  * `Manual` — после создания ВМ выключается, состояние ВМ (включение/выключение) контролируется через API-сервисы или средствами ОС.
-                  * `AlwaysOnUnlessStoppedManually` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС, ВМ может быть выключена с помощью соответствующего API-сервиса.
-              terminationGracePeriodSeconds:
-                description: |
-                  Период ожидания после подачи сигнала (SIGTERM) о прекращении работы ВМ, по истечении которого ВМ принудительно завершается.
-              tolerations:
-                description: |
-                  [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/), как и в параметре pods `spec.tolerations` в Kubernetes.
-                items:
-                  description: ""
-                  properties:
-                    effect:
-                      description: ""
-                    key:
-                      description: ""
-                    operator:
-                      description: ""
-                    tolerationSeconds:
-                      description: ""
-                    value:
-                      description: ""
-              topologySpreadConstraints:
-                description: |
-                  [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/), как и в параметре pods `spec.topologySpreadConstraints` в Kubernetes.
-                items:
-                  properties:
-                    labelSelector:
-                      description: ""
-                      properties:
-                        matchExpressions:
-                          description: ""
-                          items:
-                            properties:
-                              key:
-                                description: ""
-                              operator:
-                                description: ""
-                              values:
-                                description: ""
-                                items:
-                                  description: ""
-                        matchLabels:
-                          additionalProperties:
-                            description: ""
-                          description: ""
-                    maxSkew:
-                      description: ""
-                    topologyKey:
-                      description: ""
-                    whenUnsatisfiable:
-                      description: ""
-              virtualMachineIPAddressClaimName:
-                description: |
-                  Имя для связанного ресурса `virtualMachineIPAddressClaim`.
-
-                  Указывается при необходимости использования ранее созданного IP-адреса ВМ.
-
-                  Если не указано явно, по умолчанию для ВМ создается ресурс `virtualMachineIPAddressClaim` с именем аналогичным ресурсу ВМ (`.metadata.name`).
-          status:
-            properties:
-              blockDeviceRefs:
-                description: |
-                  Список блочных устройств, подключенных к ВМ.
-                items:
-                  properties:
-                    hotpluggable:
-                      description: |
-                        Блочное устройство доступно для горячего подключения.
-                    kind:
-                      description: |
-                        Тип блочного устройства.
-                    name:
-                      description: |
-                        Имя существующего ресурса.
-                    size:
-                      description: |
-                        Размер подключенного блочного устройства.
-                    target:
-                      description: |
-                        Название подключенного блочного устройства.
-              conditions:
-                description: |
-                  Состояния во время работы виртуальной машины.
-                items:
-                  properties:
-                    lastProbeTime:
-                      description: ""
-                    lastTransitionTime:
-                      description: ""
-                    message:
-                      description: ""
-                    reason:
-                      description: ""
-                    status:
-                      description: ""
-                    type:
-                      description: ""
-              guestOSInfo:
-                description: |
-                  Информация об гостевой ОС, полученная от агента (QEMU Guest Agent). Агент должен быть предварительно установлен.
+                          Имя существующего ресурса.
+                      size:
+                        description: |
+                          Размер подключенного блочного устройства.
+                      target:
+                        description: |
+                          Название подключенного блочного устройства.
+                conditions:
+                  description: |
+                    Состояния во время работы виртуальной машины.
+                  items:
+                    properties:
+                      lastProbeTime:
+                        description: ""
+                      lastTransitionTime:
+                        description: ""
+                      message:
+                        description: ""
+                      reason:
+                        description: ""
+                      status:
+                        description: ""
+                      type:
+                        description: ""
+                guestOSInfo:
+                  description: |
+                    Информация об гостевой ОС, полученная от агента (QEMU Guest Agent). Агент должен быть предварительно установлен.
 
-                  Больше информации об агенте можно прочитать тут: https://www.qemu.org/docs/master/interop/qemu-ga.html.
-              ipAddress:
-                description: |
-                  IP-адрес ВМ.
-              message:
-                description: |
-                  Детальное описание состояния ВМ.
-              nodeName:
-                description: |
-                  Имя узла, на котором в данный момент запущена ВМ.
-              phase:
-                description: |
-                  Текущая фаза виртуальной машины:
+                    Больше информации об агенте можно прочитать тут: https://www.qemu.org/docs/master/interop/qemu-ga.html.
+                ipAddress:
+                  description: |
+                    IP-адрес ВМ.
+                message:
+                  description: |
+                    Детальное описание состояния ВМ.
+                nodeName:
+                  description: |
+                    Имя узла, на котором в данный момент запущена ВМ.
+                phase:
+                  description: |
+                    Текущая фаза виртуальной машины:
 
-                  * `Scheduling` — ВМ запланирована для размещения на узлах кластера.
-                  * `Pending` — осуществляется процесс запуска ВМ.
-                  * `Running` — ВМ запущенна.
-                  * `Failed` — произошла ошибка в процессе запуска или работы ВМ.
-                  * `Terminating` — в настоящий момент ВМ завершает свою работу.
-                  * `Stopped` — ВМ остановлена.
-              restartAwaitingChanges:
-                description: |
-                  Список изменений в конфигурации, требующий перезапуска ВМ.
-              virtualMachineIPAddressClaimName:
-                description: |
-                  Имя `virtualMachineIPAddressClaimName`, содержащее IP-адрес виртуальной машины.
+                    * `Scheduling` — ВМ запланирована для размещения на узлах кластера.
+                    * `Pending` — осуществляется процесс запуска ВМ.
+                    * `Running` — ВМ запущенна.
+                    * `Failed` — произошла ошибка в процессе запуска или работы ВМ.
+                    * `Terminating` — в настоящий момент ВМ завершает свою работу.
+                    * `Stopped` — ВМ остановлена.
+                restartAwaitingChanges:
+                  description: |
+                    Список изменений в конфигурации, требующий перезапуска ВМ.
+                virtualMachineIPAddressClaimName:
+                  description: |
+                    Имя `virtualMachineIPAddressClaimName`, содержащее IP-адрес виртуальной машины.
diff --git a/crds/doc-ru-virtualmachineblockdeviceattachment.yaml b/crds/doc-ru-virtualmachineblockdeviceattachment.yaml
index d31bcd1c8..7ef2b16aa 100644
--- a/crds/doc-ru-virtualmachineblockdeviceattachment.yaml
+++ b/crds/doc-ru-virtualmachineblockdeviceattachment.yaml
@@ -1,43 +1,43 @@
 spec:
   versions:
-  - name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        description: |
-          Ресурс обеспечивает возможность «горячего» подключения диска к ВМ.
-        properties:
-          spec:
-            properties:
-              blockDeviceRef:
-                description: |
-                  Блочное устройство, которое будет подключено к ВМ в качестве диска hotPlug.
-                properties:
-                  kind:
-                    description: |
-                      Тип блочного устройства. Возможны следующие варианты:
+    - name: v1alpha2
+      schema:
+        openAPIV3Schema:
+          description: |
+            Ресурс обеспечивает возможность «горячего» подключения диска к ВМ.
+          properties:
+            spec:
+              properties:
+                blockDeviceRef:
+                  description: |
+                    Блочное устройство, которое будет подключено к ВМ в качестве диска hotPlug.
+                  properties:
+                    kind:
+                      description: |
+                        Тип блочного устройства. Возможны следующие варианты:
 
-                      * `VirtualDisk` — использовать `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме RW.
-                  name:
-                    description: |
-                      Имя блочного устройства
-              virtualMachineName:
-                description: |
-                  Имя виртуальной машины, к которой подключен диск.
-          status:
-            properties:
-              failureMessage:
-                description: |
-                  Подробное описание ошибки.
-              failureReason:
-                description: |
-                  Краткое описание причины ошибки.
-              phase:
-                description: |
-                  Фаза ресурса:
+                        * `VirtualDisk` — использовать `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме RW.
+                    name:
+                      description: |
+                        Имя блочного устройства
+                virtualMachineName:
+                  description: |
+                    Имя виртуальной машины, к которой подключен диск.
+            status:
+              properties:
+                failureMessage:
+                  description: |
+                    Подробное описание ошибки.
+                failureReason:
+                  description: |
+                    Краткое описание причины ошибки.
+                phase:
+                  description: |
+                    Фаза ресурса:
 
-                  * InProgress — диск в процессе подключения к ВМ.
-                  * Attached — диск подключен к ВМ.
-                  * Failed — возникла проблема с подключением диска. Смотрите `.status.failureReason`.
-              virtualMachineName:
-                description: |
-                  Имя виртуальной машины, к которой подключен этот диск.
+                    * InProgress — диск в процессе подключения к ВМ.
+                    * Attached — диск подключен к ВМ.
+                    * Failed — возникла проблема с подключением диска. Смотрите `.status.failureReason`.
+                virtualMachineName:
+                  description: |
+                    Имя виртуальной машины, к которой подключен этот диск.
diff --git a/crds/doc-ru-virtualmachinecpumodel.yaml b/crds/doc-ru-virtualmachinecpumodel.yaml
index 153127b0c..a1c1743ec 100644
--- a/crds/doc-ru-virtualmachinecpumodel.yaml
+++ b/crds/doc-ru-virtualmachinecpumodel.yaml
@@ -1,46 +1,46 @@
 spec:
   versions:
-  - name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        description: |
-          Неизменяемый ресурс описывает модель процессора для использования в ВМ. Ресурс не может быть удален, пока он используется в одной из ВМ.
-        properties:
-          spec:
-            properties:
-              features:
-                description: |
-                  Необходимые инструкции для процессора в виде списка Дополнительную информацию о поддерживаемых инструкциях можно найти [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
-              model:
-                description: |
-                  Название модели процессора. Дополнительная информация о моделях [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
-              type:
-                description: |
-                  В качестве типа ресурса, поддерживаются следующие варианты:
-                  * Host - использовать физический процессор хоста.
-                  * Модель - модель процессора. Модель процессора - это именованный и предварительно определенный набор поддерживаемых инструкций процессора.
-                  * Features - необходимый набор поддерживаемых инструкций для процессора.
-          status:
-            properties:
-              features:
-                description: |
-                  Информация о поддерживаемых наборах инструкций процессора для данной модели.
-                  Отображается только для `type=Features`.
-                properties:
-                  enabled:
-                    description: |
-                      Список наборов инструкций процессора для данной модели.
-                  notEnabledCommon:
-                    description: |
-                      Список неиспользуемых инструкций процессора, дополнительно доступных для данной группы узлов.
-              nodes:
-                description: |
-                  Список узлов, поддерживающих данную модель процессора.
-                  Не отображается для `type=Host`.
-              phase:
-                description: |
-                  Текущий статус ресурса `VirtualMachineCPUModel`:
-                  * Pending - ресурс находится в очереди на обработку.
-                  * InProgress - ресурс находится в процессе создания.
-                  * Ready - ресурс успешно создан.
-                  * Failed - в процессе создания ресурса произошла ошибка.
+    - name: v1alpha2
+      schema:
+        openAPIV3Schema:
+          description: |
+            Неизменяемый ресурс описывает модель процессора для использования в ВМ. Ресурс не может быть удален, пока он используется в одной из ВМ.
+          properties:
+            spec:
+              properties:
+                features:
+                  description: |
+                    Необходимые инструкции для процессора в виде списка Дополнительную информацию о поддерживаемых инструкциях можно найти [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
+                model:
+                  description: |
+                    Название модели процессора. Дополнительная информация о моделях [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology)
+                type:
+                  description: |
+                    В качестве типа ресурса, поддерживаются следующие варианты:
+                    * Host - использовать физический процессор хоста.
+                    * Модель - модель процессора. Модель процессора - это именованный и предварительно определенный набор поддерживаемых инструкций процессора.
+                    * Features - необходимый набор поддерживаемых инструкций для процессора.
+            status:
+              properties:
+                features:
+                  description: |
+                    Информация о поддерживаемых наборах инструкций процессора для данной модели.
+                    Отображается только для `type=Features`.
+                  properties:
+                    enabled:
+                      description: |
+                        Список наборов инструкций процессора для данной модели.
+                    notEnabledCommon:
+                      description: |
+                        Список неиспользуемых инструкций процессора, дополнительно доступных для данной группы узлов.
+                nodes:
+                  description: |
+                    Список узлов, поддерживающих данную модель процессора.
+                    Не отображается для `type=Host`.
+                phase:
+                  description: |
+                    Текущий статус ресурса `VirtualMachineCPUModel`:
+                    * Pending - ресурс находится в очереди на обработку.
+                    * InProgress - ресурс находится в процессе создания.
+                    * Ready - ресурс успешно создан.
+                    * Failed - в процессе создания ресурса произошла ошибка.
diff --git a/crds/doc-ru-virtualmachineipaddressclaim.yaml b/crds/doc-ru-virtualmachineipaddressclaim.yaml
index 0fbd97435..045ec57ba 100644
--- a/crds/doc-ru-virtualmachineipaddressclaim.yaml
+++ b/crds/doc-ru-virtualmachineipaddressclaim.yaml
@@ -1,46 +1,46 @@
 spec:
   versions:
-  - name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        description: |
-          Ресурс, определяющий IP-адрес для виртуальной машины.
-        properties:
-          spec:
-            description: |
-              Настройки `VirtualMachineIPAddressClaim`.
-            properties:
-              address:
-                description: |
-                  Запрашиваемый IP-адрес. Если это значение не задано, будет назначен следующий доступный IP-адрес.
-              reclaimPolicy:
-                description: |
-                  Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`.
+    - name: v1alpha2
+      schema:
+        openAPIV3Schema:
+          description: |
+            Ресурс, определяющий IP-адрес для виртуальной машины.
+          properties:
+            spec:
+              description: |
+                Настройки `VirtualMachineIPAddressClaim`.
+              properties:
+                address:
+                  description: |
+                    Запрашиваемый IP-адрес. Если это значение не задано, будет назначен следующий доступный IP-адрес.
+                reclaimPolicy:
+                  description: |
+                    Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`.
 
-                  * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`.
+                    * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`.
 
-                  * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную.
-              virtualMachineIPAddressLeaseName:
-                description: |
-                  Имя выданного `VirtualMachineIPAddressLease`, управляется автоматически.
-          status:
-            description: |
-              Состояние ресурса `VirtualMachineIPAddressClaim`.
-            properties:
-              address:
-                description: |
-                  Назначенный IP-адрес.
-              conflictMessage:
-                description: |
-                  Подробное описание ошибки.
-              phase:
-                description: |
-                  Представляет текущее состояние ресурса `VirtualMachineIPAddressClaim`.
+                    * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную.
+                virtualMachineIPAddressLeaseName:
+                  description: |
+                    Имя выданного `VirtualMachineIPAddressLease`, управляется автоматически.
+            status:
+              description: |
+                Состояние ресурса `VirtualMachineIPAddressClaim`.
+              properties:
+                address:
+                  description: |
+                    Назначенный IP-адрес.
+                conflictMessage:
+                  description: |
+                    Подробное описание ошибки.
+                phase:
+                  description: |
+                    Представляет текущее состояние ресурса `VirtualMachineIPAddressClaim`.
 
-                  * Pending - создание ресурса находится в процессе выполнения.
-                  * Bound - ресурс `VirtualMachineIPAddressClaim` привязан к ресурсу `VirtualMachineIPAddressLease`.
-                  * Lost - ресурс `VirtualMachineIPAddressClaim` потерял свойю связку с `VirtualMachineIPAddressLease`.
-                  * Conflict - `VirtualMachineIPAddressLease` уже привязан к другом ресурсу `VirtualMachineIPAddressClaim`.
-              virtualMachineName:
-                description: |
-                  Имя виртуальной машины, которая в настоящее время использует этот IP-адрес.
+                    * Pending - создание ресурса находится в процессе выполнения.
+                    * Bound - ресурс `VirtualMachineIPAddressClaim` привязан к ресурсу `VirtualMachineIPAddressLease`.
+                    * Lost - ресурс `VirtualMachineIPAddressClaim` потерял свойю связку с `VirtualMachineIPAddressLease`.
+                    * Conflict - `VirtualMachineIPAddressLease` уже привязан к другом ресурсу `VirtualMachineIPAddressClaim`.
+                virtualMachineName:
+                  description: |
+                    Имя виртуальной машины, которая в настоящее время использует этот IP-адрес.
diff --git a/crds/doc-ru-virtualmachineipaddresslease.yaml b/crds/doc-ru-virtualmachineipaddresslease.yaml
index 3313d35d1..1acdf9e6c 100644
--- a/crds/doc-ru-virtualmachineipaddresslease.yaml
+++ b/crds/doc-ru-virtualmachineipaddresslease.yaml
@@ -1,39 +1,39 @@
 spec:
   versions:
-  - name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        description: |
-          Ресурс, определяющий факт выданной аренды для `VirtualMachineIPAddressClaim`.
-        properties:
-          spec:
-            description: |
-              Параметры конфигурации `VirtualMachineIPAddressLease`.
-            properties:
-              claimRef:
-                description: |
-                  Ссылка на существующие `VirtualMachineIPAddressClaim`.
-                properties:
-                  name:
-                    description: |
-                      Имя ссылающегося `VirtualMachineIPAddressClaim`.
-                  namespace:
-                    description: |
-                      Пространство имен ссылающегося `VirtualMachineIPAddressClaim`.
-              reclaimPolicy:
-                description: |
-                  Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`.
+    - name: v1alpha2
+      schema:
+        openAPIV3Schema:
+          description: |
+            Ресурс, определяющий факт выданной аренды для `VirtualMachineIPAddressClaim`.
+          properties:
+            spec:
+              description: |
+                Параметры конфигурации `VirtualMachineIPAddressLease`.
+              properties:
+                claimRef:
+                  description: |
+                    Ссылка на существующие `VirtualMachineIPAddressClaim`.
+                  properties:
+                    name:
+                      description: |
+                        Имя ссылающегося `VirtualMachineIPAddressClaim`.
+                    namespace:
+                      description: |
+                        Пространство имен ссылающегося `VirtualMachineIPAddressClaim`.
+                reclaimPolicy:
+                  description: |
+                    Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`.
 
-                  * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`.
+                    * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`.
 
-                  * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную.
-          status:
-            description: |
-              Состояние ресурса `VirtualMachineIPAddressLease`.
-            properties:
-              phase:
-                description: |
-                  Представляет текущее состояние ресурса `VirtualMachineIPAddressLease`.
+                    * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную.
+            status:
+              description: |
+                Состояние ресурса `VirtualMachineIPAddressLease`.
+              properties:
+                phase:
+                  description: |
+                    Представляет текущее состояние ресурса `VirtualMachineIPAddressLease`.
 
-                  * Bound - ресурс `VirtualMachineIPAddressLease` привязан к ресурсу `VirtualMachineIPAddressClaim`.
-                  * Released - ресурс `VirtualMachineIPAddressLease` доступен для связки с новым ресурсом `VirtualMachineIPAddressClaim`.
+                    * Bound - ресурс `VirtualMachineIPAddressLease` привязан к ресурсу `VirtualMachineIPAddressClaim`.
+                    * Released - ресурс `VirtualMachineIPAddressLease` доступен для связки с новым ресурсом `VirtualMachineIPAddressClaim`.

From ff32d55fb55e2f7b93dbc278659edd1dd10c7c17 Mon Sep 17 00:00:00 2001
From: Pavel Tishkov <pavel.tishkov@flant.com>
Date: Mon, 20 May 2024 18:58:38 +0300
Subject: [PATCH 13/13] feat(module): rename core resources (#104)

Signed-off-by: Pavel Tishkov <pavel.tishkov@flant.com>
---
 images/pre-delete-hook/entrypoint.sh | 8 ++++----
 templates/cdi/cdi.yaml               | 2 +-
 templates/kubevirt/kubevirt.yaml     | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/images/pre-delete-hook/entrypoint.sh b/images/pre-delete-hook/entrypoint.sh
index b0a404abc..edf626322 100644
--- a/images/pre-delete-hook/entrypoint.sh
+++ b/images/pre-delete-hook/entrypoint.sh
@@ -3,12 +3,12 @@ set -eu -o pipefail
 
 KUBEVIRT_RESOURCE="dvpinternalkubevirts.internal.virtualization.deckhouse.io"
 echo "Delete Kubevirt configuration ..."
-kubectl delete -n d8-virtualization ${KUBEVIRT_RESOURCE} kubevirt || true
+kubectl delete -n d8-virtualization ${KUBEVIRT_RESOURCE} config || true
 echo "Wait for Kubevirt deletion ..."
-kubectl wait --for=delete -n d8-virtualization ${KUBEVIRT_RESOURCE} kubevirt --timeout=180s || true
+kubectl wait --for=delete -n d8-virtualization ${KUBEVIRT_RESOURCE} config --timeout=180s || true
 
 CDI_RESOURCE="dvpinternalcdis.internal.virtualization.deckhouse.io"
 echo "Delete CDI configuration ..."
-kubectl delete ${CDI_RESOURCE} cdi || true
+kubectl delete ${CDI_RESOURCE} config || true
 echo "Wait for CDI deletion ..."
-kubectl wait --for=delete ${CDI_RESOURCE} cdi --timeout=180s || true
+kubectl wait --for=delete ${CDI_RESOURCE} config --timeout=180s || true
diff --git a/templates/cdi/cdi.yaml b/templates/cdi/cdi.yaml
index 065505e9e..ebb56659f 100644
--- a/templates/cdi/cdi.yaml
+++ b/templates/cdi/cdi.yaml
@@ -9,7 +9,7 @@
 apiVersion: internal.virtualization.deckhouse.io/v1beta1
 kind: DVPInternalCDI
 metadata:
-  name: cdi
+  name: config
   namespace: d8-{{ .Chart.Name }}
   {{- include "helm_lib_module_labels" (list .) | nindent 2 }}
 spec:
diff --git a/templates/kubevirt/kubevirt.yaml b/templates/kubevirt/kubevirt.yaml
index e82359c1a..f15556e2f 100644
--- a/templates/kubevirt/kubevirt.yaml
+++ b/templates/kubevirt/kubevirt.yaml
@@ -9,7 +9,7 @@
 apiVersion: internal.virtualization.deckhouse.io/v1
 kind: DVPInternalKubeVirt
 metadata:
-  name: kubevirt
+  name: config
   namespace: d8-{{ .Chart.Name }}
   {{- include "helm_lib_module_labels" (list .) | nindent 2 }}
 spec: