From ca28011922b69215e4c9bd4164dcb0d684b93a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tino=20V=C3=A1zquez?= Date: Fri, 8 Nov 2024 12:38:02 +0100 Subject: [PATCH 01/32] M #-: Bump version 6.10.2 --- source/conf.py | 2 +- .../opennebula_services/fireedge.rst | 2 +- .../release_notes_enterprise/index.rst | 1 + .../release_notes_enterprise/resolved_issues_6102.rst | 11 +++++++++++ 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst diff --git a/source/conf.py b/source/conf.py index 7651e9608..d836313a4 100644 --- a/source/conf.py +++ b/source/conf.py @@ -88,7 +88,7 @@ # The short X.Y version. version = '6.10' # The full version, including alpha/beta/rc tags. -release = '6.10.0' +release = '6.10.2' # The context packages released version context_release = '6.10.0' diff --git a/source/installation_and_configuration/opennebula_services/fireedge.rst b/source/installation_and_configuration/opennebula_services/fireedge.rst index 8ebdccd50..5aa67805d 100644 --- a/source/installation_and_configuration/opennebula_services/fireedge.rst +++ b/source/installation_and_configuration/opennebula_services/fireedge.rst @@ -31,7 +31,7 @@ Main Features .. _fireedge_install_configuration: .. note:: - We are continually expanding the feature set of FireEdge Sunstone, and hence its configuration files are in constant change. In versions 6.10.1 and later, configuration files in ``/etc/one/fireedge/`` can be replaced by the ones that can be downloaded from `here `__ in order to activate the latest features. + We are continually expanding the feature set of FireEdge Sunstone, and hence its configuration files are in constant change. In versions 6.10.2 and later, configuration files in ``/etc/one/fireedge/`` can be replaced by the ones that can be downloaded from `here `__ in order to activate the latest features. Configuration ================================================================================ diff --git a/source/intro_release_notes/release_notes_enterprise/index.rst b/source/intro_release_notes/release_notes_enterprise/index.rst index f5b348573..daea1797f 100644 --- a/source/intro_release_notes/release_notes_enterprise/index.rst +++ b/source/intro_release_notes/release_notes_enterprise/index.rst @@ -9,3 +9,4 @@ Release Notes |version| Enterprise Edition What is OpenNebula EE Resolved Issues 6.10.1 + Resolved Issues 6.10.2 diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst new file mode 100644 index 000000000..a45e76903 --- /dev/null +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -0,0 +1,11 @@ +.. _resolved_issues_6102: + +Resolved Issues in 6.10.2 +-------------------------------------------------------------------------------- + +A complete list of solved issues for 6.10.2 can be found in the `project development portal `__. + +The following new features have been backported to 6.10.2: + + +The following issues has been solved in 6.10.2: \ No newline at end of file From b62b8f44ca8597b718da1c840d01435885e66d37 Mon Sep 17 00:00:00 2001 From: Daniel Clavijo Coca Date: Mon, 11 Nov 2024 04:37:44 -0600 Subject: [PATCH 02/32] M #-: Clarify live migration storage limitation (#3103) (cherry picked from commit 7b97560879cf8d125e3010c6c2433f1bd5c1606a) --- .../vm_management/vm_instances.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/management_and_operations/vm_management/vm_instances.rst b/source/management_and_operations/vm_management/vm_instances.rst index 69cc62bcc..5190f84b9 100644 --- a/source/management_and_operations/vm_management/vm_instances.rst +++ b/source/management_and_operations/vm_management/vm_instances.rst @@ -854,10 +854,10 @@ To explain that, we are gonna use an example: leases: terminate: edit: false - execute_after_weeks: 3 + execute_after_weeks: 3 poweroff: edit: true - execute_after_minutes: 5 + execute_after_minutes: 5 The previous example will create two schedule actions: @@ -1017,7 +1017,7 @@ There are some ``onevm`` commands operations meant for the cloud administrators: **Deployment:** - ``deploy``: Starts an existing VM in a specific Host. -- ``migrate --live``: The Virtual Machine is transferred between Hosts with no noticeable downtime. +- ``migrate --live``: The Virtual Machine is transferred between Hosts with no noticeable downtime. The VM storage cannot be migrated to other system datastores. - ``migrate``: The VM gets stopped and resumed in the target host. In an infrastructure with :ref:`multiple system datastores `, the VM storage can be also migrated (the datastore id can be specified). Note: By default, the above operations do not check the target host capacity. You can use the ``--enforce`` option to be sure that the host capacity is not overcommitted. @@ -1186,10 +1186,10 @@ After that you can access the VM and configure the SSH service: .. |sunstone_guac_rdp| image:: /images/sunstone_guac_rdp.png .. |sunstone_guac_rdp_interface| image:: /images/sunstone_guac_rdp_interface.png .. |sunstone_guac_nic_1| image:: /images/sunstone_guac_nic_1.png -.. |sunstone_guac_nic_2| image:: /images/sunstone_guac_nic_2.png +.. |sunstone_guac_nic_2| image:: /images/sunstone_guac_nic_2.png .. |sunstone_sg_main_view| image:: /images/sunstone_sg_main_view.png .. |sunstone_sg_attach| image:: /images/sunstone_sg_attach.png .. |fireedge_sunstone_ssh_list| image:: /images/fireedge_sunstone_ssh_list.png :width: 45% .. |fireedge_sunstone_ssh_console| image:: /images/fireedge_sunstone_ssh_console.png - :width: 45% \ No newline at end of file + :width: 45% From d142e583367633cfdc1ccb102d81deb9a1258497 Mon Sep 17 00:00:00 2001 From: Michal Opala Date: Mon, 11 Nov 2024 11:44:46 +0100 Subject: [PATCH 03/32] M #-: Swap "a" and "b" in the TProxy diagram (fix) (#3102) (cherry picked from commit 02698e6b9f5bd97e67b731709a05ba0c1441eeac) --- source/images/tproxy-diagram.drawio.png | Bin 71415 -> 71407 bytes source/images_drawio/tproxy-diagram.drawio | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/images/tproxy-diagram.drawio.png b/source/images/tproxy-diagram.drawio.png index c7ee09c42a4cbb20830d87bb2cfd7783ea383d95..e24d3a6315049e7fbd40f91d9d8af36b20891ed1 100644 GIT binary patch literal 71407 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

