Commit Graph

60876 Commits

Author SHA1 Message Date
Zhang Hua 065bf99fc7 Fix deepcopy usage for BlockDeviceMapping in get_root_info
The method get_root_info sometimes receives a BlockDeviceMapping object,
which lacks a copy method. The previous code assumed root_bdm was always
an instance of DriverBlockDevice, a subclass of dict that supports the copy()
method. However, during testing, it was discovered that root_bdm could also
be a BlockDeviceMapping object, which does not have a copy method.

To address this, the change replaces the copy() call with copy.deepcopy()
according to the suggestion in the comment [1], which works for both
BlockDeviceMapping and DriverBlockDevice instances. The deepcopy method is
supported because oslo.versionedobjects implements the __deepcopy__ method.

This change ensures the function handles both object types correctly,
preventing the AttributeError observed during testing.

[1] https://review.opendev.org/c/openstack/nova/+/909611/4/nova/virt/libvirt/blockinfo.py

Change-Id: I9432718586855ff57e8e6a5cae064e0685dd01e8
2024-08-20 21:48:59 +00:00
Zuul a7c82399b2 Merge "Skip new image format tests" 2024-08-14 17:54:37 +00:00
Sean Mooney c69a9eb87f Skip new image format tests
The nova-ceph-multistore job is currently
not configured properly for the new image format
tests. This change skips them until we decided
how to fix this.

Change-Id: I3de7588ba224453c24beabf8a799c71677603ba7
2024-08-13 19:32:47 +01:00
sdmitriev1 a2d77845ab Functional test test_boot_reschedule_with_proper_pci_device_count
Lets first ensure we have a test that proves we have bad behaviour,
then follow up with the fix and the test tweak to prove it.

On the first compute node it fails due to group policy error.
On the second compute node instance should have exactly one PCI device.

Related-Bug: #1860555
Change-Id: Ia122fff268c8f45ad3e5a3071d2cb7c990cb2c1d
2024-08-10 09:49:56 -04:00
Zuul 7399728e89 Merge "Fix guard for NVMeOF volumes" 2024-08-09 05:11:51 +00:00
Zuul da5bb85b6d Merge "libvirt: Detect vtpm support by libvirt" 2024-08-09 05:11:43 +00:00
Zuul c6ebee1987 Merge "libvirt: Ensure swtpm_ioctl is available for vTPM support" 2024-08-09 05:11:11 +00:00
melanie witt f63029b461 libvirt: Remove node device XML validate flags
Node device XML validation flags [1]:

  VIR_NODE_DEVICE_(CREATE|DEFINE)_XML_VALIDATE

were added in libvirt 8.10.0 but we support older libvirt versions
which will raise an AttributeError when flag access is attempted.

We are not currently using the flags (nothing calling with
validate=True) so this removes the flags from the code entirely. If the
flags are needed in the future, they can be added again at that time.

Closes-Bug: #2076163

[1] https://github.com/libvirt/libvirt/commit/d8791c3c7caa6e3cadaf98a5a2c94b232ac30fed

Change-Id: I015d9b7cad413986058da4d29ca7711c844bfa84
2024-08-07 16:31:58 +00:00
Zuul bb2d7f9cad Merge "[tools] Backport validator: handle unmaintained" 2024-07-30 18:15:40 +00:00
Zuul 75e2175254 Merge "[tools] Ignore bot generated patches" 2024-07-30 18:15:34 +00:00
Takashi Kajinami 510cc2404e libvirt: Detect vtpm support by libvirt
Libvirt 8.0.0 introduced the field to tell availability of TPM support,
which internally checks availability of swtpm[1]. We can use this
feature instead of implementing the own logic to detect availability.
The feature in libvirt relies on libvirt itself, so allows us to ensure
the swtpm binaries are present in the PATH used by libvirt, not in one
used by nova-compute.

In addition, libvirt 8.6.0 introduced the additional field to expose
available TPM versions[2], which can be used to report available TPM
versions.

<domainCapabilities>
  <devices>
    <tpm supported='yes'>
      <enum name='model'>
        <value>tpm-tis</value>
        <value>tpm-crb</value>
      </enum>
      <enum name='backendModel'>
        <value>passthrough</value>
        <value>emulator</value>
        <value>external</value>
      </enum>
      <enum name='backendVersion'>
        <value>1.2</value>
        <value>2.0</value>
      </enum>
    </tpm>
  </devices>
