summaryrefslogtreecommitdiff
path: root/ironic/tests
Commit message (Collapse)AuthorAgeFilesLines
* Merge "Use association_proxy for ports node_uuid"Zuul2023-01-104-34/+11
|\
| * Use association_proxy for ports node_uuidHarald Jensås2022-12-144-34/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change adds 'node_uuid' to ironic.objects.port.Port and adds a relationship using association_proxy in models.Port. Using the association_proxy removes the need to do the node lookup to populate node uuid for ports in the api controller. NOTE: On port create a read is added to read the port from the database, this ensures node_uuid is loaded and solves the DetachedInstanceError which is otherwise raised. Bumps Port object version to 1.11 With patch: 1. Returned 20000 ports in python 2.7768702507019043 seconds from the DB. 2. Took 0.433107852935791 seconds to iterate through 20000 port objects. Ports table is roughly 12800000 bytes of JSON. 3. Took 5.662816762924194 seconds to return all 20000 ports via ports API call pattern. Without patch: 1. Returned 20000 ports in python 1.0273635387420654 seconds from the DB. 2. Took 0.4772777557373047 seconds to iterate through 20000 port objects. Ports table is roughly 12800000 bytes of JSON. 3. Took 147.8800814151764 seconds to return all 20000 ports via ports API call pattern. Conclusion: Test #1 plain dbapi.get_port_list() test is ~3 times slower, but Test #3 doing the API call pattern test is ~2500% better. Story: 2007789 Task: 40035 Change-Id: Iff204b3056f3058f795f05dc1d240f494d60672a
* | Merge "Enable alternative storage for inventory"Zuul2023-01-061-1/+45
|\ \
| * | Enable alternative storage for inventoryJakub Jelinek2022-12-061-1/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | The Ironic inspector allows users to choose between SQL, Swift and NoStore. Ironic should offer similar functionality. Story: 2010275 Task: 46204 Change-Id: Ie174904420691be64ce6ca10bca3231f45a5bc58
* | | Merge "Fix "'NoneType' object is not iterable" in RAID"Zuul2023-01-051-0/+4
|\ \ \ | |_|/ |/| |
| * | Fix "'NoneType' object is not iterable" in RAIDAija Jauntēva2022-12-161-0/+4
| |/ | | | | | | | | | | | | | | | | | | | | | | | | Do not update `raid_configs` if operation is synchronous. First, it is not needed, second, it will not be cleaned up by async periodics. As the result the data remains on the node and causes errors the next time node is in cleaning state. Story: 2010476 Task: 47037 Change-Id: Ib1850c58d1670c3555ac9b02eb7958a1b440a339
* | Merge "Fix unit tests for Python 3.11"Zuul2022-12-121-12/+13
|\ \
| * | Fix unit tests for Python 3.11Riccardo Pittau2022-12-071-12/+13
| |/ | | | | | | | | | | | | | | Mocks can no longer be provided as the specs for other Mocks. See https://github.com/python/cpython/issues/87644 and https://docs.python.org/3.11/whatsnew/3.11.html for more info. Change-Id: If7c10d9bfd0bb410b3bc5180b737439c92e515da
* | Merge "Fixes anaconda deploy for PXE boot"Zuul2022-12-121-0/+4
|\ \ | |/ |/|
| * Fixes anaconda deploy for PXE bootNisha Agarwal2022-10-071-0/+4
| | | | | | | | | | | | | | | | | | | | | | Fixes the anaconda deploy(URL based) and adds anaconda_boot entry to pxe_grub_config.template so that ProLiants can be also deployed in PXE mode. Story: 2010347 Task: 46490 Change-Id: I4b9e3a2060d9d73de5cab31cc08d3a764dc56e90
* | Merge "Get inventory from Inspector"Zuul2022-11-281-0/+29
|\ \
| * | Get inventory from InspectorJakub Jelinek2022-11-221-0/+29
| | | | | | | | | | | | | | | | | | | | | | | | Get inventory data and store it in the local database. Story: 2010275 Task: 46204 Change-Id: Id2e1462362e97d0152f3948e978a05ec16ca8e4d
* | | Merge "Align iRMC driver with Ironic's default boot_mode"Zuul2022-11-251-10/+10
|\ \ \ | |/ / |/| |
| * | Align iRMC driver with Ironic's default boot_modeVanou Ishii2022-11-061-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit modifies iRMC driver to use ironic.conf [deploy] default_boot_mode as default value of boot_mode. Before this commit, iRMC driver assumes Legacy BIOS as default boot_mode and value of default_boot_mode doesn't have any effect on iRMC driver's behavior. Story: 2010381 Task: 46643 Change-Id: Ic5a235785a1a2bb37fef38bd3a86f40125acb3d9
* | | Implements node inventory: databaseJakub Jelinek2022-11-156-0/+176
|/ / | | | | | | | | | | | | | | | | Prepare the ironic database to accommodate node inventory received from the inspector once the API is implemented. Story: 2010275 Task: 46204 Change-Id: I6b830e5cc30f1fa1f1900e7c45e6f246fa1ec51c
* | Merge "Fix the invalid glance client test"Zuul2022-11-041-15/+12
|\ \
| * | Fix the invalid glance client testDmitry Tantsur2022-10-311-15/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It relied on mocking tenacity.retry, but it's executed on class initialization. Depending on the ordering, it may do nothing or it may replace ImageService.call with a mock. Instead, add a new tenacity helper that loads an option in runtime. As a nice side effect, [glance]num_retries is now mutable. Change-Id: I2e02231d294997e824db77c998ef8d352fa69075
* | | Merge "Fix the anaconda deploy for the ISO mounted"Zuul2022-11-031-1/+2
|\ \ \ | |/ / |/| / | |/
| * Fix the anaconda deploy for the ISO mountedNisha Agarwal2022-09-291-1/+2
| | | | | | | | | | | | | | | | | | Fix the anaconda deploy for the ISO mounted on a webserver. Story: 2010322 Task: 46429 Change-Id: I2860faa7322116ffef1255709fe12f806257b069
* | Replace more instances of model_queryJulia Kreger2022-10-271-15/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The model_query call results in a nested read transaction, that does not seem to play well with SQLite support. Since it's inherently relying on the query style deprecated in SQLAlchemy 2.0, we need to migrate away from this call. As an intermediate step, change instances of model_query to session.query, making sure every call creates a session that lives as long as is needed to fetch the results. Removes a unit test which was built around creating a fake deadlock condition to test that oslo_db was working as expected. It's interaction was totally mocked, and in retooling the base method there was no easy to keep the same test logic around. Co-Authored-By: Dmitry Tantsur <dtantsur@protonmail.com> Change-Id: Ic8b1d964f7be5784e01c89bfb6c0277ea82eec2d
* | Fix double mock call in glance_service testRiccardo Pittau2022-10-201-16/+14
| | | | | | | | | | | | | | | | | | | | | | Using autospec with the most recent python-mock is more strict and tests fail if a resource is already mocked out. For an example see the failing ironic tests in the u-c patch [0] [0] https://3a727b96f9b24e3543ad-87ad413497532cf6afb3c89ad083bf93.ssl.cf1.rackcdn.com/855711/11/check/cross-ironic-py310/b1d5058/job-output.txt Change-Id: I1cf0e077417d01a8714bad96b7e90ef786f94b2e
* | Phase 3 - SQLAlchemy 2.0 CompatabilityJulia Kreger2022-10-171-105/+208
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch rewrites portions of the database migration testing to the style required to not break when SQLAlchemy 2.0 is released. The *Major* difference is a transition from using Dictionary key styles towards using object names. This is because to retrieve a dictionary form, or access a row object as a dictionary, requires it to be cast as a dictonary, but in SQLAlchemy 2.0 row result attribute .keys is no longer present, which ultimately prevents casting and loading as such. Ultimately this just meant change the tests to use the object model field labels. One other change is we now query just the columns needed to get an ORM object. This is a result of the unification of the select interface and us being unable to instantiate a current full DB object (as in models.Node in current code) against an older database version in order to perform migration validation. One last item, there appears to be a minor trivial difference in the behavior in the return of a dictionary/json response object with Postgres. Ultimately, it seems trivial, we just needed the test to be aware of the difference as it is a very low level test. Change-Id: I4d7213488ce90176893459087fe2f0491a6a61fc
* | Phase 1 - SQLAlchemy 2.0 CompatabilityJulia Kreger2022-10-137-13/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | One of the major changes in SQLAlchemy 2.0 is the removal of autocommit support. It turns out Ironic was using this quite aggressively without even really being aware of it. * Moved the declaritive_base to ORM, as noted in the SQLAlchemy 2.0 changes[0]. * Console testing caused us to become aware of issues around locking where session synchronization, when autocommit was enabled, was defaulted to False. The result of this is that you could have two sessions have different results, which could results on different threads, and where one could still attempt to lock based upon prior information. Inherently, while this basically worked, it was also sort of broken behavior. This resulted in locking being rewritten to use the style mandated in SQLAlchemy 2.0 migration documentation. This ultimately is due to locking, which is *heavily* relied upon in Ironic, and in unit testing with sqlite, there are no transactions, which means we can get some data inconsistency in unit testing as well if we're reliant upon the database to precisely and exactly return what we committed.[1] * Begins changing the query.one()/query.all() style to use explicit select statements as part of the new style mandated for migration to SQLAlchemy 2.0. * Instead of using field label strings for joined queries, use the object format, which makes much more sense now, and is part of the items required for eventual migration to 2.0. * DB queries involving Traits are now loaded using SelectInLoad as opposed to Joins. The now deprecated ORM queries were quietly and silently de-duplicating rows and providing consistent sets from the resulting joined table responses, however putting much higher CPU load on the processing of results on the client. Prior performance testing has informed us this should be a minimal overhead impact, however these queries should no longer be in transactions with the Database Servers which should offset the shift in load pattern. The reason we cannot continue to deduplicate locally in our code is because we carry Dict data sets which cannot be hashed for deduplication. Most projects have handled this by treating them as Text and then converting, but without a massive rewrite, this seems to be the viable middle ground. * Adds an explict mapping for traits and tags on the Node object to point directly to the NodeTrait and NodeTag classes. This superceeds the prior usage of a backref to make the association. * Splits SQLAlchemy class model Node into Node and NodeBase, which allows for high performance queries to skip querying for ``tags`` and ``traits``. Otherwise with the afrormentioned lookups would always execute as they are now properties as well on the Node class. This more common of a SQLAlchemy model, but Ironic's model has been a bit more rigid to date. * Adds a ``start_consoles`` and ``start_allocations`` option to the conductor ``init_host`` method. This allows unit tests to be executed and launched with the service context, while *not* also creating race conditions which resulted in failed tests. * The db API ``_paginate_query`` wrapper now contains additional logic to handle traditional ORM query responses and the newer style of unified query responses. Due to differences in queries and handling, which also was part of the driver for the creation of ``NodeBase``, as SQLAlchemy will only create an object if a base object is referenced. Also, by default, everything returned is a tuple in 1.4 with the unified interface. * Also modified one unit test which counted time.sleep calls, which is a known pattern which can create failures which are ultimately noise. Ultimately, I have labelled the remaining places which SQLAlchemy warnings are raised at for deprecation/removal of functionality, which needs to be addressed. [0] https://docs.sqlalchemy.org/en/14/changelog/migration_20.html [1] https://docs.sqlalchemy.org/en/14/dialects/sqlite.html#transaction-isolation-level-autocommit Change-Id: Ie0f4b8a814eaef1e852088d12d33ce1eab408e23
* | Add upgrade check warning for allocations dbJulia Kreger2022-10-131-0/+82
|/ | | | | | | | | | | | Adding an upgrade check to provide awareness to the state of the database in regards if an unexpected engine is in use or if the character set encoding is also not UTF8. These will raise non-fatal warnings on the upgrade status check. Change-Id: Ide0eb4690a056be557e5ea7d5ba5f6be37b50d0a Story: 2010384
* Merge "Set stage for Zed Release with 21.1"Zuul2022-09-221-1/+1
|\
| * Set stage for Zed Release with 21.1Iury Gregory Melo Ferreira2022-09-211-1/+1
| | | | | | | | | | | | | | | | | | | | This is a pre-release commit for the Yoga release following our docs [1] [1] https://docs.openstack.org/ironic/latest/contributor/releasing.html We will clean-up the releasenotes and include the prelude in other patch Change-Id: I3b8df0dce64c4ee3b20b7a714b6647d6e1ec0330
* | Merge "Implement a DHCP driver backed by dnsmasq"Zuul2022-09-222-6/+154
|\ \
| * | Implement a DHCP driver backed by dnsmasqSteve Baker2022-09-052-6/+154
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The ``[dhcp]dhcp_provider`` configuration option can now be set to ``dnsmasq`` as an alternative to ``none`` for standalone deployments. This enables the same node-specific DHCP capabilities as the ``neutron`` provider. See the ``[dnsmasq]`` section for configuration options. Change-Id: I3ab86ed68c6597d4fb4b0f2ae6d4fc34b1d59f11 Story: 2010203 Task: 45922
* | | Merge "Fix idrac-redfish RAID controller mode conversion"Zuul2022-09-221-3/+193
|\ \ \ | |_|/ |/| |
| * | Fix idrac-redfish RAID controller mode conversionAija Jauntēva2022-09-151-3/+193
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PERC 9 and PERC 10 might not be in RAID mode with no or limited RAID support. This fixes to convert any eligible controllers to RAID mode during delete_configuration clean step or deploy step. Story: 2010272 Task: 46199 Change-Id: I5e85df95a66aed9772ae0660b2c85ca3a39b96c7
* | | Merge "Concurrent Distructive/Intensive ops limits"Zuul2022-09-212-1/+109
|\ \ \
| * | | Concurrent Distructive/Intensive ops limitsJulia Kreger2022-09-202-1/+109
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Provide the ability to limit resource intensive or potentially wide scale operations which could be a symptom of a highly distructive and unplanned operation in progress. The idea behind this change is to help guard the overall deployment to prevent an overall resource exhaustion situation, or prevent an attacker with valid credentials from putting an entire deployment into a potentially disasterous cleaning situation since ironic only other wise limits concurrency based upon running tasks by conductor. Story: 2010007 Task: 45140 Change-Id: I642452cd480e7674ff720b65ca32bce59a4a834a
* | | Merge "Fix nodes stuck at cleaning on Network Service issues"Zuul2022-09-201-6/+20
|\ \ \
| * | | Fix nodes stuck at cleaning on Network Service issuesKaifeng Wang2022-09-201-6/+20
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ironic validates network interface before the cleaning process, currently invalid parameter is captured but for not others. There is chance that a node could be stucked at the cleaning state on networking issues or temporary service down of neutron service. This patch adds NetworkError to the exception hanlding to cover such cases. Change-Id: If20de2ad4ae4177dea10b7ebfc9a91ca6fbabdb9
* | | Merge "tests: Add a WarningsFixture"Zuul2022-09-201-0/+81
|\ \ \
| * | | tests: Add a WarningsFixtureStephen Finucane2022-09-081-0/+81
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We will use this in the future to prepare for SQLAlchemy 2.0. For now, we're simply using it to filter out some of the more annoying warnings and to highlight general SQLAlchemy issues we need to address. Change-Id: I7c26c20e4b36c4f3b98873939677b966ec6186a5 Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
* | | | Merge "Correct Image properties lookup for paths"Zuul2022-09-201-60/+44
|\ \ \ \ | |_|/ / |/| | |
| * | | Correct Image properties lookup for pathsJulia Kreger2022-08-101-60/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The image lookup process, when handed a path attempts to issue a HEAD request against the path and gets a response which is devoid of details like a content length or any properties. This is expected behavior, however if we have a path, we also know we don't need to explicitly attempt to make an HTTP HEAD request in an attempt to match the glance ``kernel_id`` -> ``kernel`` and similar value population behavior. Also removes an invalid test which was written before the overall method was fully understood. And fixes the default fallback for kickstart template configuration, so that it uses a URL instead of a direct file path. And fix logic in the handling of image property result set, where the code previously assumed a ``stage2`` ramdisk was always required, and based other cleanup upon that. Change-Id: I589e9586d1279604a743746952aeabbc483825df
* | | | Merge "Adds create_csr and add_https_certificate clean step"Zuul2022-09-132-0/+150
|\ \ \ \
| * | | | Adds create_csr and add_https_certificate clean stepankit2022-09-092-0/+150
| | |/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds new clean steps create_csr and add_https_certificate to allow users to create certificate signing request and adds https certificate to the iLO. Story: 2009118 Task: 43016 Change-Id: I1e2da0e0da5e397b6e519e817e0bf60a02bbf007
* | | | Merge "Enables event subscription methods for ilo and ilo5 hardware types"Zuul2022-09-122-0/+88
|\ \ \ \
| * | | | Enables event subscription methods for ilo and ilo5 hardware typesmallikarjuna.kolagatla2022-09-052-0/+88
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Enables event subscription methods by inheriting RedfishVendorPassthru for ilo and ilo5 hardware types Story: 2010207 Task: 45931 Change-Id: I96f7e44069402e3f1d25bcd527408008ca5e77cb
* | | | | Cleanup submitted SNMP driver code for additional PDUsAlexander Lingo2022-09-091-0/+80
| |/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Resolved PEP8 issues * Trimmed comments to remove extraneous information * Changed rfc1902.Integer() calls to the correct snmp.Integer() calls * Fixed power state logic checking for new PDUs that don't have transitional states (e.g., 'pendingOn') * Removed redundant warning messages * Added unit tests for Raritan PD2, ServerTech Sentry 3/4, and Vertiv Geist drivers * Updated documentation to list tested PDUs for the new drivers * Updated release notes Change-Id: I9da7b9042b817c346f75a44cd8287e1f63efcb56
* | | | Merge "CI: anaconda: permit tls certificate validation bypass"Zuul2022-09-051-0/+20
|\ \ \ \
| * | | | CI: anaconda: permit tls certificate validation bypassJulia Kreger2022-08-171-0/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The stock anaconda template previously lacked any ability to indicate "don't validate the tls certificate". The capability for the installation to operate *without* requiring this to be the case is necessary for efficient and simple CI testing as injecting CA certificates is an overly complex interaction for CI testing. Also updates the overall anaconda documentation to indicate the constraint exists, but does not indicate explicitly how to disable the setting via ironic.conf. Change-Id: Ia8e4320cbedb205ab183af121da53562792a8faa
* | | | | Merge "Redfish: Consider password part of the session cache"Zuul2022-09-051-0/+16
|\ \ \ \ \
| * | | | | Redfish: Consider password part of the session cacheJulia Kreger2022-08-251-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, when a password change occured in ironic, the session would not be invalidated, and this, in theory, could lead to all sorts of issues with the old password still being re-used for authentication. In a large environment where credentials for BMCs may not be centralized, this can quickly lead to repeated account lockout experiences for the BMC service account. Anyhow, now we consider it in tracking the sessions, so when the saved password is changed, a new session is established, and the old session is eventually expired out of the cache. Change-Id: I49e1907b89a9096aa043424b205e7bd390ed1a2f
* | | | | | Merge "Allow project scoped admins to create/delete nodes"Zuul2022-08-313-9/+87
|\ \ \ \ \ \
| * | | | | | Allow project scoped admins to create/delete nodesJulia Kreger2022-08-173-9/+87
| | |_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds capabilites for a project scoped admin to create and delete nodes in Ironic's API. These nodes are automatically associated with the project of the requestor. Effectively, this does allow anyone with sufficient privilges, i.e. admin, in an OpenStack deployment to be able to create new baremetal nodes and delete those baremetal nodes. In this case, the user has the "owner" level of rights in the RBAC model. Change-Id: I3fd9ce5de0bc600275b5c4b7a95b0f9405342688
* | | | | | redfish: fixes usage of ValueDisplayNameDmitry Tantsur2022-08-261-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It's spelled this way, not DisplayValueName. Change-Id: I170d78bdb7ed0f6c36a80a9f2ceb9629f44394ed