dJ!z2m~EZWnK3zO+_D!jP$z8E{c9pY@8LuS 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 w>30w3-92fpwm5_Wo+nKA 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 literal 71415 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 - + - + @@ -31,7 +31,7 @@ - + @@ -62,7 +62,7 @@ - + @@ -71,7 +71,7 @@ - + @@ -155,7 +155,7 @@ - + From 893f9e2fe83cef6739b4265d4cb05f56cebee72e Mon Sep 17 00:00:00 2001 From: Guillemo Ramos Date: Mon, 11 Nov 2024 17:43:29 +0100 Subject: [PATCH 04/32] F #-: Update Ceph supported releases (#3104) Signed-off-by: Guillermo Ramos (cherry picked from commit 23f9ff08a5831a4c1562f580b8cbb1b1cd6b08e9) --- source/intro_release_notes/release_notes/platform_notes.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/intro_release_notes/release_notes/platform_notes.rst b/source/intro_release_notes/release_notes/platform_notes.rst index bc77cfebb..201050a3b 100644 --- a/source/intro_release_notes/release_notes/platform_notes.rst +++ b/source/intro_release_notes/release_notes/platform_notes.rst @@ -116,8 +116,8 @@ Open Cloud Storage Infrastructure +-----------+--------------------------------------------+-------------------------------------+ | LVM2 | Version included in the Linux distribution | :ref:`LVM Drivers ` | +-----------+--------------------------------------------+-------------------------------------+ -| Ceph | Pacific v16.2.x | :ref:`The Ceph Datastore ` | -| | Quincy v17.2.x | | +| Ceph | Quincy v17.2.x | :ref:`The Ceph Datastore ` | +| | Reef v18.2.x | | +-----------+--------------------------------------------+-------------------------------------+ Authentication From f73f627da43073f4ee1c7be53fc83f9a8f98db99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Czern=C3=BD?= Date: Mon, 11 Nov 2024 19:39:15 +0100 Subject: [PATCH 05/32] M #-: Add missing commands to xml-rpc api (#3096) --- .../spellchecking/wordlists/opennebula.txt | 3 + .../system_interfaces/api.rst | 106 ++++++++++++++---- 2 files changed, 86 insertions(+), 23 deletions(-) diff --git a/source/ext/spellchecking/wordlists/opennebula.txt b/source/ext/spellchecking/wordlists/opennebula.txt index c880b6b38..89742569f 100644 --- a/source/ext/spellchecking/wordlists/opennebula.txt +++ b/source/ext/spellchecking/wordlists/opennebula.txt @@ -182,6 +182,7 @@ addhost addon addons addrule +addserver addvnet af affined @@ -293,6 +294,7 @@ delgroup delhost delrule delvnet +delserver desc detachdisk detachnic @@ -601,6 +603,7 @@ repos req rescan resched +resetserver restic resubmission rke diff --git a/source/integration_and_development/system_interfaces/api.rst b/source/integration_and_development/system_interfaces/api.rst index 6aae19d15..7fd7ccfb0 100644 --- a/source/integration_and_development/system_interfaces/api.rst +++ b/source/integration_and_development/system_interfaces/api.rst @@ -763,27 +763,33 @@ onevrouter onezone -------------------------------------------------------------------------------- -+-----------------+-------------------+---------------+ -| onezone command | XML-RPC Method | Auth. Request | -+=================+===================+===============+ -| create | one.zone.allocate | ZONE:CREATE | -+-----------------+-------------------+---------------+ -| rename | one.zone.rename | ZONE:MANAGE | -+-----------------+-------------------+---------------+ -| update | one.zone.update | ZONE:MANAGE | -+-----------------+-------------------+---------------+ -| delete | one.zone.delete | ZONE:ADMIN | -+-----------------+-------------------+---------------+ -| enable | one.zone.enable | ZONE:ADMIN | -| | | | -| disable | | | -+-----------------+-------------------+---------------+ -| show | one.zone.info | ZONE:USE | -+-----------------+-------------------+---------------+ -| list | one.zonepool.info | ZONE:USE | -+-----------------+-------------------+---------------+ -| set | -- | ZONE:USE | -+-----------------+-------------------+---------------+ ++-----------------+----------------------+---------------+ +| onezone command | XML-RPC Method | Auth. Request | ++=================+======================+===============+ +| create | one.zone.allocate | ZONE:CREATE | ++-----------------+----------------------+---------------+ +| rename | one.zone.rename | ZONE:MANAGE | ++-----------------+----------------------+---------------+ +| update | one.zone.update | ZONE:MANAGE | ++-----------------+----------------------+---------------+ +| delete | one.zone.delete | ZONE:ADMIN | ++-----------------+----------------------+---------------+ +| enable | one.zone.enable | ZONE:ADMIN | +| | | | +| disable | | | ++-----------------+----------------------+---------------+ +| server-add | one.zone.addserver | ZONE:ADMIN | ++-----------------+----------------------+---------------+ +| server-del | one.zone.delserver | ZONE:ADMIN | ++-----------------+----------------------+---------------+ +| server-reset | one.zone.resetserver | ZONE:ADMIN | ++-----------------+----------------------+---------------+ +| show | one.zone.info | ZONE:USE | ++-----------------+----------------------+---------------+ +| list | one.zonepool.info | ZONE:USE | ++-----------------+----------------------+---------------+ +| set | -- | ZONE:USE | ++-----------------+----------------------+---------------+ onesecgroup -------------------------------------------------------------------------------- @@ -985,7 +991,7 @@ onehook -------------------------------------------------------------------------------- +-----------------------+----------------------------+---------------------------+ -| onevntemplate command | XML-RPC Method | Auth. Request | +| onehook command | XML-RPC Method | Auth. Request | +=======================+============================+===========================+ | update | one.hook.update | HOOK:MANAGE | +-----------------------+----------------------------+---------------------------+ @@ -1005,7 +1011,7 @@ onehook +-----------------------+----------------------------+---------------------------+ | unlock | one.hook.unlock | HOOK:MANAGE | +-----------------------+----------------------------+---------------------------+ -| retry | one.hook.unlock | HOOK:MANAGE | +| retry | one.hook.retry | HOOK:MANAGE | +-----------------------+----------------------------+---------------------------+ | log | one.hooklog.info | HOOK:- | +-----------------------+----------------------------+---------------------------+ @@ -7196,6 +7202,60 @@ one.zone.rename | OUT | Int | ID of the object that caused the error. | +------+------------+---------------------------------------------+ +one.zone.addserver +------------------ + +- **Description**: Add server to zone. +- **Parameters** + +==== ========== ============================================ +Type Data Type Description +==== ========== ============================================ +IN String The session string. +IN Int The object ID. +IN String A string containing the template of the server. Syntax can be the usual ``attribute=value`` or XML. | +OUT Boolean True or false whenever is successful or not. +OUT Int/String The resource ID / The error string. +OUT Int Error code. +OUT Int ID of the object that caused the error. +==== ========== ============================================ + +one.zone.delserver +------------------ + +- **Description**: Delete a server from zone. +- **Parameters** + +==== ========== ============================================ +Type Data Type Description +==== ========== ============================================ +IN String The session string. +IN Int The object ID. +IN Int The server ID. +OUT Boolean true or false whenever is successful or not +OUT Int/String The resource ID / The error string. +OUT Int Error code. +OUT Int ID of the object that caused the error. +==== ========== ============================================ + +one.zone.resetserver +-------------------- + +- **Description**: Reset follower log index. This should be trigger when a follower DB has been reset. +- **Parameters** + +==== ========== ============================================ +Type Data Type Description +==== ========== ============================================ +IN String The session string. +IN Int The object ID. +IN Int The server ID. +OUT Boolean true or false whenever is successful or not +OUT Int/String The resource ID / The error string. +OUT Int Error code. +OUT Int ID of the object that caused the error. +==== ========== ============================================ + one.zone.info -------------- From ccdfce8ca081ee712afb202fb5f734b43f87afbb Mon Sep 17 00:00:00 2001 From: Guillemo Ramos Date: Wed, 13 Nov 2024 12:43:17 +0100 Subject: [PATCH 06/32] B OpenNebula/one#6791: DS ceph export: use CEPH_KEY (#3106) Signed-off-by: Guillermo Ramos --- .../release_notes_enterprise/resolved_issues_6102.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index a45e76903..1fa3f220b 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -8,4 +8,6 @@ A complete list of solved issues for 6.10.2 can be found in the `project develop The following new features have been backported to 6.10.2: -The following issues has been solved in 6.10.2: \ No newline at end of file +The following issues has been solved in 6.10.2: + +- `Fix bug in the DS Ceph driver: set the value for the --keyfile to CEPH_KEY instead of CEPH_USER in the export operation .`__. From 51a07635d7d614d3d9bdd9cd3eb91b0d8004f113 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Tue, 19 Nov 2024 17:19:07 +0100 Subject: [PATCH 07/32] M #-: Add missing feature in 6.10.1 (cherry picked from commit 5c71ac927d3a7b2757c316b5e1f362d76495de35) --- .../release_notes_enterprise/resolved_issues_6101.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6101.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6101.rst index 3f6cc6584..943c87f6d 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6101.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6101.rst @@ -11,6 +11,7 @@ The following new features have been backported to 6.10.1: - Add a "disk-snapshot-list" option to :ref:`onevm cli `. - `Optimize handling of VM history records, it greatly improves perfomance of all VM operations for VMs with many history records `__. - `Add support for incremental backups in Ceph `__. +- :ref:`New Transparent Proxies for VMs to simplify access to external services (e.g. OneGate) ` The following issues has been solved in 6.10.1: From f4340a162a3321cd89e8e120832d2935c8ccc733 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Wed, 20 Nov 2024 18:25:21 +0100 Subject: [PATCH 08/32] B OpenNebula/one#6782: Add to resolved issues --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 1fa3f220b..4f910ebd9 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -11,3 +11,4 @@ The following new features have been backported to 6.10.2: The following issues has been solved in 6.10.2: - `Fix bug in the DS Ceph driver: set the value for the --keyfile to CEPH_KEY instead of CEPH_USER in the export operation .`__. +- `Fix GOCA OS vector attribute to include FIRMWARE, FIRMWARE_SECURE, UUID and SD_DISK_BUS .`__. From 85e5d8b9823cc0964ee6e9c0e78d5af4a804f338 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Thu, 21 Nov 2024 13:28:27 +0100 Subject: [PATCH 09/32] B OpenNebula/one#6784: Add to resolved issues --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 4f910ebd9..ed9e824e3 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -12,3 +12,4 @@ The following issues has been solved in 6.10.2: - `Fix bug in the DS Ceph driver: set the value for the --keyfile to CEPH_KEY instead of CEPH_USER in the export operation .`__. - `Fix GOCA OS vector attribute to include FIRMWARE, FIRMWARE_SECURE, UUID and SD_DISK_BUS .`__. +- `Fix PyOne installation through pip .`__. From 45323b4af882541e6aabd64e15fdd27e8d440e0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Czern=C3=BD?= Date: Thu, 21 Nov 2024 17:44:33 +0100 Subject: [PATCH 10/32] F OpenNebula/one#6723: Deprecated note for import VM command (#3082) --- .../management_and_operations/host_cluster_management/hosts.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/management_and_operations/host_cluster_management/hosts.rst b/source/management_and_operations/host_cluster_management/hosts.rst index 354376011..72156a3ec 100644 --- a/source/management_and_operations/host_cluster_management/hosts.rst +++ b/source/management_and_operations/host_cluster_management/hosts.rst @@ -356,6 +356,8 @@ After a Virtual Machine is imported, its life-cycle (including creation of snaps .. warning:: Wild VMs’ support and limitations may differ depending on the virtualization driver used (e.g KVM or LXC). In order to find more specific information for the virtualization driver you’re using, please check the corresponding driver guide. +.. note:: This command is deprecated and will be removed in future release. Imported VMs will be removed from OpenNebula management and will appear again as wild VMs on the host. + Using Sunstone to Manage Hosts ================================================================================ From 02d61ab80811fa8e3196db9dbad687d9a2c82c85 Mon Sep 17 00:00:00 2001 From: Pavel Czerny Date: Tue, 19 Nov 2024 09:27:23 +0100 Subject: [PATCH 11/32] B OpenNebula/one#6548: Update list of kvm attributes (cherry picked from commit 423e35f7916b47cc392ee2936da82ebbe38dbbfc) --- .../spellchecking/wordlists/opennebula.txt | 3 + .../kvm_node/kvm_driver.rst | 174 ++++++++++-------- 2 files changed, 96 insertions(+), 81 deletions(-) diff --git a/source/ext/spellchecking/wordlists/opennebula.txt b/source/ext/spellchecking/wordlists/opennebula.txt index 89742569f..490026d91 100644 --- a/source/ext/spellchecking/wordlists/opennebula.txt +++ b/source/ext/spellchecking/wordlists/opennebula.txt @@ -262,6 +262,8 @@ conf config cooldown cpu +cpuset +cputune cryptographic css customizable @@ -328,6 +330,7 @@ edk ee eebc eht +emulatorpin entrypoint epil epilog diff --git a/source/open_cluster_deployment/kvm_node/kvm_driver.rst b/source/open_cluster_deployment/kvm_node/kvm_driver.rst index f0cb16cce..a11a26986 100644 --- a/source/open_cluster_deployment/kvm_node/kvm_driver.rst +++ b/source/open_cluster_deployment/kvm_node/kvm_driver.rst @@ -16,7 +16,7 @@ Considerations & Limitations Try to use :ref:`virtio ` whenever possible, both for networks and disks. Using emulated hardware, both for networks and disks, will have an impact on performance and will not expose all the available functionality. For instance, if you don't use ``virtio`` for the disk drivers, you will not be able to exceed a small number of devices connected to the controller, meaning that you have a limit when attaching disks and it will not work while the VM is running (live disk-attach). -When **updating the VM configuration live** using ``one.vm.updateconf`` although the all of the VM configuration will get updated on the VM instance template, only the CONTEXT and BACKUP_CONFIG will take effect immediately. The rest of the configuration will not take effect until the next VM reboot because it changes the VM virtual hardware. +When **updating the VM configuration live** using ``one.vm.updateconf`` although all of the VM configuration will get updated on the VM instance template, only the CONTEXT and BACKUP_CONFIG will take effect immediately. The rest of the configuration will not take effect until the next VM reboot because it changes the VM virtual hardware. The full list of configuration attributes are: @@ -50,22 +50,30 @@ The KVM driver is enabled by default in OpenNebula ``/etc/one/oned.conf`` on you Driver Defaults -------------------------------------------------------------------------------- -There are some attributes required for KVM to boot a VM. You can set a suitable default for them so all the VMs get the required values. These attributes are set in ``/etc/one/vmm_exec/vmm_exec_kvm.conf``. The following can be set for KVM: +There are some attributes required for KVM to boot a VM. You can set a suitable default for them so all the VMs get the required values. These attributes are set in ``/etc/one/vmm_exec/vmm_exec_kvm.conf``. Default values from the configuration file can be overriden in the Cluster, Host or VM Template. The following attributes can be set for KVM: * ``EMULATOR``: path to the kvm executable. -* ``OS``: attributes ``KERNEL``, ``INITRD``, ``BOOT``, ``ROOT``, ``KERNEL_CMD``, ``MACHINE``, ``ARCH`` and ``SD_DISK_BUS``. +* ``OS``: attributes ``KERNEL``, ``INITRD``, ``ROOT``, ``KERNEL_CMD``, ``MACHINE``, ``ARCH``, ``SD_DISK_BUS``, ``FIRMWARE``, ``FIMRWARE_SECURE`` and ``BOOTLOADER`` * ``VCPU`` -* ``FEATURES``: attributes ``ACPI``, ``PAE``, ``APIC``, ``HEPRV``, ``GUEST_AGENT``, ``VIRTIO_SCSI_QUEUES``, ``VIRTIO_BLK_QUEUES``, ``IOTHREADS``. -* ``CPU_MODEL``: attribute ``MODEL``. -* ``DISK``: attributes ``DRIVER``, ``CACHE``, ``IO``, ``DISCARD``, ``TOTAL_BYTES_SEC``, ``TOTAL_IOPS_SEC``, ``READ_BYTES_SEC``, ``WRITE_BYTES_SEC``, ``READ_IOPS_SEC``, ``WRITE_IOPS_SEC``, ``SIZE_IOPS_SEC``. +* ``VCPU_MAX`` +* ``MEMORY_SLOTS`` +* ``FEATURES``: attributes ``ACPI``, ``PAE``, ``APIC``, ``HEPRV``, ``LOCALTIME``, ``GUEST_AGENT``, ``VIRTIO_SCSI_QUEUES``, ``VIRTIO_BLK_QUEUES``, ``IOTHREADS``. +* ``CPU_MODEL``: attribute ``MODEL``, ``FEATURES``. +* ``DISK``: attributes ``DRIVER``, ``CACHE``, ``IO``, ``DISCARD``, ``TOTAL_BYTES_SEC``, ``TOTAL_BYTES_SEC_MAX``, ``TOTAL_BYTES_SEC_MAX_LENGTH``, ``TOTAL_IOPS_SEC``, ``TOTAL_IOPS_SEC_MAX``, ``TOTAL_IOPS_SEC_MAX_LENGTH``, ``READ_BYTES_SEC``, ``READ_BYTES_SEC_MAX``, ``READ_BYTES_SEC_MAX_LENGTH``, ``WRITE_BYTES_SEC``, ``WRITE_BYTES_SEC_MAX``, ``WRITE_BYTES_SEC_MAX_LENGTH``, ``READ_IOPS_SEC``, ``READ_IOPS_SEC_MAX``, ``READ_IOPS_SEC_MAX_LENGTH``, ``WRITE_IOPS_SEC``, ``WRITE_IOPS_SEC_MAX``, ``WRITE_IOPS_SEC_MAX_LENGTH``, ``SIZE_IOPS_SEC``. * ``NIC``: attribute ``FILTER``, ``MODEL``. * ``GRAPHICS``: attributes ``TYPE``, ``LISTEN``, ``PASSWD``, ``KEYMAP``, ``RANDOM_PASSWD``. The VM instance must have at least empty ``GRAPHICS = []`` section to read these default attributes from the config file and to generate cluster unique ``PORT`` attribute. * ``VIDEO``: attributes: ``TYPE``, ``IOMMU``, ``ATS``, ``VRAM``, ``RESOLUTION``. * ``RAW``: to add libvirt attributes to the domain XML file. * ``HYPERV_OPTIONS``: to enable hyperv extensions. +* ``HYPERV_TIMERS``: timers added when HYPERV is set to yes in FEATURES. * ``SPICE_OPTIONS``: to add default devices for SPICE. + +The following attributes can be overridden at Cluster and Host level, but not within individual VM configuration: + * ``OVMF_UEFIS``: to add allowed file paths for Open Virtual Machine Firmware. * ``Q35_ROOT_PORTS``: to modify the number of PCI devices that can be attached in q35 VMs (defaults to 16) +* ``CGROUPS_VERSION``: Use '2' to use Cgroup V2, all other values or undefined: use Cgroup V1 +* ``EMULATOR_CPUS``: Value used for kvm option .. warning:: These values are only used during VM creation; for other actions like nic or disk attach/detach the default values must be set in ``/var/lib/one/remotes/etc/vmm/kvm/kvmrc``. For more info check :ref:`Files and Parameters ` section. @@ -89,10 +97,6 @@ For example (check the actual state in the configuration file on your Front-end) " -.. note:: - - These values can be overriden in the Cluster, Host and VM Template - **Since OpenNebula 6.0** you should no longer need to modify the ``EMULATOR`` variable to point to the kvm executable; instead, ``EMULATOR`` now points to the symlink ``/usr/bin/qemu-kvm-one`` which should link the correct KVM binary for the given OS on a Host. Live-Migration for Other Cache settings @@ -526,77 +530,85 @@ And the following driver configuration files: The parameters that can be changed here are as follows: -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Parameter | Description | -+===============================================+=================================================================================================================================================================================================================+ -| ``LIBVIRT_URI`` | Connection string to libvirtd | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``QEMU_PROTOCOL`` | Protocol used for live migrations | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``SHUTDOWN_TIMEOUT`` | Seconds to wait after shutdown until timeout | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``VIRSH_RETRIES`` | Number of "virsh" command retries when required. Currently used in detach-interface and restore. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``SYNC_TIME`` | Trigger VM time synchronization from RTC on resume and after migration. QEMU guest agent must be running. Valid values: ``no`` or ``yes`` (default). | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``FORCE_DESTROY`` | Force VM cancellation after shutdown timeout | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``CANCEL_NO_ACPI`` | Force VMs without ACPI enabled to be destroyed on shutdown | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``MIGRATE_OPTIONS`` | Set options for the virsh migrate command | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``CLEANUP_MEMORY_ON_START`` | Compact memory before running the VM. Values ``yes`` or ``no`` (default) | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``CLEANUP_MEMORY_ON_STOP`` | Compact memory after VM stops. Values ``yes`` (default) or ``no`` | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_CACHE`` | This parameter will set the default cache type for new attached disks. It will be used in case the attached disk does not have a specific cache method set (can be set using templates when attaching a disk). | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_DISCARD`` | Default discard option for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_IO`` | Default I/O policy for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_TOTAL_BYTES_SEC`` | Default total bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_TOTAL_BYTES_SEC_MAX`` | Default Maximum total bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_TOTAL_BYTES_SEC_MAX_LENGTH`` | Default Maximum length total bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_READ_BYTES_SEC`` | Default read bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_READ_BYTES_SEC_MAX`` | Default Maximum read bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_READ_BYTES_SEC_MAX_LENGTH`` | Default Maximum length read bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_WRITE_BYTES_SEC`` | Default write bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_WRITE_BYTES_SEC_MAX`` | Default Maximum write bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_WRITE_BYTES_SEC_MAX_LENGTH`` | Default Maximum length write bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_TOTAL_IOPS_SEC`` | Default total IOPS throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_TOTAL_IOPS_SEC_MAX`` | Default Maximum total IOPS throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_TOTAL_IOPS_SEC_MAX_LENGTH`` | Default Maximum length total IOPS throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_READ_IOPS_SEC`` | Default read IOPS throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_READ_IOPS_SEC_MAX`` | Default Maximum read IOPS throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_READ_IOPS_SEC_MAX_LENGTH`` | Default Maximum length read IOPS throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_WRITE_IOPS_SEC`` | Default write IOPS throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_WRITE_IOPS_SEC_MAX`` | Default Maximum write IOPS throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_WRITE_IOPS_SEC_MAX_LENGTH`` | Default Maximum length write IOPS throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_SIZE_IOPS_SEC`` | Default size of IOPS throttling for newly attached disks, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_NIC_MODEL`` | Default NIC model for newly attached NICs, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``DEFAULT_ATTACH_NIC_FILTER`` | Default NIC libvirt filter for newly attached NICs, if the attribute is missing in the template. | -+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| Parameter | Description | ++===============================================+============================================================================================================================+ +| ``LIBVIRT_URI`` | Connection string to libvirtd | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``QEMU_PROTOCOL`` | Protocol used for live migrations | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``SHUTDOWN_TIMEOUT`` | Seconds to wait after shutdown until timeout | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``VIRSH_RETRIES`` | Number of "virsh" command retries when required. Currently used in detach-interface and restore. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``VIRSH_TIMEOUT`` | Default "virsh" timeout for operations which might block indefinitely. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``SYNC_TIME`` | Trigger VM time synchronization from RTC on resume and after migration. QEMU guest agent must be running. | +| | Valid values: ``no`` or ``yes`` (default). | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``FORCE_DESTROY`` | Force VM cancellation after shutdown timeout | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``CANCEL_NO_ACPI`` | Force VMs without ACPI enabled to be destroyed on shutdown | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``MIGRATE_OPTIONS`` | Set options for the virsh migrate command | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``CLEANUP_MEMORY_ON_START`` | Compact memory before running the VM. Values ``yes`` or ``no`` (default) | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``CLEANUP_MEMORY_ON_STOP`` | Compact memory after VM stops. Values ``yes`` or ``no`` (default) | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_CACHE`` | This parameter will set the default cache type for new attached disks. It will be used in case the attached disk does | +| | not have a specific cache method set (can be set using templates when attaching a disk). | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_DISCARD`` | Default discard option for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_IO`` | Default I/O policy for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_VIRTIO_BLK_QUEUES`` | The default number of queues for virtio-blk driver. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_TOTAL_BYTES_SEC`` | Default total bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_TOTAL_BYTES_SEC_MAX`` | Default Maximum total bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_TOTAL_BYTES_SEC_MAX_LENGTH`` | Default Maximum length total bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_READ_BYTES_SEC`` | Default read bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_READ_BYTES_SEC_MAX`` | Default Maximum read bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_READ_BYTES_SEC_MAX_LENGTH`` | Default Maximum length read bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_WRITE_BYTES_SEC`` | Default write bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_WRITE_BYTES_SEC_MAX`` | Default Maximum write bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_WRITE_BYTES_SEC_MAX_LENGTH`` | Default Maximum length write bytes/s I/O throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_TOTAL_IOPS_SEC`` | Default total IOPS throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_TOTAL_IOPS_SEC_MAX`` | Default Maximum total IOPS throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_TOTAL_IOPS_SEC_MAX_LENGTH`` | Default Maximum length total IOPS throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_READ_IOPS_SEC`` | Default read IOPS throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_READ_IOPS_SEC_MAX`` | Default Maximum read IOPS throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_READ_IOPS_SEC_MAX_LENGTH`` | Default Maximum length read IOPS throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_WRITE_IOPS_SEC`` | Default write IOPS throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_WRITE_IOPS_SEC_MAX`` | Default Maximum write IOPS throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_WRITE_IOPS_SEC_MAX_LENGTH`` | Default Maximum length write IOPS throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_SIZE_IOPS_SEC`` | Default size of IOPS throttling for newly attached disks, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_NIC_MODEL`` | Default NIC model for newly attached NICs, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``DEFAULT_ATTACH_NIC_FILTER`` | Default NIC libvirt filter for newly attached NICs, if the attribute is missing in the template. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ``OVMF_NVRAM`` | Virtual Machine Firmware path to the NVRAM file. | ++-----------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ See the :ref:`Virtual Machine drivers reference ` for more information. From 6eaca162309ffaaeb5381404d4d6cb647dd3d350 Mon Sep 17 00:00:00 2001 From: Pavel Czerny Date: Wed, 13 Nov 2024 12:10:58 +0100 Subject: [PATCH 12/32] M #-: Update VM search with special characters (cherry picked from commit 1136eb935aab28f8871ca97c5e2eac2f35eef267) --- .../vm_management/vm_instances.rst | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/source/management_and_operations/vm_management/vm_instances.rst b/source/management_and_operations/vm_management/vm_instances.rst index 5190f84b9..d018f8745 100644 --- a/source/management_and_operations/vm_management/vm_instances.rst +++ b/source/management_and_operations/vm_management/vm_instances.rst @@ -157,10 +157,21 @@ and details about it can be obtained with ``show``: Searching for VM Instances -------------------------------------------------------------------------------- -You can search for VM instances by using the ``--search`` option of the ``onevm list`` command. This is specially useful on large environments with many VMs. The filter must be in a ``VM.KEY1=VALUE1&VM.KEY2=VALUE2`` format and will return all the VMs which fit the filter. The ``&`` works as logical AND. You can use ``*=VALUE`` to search the full VM body. +You can search for VM instances by using the ``--search`` option of the ``onevm list`` command. This is specially useful on large environments with many VMs. The filter must be in a ``VM.KEY1=VALUE1&VM.KEY2=VALUE2`` format and will return all the VMs which fit the filter. The ``&`` works as logical AND. You can use ``*=VALUE`` to search the full VM body or ``VM.TEMPLATE=VALUE`` to search whole template. Searching is performed using JSON on the whole body of the VM. You can use the MySQL JSON path without the leading ``$.``, information about the path structure can be found in the [MySQL Documentation](https://dev.mysql.com/doc/refman/5.7/en/json.html#json-path-syntax) or [MariaDB Documentation](https://mariadb.com/kb/en/jsonpath-expressions/). Currently, the value is wrapped in ``%`` for the query, so it will match if it contains the value provided. +The ``VALUE`` part of a search query can utilize special characters to create flexible matching patterns: + +* ``%``: Matches any string, allowing for wildcard searches. For example, ``a%a%a`` matches names containing three "a"s in any position, with any number of characters between them. +* ``_``: Matches any single character, enabling precise pattern matching. For instance, ``a_a_a`` matches names with three "a"s, each separated by exactly one character. +* ``&``: Cannot be used in the ``VALUE`` part of the search query, as it is always interpreted as logical AND operator and does not support escaping. + +To search for strings that contain ``%`` or ``_`` literally, escape these characters with a backslash ``\``. For example: + +* ``a\%a`` will search for "a%a" as an exact sequence. +* ``a\_a`` will match "a_a" without interpreting ``_`` as a single-character wildcard. + For example, for searching a VM with a specific MAC address: .. prompt:: text $ auto From 5062efdb3826f1216b7d47a68953e2715d09162b Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Thu, 21 Nov 2024 18:40:04 +0100 Subject: [PATCH 13/32] B OpenNebula/one#6548: Add to resolved issues --- .../release_notes_enterprise/resolved_issues_6102.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index ed9e824e3..122655ba1 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -13,3 +13,5 @@ The following issues has been solved in 6.10.2: - `Fix bug in the DS Ceph driver: set the value for the --keyfile to CEPH_KEY instead of CEPH_USER in the export operation .`__. - `Fix GOCA OS vector attribute to include FIRMWARE, FIRMWARE_SECURE, UUID and SD_DISK_BUS .`__. - `Fix PyOne installation through pip .`__. +- `Fix the list of attibutes that can be overriden in vmm_exec_kvm.conf .`__. + From b61165ca57add76e6d7ad0bb2deb0224d4c58c41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Czern=C3=BD?= Date: Fri, 22 Nov 2024 13:48:28 +0100 Subject: [PATCH 14/32] B OpenNebula/one#6793: Update resolved issues (onedb fsck) (#3109) --- .../release_notes_enterprise/resolved_issues_6102.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 122655ba1..13267c951 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -10,8 +10,8 @@ The following new features have been backported to 6.10.2: The following issues has been solved in 6.10.2: -- `Fix bug in the DS Ceph driver: set the value for the --keyfile to CEPH_KEY instead of CEPH_USER in the export operation .`__. -- `Fix GOCA OS vector attribute to include FIRMWARE, FIRMWARE_SECURE, UUID and SD_DISK_BUS .`__. -- `Fix PyOne installation through pip .`__. -- `Fix the list of attibutes that can be overriden in vmm_exec_kvm.conf .`__. - +- `Fix bug in the DS Ceph driver: set the value for the --keyfile to CEPH_KEY instead of CEPH_USER in the export operation `__. +- `Fix GOCA OS vector attribute to include FIRMWARE, FIRMWARE_SECURE, UUID and SD_DISK_BUS `__. +- `Fix PyOne installation through pip `__. +- `Fix the list of attibutes that can be overriden in vmm_exec_kvm.conf `__. +- `Fix a rare crash in 'onedb fsck' caused by a locked MarketPlaceApp in a federated environment `__. From 5eaa07d4a84184b74ba626b71e0ca97bfbaa42d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tino=20V=C3=A1zquez?= Date: Mon, 25 Nov 2024 19:32:30 +0100 Subject: [PATCH 15/32] M #-: Remove Try on VMware QS guide --- .../quick_start/deployment_basics/index.rst | 1 - .../deployment_basics/overview.rst | 2 - .../try_opennebula_on_vmware.rst | 263 ------------------ 3 files changed, 266 deletions(-) delete mode 100644 source/quick_start/deployment_basics/try_opennebula_on_vmware.rst diff --git a/source/quick_start/deployment_basics/index.rst b/source/quick_start/deployment_basics/index.rst index 53e2d26ad..e141e42ab 100644 --- a/source/quick_start/deployment_basics/index.rst +++ b/source/quick_start/deployment_basics/index.rst @@ -10,5 +10,4 @@ Deployment Basics Overview Try OpenNebula Front-end On-prem Try OpenNebula Front-end on AWS - Try OpenNebula Front-end on VMware Try OpenNebula Hosted Front-end diff --git a/source/quick_start/deployment_basics/overview.rst b/source/quick_start/deployment_basics/overview.rst index 0ada8bca8..ec09bc954 100644 --- a/source/quick_start/deployment_basics/overview.rst +++ b/source/quick_start/deployment_basics/overview.rst @@ -18,8 +18,6 @@ First, to install your Front-end, please select your preferred infrastructure: - :ref:`Deploy OpenNebula Front-end On-prem `. - :ref:`Deploy OpenNebula Front-end on AWS `. -- :ref:`Deploy OpenNebula Front-end on VMware `. - :ref:`Try OpenNebula Hosted Front-end `. Then, you can move on to the next sections to quickly deploy your VMs or multi-tier services on your new cloud. - diff --git a/source/quick_start/deployment_basics/try_opennebula_on_vmware.rst b/source/quick_start/deployment_basics/try_opennebula_on_vmware.rst deleted file mode 100644 index 045e2cd8a..000000000 --- a/source/quick_start/deployment_basics/try_opennebula_on_vmware.rst +++ /dev/null @@ -1,263 +0,0 @@ -.. _try_opennebula_on_vmware: - -============================================== -Deploy OpenNebula Front-end on VMware -============================================== - -In this tutorial, we’ll use **vOneCloud** to install an OpenNebula Front-end on top of an existing VMware installation. Completing this tutorial takes approximately five minutes. - -**vOneCLoud** is an Open Virtual Appliance (OVA) for VMware vSphere. It contains a complete OpenNebula Front-end, installed and configured on an AlmaLinux OS. It is free to download and use, and may be used for small-size production deployments. With **vOneCloud**, you can deploy on top of your VMware infrastructure all of the OpenNebula services needed to use, manage and run OpenNebula. - -In this tutorial, we’ll complete the following high-level steps: - - #. Verify the system requirements. - #. Download vOneCloud. - #. Deploy the vOneCloud OVA. - #. Configure the vOneCloud virtual appliance. - #. Access the OpenNebula Front-end through the Sunstone GUI. - -After finishing this tutorial, you will have deployed a complete, ready-to-use OpenNebula Front-end on top of your VMware infrastructure. You will then be able to log in via the Sunstone GUI, define hosts and deploy virtual machines. - -Brief Overview of vOneCloud -=========================== - -.. image:: /images/vonecloud_logo.png - :align: center - -vOneCloud ships with a default of 2 vCPUs, 16 GiB of RAM and 100GB of disk size. It is certified for infrastructures of the following dimensions: - -- Up to 1000 VMs in total -- Up to 100 users, with a limit of 10 users accessing the system simultaneously - -vOneCloud ships with the following components under the hood: - -+-----------------------+--------------------------------------------------------------------------------------------------+ -| **AlmaLinux** | 8 | -+-----------------------+--------------------------------------------------------------------------------------------------+ -| **OpenNebula** | |version| (:ref:`release notes `) | -+-----------------------+--------------------------------------------------------------------------------------------------+ -| **MariaDB** | Default version shipped in AlmaLinux 8 | -+-----------------------+--------------------------------------------------------------------------------------------------+ -| **Phusion Passenger** | Default version shipped in AlmaLinux 8 (used to run Sunstone) | -+-----------------------+--------------------------------------------------------------------------------------------------+ - -.. _accounts: - -vOneCloud ships with several pre-created user accounts, described below: - -+----------+---------------------+-------------------------+----------------------------------------------------------------------------------+ -| Account | Interface | Role | Description | -+==========+=====================+=========================+==================================================================================+ -| root | Linux | Appliance administrator | This user can log into the appliance (local login, no SSH). | -+----------+---------------------+-------------------------+----------------------------------------------------------------------------------+ -| oneadmin | Linux | Service user | Used to run all OpenNebula services. | -+----------+---------------------+-------------------------+----------------------------------------------------------------------------------+ -| oneadmin | OpenNebula Sunstone | Cloud administrator | Cloud administrator. Run any task in OpenNebula, including creating other users. | -+----------+---------------------+-------------------------+----------------------------------------------------------------------------------+ - -vOneCloud includes the Control Console, a text-based interface that offers menus for configuring the appliance. You can access the Control Console by opening the vOneCloud appliance console in vCenter. We will use the Control Console to configure vOneCloud in the steps below. - -.. note:: - - Please bear in mind that vOneCloud is shipped only for evaluation purposes. - - -Step 1. Verify the System Requirements -====================================== - -To deploy and use the vOneCloud appliance, you will need the following: - - * **vCenter 7.0** with ESX hosts grouped into clusters. - * **ESX 7.0** with at least 16 GB of free RAM and a datastore with 100 GB of free space. - * **Information** for connecting to vCenter7.0: - - IP or DNS address - - Login credentials (username and password) of an admin user - * **Web browser**: Firefox (3.5 and above) or Chrome. - - .. warning :: - - Other browsers, including Safari, are not supported and may not work well. - -Step 2. Download vOneCloud -========================== - -To download vOneCloud, you will need to complete the `download form `__. - -Download the OVA and save it to a convenient location. - -Step 3. Deploy the vOneCloud OVA -==================================== - -Log in to your vCenter installation. Determine which cluster to deploy vOneCloud on. - -In the left-hand pane, right-click the desired cluster, then click **Deploy OVF Template**. - -.. image:: /images/6.10-vOneCloud-download-deploy-001.png - :align: center - :scale: 70% - -| - -In the **Deploy OVF Template** dialog box, select **Local file**, then click **Browse**. Search for and select the vOneCloud appliance OVA that you downloaded. - -Click **Next**. In the next few screens, follow the vCenter wizard to deploy vOneCloud as you would any other OVA. You will need to select the compute resource to deploy on, the datastore where the OVA will be copied, and the network that the virtual appliance will use. - -.. note:: - - The datastore used for the vOneCloud appliance needs to have at least 100 GB of available space. - -The final screen displays a summary of deployment information. Click **Finish**. - -Wait for the deployment to complete. This should not take more than a few moments. - -After the VM has finished booting, the Web Console should display the OpenNebula Control Console: - -.. image:: /images/control-console.png - :align: center - :scale: 60% - -| - -At this point, the vOneCloud virtual appliance is up and running. - -.. note:: - - If instead of the Control Console you see a normal Linux tty login screen: - - .. image:: /images/control-console-wrong.png - :align: center - :scale: 60% - - then the virtual appliance is displaying the wrong tty terminal. The vOneCloud Control Console is on tty1. To access tty1, press ``Ctrl+Alt+F1``. - -In the next steps we’ll configure the vOneCloud appliance. - -Step 4. Configure vOneCloud -=========================== - -We’ll configure the following: - - * Network connection for the vOneCloud appliance - * OpenNebula user ``oneadmin`` password - * Linux ``root`` password - * IP address or FQDN for the public endpoint of Sunstone - -Step 4.1. Configure the Network -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The vOneCloud appliance is configured to connect automatically via DHCP. If you are using DHCP, you can skip to the :ref:`next step `. If using a manual network configuration, read on. - -To configure the network, in the Control Console press ``1``. Then, follow these steps: - - #. Select **Edit a connection**. - #. Select **System eth0**. - #. Select **IPv4 Configuration**, then **Show**. - #. Change the configuration from ``Automatic`` to ``Manual``. - #. Fill in the required information for manual configuration: - - **Addresses**: IPv4 address in /24 notation, e.g. ``10.0.1.249/24``. To add more addresses, use the **Add** item under the **Addresses** field. - - **Gateway**: IP address of the Gateway for the appliance. - - **DNS servers**: IP address(es) of one or more DNS servers. - - **Search domain** (optional): Search domains for DNS. - -Below is an example of a static network configuration on the available network interface, ``eth0``. The interface is set on the 10.0.1.x Class C network, the gateway is at 10.0.1.1 and the DNS server at 8.8.8.8. - -.. image:: /images/network-conf-example.png - :align: center - :scale: 60% - -| - -After filling in the information, select **OK** to exit the dialog. - -In the next screen, select **Activate a connection** and ensure that **System eth0** is activated. Then, select **Set system hostname** and type a hostname. - - -.. _Step 4.2: - -Step 4.2. Configure the OpenNebula User Password -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -In the Control Console, press ``2`` to configure the password for the OpenNebula user, ``oneadmin``. - -Enter the desired password. You will use this password to log into the Sunstone GUI in the last step of this tutorial. - -.. important:: - - This password is for the OpenNebula system user account, not to be confused with the Linux user ``oneadmin``. - -.. _Step 4.3: - -Step 4.3. Configure the Linux ``root`` User Password -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -In the Control Console, press ``3`` to set the password for the Linux OS ``root`` user. This is your master password for the virtual appliance. - -.. warning:: - - This password is not often used, so it’s easy to forget. As in all Unix-like systems, there is no way to recover a lost ``root`` password, so ensure it is stored in a safe place. - -.. _Step 4.4: - -Step 4.4. Configure a Public IP for vOneCloud -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -In the Control Console, press ``4`` to select the FQDN or public IP address that will serve as the endpoint for accessing the Sunstone GUI. - -At this point, the vOneCloud appliance is configured and ready to be accessed through the Sunstone GUI. - -.. important:: - - Bear in mind that in this evaluation version, the FireEdge server for the Sunstone UI is listening on unencrypted HTTP over a public IP address. - -Step 5. Access the OpenNebula Front-end through the Sunstone GUI -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Open a web browser (Firefox or Chrome) and enter the public IP or FQDN you defined as the Sunstone endpoint in :ref:`Step 4.4 `. For example, ``http://10.0.1.176``. - -You should be greeted by the Sunstone login screen: - -.. image:: /images/sunstone_login_dark.png - :align: center - :scale: 50% - -| - -In the **Username** field, type ``oneadmin``. In the **Password** field, enter the password you defined for the OpenNebula user in :ref:`Step 4.2 `. - -Sunstone should display the Dashboard: - -.. image:: /images/6.10-sunstone_dashboard.png - :align: center - :scale: 50% - -| - -Congratulations — you have deployed and fully configured an OpenNebula Front-end on your VMware infrastructure. At this point, you are ready to add computing clusters to OpenNebula and launch virtual machines. - -.. note:: - - If you get an error message from Sunstone when attempting to log in, it means the public endpoint for Sunstone is not properly configured. - - .. image:: /images/sunstone-fe-error.png - :align: center - :scale: 70% - - Return to the Control Console and configure a public IP or FQDN (see :ref:`Step 4.4 ` above). - -.. _advanced_login: - -Accessing the Linux CLI in the Virtual Appliance -================================================ - -If wish to access the Linux OS running on the virtual appliance, you can do so in one of two ways: - - * Using SSH: - - Connect to vOneCloud’s public IP address or FQDN. For example: ``ssh root@10.0.1.176``. - (If connecting from Windows, you can use a program such as `PuTTY `__ or `WinSCP `__.) - * Using vCenter: - - When connected to the Control Console, change to tty2 by pressing ``Ctrl+Alt+F2``. Then, log in to the system as ``root`` with the password you defined in :ref:`Step 4.3 `. - -Next Steps -========== - -Want to try out automatic resource provisioning on public infrastructure? Follow the :ref:`Operations Guide ` to deploy an Edge Cluster on AWS — in under 10 minutes — and add computing power to your OpenNebula cloud. From e2c94a65bc636b57284956f2fb4baefe483e5357 Mon Sep 17 00:00:00 2001 From: Pedro Ielpi <167760533+pedroielpi3@users.noreply.github.com> Date: Wed, 4 Dec 2024 17:45:05 +0100 Subject: [PATCH 16/32] M #-: Change case of project names in ACKs (#3120) (cherry picked from commit 57cb07bb43c8bfc15a646cc2e64b9ba35a0697e2) --- .../intro_release_notes/release_notes/acknowledgements.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/intro_release_notes/release_notes/acknowledgements.rst b/source/intro_release_notes/release_notes/acknowledgements.rst index c828f7b4e..534598ecd 100644 --- a/source/intro_release_notes/release_notes/acknowledgements.rst +++ b/source/intro_release_notes/release_notes/acknowledgements.rst @@ -6,8 +6,8 @@ Acknowledgements The OpenNebula project would like to thank the `community members `__ and `users `__ who have contributed to this software release by being active in discussions, answering user questions, or providing patches for bugfixes, features, and documentation. -Part of the new functionality in OpenNebula 6.10 has been funded by the following innovation projects: +Some of the new functionality in OpenNebula 6.10 has been made possible through funding from the following innovation projects: * `SovereignEdge.Cognit `__ (Grant Agreement 101092711), through the European Union’s Horizon Europe Research and Innovation Programme. - * `OneEdge5G `__ (Grant Agreement TSI-064200-2023-1), supported by the Spanish Ministry for Digital Transformation and Civil Service through the UNICO I+D 6G Program, co-funded by the European Union – NextGenerationEU through the Recovery and Resilience Facility (RRF). - * `OneNextGen `__ (Grant Agreement UNICO IPCEI-2023-003), supported by the Spanish Ministry for Digital Transformation and Civil Service through the UNICO IPCEI Program, co-funded by the European Union – NextGenerationEU through the Recovery and Resilience Facility (RRF). + * `ONEedge5G `__ (Grant Agreement TSI-064200-2023-1), supported by the Spanish Ministry for Digital Transformation and Civil Service through the UNICO I+D 6G Program, co-funded by the European Union – NextGenerationEU through the Recovery and Resilience Facility (RRF). + * `ONEnextgen `__ (Grant Agreement UNICO IPCEI-2023-003), supported by the Spanish Ministry for Digital Transformation and Civil Service through the UNICO IPCEI Program, co-funded by the European Union – NextGenerationEU through the Recovery and Resilience Facility (RRF). From 7d96d81f4596ab98d8616ea4d2975aa68a3a2212 Mon Sep 17 00:00:00 2001 From: Pedro Ielpi <167760533+pedroielpi3@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:55:55 +0100 Subject: [PATCH 17/32] M #-: Fix broken reference to docs page (#3121) Signed-off-by: Pedro Ielpi (cherry picked from commit 377686901a1d0bd5d84d45be3463a395d193f9d6) --- .../management_and_operations/network_management/overview.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/management_and_operations/network_management/overview.rst b/source/management_and_operations/network_management/overview.rst index e4ad33c59..4316c4bbf 100644 --- a/source/management_and_operations/network_management/overview.rst +++ b/source/management_and_operations/network_management/overview.rst @@ -10,7 +10,7 @@ How Should I Read This Chapter Before reading this chapter, you should have already installed and configured your cloud. The Chapter is structured as follows: - The :ref:`Virtual Networks ` and :ref:`Virtual Networks Templates ` explain how to create networks. - - Regular users can self-provision virtual networks for their use. ref:`The details are explained here `. + - The :ref:`Self Provision ` section details how regular users can self-provision virtual networks for their use. - You will also find information on :ref:`Security Groups `, to easily define firewall rules. - Additionally you will learn on how to manage :ref:`Virtual Routers ` which are an OpenNebula resource that provide routing across Virtual Networks. From ca487ea652f6ffbf957313388013ccc9f925687a Mon Sep 17 00:00:00 2001 From: Angel <43379282+angeryuu@users.noreply.github.com> Date: Thu, 5 Dec 2024 17:26:03 +0100 Subject: [PATCH 18/32] M opennebula/docs#6768: Add Fix filter by locked to RNs (#3122) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ángel Cívico Martos --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 13267c951..069244de4 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -15,3 +15,4 @@ The following issues has been solved in 6.10.2: - `Fix PyOne installation through pip `__. - `Fix the list of attibutes that can be overriden in vmm_exec_kvm.conf `__. - `Fix a rare crash in 'onedb fsck' caused by a locked MarketPlaceApp in a federated environment `__. +- `Fix Sunstone filter VMs on "Locked" gives empty white page `__. From 098f17e03cc124835a0dd2b8f05050829d4d5631 Mon Sep 17 00:00:00 2001 From: Pedro Ielpi <167760533+pedroielpi3@users.noreply.github.com> Date: Mon, 9 Dec 2024 16:14:03 +0100 Subject: [PATCH 19/32] M #-: Add mention of thin provisioning in NFS/NAS Datastore page (#3123) Signed-off-by: Pedro Ielpi (cherry picked from commit 95db3914ba0cd20f60498aa5e56dbf2d53e35b41) --- .../open_cluster_deployment/storage_setup/nas_ds.rst | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/open_cluster_deployment/storage_setup/nas_ds.rst b/source/open_cluster_deployment/storage_setup/nas_ds.rst index 13af6d7f0..01fa113e9 100644 --- a/source/open_cluster_deployment/storage_setup/nas_ds.rst +++ b/source/open_cluster_deployment/storage_setup/nas_ds.rst @@ -4,14 +4,16 @@ NFS/NAS Datastores ================================================================================ -This storage configuration assumes that your Hosts can access and mount a shared volume located on a NAS (Network Attached Storage) server. You will use this shared volumes to store VM disk images files. The Virtual Machines will boot also from the shared volume. +This storage configuration assumes that your Hosts can access and mount a shared volume located on a NAS (Network Attached Storage) server. You will use this shared volume to store VM disk images files. The Virtual Machines will boot also from the shared volume. -The scalability of this solution is bounded to the performance of your NAS server. However you can use multiple NAS server simultaneously to improve the scalability of your OpenNebula cloud. The use of multiple NFS/NAS datastores will let you: +The scalability of this solution will be bound to the performance of your NAS server. However, you can use multiple NAS server simultaneously to improve the scalability of your OpenNebula cloud. The use of multiple NFS/NAS datastores will allow you to: * Balance I/O operations between storage servers. -* Apply different SLA policies (e.g., backup) to different VM types or users. +* Apply different SLA policies (e.g. backup) to different VM types or users. * Easily add new storage. +Using an NFS/NAS Datastore provides a straightforward solution for implementing thin provisioning for VMs, which is enabled by default when using the **qcow2** image format. + Front-end Setup ================================================================================ @@ -19,7 +21,7 @@ Simply mount the **Image** Datastore directory in the Front-end in ``/var/lib/on .. note:: The Front-end only needs to mount the Image Datastores and **not** the System Datastores. -.. note:: **NFS volumes mount tips**. The following options are recommended to mount NFS shares:``soft, intr, rsize=32768, wsize=32768``. With the documented configuration of libvirt/kvm the image files are accessed as ``oneadmin`` user. If the files must be read by ``root``, the option ``no_root_squash`` must be added. +.. note:: **NFS volumes mount tips**. The following options are recommended to mount NFS shares:``soft, intr, rsize=32768, wsize=32768``. With the documented configuration of libvirt/kvm, the image files can be accessed as the ``oneadmin`` user. If the files must be read by ``root``, the option ``no_root_squash`` must be added. Host Setup ================================================================================ @@ -30,7 +32,7 @@ The configuration is the same as for the Front-end above: simply mount in each H OpenNebula Configuration ================================================================================ -Once the Host and Front-end storage is setup, the OpenNebula configuration comprises the creation of an Image and System Datastores. +Once Host and Front-end storage have been is set up, the OpenNebula configuration comprises the creation of an Image and System Datastores. Create System Datastore -------------------------------------------------------------------------------- From 8220693cea82e7fec4065bc3ae580803d237eea1 Mon Sep 17 00:00:00 2001 From: vichansson Date: Wed, 11 Dec 2024 12:15:24 +0200 Subject: [PATCH 20/32] B OpenNebula/one#6788: Update resolved issues (#3124) Signed-off-by: Victor Hansson --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 069244de4..2f70d555b 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -16,3 +16,4 @@ The following issues has been solved in 6.10.2: - `Fix the list of attibutes that can be overriden in vmm_exec_kvm.conf `__. - `Fix a rare crash in 'onedb fsck' caused by a locked MarketPlaceApp in a federated environment `__. - `Fix Sunstone filter VMs on "Locked" gives empty white page `__. +- `Fix Sunstone host graph not showing information `__. From 5579c723f49a141a09f05819aa63d953b19a2f9a Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Wed, 11 Dec 2024 13:03:37 +0100 Subject: [PATCH 21/32] B OpenNebula/one#6759: Add to resolved issues --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 2f70d555b..c180e588b 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -17,3 +17,4 @@ The following issues has been solved in 6.10.2: - `Fix a rare crash in 'onedb fsck' caused by a locked MarketPlaceApp in a federated environment `__. - `Fix Sunstone filter VMs on "Locked" gives empty white page `__. - `Fix Sunstone host graph not showing information `__. +- `Fix SecurityGroup rule validation logic to include additional checks for port ranges `__. From 79ac8fabc66f9d93c15d235550ff4e048a34455e Mon Sep 17 00:00:00 2001 From: Valentyn Bohdan Date: Wed, 11 Dec 2024 13:09:21 +0100 Subject: [PATCH 22/32] B OpenNebula/one#6750: Updated resolved issues(iotune attributes). Signed-off-by: Valentyn Bohdan --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index c180e588b..43685b31b 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -15,6 +15,7 @@ The following issues has been solved in 6.10.2: - `Fix PyOne installation through pip `__. - `Fix the list of attibutes that can be overriden in vmm_exec_kvm.conf `__. - `Fix a rare crash in 'onedb fsck' caused by a locked MarketPlaceApp in a federated environment `__. +- `Fix iotune attributes not being passed to VM if value is a big number `__. - `Fix Sunstone filter VMs on "Locked" gives empty white page `__. - `Fix Sunstone host graph not showing information `__. - `Fix SecurityGroup rule validation logic to include additional checks for port ranges `__. From 584e11e1f8e6c8caff5850bdc944a8e8117b54e6 Mon Sep 17 00:00:00 2001 From: vichansson Date: Wed, 11 Dec 2024 14:57:12 +0200 Subject: [PATCH 23/32] B OpenNebula/one#6757: Update resolved issues (#3125) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Victor Hansson Co-authored-by: Tino Vázquez --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 43685b31b..687e2e31c 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -18,4 +18,5 @@ The following issues has been solved in 6.10.2: - `Fix iotune attributes not being passed to VM if value is a big number `__. - `Fix Sunstone filter VMs on "Locked" gives empty white page `__. - `Fix Sunstone host graph not showing information `__. +- `Fix missing boot order selector `__. - `Fix SecurityGroup rule validation logic to include additional checks for port ranges `__. From 6081444e6430d33596bd04001770331977aab134 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Wed, 11 Dec 2024 17:01:54 +0100 Subject: [PATCH 24/32] F OpenNebula/one#6185: Added fix to resolved issues --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 687e2e31c..1a8795a1a 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -20,3 +20,4 @@ The following issues has been solved in 6.10.2: - `Fix Sunstone host graph not showing information `__. - `Fix missing boot order selector `__. - `Fix SecurityGroup rule validation logic to include additional checks for port ranges `__. +- `Fix KVM domain definition to set up CPU affinity to the auto-selected NUMA node when using huge pages without CPU pinning `__. From 0ab0d09802ab4169b3dba5662dc828631cb7201e Mon Sep 17 00:00:00 2001 From: Pedro Ielpi <167760533+pedroielpi3@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:09:55 +0100 Subject: [PATCH 25/32] M #-: Update ACKs with new version (#3128) Signed-off-by: Pedro Ielpi (cherry picked from commit b149a83bfb28a7716eae6c08b8ce77f8feac991a) --- .../intro_release_notes/release_notes/acknowledgements.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/intro_release_notes/release_notes/acknowledgements.rst b/source/intro_release_notes/release_notes/acknowledgements.rst index 534598ecd..f7b83dc7a 100644 --- a/source/intro_release_notes/release_notes/acknowledgements.rst +++ b/source/intro_release_notes/release_notes/acknowledgements.rst @@ -8,6 +8,6 @@ The OpenNebula project would like to thank the `community members `__ (Grant Agreement 101092711), through the European Union’s Horizon Europe Research and Innovation Programme. - * `ONEedge5G `__ (Grant Agreement TSI-064200-2023-1), supported by the Spanish Ministry for Digital Transformation and Civil Service through the UNICO I+D 6G Program, co-funded by the European Union – NextGenerationEU through the Recovery and Resilience Facility (RRF). - * `ONEnextgen `__ (Grant Agreement UNICO IPCEI-2023-003), supported by the Spanish Ministry for Digital Transformation and Civil Service through the UNICO IPCEI Program, co-funded by the European Union – NextGenerationEU through the Recovery and Resilience Facility (RRF). + * `SovereignEdge.Cognit `__, funded by the European Union’s Horizon Europe research and innovation programme through the SovereignEdge.Cognit project: A Cognitive Serverless Framework for the Cloud-Edge Continuum (Grant Agreement 101092711 - SovereignEdge.Cognit [2023-2025]). + * `ONEedge5G `__, funded by the Spanish Ministry for Digital Transformation and Civil Service through the ONEedge5G Project: Intelligence and Automation for the Operation of Distributed Edge Systems on 5G Advanced Infrastructures (TSI-064200-2023-1) and co-funded by the European Union’s NextGenerationEU Instrument through the Recovery and Resilience Facility (RRF). + * `ONEnextgen `__, funded by the Spanish Ministry for Digital Transformation and Civil Service through the ONEnextgen Project: Next-Generation European Platform for the Datacenter-Cloud-Edge Continuum (UNICO IPCEI-2023-003) and co-funded by the European Union’s NextGenerationEU instrument through the Recovery and Resilience Facility (RRF). From 16cdf189754b7b734fc612479ece14ee99df77ec Mon Sep 17 00:00:00 2001 From: vichansson Date: Fri, 13 Dec 2024 15:54:50 +0200 Subject: [PATCH 26/32] B OpenNebula/one#6716: Update resolved issues (#3129) Signed-off-by: Victor Hansson --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 1a8795a1a..b25f2c5a2 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -18,6 +18,7 @@ The following issues has been solved in 6.10.2: - `Fix iotune attributes not being passed to VM if value is a big number `__. - `Fix Sunstone filter VMs on "Locked" gives empty white page `__. - `Fix Sunstone host graph not showing information `__. +- `Fix number of instances ignored in service instantiation `__. - `Fix missing boot order selector `__. - `Fix SecurityGroup rule validation logic to include additional checks for port ranges `__. - `Fix KVM domain definition to set up CPU affinity to the auto-selected NUMA node when using huge pages without CPU pinning `__. From bf0395a7103d50c4c5ffcaada1f359b587628597 Mon Sep 17 00:00:00 2001 From: Daniel Clavijo Coca Date: Fri, 13 Dec 2024 10:14:40 -0600 Subject: [PATCH 27/32] B OpenNebula/one#6765: Update resolved issues (#3131) --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index b25f2c5a2..d2ceb0cd5 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -22,3 +22,4 @@ The following issues has been solved in 6.10.2: - `Fix missing boot order selector `__. - `Fix SecurityGroup rule validation logic to include additional checks for port ranges `__. - `Fix KVM domain definition to set up CPU affinity to the auto-selected NUMA node when using huge pages without CPU pinning `__. +- `Fix multiple problems with QEMU Guest Agent monitoring `__. Additional monitor commands for the qemu-agent probe are `shown here `__. You can add them to your existing 6.10 configuration files. From d11ea4b4a440a5d356c4ebf7d1021e3f8f44c188 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 13 Dec 2024 19:09:35 +0100 Subject: [PATCH 28/32] B OpenNebula/one#6817: Add 6817 issue to resolved issues (#3132) Signed-off-by: dcarracedo --- .../release_notes_enterprise/resolved_issues_6102.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index d2ceb0cd5..4a7ad7688 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -23,3 +23,4 @@ The following issues has been solved in 6.10.2: - `Fix SecurityGroup rule validation logic to include additional checks for port ranges `__. - `Fix KVM domain definition to set up CPU affinity to the auto-selected NUMA node when using huge pages without CPU pinning `__. - `Fix multiple problems with QEMU Guest Agent monitoring `__. Additional monitor commands for the qemu-agent probe are `shown here `__. You can add them to your existing 6.10 configuration files. +- `Fix DEV_PREFIX wrong when using Sunstone `__. \ No newline at end of file From cff57aae15cd26683e87207670948ba24382d912 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Mon, 16 Dec 2024 13:28:44 +0100 Subject: [PATCH 29/32] F OpenNebula/one#6669: Documentation for the new driver attributes: - VLAN_TAGGED_ID - CVLANS --- .../networking_setup/bridged.rst | 22 +++++ .../networking_setup/vlan.rst | 85 +++++++++++++++++++ 2 files changed, 107 insertions(+) diff --git a/source/open_cluster_deployment/networking_setup/bridged.rst b/source/open_cluster_deployment/networking_setup/bridged.rst index 42744f1e8..2495c2c35 100644 --- a/source/open_cluster_deployment/networking_setup/bridged.rst +++ b/source/open_cluster_deployment/networking_setup/bridged.rst @@ -57,3 +57,25 @@ For example, you can define a *Bridged with Security Groups* type network with t NAME = "private1" VN_MAD = "fw" + +VLAN filtering and trunking +------------------------------ + +By default the Linux bridge driver does not performs any filtering on the VLAN traffic generated by the virtual machines. You can limit the allowed VLAN to trunk in the VM ports with following attributes: + ++-------------------------------+---------------------------------------------------------------+-----------+ +| Attribute | Value | Mandatory | ++===============================+===============================================================+===========+ +| | Specify a range of VLANs that are allowed for the VM traffic. | | +| ``VLAN_TAGGED_ID`` | Comman separated list of tags, ranges are supported. | NO | ++-------------------------------+---------------------------------------------------------------+-----------+ + +For example to only allow a VM to use the VLANS IDs 100, 105, 106 and 107, add to the network: + +.. code:: + + VLAN_TAGGED_ID = "100,105-107" + +.. note:: + + The VM is responsible for tagging the VLAN traffic, no tagging is performed in the bridge diff --git a/source/open_cluster_deployment/networking_setup/vlan.rst b/source/open_cluster_deployment/networking_setup/vlan.rst index a9368e6be..f7ce963b1 100644 --- a/source/open_cluster_deployment/networking_setup/vlan.rst +++ b/source/open_cluster_deployment/networking_setup/vlan.rst @@ -100,3 +100,88 @@ For example, you can define a *802.1Q Network* with the following template: VLAN_ID = 50 # Optional. If not setting VLAN_ID set AUTOMATIC_VLAN_ID = "YES" In this example, the driver will check for the existence of the ``br0`` bridge. If it doesn't exist it will be created. ``eth0`` will be tagged (``eth0.50``) and attached to ``br0`` (unless it's already attached). + +Using 802.1Q driver with Q-in-Q +================================================================================ + +Q-in-Q is not natively supported by Linux bridges, as compared to Open vSwitch, and presents some limitations: + +- The service VLAN tag (also referred as transport or outer) cannot be preserved in the VMs, +- The bridge cannot be fully configured using both VLAN tags. + +However, for the most common scenarios the 802.1Q driver can produce the double tag and filter out VLANs not included in the customer VLAN set. In this configuration the bridge works as follow: + +- Untagged traffic from the VM will be tagged using the transport VLAN. +- Tagged traffic from the VM using the CVLANS will be also tagged with the transport VLAN. +- Tagged traffic from the VM using any other VLAN ID will be discarded. + +.. note:: + + When ``CVLANS`` is not configured the bridge will add the VLAN ID tag to any traffic comming from the VM (tagged or not). There is no filtering of the VLAN IDs used by the VM. + +OpenNebula Configuration +------------------------ + +There is no configuration specific for this use case, just consider the general options specified above. + +Defining a Q-in-Q Network +---------------------------------------- + +The Q-in-Q behavior is controlled by the following attributes (**please, also refer to the attributes defined above**): + ++-----------------------+----------------------------------------------------------------+----------------------------------------+ +| Attribute | Value | Mandatory | ++=======================+================================================================+========================================+ +| ``VLAN_ID`` | The VLAN ID for the transport/outer VLAN. | **YES** (unless ``AUTOMATIC_VLAN_ID``) | ++-----------------------+----------------------------------------------------------------+----------------------------------------+ +| ``CVLANS`` | The customer VLAN set. A comma separated list, supports ranges | **YES** | ++-----------------------+----------------------------------------------------------------+----------------------------------------+ + +For example, you can define an *QinQ aware Network* with the following template: + +.. code:: + + NAME = "qinq_net" + VN_MAD = "802.1Q" + PHYDEV = eth0 + VLAN_ID = 50 # Service VLAN ID + CVLANS = "101,103,110-113" # Customer VLAN ID list + +.. note:: + + ``CVLANS`` can be updated and will be dynamically reconfigured in any existing bridge + +Implementation Details +---------------------- + +When the ``CVLANS`` attribute is defined the 802.1Q perform the following configurations on the bridge: + +- Activate the VLAN filtering flag +- Installs a VLAN filter that includes all the VLANs in the ``CVLANS`` set in all VM ports in the network. In this way only tagged traffic in the customer set will be allowed in the bridge. +- All untagged traffic is associated to the transport (outer) VLAN. +- As in the other configurations, a tagged link for the transport VLAN is added to the bridge. This link is the one that will add the transport tag. + +The following example shows the main configurations performed in the bridge: + +.. code:: + + # - Transport / outer / S-VLAN : 100 + # - Customer / inner / C-VLAN : 200,300 + + # "Transport" link + ip link add link eth1 name eth1.100 type vlan id 100 + ip link set eth1.100 master onebr.23 + ip link set eth1.100 up + + # Bridge Configuration: + ip link set dev onebr.23 type bridge vlan_filtering 1 + + # VM port configuration (NIC 1 of VM 20, and transport link): + bridge vlan add dev one-20-1 vid 100 pvid untagged + bridge vlan add dev one-20-1 vid 200 + bridge vlan add dev one-20-1 vid 300 + + bridge vlan add dev eth1.100 vid 100 pvid untagged + bridge vlan add dev eth1.100 vid 200 + bridge vlan add dev eth1.100 vid 300 + From a210eccf0947aff4979202f05e2136920564c361 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Mon, 16 Dec 2024 15:01:37 +0100 Subject: [PATCH 30/32] F OpenNebula/one#6669: Added to resolved issues --- .../release_notes_enterprise/resolved_issues_6102.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 4a7ad7688..1e033f387 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -7,6 +7,7 @@ A complete list of solved issues for 6.10.2 can be found in the `project develop The following new features have been backported to 6.10.2: +- Add support for VLAN filtering to the Linux bridge drivers. This allows to limit the VLANs in trunk mode, as well as in QinQ mode. For more information check the :ref:`bridge driver ` and the :ref:`802.1Q VLAN driver ` documentation guides. The following issues has been solved in 6.10.2: @@ -23,4 +24,4 @@ The following issues has been solved in 6.10.2: - `Fix SecurityGroup rule validation logic to include additional checks for port ranges `__. - `Fix KVM domain definition to set up CPU affinity to the auto-selected NUMA node when using huge pages without CPU pinning `__. - `Fix multiple problems with QEMU Guest Agent monitoring `__. Additional monitor commands for the qemu-agent probe are `shown here `__. You can add them to your existing 6.10 configuration files. -- `Fix DEV_PREFIX wrong when using Sunstone `__. \ No newline at end of file +- `Fix DEV_PREFIX wrong when using Sunstone `__. From cc27392558919ab05dcd011eea90dc470fc85cde Mon Sep 17 00:00:00 2001 From: David Date: Wed, 18 Dec 2024 10:21:03 +0100 Subject: [PATCH 31/32] M #-: Update resolved issues 6.10.2 (#3133) Signed-off-by: dcarracedo --- .../ext/spellchecking/wordlists/opennebula.txt | 5 +++++ .../resolved_issues_6102.rst | 18 ++++++++++++------ .../networking_setup/bridged.rst | 2 +- .../networking_setup/vlan.rst | 2 +- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/source/ext/spellchecking/wordlists/opennebula.txt b/source/ext/spellchecking/wordlists/opennebula.txt index 490026d91..1d5cb5dae 100644 --- a/source/ext/spellchecking/wordlists/opennebula.txt +++ b/source/ext/spellchecking/wordlists/opennebula.txt @@ -116,6 +116,7 @@ PublicIP Pyone Qcow Qemu +QinQ QoS Qos RSync @@ -150,6 +151,7 @@ Unassigns Uncomment Unmanaged Unregister +Untagged Uplink VID VMs @@ -289,6 +291,7 @@ decrypted deduplicate deduplication defaultquota +del deladmin delcluster deldatastore @@ -644,6 +647,7 @@ securetty serveradmin serverless serveruser +server-del sftp sg sgID @@ -724,6 +728,7 @@ unregister unresched unshare unsynced +untagged untar updatear updateconf diff --git a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst index 1e033f387..a826b47e7 100644 --- a/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst +++ b/source/intro_release_notes/release_notes_enterprise/resolved_issues_6102.rst @@ -7,7 +7,7 @@ A complete list of solved issues for 6.10.2 can be found in the `project develop The following new features have been backported to 6.10.2: -- Add support for VLAN filtering to the Linux bridge drivers. This allows to limit the VLANs in trunk mode, as well as in QinQ mode. For more information check the :ref:`bridge driver ` and the :ref:`802.1Q VLAN driver ` documentation guides. +- `Add support for VLAN filtering to the Linux bridge drivers `__. This allows to limit the VLANs in trunk mode, as well as in QinQ mode. For more information check the :ref:`bridge driver ` and the :ref:`802.1Q VLAN driver ` documentation guides. The following issues has been solved in 6.10.2: @@ -17,11 +17,17 @@ The following issues has been solved in 6.10.2: - `Fix the list of attibutes that can be overriden in vmm_exec_kvm.conf `__. - `Fix a rare crash in 'onedb fsck' caused by a locked MarketPlaceApp in a federated environment `__. - `Fix iotune attributes not being passed to VM if value is a big number `__. -- `Fix Sunstone filter VMs on "Locked" gives empty white page `__. -- `Fix Sunstone host graph not showing information `__. -- `Fix number of instances ignored in service instantiation `__. -- `Fix missing boot order selector `__. - `Fix SecurityGroup rule validation logic to include additional checks for port ranges `__. -- `Fix KVM domain definition to set up CPU affinity to the auto-selected NUMA node when using huge pages without CPU pinning `__. +- `Fix KVM domain definition to set up CPU affinity to the auto-selected NUMA node when using huge pages without CPU pinning `__. - `Fix multiple problems with QEMU Guest Agent monitoring `__. Additional monitor commands for the qemu-agent probe are `shown here `__. You can add them to your existing 6.10 configuration files. +- `Fix Checkpoint file is not always cleaned up on VM Action `__. +- `Fix Set NEXT_SNAPSHOT=1 for persistent images `__. +- `Fix Restored disks of VM additional disks does not show the real size of the original disk `__. + +The following issues have been solved in the Sunstone Web UI: + - `Fix DEV_PREFIX wrong when using Sunstone `__. +- `Fix Sunstone host graph not showing information `__. +- `Fix number of instances ignored in service instantiation `__. +- `Fix Sunstone filter VMs on "Locked" gives empty white page `__. +- `Fix missing boot order selector `__. \ No newline at end of file diff --git a/source/open_cluster_deployment/networking_setup/bridged.rst b/source/open_cluster_deployment/networking_setup/bridged.rst index 2495c2c35..255545eed 100644 --- a/source/open_cluster_deployment/networking_setup/bridged.rst +++ b/source/open_cluster_deployment/networking_setup/bridged.rst @@ -67,7 +67,7 @@ By default the Linux bridge driver does not performs any filtering on the VLAN t | Attribute | Value | Mandatory | +===============================+===============================================================+===========+ | | Specify a range of VLANs that are allowed for the VM traffic. | | -| ``VLAN_TAGGED_ID`` | Comman separated list of tags, ranges are supported. | NO | +| ``VLAN_TAGGED_ID`` | Comma separated list of tags, ranges are supported. | NO | +-------------------------------+---------------------------------------------------------------+-----------+ For example to only allow a VM to use the VLANS IDs 100, 105, 106 and 107, add to the network: diff --git a/source/open_cluster_deployment/networking_setup/vlan.rst b/source/open_cluster_deployment/networking_setup/vlan.rst index f7ce963b1..01c9af36f 100644 --- a/source/open_cluster_deployment/networking_setup/vlan.rst +++ b/source/open_cluster_deployment/networking_setup/vlan.rst @@ -117,7 +117,7 @@ However, for the most common scenarios the 802.1Q driver can produce the double .. note:: - When ``CVLANS`` is not configured the bridge will add the VLAN ID tag to any traffic comming from the VM (tagged or not). There is no filtering of the VLAN IDs used by the VM. + When ``CVLANS`` is not configured the bridge will add the VLAN ID tag to any traffic coming from the VM (tagged or not). There is no filtering of the VLAN IDs used by the VM. OpenNebula Configuration ------------------------ From 328849775f3c203b5dba56a77eb3aeef767cb89c Mon Sep 17 00:00:00 2001 From: vichansson Date: Wed, 18 Dec 2024 14:15:48 +0200 Subject: [PATCH 32/32] M #-: Update fireedge config download link (#3134) Signed-off-by: Victor Hansson --- .../opennebula_services/fireedge.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/installation_and_configuration/opennebula_services/fireedge.rst b/source/installation_and_configuration/opennebula_services/fireedge.rst index 5aa67805d..ec1f2ccbc 100644 --- a/source/installation_and_configuration/opennebula_services/fireedge.rst +++ b/source/installation_and_configuration/opennebula_services/fireedge.rst @@ -31,7 +31,7 @@ Main Features .. _fireedge_install_configuration: .. note:: - We are continually expanding the feature set of FireEdge Sunstone, and hence its configuration files are in constant change. In versions 6.10.2 and later, configuration files in ``/etc/one/fireedge/`` can be replaced by the ones that can be downloaded from `here `__ in order to activate the latest features. + We are continually expanding the feature set of FireEdge Sunstone, and hence its configuration files are in constant change. In versions 6.10.2 and later, configuration files in ``/etc/one/fireedge/`` can be replaced by the ones that can be downloaded from `here `__ in order to activate the latest features. Configuration ================================================================================