</domainCapabilities>

[1] https://github.com/libvirt/libvirt/commit/6f7fc0b54ad97e62e10cd6f9524fcc29b4bb4cc5
[2] https://github.com/libvirt/libvirt/commit/1277a9c884039e92765c977917420511f45e52e8

Partially-Implements: blueprint libvirt-detect-vtpm-support
Change-Id: I9d07635883f413b8e91312f602a3f5de8f3bf266
2024-07-27 22:08:47 +09:00
Takashi Kajinami 9a11bb2523 libvirt: Ensure swtpm_ioctl is available for vTPM support
Libvirt uses swtpm_ioctl to terminate swtpm processes. If the binary
does not exist, swtpm processes are kept running after the associated
VM terminates, because QEMU does not send shutdown to swtpm.

Closes-Bug: #2052761
Change-Id: I682f71512fc33a49b8dfe93894f144e48f33abe6
2024-07-27 22:08:47 +09:00
Zuul 7a7427691e Merge "Fix test_vmdk_bad_descriptor_mem_limit and test_vmdk_bad_descriptor_mem_limit_stream_optimized" 2024-07-26 12:06:25 +00:00
Zuul eb5e3374bc Merge "Remove AMI snapshot format special case" 2024-07-25 17:29:30 +00:00
Zuul 73012258e7 Merge "[CI] Replace deprecated regex" 2024-07-24 23:38:49 +00:00
Dan Smith d5a631ba77 Remove AMI snapshot format special case
Note that this includes seemingly-unrelated test changes because we
were actually skipping the snapshot_running test for libvirt, which
has been a bug for years. In that test case, when we went to look
for image_meta.disk_format, that attribute was not set on the o.vo
object, which raised a NotImplementedError. That error is also checked
by the test to skip the test for drivers that do not support snapshot,
which meant that for libvirt, we haven't been running that case
beyond the point at which we create snapshot metadata and trip that
exception. Thus, once removing that, there are other mocks not in
place that are required for the test to actually run. So, this adds
mocks for qemu_img_info() calls that actually try to read the file on
disk, as well as the privsep chown() that attempts to run after.

Change-Id: Ie731045629f0899840a4680d21793a16ade9b98e
2024-07-24 11:04:55 -07:00
Zuul df39222b10 Merge "Change force_format strategy to catch mismatches" 2024-07-23 23:39:57 +00:00
Zuul 1191a49a65 Merge "conf: Clarify '[api] response_validation help' text" 2024-07-23 21:23:10 +00:00
Dan Smith 8b4c522f66 Change force_format strategy to catch mismatches
When we moved the qemu-img command in fetch_to_raw() to force the
format to what we expect, we lost the ability to identify and react
to situations where qemu-img detected a file as a format that is not
supported by us (i.e. identfied and safety-checked by
format_inspector). In the case of some of the other VMDK variants
that we don't support, we need to be sure to catch any case where
qemu-img thinks it's something other than raw when we think it is,
which will be the case for those formats we don't support.

Note this also moves us from explicitly using the format_inspector
that we're told by glance is appropriate, to using our own detection.
We assert that we agree with glance and as above, qemu agrees with
us. This helps us avoid cases where the uploader lies about the
image format, causing us to not run the appropriate safety check.
AMI formats are a liability here since we have a very hard time
asserting what they are and what they will be detected as later in
the pipeline, so there is still special-casing for those.

Closes-Bug: #2071734
Change-Id: I4b792c5bc959a904854c21565682ed3a687baa1a
2024-07-23 20:37:42 +01:00
Zuul c1046979af Merge "conf: Add '[api] response_validation' option" 2024-07-23 15:16:27 +00:00
Julien Le Jeune a3202f7bf9 Fix test_vmdk_bad_descriptor_mem_limit and test_vmdk_bad_descriptor_mem_limit_stream_optimized
These tests depend on qemu-img being installed and in the path, if it is not installed, skip them.

Change-Id: I896f16c512f24bcdd898ab002af4e5e068f66b64
Closes-bug: #2073862
Signed-off-by: Julien Le Jeune <julien.le-jeune@ovhcloud.com>
2024-07-23 16:26:19 +02:00
Zuul 8c4a2e1b47 Merge "tests: Ensure all APIs have a request query schema" 2024-07-20 09:13:12 +00:00
Zuul 92442bfaf1 Merge "api: Add remaining missing query parameter schema" 2024-07-20 08:50:32 +00:00
Stephen Finucane 9a04ed79a3 conf: Clarify '[api] response_validation help' text
Make it extra clear this is only for API response bodies.

Change-Id: Id88c828aa7bcb1eff6dd149e8a92a19649ba4b0e
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2024-07-19 13:01:01 +01:00
Sylvain Bauza 757c333c0e cpu: Only check governor type on online cores
Kernels don't accept to access the governor strategy on an offline core, so
we need to only validate strategies for online cores.

Change-Id: I14c9b268d0b97221216bd1a9ab9e48b48d6dcc2c
Closes-Bug: #2073528
2024-07-19 12:22:55 +02:00
Zuul e82854dc8c Merge "hardware: Fix image_meta.id within get_mem_encryption_constraint" 2024-07-16 04:39:35 +00:00
Elod Illes e2697de8e4 [tools] Backport validator: handle unmaintained
When the script was created there were only stable/* branches, but now
there are unmaintained/* branches as well, where the validator fails
when looking for hashes only on stable/* branches even if the given
hash is already on unmtaintained/* branch. This patch matches now both
stable/* and unmaintained/* branches.

Change-Id: I08fcc63ab0fbe5af1be70d5fde5af98bf006101c
2024-07-12 23:10:26 +02:00
Elod Illes b8f3975d36 [tools] Ignore bot generated patches
This is a fix for the test whether a patch is bot generated or not, as
that did not worked as intended. The problem is that the script is
checking the email address of the parent patch (HEAD~), which probably
should be right in case the patch would be a MERGE patch. But this is
wrong in case the patch is not a MERGE patch. This fix uses the very
same pattern as it is using for the commit message parsing: the
$commit_hash variable, which is the parent's commit hash if the patch
is a MERGE patch, and an empty string in the other case (causing to
call 'git show' on HEAD).

Change-Id: I0abc72180edf34a6dd0624a40fb8682397805eca
2024-07-12 22:53:06 +02:00
Balazs Gibizer c6d8c6972d Stabilize iso format unit tests
Some version of mkisofs does not properly handle if both the input and
the output file of the command are the same. So this commit changes the
unit tests depending on that binary to use a different files.

Related-Bug: #2059809
Change-Id: I6924eb23ff5804c22a48ec6fabcec25f061906bb
2024-07-11 08:55:40 +02:00
Zuul a305571262 Merge "[ironic] Ensure we test iterators when needed" 2024-07-09 19:11:48 +00:00
Jay Faulkner ee3ec9b8f2 [ironic] Ensure we test iterators when needed
Bug #2071972 brought it to light that we may have had some unit tests
improperly operating against lists, when generators are used by the SDK.
As a result of auditing remaining unit tests, this one instance was
found of improper testing. Fixing this should avoid future bugs like
2071972.

Related-Bug: #2071972
Change-Id: Icf9882f5f8421b150c308eb2502623f2fcb6cff6
2024-07-09 10:48:28 -07:00
Sean Mooney cc2514d02e fix qemu-img version dependent tests
while backporting Ia34203f246f0bc574e11476287dfb33fda7954fe

We observed that several of the tests showed distro specific
behavior depending on if qemu was installed in the test env,
what version is installed and how it was compiled

This change ensures that if qemu is present that it
supprot the required formats otherwise it skips the test.

Change-Id: I131996cdd7aaf1f52d4caac33b153753ff6db869
2024-07-09 15:09:09 +01:00
Zuul 78ae23807c Merge "Fix port group network metadata generation" 2024-07-09 00:18:52 +00:00
Sean Mooney b1cc39848e Add iso file format inspector
This change includes unit tests for the ISO
format inspector using mkisofs to generate
the iso files.

A test for stashing qcow content in the system_area
of an iso file is also included.

This change modifies format_inspector.detect_file_format
to evaluate all inspectors until they are complete and
raise an InvalidDiskInfo exception if multiple formats
match.

Related-Bug: #2059809
Change-Id: I7e12718fb3e1f77eb8d1cfcb9fa64e8ddeb9e712
2024-07-08 13:03:27 +01:00
Sean Mooney b5a1d3b4b2 Reproduce iso regression with deep format inspection
This change adds a reproducer for the regression in iso
file support when
workarounds.disable_deep_image_inspection = False

Change-Id: I56d8b9980b4871941ba5de91e60a7df6a40106a8
2024-07-08 13:03:25 +01:00
Zuul e4fca6f517 Merge "Server Rescue leads to Server ERROR state if original image is deleted" 2024-07-08 01:07:18 +00:00
Zuul 240296298c Merge "scheduler: fix _get_sharing_providers to support unlimited aggr" 2024-07-07 00:02:39 +00:00
Zuul cff73f518b Merge "api: Don't do version check if nothing required" 2024-07-04 23:12:18 +00:00
Zuul e4aaddc607 Merge "api: Add 'removed' decorator" 2024-07-04 23:12:11 +00:00
Zuul 5fbe975f6c Merge "api: Correct bug in flavors schema" 2024-07-04 23:06:08 +00:00
Zuul 49c4638fd5 Merge "api: Migrate to JSON Schema Draft 2020-12" 2024-07-04 21:36:50 +00:00
Zuul 9b0d691f0d Merge "port format inspector tests from glance" 2024-07-04 20:51:49 +00:00
Mohammed Naser 8558f59630 Fix port group network metadata generation
When switching to using OpenStack SDK, there was a change missed
that didn't account for the SDK returning generators instead of
a list, so the loop on ports and port groups made it so that it
started returning an empty list afterwards.

Since there is no a masse of ports for a baremetal system usually,
we take the generator into a list right away to prevent this.

Closes-Bug: #2071972
Change-Id: I90766f8c225d834bb2eec606754107ea6a212f6d
2024-07-04 14:09:23 -04:00
Zuul c39a425ba7 Merge "Fix vmdk_allowed_types checking" 2024-07-04 15:32:22 +00:00
Sean Mooney 838daa3cad port format inspector tests from glance
This commit is a direct port of the format inspector
unit tests from glance as of commit
0d8e79b713bc31a78f0f4eac14ee594ca8520999

the only changes to the test are as follows

"from glance.common import format_inspector" was updated to
"from nova.image import format_inspector"

"from glance.tests import utils as test_utils"
was replaced with "from nova import test"

"test_utils.BaseTestCase" was replaced with "test.NoDBTestCase"

"glance-unittest-formatinspector-" was replaced with
"nova-unittest-formatinspector-"

This makes the test funtional in nova.

TestFormatInspectors requries qemu-img to be installed on the
host which would be a new depency for executing unit tests.
to avoid that we skip TestFormatInspectors if qemu-img
is not installed.
TestFormatInspectorInfra and TestFormatInspectorsTargeted
do not have a qemu-img dependency so
no changes to the test assertions were required.

Change-Id: Ia34203f246f0bc574e11476287dfb33fda7954fe
2024-07-04 12:51:59 +01:00
Zuul ad44cadfc2 Merge "Additional qemu safety checking on base images" 2024-07-04 03:06:22 +00:00
Zuul 6bf5f66833 Merge "Check images with format_inspector for safety" 2024-07-03 17:18:40 +00:00
Zuul 657e86585c Merge "Reject qcow files with data-file attributes" 2024-07-03 16:23:34 +00:00
Sahid Orentino Ferdjaoui f254729a56 scheduler: fix _get_sharing_providers to support unlimited aggr
A Request-Too-Long error can be raised in case of too many aggregates
are attached to a host. The fix is to split the requests.

The request is executed by host via a periodic task. Result is set in
cache so no performances impact is expected.

The change introduce a new compute configuration option
`compute.sharing_providers_max_uuids_per_request = 200`.

Closes-bug: #2068893

Change-Id: I1355c0813cb99067ead60f9835938566289beb20
Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@industrialdiscipline.com>
2024-07-03 12:58:04 +00:00
Dan Smith 08be7b2a0d Fix vmdk_allowed_types checking
This restores the vmdk_allowed_types checking in create_image()
that was unintentionally lost by tightening the
qemu-type-matches-glance code in the fetch patch recently. Since we
are still detecting the format of base images without metadata, we
would have treated a vmdk file that claims to be raw as raw in fetch,
but then read it like a vmdk once it was used as a base image for
something else.

Change-Id: I07b332a7edb814f6a91661651d9d24bfd6651ae7
Related-Bug: #2059809
2024-07-02 13:08:40 -07:00